var _ = require('libs/underscore'),
toret = {};
+
var getTransDesc = function(desc) {
if(typeof desc === 'function') {
desc = {impl: desc};
var GenericTransformation = function(document, args) {
this.args = args || [];
-
var transformation = this;
- // _.keys(this.args).forEach(function(key) {
- // if(transformation.args[key].nodeType) { //@@ change to instanceof check, fix circular dependency
- // var value = transformation.args[key],
- // path = value.getPath();
- // Object.defineProperty(transformation.args, key, {
- // get: function() {
- // if(transformation.hasRun) {
- // //console.log('returning via path');
- // return transformation.document.getNodeByPath(path);
- // } else {
- // //console.log('returning original arg');
- // return value;
-
- // }
- // }
- // });
- // }
- // });
-
- // potem spr na dotychczasowych undo/redo tests;
var patchObject = function(obj, depth) {
depth = _.isNumber(depth) ? depth : 1;
});
this.document = document;
- this.hasRun = false;
+ this.runCount = 0;
if(desc.init) {
desc.init.call(this);
}
}
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() {
if(desc.undo) {
desc.undo.call(this.context, this);
+ this.runCount++;
} else {
this.document.getNodeByPath(this.changeRootPath).replaceWith(this.snapshot);
}
},
wrapNodeProperty: function(object, propName, value) {
var transformation = this,
+ lastRunNumber = 0,
path;
value = value || object[propName];
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;
}
});
}