diff --git a/addons/web_editor/models/ir_qweb.py b/addons/web_editor/models/ir_qweb.py
index 71445d4919e..fcab2902a3b 100644
--- a/addons/web_editor/models/ir_qweb.py
+++ b/addons/web_editor/models/ir_qweb.py
@@ -50,6 +50,18 @@ class QWeb(models.AbstractModel):
div = u'
' % (escape(ir_qweb.unicodifier(name)), escape(ir_qweb.unicodifier(thumbnail)))
return [self._append(ast.Str(div))] + self._compile_node(el, options) + [self._append(ast.Str(u'
'))]
+ def _compile_directive_install(self, el, options):
+ if self.user_has_groups('base.group_system'):
+ module = self.env['ir.module.module'].search([('name', '=', el.attrib.get('t-install'))])
+ if not module or module.state == 'installed':
+ return []
+ name = el.attrib.get('string') or 'Snippet'
+ thumbnail = el.attrib.pop('t-thumbnail', 'oe-thumbnail')
+ div = u'' % (escape(ir_qweb.unicodifier(name)), module.id, escape(ir_qweb.unicodifier(thumbnail)))
+ return [self._append(ast.Str(div))]
+ else:
+ return []
+
def _compile_directive_tag(self, el, options):
if el.get('t-placeholder'):
el.set('t-att-placeholder', el.attrib.pop('t-placeholder'))
@@ -60,6 +72,7 @@ class QWeb(models.AbstractModel):
def _directives_eval_order(self):
directives = super(QWeb, self)._directives_eval_order()
directives.insert(directives.index('call'), 'snippet')
+ directives.insert(directives.index('call'), 'install')
return directives
diff --git a/addons/web_editor/static/src/js/snippets.editor.js b/addons/web_editor/static/src/js/snippets.editor.js
index e11e3205815..d0b6394ecd9 100644
--- a/addons/web_editor/static/src/js/snippets.editor.js
+++ b/addons/web_editor/static/src/js/snippets.editor.js
@@ -251,12 +251,25 @@ data.Class = Widget.extend({
$div.find('.oe_snippet_thumbnail_img').css('background-image', 'url(' + thumbnail + ')');
}
// end
+
+ var moduleID = $snippet.data('moduleId');
+ if (moduleID) {
+ $snippet.addClass('o_snippet_install');
+ var $installBtn = $('', {
+ class: 'btn btn-primary btn-sm o_install_btn',
+ target: '_blank',
+ href: '/web#id=' + moduleID + '&view_type=form&model=ir.module.module&action=base.open_module_tree',
+ text: _t("Install"),
+ });
+ $div.append($installBtn);
+ }
}
if (!$snippet.data("selector")) {
$("> *:not(.oe_snippet_thumbnail)", this).addClass('oe_snippet_body');
}
number++;
- });
+ })
+ .not('[data-module-id]');
// hide scroll if no snippets defined
if (!number) {
diff --git a/addons/web_editor/static/src/less/web_editor.ui.less b/addons/web_editor/static/src/less/web_editor.ui.less
index 4f1eb7dc4be..f83a73984c4 100644
--- a/addons/web_editor/static/src/less/web_editor.ui.less
+++ b/addons/web_editor/static/src/less/web_editor.ui.less
@@ -86,6 +86,8 @@ html[lang] > body.editor_enable [data-oe-translation-state] {
// SNIPPET PANEL
#oe_snippets {
+ .o-w-preserve-btn();
+
.o-flex-display();
.o-flex-flow(column, nowrap);
.o-position-absolute(0, auto, 0, -@o-we-sidebar-width);
@@ -173,6 +175,19 @@ html[lang] > body.editor_enable [data-oe-translation-state] {
}
}
+ &.o_snippet_install {
+ .oe_snippet_thumbnail_img {
+ opacity: 0.5;
+ }
+ .btn.o_install_btn {
+ display: none;
+ .o-position-absolute(16px, 4px, auto, 4px);
+ }
+ &:hover .btn.o_install_btn {
+ display: block;
+ }
+ }
+
&:nth-child(2n+1) {
clear: left;
}
diff --git a/addons/website/static/src/img/blocks/block_local_event.png b/addons/website/static/src/img/blocks/block_local_event.png
new file mode 100644
index 00000000000..a620d532344
Binary files /dev/null and b/addons/website/static/src/img/blocks/block_local_event.png differ
diff --git a/addons/website_mail_channel/static/src/img/blocks/button_channel_subscribe.png b/addons/website/static/src/img/blocks/button_channel_subscribe.png
similarity index 100%
rename from addons/website_mail_channel/static/src/img/blocks/button_channel_subscribe.png
rename to addons/website/static/src/img/blocks/button_channel_subscribe.png
diff --git a/addons/website_mass_mailing/static/src/img/blocks/newsletter_subscribe_form.png b/addons/website/static/src/img/blocks/newsletter_subscribe_form.png
similarity index 100%
rename from addons/website_mass_mailing/static/src/img/blocks/newsletter_subscribe_form.png
rename to addons/website/static/src/img/blocks/newsletter_subscribe_form.png
diff --git a/addons/website_twitter/static/src/img/twitter_scroll.png b/addons/website/static/src/img/blocks/twitter_scroll.png
similarity index 100%
rename from addons/website_twitter/static/src/img/twitter_scroll.png
rename to addons/website/static/src/img/blocks/twitter_scroll.png
diff --git a/addons/website/views/snippets.xml b/addons/website/views/snippets.xml
index 7008d825e36..c447f78324b 100644
--- a/addons/website/views/snippets.xml
+++ b/addons/website/views/snippets.xml
@@ -732,6 +732,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml
index 906ce0bf12b..9b1606fc97e 100644
--- a/addons/website_event/views/event_templates.xml
+++ b/addons/website_event/views/event_templates.xml
@@ -624,9 +624,13 @@
+
+
+
+
-
+
diff --git a/addons/website_mail_channel/views/snippets.xml b/addons/website_mail_channel/views/snippets.xml
index 1cada8717b2..4c5268cb775 100644
--- a/addons/website_mail_channel/views/snippets.xml
+++ b/addons/website_mail_channel/views/snippets.xml
@@ -1,12 +1,15 @@
-
+
+
+
-
+
+
-

+
Discussion Group
@@ -32,9 +35,7 @@
a confirmation email has been sent.
-
-
diff --git a/addons/website_mass_mailing/views/snippets_templates.xml b/addons/website_mass_mailing/views/snippets_templates.xml
index b927b6d26f9..f9d13c78888 100644
--- a/addons/website_mass_mailing/views/snippets_templates.xml
+++ b/addons/website_mass_mailing/views/snippets_templates.xml
@@ -1,13 +1,18 @@
+
+
+
+
-
+
-
-
+
+
+
diff --git a/addons/website_twitter/views/website_twitter_snippet_templates.xml b/addons/website_twitter/views/website_twitter_snippet_templates.xml
index 744eae25675..9e0c1211e0d 100644
--- a/addons/website_twitter/views/website_twitter_snippet_templates.xml
+++ b/addons/website_twitter/views/website_twitter_snippet_templates.xml
@@ -1,11 +1,13 @@
-
+
+
+