50e680dec3a7af6de42c77d32624a465038e799f
[fnpeditor.git] / modules / documentCanvas / canvas / documentElement.js
1 define([
2 'libs/jquery-1.9.1.min'
3 ], function($) {
4     
5 'use strict';
6
7 // DocumentElement represents a node from WLXML document rendered inside Canvas
8 var DocumentElement = function(htmlElement) {
9     if(arguments.length === 0)
10         return;
11     this.$element = $(htmlElement);
12     this.wlxmlTag = this.$element.prop('tagName');
13 };
14
15 $.extend(DocumentElement.prototype, {
16     children: function() {
17         var toret = [];
18         if(this instanceof DocumentTextElement)
19             return toret;
20
21
22         var elementContent = this.$element.contents();
23         elementContent.each(function(idx) {
24             var element = documentElementFromHTMLElement(this);
25             if(
26                 (toret.length === 0 && (element instanceof DocumentNodeElement)) ||
27                 (toret.length > 0 && (toret[toret.length -1] instanceof DocumentNodeElement) && (element instanceof DocumentNodeElement))
28             )
29                 toret.push(documentElementFromHTMLElement(document.createTextNode()));
30             toret.push(element);
31             if((idx === elementContent.length - 1) && (element instanceof DocumentNodeElement))
32                 toret.push(documentElementFromHTMLElement(document.createTextNode()));
33         });
34         return toret;
35     }
36 });
37
38 var DocumentNodeElement = function(htmlElement) {
39     DocumentElement.call(this, htmlElement);
40 };
41
42 var DocumentTextElement = function(htmlElement) {
43     DocumentElement.call(this, htmlElement);  
44 };
45
46 DocumentNodeElement.prototype = new DocumentElement();
47 DocumentTextElement.prototype = new DocumentElement();
48
49 var documentElementFromHTMLElement = function(htmlElement) {
50     if(htmlElement.nodeType === Node.ELEMENT_NODE)
51         return new DocumentNodeElement(htmlElement);
52     if(htmlElement.nodeType === Node.TEXT_NODE)
53         return new DocumentTextElement(htmlElement);
54 }
55
56 return {
57     wrap: function(htmlElement) {
58         return documentElementFromHTMLElement(htmlElement);
59     },
60     DocumentElement: DocumentElement,
61     DocumentNodeElement: DocumentNodeElement,
62     DocumentTextElement: DocumentTextElement
63 };
64
65 });