X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/4ebb1730539288b8198f6db38b0ac9d56b0e521d..b0bea8d363c03e64a67eb18c4e8702c69ecb72cc:/src/smartxml/smartxml.js diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 60ed6a0..bf64c27 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -10,9 +10,6 @@ define([ 'use strict'; /* globals Node */ -var TEXT_NODE = Node.TEXT_NODE; - - var DocumentNode = function(nativeNode, document) { if(!document) { @@ -48,6 +45,10 @@ $.extend(DocumentNode.prototype, { }, getPath: function(ancestor) { + if(!(this.document.containsNode(this))) { + return null; + } + var nodePath = [this].concat(this.parents()), toret, idx; ancestor = ancestor || this.document.root; @@ -265,6 +266,8 @@ var Document = function(xml) { this._nodeTransformations = {}; this._textNodeTransformations = {}; this._elementNodeTransformations = {}; + + this.registerExtension(coreTransformations); }; $.extend(Document.prototype, Backbone.Events, { @@ -417,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) @@ -427,13 +431,15 @@ $.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); } this._transformationLevel--; //console.log('clearing redo stack'); - this.redoStack = []; + if(!this._undoInProgress) { + this.redoStack = []; + } return toret; } else { throw new Error('Transformation ' + transformation + ' doesn\'t exist!'); @@ -442,15 +448,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); + } }, @@ -477,7 +488,6 @@ $.extend(Document.prototype, Backbone.Events, { return { documentFromXML: function(xml) { var doc = new Document(xml); - doc.registerExtension(coreTransformations); return doc; },