')
+ .addClass('canvas-widgets')
+ .attr('contenteditable', false),
+ container = $('
')
+ .attr('document-element-content', '');
- container.attr('wlxml-tag', params.tag);
+ dom.append(widgetsContainer, container);
+ // Make sure widgets aren't navigable with arrow keys
+ widgetsContainer.find('*').add(widgetsContainer).attr('tabindex', -1);
+
+ var element = this.fromHTMLElement(dom[0]);
+
+ element.setWlxmlTag(params.tag);
if(params.klass)
- container.attr('wlxml-class', params.klass.replace(/\./g, '-'));
+ element.setWlxmlClass(params.klass);
if(params.meta) {
_.keys(params.meta).forEach(function(key) {
- dom.attr('wlxml-meta-'+key, params.meta[key]);
+ element.setWlxmlMetaAttr(key, params.meta[key]);
});
}
- dom.data('other-attrs', params.others);
-
- /* display style */
- var displayStyle = getDisplayStyle(params.tag, params.klass);
- dom.css('display', displayStyle);
- container.css('display', displayStyle);
-
- var widgets = $('
');
- widgets.append($('').text(params.tag + (params.klass ? ' / ' + params.klass : '')));
- dom.append(widgets);
-
- // Make sure widgets aren't navigable with arrow keys
- widgets.find('*').add(widgets).attr('tabindex', -1);
-
- dom.append(container);
+ element.data('other-attrs', params.others);
if(params.rawChildren) {
container.append(params.rawChildren);
@@ -307,8 +298,11 @@ $.extend(DocumentNodeElement.prototype, {
return this._container().attr('wlxml-tag');
},
setWlxmlTag: function(tag) {
+ if(tag === this.getWlxmlTag())
+ return;
+
this._container().attr('wlxml-tag', tag);
- this._updateDisplayStyle();
+ this._updateWlxmlManager();
},
getWlxmlClass: function() {
var klass = this._container().attr('wlxml-class');
@@ -317,6 +311,9 @@ $.extend(DocumentNodeElement.prototype, {
return undefined;
},
setWlxmlClass: function(klass) {
+ if(klass === this.getWlxmlClass())
+ return;
+
this.getWlxmlMetaAttrs().forEach(function(attr) {
if(!classAttributes.hasMetaAttr(klass, attr.name))
this.dom().removeAttr('wlxml-meta-' + attr.name);
@@ -326,12 +323,12 @@ $.extend(DocumentNodeElement.prototype, {
this._container().attr('wlxml-class', klass.replace(/\./g, '-'));
else
this._container().removeAttr('wlxml-class');
- this._updateDisplayStyle();
+ this._updateWlxmlManager();
},
- _updateDisplayStyle: function() {
- var displayStyle = getDisplayStyle(this.getWlxmlTag, this.getWlxmlClass);
- this.dom().css('display', displayStyle);
- this._container().css('display', displayStyle);
+ _updateWlxmlManager: function() {
+ var manager = wlxmlManagers.getFor(this);
+ this.data('_wlxmlManager', manager);
+ manager.setup();
},
is: function(what) {
if(what === 'list' && _.contains(['list.items', 'list.items.enum'], this.getWlxmlClass()))
@@ -360,7 +357,18 @@ $.extend(DocumentNodeElement.prototype, {
var displayCss = toggle ? 'inline-block' : 'none';
var label = this.dom().children('.canvas-widgets').find('.canvas-widget-label');
label.css('display', displayCss);
- this.dom().toggleClass('highlighted-element');
+ this.toggleHighlight(toggle);
+ },
+
+ toggleHighlight: function(toogle) {
+ this._container().toggleClass('highlighted-element');
+ },
+
+ toggle: function(toggle) {
+ var mng = this.data('_wlxmlManager');
+ if(mng) {
+ mng.toggle(toggle);
+ }
}
});
@@ -530,6 +538,10 @@ $.extend(DocumentTextElement.prototype, {
this.after(newElement);
newElement.after(rhsTextElement);
return newElement;
+ },
+
+ toggleHighlight: function() {
+ // do nothing for now
}
});