mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 11:20:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			190 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| /**********************************************************************
 | |
| * 
 | |
| *
 | |
| *
 | |
| **********************************************************************/
 | |
| 
 | |
| // list of bookmarked gids...
 | |
| //
 | |
| // NOTE: this is a sparse list, see marks.js MARKED for more info and
 | |
| // 		motivation...
 | |
| var BOOKMARKS = [] 
 | |
| 
 | |
| // bookmark data
 | |
| //
 | |
| // NOTE: elements are added here only when some data is set, use 
 | |
| // 		BOOKMARKS, as the main structure.
 | |
| var BOOKMARKS_DATA = {}
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * Helpers
 | |
| */
 | |
| 
 | |
| var getBookmarked = makeMarkedLister(function(){ return BOOKMARKS })
 | |
| var getUnbookmarked = makeUnmarkedSparseLister(function(){ return BOOKMARKS }) 
 | |
| 
 | |
| var getBookmarkedGIDBefore = makeGIDBeforeGetterFromList(
 | |
| 		function(){ 
 | |
| 			return compactSparceList(BOOKMARKS)
 | |
| 		})
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| 
 | |
| function cropBookmarkedImages(cmp, keep_ribbons, keep_unloaded_gids){
 | |
| 	cropDataTo(BOOKMARKS, keep_ribbons, keep_unloaded_gids)
 | |
| 	return DATA
 | |
| }
 | |
| 
 | |
| 
 | |
| // update image bookmark state...
 | |
| var updateBookmarkedImageMark = makeMarkUpdater(
 | |
| 		'bookmarked',
 | |
| 		'bookmark', 
 | |
| 		function(gid){ 
 | |
| 			return BOOKMARKS.indexOf(gid) > -1 
 | |
| 		})
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| // XXX not sure that these should be modes...
 | |
| 
 | |
| var toggleBookmarkedOnlyView = makeCropModeToggler(
 | |
| 		'bookmarked-only-view',
 | |
| 		cropBookmarkedImages)
 | |
| 
 | |
| 
 | |
| var toggleBookmarkedOnlyWithRibbonsView = makeCropModeToggler(
 | |
| 		'bookmarked-only-view',
 | |
| 		function(){
 | |
| 			cropBookmarkedImages(null, true)
 | |
| 		})
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * Actions
 | |
| */
 | |
| 
 | |
| // NOTE: this can be called without arguments (affects current image) or
 | |
| // 		passed either an image object or a gid...
 | |
| var toggleBookmark = makeMarkToggler(
 | |
| 		'bookmarked', 
 | |
| 		'bookmark', 
 | |
| 		'togglingBookmarks',
 | |
| 		function(gid, action){
 | |
| 			// add a bookmark...
 | |
| 			if(action == 'on'){
 | |
| 				if(BOOKMARKS.indexOf(gid) == -1){
 | |
| 					BOOKMARKS[DATA.order.indexOf(gid)] = gid
 | |
| 				}
 | |
| 
 | |
| 			// remove a bookmark...
 | |
| 			} else {
 | |
| 				delete BOOKMARKS[BOOKMARKS.indexOf(gid)]
 | |
| 			}
 | |
| 
 | |
| 			bookmarksUpdated()
 | |
| 		})
 | |
| 
 | |
| 
 | |
| // Remove all bookmarks...
 | |
| //
 | |
| // mode can be:
 | |
| //	- 'ribbon' (default)
 | |
| //	- 'all'
 | |
| //
 | |
| function removeAllBookmarks(mode){
 | |
| 	mode = mode == null ? 'ribbon' : mode
 | |
| 	var res = setAllMarks('off', mode, BOOKMARKS, toggleBookmark)
 | |
| 	$('.viewer')
 | |
| 		.trigger('togglingBookmarks', [res, 'off'])
 | |
| 		.trigger('removingBookmarks', [res, mode])
 | |
| 	bookmarksUpdated()
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| 
 | |
| // Focus next/prev bookmark...
 | |
| //
 | |
| var nextBookmark = makeNextFromListAction(
 | |
| 		getBookmarkedGIDBefore, 
 | |
| 		function(){ return compactSparceList(BOOKMARKS) })
 | |
| var prevBookmark = makePrevFromListAction(
 | |
| 		getBookmarkedGIDBefore, 
 | |
| 		function(){ return compactSparceList(BOOKMARKS) })
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * Files...
 | |
| */
 | |
| 
 | |
| var loadFileBookmarks = makeFileLoader(
 | |
| 		'Bookmarks', 
 | |
| 		CONFIG.bookmarks_file, 
 | |
| 		[[], {}],
 | |
| 		function(data){ 
 | |
| 			BOOKMARKS = populateSparceGIDList(data[0])
 | |
| 			BOOKMARKS_DATA = data[1]
 | |
| 		})
 | |
| 
 | |
| 
 | |
| var saveFileBookmarks = makeFileSaver(
 | |
| 		'Bookmarks',
 | |
| 		CONFIG.bookmarks_file, 
 | |
| 		function(){ 
 | |
| 			return [
 | |
| 				compactSparceList(BOOKMARKS), 
 | |
| 				BOOKMARKS_DATA
 | |
| 			] 
 | |
| 		})
 | |
| 
 | |
| 
 | |
| function bookmarksUpdated(){
 | |
| 	fileUpdated('Bookmarks')
 | |
| 	$('.viewer').trigger('bookmarksUpdated')
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * Setup...
 | |
| */
 | |
| 
 | |
| // setup event handlers for the bookmark framework...
 | |
| //
 | |
| function setupBookmarks(viewer){
 | |
| 	console.log('Bookmarks: setup...')
 | |
| 
 | |
| 	// XXX make this viewer specific...
 | |
| 	makeContextIndicatorUpdater('bookmarked')
 | |
| 
 | |
| 	// XXX make this viewer specific...
 | |
| 	showContextIndicator(
 | |
| 			'current-image-bookmarked', 
 | |
| 			'Bookmarked (ctrl-B)')
 | |
| 		.click(function(){ toggleBookmark() })
 | |
| 
 | |
| 	return viewer
 | |
| 		.on('sortedImages', function(){
 | |
| 			BOOKMARKS = populateSparceGIDList(BOOKMARKS)
 | |
| 			bookmarksUpdated()
 | |
| 		})
 | |
| 		.on('horizontalShiftedImage', function(evt, gid, direction){
 | |
| 			if(shiftGIDInSparseList(gid, BOOKMARKS)){
 | |
| 				bookmarksUpdated()
 | |
| 			}
 | |
| 		})
 | |
| }
 | |
| SETUP_BINDINGS.push(setupBookmarks)
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * vim:set ts=4 sw=4 :                                                */
 |