canvasNode: meta attributes
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 1 Jul 2013 13:34:15 +0000 (15:34 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 1 Jul 2013 13:34:15 +0000 (15:34 +0200)
modules/documentCanvas/canvasNode.js
modules/documentCanvas/tests/canvasNode.test.js

index 8cf61b1..d9475cb 100644 (file)
@@ -1,4 +1,4 @@
-define(['libs/jquery-1.9.1.min'], function($) {
+define(['libs/jquery-1.9.1.min', 'libs/underscore-min'], function($, _) {
 
 'use strict';
 
@@ -20,6 +20,12 @@ var CanvasNode = function(desc) {
             this.dom.attr('wlxml-class', desc.klass);
         if(desc.content)
             this.dom.text(desc.content);
+        if(desc.meta) {
+            var c = this;
+            _.keys(desc.meta).forEach(function(key) {
+                c.dom.attr('wlxml-meta-'+key, desc.meta[key]);
+            });
+        }
         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);}));
     }
 };
@@ -77,6 +83,28 @@ CanvasNode.prototype.isOfClass = function(klass) {
     return this.getClass() && this.getClass().substr(0, klass.length) === klass;
 };
 
+CanvasNode.prototype.getMetaAttr = function(attr) {
+    return this.dom.attr('wlxml-meta-'+attr);
+}
+
+CanvasNode.prototype.getMetaAttrs = function() {
+    var toret = [];
+    var metaAttrPrefix = 'wlxml-meta-';
+
+    var attrs = this.dom.get(0).attributes;
+    for(var i = 0; i < attrs.length; i++) {
+        var attr = attrs[i];
+        if(attr.name.substr(0, metaAttrPrefix.length) === metaAttrPrefix) {
+            toret.push({name: attr.name.substr(metaAttrPrefix.length), value: attr.value});    
+        }
+    }
+    return toret;
+}
+
+CanvasNode.prototype.setMetaAttr = function(attr, value) {
+    this.dom.attr('wlxml-meta-'+attr, value);
+}
+
 return {
     create: function(desc) {
         return new CanvasNode(desc);
index a1595f7..5dccf7b 100644 (file)
@@ -18,17 +18,24 @@ var assertDomEqual = function(lhs, rhs) {
 
 suite('Create canvas node', function() {  
     test('from description', function() {
-        var node = canvasNode.create({tag: 'header', klass: 'some-class', content: 'some text content'});
+        var node = canvasNode.create({
+            tag: 'header',
+            klass: 'some-class',
+            content: 'some text content',
+            meta: {uri: 'some uri'}
+        });
         assert.equal(node.getTag(), 'header');
         assert.equal(node.getClass(), 'some-class');
         assert.equal(node.getContent(), 'some text content');
-        assertDomEqual($('<div wlxml-tag="header" wlxml-class="some-class">some text content</div>'), node.dom);
+        assert.equal(node.getMetaAttr('uri'), 'some uri');
+        assertDomEqual($('<div wlxml-tag="header" wlxml-class="some-class" wlxml-meta-uri="some uri">some text content</div>'), node.dom);
     });
     
     test('from dom object', function() {
-        var node = canvasNode.create($('<div wlxml-tag="header" wlxml-class="some-class" id="1">'));
+        var node = canvasNode.create($('<div wlxml-tag="header" wlxml-class="some-class" id="1" wlxml-meta-uri="some uri">'));
         assert.equal(node.getTag(), 'header');
         assert.equal(node.getClass(), 'some-class');
+        assert.equal(node.getMetaAttr('uri'), 'some uri');
         //assertDomEqual($('<div wlxml-tag="header" wlxml-class="some-class">'), node.dom);
     });
 });
@@ -58,5 +65,20 @@ suite('comparing nodes', function() {
     });
 });
 
+suite('meta attributes', function() {
+    test('get list of node\'s meta attributes', function() {
+        var node = canvasNode.create({tag: 'tag', klass: 'klass', meta: {a:1, b:2}});
+        var attrs = node.getMetaAttrs();
+        var expected = [{name: 'a', value: '1'}, {name:'b', value: '2'}];
+
+        assert.deepEqual(attrs.sort(), expected.sort());
+    });
+
+    test('set meta attribute', function() {
+        var node = canvasNode.create({tag: 'tag', meta: {a:'1'}});
+        node.setMetaAttr('a', '2');
+        assert.equal(node.dom.attr('wlxml-meta-a'), '2');
+    })
+})
 
 });
\ No newline at end of file