canvas api: fixing unwrapContents
[fnpeditor.git] / modules / documentCanvas / canvas / canvas.js
index 4b43c8c..51af41b 100644 (file)
@@ -38,14 +38,14 @@ $.extend(Canvas.prototype, {
                         others[attr.name] = attr.value;
                 }
 
                         others[attr.name] = attr.value;
                 }
 
-                var element = documentElement.DocumentNodeElement.create({
+                var element = canvas.createNodeElement({
                     tag: currentTag.prop('tagName').toLowerCase(),
                     klass: currentTag.attr('class'),
                     meta: meta,
                     others: others,
                     rawChildren: currentTag.contents(),
                     prepopulateOnEmpty: true
                     tag: currentTag.prop('tagName').toLowerCase(),
                     klass: currentTag.attr('class'),
                     meta: meta,
                     others: others,
                     rawChildren: currentTag.contents(),
                     prepopulateOnEmpty: true
-                }, canvas);
+                });
 
                 ['orig-before', 'orig-after', 'orig-begin', 'orig-end'].forEach(function(attr) {
                     element.data(attr, '');
 
                 ['orig-before', 'orig-after', 'orig-begin', 'orig-end'].forEach(function(attr) {
                     element.data(attr, '');
@@ -191,8 +191,7 @@ $.extend(Canvas.prototype, {
 
             this.eventBus.on('elementToggled', function(toggle, element) {
                 if(!toggle) {
 
             this.eventBus.on('elementToggled', function(toggle, element) {
                 if(!toggle) {
-                    element = canvas.getDocumentElement(utils.nearestInDocumentOrder('[document-text-element]:visible', 'above', element.dom()[0]));
-                    canvas.setCurrentElement(element);
+                    canvas.setCurrentElement(element.getPreviousTextElement());
                 }
             })
 
                 }
             })
 
@@ -211,6 +210,10 @@ $.extend(Canvas.prototype, {
         return documentElement.DocumentNodeElement.fromHTMLElement(this.d.get(0), this); //{wlxmlTag: this.d.prop('tagName')};
     },
 
         return documentElement.DocumentNodeElement.fromHTMLElement(this.d.get(0), this); //{wlxmlTag: this.d.prop('tagName')};
     },
 
+    createNodeElement: function(params) {
+        return documentElement.DocumentNodeElement.create(params, this);
+    },
+
     wrapText: function(params) {
         params = _.extend({textNodeIdx: 0}, params);
         if(typeof params.textNodeIdx === 'number')
     wrapText: function(params) {
         params = _.extend({textNodeIdx: 0}, params);
         if(typeof params.textNodeIdx === 'number')
@@ -228,7 +231,7 @@ $.extend(Canvas.prototype, {
             suffixOutside = textNode2.getText().substr(params.offsetEnd)
         ;
         
             suffixOutside = textNode2.getText().substr(params.offsetEnd)
         ;
         
-        var wrapperElement = documentElement.DocumentNodeElement.create({tag: params._with.tag, klass: params._with.klass});
+        var wrapperElement = this.createNodeElement({tag: params._with.tag, klass: params._with.klass});
         textNode1.after(wrapperElement);
         textNode1.detach();
         
         textNode1.after(wrapperElement);
         textNode1.detach();
         
@@ -258,7 +261,7 @@ $.extend(Canvas.prototype, {
 
         var parent = params.element1.parent(),
             parentChildren = parent.children(),
 
         var parent = params.element1.parent(),
             parentChildren = parent.children(),
-            wrapper = documentElement.DocumentNodeElement.create({
+            wrapper = this.createNodeElement({
                 tag: params._with.tag,
                 klass: params._with.klass}),
             idx1 = parent.childIndex(params.element1),
                 tag: params._with.tag,
                 klass: params._with.klass}),
             idx1 = parent.childIndex(params.element1),
@@ -417,7 +420,8 @@ $.extend(Canvas.prototype.list, {
         if(!(params.element1.parent().sameNode(params.element2.parent())))
             return false;
             
         if(!(params.element1.parent().sameNode(params.element2.parent())))
             return false;
             
-        var parent = params.element1.parent();
+        var parent = params.element1.parent(),
+            canvas = params.element1.canvas;
         
         if(parent.childIndex(params.element1) > parent.childIndex(params.element2)) {
             var tmp = params.element1;
         
         if(parent.childIndex(params.element1) > parent.childIndex(params.element2)) {
             var tmp = params.element1;
@@ -428,7 +432,6 @@ $.extend(Canvas.prototype.list, {
         var elementsToWrap = [];
         
         var place = 'before';
         var elementsToWrap = [];
         
         var place = 'before';
-        var canvas = this;
         parent.children().some(function(element) {
             var _e = element;
             if(element.sameNode(params.element1))
         parent.children().some(function(element) {
             var _e = element;
             if(element.sameNode(params.element1))
@@ -446,8 +449,7 @@ $.extend(Canvas.prototype.list, {
                 return true;
         });
         
                 return true;
         });
         
-        var listElement = documentElement.DocumentNodeElement.create({tag: 'div', klass: 'list-items' + (params.type === 'enum' ? '-enum' : '')});
-        
+        var listElement = canvas.createNodeElement({tag: 'div', klass: 'list-items' + (params.type === 'enum' ? '-enum' : '')});
         var toret;
         if(parent.is('list')) {
             var item = listElement.wrapWithNodeElement({tag: 'div', klass: 'item'});
         var toret;
         if(parent.is('list')) {
             var item = listElement.wrapWithNodeElement({tag: 'div', klass: 'item'});
@@ -477,6 +479,7 @@ $.extend(Canvas.prototype.list, {
             succeedingItems = [],
             items = list.children(),
             listIsNested = list.parent().getWlxmlClass() === 'item',
             succeedingItems = [],
             items = list.children(),
             listIsNested = list.parent().getWlxmlClass() === 'item',
+            canvas = params.element1.canvas,
             i;
 
         if(idx1 > idx2) {
             i;
 
         if(idx1 > idx2) {
@@ -518,7 +521,7 @@ $.extend(Canvas.prototype.list, {
                     item.setWlxmlClass(null);
                 reference = item;
             });
                     item.setWlxmlClass(null);
                 reference = item;
             });
-            var secondList = documentElement.DocumentNodeElement.create({tag: 'div', klass:'list-items'}, this),
+            var secondList = canvas.createNodeElement({tag: 'div', klass:'list-items'}),
                 toAdd = secondList;
             
             if(listIsNested) {
                 toAdd = secondList;
             
             if(listIsNested) {