flectra/addons/website/static/src/js/content/lazy_template_call.js
2018-01-16 02:34:37 -08:00

45 lines
1.3 KiB
JavaScript

flectra.define('website.content.lazy_template_call', function (require) {
'use strict';
var Widget = require('web.Widget');
var websiteRootData = require('website.WebsiteRoot');
var LazyTemplateRenderer = Widget.extend({
/**
* Lazy replaces the `[data-oe-call]` elements by their corresponding
* template content.
*
* @override
*/
start: function () {
var $oeCalls = this.$('[data-oe-call]');
var oeCalls = _.uniq($oeCalls.map(function () {
return $(this).data('oe-call');
}).get());
if (!oeCalls.length) {
return $.when(this._super.apply(this, arguments));
}
var def = this._rpc({
route: '/website/multi_render',
params: {
ids_or_xml_ids: oeCalls,
},
}).then(function (data) {
_.each(data, function (d, k) {
var $data = $(d).addClass('o_block_' + k);
$oeCalls.filter('[data-oe-call="' + k + '"]').each(function () {
$(this).replaceWith($data.clone());
});
});
});
return $.when(this._super.apply(this, arguments), def);
},
});
websiteRootData.websiteRootRegistry.add(LazyTemplateRenderer, '#wrapwrap');
return LazyTemplateRenderer;
});