Fixing wrapping text when text not in first node of its parent
[fnpeditor.git] / modules / documentCanvas / canvasNode.js
1 define(['libs/jquery-1.9.1.min'], function($) {\r
2 \r
3 'use strict';\r
4 \r
5 \r
6 var tagSelector = '[wlxml-tag]';\r
7 \r
8 var CanvasNode = function(desc) {\r
9     if(desc instanceof $) {\r
10         this.dom = desc;\r
11         if(!this.dom.attr('id')) {\r
12             this.dom.attr('id', 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8;return v.toString(16);}));\r
13         }\r
14     } else {\r
15         var toBlock = ['div', 'document', 'section', 'header'];\r
16         var htmlTag = _.contains(toBlock, desc.tag) ? 'div' : 'span';\r
17         this.dom = $('<' + htmlTag + '>');\r
18         this.dom.attr('wlxml-tag', desc.tag);\r
19         if(desc.klass)\r
20             this.dom.attr('wlxml-class', desc.klass);\r
21         if(desc.content)\r
22             this.dom.text(desc.content);\r
23         this.dom.attr('id', 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8;return v.toString(16);}));\r
24     }\r
25 };\r
26 \r
27 CanvasNode.prototype.getTag = function() {\r
28     return this.dom.attr('wlxml-tag');\r
29 }\r
30 \r
31 CanvasNode.prototype.getClass = function() {\r
32     return this.dom.attr('wlxml-class');\r
33 }\r
34 \r
35 CanvasNode.prototype.getId = function() {\r
36     return this.dom.attr('id');\r
37 }\r
38 \r
39 CanvasNode.prototype.getContent = function() {\r
40     return this.dom.text();\r
41 }\r
42 \r
43 CanvasNode.prototype.setContent = function(content) {\r
44     this.dom.text(content);\r
45 }\r
46 \r
47 CanvasNode.prototype.isSame = function(other) {\r
48     return (other instanceof CanvasNode) && this.dom.get(0) === other.dom.get(0);\r
49 }\r
50 \r
51 CanvasNode.prototype.children = function() {\r
52     var list = [];\r
53     this.dom.children(tagSelector).each(function() {\r
54         list.push(new CanvasNode($(this)));\r
55     });\r
56     return $(list);\r
57 };\r
58 \r
59 \r
60 CanvasNode.prototype.parent = function() {\r
61     var node = this.dom.parent(tagSelector);\r
62     if(node.length)\r
63         return new CanvasNode(node);\r
64     return null;\r
65 };\r
66 \r
67 CanvasNode.prototype.parents = function() {\r
68     var list = [];\r
69     this.dom.parents(tagSelector).each(function() {\r
70         list.push(new CanvasNode($(this)));\r
71     });\r
72     return $(list);\r
73 };\r
74 \r
75 \r
76 CanvasNode.prototype.isOfClass = function(klass) {\r
77     return this.getClass() && this.getClass().substr(0, klass.length) === klass;\r
78 }\r
79 \r
80 return {\r
81     create: function(desc) {\r
82         return new CanvasNode(desc);\r
83     }\r
84 \r
85 }\r
86     \r
87 \r
88 });