fromHTMLElement: function(htmlElement, canvas) {
var $element = $(htmlElement);
- if(htmlElement.nodeType === Node.ELEMENT_NODE && $element.attr('wlxml-tag'))
+ if(htmlElement.nodeType === Node.ELEMENT_NODE && $element.attr('document-node-element') !== undefined)
return DocumentNodeElement.fromHTMLElement(htmlElement, canvas);
if($element.attr('wlxml-text') !== undefined || (htmlElement.nodeType === Node.TEXT_NODE && $element.parent().attr('wlxml-text') !== undefined))
return DocumentTextElement.fromHTMLElement(htmlElement, canvas);
return this.$element;
},
parent: function() {
- var parents = this.$element.parents('[wlxml-tag]');
+ var parents = this.$element.parents('[document-node-element]');
if(parents.length)
return DocumentElement.fromHTMLElement(parents[0], this.canvas);
return null;
$.extend(DocumentNodeElement, {
createDOM: function(params) {
- var dom = $('<div>')
- .attr('wlxml-tag', params.tag);
+ var dom = $('<div document-node-element>'),
+ container = $('<div document-element-content>');
+
+ container.attr('wlxml-tag', params.tag);
if(params.klass)
- dom.attr('wlxml-class', params.klass.replace(/\./g, '-'));
+ container.attr('wlxml-class', params.klass.replace(/\./g, '-'));
if(params.meta) {
_.keys(params.meta).forEach(function(key) {
dom.attr('wlxml-meta-'+key, params.meta[key]);
// Make sure widgets aren't navigable with arrow keys
widgets.find('*').add(widgets).attr('tabindex', -1);
+ dom.append(container);
+
+ if(params.rawChildren) {
+ container.append(params.rawChildren);
+ }
return dom;
},
} else {
element = DocumentElement.create(params);
}
- e.dom()[action](element.dom());
+ var target = action === 'append' ? e._container() : e.dom();
+ target[action](element.dom());
return element;
};
$.extend(DocumentNodeElement.prototype, {
+ _container: function() {
+ return this.dom().children('[document-element-content]');
+ },
data: function() {
var dom = this.dom(),
args = Array.prototype.slice.call(arguments, 0);
return toret;
- var elementContent = this.dom().contents();
+ var elementContent = this._container().contents();
var element = this;
elementContent.each(function(idx) {
var childElement = DocumentElement.fromHTMLElement(this, element.canvas);
if(childElement === undefined)
return true;
- if(idx === 1 && elementContent.length > 2 && elementContent[1].nodeType === Node.ELEMENT_NODE && (childElement instanceof DocumentTextElement) && $.trim($(this).text()) === '')
+ if(idx === 0 && elementContent.length > 1 && elementContent[1].nodeType === Node.ELEMENT_NODE && (childElement instanceof DocumentTextElement) && $.trim($(this).text()) === '')
return true;
if(idx > 0 && childElement instanceof DocumentTextElement) {
if(toret[toret.length-1] instanceof DocumentNodeElement && $.trim($(this).text()) === '')
return toret;
},
getWlxmlTag: function() {
- return this.dom().attr('wlxml-tag');
+ return this._container().attr('wlxml-tag');
},
setWlxmlTag: function(tag) {
- this.dom().attr('wlxml-tag', tag);
+ this._container().attr('wlxml-tag', tag);
},
getWlxmlClass: function() {
- var klass = this.dom().attr('wlxml-class');
+ var klass = this._container().attr('wlxml-class');
if(klass)
return klass.replace(/-/g, '.');
return undefined;
}, this);
if(klass)
- this.dom().attr('wlxml-class', klass.replace(/\./g, '-'));
+ this._container().attr('wlxml-class', klass.replace(/\./g, '-'));
else
- this.dom().removeAttr('wlxml-class');
+ this._container().removeAttr('wlxml-class');
},
is: function(what) {
if(what === 'list' && _.contains(['list.items', 'list.items.enum'], this.getWlxmlClass()))