WIP: Refactoring canvas api - canvas, canvasNode + tests
[fnpeditor.git] / modules / documentCanvas / canvasNode.js
diff --git a/modules/documentCanvas/canvasNode.js b/modules/documentCanvas/canvasNode.js
new file mode 100644 (file)
index 0000000..0bfd358
--- /dev/null
@@ -0,0 +1,56 @@
+define(['libs/jquery-1.9.1.min'], function($) {\r
+\r
+'use strict';\r
+\r
+var CanvasNode = function(desc) {\r
+    if(desc instanceof $) {\r
+        this.dom = desc;\r
+        if(!this.dom.attr('id')) {\r
+            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
+        }\r
+    } else {\r
+        var toBlock = ['div', 'document', 'section', 'header'];\r
+        var htmlTag = _.contains(toBlock, desc.tag) ? 'div' : 'span';\r
+        this.dom = $('<' + htmlTag + '>');\r
+        this.dom.attr('wlxml-tag', desc.tag);\r
+        if(desc.klass)\r
+            this.dom.attr('wlxml-class', desc.klass);\r
+        if(desc.content)\r
+            this.dom.text(desc.content);\r
+        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
+    }\r
+};\r
+\r
+CanvasNode.prototype.getTag = function() {\r
+    return this.dom.attr('wlxml-tag');\r
+}\r
+\r
+CanvasNode.prototype.getClass = function() {\r
+    return this.dom.attr('wlxml-class');\r
+}\r
+\r
+CanvasNode.prototype.getId = function() {\r
+    return this.dom.attr('id');\r
+}\r
+\r
+CanvasNode.prototype.getContent = function() {\r
+    return this.dom.text();\r
+}\r
+\r
+CanvasNode.prototype.setContent = function(content) {\r
+    this.dom.text(content);\r
+}\r
+\r
+CanvasNode.prototype.isSame = function(other) {\r
+    return this.dom.get(0).isSameNode(other.dom.get(0));\r
+}\r
+\r
+return {\r
+    create: function(desc) {\r
+        return new CanvasNode(desc);\r
+    }\r
+\r
+}\r
+    \r
+\r
+});
\ No newline at end of file