2 'libs/jquery-1.9.1.min'
7 // DocumentElement represents a node from WLXML document rendered inside Canvas
8 var DocumentElement = function(htmlElement) {
9 if(arguments.length === 0)
11 this.$element = $(htmlElement);
12 this.wlxmlTag = this.$element.prop('tagName');
15 $.extend(DocumentElement.prototype, {
16 children: function() {
18 if(this instanceof DocumentTextElement)
22 var elementContent = this.$element.contents();
23 elementContent.each(function(idx) {
24 var element = documentElementFromHTMLElement(this);
25 if(idx === 0 && elementContent.length > 1 && elementContent[1].nodeType === Node.ELEMENT_NODE && (element instanceof DocumentTextElement) && $.trim($(this).text()) === '')
27 if(idx > 0 && element instanceof DocumentTextElement) {
28 if(toret[toret.length-1] instanceof DocumentNodeElement && $.trim($(this).text()) === '')
36 return documentElementFromHTMLElement(this.$element.parent()[0]);
39 sameNode: function(other) {
40 return other && (typeof other === typeof this) && other.$element[0] === this.$element[0];
43 wrapWithNodeElement: function(wlxmlNode) {
44 this.$element.wrap($('<' + wlxmlNode.tag + ' class="' + wlxmlNode.klass + '"">')[0]);
45 return documentElementFromHTMLElement(this.$element.parent().get(0));
48 childIndex: function(child) {
49 var children = this.children(),
51 children.forEach(function(c, idx) {
52 if(c.sameNode(child)) {
61 var DocumentNodeElement = function(htmlElement) {
62 DocumentElement.call(this, htmlElement);
65 var DocumentTextElement = function(htmlElement) {
66 DocumentElement.call(this, htmlElement);
69 DocumentNodeElement.prototype = new DocumentElement();
70 DocumentTextElement.prototype = new DocumentElement();
72 $.extend(DocumentNodeElement.prototype, {
73 append: function(params) {
74 var to_append = DocumentNodeElement.createDOM(params.tag, params.klass);
75 this.$element.append(to_append);
76 return documentElementFromHTMLElement(to_append);
78 before: function(params) {
79 var to_append = DocumentNodeElement.createDOM(params.tag, params.klass);
80 this.$element.before(to_append);
81 return documentElementFromHTMLElement(to_append);
83 after: function(params) {
84 var to_append = DocumentNodeElement.createDOM(params.tag, params.klass);
85 this.$element.after(to_append);
86 return documentElementFromHTMLElement(to_append);
90 DocumentNodeElement.createDOM = function(tag, klass) {
91 var dom = $('<' + tag + '>');
93 dom.attr('class', klass);
97 $.extend(DocumentTextElement.prototype, {
98 setText: function(text) {
99 this.$element[0].data = text;
101 getText: function() {
102 return this.$element.text();
106 var documentElementFromHTMLElement = function(htmlElement) {
107 if(htmlElement.nodeType === Node.ELEMENT_NODE)
108 return new DocumentNodeElement(htmlElement);
109 if(htmlElement.nodeType === Node.TEXT_NODE)
110 return new DocumentTextElement(htmlElement);
114 wrap: function(htmlElement) {
115 return documentElementFromHTMLElement(htmlElement);
117 DocumentElement: DocumentElement,
118 DocumentNodeElement: DocumentNodeElement,
119 DocumentTextElement: DocumentTextElement