From: Aleksander Ɓukasz Date: Tue, 18 Feb 2014 11:26:15 +0000 (+0100) Subject: smartxml: allow for adding metadata to transaction X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/7427515e04e110e91793887b873f5853751c271a?ds=inline smartxml: allow for adding metadata to transaction --- diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 5cadcd7..505ab85 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -558,11 +558,11 @@ $.extend(Document.prototype, Backbone.Events, { } }, - startTransaction: function() { + startTransaction: function(metadata) { if(this._currentTransaction) { throw new Error('Nested transactions not supported!'); } - this._currentTransaction = new Transaction([]); + this._currentTransaction = new Transaction([], metadata); }, endTransaction: function() { @@ -575,9 +575,9 @@ $.extend(Document.prototype, Backbone.Events, { this._currentTransaction = null; }, - transaction: function(callback, context) { + transaction: function(callback, context, metadata) { var toret; - this.startTransaction(); + this.startTransaction(metadata); toret = callback.call(context); this.endTransaction(); return toret; @@ -608,8 +608,9 @@ $.extend(Document.prototype, Backbone.Events, { } }); -var Transaction = function(transformations) { +var Transaction = function(transformations, metadata) { this.transformations = transformations || []; + this.metadata = metadata; }; $.extend(Transaction.prototype, { pushTransformation: function(transformation) { diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index 491c586..cc2b3cf 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -1632,6 +1632,24 @@ describe('smartxml', function() { expect(doc.root.getAttr('smart')).to.equal('1'); expect(doc.root.getAttr('unaware')).to.equal('1'); }); + + it('can have associated metadata', function() { + var doc = getDocumentFromXML('
'), + metadata = Object.create({}); + + doc.registerExtension({document: {transformations: { + test: function() { + this.trigger('change'); + } + }}}); + + doc.startTransaction(metadata); + doc.test(); + doc.endTransaction(); + + var transaction = doc.undoStack[0]; + expect(transaction.metadata).to.equal(metadata); + }); }); describe('Regression tests', function() {