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
|
|
|
|
|
|
|
|
var BOOKMARKS_FILE_DEFAULT = 'bookmarked.json'
|
|
|
|
|
var BOOKMARKS_FILE_PATTERN = /^[0-9]*-bookmarked.json$/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
* 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){
|
|
|
|
|
cropDataTo(BOOKMARKS.slice(), 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(
|
|
|
|
|
'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',
|
2013-12-17 21:16:10 +04:00
|
|
|
'togglingBookmark',
|
|
|
|
|
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: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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2013-12-24 05:23:51 +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',
|
|
|
|
|
BOOKMARKS_FILE_DEFAULT,
|
|
|
|
|
BOOKMARKS_FILE_PATTERN,
|
2013-12-28 08:57:11 +04:00
|
|
|
[[], {}],
|
2013-12-14 05:07:57 +04:00
|
|
|
function(data){
|
2014-01-16 15:43:30 +04:00
|
|
|
BOOKMARKS = populateSparceGIDList(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',
|
2013-12-14 05:07:57 +04:00
|
|
|
BOOKMARKS_FILE_DEFAULT,
|
|
|
|
|
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-01-16 15:43:30 +04:00
|
|
|
BOOKMARKS = populateSparceGIDList(BOOKMARKS)
|
2014-01-13 11:21:49 +04:00
|
|
|
bookmarksUpdated()
|
2013-12-14 04:31:05 +04:00
|
|
|
})
|
2014-01-15 06:19:21 +04:00
|
|
|
.on('horizontalShiftedImage', function(evt, gid, direction){
|
2014-01-16 15:58:58 +04:00
|
|
|
if(shiftGIDInSparseList(gid, BOOKMARKS)){
|
|
|
|
|
bookmarksUpdated()
|
2014-01-15 06:19:21 +04:00
|
|
|
}
|
|
|
|
|
})
|
2013-12-14 04:31:05 +04:00
|
|
|
}
|
|
|
|
|
SETUP_BINDINGS.push(setupBookmarks)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
|
* vim:set ts=4 sw=4 : */
|