mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-30 19:00:09 +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_FILE_PATTERN = /^[0-9]*-images.json$/
|
||||||
var IMAGES_DIFF_FILE_PATTERN = /^[0-9]*-images-diff.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_DEFAULT = 'data.json'
|
||||||
var DATA_FILE_PATTERN = /^[0-9]*-data.json$/
|
var DATA_FILE_PATTERN = /^[0-9]*-data.json$/
|
||||||
|
|
||||||
@ -170,6 +167,8 @@ var SYNC_IMG_LOADER = false
|
|||||||
//
|
//
|
||||||
var SETUP_BINDINGS = []
|
var SETUP_BINDINGS = []
|
||||||
|
|
||||||
|
var IMAGE_UPDATERS = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
@ -508,9 +507,12 @@ function getGIDBefore(gid, ribbon, search, data){
|
|||||||
// XXX get a ribbon without getting into DOM...
|
// XXX get a ribbon without getting into DOM...
|
||||||
// ...dependency leek...
|
// ...dependency leek...
|
||||||
ribbon = ribbon == null ? getGIDRibbonIndex(gid, data) : ribbon
|
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
|
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 order = data.order
|
||||||
|
|
||||||
var target = order.indexOf(gid)
|
var target = order.indexOf(gid)
|
||||||
@ -1128,16 +1130,9 @@ function updateImageIndicators(gid, image){
|
|||||||
gid = gid == null ? getImageGID() : gid
|
gid = gid == null ? getImageGID() : gid
|
||||||
image = image == null ? getImage() : $(image)
|
image = image == null ? getImage() : $(image)
|
||||||
|
|
||||||
// marks...
|
IMAGE_UPDATERS.forEach(function(update){
|
||||||
if(MARKED.indexOf(gid) != -1){
|
update(gid, image)
|
||||||
image.addClass('marked')
|
})
|
||||||
// XXX
|
|
||||||
_addMark('selected', gid, image)
|
|
||||||
} else {
|
|
||||||
image.removeClass('marked')
|
|
||||||
// XXX
|
|
||||||
_removeMark('selected', gid, image)
|
|
||||||
}
|
|
||||||
|
|
||||||
return image
|
return image
|
||||||
}
|
}
|
||||||
@ -1732,6 +1727,7 @@ function showImage(gid){
|
|||||||
|
|
||||||
// target is already loaded...
|
// target is already loaded...
|
||||||
} else {
|
} else {
|
||||||
|
// XXX this does not load images correctly at times...
|
||||||
centerView(focusImage(img))
|
centerView(focusImage(img))
|
||||||
centerRibbons()
|
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
|
// Load image marks form file
|
||||||
//
|
//
|
||||||
// NOTE: if no marks are found then set them to []
|
// NOTE: if no marks are found then set them to []
|
||||||
function loadFileMarks(path){
|
var loadFileMarks = makeBasicLoader(
|
||||||
var res = $.Deferred()
|
'Marks',
|
||||||
// default locations...
|
MARKED_FILE_DEFAULT,
|
||||||
if(path == null){
|
MARKED_FILE_PATTERN,
|
||||||
var base = normalizePath(CACHE_DIR_VAR)
|
function(data){
|
||||||
var loader = loadLatestFile(base,
|
MARKED = data
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Save image marks to file
|
// Save image marks to file
|
||||||
function saveFileMarks(name){
|
function saveFileMarks(name){
|
||||||
name = name == null ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp()) : 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),
|
// : null), res, true),
|
||||||
// load marks if available...
|
// load marks if available...
|
||||||
bubbleProgress(prefix,
|
bubbleProgress(prefix,
|
||||||
loadFileMarks(), res, true))
|
loadFileMarks(), res, true),
|
||||||
|
bubbleProgress(prefix,
|
||||||
|
loadFileBookmarks(), res, true))
|
||||||
.done(function(){
|
.done(function(){
|
||||||
reloadViewer()
|
reloadViewer()
|
||||||
res.resolve()
|
res.resolve()
|
||||||
@ -458,6 +485,7 @@ function saveFileState(name, no_normalize_path){
|
|||||||
dumpJSON(name + '-data.json', data)
|
dumpJSON(name + '-data.json', data)
|
||||||
// XXX do we need to do this???
|
// XXX do we need to do this???
|
||||||
saveFileMarks(name)
|
saveFileMarks(name)
|
||||||
|
saveFileBookmarks(name)
|
||||||
|
|
||||||
// save the updated images...
|
// save the updated images...
|
||||||
if(IMAGES_UPDATED.length > 0){
|
if(IMAGES_UPDATED.length > 0){
|
||||||
|
|||||||
@ -194,6 +194,7 @@ $(function(){
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
updateImages()
|
updateImages()
|
||||||
|
toggleMarkesView('on')
|
||||||
|
|
||||||
SCROLLER.start()
|
SCROLLER.start()
|
||||||
|
|
||||||
|
|||||||
@ -578,7 +578,14 @@ var KEYBOARD_CONFIG = {
|
|||||||
Enter: doc('Toggle single image view',
|
Enter: doc('Toggle single image view',
|
||||||
function(){ toggleSingleImageMode() }),
|
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: {
|
S: {
|
||||||
default: doc('Start slideshow',
|
default: doc('Start slideshow',
|
||||||
|
|||||||
@ -604,12 +604,14 @@ button:hover {
|
|||||||
.viewer:not(.marks-visible) .mark {
|
.viewer:not(.marks-visible) .mark {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.mark.bookmark,
|
||||||
.mark.selected {
|
.mark.selected {
|
||||||
width: 0px;
|
width: 0px;
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
border: none;
|
border: none;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
|
.mark.bookmark:after,
|
||||||
.mark.selected:after {
|
.mark.selected:after {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -631,6 +633,10 @@ button:hover {
|
|||||||
.marks-visible.single-image-mode.viewer .mark:after {
|
.marks-visible.single-image-mode.viewer .mark:after {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.mark.bookmark:after {
|
||||||
|
background: yellow;
|
||||||
|
left: -25;
|
||||||
|
}
|
||||||
/****************************************************** Image info ***/
|
/****************************************************** Image info ***/
|
||||||
.inline-image-info {
|
.inline-image-info {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
@ -678,12 +678,14 @@ button:hover {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mark.bookmark,
|
||||||
.mark.selected {
|
.mark.selected {
|
||||||
width: 0px;
|
width: 0px;
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
border: none;
|
border: none;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
|
.mark.bookmark:after,
|
||||||
.mark.selected:after {
|
.mark.selected:after {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -712,6 +714,11 @@ button:hover {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mark.bookmark:after {
|
||||||
|
background: yellow;
|
||||||
|
left: -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************** Image info ***/
|
/****************************************************** Image info ***/
|
||||||
|
|||||||
34
ui/marks.js
34
ui/marks.js
@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
//var DEBUG = DEBUG != null ? DEBUG : true
|
//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)
|
var mark = $('.mark.'+cls+'.'+gid)
|
||||||
|
|
||||||
if(mark.length == 0){
|
if(mark.length == 0){
|
||||||
mark = $('<div class="mark selected"/>')
|
mark = $('<div class="mark"/>')
|
||||||
.addClass(gid)
|
.addClass(gid)
|
||||||
|
.addClass(cls)
|
||||||
.insertAfter(image)
|
.insertAfter(image)
|
||||||
}
|
}
|
||||||
return mark
|
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: to disable MARKED cleanout set no_cleanout_marks to true.
|
||||||
// NOTE: MARKED may contain both gids that are not loaded and that do
|
// 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
|
// not exist, as there is no way to distinguish between the two
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user