| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							| 
									
										
										
										
											2016-08-21 02:19:24 +03:00
										 |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							| 
									
										
										
										
											2016-08-20 22:49:36 +03:00
										 |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | var toggler = require('lib/toggler') | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | var actions = require('lib/actions') | 
					
						
							|  |  |  | var features = require('lib/features') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var core = require('features/core') | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | var widgets = require('features/ui-widgets') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var widget = require('lib/widget/widget') | 
					
						
							|  |  |  | var browse = require('lib/widget/browse') | 
					
						
							|  |  |  | var overlay = require('lib/widget/overlay') | 
					
						
							|  |  |  | var drawer = require('lib/widget/drawer') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var browseWalk = require('lib/widget/browse-walk') | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ExperimentActions = actions.Actions({ | 
					
						
							| 
									
										
										
										
											2018-04-14 15:17:42 +03:00
										 |  |  | 	// NOTE: we do not want to pick and chose changes as that might lead 
 | 
					
						
							|  |  |  | 	// 		to inconsistencies...
 | 
					
						
							|  |  |  | 	// 		...a better way would be to go would be to:
 | 
					
						
							|  |  |  | 	// 			- reset
 | 
					
						
							|  |  |  | 	// 			- undo / redo
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 	// XXX depends on ui, ...
 | 
					
						
							|  |  |  | 	// XXX would be nice to have a universal .save() action...
 | 
					
						
							| 
									
										
										
										
											2018-04-17 21:47:12 +03:00
										 |  |  | 	// XXX can we make this into a dialog that would stop a certain 
 | 
					
						
							|  |  |  | 	// 		action until the user confirms or aborts... e.g. warn of 
 | 
					
						
							|  |  |  | 	// 		unsaved changes when navigating away...
 | 
					
						
							| 
									
										
										
										
											2018-04-21 15:14:41 +03:00
										 |  |  | 	// XXX move this to ui-widgets...
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 	browseChanges: ['Experimental/$Changes...', | 
					
						
							| 
									
										
										
										
											2018-04-24 16:38:12 +03:00
										 |  |  | 		core.doc`
 | 
					
						
							|  |  |  | 		`,
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 		{dialogTitle: 'Unsaved changes'}, | 
					
						
							|  |  |  | 		widgets.makeUIDialog(function(path){ | 
					
						
							|  |  |  | 			var that = this | 
					
						
							| 
									
										
										
										
											2018-12-31 04:38:38 +03:00
										 |  |  | 			var comment | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 			var handlers_setup = false | 
					
						
							|  |  |  | 			return browse.makeLister(null, function(_, make){ | 
					
						
							|  |  |  | 				var keys = Object.keys(that.changes || {}) | 
					
						
							|  |  |  | 				if(keys.length == 0){ | 
					
						
							|  |  |  | 					make.Empty('No changes...') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-18 17:13:16 +03:00
										 |  |  | 				// list changes...
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 				} else { | 
					
						
							|  |  |  | 					keys | 
					
						
							|  |  |  | 						.forEach(function(key){ | 
					
						
							| 
									
										
										
										
											2018-04-14 15:17:42 +03:00
										 |  |  | 							var opts = {} | 
					
						
							|  |  |  | 							if(that.changes[key] instanceof Array){ | 
					
						
							|  |  |  | 								opts.attrs = { | 
					
						
							|  |  |  | 									count: that.changes[key].length | 
					
						
							|  |  |  | 								} | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-16 00:46:26 +03:00
										 |  |  | 							// XXX show human-readable info... (???)
 | 
					
						
							| 
									
										
										
										
											2018-04-14 15:17:42 +03:00
										 |  |  | 							make(key, opts) | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 						}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-31 04:38:38 +03:00
										 |  |  | 					// save comment...
 | 
					
						
							|  |  |  | 					if(that.getSaveComment){ | 
					
						
							|  |  |  | 						make('---') | 
					
						
							|  |  |  | 						comment = comment  | 
					
						
							|  |  |  | 							|| that.getSaveComment() | 
					
						
							|  |  |  | 						// XXX this behaves in an odd manner...
 | 
					
						
							|  |  |  | 						make.Editable(['$Comment: ', comment],  | 
					
						
							|  |  |  | 							{ | 
					
						
							|  |  |  | 								multiline: true, | 
					
						
							|  |  |  | 								abort_keys: [ | 
					
						
							|  |  |  | 									'Esc', | 
					
						
							|  |  |  | 								], | 
					
						
							|  |  |  | 							}) | 
					
						
							|  |  |  | 							.on('edit-commit', function(_, text){ | 
					
						
							|  |  |  | 								that.setSaveComment( | 
					
						
							|  |  |  | 									$(this) | 
					
						
							|  |  |  | 										.find('.text') | 
					
						
							|  |  |  | 										.last() | 
					
						
							|  |  |  | 										.text()) | 
					
						
							|  |  |  | 							}) | 
					
						
							|  |  |  | 							.on('edit-abort', function(){ | 
					
						
							|  |  |  | 								$(this) | 
					
						
							|  |  |  | 									.find('.text') | 
					
						
							|  |  |  | 									.last() | 
					
						
							|  |  |  | 									.text(comment) | 
					
						
							|  |  |  | 							}) | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 					make('---') | 
					
						
							|  |  |  | 					make('Save', { | 
					
						
							|  |  |  | 						open: function(){ | 
					
						
							| 
									
										
										
										
											2018-12-31 04:38:38 +03:00
										 |  |  | 							that.setSaveComment  | 
					
						
							|  |  |  | 								&& that.setSaveComment(comment) | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 							that.saveIndexHere  | 
					
						
							|  |  |  | 								&& that.saveIndexHere() | 
					
						
							|  |  |  | 						}, | 
					
						
							|  |  |  | 						close: function(){ | 
					
						
							|  |  |  | 							that.off('markChanged', 'changes-dialog-updater') | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if(!handlers_setup){ | 
					
						
							|  |  |  | 						// XXX need to clean this up in a better way...
 | 
					
						
							|  |  |  | 						// XXX this should also track .changes...
 | 
					
						
							|  |  |  | 						that.on('markChanged', 'changes-dialog-updater', function(){ | 
					
						
							|  |  |  | 							make.dialog.update() | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 						handlers_setup = true | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 		})], | 
					
						
							| 
									
										
										
										
											2018-04-29 18:19:58 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	unsavedChanges: ['- Experimental/', | 
					
						
							|  |  |  | 		function(){ | 
					
						
							|  |  |  | 		}], | 
					
						
							| 
									
										
										
										
											2019-10-08 01:54:18 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// construction of new "virtual images"...
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							|  |  |  | 	// XXX should this be restricted to collections???
 | 
					
						
							|  |  |  | 	// XXX should these be importable???
 | 
					
						
							|  |  |  | 	// 		i.e. exported as json to <title>.virt and imported back...
 | 
					
						
							|  |  |  | 	// 		...might be a good idea to add custom import/export handlers...
 | 
					
						
							|  |  |  | 	// 
 | 
					
						
							|  |  |  | 	// XXX do better arg processing -- handle metadata correctly...
 | 
					
						
							|  |  |  | 	// XXX add export support for this type of stuff...
 | 
					
						
							|  |  |  | 	// XXX add default named templates...
 | 
					
						
							|  |  |  | 	// XXX add svg templates...
 | 
					
						
							|  |  |  | 	// 		- blank (white/black/gray/...)
 | 
					
						
							|  |  |  | 	// 		- title
 | 
					
						
							|  |  |  | 	// 		- text
 | 
					
						
							|  |  |  | 	// XXX move to 'virtual-images' feature...
 | 
					
						
							|  |  |  | 	makeVirtualImage: ['Experimental/', | 
					
						
							|  |  |  | 		function(ref, offset, metadata){ | 
					
						
							|  |  |  | 			ref = ref || 'current' | 
					
						
							|  |  |  | 			offset = offset || 'after'	 | 
					
						
							|  |  |  | 			offset = offset == 'after' ?  | 
					
						
							|  |  |  | 					1  | 
					
						
							|  |  |  | 				: offset == 'before' ?  | 
					
						
							|  |  |  | 					0 | 
					
						
							|  |  |  | 				: typeof(offset) == typeof(123) ? | 
					
						
							|  |  |  | 					offset | 
					
						
							|  |  |  | 				: 0 | 
					
						
							|  |  |  | 			// XXX revise...
 | 
					
						
							|  |  |  | 			metadata = arguments[arguments.length-1] instanceof Object ? | 
					
						
							|  |  |  | 				arguments[arguments.length-1] | 
					
						
							|  |  |  | 				: null | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var data = this.data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			ref = data.getImage(ref) | 
					
						
							|  |  |  | 			var r = data.getRibbon(ref) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var gid = data.newGID() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// place image into data...
 | 
					
						
							|  |  |  | 			var order = data.order | 
					
						
							|  |  |  | 			order.splice(order.indexOf(ref)+offset,0, gid) | 
					
						
							|  |  |  | 			var ribbon = data.ribbons[r] | 
					
						
							|  |  |  | 			ribbon.splice(ribbon.indexOf(ref)+offset,0, gid) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// update data...
 | 
					
						
							|  |  |  | 			data.updateImagePositions() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// update metadata...
 | 
					
						
							|  |  |  | 			metadata | 
					
						
							|  |  |  | 				&& (this.images[gid] = metadata) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// focus new image...
 | 
					
						
							|  |  |  | 			// NOTE: this should update the view too...
 | 
					
						
							|  |  |  | 			this.focusImage(gid) | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 	// XXX
 | 
					
						
							|  |  |  | 	makeVirtualBlank: ['Experimental/', | 
					
						
							|  |  |  | 		function(){ | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 	// XXX
 | 
					
						
							|  |  |  | 	makeVirtualText: ['Experimental/', | 
					
						
							|  |  |  | 		function(){ | 
					
						
							|  |  |  | 		}], | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ExperimentFeature =  | 
					
						
							|  |  |  | module.ExperimentFeature = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'experiments', | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-12 01:40:26 +03:00
										 |  |  | 	//isApplicable: function(actions){ return actions.experimental },
 | 
					
						
							| 
									
										
										
										
											2015-12-17 03:34:20 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	actions: ExperimentActions, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers: [ | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							| 
									
										
										
										
											2016-08-20 22:49:36 +03:00
										 |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |