X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/0f5cbf957bc0bbdcff93bdb33c227f78041e332b..fd6329db57fc3cc1cf2305da8d0127de4f2198e2:/src/wlxml/wlxml.js diff --git a/src/wlxml/wlxml.js b/src/wlxml/wlxml.js index b560982..016f793 100644 --- a/src/wlxml/wlxml.js +++ b/src/wlxml/wlxml.js @@ -22,23 +22,13 @@ AttributesList.prototype.keys = function() { }; var installObject = function(instance, klass) { - var methods = instance.document.classMethods[klass] || instance.document.classTransformations; - if(methods) { - instance.object = Object.create(_.extend({ - transform: function(name, args) { - // TODO: refactor with DocumentElement.transform - var Transformation = instance.document.classTransformations[klass].get(name), - transformation; - if(Transformation) { - transformation = new Transformation(instance.document, instance, args); - } - return instance.document.transform(transformation); - } - }, methods)); - _.keys(methods).forEach(function(key) { - instance.object[key] = _.bind(instance.object[key], instance); - }); - } + var methods = instance.document.classMethods[klass] || {}, + transformations = instance.document.classTransformations[klass] || {}; + + instance.object = Object.create(_.extend({}, methods, transformations)); + _.keys(methods).concat(_.keys(transformations)).forEach(function(key) { + instance.object[key] = _.bind(instance.object[key], instance); + }); } var WLXMLElementNode = function(nativeNode, document) { @@ -256,8 +246,11 @@ $.extend(WLXMLDocument.prototype, { }, registerClassTransformation: function(Transformation, className) { - var thisClassTransformations = (this.classTransformations[className] = this.classTransformations[className] || new transformations.TransformationStorage()); - return thisClassTransformations.register(Transformation); + var thisClassTransformations = (this.classTransformations[className] = this.classTransformations[className] || {}); + thisClassTransformations[Transformation.prototype.name] = function(args) { + var nodeInstance = this; + return nodeInstance.transform(Transformation, args); + } }, registerClassMethod: function(methodName, method, className) { @@ -268,19 +261,7 @@ $.extend(WLXMLDocument.prototype, { registerExtension: function(extension) { //debugger; smartxml.Document.prototype.registerExtension.call(this, extension); - var doc = this, - existingPropertyNames = _.values(this); - - var getTrans = function(desc, methodName) { - if(typeof desc === 'function') { - desc = {impl: desc}; - } - if(!desc.impl) { - throw new Error('Got transformation description without implementation.') - } - desc.name = desc.name || methodName; - return desc; - }; + var doc = this; _.pairs(extension.wlxmlClass).forEach(function(pair) { var className = pair[0], @@ -293,8 +274,9 @@ $.extend(WLXMLDocument.prototype, { }); _.pairs(classExtension.transformations || {}).forEach(function(pair) { - var transformation = getTrans(pair[1], pair[0]); - doc.registerClassTransformation(transformations.createContextTransformation(transformation), className); + var name = pair[0], + desc = pair[1]; + doc.registerClassTransformation(transformations.createContextTransformation(desc, name), className); }); });