refactoring
[fnpeditor.git] / src / smartxml / smartxml.js
index 202d9e6..bb6258e 100644 (file)
@@ -575,6 +575,22 @@ var parseXML = function(xml) {
     return $($.trim(xml))[0];
 };
 
+var registerTransformation = function(desc, name, target) {
+    var Transformation = transformations.createContextTransformation(desc, name);
+    target.register(Transformation);
+};
+
+var registerMethod = function(methodName, method, target) {
+    if(target[methodName]) {
+        throw new Error('Cannot extend {target} with method name {methodName}. Name already exists.'
+            .replace('{target}', target)
+            .replace('{methodName}', methodName)
+        );
+    }
+    target[methodName] = method;
+};
+
+
 var Document = function(xml) {
     this.loadXML(xml);
     this.undoStack = [];
@@ -764,29 +780,19 @@ $.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;
+        registerMethod(methodName, method, this);
     },
 
-    registerTransformation: function(Transformation) {
-        return this.transformations.register(Transformation);
+    registerNodeMethod: function(methodName, method) {
+        registerMethod(methodName, method, this._nodeMethods);
     },
 
-    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;
+    registerDocumentTransformation: function(desc, name) {
+        registerTransformation(desc, name, this.transformations);
     },
 
-    registerNodeTransformation: function(Transformation) {
-        this._nodeTransformations.register(Transformation);
+    registerNodeTransformation: function(desc, name) {
+        registerTransformation(desc, name, this._nodeTransformations);
     },
 
     registerExtension: function(extension) {
@@ -813,8 +819,8 @@ $.extend(Document.prototype, Backbone.Events, {
                         var name = pair[0],
                             desc = pair[1],
                             operation;
-                        operation = {document: 'registerTransformation', documentNode: 'registerNodeTransformation'}[dstName];
-                        doc[operation](transformations.createContextTransformation(desc, name));
+                        operation = {document: 'registerDocumentTransformation', documentNode: 'registerNodeTransformation'}[dstName];
+                        doc[operation](desc, name);
                     });
                 }
             }