From 9db9983371d0e8dfbeabd431cd86e53ec2293c9b Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 14 Dec 2013 04:31:05 +0400 Subject: [PATCH] oops! ..forgot to add the bookmarks.js file :)))) Signed-off-by: Alex A. Naanou --- ui/bookmarks.js | 192 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100755 ui/bookmarks.js diff --git a/ui/bookmarks.js b/ui/bookmarks.js new file mode 100755 index 00000000..435ee752 --- /dev/null +++ b/ui/bookmarks.js @@ -0,0 +1,192 @@ +/********************************************************************** +* +* +* +**********************************************************************/ + +// list of bookmarked gids... +var BOOKMARKS= [] + +// bookmark data +// +// NOTE: elements are added here only when some data is set, use +// BOOKMARKS, as the main structure. +var BOOKMARKS_DATA = { +} + +var BOOKMARKS_FILE_DEFAULT = 'bookmarked.json' +var BOOKMARKS_FILE_PATTERN = /^[0-9]*-bookmarked.json$/ + + + + +/********************************************************************** +* Helpers +*/ + +// XXX argument processing... +function getBookmarkedGIDBefore(gid){ + if(BOOKMARKS.length == 0){ + return null + } + gid = gid == null ? getImageGID() : gid + var prev + + // need to account for cropping here... + do { + prev = getGIDBefore(gid, BOOKMARKS) + gid = getGIDBefore(prev) + } while(prev != gid && prev != null) + + // no bookmarks before current image... + if(prev == null){ + return prev + } + + return prev +} + + + +/*********************************************************************/ + +function cropBookmarkedImages(cmp, keep_ribbons, no_cleanout_marks){ + cropDataTo(BOOKMARKS.slice(), keep_ribbons, no_cleanout_marks) + + return DATA +} + + +// update image bookmark state... +var updateBookmarkedImageMark = makeMarkUpdater( + 'bookmarked', + 'bookmark', + function(gid){ + return BOOKMARKS.indexOf(gid) > -1 + }) +IMAGE_UPDATERS.push(updateBookmarkedImageMark) + + + +/*********************************************************************/ +// 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', + 'togglingBookmark') + + +// focus previous bookmark... +// +function nextBookmark(){ + if(BOOKMARKS.length == 0){ + flashIndicator('end') + return getImage() + } + var cur = getImageGID() + var next = getBookmarkedGIDBefore(cur) + var i = BOOKMARKS.indexOf(next)+1 + + // we are before the first loaded bookmark, find the first... + while((next == cur || next == null) && i < BOOKMARKS.length){ + next = BOOKMARKS[i] + next = getBookmarkedGIDBefore(next) + i++ + } + + // did not find any loaded bookmarks after... + if(i >= BOOKMARKS.length && (next == null || next == cur)){ + flashIndicator('end') + return getImage(cur) + } + + return showImage(next) +} + + +// focus previous bookmark... +// +function prevBookmark(){ + if(BOOKMARKS.length == 0){ + flashIndicator('start') + return getImage(cur) + } + var cur = getImageGID() + var prev = getBookmarkedGIDBefore(cur) + + // nothing bookmarked before us... + if(prev == null){ + flashIndicator('start') + return getImage(cur) + } + + // current image is bookmarked, get the bookmark before it... + if(prev == cur){ + prev = BOOKMARKS[BOOKMARKS.indexOf(prev)-1] + prev = prev != null ? getBookmarkedGIDBefore(prev) : prev + // no loaded (crop mode?) bookmark before us... + if(prev == null){ + flashIndicator('start') + return getImage(cur) + } + } + + return showImage(prev) +} + + + +/*********************************************************************/ + +// setup event handlers for the bookmark framework... +// +function setupBookmarks(viewer){ + console.log('Bookmarks: setup...') + return viewer + .on('togglingBookmark', function(evt, gid, action){ + // add a bookmark... + if(action == 'on'){ + if(BOOKMARKS.indexOf(gid) == -1){ + BOOKMARKS.push(gid) + // XXX is this too expensive??? + // ...a way to avoid sorting is to: + // BOOKMARKS.splice( + // getGIDBefore(gid, BOOKMARKS)+1, 0, gid) + BOOKMARKS.sort(imageOrderCmp) + } + + // remove a bookmark... + } else { + BOOKMARKS.splice(BOOKMARKS.indexOf(gid), 1) + } + }) + .on('sortedImages', function(){ + BOOKMARKS.sort(imageOrderCmp) + }) +} +SETUP_BINDINGS.push(setupBookmarks) + + + +/********************************************************************** +* vim:set ts=4 sw=4 : */