-// var registerTransformationsFromObject = function(object) {
-//     _.values(object).filter(function(val) {
-//         return typeof val === 'function' && val._isTransformation;
-//     })
-//     .forEach(function(val) {
-//         registerTransformation(val._transformationName, val, object);
-//     });
-// };
-// registerTransformationsFromObject(ElementNode.prototype);
-// registerTransformationsFromObject(TextNode.prototype);
-// registerTransformationsFromObject(Document.prototype);
-
-// var Transformation = function() {
-// };
-// $.extend(Transformation.prototype, {
-
-// });
-
-
-// var createDumbTransformation = function(impl, contextObject) {
-//     var DumbTransformation = function(args) {
-//         this.args = this.args;
-//     };
-//     DumbTransformation.prototype = Object.create(Transformation.prototype);
-//     $.extend(DumbTransformation.prototype, {
-//         run: function() {
-//             impl.apply(contextObject, this.args);
-//         }
-//     });
-
-//     return DumbTransformation;
-
-
-// };
-
-var transformations = {};
-// var registerTransformation = function(name, impl, contextObject) {
-//     if(typeof impl === 'function') {
-//         transformations[name] = createDumbTransformation(impl, contextObject);
-//     }
-// };
-
-// registerTransformation('detachx', DocumentNode.prototype.detach,  )
-
-
-// 1. detach via totalny fallback
-var DetachNodeTransformation = function(args) {
-    this.node = args.node;
-    this.document = this.node.document;
-};
-$.extend(DetachNodeTransformation.prototype, {
-    run: function() {
-        this.oldRoot = this.node.document.root.clone();
-        this.path = this.node.getPath();
-        this.node.detach(); // @TS
-        
-    },
-    undo: function() {
-        this.document.root.replaceWith(this.oldRoot); // this.getDocument?
-        this.node = this.document.getNodeByPath(this.path);
-    }
-});
-transformations['detach'] = DetachNodeTransformation;
-
-//2. detach via wskazanie changeroot
-
-var Detach2NodeTransformation = function(args) {
-    this.nodePath = args.node.getPath();
-    this.document = args.node.document;
-};
-$.extend(Detach2NodeTransformation.prototype, {
-    run: function() {
-        var node = this.document.getNodeByPath(this.nodePath),
-            root = node.parent() ? node.parent() : this.document.root;
-        
-        this.rootPath = root.getPath();
-        this.oldRoot = (root).clone();
-        node.detach();
-    },
-    undo: function() {
-        this.document.getNodeByPath(this.rootPath).replaceWith(this.oldRoot);
-    }
-});
-//transformations['detach2'] = Detach2NodeTransformation;
-
-//2a. generyczna transformacja
-
-var createTransformation = function(desc) {
-
-    var NodeTransformation = function(args) {
-        this.nodePath = args.node.getPath();
-        this.document = args.node.document;
-        this.args = args;
-    };
-    $.extend(NodeTransformation.prototype, {
-        run: function() {
-            var node = this.document.getNodeByPath(this.nodePath),
-                root;
-
-            if(desc.getRoot) {
-                root = desc.getRoot(node);
-            } else {
-                root = this.document.root;
-            }
-            
-            this.rootPath = root.getPath();
-            this.oldRoot = (root).clone();
-            desc.impl.call(node, this.args);
-        },
-        undo: function() {
-            this.document.getNodeByPath(this.rootPath).replaceWith(this.oldRoot);
-        }
-    });
-
-    return NodeTransformation;
-}
-
-transformations['detach2'] = createTransformation({
-    // impl: function() {
-    //     //this.setAttr('class', 'cite'); //