diff --git a/ui/bookmarks.js b/ui/bookmarks.js
index 435ee752..04a9c0da 100755
--- a/ui/bookmarks.js
+++ b/ui/bookmarks.js
@@ -156,7 +156,36 @@ function prevBookmark(){
-/*********************************************************************/
+/**********************************************************************
+* Files...
+*/
+
+var loadFileBookmarks = makeFileLoader(
+ 'Bookmarks',
+ BOOKMARKS_FILE_DEFAULT,
+ BOOKMARKS_FILE_PATTERN,
+ function(data){
+ BOOKMARKS = data[0] == null ? [] : data[0]
+ BOOKMARKS_DATA = data[1] == null ? {} : data[1]
+ })
+FILE_LOADERS.push(loadFileBookmarks)
+
+
+var saveFileBookmarks = makeFileSaver(
+ BOOKMARKS_FILE_DEFAULT,
+ function(){
+ return [
+ BOOKMARKS,
+ BOOKMARKS_DATA
+ ]
+ })
+FILE_SAVERS.push(saveFileBookmarks)
+
+
+
+/**********************************************************************
+* Setup...
+*/
// setup event handlers for the bookmark framework...
//
diff --git a/ui/files.js b/ui/files.js
index 45f88339..c0270176 100755
--- a/ui/files.js
+++ b/ui/files.js
@@ -6,6 +6,9 @@
//var DEBUG = DEBUG != null ? DEBUG : true
+var FILE_LOADERS = []
+var FILE_SAVERS = []
+
/**********************************************************************
@@ -80,6 +83,19 @@ function bubbleProgress(prefix, from, to, only_progress){
}
+function runFileLoaders(prefix, res){
+ return $.when.apply(null, FILE_LOADERS.map(function(load){
+ return bubbleProgress(prefix, load(), res, true)
+ }))
+}
+// XXX do we need bubbleProgress(..) here???
+function runFileSavers(name){
+ FILE_SAVERS.map(function(save){
+ return save(name)
+ })
+}
+
+
// Semi-generic deferred file loader
//
// if pattern is given, then search for the latest (ordered last) file
@@ -183,6 +199,57 @@ function loadLatestFile(path, dfl, pattern, diff_pattern, default_data){
}
+function makeFileLoader(title, file_dfl, file_pattern, data_set){
+ 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(data_set)
+
+ return res
+ }
+}
+
+
+function makeFileSaver(file_dfl, data_get){
+ return function(name){
+ name = name == null
+ ? normalizePath(CACHE_DIR_VAR +'/'+ Date.timeStamp())
+ : name
+
+ dumpJSON(name + '-' + file_dfl, data_get())
+ }
+}
+
+
+
+/*********************************************************************/
+
// Construct a ribbons hierarchy from the fav dirs structure
//
// NOTE: this depends on listDir(...)
@@ -318,79 +385,6 @@ 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 []
-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_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])
-}
-
-
// Load images, ribbons and marks from cache
//
// XXX add support for explicit filenames...
@@ -438,10 +432,13 @@ function loadFileState(path, prefix){
// normalizePath(DATA.image_file, base)
// : null), res, true),
// load marks if available...
+ runFileLoaders(prefix, res))
+ /*
bubbleProgress(prefix,
loadFileMarks(), res, true),
bubbleProgress(prefix,
loadFileBookmarks(), res, true))
+ */
.done(function(){
reloadViewer()
res.resolve()
@@ -484,8 +481,7 @@ function saveFileState(name, no_normalize_path){
dumpJSON(name + '-data.json', data)
// XXX do we need to do this???
- saveFileMarks(name)
- saveFileBookmarks(name)
+ runFileSavers(name)
// save the updated images...
if(IMAGES_UPDATED.length > 0){
diff --git a/ui/index.html b/ui/index.html
index 5fdc961d..4f458f0e 100755
--- a/ui/index.html
+++ b/ui/index.html
@@ -27,6 +27,7 @@
+
@@ -34,7 +35,6 @@
-
diff --git a/ui/marks.js b/ui/marks.js
index b9b81948..7f77ea36 100755
--- a/ui/marks.js
+++ b/ui/marks.js
@@ -443,7 +443,38 @@ function markImagesDialog(){
}
-/*********************************************************************/
+
+/**********************************************************************
+* Files...
+*/
+
+// Load image marks form file
+//
+// NOTE: if no marks are found then set them to []
+var loadFileMarks = makeFileLoader(
+ 'Marks',
+ MARKED_FILE_DEFAULT,
+ MARKED_FILE_PATTERN,
+ function(data){
+ MARKED = data
+ })
+FILE_LOADERS.push(loadFileMarks)
+
+
+// Save image marks to file
+var saveFileMarks = makeFileSaver(
+ MARKED_FILE_DEFAULT,
+ function(){
+ return MARKED
+ })
+FILE_SAVERS.push(saveFileMarks)
+
+
+
+/**********************************************************************
+* Setup...
+*/
+
function setupMarks(viewer){
console.log('Marks: setup...')