X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/73e8795a3d19b7221f34353799d39808d57a4d05..b33289a3a89915e0418ffe66b34e540aa3ab75ba:/src/smartxml/smartxml.js?ds=sidebyside diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 47c527f..2fd4e41 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -34,13 +34,6 @@ $.extend(DocumentNode.prototype, { clone: function() { var clone = this._$.clone(true, true); - // clone.find('*').addBack().each(function() { - // var n = $(this); - // if(n.data('canvasElement')) { - // n.data('canvasElement', $.extend(true, {}, n.data('canvasElement'))); - // n.data('canvasElement').$element = n.data('canvasElement').$element.clone(true, true); - // } - // }); return this.document.createDocumentNode(clone[0]); }, @@ -234,13 +227,11 @@ var parseXML = function(xml) { var registerTransformation = function(desc, name, target) { var Transformation = transformations.createContextTransformation(desc, name); - //+ to sie powinna nazywac registerTransformationFromDesc or sth - //+ ew. spr czy nie override (tylko jesli powyzej sa prototypy to trudno do nich dojsc) target[name] = function() { var instance = this, args = Array.prototype.slice.call(arguments, 0); return instance.transform(Transformation, args); - } + }; }; var registerMethod = function(methodName, method, target) { @@ -350,7 +341,6 @@ $.extend(Document.prototype, Backbone.Events, { }, trigger: function() { - //console.log('trigger: ' + arguments[0] + (arguments[1] ? ', ' + arguments[1].type : '')); Backbone.Events.trigger.apply(this, arguments); }, @@ -389,9 +379,7 @@ $.extend(Document.prototype, Backbone.Events, { }, registerExtension: function(extension) { - //debugger; - var doc = this, - existingPropertyNames = _.values(this); + var doc = this; ['document', 'documentNode', 'elementNode', 'textNode'].forEach(function(dstName) { var dstExtension = extension[dstName]; @@ -418,11 +406,8 @@ $.extend(Document.prototype, Backbone.Events, { }, transform: function(Transformation, args) { - //console.log('transform'); var toret, transformation; - // ref: odrebnie przygotowanie transformacji, odrebnie jej wykonanie (to pierwsze to analog transform z node) - if(typeof Transformation === 'function') { transformation = new Transformation(this, this, args); } else { @@ -430,13 +415,14 @@ $.extend(Document.prototype, Backbone.Events, { } if(transformation) { this._transformationLevel++; - toret = transformation.run(); - if(this._transformationLevel === 1) { + toret = transformation.run({beUndoable:this._transformationLevel === 1}); + if(this._transformationLevel === 1 && !this._undoInProgress) { this.undoStack.push(transformation); } + if(!this._undoInProgress && this._transformationLevel === 1) { + this.redoStack = []; + } this._transformationLevel--; - //console.log('clearing redo stack'); - this.redoStack = []; return toret; } else { throw new Error('Transformation ' + transformation + ' doesn\'t exist!'); @@ -445,15 +431,20 @@ $.extend(Document.prototype, Backbone.Events, { undo: function() { var transformation = this.undoStack.pop(); if(transformation) { + this._undoInProgress = true; transformation.undo(); + this._undoInProgress = false; this.redoStack.push(transformation); } }, redo: function() { var transformation = this.redoStack.pop(); if(transformation) { - transformation.run(); + this._transformationLevel++; + transformation.run({beUndoable: true}); + this._transformationLevel--; this.undoStack.push(transformation); + } },