mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 02:40:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| /**********************************************************************
 | |
| * 
 | |
| *
 | |
| *
 | |
| **********************************************************************/
 | |
| ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
 | |
| (function(require){ var module={} // make module AMD/node compatible...
 | |
| /*********************************************************************/
 | |
| 
 | |
| // XXX get actual diff path...
 | |
| var diff = require('lib/diff')
 | |
| 
 | |
| var actions = require('lib/actions')
 | |
| var features = require('lib/features')
 | |
| 
 | |
| var core = require('features/core')
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| 
 | |
| // XXX get diff and save new reference state...
 | |
| var save = function(){
 | |
| 	var res = this.diff()
 | |
| 	this.__reference_state = this.josn()
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| var load = function(diff){
 | |
| 	// XXX
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| // XXX we need a separate feature for fs stuff...
 | |
| // XXX format:
 | |
| // 		- we should separate:
 | |
| // 			.data
 | |
| // 			.images
 | |
| // 			.collections
 | |
| // 			...
 | |
| // 			should we use the same mechanics as the original save/load???
 | |
| 
 | |
| var DiffActions = actions.Actions({
 | |
| 	// XXX this must be read-only...
 | |
| 	__reference_state: null,
 | |
| 	__changes_stack: null,
 | |
| 
 | |
| 	diff: [`- System/`,
 | |
| 		// XXX should this get separated diffs or one big diff???
 | |
| 		// 		...i.e. get and arg to filter sections???
 | |
| 		function(){
 | |
| 			return diff.Diff(this.__reference_state, this.json()) }],
 | |
| 
 | |
| 	// XXX EXPERIMENTAL -- this can be another way to implement undo or 
 | |
| 	// 		a way to do "pre-save manual undo points"...
 | |
| 	// 		...the problem with undo is that .popChange(..) does not 
 | |
| 	// 		care about what changed and how and will simply reload the 
 | |
| 	// 		whole state...
 | |
| 	// XXX do we need these???
 | |
| 	pushChange: ['- System/',
 | |
| 		core.doc`Create a save point
 | |
| 		`,
 | |
| 		function(){
 | |
| 			var stack = this.__changes_stack = this.__changes_stack || []
 | |
| 			stack.push(save.call(this))
 | |
| 		}],
 | |
| 	popChange: ['- System/',
 | |
| 		core.doc`Restore to a save point
 | |
| 		`,
 | |
| 		function(n){
 | |
| 			var stack = this.__changes_stack || []
 | |
| 			n = n == null ? 
 | |
| 					0
 | |
| 				: (n == 'all' || n == '*') ? 
 | |
| 					stack.length
 | |
| 				: n
 | |
| 			var state = this.josn()
 | |
| 			stack
 | |
| 				&& stack
 | |
| 					.splice(-n-1)
 | |
| 					.forEach(function(d){
 | |
| 						state = d.unpatch(state) })
 | |
| 			// XXX is this the correct way to go???
 | |
| 			this.load(state)
 | |
| 		}],
 | |
| 
 | |
| 	// XXX hook into save/load workflows...
 | |
| 	// XXX
 | |
| })
 | |
| 
 | |
| var Diff = 
 | |
| module.Diff = core.ImageGridFeatures.Feature({
 | |
| 	title: '',
 | |
| 	doc: '',
 | |
| 
 | |
| 	// XXX
 | |
| 	tag: 'diff',
 | |
| 	depends: [
 | |
| 		// XXX
 | |
| 	],
 | |
| 
 | |
| 	actions: FeatureActions, 
 | |
| 
 | |
| 	handlers: [],
 | |
| })
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * vim:set ts=4 sw=4 :                               */ return module })
 |