X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/600f0113753edfca58e20936e4701a096d2b6d04..bb856bb163a586641fe9f6edf7723d3d905f2dfb:/src/editor/modules/documentCanvas/canvas/canvas.js diff --git a/src/editor/modules/documentCanvas/canvas/canvas.js b/src/editor/modules/documentCanvas/canvas/canvas.js index d3376e3..ebede40 100644 --- a/src/editor/modules/documentCanvas/canvas/canvas.js +++ b/src/editor/modules/documentCanvas/canvas/canvas.js @@ -66,7 +66,7 @@ $.extend(TextHandler.prototype, { var Canvas = function(wlxmlDocument, elements, metadata, sandbox) { this.metadata = metadata || {}; this.sandbox = sandbox; - this.elementsRegister = new ElementsRegister(documentElement.DocumentNodeElement, nullElement); + this.elementsRegister = this.createElementsRegister(); elements = [ {tag: 'section', klass: null, prototype: genericElement}, @@ -97,6 +97,15 @@ var Canvas = function(wlxmlDocument, elements, metadata, sandbox) { $.extend(Canvas.prototype, Backbone.Events, { + createElementType: function(elementPrototype) { + /* TODO: reconcile this with ElementsRegister behavior */ + var Constructor = function() { + documentElement.DocumentNodeElement.apply(this, Array.prototype.slice.call(arguments, 0)); + }; + Constructor.prototype = elementPrototype; + return Constructor; + }, + getElementOffset: function(element) { return element.dom.offset().top - this.dom.offset().top; }, @@ -111,14 +120,28 @@ $.extend(Canvas.prototype, Backbone.Events, { this.reloadRoot(); }, - createElement: function(wlxmlNode) { + createElement: function(wlxmlNode, register, useRoot) { var Factory; + register = register || this.elementsRegister; if(wlxmlNode.nodeType === Node.TEXT_NODE) { Factory = documentElement.DocumentTextElement; } else { + Factory = register.getElement({tag: wlxmlNode.getTagName(), klass: wlxmlNode.getClass()}); + } + if(!Factory && useRoot) { Factory = this.elementsRegister.getElement({tag: wlxmlNode.getTagName(), klass: wlxmlNode.getClass()}); + if(!Factory) { + Factory = documentElement.DocumentNodeElement; + } } - return new Factory(wlxmlNode, this); + + if(Factory) { + return new Factory(wlxmlNode, this); + } + }, + + createElementsRegister: function() { + return new ElementsRegister(documentElement.DocumentNodeElement, nullElement); }, getDocumentElement: function(htmlElement) {