mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 03:10:07 +00:00 
			
		
		
		
	basic bookmarks now working...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									a455e55b4d
								
							
						
					
					
						commit
						ee31fa70c5
					
				
							
								
								
									
										26
									
								
								ui/data.js
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ui/data.js
									
									
									
									
									
								
							| @ -146,9 +146,6 @@ var IMAGES_FILE_DEFAULT = 'images.json' | |||||||
| var IMAGES_FILE_PATTERN = /^[0-9]*-images.json$/ | var IMAGES_FILE_PATTERN = /^[0-9]*-images.json$/ | ||||||
| var IMAGES_DIFF_FILE_PATTERN = /^[0-9]*-images-diff.json$/ | var IMAGES_DIFF_FILE_PATTERN = /^[0-9]*-images-diff.json$/ | ||||||
| 
 | 
 | ||||||
| var MARKED_FILE_DEFAULT = 'marked.json' |  | ||||||
| var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/ |  | ||||||
| 
 |  | ||||||
| var DATA_FILE_DEFAULT = 'data.json' | var DATA_FILE_DEFAULT = 'data.json' | ||||||
| var DATA_FILE_PATTERN = /^[0-9]*-data.json$/ | var DATA_FILE_PATTERN = /^[0-9]*-data.json$/ | ||||||
| 
 | 
 | ||||||
| @ -170,6 +167,8 @@ var SYNC_IMG_LOADER = false | |||||||
| //
 | //
 | ||||||
| var SETUP_BINDINGS = [] | var SETUP_BINDINGS = [] | ||||||
| 
 | 
 | ||||||
|  | var IMAGE_UPDATERS = [] | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /********************************************************************** | /********************************************************************** | ||||||
| @ -508,9 +507,12 @@ function getGIDBefore(gid, ribbon, search, data){ | |||||||
| 	// XXX get a ribbon without getting into DOM...
 | 	// XXX get a ribbon without getting into DOM...
 | ||||||
| 	// 		...dependency leek...
 | 	// 		...dependency leek...
 | ||||||
| 	ribbon = ribbon == null ? getGIDRibbonIndex(gid, data) : ribbon | 	ribbon = ribbon == null ? getGIDRibbonIndex(gid, data) : ribbon | ||||||
| 	search = search == null ? binSearch : search |  | ||||||
| 	//search = search == null ? match2(linSearch, binSearch) : search
 |  | ||||||
| 	ribbon = typeof(ribbon) == typeof(123) ? data.ribbons[ribbon] : ribbon | 	ribbon = typeof(ribbon) == typeof(123) ? data.ribbons[ribbon] : ribbon | ||||||
|  | 	// get the current ribbon if gid is not in any of the loaded 
 | ||||||
|  | 	// ribbons (crop mode)...
 | ||||||
|  | 	ribbon = ribbon == null ? data.ribbons[getGIDRibbonIndex(null, data)] : ribbon | ||||||
|  | 	//search = search == null ? match2(linSearch, binSearch) : search
 | ||||||
|  | 	search = search == null ? binSearch : search | ||||||
| 	var order = data.order | 	var order = data.order | ||||||
| 
 | 
 | ||||||
| 	var target = order.indexOf(gid) | 	var target = order.indexOf(gid) | ||||||
| @ -1128,16 +1130,9 @@ function updateImageIndicators(gid, image){ | |||||||
| 	gid = gid == null ? getImageGID() : gid | 	gid = gid == null ? getImageGID() : gid | ||||||
| 	image = image == null ? getImage() : $(image) | 	image = image == null ? getImage() : $(image) | ||||||
| 
 | 
 | ||||||
| 	// marks...
 | 	IMAGE_UPDATERS.forEach(function(update){ | ||||||
| 	if(MARKED.indexOf(gid) != -1){ | 		update(gid, image) | ||||||
| 		image.addClass('marked') | 	}) | ||||||
| 		// XXX
 |  | ||||||
| 		_addMark('selected', gid, image) |  | ||||||
| 	} else { |  | ||||||
| 		image.removeClass('marked') |  | ||||||
| 		// XXX
 |  | ||||||
| 		_removeMark('selected', gid, image) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	return image | 	return image | ||||||
| } | } | ||||||
| @ -1732,6 +1727,7 @@ function showImage(gid){ | |||||||
| 
 | 
 | ||||||
| 	// target is already loaded...
 | 	// target is already loaded...
 | ||||||
| 	} else { | 	} else { | ||||||
|  | 		// XXX this does not load images correctly at times...
 | ||||||
| 		centerView(focusImage(img)) | 		centerView(focusImage(img)) | ||||||
| 		centerRibbons() | 		centerRibbons() | ||||||
| 	} | 	} | ||||||
|  | |||||||
							
								
								
									
										52
									
								
								ui/files.js
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								ui/files.js
									
									
									
									
									
								
							| @ -318,17 +318,15 @@ function saveFileImages(name){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // Load image marks form file
 | function makeBasicLoader(title, file_dfl, file_pattern, finalize){ | ||||||
| //
 | 	return function(path){ | ||||||
| // NOTE: if no marks are found then set them to []
 |  | ||||||
| function loadFileMarks(path){ |  | ||||||
| 		var res = $.Deferred() | 		var res = $.Deferred() | ||||||
| 		// default locations...
 | 		// default locations...
 | ||||||
| 		if(path == null){ | 		if(path == null){ | ||||||
| 			var base = normalizePath(CACHE_DIR_VAR) | 			var base = normalizePath(CACHE_DIR_VAR) | ||||||
| 			var loader = loadLatestFile(base,  | 			var loader = loadLatestFile(base,  | ||||||
| 				MARKED_FILE_DEFAULT,  | 					file_dfl,  | ||||||
| 				MARKED_FILE_PATTERN, | 					file_pattern, | ||||||
| 					null, | 					null, | ||||||
| 					[]) | 					[]) | ||||||
| 		 | 		 | ||||||
| @ -348,21 +346,48 @@ function loadFileMarks(path){ | |||||||
| 					[]) | 					[]) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 	bubbleProgress('Marks', loader, res) | 		bubbleProgress(title, loader, res) | ||||||
| 
 | 
 | ||||||
| 	res.done(function(images){  | 		res.done(finalize) | ||||||
| 		MARKED = images  |  | ||||||
| 	}) |  | ||||||
| 
 | 
 | ||||||
| 		return res | 		return res | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Load image marks form file
 | ||||||
|  | //
 | ||||||
|  | // NOTE: if no marks are found then set them to []
 | ||||||
|  | var loadFileMarks = makeBasicLoader( | ||||||
|  | 		'Marks',  | ||||||
|  | 		MARKED_FILE_DEFAULT,  | ||||||
|  | 		MARKED_FILE_PATTERN,  | ||||||
|  | 		function(data){  | ||||||
|  | 			MARKED = data | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| // Save image marks to file
 | // Save image marks to file
 | ||||||
| function saveFileMarks(name){ | function saveFileMarks(name){ | ||||||
| 	name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name | 	name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name | ||||||
| 
 | 
 | ||||||
| 	dumpJSON(name + '-marked.json', MARKED) | 	dumpJSON(name + '-' + MARKED_FILE_DEFAULT, MARKED) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | var loadFileBookmarks = makeBasicLoader( | ||||||
|  | 		'Bookmarks',  | ||||||
|  | 		BOOKMARKS_FILE_DEFAULT,  | ||||||
|  | 		BOOKMARKS_FILE_PATTERN,  | ||||||
|  | 		function(data){  | ||||||
|  | 			BOOKMARKS = data[0] == null ? [] : data[0] | ||||||
|  | 			BOOKMARKS_DATA = data[1] == null ? {} : data[1] | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function saveFileBookmarks(name){ | ||||||
|  | 	name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name | ||||||
|  | 
 | ||||||
|  | 	dumpJSON(name + '-' + BOOKMARKS_FILE_DEFAULT, [BOOKMARKS, BOOKMARKS_DATA]) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -414,7 +439,9 @@ function loadFileState(path, prefix){ | |||||||
| 							//		: null), res, true),
 | 							//		: null), res, true),
 | ||||||
| 						// load marks if available...
 | 						// load marks if available...
 | ||||||
| 						bubbleProgress(prefix, | 						bubbleProgress(prefix, | ||||||
| 							loadFileMarks(), res, true)) | 							loadFileMarks(), res, true), | ||||||
|  | 						bubbleProgress(prefix, | ||||||
|  | 							loadFileBookmarks(), res, true)) | ||||||
| 					.done(function(){ | 					.done(function(){ | ||||||
| 						reloadViewer() | 						reloadViewer() | ||||||
| 						res.resolve() | 						res.resolve() | ||||||
| @ -458,6 +485,7 @@ function saveFileState(name, no_normalize_path){ | |||||||
| 	dumpJSON(name + '-data.json', data) | 	dumpJSON(name + '-data.json', data) | ||||||
| 	// XXX do we need to do this???
 | 	// XXX do we need to do this???
 | ||||||
| 	saveFileMarks(name) | 	saveFileMarks(name) | ||||||
|  | 	saveFileBookmarks(name) | ||||||
| 
 | 
 | ||||||
| 	// save the updated images...
 | 	// save the updated images...
 | ||||||
| 	if(IMAGES_UPDATED.length > 0){ | 	if(IMAGES_UPDATED.length > 0){ | ||||||
|  | |||||||
| @ -194,6 +194,7 @@ $(function(){ | |||||||
| 			*/ | 			*/ | ||||||
| 
 | 
 | ||||||
| 			updateImages() | 			updateImages() | ||||||
|  | 			toggleMarkesView('on') | ||||||
| 
 | 
 | ||||||
| 			SCROLLER.start() | 			SCROLLER.start() | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -578,7 +578,14 @@ var KEYBOARD_CONFIG = { | |||||||
| 		Enter: doc('Toggle single image view',  | 		Enter: doc('Toggle single image view',  | ||||||
| 				function(){ toggleSingleImageMode() }), | 				function(){ toggleSingleImageMode() }), | ||||||
| 
 | 
 | ||||||
| 		B: doc('Toggle theme', function(){ toggleTheme() }), | 		B: { | ||||||
|  | 				default: doc('Toggle theme',  | ||||||
|  | 					function(){ toggleTheme() }), | ||||||
|  | 				ctrl: doc('Toggle bookmark',  | ||||||
|  | 					function(){ toggleBookmark() }), | ||||||
|  | 			}, | ||||||
|  | 		'[': doc('Previous bookmarked image', prevBookmark), | ||||||
|  | 		']': doc('Next bookmarked image', nextBookmark), | ||||||
| 
 | 
 | ||||||
| 		S: { | 		S: { | ||||||
| 				default: doc('Start slideshow',  | 				default: doc('Start slideshow',  | ||||||
|  | |||||||
| @ -604,12 +604,14 @@ button:hover { | |||||||
| .viewer:not(.marks-visible) .mark { | .viewer:not(.marks-visible) .mark { | ||||||
|   display: none; |   display: none; | ||||||
| } | } | ||||||
|  | .mark.bookmark, | ||||||
| .mark.selected { | .mark.selected { | ||||||
|   width: 0px; |   width: 0px; | ||||||
|   margin-left: 0px; |   margin-left: 0px; | ||||||
|   border: none; |   border: none; | ||||||
|   overflow: visible; |   overflow: visible; | ||||||
| } | } | ||||||
|  | .mark.bookmark:after, | ||||||
| .mark.selected:after { | .mark.selected:after { | ||||||
|   display: block; |   display: block; | ||||||
|   position: absolute; |   position: absolute; | ||||||
| @ -631,6 +633,10 @@ button:hover { | |||||||
| .marks-visible.single-image-mode.viewer .mark:after { | .marks-visible.single-image-mode.viewer .mark:after { | ||||||
|   display: none; |   display: none; | ||||||
| } | } | ||||||
|  | .mark.bookmark:after { | ||||||
|  |   background: yellow; | ||||||
|  |   left: -25; | ||||||
|  | } | ||||||
| /****************************************************** Image info ***/ | /****************************************************** Image info ***/ | ||||||
| .inline-image-info { | .inline-image-info { | ||||||
|   display: none; |   display: none; | ||||||
|  | |||||||
| @ -678,12 +678,14 @@ button:hover { | |||||||
| 	display: none; | 	display: none; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .mark.bookmark, | ||||||
| .mark.selected { | .mark.selected { | ||||||
| 	width: 0px; | 	width: 0px; | ||||||
| 	margin-left: 0px; | 	margin-left: 0px; | ||||||
| 	border: none; | 	border: none; | ||||||
| 	overflow: visible; | 	overflow: visible; | ||||||
| } | } | ||||||
|  | .mark.bookmark:after, | ||||||
| .mark.selected:after { | .mark.selected:after { | ||||||
| 	display: block; | 	display: block; | ||||||
| 	position: absolute; | 	position: absolute; | ||||||
| @ -712,6 +714,11 @@ button:hover { | |||||||
| 	display: none; | 	display: none; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .mark.bookmark:after { | ||||||
|  | 	background: yellow; | ||||||
|  | 	left: -25; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /****************************************************** Image info ***/ | /****************************************************** Image info ***/ | ||||||
|  | |||||||
							
								
								
									
										34
									
								
								ui/marks.js
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								ui/marks.js
									
									
									
									
									
								
							| @ -6,6 +6,9 @@ | |||||||
| 
 | 
 | ||||||
| //var DEBUG = DEBUG != null ? DEBUG : true
 | //var DEBUG = DEBUG != null ? DEBUG : true
 | ||||||
| 
 | 
 | ||||||
|  | var MARKED_FILE_DEFAULT = 'marked.json' | ||||||
|  | var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/ | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /********************************************************************** | /********************************************************************** | ||||||
| @ -19,8 +22,9 @@ function _addMark(cls, gid, image){ | |||||||
| 	var mark = $('.mark.'+cls+'.'+gid) | 	var mark = $('.mark.'+cls+'.'+gid) | ||||||
| 
 | 
 | ||||||
| 	if(mark.length == 0){ | 	if(mark.length == 0){ | ||||||
| 		mark = $('<div class="mark selected"/>') | 		mark = $('<div class="mark"/>') | ||||||
| 			.addClass(gid) | 			.addClass(gid) | ||||||
|  | 			.addClass(cls) | ||||||
| 			.insertAfter(image) | 			.insertAfter(image) | ||||||
| 	}  | 	}  | ||||||
| 	return mark | 	return mark | ||||||
| @ -76,6 +80,34 @@ function makeMarkToggler(img_class, mark_class, evt_name){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | function makeMarkUpdater(img_class, mark_class, test){ | ||||||
|  | 	return function(gid, image){ | ||||||
|  | 		// marks...
 | ||||||
|  | 		if(test(gid)){ | ||||||
|  | 			image.addClass(img_class) | ||||||
|  | 			_addMark(mark_class, gid, image) | ||||||
|  | 		} else { | ||||||
|  | 			image.removeClass(img_class) | ||||||
|  | 			_removeMark(mark_class, gid, image) | ||||||
|  | 		} | ||||||
|  | 		return image | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /********************************************************************** | ||||||
|  | * Basic marks... | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | var updateSelectedImageMark = makeMarkUpdater( | ||||||
|  | 		'marked', | ||||||
|  | 		'selected',  | ||||||
|  | 		function(gid){  | ||||||
|  | 			return MARKED.indexOf(gid) > -1  | ||||||
|  | 		}) | ||||||
|  | IMAGE_UPDATERS.push(updateSelectedImageMark) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // NOTE: to disable MARKED cleanout set no_cleanout_marks to true.
 | // NOTE: to disable MARKED cleanout set no_cleanout_marks to true.
 | ||||||
| // NOTE: MARKED may contain both gids that are not loaded and that do 
 | // 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 
 | // 		not exist, as there is no way to distinguish between the two 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user