basic bookmarks now working...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-12-13 03:39:23 +04:00
parent a455e55b4d
commit ee31fa70c5
7 changed files with 131 additions and 54 deletions

View File

@ -146,9 +146,6 @@ var IMAGES_FILE_DEFAULT = 'images.json'
var IMAGES_FILE_PATTERN = /^[0-9]*-images.json$/
var IMAGES_DIFF_FILE_PATTERN = /^[0-9]*-images-diff.json$/
var MARKED_FILE_DEFAULT = 'marked.json'
var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/
var DATA_FILE_DEFAULT = 'data.json'
var DATA_FILE_PATTERN = /^[0-9]*-data.json$/
@ -170,6 +167,8 @@ var SYNC_IMG_LOADER = false
//
var SETUP_BINDINGS = []
var IMAGE_UPDATERS = []
/**********************************************************************
@ -508,9 +507,12 @@ function getGIDBefore(gid, ribbon, search, data){
// XXX get a ribbon without getting into DOM...
// ...dependency leek...
ribbon = ribbon == null ? getGIDRibbonIndex(gid, data) : ribbon
search = search == null ? binSearch : search
//search = search == null ? match2(linSearch, binSearch) : search
ribbon = typeof(ribbon) == typeof(123) ? data.ribbons[ribbon] : ribbon
// get the current ribbon if gid is not in any of the loaded
// ribbons (crop mode)...
ribbon = ribbon == null ? data.ribbons[getGIDRibbonIndex(null, data)] : ribbon
//search = search == null ? match2(linSearch, binSearch) : search
search = search == null ? binSearch : search
var order = data.order
var target = order.indexOf(gid)
@ -1128,16 +1130,9 @@ function updateImageIndicators(gid, image){
gid = gid == null ? getImageGID() : gid
image = image == null ? getImage() : $(image)
// marks...
if(MARKED.indexOf(gid) != -1){
image.addClass('marked')
// XXX
_addMark('selected', gid, image)
} else {
image.removeClass('marked')
// XXX
_removeMark('selected', gid, image)
}
IMAGE_UPDATERS.forEach(function(update){
update(gid, image)
})
return image
}
@ -1732,6 +1727,7 @@ function showImage(gid){
// target is already loaded...
} else {
// XXX this does not load images correctly at times...
centerView(focusImage(img))
centerRibbons()
}

View File

@ -318,51 +318,76 @@ function saveFileImages(name){
}
function makeBasicLoader(title, file_dfl, file_pattern, finalize){
return function(path){
var res = $.Deferred()
// default locations...
if(path == null){
var base = normalizePath(CACHE_DIR_VAR)
var loader = loadLatestFile(base,
file_dfl,
file_pattern,
null,
[])
// explicit path...
// XXX need to account for paths without a CACHE_DIR
} else {
path = normalizePath(path)
var base = path.split(CACHE_DIR)[0]
//base = normalizePath(path +'/'+ CACHE_DIR_VAR)
base = path +'/'+ CACHE_DIR
// XXX is this correct???
var loader = loadLatestFile(base,
path.split(base)[0],
RegExp(path.split(base)[0]),
null,
[])
}
bubbleProgress(title, loader, res)
res.done(finalize)
return res
}
}
// Load image marks form file
//
// NOTE: if no marks are found then set them to []
function loadFileMarks(path){
var res = $.Deferred()
// default locations...
if(path == null){
var base = normalizePath(CACHE_DIR_VAR)
var loader = loadLatestFile(base,
MARKED_FILE_DEFAULT,
MARKED_FILE_PATTERN,
null,
[])
// explicit path...
// XXX need to account for paths without a CACHE_DIR
} else {
path = normalizePath(path)
var base = path.split(CACHE_DIR)[0]
//base = normalizePath(path +'/'+ CACHE_DIR_VAR)
base = path +'/'+ CACHE_DIR
// XXX is this correct???
var loader = loadLatestFile(base,
path.split(base)[0],
RegExp(path.split(base)[0]),
null,
[])
}
bubbleProgress('Marks', loader, res)
res.done(function(images){
MARKED = images
})
return res
}
var loadFileMarks = makeBasicLoader(
'Marks',
MARKED_FILE_DEFAULT,
MARKED_FILE_PATTERN,
function(data){
MARKED = data
})
// Save image marks to file
function saveFileMarks(name){
name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name
dumpJSON(name + '-marked.json', MARKED)
dumpJSON(name + '-' + MARKED_FILE_DEFAULT, MARKED)
}
var loadFileBookmarks = makeBasicLoader(
'Bookmarks',
BOOKMARKS_FILE_DEFAULT,
BOOKMARKS_FILE_PATTERN,
function(data){
BOOKMARKS = data[0] == null ? [] : data[0]
BOOKMARKS_DATA = data[1] == null ? {} : data[1]
})
function saveFileBookmarks(name){
name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : name
dumpJSON(name + '-' + BOOKMARKS_FILE_DEFAULT, [BOOKMARKS, BOOKMARKS_DATA])
}
@ -414,7 +439,9 @@ function loadFileState(path, prefix){
// : null), res, true),
// load marks if available...
bubbleProgress(prefix,
loadFileMarks(), res, true))
loadFileMarks(), res, true),
bubbleProgress(prefix,
loadFileBookmarks(), res, true))
.done(function(){
reloadViewer()
res.resolve()
@ -458,6 +485,7 @@ function saveFileState(name, no_normalize_path){
dumpJSON(name + '-data.json', data)
// XXX do we need to do this???
saveFileMarks(name)
saveFileBookmarks(name)
// save the updated images...
if(IMAGES_UPDATED.length > 0){

View File

@ -194,6 +194,7 @@ $(function(){
*/
updateImages()
toggleMarkesView('on')
SCROLLER.start()

View File

@ -578,7 +578,14 @@ var KEYBOARD_CONFIG = {
Enter: doc('Toggle single image view',
function(){ toggleSingleImageMode() }),
B: doc('Toggle theme', function(){ toggleTheme() }),
B: {
default: doc('Toggle theme',
function(){ toggleTheme() }),
ctrl: doc('Toggle bookmark',
function(){ toggleBookmark() }),
},
'[': doc('Previous bookmarked image', prevBookmark),
']': doc('Next bookmarked image', nextBookmark),
S: {
default: doc('Start slideshow',

View File

@ -604,12 +604,14 @@ button:hover {
.viewer:not(.marks-visible) .mark {
display: none;
}
.mark.bookmark,
.mark.selected {
width: 0px;
margin-left: 0px;
border: none;
overflow: visible;
}
.mark.bookmark:after,
.mark.selected:after {
display: block;
position: absolute;
@ -631,6 +633,10 @@ button:hover {
.marks-visible.single-image-mode.viewer .mark:after {
display: none;
}
.mark.bookmark:after {
background: yellow;
left: -25;
}
/****************************************************** Image info ***/
.inline-image-info {
display: none;

View File

@ -678,12 +678,14 @@ button:hover {
display: none;
}
.mark.bookmark,
.mark.selected {
width: 0px;
margin-left: 0px;
border: none;
overflow: visible;
}
.mark.bookmark:after,
.mark.selected:after {
display: block;
position: absolute;
@ -712,6 +714,11 @@ button:hover {
display: none;
}
.mark.bookmark:after {
background: yellow;
left: -25;
}
/****************************************************** Image info ***/

View File

@ -6,6 +6,9 @@
//var DEBUG = DEBUG != null ? DEBUG : true
var MARKED_FILE_DEFAULT = 'marked.json'
var MARKED_FILE_PATTERN = /^[0-9]*-marked.json$/
/**********************************************************************
@ -19,8 +22,9 @@ function _addMark(cls, gid, image){
var mark = $('.mark.'+cls+'.'+gid)
if(mark.length == 0){
mark = $('<div class="mark selected"/>')
mark = $('<div class="mark"/>')
.addClass(gid)
.addClass(cls)
.insertAfter(image)
}
return mark
@ -76,6 +80,34 @@ function makeMarkToggler(img_class, mark_class, evt_name){
}
function makeMarkUpdater(img_class, mark_class, test){
return function(gid, image){
// marks...
if(test(gid)){
image.addClass(img_class)
_addMark(mark_class, gid, image)
} else {
image.removeClass(img_class)
_removeMark(mark_class, gid, image)
}
return image
}
}
/**********************************************************************
* Basic marks...
*/
var updateSelectedImageMark = makeMarkUpdater(
'marked',
'selected',
function(gid){
return MARKED.indexOf(gid) > -1
})
IMAGE_UPDATERS.push(updateSelectedImageMark)
// NOTE: to disable MARKED cleanout set no_cleanout_marks to true.
// NOTE: MARKED may contain both gids that are not loaded and that do
// not exist, as there is no way to distinguish between the two