mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 10:50:08 +00:00 
			
		
		
		
	added full crop interface and migrated cropping modes to use in (marked-only, single ribbon); fixed a save in cropped mode bug...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									4a2b37b67e
								
							
						
					
					
						commit
						e8a18b2a55
					
				| @ -93,11 +93,12 @@ Roadmap | ||||
| 	 | ||||
| 
 | ||||
| 
 | ||||
| [_] 30% Gen 3 current todo | ||||
| 	[_] 61% High priority | ||||
| [_] 29% Gen 3 current todo | ||||
| 	[_] 59% High priority | ||||
| 		[_] add indicator to ribbon up/down navigation in full screen... | ||||
| 		| this might be a number or some kind of animation... | ||||
| 		[_] BUG: sometimes images.json folder is created... | ||||
| 		[_] rework the marks.js/modes.js to enable multi-level cropping... | ||||
| 		[_] 0% Priority tasks | ||||
| 			[_] full archive index | ||||
| 				[_] segmented loading of images and data | ||||
| @ -272,6 +273,7 @@ Roadmap | ||||
| 			[_] remove extra and repetitive actions | ||||
| 			[_] caching config | ||||
| 		[_] side-by side view... | ||||
| 		[X] BUG: cropping in cropped mode will not save the whole data... | ||||
| 		[X] 100% BUG: sometimes the previews are not updated... | ||||
| 			[X] wrong resolution preview is loaded | ||||
| 			| when coming out of single-image-mode after moving to a  | ||||
|  | ||||
							
								
								
									
										119
									
								
								ui/data.js
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								ui/data.js
									
									
									
									
									
								
							| @ -109,6 +109,8 @@ var IMAGES_CREATED = false | ||||
| 
 | ||||
| var MARKED = [] | ||||
| 
 | ||||
| var CROP_STACK = [] | ||||
| 
 | ||||
| // NOTE: these are named: <mode>-<feature>
 | ||||
| var SETTINGS = { | ||||
| 	'global-theme': null, | ||||
| @ -1077,31 +1079,6 @@ function loadSettings(){ | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Crop view to only given gids
 | ||||
| //
 | ||||
| // XXX make keep_ribbons option work...
 | ||||
| function cropDataToGIDs(gids, keep_ribbons){ | ||||
| 	var cur = DATA.current | ||||
| 	var old_data = DATA | ||||
| 	DATA = { | ||||
| 		varsion: '2.0', | ||||
| 		current: null, | ||||
| 		ribbons: [ | ||||
| 			gids | ||||
| 		], | ||||
| 		order: DATA.order.slice(), | ||||
| 	} | ||||
| 	cur = getGIDBefore(cur, 0) | ||||
| 	cur = cur == null ? gids[0] : cur | ||||
| 	DATA.current = cur  | ||||
| 
 | ||||
| 	reloadViewer() | ||||
| 	updateImages() | ||||
| 
 | ||||
| 	return old_data | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /********************************************************************** | ||||
| * Image caching... | ||||
| @ -1177,6 +1154,98 @@ function getPrevLocation(){ | ||||
| * Actions... | ||||
| */ | ||||
| 
 | ||||
| /******************************************************* Crop Data ***/ | ||||
| 
 | ||||
| function isViewCropped(){ | ||||
| 	return !(CROP_STACK.length == 0) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function getAllData(){ | ||||
| 	if(!isViewCropped()){ | ||||
| 		return DATA | ||||
| 	} else { | ||||
| 		return CROP_STACK[0] | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // XXX make keep_ribbons option work...
 | ||||
| function makeCroppedData(gids, keep_ribbons){ | ||||
| 	var cur = DATA.current | ||||
| 	var old_data = DATA | ||||
| 	var res = { | ||||
| 		varsion: '2.0', | ||||
| 		current: null, | ||||
| 		ribbons: [], | ||||
| 		order: DATA.order.slice(), | ||||
| 	} | ||||
| 
 | ||||
| 	// flat single ribbon crop...
 | ||||
| 	if(!keep_ribbons){ | ||||
| 		res.ribbons[0] = gids | ||||
| 
 | ||||
| 	// keep the ribbon structure...
 | ||||
| 	} else { | ||||
| 		$.each(DATA.ribbons, function(_, e){ | ||||
| 			e = e.filter(function(ee){ return gids.indexOf(ee) >= 0 }) | ||||
| 			// skip empty ribbons...
 | ||||
| 			if(e.length != 0){ | ||||
| 				res.ribbons.push(e) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| 	cur = getGIDBefore(cur, 0) | ||||
| 	cur = cur == null ? gids[0] : cur | ||||
| 	res.current = cur  | ||||
| 
 | ||||
| 	return res | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function cropDataTo(gids, keep_ribbons){ | ||||
| 	var prev_state = DATA | ||||
| 
 | ||||
| 	CROP_STACK.push(prev_state) | ||||
| 	DATA = makeCroppedData(gids, keep_ribbons) | ||||
| 
 | ||||
| 	reloadViewer() | ||||
| 	updateImages() | ||||
| 
 | ||||
| 	return prev_state | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function uncropData(){ | ||||
| 	if(!isViewCropped()){ | ||||
| 		return DATA | ||||
| 	} | ||||
| 	var prev_state = DATA | ||||
| 
 | ||||
| 	DATA = CROP_STACK.pop() | ||||
| 
 | ||||
| 	reloadViewer() | ||||
| 	updateImages() | ||||
| 
 | ||||
| 	return prev_state | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| function showAllData(){ | ||||
| 	var prev_state = DATA | ||||
| 
 | ||||
| 	DATA = getAllData() | ||||
| 	CROP_STACK = [] | ||||
| 
 | ||||
| 	reloadViewer() | ||||
| 	updateImages() | ||||
| 
 | ||||
| 	return prev_state | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /********************************************************* Workers ***/ | ||||
| 
 | ||||
| // get/create a named worker queue...
 | ||||
|  | ||||
| @ -438,7 +438,7 @@ function saveFileState(name, no_normalize_path){ | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	dumpJSON(name + '-data.json', DATA) | ||||
| 	dumpJSON(name + '-data.json', getAllData()) | ||||
| 	// XXX do we need to do this???
 | ||||
| 	saveFileMarks(name) | ||||
| 
 | ||||
|  | ||||
| @ -48,7 +48,7 @@ function loadLocalStorageData(attr){ | ||||
| } | ||||
| function saveLocalStorageData(attr){ | ||||
| 	attr = attr == null ? DATA_ATTR : attr | ||||
| 	localStorage[attr] = JSON.stringify(DATA) | ||||
| 	localStorage[attr] = JSON.stringify(getAllData()) | ||||
| 	saveLocalStorageBaseURL(attr) | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										23
									
								
								ui/marks.js
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								ui/marks.js
									
									
									
									
									
								
							| @ -16,7 +16,7 @@ | ||||
| // NOTE: MARKED may contain both gids that are not loaded and that do 
 | ||||
| // 		not exist, as there is no way to distinguish between the two 
 | ||||
| // 		situations the cleanup is optional...
 | ||||
| function loadMarkedOnlyData(cmp, no_cleanout_marks){ | ||||
| function cropMarkedImages(cmp, no_cleanout_marks){ | ||||
| 	cmp = cmp == null ? imageOrderCmp : cmp | ||||
| 	var cur = DATA.current | ||||
| 	var marked = MARKED.slice().sort(cmp) | ||||
| @ -34,27 +34,12 @@ function loadMarkedOnlyData(cmp, no_cleanout_marks){ | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	ALL_DATA = cropDataToGIDs(marked) | ||||
| 	ALL_DATA = cropDataTo(marked) | ||||
| 
 | ||||
| 	return DATA | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // XXX name this in a better way...
 | ||||
| function loadAllImages(){ | ||||
| 	var cur = DATA.current | ||||
| 	DATA = ALL_DATA | ||||
| 	// NOTE: if we do not do this the user will lose context every time
 | ||||
| 	// 		returning from marks only view...
 | ||||
| 	DATA.current = cur | ||||
| 	reloadViewer() | ||||
| 	// XXX FIX: for some reason not all previews get updated to the 
 | ||||
| 	// 		right size...
 | ||||
| 	updateImages() | ||||
| 	return DATA | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /********************************************************************** | ||||
| * Modes | ||||
| @ -72,9 +57,9 @@ var toggleMarkedOnlyView = createCSSClassToggler( | ||||
| 		}, | ||||
| 		function(action){ | ||||
| 			if(action == 'on'){ | ||||
| 				loadMarkedOnlyData() | ||||
| 				cropMarkedImages() | ||||
| 			} else { | ||||
| 				loadAllImages() | ||||
| 				uncropData() | ||||
| 			} | ||||
| 		}) | ||||
| 
 | ||||
|  | ||||
| @ -184,13 +184,9 @@ var toggleSingleRibbonMode = createCSSClassToggler( | ||||
| 		}, | ||||
| 		function(action){ | ||||
| 			if(action == 'on'){ | ||||
| 				ALL_DATA = cropDataToGIDs(DATA.ribbons[getRibbonIndex()].slice()) | ||||
| 				cropDataTo(DATA.ribbons[getRibbonIndex()].slice()) | ||||
| 			} else { | ||||
| 				var cur = DATA.current | ||||
| 				DATA = ALL_DATA | ||||
| 				DATA.current = cur | ||||
| 				reloadViewer() | ||||
| 				updateImages() | ||||
| 				uncropData() | ||||
| 			} | ||||
| 		}) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user