integration wip: marking element as current
[fnpeditor.git] / modules / documentCanvas / canvasNode.js
index 8cf61b1..72343a4 100644 (file)
@@ -1,8 +1,14 @@
-define(['libs/jquery-1.9.1.min'], function($) {
+define([
+'libs/jquery-1.9.1.min',
+'libs/underscore-min',
+'modules/documentCanvas/classAttributes'
+], function($, _, classAttributes) {
 
 'use strict';
 
 
 
 'use strict';
 
 
+
+
 var tagSelector = '[wlxml-tag]';
 
 var CanvasNode = function(desc) {
 var tagSelector = '[wlxml-tag]';
 
 var CanvasNode = function(desc) {
@@ -20,6 +26,14 @@ var CanvasNode = function(desc) {
             this.dom.attr('wlxml-class', desc.klass);
         if(desc.content)
             this.dom.text(desc.content);
             this.dom.attr('wlxml-class', desc.klass);
         if(desc.content)
             this.dom.text(desc.content);
+        if(desc.meta) {
+            var c = this;
+            _.keys(desc.meta)
+            .filter(function(key) {return classAttributes.hasMetaAttr(c.getClass(), key);})
+            .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);}));
     }
 };
         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);}));
     }
 };
@@ -32,6 +46,17 @@ CanvasNode.prototype.getClass = function() {
     return this.dom.attr('wlxml-class');
 };
 
     return this.dom.attr('wlxml-class');
 };
 
+CanvasNode.prototype.setClass = function(klass) {
+    if(klass != this.getClass()) {
+        var c = this;
+        this.getMetaAttrs().forEach(function(attr) {
+            if(!classAttributes.hasMetaAttr(klass, attr.name))
+                c.dom.removeAttr('wlxml-meta-' + attr.name);
+        });
+        this.dom.attr('wlxml-class', klass);
+    }
+};
+
 CanvasNode.prototype.getId = function() {
     return this.dom.attr('id');
 };
 CanvasNode.prototype.getId = function() {
     return this.dom.attr('id');
 };
@@ -77,6 +102,28 @@ CanvasNode.prototype.isOfClass = function(klass) {
     return this.getClass() && this.getClass().substr(0, klass.length) === 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 attrList = classAttributes.getMetaAttrsList(this.getClass());
+    var c = this;
+    attrList.all.forEach(function(attr) {
+        toret.push({name: attr.name, value: c.getMetaAttr(attr.name) || ''});  
+    });
+
+
+    return toret;
+};
+
+CanvasNode.prototype.setMetaAttr = function(attr, value) {
+    this.dom.attr('wlxml-meta-'+attr, value);
+};
+
 return {
     create: function(desc) {
         return new CanvasNode(desc);
 return {
     create: function(desc) {
         return new CanvasNode(desc);