diff --git a/addons/website/__manifest__.py b/addons/website/__manifest__.py index 07c5248bbe9..3693fb0278c 100644 --- a/addons/website/__manifest__.py +++ b/addons/website/__manifest__.py @@ -79,6 +79,7 @@ 'views/snippets/s_map.xml', 'views/snippets/s_dynamic_snippet.xml', 'views/snippets/s_dynamic_snippet_carousel.xml', + 'views/snippets/s_embed_code.xml', 'views/website_views.xml', 'views/website_visitor_views.xml', 'views/res_config_settings_views.xml', @@ -175,6 +176,7 @@ 'website/static/src/snippets/s_map/options.js', 'website/static/src/snippets/s_dynamic_snippet/options.js', 'website/static/src/snippets/s_dynamic_snippet_carousel/options.js', + 'website/static/src/snippets/s_embed_code/options.js', 'website/static/src/js/editor/wysiwyg.js', 'website/static/src/js/editor/widget_link.js', 'website/static/src/js/widgets/media.js', diff --git a/addons/website/static/src/img/snippets_thumbs/s_embed_code.svg b/addons/website/static/src/img/snippets_thumbs/s_embed_code.svg new file mode 100644 index 00000000000..125de8b47ff --- /dev/null +++ b/addons/website/static/src/img/snippets_thumbs/s_embed_code.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/website/static/src/snippets/s_embed_code/000.scss b/addons/website/static/src/snippets/s_embed_code/000.scss new file mode 100644 index 00000000000..ccb2c130d70 --- /dev/null +++ b/addons/website/static/src/snippets/s_embed_code/000.scss @@ -0,0 +1,4 @@ + +.editor_enable .s_embed_code { + min-height: $o-font-size-base; +} diff --git a/addons/website/static/src/snippets/s_embed_code/options.js b/addons/website/static/src/snippets/s_embed_code/options.js new file mode 100644 index 00000000000..07faab91e6a --- /dev/null +++ b/addons/website/static/src/snippets/s_embed_code/options.js @@ -0,0 +1,88 @@ +/** @odoo-module **/ + +import Dialog from 'web.Dialog'; +import core from 'web.core'; +import options from 'web_editor.snippets.options'; + +const _t = core._t; + +options.registry.EmbedCode = options.Class.extend({ + //-------------------------------------------------------------------------- + // Options + //-------------------------------------------------------------------------- + + async editCode() { + const $container = this.$target.find('.s_embed_code_embedded'); + const code = $container.html().trim(); + + await this._loadLibs({ + jsLibs: [ + '/web/static/lib/ace/ace.js', + '/web/static/lib/ace/mode-xml.js', + '/web/static/lib/ace/mode-qweb.js', + ], + }); + + await new Promise(resolve => { + const $content = $(core.qweb.render('website.custom_code_dialog_content')); + const aceEditor = this._renderAceEditor($content.find('.o_ace_editor_container')[0], code || ''); + const dialog = new Dialog(this, { + title: _t("Edit embedded code"), + $content, + buttons: [ + { + text: _t("Save"), + classes: 'btn-primary', + click: async () => { + $container[0].innerHTML = aceEditor.getValue(); + }, + close: true, + }, + { + text: _t("Discard"), + close: true, + }, + ], + }); + dialog.on('closed', this, resolve); + dialog.open(); + }); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @private + * @param {DOMElement} node + * @param {String} content text of the editor + * @returns {Object} + */ + _renderAceEditor(node, content) { + const aceEditor = window.ace.edit(node); + aceEditor.setTheme('ace/theme/monokai'); + aceEditor.setValue(content, 1); + aceEditor.setOptions({ + minLines: 20, + maxLines: Infinity, + showPrintMargin: false, + }); + aceEditor.renderer.setOptions({ + highlightGutterLine: true, + showInvisibles: true, + fontSize: 14, + }); + + const aceSession = aceEditor.getSession(); + aceSession.setOptions({ + mode: "ace/mode/xml", + useWorker: false, + }); + return aceEditor; + }, +}); + +export default { + EmbedCode: options.registry.EmbedCode, +}; diff --git a/addons/website/views/snippets/s_embed_code.xml b/addons/website/views/snippets/s_embed_code.xml new file mode 100644 index 00000000000..e56ec7037d6 --- /dev/null +++ b/addons/website/views/snippets/s_embed_code.xml @@ -0,0 +1,36 @@ + + + + + + + Replace this with your own HTML code + + + + + + + + + + Edit + + + + + + + + + + + + Embed Code 000 SCSS + web.assets_frontend + website/static/src/snippets/s_embed_code/000.scss + + + diff --git a/addons/website/views/snippets/snippets.xml b/addons/website/views/snippets/snippets.xml index 23b01cbc466..7a2265df47e 100644 --- a/addons/website/views/snippets/snippets.xml +++ b/addons/website/views/snippets/snippets.xml @@ -127,6 +127,7 @@ +