X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/b65f1bbd3863db4164c3b7283e187460ccdf2504..97b4fb7216407c6623f0e1307bae4b98b0c64b75:/modules/documentCanvas/canvas/wlxmlManagers.js diff --git a/modules/documentCanvas/canvas/wlxmlManagers.js b/modules/documentCanvas/canvas/wlxmlManagers.js index 2a9bf15..8973a6c 100644 --- a/modules/documentCanvas/canvas/wlxmlManagers.js +++ b/modules/documentCanvas/canvas/wlxmlManagers.js @@ -6,8 +6,10 @@ define([ 'use strict'; -var DocumentElementAPI = function(documentElement) { +var DocumentElementWrapper = function(documentElement) { + this.documentElement = documentElement; + this.addWidget = function(widget) { documentElement.dom().find('.canvas-widgets').append(widget); }; @@ -28,6 +30,17 @@ var DocumentElementAPI = function(documentElement) { this.klass = function() { return documentElement.getWlxmlClass(); }; + + this.toggle = function(toggle) { + documentElement._container().toggle(toggle); + } + + var eventBus = documentElement.bound() ? documentElement.canvas.eventBus : + {trigger: function() {}}; + this.trigger = function() { + eventBus.trigger.apply(eventBus, arguments); + } + } var getDisplayStyle = function(tag, klass) { @@ -49,13 +62,68 @@ $.extend(GenericManager.prototype, { this.el.clearWidgets(); this.el.addWidget(widgets.labelWidget(this.el.tag(), this.el.klass())); + }, + toggle: function(toggle) { + this.el.toggle(toggle); } + }) +var managers = { + _m: {}, + set: function(tag, klass, manager) { + if(!this._m[tag]) + this._m[tag] = {}; + this._m[tag][klass] = manager; + }, + get: function(tag,klass) { + if(this._m[tag] && this._m[tag][klass]) + return this._m[tag][klass]; + return GenericManager; + } +} + +var FootnoteManager = function(wlxmlElement) { + this.el = wlxmlElement; +}; +$.extend(FootnoteManager.prototype, { + setup: function() { + this.el.clearWidgets(); + + var clickHandler = function() { + this.toggle(true); + }.bind(this); + this.footnoteHandler = widgets.footnoteHandler(clickHandler); + this.el.addWidget(this.footnoteHandler); + + var closeHandler = function() { + this.toggle(false); + + }.bind(this); + this.hideButton = widgets.hideButton(closeHandler); + this.el.addWidget(this.hideButton); + + this.toggle(false, {silent: true}); + }, + toggle: function(toggle, options) { + options = options || {}; + this.hideButton.toggle(toggle); + this.footnoteHandler.toggle(!toggle); + + this.el.setDisplayStyle(toggle ? 'block' : 'inline'); + this.el.toggle(toggle); + if(!options.silent) + this.el.trigger('elementToggled', toggle, this.el.documentElement); + } +}) +managers.set('aside', 'footnote', FootnoteManager); + + return { getFor: function(documentElement) { - var wlxmlElement = new DocumentElementAPI(documentElement); - return new GenericManager(wlxmlElement); + var wlxmlElement = new DocumentElementWrapper(documentElement); + return new (managers.get(wlxmlElement.tag(), wlxmlElement.klass()))(wlxmlElement); + } };