summaryrefslogtreecommitdiff
path: root/addons/web_editor/static/lib/summernote/src/js/summernote.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web_editor/static/lib/summernote/src/js/summernote.js')
-rw-r--r--addons/web_editor/static/lib/summernote/src/js/summernote.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/addons/web_editor/static/lib/summernote/src/js/summernote.js b/addons/web_editor/static/lib/summernote/src/js/summernote.js
new file mode 100644
index 00000000000..791a9452e85
--- /dev/null
+++ b/addons/web_editor/static/lib/summernote/src/js/summernote.js
@@ -0,0 +1,177 @@
+define([
+ 'summernote/core/agent', 'summernote/core/dom',
+ 'summernote/core/range',
+ 'summernote/settings',
+ 'summernote/EventHandler', 'summernote/Renderer',
+ 'summernote/core/list', // odoo change for overwrite
+ 'summernote/core/key' // odoo change for overwrite
+], function (agent, dom, range, settings, EventHandler, Renderer, list, key) { // odoo change for overwrite
+ // jQuery namespace for summernote
+ $.summernote = $.summernote || {};
+
+ // extends default `settings`
+ $.extend($.summernote, settings);
+
+ var renderer = new Renderer();
+ var eventHandler = new EventHandler();
+
+ $.extend($.summernote, {
+ renderer: renderer,
+ eventHandler: eventHandler,
+ core: {
+ agent: agent,
+ dom: dom,
+ range: range,
+ list: list, // odoo change for overwrite
+ key: key // odoo change for overwrite
+ },
+ pluginEvents: {}
+ });
+
+ /**
+ * addPlugin
+ *
+ * @param {Object} plugin
+ */
+ $.summernote.addPlugin = function (plugin) {
+ if (plugin.buttons) {
+ $.each(plugin.buttons, function (name, button) {
+ renderer.addButtonInfo(name, button);
+ });
+ }
+
+ if (plugin.dialogs) {
+ $.each(plugin.dialogs, function (name, dialog) {
+ renderer.addDialogInfo(name, dialog);
+ });
+ }
+
+ if (plugin.events) {
+ $.each(plugin.events, function (name, event) {
+ $.summernote.pluginEvents[name] = event;
+ });
+ }
+
+ if (plugin.langs) {
+ $.each(plugin.langs, function (locale, lang) {
+ if ($.summernote.lang[locale]) {
+ $.extend($.summernote.lang[locale], lang);
+ }
+ });
+ }
+
+ if (plugin.options) {
+ $.extend($.summernote.options, plugin.options);
+ }
+ };
+
+ /**
+ * extend jquery fn
+ */
+ $.fn.extend({
+ /**
+ * initialize summernote
+ * - create editor layout and attach Mouse and keyboard events.
+ *
+ * @param {Object} options
+ * @returns {this}
+ */
+ summernote: function (options) {
+ // extend default options
+ options = $.extend({}, $.summernote.options, options);
+
+ // Include langInfo in options for later use, e.g. for image drag-n-drop
+ // Setup language info with en-US as default
+ options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);
+
+ this.each(function (idx, holder) {
+ var $holder = $(holder);
+
+ // createLayout with options
+ renderer.createLayout($holder, options);
+
+ var info = renderer.layoutInfoFromHolder($holder);
+ eventHandler.attach(info, options);
+
+ // Textarea: auto filling the code before form submit.
+ if (dom.isTextarea($holder[0])) {
+ $holder.closest('form').submit(function () {
+ var contents = $holder.code();
+ $holder.val(contents);
+
+ // callback on submit
+ if (options.onsubmit) {
+ options.onsubmit(contents);
+ }
+ });
+ }
+ });
+
+ // focus on first editable element
+ if (this.first().length && options.focus) {
+ var info = renderer.layoutInfoFromHolder(this.first());
+ info.editable.focus();
+ }
+
+ // callback on init
+ if (this.length && options.oninit) {
+ options.oninit();
+ }
+
+ return this;
+ },
+ //
+
+ /**
+ * get the HTML contents of note or set the HTML contents of note.
+ *
+ * @param {String} [sHTML] - HTML contents(optional, set)
+ * @returns {this|String} - context(set) or HTML contents of note(get).
+ */
+ code: function (sHTML) {
+ // get the HTML contents of note
+ if (sHTML === undefined) {
+ var $holder = this.first();
+ if (!$holder.length) { return; }
+ var info = renderer.layoutInfoFromHolder($holder);
+ if (!!(info && info.editable)) {
+ var isCodeview = info.editor.hasClass('codeview');
+ if (isCodeview && agent.hasCodeMirror) {
+ info.codable.data('cmEditor').save();
+ }
+ return isCodeview ? info.codable.val() : info.editable.html();
+ }
+ return dom.isTextarea($holder[0]) ? $holder.val() : $holder.html();
+ }
+
+ // set the HTML contents of note
+ this.each(function (i, holder) {
+ var info = renderer.layoutInfoFromHolder($(holder));
+ if (info && info.editable) { info.editable.html(sHTML); }
+ });
+
+ return this;
+ },
+
+ /**
+ * destroy Editor Layout and detach Key and Mouse Event
+ *
+ * @returns {this}
+ */
+ destroy: function () {
+ this.each(function (idx, holder) {
+ var $holder = $(holder);
+
+ var info = renderer.layoutInfoFromHolder($holder);
+ if (!info || !info.editable) { return; }
+
+ var options = info.editor.data('options');
+
+ eventHandler.detach(info, options);
+ renderer.removeLayout($holder, info, options);
+ });
+
+ return this;
+ }
+ });
+});