| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // list of bookmarked gids...
 | 
					
						
							| 
									
										
										
										
											2013-12-20 06:37:08 +04:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2014-01-17 04:41:40 +04:00
										 |  |  | // NOTE: this is a sparse list, see marks.js MARKED for more info and
 | 
					
						
							|  |  |  | // 		motivation...
 | 
					
						
							| 
									
										
										
										
											2014-01-13 06:37:08 +04:00
										 |  |  | var BOOKMARKS = []  | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // bookmark data
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // NOTE: elements are added here only when some data is set, use 
 | 
					
						
							|  |  |  | // 		BOOKMARKS, as the main structure.
 | 
					
						
							| 
									
										
										
										
											2013-12-14 06:58:13 +04:00
										 |  |  | var BOOKMARKS_DATA = {} | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * Helpers | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-13 06:37:08 +04:00
										 |  |  | var getBookmarked = makeMarkedLister(function(){ return BOOKMARKS }) | 
					
						
							| 
									
										
										
										
											2014-01-16 15:43:30 +04:00
										 |  |  | var getUnbookmarked = makeUnmarkedSparseLister(function(){ return BOOKMARKS })  | 
					
						
							| 
									
										
										
										
											2014-01-13 06:37:08 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-16 01:49:47 +04:00
										 |  |  | var getBookmarkedGIDBefore = makeGIDBeforeGetterFromList( | 
					
						
							|  |  |  | 		function(){  | 
					
						
							| 
									
										
										
										
											2014-01-16 15:43:30 +04:00
										 |  |  | 			return compactSparceList(BOOKMARKS) | 
					
						
							| 
									
										
										
										
											2013-12-16 01:49:47 +04:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-15 03:38:15 +04:00
										 |  |  | function cropBookmarkedImages(cmp, keep_ribbons, keep_unloaded_gids){ | 
					
						
							| 
									
										
										
										
											2014-01-20 09:40:36 +04:00
										 |  |  | 	cropDataTo(BOOKMARKS, keep_ribbons, keep_unloaded_gids) | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 	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( | 
					
						
							|  |  |  | 		cropBookmarkedImages) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var toggleBookmarkedOnlyWithRibbonsView = makeCropModeToggler( | 
					
						
							|  |  |  | 		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',  | 
					
						
							| 
									
										
										
										
											2014-01-20 09:40:36 +04:00
										 |  |  | 		'togglingBookmarks', | 
					
						
							| 
									
										
										
										
											2013-12-17 21:16:10 +04:00
										 |  |  | 		function(gid, action){ | 
					
						
							|  |  |  | 			// add a bookmark...
 | 
					
						
							|  |  |  | 			if(action == 'on'){ | 
					
						
							|  |  |  | 				if(BOOKMARKS.indexOf(gid) == -1){ | 
					
						
							| 
									
										
										
										
											2014-01-16 15:43:30 +04:00
										 |  |  | 					BOOKMARKS[DATA.order.indexOf(gid)] = gid | 
					
						
							| 
									
										
										
										
											2013-12-17 21:16:10 +04:00
										 |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// remove a bookmark...
 | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2014-01-18 04:42:11 +04:00
										 |  |  | 				delete BOOKMARKS[BOOKMARKS.indexOf(gid)] | 
					
						
							| 
									
										
										
										
											2013-12-17 21:16:10 +04:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-12-24 05:23:51 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			bookmarksUpdated() | 
					
						
							| 
									
										
										
										
											2013-12-17 21:16:10 +04:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-20 06:45:41 +04:00
										 |  |  | // Remove all bookmarks...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // mode can be:
 | 
					
						
							|  |  |  | //	- 'ribbon' (default)
 | 
					
						
							|  |  |  | //	- 'all'
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2014-01-20 06:18:36 +04:00
										 |  |  | 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 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-20 06:45:41 +04:00
										 |  |  | // Focus next/prev bookmark...
 | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2013-12-15 03:58:54 +04:00
										 |  |  | var nextBookmark = makeNextFromListAction( | 
					
						
							|  |  |  | 		getBookmarkedGIDBefore,  | 
					
						
							| 
									
										
										
										
											2014-01-16 15:43:30 +04:00
										 |  |  | 		function(){ return compactSparceList(BOOKMARKS) }) | 
					
						
							| 
									
										
										
										
											2013-12-15 03:58:54 +04:00
										 |  |  | var prevBookmark = makePrevFromListAction( | 
					
						
							|  |  |  | 		getBookmarkedGIDBefore,  | 
					
						
							| 
									
										
										
										
											2014-01-16 15:43:30 +04:00
										 |  |  | 		function(){ return compactSparceList(BOOKMARKS) }) | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-14 05:07:57 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | * Files... | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var loadFileBookmarks = makeFileLoader( | 
					
						
							|  |  |  | 		'Bookmarks',  | 
					
						
							| 
									
										
										
										
											2014-01-20 09:40:36 +04:00
										 |  |  | 		CONFIG.bookmarks_file,  | 
					
						
							| 
									
										
										
										
											2013-12-28 08:57:11 +04:00
										 |  |  | 		[[], {}], | 
					
						
							| 
									
										
										
										
											2013-12-14 05:07:57 +04:00
										 |  |  | 		function(data){  | 
					
						
							| 
									
										
										
										
											2014-03-06 05:49:14 +04:00
										 |  |  | 			BOOKMARKS = populateSparseGIDList(data[0]) | 
					
						
							| 
									
										
										
										
											2013-12-28 08:57:11 +04:00
										 |  |  | 			BOOKMARKS_DATA = data[1] | 
					
						
							| 
									
										
										
										
											2013-12-14 05:07:57 +04:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var saveFileBookmarks = makeFileSaver( | 
					
						
							| 
									
										
										
										
											2013-12-24 05:23:51 +04:00
										 |  |  | 		'Bookmarks', | 
					
						
							| 
									
										
										
										
											2014-01-20 09:40:36 +04:00
										 |  |  | 		CONFIG.bookmarks_file,  | 
					
						
							| 
									
										
										
										
											2013-12-14 05:07:57 +04:00
										 |  |  | 		function(){  | 
					
						
							|  |  |  | 			return [ | 
					
						
							| 
									
										
										
										
											2014-01-16 15:43:30 +04:00
										 |  |  | 				compactSparceList(BOOKMARKS),  | 
					
						
							| 
									
										
										
										
											2013-12-14 05:07:57 +04:00
										 |  |  | 				BOOKMARKS_DATA | 
					
						
							|  |  |  | 			]  | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-24 05:23:51 +04:00
										 |  |  | function bookmarksUpdated(){ | 
					
						
							|  |  |  | 	fileUpdated('Bookmarks') | 
					
						
							| 
									
										
										
										
											2014-01-02 06:59:06 +04:00
										 |  |  | 	$('.viewer').trigger('bookmarksUpdated') | 
					
						
							| 
									
										
										
										
											2013-12-24 05:23:51 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-14 05:07:57 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * Setup... | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // setup event handlers for the bookmark framework...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | function setupBookmarks(viewer){ | 
					
						
							|  |  |  | 	console.log('Bookmarks: setup...') | 
					
						
							| 
									
										
										
										
											2013-12-14 06:58:13 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// XXX make this viewer specific...
 | 
					
						
							|  |  |  | 	makeContextIndicatorUpdater('bookmarked') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX make this viewer specific...
 | 
					
						
							|  |  |  | 	showContextIndicator( | 
					
						
							|  |  |  | 			'current-image-bookmarked',  | 
					
						
							| 
									
										
										
										
											2013-12-15 02:55:05 +04:00
										 |  |  | 			'Bookmarked (ctrl-B)') | 
					
						
							| 
									
										
										
										
											2013-12-14 06:58:13 +04:00
										 |  |  | 		.click(function(){ toggleBookmark() }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 	return viewer | 
					
						
							|  |  |  | 		.on('sortedImages', function(){ | 
					
						
							| 
									
										
										
										
											2014-03-06 05:49:14 +04:00
										 |  |  | 			BOOKMARKS = populateSparseGIDList(BOOKMARKS) | 
					
						
							| 
									
										
										
										
											2014-01-13 11:21:49 +04:00
										 |  |  | 			bookmarksUpdated() | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2014-01-28 06:56:26 +04:00
										 |  |  | 		.on('horizontalShiftedImage', function(evt, gid, direction, from, to){ | 
					
						
							|  |  |  | 			if(shiftGIDInSparseList(gid, from, to, BOOKMARKS)){ | 
					
						
							| 
									
										
										
										
											2014-01-16 15:58:58 +04:00
										 |  |  | 				bookmarksUpdated() | 
					
						
							| 
									
										
										
										
											2014-01-15 06:19:21 +04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2014-02-03 07:37:42 +04:00
										 |  |  | 		.on('updatedImageGID', function(evt, was, is){ | 
					
						
							|  |  |  | 			var i = BOOKMARKS.indexOf(was) | 
					
						
							|  |  |  | 			if(i >= 0){ | 
					
						
							|  |  |  | 				BOOKMARKS[i] = is | 
					
						
							|  |  |  | 				bookmarksUpdated() | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2013-12-14 04:31:05 +04:00
										 |  |  | } | 
					
						
							|  |  |  | SETUP_BINDINGS.push(setupBookmarks) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                                                */ |