cleanup
[fnpeditor.git] / src / editor / modules / documentCanvas / canvas / canvas.js
index 0ec22a1..ff2b31e 100644 (file)
@@ -58,7 +58,7 @@ $.extend(TextHandler.prototype, {
 
 
 var Canvas = function(wlxmlDocument, elements) {
-    this.elementsRegister = new ElementsRegister(documentElement.DocumentNodeElement, genericElement);
+    this.elementsRegister = new ElementsRegister(documentElement.DocumentNodeElement);
 
     elements = [
         {tag: 'section', klass: null, prototype: genericElement},
@@ -124,7 +124,7 @@ $.extend(Canvas.prototype, Backbone.Events, {
     reloadRoot: function() {
         this.rootElement = this.createElement(this.wlxmlDocument.root);
         this.wrapper.empty();
-        this.wrapper.append(this.rootElement.dom());
+        this.wrapper.append(this.rootElement.dom);
     },
 
     setupEventHandling: function() {
@@ -233,7 +233,7 @@ $.extend(Canvas.prototype, Backbone.Events, {
 
         this.eventBus.on('elementToggled', function(toggle, element) {
             if(!toggle) {
-                canvas.setCurrentElement(element.getPreviousTextElement());
+                canvas.setCurrentElement(canvas.getPreviousTextElement(element));
             }
         });
     },
@@ -247,7 +247,7 @@ $.extend(Canvas.prototype, Backbone.Events, {
     },
 
     toggleElementHighlight: function(node, toggle) {
-        var element = utils.findCanvasElement(node);
+        var element = utils.getElementForNode(node);
         element.toggleHighlight(toggle);
     },
 
@@ -270,8 +270,22 @@ $.extend(Canvas.prototype, Backbone.Events, {
         }
     },
 
+    getPreviousTextElement: function(relativeToElement, includeInvisible) {
+        return this.getNearestTextElement('above', relativeToElement, includeInvisible);
+    },
+
+    getNextTextElement: function(relativeToElement, includeInvisible) {
+        return this.getNearestTextElement('below', relativeToElement, includeInvisible);
+    },
+
+    getNearestTextElement: function(direction, relativeToElement, includeInvisible) {
+        includeInvisible = includeInvisible !== undefined ? includeInvisible : false;
+        var selector = '[document-text-element]' + (includeInvisible ? '' : ':visible');
+        return this.getDocumentElement(utils.nearestInDocumentOrder(selector, direction, relativeToElement.dom[0]));
+    },
+
     contains: function(element) {
-        return element.dom().parents().index(this.wrapper) !== -1;
+        return element.dom.parents().index(this.wrapper) !== -1;
     },
 
     triggerSelectionChanged: function() {
@@ -289,7 +303,7 @@ $.extend(Canvas.prototype, Backbone.Events, {
         }
 
         if(!(element instanceof documentElement.DocumentElement)) {
-            element = utils.findCanvasElement(element);
+            element = utils.getElementForNode(element);
         }
 
         if(!element || !this.contains(element)) {
@@ -303,18 +317,12 @@ $.extend(Canvas.prototype, Backbone.Events, {
             if(byBrowser && byBrowser.parent().sameNode(nodeToLand)) {
                 return byBrowser;
             }
-            var children = e.children();
-            for(var i = 0; i < children.length; i++) {
-                if(children[i] instanceof documentElement.DocumentTextElement) {
-                    return children[i];
-                }
-            }
-            return null;
+            return e.getVerticallyFirstTextElement();
         }.bind(this);
         var _markAsCurrent = function(element) {
             if(element instanceof documentElement.DocumentTextElement) {
                 this.wrapper.find('.current-text-element').removeClass('current-text-element');
-                element.dom().addClass('current-text-element');
+                element.dom.addClass('current-text-element');
             } else {
                 this.wrapper.find('.current-node-element').removeClass('current-node-element');
                 element._container().addClass('current-node-element');
@@ -349,7 +357,7 @@ $.extend(Canvas.prototype, Backbone.Events, {
 
     _moveCaretToTextElement: function(element, where) {
         var range = document.createRange(),
-            node = element.dom().contents()[0];
+            node = element.dom.contents()[0];
 
         if(typeof where !== 'number') {
             range.selectNodeContents(node);
@@ -377,10 +385,6 @@ $.extend(Canvas.prototype, Backbone.Events, {
         }
     },
 
-    findCanvasElement: function(node) {
-        return utils.findCanvasElement(node);
-    },
-
     toggleGrid: function() {
         this.wrapper.toggleClass('grid-on');
         this.trigger('changed');
@@ -558,7 +562,7 @@ $.extend(Cursor.prototype, {
             if(selection.anchorNode === selection.focusNode) {
                 anchorFirst = selection.anchorOffset <= selection.focusOffset;
             } else {
-                anchorFirst = parent.childIndex(anchorElement) < parent.childIndex(focusElement);
+                anchorFirst = (parent.getFirst(anchorElement, focusElement) === anchorElement);
             }
             placeData = getPlaceData(anchorFirst);
         } else {