added undo to marks/bookmarks...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2017-03-30 14:07:50 +03:00
parent d524366e3e
commit 804fe63040
3 changed files with 41 additions and 10 deletions

View File

@ -631,18 +631,25 @@ var JournalActions = actions.Actions({
var cur = this.current var cur = this.current
var args = args2array(arguments) var args = args2array(arguments)
return function(){ var data = {
this.journalPush({ type: 'basic',
type: 'basic',
action: action, action: action,
args: args, args: args,
// the current image before the action... // the current image before the action...
current: cur, current: cur,
// the target (current) image after action... // the target (current) image after action...
target: this.current, target: this.current,
})
} }
// test if we need to journal this action signature...
var test = that.getActionAttr(action, 'undoable')
if(test && !test.call(that, data)){
return
}
// journal after the action is done...
return function(){ this.journalPush(data) }
} }
} }

View File

@ -278,10 +278,12 @@ module.GLOBAL_KEYBOARD = {
shift_Up: 'shiftImageUp', shift_Up: 'shiftImageUp',
alt_shift_Up: 'travelImageUp', alt_shift_Up: 'travelImageUp',
ctrl_shift_Up: 'shiftImageUpNewRibbon', ctrl_shift_Up: 'shiftImageUpNewRibbon',
ctrl_Up: 'shiftMarkedUp',
shift_Down: 'shiftImageDown', shift_Down: 'shiftImageDown',
alt_shift_Down: 'travelImageDown', alt_shift_Down: 'travelImageDown',
ctrl_shift_Down: 'shiftImageDownNewRibbon', ctrl_shift_Down: 'shiftImageDownNewRibbon',
ctrl_Down: 'shiftMarkedDown',
alt_Left: 'shiftImageLeft!', alt_Left: 'shiftImageLeft!',
alt_Right: 'shiftImageRight!', alt_Right: 'shiftImageRight!',
@ -351,6 +353,7 @@ module.GLOBAL_KEYBOARD = {
// marking... // marking...
M: 'toggleMark', M: 'toggleMark',
ctrl_A: 'toggleMark!: "ribbon" "on" -- Mark all images in ribbon', ctrl_A: 'toggleMark!: "ribbon" "on" -- Mark all images in ribbon',
ctrl_shift_A: 'toggleMarkBlock!',
ctrl_D: 'toggleMark!: "ribbon" "off" -- Unmark all images in ribbon', ctrl_D: 'toggleMark!: "ribbon" "off" -- Unmark all images in ribbon',
ctrl_I: 'toggleMark!: "ribbon" -- Invert marks in ribbon', ctrl_I: 'toggleMark!: "ribbon" -- Invert marks in ribbon',
',': 'prevMarked', ',': 'prevMarked',

View File

@ -104,6 +104,24 @@ function makeTagTogglerAction(tag){
} }
var undoTag = function(action){
return {
// do not journal calls that have no side-effects, e.g. toggler
// introspection...
// XXX should this be a generic predicate???
undoable: function(a){
return a.args.indexOf('?') < 0
&& a.args.indexOf('??') < 0 },
undo: function(a){
this[action].apply(this,
// XXX is argument handling here too optimistic???
a.args.map(function(e){
return e == 'on' ? 'off'
: e == 'off' ? 'on'
: e })) },
} }
// //
// Direction can be: // Direction can be:
// - 'up' // - 'up'
@ -190,7 +208,9 @@ var ImageMarkActions = actions.Actions({
// Invert marks on current ribbon // Invert marks on current ribbon
// .toggleMark('ribbon') // .toggleMark('ribbon')
// //
//
toggleMark: ['Mark|Image/Image $mark', toggleMark: ['Mark|Image/Image $mark',
undoTag('toggleMark'),
makeTagTogglerAction('selected')], makeTagTogglerAction('selected')],
toggleMarkBlock: ['Mark/Mark $block', toggleMarkBlock: ['Mark/Mark $block',
core.doc`A block is a set of adjacent images either marked on unmarked core.doc`A block is a set of adjacent images either marked on unmarked
@ -329,6 +349,7 @@ var ImageBookmarkActions = actions.Actions({
}, },
toggleBookmark: ['Bookmark|Image/Image $bookmark', toggleBookmark: ['Bookmark|Image/Image $bookmark',
undoTag('toggleBookmark'),
makeTagTogglerAction('bookmark')], makeTagTogglerAction('bookmark')],
// action can be: // action can be:
// 'on' - toggle all on // 'on' - toggle all on