editor: Setting descriptions for transactions performed in actions
[fnpeditor.git] / src / editor / plugins / core / core.js
index d0a376d..3465046 100644 (file)
@@ -62,6 +62,12 @@ var undoRedoAction = function(dir) {
             var allowed = params.document && !!(params.document[dir+'Stack'].length),
                 desc = dir === 'undo' ? gettext('Undo') : gettext('Redo'),
                 descEmpty = dir === 'undo' ? gettext('There is nothing to undo') : gettext('There is nothing to redo');
+            if(allowed) {
+                var metadata = _.last(params.document[dir+'Stack']).metadata;
+                if(metadata) {
+                    desc += ': ' + (metadata.description || gettext('unknown operation'));
+                }
+            }
             return {
                 allowed: allowed,
                 description: allowed ? desc : descEmpty
@@ -86,7 +92,8 @@ var commentAction = {
         icon: 'comment',
         execute: function(params, editor) {
             /* globals Node */
-            var node = params.fragment.node;
+            var node = params.fragment.node,
+                action = this;
             if(node.nodeType === Node.TEXT_NODE) {
                 node = node.parent();
             }
@@ -114,6 +121,10 @@ var commentAction = {
                 var metadata = comment.getMetadata();
                 metadata.add({key: 'creator', value: creator});
                 metadata.add({key: 'date', value: dt});
+            }, {
+                metadata: {
+                    description: action.getState().description
+                }
             });
         },
     },
@@ -156,6 +167,7 @@ var createWrapTextAction = function(createParams) {
 
             return _.extend(state, {
                 allowed: true,
+                description: createParams.description,
                 execute: function(params) {
                     params.fragment.document.transaction(function() {
                         var parent = params.fragment.startNode.parent();
@@ -165,6 +177,10 @@ var createWrapTextAction = function(createParams) {
                             offsetEnd: params.fragment.endOffset,
                             textNodeIdx: [params.fragment.startNode.getIndex(), params.fragment.endNode.getIndex()]
                         });
+                    }, {
+                        metadata: {
+                            description: createParams.description
+                        }
                     });
                 }
             });
@@ -182,7 +198,8 @@ var createLinkFromSelection = function(params) {
             fields: [
                 {label: gettext('Link'), name: 'href', type: 'input'}
             ]
-        });
+        }),
+        action = this;
     
     dialog.on('execute', function(event) {
         doc.transaction(function() {
@@ -195,6 +212,10 @@ var createLinkFromSelection = function(params) {
             span.setAttr('href', event.formData.href);
             event.success();
             return span;
+        }, {
+            metadata: {
+                description: action.getState().description
+            }
         });
     });
     dialog.show();
@@ -210,12 +231,17 @@ var editLink = function(params) {
             fields: [
                 {label: gettext('Link'), name: 'href', type: 'input', initialValue: link.getAttr('href')}
             ]
-        });
+        }),
+        action = this;
     
     dialog.on('execute', function(event) {
         doc.transaction(function() {
             link.setAttr('href', event.formData.href);
             event.success();
+        }, {
+            metadata: {
+                description: action.getState().description
+            }
         });
     });
     dialog.show();
@@ -259,8 +285,8 @@ plugin.actions = [
     undoRedoAction('undo'),
     undoRedoAction('redo'),
     commentAction,
-    createWrapTextAction({name: 'emphasis', klass: 'emp'}),
-    createWrapTextAction({name: 'cite', klass: 'cite'}),
+    createWrapTextAction({name: 'emphasis', klass: 'emp', description: gettext('Mark as emphasized')}),
+    createWrapTextAction({name: 'cite', klass: 'cite', description: gettext('Mark as citation')}),
     linkAction
 ].concat(plugin.actions, templates.actions, footnote.actions, switchTo.actions, lists.actions);