diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index d840bb93784..c27e7c90335 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -69,6 +69,23 @@ class QWeb(orm.AbstractModel): return super(QWeb, self).render_attribute(element, name, value, qwebcontext) + def render_tag_snippet(self, element, template_attributes, generated_attributes, qwebcontext): + d = qwebcontext.copy() + d[0] = self.render_element(element, template_attributes, generated_attributes, d) + cr = d.get('request') and d['request'].cr or None + uid = d.get('request') and d['request'].uid or None + + template = self.eval_format(template_attributes["snippet"], d) + elements = html.fragments_fromstring(self.render(cr, uid, template, d)) + + id = int(elements[0].get('data-oe-id', None)) + elements[0].set('data-oe-name', self.pool['ir.ui.view'].browse(cr, uid, id, context=qwebcontext.context).name) + elements[0].set('data-oe-type', "snippet") + + elements[0].set('data-oe-thumbnail', template_attributes.get('thumbnail', "oe-thumbnail")) + + return "".join(map(html.tostring, elements)) + def render_tag_call_assets(self, element, template_attributes, generated_attributes, qwebcontext): if request and request.website and request.website.cdn_activated: if qwebcontext.context is None: diff --git a/addons/website/static/src/js/website.snippets.editor.js b/addons/website/static/src/js/website.snippets.editor.js index 90fbf3a4ce3..adfbcbd1b46 100644 --- a/addons/website/static/src/js/website.snippets.editor.js +++ b/addons/website/static/src/js/website.snippets.editor.js @@ -182,6 +182,12 @@ .then(function (html) { var $html = $(html); + // t-snippet + $html.find('> .tab-content > div > [data-oe-type="snippet"]').each(function () { + var $div = $('
').insertAfter(this).append(this).attr('name', $(this).data('oe-name')); + }); + // end + var selector = []; var $styles = $html.find("[data-js], [data-selector]"); $styles.each(function () { @@ -214,10 +220,28 @@ ''); $div.find('span').text($(this).attr("name")); $(this).prepend($div); + + // from t-snippet + var thumbnail = $("[data-oe-thumbnail]", this).data("oe-thumbnail"); + if (thumbnail) { + $div.find('.oe_snippet_thumbnail_img').css('background-image', 'url(' + thumbnail + ')'); + } + // end } $("> *:not(.oe_snippet_thumbnail)", this).addClass('oe_snippet_body'); }); + // clean t-oe + $html.find('[data-oe-model]').each(function () { + for (var k=0; k