$.extend(DocumentNode.prototype, {
- transform: function(name, args) {
- var Transformation = this.transformations.get(name),
- transformation;
- if(Transformation) {
- transformation = new Transformation(this.document, this, args);
- }
+ transform: function(Transformation, args) {
+ var transformation = new Transformation(this.document, this, args);
return this.document.transform(transformation);
},
var registerTransformation = function(desc, name, target) {
var Transformation = transformations.createContextTransformation(desc, name);
- target.register(Transformation);
+ target[name] = function(args) {
+ var instance = this;
+ return instance.transform(Transformation, args);
+ }
};
var registerMethod = function(methodName, method, target) {
this.undoStack = [];
this.redoStack = [];
this._transformationLevel = 0;
- this.transformations = new transformations.TransformationStorage();
this._nodeMethods = {};
- this._nodeTransformations = new transformations.TransformationStorage();
+ this._textNodeMethods = {};
+ this._elementNodeMethods = {};
+ this._nodeTransformations = {};
};
$.extend(Document.prototype, Backbone.Events, {
from = node[0];
}
}
- var Factory;
+ var Factory, typeMethods;
if(from.nodeType === Node.TEXT_NODE) {
Factory = this.TextNodeFactory;
+ typeMethods = this._textNodeMethods;
} else if(from.nodeType === Node.ELEMENT_NODE) {
Factory = this.ElementNodeFactory;
+ typeMethods = this._elementNodeMethods;
}
var toret = new Factory(from, this);
_.extend(toret, this._nodeMethods);
- toret.transformations = this._nodeTransformations;
+ _.extend(toret, typeMethods);
+ _.extend(toret, this._nodeTransformations);
return toret;
},
return insertion.ofNode;
},
- registerMethod: function(methodName, method) {
- registerMethod(methodName, method, this);
- },
-
- registerNodeMethod: function(methodName, method) {
- registerMethod(methodName, method, this._nodeMethods);
+ registerMethod: function(methodName, method, dstName) {
+ var doc = this;
+ var destination = {
+ document: doc,
+ documentNode: doc._nodeMethods,
+ textNode: doc._textNodeMethods,
+ elementNode: doc._elementNodeMethods
+ }[dstName];
+ registerMethod(methodName, method, destination);
},
registerDocumentTransformation: function(desc, name) {
- registerTransformation(desc, name, this.transformations);
+ registerTransformation(desc, name, this);
},
registerNodeTransformation: function(desc, name) {
var doc = this,
existingPropertyNames = _.values(this);
- ['document', 'documentNode'].forEach(function(dstName) {
+ ['document', 'documentNode', 'elementNode', 'textNode'].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);
+ method = pair[1];
+
+ doc.registerMethod(methodName, method, dstName);
});
}
});
},
- transform: function(transformation, args) {
+ transform: function(Transformation, args) {
//console.log('transform');
- var Transformation, toret;
- if(typeof transformation === 'string') {
- Transformation = this.transformations.get(transformation);
- if(Transformation) {
- transformation = new Transformation(this, this, args);
- }
- }
+ var toret, transformation;
+
+ if(typeof Transformation === 'function') {
+ transformation = new Transformation(this, this, args);
+ } else {
+ transformation = Transformation;
+ }
if(transformation) {
this._transformationLevel++;
toret = transformation.run();