X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/71b7ba4d1d17adc39165914016fa892671cc4316..4ddf36452af460dbc26fd181f2ba3640a7c71374:/src/editor/modules/documentCanvas/canvas/documentElement.js diff --git a/src/editor/modules/documentCanvas/canvas/documentElement.js b/src/editor/modules/documentCanvas/canvas/documentElement.js index ee340f1..89ffce9 100644 --- a/src/editor/modules/documentCanvas/canvas/documentElement.js +++ b/src/editor/modules/documentCanvas/canvas/documentElement.js @@ -18,22 +18,14 @@ var DocumentElement = function(htmlElement, canvas) { this._setupDOMHandler(htmlElement); } -var elementTypeFromParams = function(params) { - return params.text !== undefined ? DocumentTextElement : DocumentNodeElement; -}; - -var elementTypeFromNode = function(wlxmlNode) { +var elementTypeFromWlxmlNode = function(wlxmlNode) { return wlxmlNode.nodeType === Node.TEXT_NODE ? DocumentTextElement : DocumentNodeElement; } $.extend(DocumentElement, { - create: function(params, canvas) { - return elementTypeFromParams(params).create(params); - }, - - create2: function(node, canvas) { - return elementTypeFromNode(node).create2(node, canvas); + create: function(node, canvas) { + return elementTypeFromWlxmlNode(node).create(node, canvas); }, createDOM: function(wlxmlNode) { @@ -60,6 +52,13 @@ $.extend(DocumentElement.prototype, { dom: function() { return this.$element; }, + data: function() { + var dom = this.dom(), + args = Array.prototype.slice.call(arguments, 0); + if(args.length === 2 && args[1] === undefined) + return dom.removeData(args[0]); + return dom.data.apply(dom, arguments); + }, parent: function() { var parents = this.$element.parents('[document-node-element]'); if(parents.length) @@ -147,54 +146,15 @@ var DocumentNodeElement = function(htmlElement, canvas) { }; $.extend(DocumentNodeElement, { - createDOM: function(params, canvas) { - var dom = $('
') - .attr('document-node-element', ''), - widgetsContainer = $('
') - .addClass('canvas-widgets') - .attr('contenteditable', false), - container = $('
') - .attr('document-element-content', ''); - - 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], canvas); - - element.setWlxml({tag: params.tag, klass: params.klass}); - if(params.meta) { - _.keys(params.meta).forEach(function(key) { - element.setWlxmlMetaAttr(key, params.meta[key]); - }); - } - element.data('other-attrs', params.others); - - if(params.rawChildren && params.rawChildren.length) { - container.append(params.rawChildren); - } else if(params.prepopulateOnEmpty) { - element.append(DocumentTextElement.create({text: ''})); - } - return dom; - }, - - create: function(params, canvas) { - return this.fromHTMLElement(this.createDOM(params, canvas)[0], canvas); + create: function(wlxmlNode, canvas) { + return this.fromHTMLElement(this.createDOM(wlxmlNode, canvas)[0], canvas); }, fromHTMLElement: function(htmlElement, canvas) { return new this(htmlElement, canvas); }, - createDOM2: function(wlxmlNode, canvas) { - - // tag: wlxmlNode.getTagName(), - // klass: wlxmlNode.getClass(), //currentTag.attr('class'), - // meta: wlxmlNode.getMetaAttributes(), //meta, - // others: wlxmlNode.getOtherAttributes(), // ~ //others, - // rawChildren: wlxmlNode.contents(), - // prepopulateOnEmpty: true - + createDOM: function(wlxmlNode, canvas) { var dom = $('
') .attr('document-node-element', ''), widgetsContainer = $('
') @@ -209,35 +169,22 @@ $.extend(DocumentNodeElement, { var element = this.fromHTMLElement(dom[0], canvas); + element.data('wlxmlNode', wlxmlNode); + wlxmlNode.setData('canvasElement', element); + element.setWlxml({tag: wlxmlNode.getTagName(), klass: wlxmlNode.getClass()}); _.keys(wlxmlNode.getMetaAttributes()).forEach(function(key) { element.setWlxmlMetaAttr(key, params.meta[key]); }); - //element.data('other-attrs', params.others); - - // element.contents - wlxmlNode.contents().forEach((function(node) { - container.append(DocumentElement.create2(node).dom()); + container.append(DocumentElement.create(node).dom()); }).bind(this)); - // if(params.rawChildren && params.rawChildren.length) { - // container.append(params.rawChildren); - // } else if(params.prepopulateOnEmpty) { - // element.append(DocumentTextElement.create({text: ''})); - // } return dom; - }, - - create2: function(params, canvas) { - return this.fromHTMLElement2(this.createDOM2(params, canvas)[0], canvas); - }, - - fromHTMLElement2: function(htmlElement, canvas) { - return new this(htmlElement, canvas); } + }); var manipulate = function(e, params, action) { @@ -320,13 +267,6 @@ $.extend(DocumentNodeElement.prototype, { element2: parent.children()[myIdx + childrenLength-1 + (moveRightRange ? 1 : 0)] }; }, - data: function() { - var dom = this.dom(), - args = Array.prototype.slice.call(arguments, 0); - if(args.length === 2 && args[1] === undefined) - return dom.removeData(args[0]); - return dom.data.apply(dom, arguments); - }, toXML: function(level) { var node = $('<' + this.getWlxmlTag() + '>'); @@ -539,24 +479,17 @@ var DocumentTextElement = function(htmlElement, canvas) { }; $.extend(DocumentTextElement, { - createDOM: function(params) { - return $('
') - .attr('document-text-element', '') - .text(params.text || utils.unicode.ZWS); - }, - - createDOM2: function(wlxmlTextNode) { - return $('
') + createDOM: function(wlxmlTextNode) { + var dom = $('
') .attr('document-text-element', '') - .text(wlxmlTextNode.getText() || utils.unicode.ZWS); - }, - - create: function(params, canvas) { - return this.fromHTMLElement(this.createDOM(params)[0]); + .text(wlxmlTextNode.getText() || utils.unicode.ZWS), + element = this.fromHTMLElement(dom[0], this); + element.data('wlxmlNode', wlxmlTextNode); + return dom; }, - create2: function(wlxmlTextNode, canvas) { - return this.fromHTMLElement(this.createDOM2(wlxmlTextNode)[0]); + create: function(wlxmlTextNode, canvas) { + return this.fromHTMLElement(this.createDOM(wlxmlTextNode)[0]); }, fromHTMLElement: function(htmlElement, canvas) { @@ -594,8 +527,13 @@ $.extend(DocumentTextElement.prototype, { prependText: function(text) { this.dom().contents()[0].data = text + this.dom().contents()[0].data; }, - getText: function() { - return this.dom().text().replace(utils.unicode.ZWS, ''); + getText: function(options) { + options = _.extend({raw: false}, options || {}); + var toret = this.dom().text(); + if(!options.raw) { + toret = toret.replace(utils.unicode.ZWS, ''); + } + return toret; }, isEmpty: function() { // Having at least Zero Width Space is guaranteed be Content Observer