wlxml: allow extending WLXMLDocument
[fnpeditor.git] / src / editor / modules / documentCanvas / canvas / wlxmlManagers.js
index d566686..66b2ea0 100644 (file)
@@ -11,12 +11,12 @@ var DocumentElementWrapper = function(documentElement) {
     this.documentElement = documentElement;
 
     this.addWidget = function(widget) {
-        documentElement.dom().children('.canvas-widgets').append(widget);
+        documentElement.dom().children('.canvas-widgets').append(widget.DOM ? widget.DOM : widget);
     };
 
     this.clearWidgets = function() {
         documentElement.dom().children('.canvas-widgets').empty();
-    }
+    };
 
     this.setDisplayStyle = function(displayStyle) {
         documentElement.dom().css('display', displayStyle || '');
@@ -33,25 +33,32 @@ var DocumentElementWrapper = function(documentElement) {
 
     this.toggle = function(toggle) {
         documentElement._container().toggle(toggle);
-    }
+    };
 
     var eventBus = documentElement.canvas ? documentElement.canvas.eventBus :
         {trigger: function() {}};
     this.trigger = function() {
         eventBus.trigger.apply(eventBus, arguments);
-    }
+    };
 
-}
+    this.node = documentElement.wlxmlNode;
+};
 
 var getDisplayStyle = function(tag, klass) {
-    if(tag === 'metadata')
+    if(tag === 'metadata') {
         return 'none';
-    if(tag === 'span')
+    }
+    if(tag === 'span') {
         return 'inline';
-    if(klass === 'item')
+    }
+    if(klass && klass.substr(0, 4) === 'item') {
         return null;
+    }
+    if(klass === 'gap') {
+        return 'inline';
+    }
     return 'block';
-}
+};
 
 var GenericManager = function(wlxmlElement) {
     this.el = wlxmlElement;
@@ -69,21 +76,23 @@ $.extend(GenericManager.prototype, {
         this.el.toggle(toggle);
     }
 
-})
+});
 
 var managers = {
     _m: {},
     set: function(tag, klass, manager) {
-        if(!this._m[tag])
+        if(!this._m[tag]) {
             this._m[tag] = {};
+        }
         this._m[tag][klass] = manager;
     },
     get: function(tag,klass) {
-        if(this._m[tag] && this._m[tag][klass])
+        if(this._m[tag] && this._m[tag][klass]) {
             return this._m[tag][klass];
+        }
         return GenericManager;
     }
-}
+};
 
 var FootnoteManager = function(wlxmlElement) {
     this.el = wlxmlElement;
@@ -114,10 +123,11 @@ $.extend(FootnoteManager.prototype, {
         
         this.el.setDisplayStyle(toggle ? 'block' : 'inline');
         this.el.toggle(toggle);
-        if(!options.silent)
+        if(!options.silent) {
             this.el.trigger('elementToggled', toggle, this.el.documentElement);
+        }
     }
-})
+});
 managers.set('aside', 'footnote', FootnoteManager);
 
 
@@ -136,6 +146,31 @@ $.extend(ListItemManager.prototype, {
 });
 managers.set('div', 'item', ListItemManager);
 
+
+var CommentManager = function(wlxmlElement) {
+    this.el = wlxmlElement;
+};
+
+$.extend(CommentManager.prototype, {
+    setup: function() {
+        this.el.clearWidgets();
+        this.el.addWidget(widgets.labelWidget(this.el.tag(), this.el.klass()));
+
+        this.widget = widgets.commentAdnotation(this.el.node);
+        this.el.addWidget(this.widget);
+        this.widget.DOM.show();
+    },
+    updateMetadata: function() {
+        // var parts = [];
+        // this.el.node.getMetadata().forEach(function(row) {
+        //     parts.push(row.getValue());
+        // }, 'creator');
+        // this.widget.text(parts.join(', '));
+        this.widget.update(this.el.node);
+    }
+});
+managers.set('aside', 'comment', CommentManager);
+
 return {
     getFor: function(documentElement) {
         var wlxmlElement = new DocumentElementWrapper(documentElement);