mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
basic bookmarks now working...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
a455e55b4d
commit
ee31fa70c5
26
ui/data.js
26
ui/data.js
@ -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()
|
||||
}
|
||||
|
||||
102
ui/files.js
102
ui/files.js
@ -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){
|
||||
|
||||
@ -194,6 +194,7 @@ $(function(){
|
||||
*/
|
||||
|
||||
updateImages()
|
||||
toggleMarkesView('on')
|
||||
|
||||
SCROLLER.start()
|
||||
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 ***/
|
||||
|
||||
34
ui/marks.js
34
ui/marks.js
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user