smartxml: Fixing invalidated paths used to access transformation node arguments
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 24 Jan 2014 15:39:38 +0000 (16:39 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 24 Jan 2014 15:48:12 +0000 (16:48 +0100)
This ensures that wrapper around node argument sent to the transformation
is using path only the first time it needs to, not every time
after first run of the transformation.

src/smartxml/transformations.js

index e239b6a..a2a9f48 100644 (file)
@@ -51,7 +51,7 @@ toret.createGenericTransformation = function(desc, name) {
         });
 
         this.document = document;
-        this.hasRun = false;
+        this.runCount = 0;
         if(desc.init) {
             desc.init.call(this);
         }
@@ -73,7 +73,7 @@ toret.createGenericTransformation = function(desc, name) {
             }
             var argsToPass = desc.undo ? [this].concat(this.args) : this.args;
             var toret = desc.impl.apply(this.context, argsToPass);
-            this.hasRun = true;
+            this.runCount++;
             return toret;
         },
         undo: function() {
@@ -88,6 +88,7 @@ toret.createGenericTransformation = function(desc, name) {
         },
         wrapNodeProperty: function(object, propName, value) {
             var transformation = this,
+                lastRunNumber = 0,
                 path;
             
             value = value || object[propName];
@@ -95,11 +96,11 @@ toret.createGenericTransformation = function(desc, name) {
                 path = value.getPath();
                 Object.defineProperty(object, propName, {
                     get: function() {
-                        if(transformation.hasRun && path) {
-                            return transformation.document.getNodeByPath(path);
-                        } else {
-                            return value;
+                        if((lastRunNumber !== transformation.runCount) && path) {
+                            value = transformation.document.getNodeByPath(path);
+                            lastRunNumber = transformation.runCount;
                         }
+                        return value;
                     }
                 });
             }