Files
odoo_source/addons/web_editor/static/src/js/base.js
T
Christophe Matthieu 71732dceb6 [IMP] web: module can be asynchronous loaded if it return a deferred
Each module can return a deferred. In that case, the module is marked as loaded
only when the deferred is resolved, and its value is equal to the resolved value.
The module can be rejected (unloaded). This will be logged in the console as info.

Remove if_dom_contains from the website, the modules return a rejected deferred if
the DOM doesn't contains the seleted values.
2015-07-22 12:15:24 +02:00

70 lines
2.0 KiB
JavaScript

odoo.define('web_editor.base', function (require) {
"use strict";
var core = require('web.core');
var ajax = require('web.ajax');
var qweb = core.qweb;
var _t = core._t;
var get_context = function (dict) {
var html = document.documentElement;
return _.extend({
'lang': (html.getAttribute('lang') || '').replace('-', '_'),
}, dict);
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////
var data = {
'get_context': get_context,
'url_translations': '/web/webclient/translations',
};
var dom_ready = $.Deferred();
$(document).ready(function () {
dom_ready.resolve(data);
// fix for ie
if($.fn.placeholder) $('input, textarea').placeholder();
});
data.dom_ready = dom_ready;
// todo: remove and load a bundle of translated templates
var all_ready;
data.ready = function() {
if (!all_ready) {
all_ready = $.when(dom_ready, ajax.loadXML()).then(translations);
} else if(all_ready.state() === "resolved") { // can add async template
all_ready = $.when(dom_ready, ajax.loadXML());
}
return all_ready;
};
function translations() {
function translate_node(node){
if(node.nodeType === 3) { // TEXT_NODE
if(node.nodeValue.match(/\S/)){
var space = node.nodeValue.match(/^([\s]*)([\s\S]*?)([\s]*)$/);
node.nodeValue = space[1] + $.trim(_t(space[2])) + space[3];
}
}
else if(node.nodeType === 1 && node.hasChildNodes()) { // ELEMENT_NODE
_.each(node.childNodes, translate_node);
}
}
return ajax.jsonRpc(data.url_translations, 'call', {
'mods': ['web_editor'],
'lang': data.get_context().lang
})
.then(function(trans) {
_t.database.set_bundle(trans);
}).then(function () {
var keys = _.keys(qweb.templates);
for (var i = 0; i < keys.length; i++){
translate_node(qweb.templates[keys[i]]);
}
}).promise();
}
return dom_ready;
});