From 1645b03b98a88ed7521cb23a89bf41e2a16582a8 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sun, 15 Dec 2013 03:58:54 +0400 Subject: [PATCH] made generic next/prev image from list action generators... Signed-off-by: Alex A. Naanou --- ui/bookmarks.js | 65 ++++++++++------------------------------------ ui/data.js | 8 ++++++ ui/marks.js | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 52 deletions(-) diff --git a/ui/bookmarks.js b/ui/bookmarks.js index f8ea6ea8..2ea6e241 100755 --- a/ui/bookmarks.js +++ b/ui/bookmarks.js @@ -98,63 +98,24 @@ var toggleBookmark = makeMarkToggler( 'togglingBookmark') -// focus previous bookmark... +// focus next 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) -} +// NOTE: this will not jump to bookmarks on other ribbons... +// +// XXX make a generic next/prev marked function... +var nextBookmark = makeNextFromListAction( + getBookmarkedGIDBefore, + function(){ return BOOKMARKS }) // 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) -} +// NOTE: this will not jump to bookmarks on other ribbons... +// +// XXX make a generic next/prev marked function... +var prevBookmark = makePrevFromListAction( + getBookmarkedGIDBefore, + function(){ return BOOKMARKS }) diff --git a/ui/data.js b/ui/data.js index 096f5e2c..82d95b72 100755 --- a/ui/data.js +++ b/ui/data.js @@ -498,6 +498,14 @@ function getGIDRibbonIndex(gid, data){ } +// like getImageOrder(..) but use DATA... +function getGIDOrder(gid){ + gid = gid == null ? getImageGID() : gid + gid = typeof(gid) == typeof('str') ? gid : getImageGID(gid) + return DATA.order.indexOf(gid) +} + + // Same as getImageBefore(...), but uses gids and searches in DATA... // // Return: diff --git a/ui/marks.js b/ui/marks.js index 8f736762..8a2e8e84 100755 --- a/ui/marks.js +++ b/ui/marks.js @@ -128,6 +128,74 @@ function makeMarkUpdater(img_class, mark_class, test){ } +function makeNextFromListAction(get_closest, get_list){ + return function(){ + var list = get_list() + if(list.length == 0){ + flashIndicator('end') + return getImage() + } + var cur = getImageGID() + var o = getGIDOrder(cur) + var next = get_closest(cur) + var i = list.indexOf(next)+1 + + // we are before the first loaded bookmark, find the first... + while((next == cur + || next == null + || getGIDOrder(next) < o) + && i < list.length){ + next = list[i] + next = get_closest(next) + i++ + } + + // did not find any loaded bookmarks after... + if(i >= list.length + && (next == null + || next == cur + || getGIDOrder(next) < o)){ + flashIndicator('end') + return getImage(cur) + } + + return showImage(next) + } +} + + +function makePrevFromListAction(get_closest, get_list){ + return function(){ + var list = get_list() + if(list.length == 0){ + flashIndicator('start') + return getImage(cur) + } + var cur = getImageGID() + var prev = get_closest(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 = list[list.indexOf(prev)-1] + prev = prev != null ? get_closest(prev) : prev + // no loaded (crop mode?) bookmark before us... + if(prev == null){ + flashIndicator('start') + return getImage(cur) + } + } + + return showImage(prev) + } +} + + /********************************************************************** * Basic marks... */