X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/575435e1d6c772414286d891fbeb2956cd7f6753..3c6c8fe1de117ec69a146ea18aedac5d8dc30691:/src/smartxml/smartxml.js diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 41e8e19..202d9e6 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -764,6 +764,11 @@ $.extend(Document.prototype, Backbone.Events, { }, registerMethod: function(methodName, method) { + if(this[methodName]) { + throw new Error('Cannot extend document with method name {methodName}. Name already exists.' + .replace('{methodName}', methodName) + ); + } this[methodName] = method; }, @@ -772,6 +777,11 @@ $.extend(Document.prototype, Backbone.Events, { }, registerNodeMethod: function(methodName, method) { + if(this._nodeMethods[methodName]) { + throw new Error('Cannot extend document with method name {methodName}. Name already exists.' + .replace('{methodName}', methodName) + ); + } this._nodeMethods[methodName] = method; }, @@ -779,6 +789,37 @@ $.extend(Document.prototype, Backbone.Events, { this._nodeTransformations.register(Transformation); }, + registerExtension: function(extension) { + //debugger; + var doc = this, + existingPropertyNames = _.values(this); + + ['document', 'documentNode'].forEach(function(dstName) { + var dstExtension = extension[dstName]; + if(dstExtension) { + if(dstExtension.methods) { + _.pairs(dstExtension.methods).forEach(function(pair) { + var methodName = pair[0], + method = pair[1], + operation; + operation = {document: 'registerMethod', documentNode: 'registerNodeMethod'}[dstName]; + doc[operation](methodName, method); + + }); + } + + if(dstExtension.transformations) { + _.pairs(dstExtension.transformations).forEach(function(pair) { + var name = pair[0], + desc = pair[1], + operation; + operation = {document: 'registerTransformation', documentNode: 'registerNodeTransformation'}[dstName]; + doc[operation](transformations.createContextTransformation(desc, name)); + }); + } + } + }); + }, transform: function(transformation, args) { //console.log('transform');