diff --git a/Viewer/features/filesystem.js b/Viewer/features/filesystem.js index 3a7fbdcf..864477ed 100755 --- a/Viewer/features/filesystem.js +++ b/Viewer/features/filesystem.js @@ -1528,9 +1528,7 @@ var FileSystemSaveHistoryUIActions = actions.Actions({ Object.keys(data).forEach(function(path){ Object.keys(data[path]).forEach(function(d){ - list.push(d) - }) - }) + list.push(d) }) }) list .sort() @@ -1543,9 +1541,7 @@ var FileSystemSaveHistoryUIActions = actions.Actions({ make(_makeTitle('Original state (unsaved)', 'current', unsaved)) .on('open', function(){ that.load(unsaved) - - delete that.unsaved_index - }) + delete that.unsaved_index }) // Special case: top save state is the default, // no need to mark anything for change, but only @@ -1554,9 +1550,7 @@ var FileSystemSaveHistoryUIActions = actions.Actions({ var first = list.shift() first && make(_makeTitle(Date.fromTimeStamp(first).toShortDate(), first)) .on('open', function(){ - that.loadIndex(that.location.path, first) - }) - } + that.loadIndex(that.location.path, first) }) } list .forEach(function(d){ @@ -1583,12 +1577,9 @@ var FileSystemSaveHistoryUIActions = actions.Actions({ // NOTE: the original 'current' // comment is saved to // .unsaved_index - delete that.comments.save.current - }) - }) + delete that.comments.save.current }) }) // mark the current loaded position... - .addClass(d == from ? 'selected highlighted' : '') - }) + .addClass(d == from ? 'selected highlighted' : '') }) make.done() @@ -3112,21 +3103,29 @@ var FileSystemWriterUIActions = actions.Actions({ 'exportDialog: "images"'], - // XXX format the element into: title (optional) + info - // XXX add a 'name' field to the exportDialog(..)??? - // XXX button icons... - // XXX button shortcuts... // XXX handle presets with repeating titles... - // XXX would be nice to mark sections... + // XXX UI: + // - element format: + // TITLE + // mode / destination / format + // - revise buttons and icons... + // - button shortcuts... + // XXX add a 'name' field to the exportDialog(..)??? + // XXX would be nice to mark/title sections -- presets / history... (???) exportPresets: ['- File/Export presets and history...', widgets.makeUIDialog(function(mode){ var that = this var logger = this.logger && this.logger.push('exportPresets') - // XXX should this show date??? var getName = function(preset){ - return preset.name - || `${ preset.mode }: "${ preset.path }"` } + var date = preset.date + && Date.fromTimeStamp(preset.date).toShortDate() + date = date ? + date + ' - ' + : '' + return date + + (preset.name + || `${ preset.mode }: "${ preset.path }"`) } var buildIndex = function(presets){ var index @@ -3162,7 +3161,7 @@ var FileSystemWriterUIActions = actions.Actions({ sortable: true, update_merge: 'live', new_item: false, - // NOTE: we use empty to restore the automatic value... + // saving an empty string on item edit will clear .name... allow_empty: true, itemedit: function(evt, from, to){ var preset = getPreset(from, presets, index) @@ -3199,7 +3198,8 @@ var FileSystemWriterUIActions = actions.Actions({ make.dialog.select(n) make.dialog.update() } })}], // duplicate... - ['', + //['', + ['clone', function(title){ var preset = JSON.parse( JSON.stringify( @@ -3287,7 +3287,6 @@ var FileSystemWriterUIActions = actions.Actions({ // keyboard... .run(function(){ var that = this - // XXX for some reason this does not work yet... this.keyboard.on('E', function(){ console.log('!!!!!!!!!!!!!', that.selected) }) @@ -3312,21 +3311,19 @@ var FileSystemWriterUIActions = actions.Actions({ function(settings){ settings = settings || this.config['export-settings'] - // XXX need to check preset uniqueness... - settings - && (this.config['export-presets'] = - this.config['export-presets'] - || []) - .push(JSON.parse(JSON.stringify( settings ))) }], - - // XXX need a way to reference a preset... - exportPresetDelete: ['- File/', - function(){}], - exportPresetRun: ['- File/', - function(){}], - + // no settings... + if(!settings){ + console.error('.exportPresets(..): no settings to save.') + return } + // isolate and cleanup... + settings = JSON.parse(JSON.stringify(settings)) + delete settings.date + // XXX check preset uniqueness... + ;(this.config['export-presets'] = + this.config['export-presets'] + || []) + .push(settings) }], // XXX need to check item uniqueness??? - // XXX add date??? exportHistoryPush: ['- File/', function(settings){ settings = settings @@ -3345,6 +3342,10 @@ var FileSystemWriterUIActions = actions.Actions({ // trim the history... history.length > l && history.splice(0, history.length - l) }], + + clearExportHistory: ['- File/Clear export history', + function(){ + delete this.config['export-history'] }], }) @@ -3363,6 +3364,7 @@ module.FileSystemWriterUI = core.ImageGridFeatures.Feature({ actions: FileSystemWriterUIActions, handlers: [ + // update export history... [[ 'exportIndex', 'exportDirs', diff --git a/Viewer/lib/keyboard.js b/Viewer/lib/keyboard.js index 5f182df2..899f06e2 100755 --- a/Viewer/lib/keyboard.js +++ b/Viewer/lib/keyboard.js @@ -1049,13 +1049,14 @@ var KeyboardPrototype = { // // NOTE: this is an event-like proxy to the .handler(..) // - // Bind handler key (top section)... + // Bind handler key ('General' section)... // .on(key, handler) // -> this // // .on(key, section, handler) // -> this // + // NOTE: default mode is 'General'... on: function(key, handler){ // normalize args... if(arguments.length == 3){ @@ -1063,13 +1064,15 @@ var KeyboardPrototype = { } else { var [key, handler] = arguments } var mode = mode - || Object.keys(this.keyboard)[0] + //|| Object.keys(this.keyboard)[0] + || 'General' // bind... return this.handler(mode, key, handler) }, off: function(key, mode){ // normalize args... mode = mode - || Object.keys(this.keyboard)[0] + //|| Object.keys(this.keyboard)[0] + || 'General' // unbind... return this.handler(mode, key, null) },