smartxml: Don't preprare for undo if it's obvious it will never come
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Sat, 7 Dec 2013 21:41:36 +0000 (22:41 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Sun, 15 Dec 2013 21:32:49 +0000 (22:32 +0100)
In current implementation nested transformations are never directly undone.

src/smartxml/smartxml.js
src/smartxml/transformations.js

index eb97ea9..bf64c27 100644 (file)
@@ -420,6 +420,7 @@ $.extend(Document.prototype, Backbone.Events, {
     transform: function(Transformation, args) {
         //console.log('transform');
         var toret, transformation;
+        //debugger;
 
         // ref: odrebnie przygotowanie transformacji, odrebnie jej wykonanie (to pierwsze to analog transform z node)
 
@@ -430,7 +431,7 @@ $.extend(Document.prototype, Backbone.Events, {
         }
         if(transformation) {
             this._transformationLevel++;
-            toret = transformation.run();
+            toret = transformation.run({beUndoable:this._transformationLevel === 1});
             if(this._transformationLevel === 1 && !this._undoInProgress) {
                 this.undoStack.push(transformation);
             }
@@ -457,9 +458,10 @@ $.extend(Document.prototype, Backbone.Events, {
         var transformation = this.redoStack.pop();
         if(transformation) {
             this._transformationLevel++;
-            transformation.run();
+            transformation.run({beUndoable: true});
             this._transformationLevel--;
             this.undoStack.push(transformation);
+
         }
     },
 
index f0b89f1..5e461ee 100644 (file)
@@ -87,9 +87,9 @@ toret.createGenericTransformation = function(desc, name) {
     };
     _.extend(GenericTransformation.prototype, {
         name: name,
-        run: function() {
+        run: function(options) {
             var changeRoot;
-            if(!desc.undo) {
+            if(!desc.undo && options.beUndoable) {
                 changeRoot = desc.getChangeRoot ? desc.getChangeRoot.call(this) : this.document.root;
                 this.snapshot = changeRoot.clone();
                 this.changeRootPath = changeRoot.getPath();