added mark/unmarked navigation (keybindings.js + marks.js) and unmarked gid caching to marked.js (not sure if it is needed)...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2014-01-02 06:59:06 +04:00
parent 9598d7ab7d
commit 9dbe12ca13
6 changed files with 86 additions and 2 deletions

View File

@ -131,6 +131,7 @@ var saveFileBookmarks = makeFileSaver(
function bookmarksUpdated(){ function bookmarksUpdated(){
fileUpdated('Bookmarks') fileUpdated('Bookmarks')
$('.viewer').trigger('bookmarksUpdated')
} }

View File

@ -884,7 +884,7 @@ function makeGIDBeforeGetterFromList(get_list, restrict_to_ribbon){
ribbon = ribbon == null && restrict_to_ribbon == true ribbon = ribbon == null && restrict_to_ribbon == true
? getGIDRibbonIndex(gid) ? getGIDRibbonIndex(gid)
: ribbon : ribbon
var list = get_list() var list = get_list(ribbon)
if(list.length == 0){ if(list.length == 0){
return null return null
} }
@ -1325,7 +1325,7 @@ function makeNextFromListAction(get_closest, get_list, restrict_to_ribbon){
get_list = get_list == null ? getRibbonGIDs : get_list get_list = get_list == null ? getRibbonGIDs : get_list
return function(ribbon){ return function(ribbon){
var list = get_list() var list = get_list(ribbon)
if(list.length == 0){ if(list.length == 0){
flashIndicator('end') flashIndicator('end')
return getImage() return getImage()

View File

@ -312,6 +312,7 @@ var saveFileData = makeFileSaver(
function dataUpdated(){ function dataUpdated(){
if(!isViewCropped()){ if(!isViewCropped()){
fileUpdated('Data') fileUpdated('Data')
$('.viewer').trigger('dataUpdated')
} }
} }

View File

@ -590,6 +590,18 @@ var KEYBOARD_CONFIG = {
function(){ prevBookmark() }), function(){ prevBookmark() }),
']': doc('Next bookmarked image', ']': doc('Next bookmarked image',
function(){ nextBookmark() }), function(){ nextBookmark() }),
',': {
default: doc('Previous marked image',
function(){ prevMark() }),
shift: doc('Previous unmarked image',
function(){ prevUnmarked() }),
},
'.': {
default: doc('Next marked image',
function(){ nextMark() }),
shift: doc('Next unmarked image',
function(){ nextUnmarked() }),
},
'{': doc('Previous unsorted section edge', '{': doc('Previous unsorted section edge',
function(){ prevUnsortedSection() }), function(){ prevUnsortedSection() }),
'}': doc('Next unsorted section edge', '}': doc('Next unsorted section edge',

View File

@ -13,6 +13,10 @@ var MARKED_FILE_DEFAULT = 'marked.json'
var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/ var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/
// NOTE: if this is set to null, caching will be disabled...
var _UNMARKED_CACHE = {}
/********************************************************************** /**********************************************************************
* helpers... * helpers...
@ -61,12 +65,61 @@ function _removeMark(cls, gid, image){
} }
// Invalidate unmarked image cache...
//
function invalidateMarksCache(){
if(_UNMARKED_CACHE != null){
_UNMARKED_CACHE = {}
}
}
// Get list of unmarked images...
//
// mode can be:
// - 'ribbon'
// - 'all'
// - number - ribbon index
// - null - same as all
function getUnmarked(mode){
mode = mode == null ? 'all' : mode
var gids = mode == 'all' ? getLoadedGIDs()
: typeof(mode) == typeof(123) ? getRibbonGIDs(mode)
: getRibbonGIDs()
mode = mode == 'ribbon' ? getRibbonIndex() : mode
// get the cached set...
if(_UNMARKED_CACHE != null && mode in _UNMARKED_CACHE){
return _UNMARKED_CACHE[mode]
}
// calculate the set...
var res = gids.filter(function(e){
// keep only unmarked...
return MARKED.indexOf(e) < 0
})
if(_UNMARKED_CACHE != null){
_UNMARKED_CACHE[mode] = res
}
return res
}
var getMarkedGIDBefore = makeGIDBeforeGetterFromList( var getMarkedGIDBefore = makeGIDBeforeGetterFromList(
function(){ function(){
return MARKED return MARKED
}) })
// NOTE: this is not too fast as it will filter the marked images...
// NOTE: this is restricted to current ribbon...
var getUnmarkedGIDBefore = makeGIDBeforeGetterFromList(
function(ribbon){
return getUnmarked(ribbon)
}, true)
// Make a mark toggler // Make a mark toggler
// //
// The toggler will: // The toggler will:
@ -485,6 +538,17 @@ var prevMark = makePrevFromListAction(
function(){ return MARKED }) function(){ return MARKED })
var nextUnmarked = makeNextFromListAction(
getUnmarkedGIDBefore,
function(ribbon){
return getUnmarked(ribbon == null ? 'ribbon' : ribbon)
})
var prevUnmarked = makePrevFromListAction(
getUnmarkedGIDBefore,
function(ribbon){
return getUnmarked(ribbon == null ? 'ribbon' : ribbon)
})
/********************************************************************** /**********************************************************************
@ -604,6 +668,8 @@ var saveFileMarks = makeFileSaver(
function marksUpdated(){ function marksUpdated(){
fileUpdated('Marks') fileUpdated('Marks')
invalidateMarksCache()
$('.viewer').trigger('marksUpdated')
} }
@ -640,6 +706,9 @@ function setupMarks(viewer){
viewer.trigger('togglingMark', [gid, action]) viewer.trigger('togglingMark', [gid, action])
}) })
}) })
.on('baseURLChanged', function(){
invalidateMarksCache()
})
} }
SETUP_BINDINGS.push(setupMarks) SETUP_BINDINGS.push(setupMarks)

View File

@ -495,6 +495,7 @@ var saveFileTags = makeFileSaver(
function tagsUpdated(){ function tagsUpdated(){
fileUpdated('Tags') fileUpdated('Tags')
$('.viewer').trigger('tagsUpdated')
} }