mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 11:20:09 +00:00 
			
		
		
		
	finished the basic bookmarks functionality (not tested, needs CSS)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									062a5ba275
								
							
						
					
					
						commit
						a455e55b4d
					
				
							
								
								
									
										28
									
								
								ui/data.js
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								ui/data.js
									
									
									
									
									
								
							| @ -163,6 +163,14 @@ var UPDATE_SYNC = false | |||||||
| var SYNC_IMG_LOADER = false | var SYNC_IMG_LOADER = false | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | // list of functions to setup different bindings
 | ||||||
|  | //
 | ||||||
|  | // each function must be of the form:
 | ||||||
|  | // 	setupBinding(viewer) -> viewer
 | ||||||
|  | //
 | ||||||
|  | var SETUP_BINDINGS = [] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| /********************************************************************** | /********************************************************************** | ||||||
| * Helpers | * Helpers | ||||||
| @ -502,7 +510,7 @@ function getGIDBefore(gid, ribbon, search, data){ | |||||||
| 	ribbon = ribbon == null ? getGIDRibbonIndex(gid, data) : ribbon | 	ribbon = ribbon == null ? getGIDRibbonIndex(gid, data) : ribbon | ||||||
| 	search = search == null ? binSearch : search | 	search = search == null ? binSearch : search | ||||||
| 	//search = search == null ? match2(linSearch, binSearch) : search
 | 	//search = search == null ? match2(linSearch, binSearch) : search
 | ||||||
| 	ribbon = data.ribbons[ribbon] | 	ribbon = typeof(ribbon) == typeof(123) ? data.ribbons[ribbon] : ribbon | ||||||
| 	var order = data.order | 	var order = data.order | ||||||
| 
 | 
 | ||||||
| 	var target = order.indexOf(gid) | 	var target = order.indexOf(gid) | ||||||
| @ -1713,6 +1721,24 @@ function preCacheAllRibbons(){ | |||||||
| * Actions... | * Actions... | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
|  | function showImage(gid){ | ||||||
|  | 	var img = getImage(gid) | ||||||
|  | 
 | ||||||
|  | 	// target image not loaded...
 | ||||||
|  | 	if(img.length == 0){ | ||||||
|  | 		DATA.current = gid | ||||||
|  | 		reloadViewer() | ||||||
|  | 		img = getImage(gid) | ||||||
|  | 
 | ||||||
|  | 	// target is already loaded...
 | ||||||
|  | 	} else { | ||||||
|  | 		centerView(focusImage(img)) | ||||||
|  | 		centerRibbons() | ||||||
|  | 	} | ||||||
|  | 	return img | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // Sort the ribbons by DATA.order and re-render...
 | // Sort the ribbons by DATA.order and re-render...
 | ||||||
| //
 | //
 | ||||||
| // This is the main way to sort images:
 | // This is the main way to sort images:
 | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ | |||||||
| <script src="workers.js"></script> | <script src="workers.js"></script> | ||||||
| <script src="modes.js"></script> | <script src="modes.js"></script> | ||||||
| <script src="marks.js"></script> | <script src="marks.js"></script> | ||||||
|  | <script src="bookmarks.js"></script> | ||||||
| <script src="files.js"></script> | <script src="files.js"></script> | ||||||
| <script src="localstorage.js"></script> | <script src="localstorage.js"></script> | ||||||
| <script src="info.js"></script> | <script src="info.js"></script> | ||||||
|  | |||||||
							
								
								
									
										79
									
								
								ui/marks.js
									
									
									
									
									
								
							
							
						
						
									
										79
									
								
								ui/marks.js
									
									
									
									
									
								
							| @ -38,6 +38,28 @@ function _removeMark(cls, gid, image){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | // Make a mark toggler
 | ||||||
|  | //
 | ||||||
|  | // The toggler will:
 | ||||||
|  | // 	- toggle img_class on the target image
 | ||||||
|  | // 	- add/remove a mark element after the image
 | ||||||
|  | // 	- toggle mark_class on the mark element
 | ||||||
|  | // 	- trigger the evt_name on the viewer passing it:
 | ||||||
|  | // 		- target image
 | ||||||
|  | // 		- action ('on' on 'off')
 | ||||||
|  | //
 | ||||||
|  | // The actual toggler is built with createCSSClassToggler(..), see its
 | ||||||
|  | // docs for protocol descrittion.
 | ||||||
|  | //
 | ||||||
|  | // The resulting toggled, by default, marks the current image 
 | ||||||
|  | // (.current.image), but can be passed a different image as first 
 | ||||||
|  | // argument.
 | ||||||
|  | //
 | ||||||
|  | // NOTE: when passing an alternative image as an argument, the second 
 | ||||||
|  | // 		argument MUST also be passed. it can be one of:
 | ||||||
|  | // 			- 'on'		: force create mark
 | ||||||
|  | // 			- 'off'		: force remove mark
 | ||||||
|  | // 			- 'next'	: toggle next state (default)
 | ||||||
| function makeMarkToggler(img_class, mark_class, evt_name){ | function makeMarkToggler(img_class, mark_class, evt_name){ | ||||||
| 	return createCSSClassToggler( | 	return createCSSClassToggler( | ||||||
| 		'.current.image',  | 		'.current.image',  | ||||||
| @ -348,5 +370,62 @@ function markImagesDialog(){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /*********************************************************************/ | ||||||
|  | 
 | ||||||
|  | function setupMarks(viewer){ | ||||||
|  | 	console.log('Marks: setup...') | ||||||
|  | 	return viewer | ||||||
|  | 		// marks...
 | ||||||
|  | 		// XXX toggle marking a block is not yet supported...
 | ||||||
|  | 		.on('togglingMark', function(evt, img, action){ | ||||||
|  | 			var gid = getImageGID(img)  | ||||||
|  | 
 | ||||||
|  | 			// add marked image to list...
 | ||||||
|  | 			if(action == 'on'){ | ||||||
|  | 				MARKED.indexOf(gid) == -1 && MARKED.push(gid) | ||||||
|  | 
 | ||||||
|  | 			// remove marked image from list...
 | ||||||
|  | 			} else { | ||||||
|  | 				MARKED.splice(MARKED.indexOf(gid), 1) | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 		.on('removeingRibbonMarks', function(evt, ribbon){ | ||||||
|  | 			$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){ | ||||||
|  | 				var i = MARKED.indexOf(e) | ||||||
|  | 				if(i != -1){ | ||||||
|  | 					MARKED.splice(i, 1) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}) | ||||||
|  | 		.on('removeingAllMarks', function(evt){ | ||||||
|  | 			MARKED.splice(0, MARKED.length) | ||||||
|  | 		}) | ||||||
|  | 		.on('markingRibbon', function(evt, ribbon){ | ||||||
|  | 			$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){ | ||||||
|  | 				var i = MARKED.indexOf(e) | ||||||
|  | 				if(i == -1){ | ||||||
|  | 					MARKED.push(e) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}) | ||||||
|  | 		.on('markingAll', function(evt){ | ||||||
|  | 			MARKED.splice(0, MARKED.length) | ||||||
|  | 			MARKED.concat(DATA.order) | ||||||
|  | 		}) | ||||||
|  | 		.on('invertingMarks', function(evt, ribbon){ | ||||||
|  | 			$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){ | ||||||
|  | 				var i = MARKED.indexOf(e) | ||||||
|  | 				if(i == -1){ | ||||||
|  | 					MARKED.push(e) | ||||||
|  | 				} else { | ||||||
|  | 					MARKED.splice(i, 1) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		}) | ||||||
|  | } | ||||||
|  | SETUP_BINDINGS.push(setupMarks) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /********************************************************************** | /********************************************************************** | ||||||
| * vim:set ts=4 sw=4 :                                                */ | * vim:set ts=4 sw=4 :                                                */ | ||||||
|  | |||||||
							
								
								
									
										54
									
								
								ui/setup.js
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								ui/setup.js
									
									
									
									
									
								
							| @ -68,6 +68,11 @@ function updateContextIndicators(image){ | |||||||
| //
 | //
 | ||||||
| function setupDataBindings(viewer){ | function setupDataBindings(viewer){ | ||||||
| 	viewer = viewer == null ? $('.viewer') : viewer | 	viewer = viewer == null ? $('.viewer') : viewer | ||||||
|  | 
 | ||||||
|  | 	SETUP_BINDINGS.forEach(function(setup){ | ||||||
|  | 		setup(viewer) | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
| 	viewer | 	viewer | ||||||
| 		.click(function(){ | 		.click(function(){ | ||||||
| 			if($('.ribbon').length == 0){ | 			if($('.ribbon').length == 0){ | ||||||
| @ -321,55 +326,6 @@ function setupDataBindings(viewer){ | |||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 		// marks...
 |  | ||||||
| 		// XXX toggle marking a block is not yet supported...
 |  | ||||||
| 		.on('togglingMark', function(evt, img, action){ |  | ||||||
| 			var gid = getImageGID(img)  |  | ||||||
| 
 |  | ||||||
| 			// add marked image to list...
 |  | ||||||
| 			if(action == 'on'){ |  | ||||||
| 				 MARKED.indexOf(gid) == -1 && MARKED.push(gid) |  | ||||||
| 
 |  | ||||||
| 			// remove marked image from list...
 |  | ||||||
| 			} else { |  | ||||||
| 				MARKED.splice(MARKED.indexOf(gid), 1) |  | ||||||
| 			} |  | ||||||
| 		}) |  | ||||||
| 		.on('removeingRibbonMarks', function(evt, ribbon){ |  | ||||||
| 			$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){ |  | ||||||
| 				var i = MARKED.indexOf(e) |  | ||||||
| 				if(i != -1){ |  | ||||||
| 					MARKED.splice(i, 1) |  | ||||||
| 				} |  | ||||||
| 			}) |  | ||||||
| 		}) |  | ||||||
| 		.on('removeingAllMarks', function(evt){ |  | ||||||
| 			MARKED.splice(0, MARKED.length) |  | ||||||
| 		}) |  | ||||||
| 		.on('markingRibbon', function(evt, ribbon){ |  | ||||||
| 			$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){ |  | ||||||
| 				var i = MARKED.indexOf(e) |  | ||||||
| 				if(i == -1){ |  | ||||||
| 					MARKED.push(e) |  | ||||||
| 				} |  | ||||||
| 			}) |  | ||||||
| 		}) |  | ||||||
| 		.on('markingAll', function(evt){ |  | ||||||
| 			MARKED.splice(0, MARKED.length) |  | ||||||
| 			MARKED.concat(DATA.order) |  | ||||||
| 		}) |  | ||||||
| 		.on('invertingMarks', function(evt, ribbon){ |  | ||||||
| 			$.each(DATA.ribbons[getRibbonIndex(ribbon)], function(_, e){ |  | ||||||
| 				var i = MARKED.indexOf(e) |  | ||||||
| 				if(i == -1){ |  | ||||||
| 					MARKED.push(e) |  | ||||||
| 				} else { |  | ||||||
| 					MARKED.splice(i, 1) |  | ||||||
| 				} |  | ||||||
| 			}) |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 		// caching...
 | 		// caching...
 | ||||||
| 		.on('reloadedRibbon updatedRibbon', function(evt, ribbon){ | 		.on('reloadedRibbon updatedRibbon', function(evt, ribbon){ | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -191,6 +191,7 @@ function sortImages(cmp, reverse){ | |||||||
| 		DATA.order.reverse() | 		DATA.order.reverse() | ||||||
| 	} | 	} | ||||||
| 	updateRibbonOrder() | 	updateRibbonOrder() | ||||||
|  | 	$('.viewer').trigger('sortedImages', [cmp]) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user