diff options
Diffstat (limited to 'addons/web_editor/static/src/js/wysiwyg/plugin/abstract.js')
| -rw-r--r-- | addons/web_editor/static/src/js/wysiwyg/plugin/abstract.js | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/addons/web_editor/static/src/js/wysiwyg/plugin/abstract.js b/addons/web_editor/static/src/js/wysiwyg/plugin/abstract.js deleted file mode 100644 index de776020a42..00000000000 --- a/addons/web_editor/static/src/js/wysiwyg/plugin/abstract.js +++ /dev/null @@ -1,222 +0,0 @@ -odoo.define('web_editor.wysiwyg.plugin.abstract', function (require) { -'use strict'; - -var Class = require('web.Class'); -var mixins = require('web.mixins'); -var ServicesMixin = require('web.ServicesMixin'); -var wysiwygTranslation = require('web_editor.wysiwyg.translation'); -var wysiwygOptions = require('web_editor.wysiwyg.options'); - -//-------------------------------------------------------------------------- -// AbstractPlugin for summernote module API -//-------------------------------------------------------------------------- - -var AbstractPlugin = Class.extend(mixins.EventDispatcherMixin, ServicesMixin).extend({ - /** - * Use this prop if you want to extend a summernote plugin. - */ - init: function (context) { - var self = this; - this._super.apply(this, arguments); - this.setParent(context.options.parent); - this.context = context; - - if (!this.context.invoke) { - // for use outside of wysiwyg/summernote - this.context.invoke = function () {}; - } - - this.$editable = context.layoutInfo.editable; - this.editable = this.$editable[0]; - this.document = this.editable.ownerDocument; - this.window = this.document.defaultView; - this.summernote = this.window._summernoteSlave || $.summernote; // if the target is in iframe - this.ui = this.summernote.ui; - this.$editingArea = context.layoutInfo.editingArea; - this.options = _.defaults(context.options || {}, wysiwygOptions); - this.lang = wysiwygTranslation; - this._addButtons(); - if (this.events) { - this.events = _.clone(this.events); - _.each(_.keys(this.events), function (key) { - var value = self.events[key]; - if (typeof value === 'string') { - value = self[value].bind(self); - } - if (key.indexOf('summernote.') === 0) { - self.events[key] = value; - } else { - delete self.events[key]; - key = key.split(' '); - if (key.length > 1) { - self.context.layoutInfo.editor.on(key[0], key.slice(1).join(' '), value); - } else { - self.context.layoutInfo.editor.on(key, value); - } - } - }); - } - }, - - //-------------------------------------------------------------------------- - // Public summernote module API - //-------------------------------------------------------------------------- - - shouldInitialize: function () { - return true; - }, - initialize: function () {}, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * Override to add buttons. - */ - _addButtons: function () {}, - /** - * Creates a dropdown button with its contents and behavior. - * - * @param {str} optionName - * @param {str} buttonIcon (ex.: 'note-icon-align') - * @param {str} buttonTooltip (ex.: 'Align Paragraph') - * @param {Object[]} values (ex.: [{value: 'padding-small', string: 'S'}]) - * @param {function} onclick - */ - _createDropdownButton: function (optionName, buttonIcon, buttonTooltip, values, onclick) { - var self = this; - - if (!onclick) { - onclick = function (e) { - var classNames = _.map(values, function (item) { - return item.value; - }).join(' '); - var $target = $(self.context.invoke('editor.restoreTarget')); - $target.removeClass(classNames); - if ($(e.target).data('value')) { - $target.addClass($(e.target).data('value')); - } - }; - } - if (optionName) { - this.context.memo('button.' + optionName, function () { - return self._renderDropdownButton(buttonIcon, buttonTooltip, values, onclick); - }); - } else { - return this._renderDropdownButton(buttonIcon, buttonTooltip, values, onclick); - } - }, - /** - * Creates a button to toggle a class. - * - * @param {str} optionName - * @param {str} buttonIcon (ex.: 'note-icon-align') - * @param {str} buttonTooltip (ex.: 'Align Paragraph') - * @param {str} className - */ - _createToggleButton: function (optionName, buttonIcon, buttonTooltip, className) { - var self = this; - return this._createButton(optionName, buttonIcon, buttonTooltip, function () { - var $target = $(self.context.invoke('editor.restoreTarget')); - $target.toggleClass(className); - }); - }, - /** - * Creates a button. - * - * @param {str} optionName - * @param {str} buttonIcon (ex.: 'note-icon-align') - * @param {str} buttonTooltip (ex.: 'Align Paragraph') - * @param {function} onclick - */ - _createButton: function (optionName, buttonIcon, buttonTooltip, onclick) { - var self = this; - if (optionName) { - this.context.memo('button.' + optionName, function () { - return self._renderButton(buttonIcon, buttonTooltip, onclick); - }); - } else { - return this._renderButton(buttonIcon, buttonTooltip, onclick); - } - }, - /** - * Helper function to _createButton: renders the button. - * - * @param {str} buttonIcon (ex.: 'note-icon-align') - * @param {str} buttonTooltip (ex.: 'Align Paragraph') - * @param {function} onclick - * @returns {JQuery} - */ - _renderButton: function (buttonIcon, buttonTooltip, onclick) { - var self = this; - return this.context.invoke('buttons.button', { - contents: buttonIcon.indexOf('<') === -1 ? this.ui.icon(buttonIcon) : buttonIcon, - tooltip: buttonTooltip, - click: function (e) { - e.preventDefault(); - self.context.invoke('editor.beforeCommand'); - onclick(e); - self.editable.normalize(); - self.context.invoke('editor.saveRange'); - self.context.invoke('editor.afterCommand'); - }, - }).render(); - }, - /** - * Helper function to _createDropdownButton: renders the dropdown button. - * - * @param {str} buttonIcon (ex.: 'note-icon-align') - * @param {str} buttonTooltip (ex.: 'Align Paragraph') - * @param {Object[]} values (ex.: [{value: 'padding-small', string: 'S'}]) - * @param {function} onclick - * @param {JQuery} - */ - _renderDropdownButton: function (buttonIcon, buttonTooltip, values, onclick) { - return this.ui.buttonGroup([ - this.context.invoke('buttons.button', { - className: 'dropdown-toggle', - contents: buttonIcon.indexOf('<') === -1 ? - this.ui.dropdownButtonContents(this.ui.icon(buttonIcon), this.options) : buttonIcon, - tooltip: buttonTooltip, - data: { - toggle: 'dropdown' - } - }), - this.ui.dropdown({ - items: values, - template: function (item) { - return item.string; - }, - click: this._wrapCommand(function (e) { - e.preventDefault(); - onclick(e); - }), - }) - ]).render(); - }, - /** - * Wraps a given function between common actions required - * for history (undo/redo) and the maintenance of the DOM/range. - * - * @param {function} fn - * @returns {any} the return of fn - */ - _wrapCommand: function (fn) { - var self = this; - return function () { - self.context.invoke('editor.restoreRange'); - self.context.invoke('editor.beforeCommand'); - var res = fn.apply(self, arguments); - self.editable.normalize(); - self.context.invoke('editor.saveRange'); - self.context.invoke('editor.afterCommand'); - return res; - }; - }, - -}); - -return AbstractPlugin; - -}); |
