summaryrefslogtreecommitdiff
path: root/addons/web_editor/static/src/js/base.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web_editor/static/src/js/base.js')
-rw-r--r--addons/web_editor/static/src/js/base.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/addons/web_editor/static/src/js/base.js b/addons/web_editor/static/src/js/base.js
new file mode 100644
index 00000000000..28b35722edd
--- /dev/null
+++ b/addons/web_editor/static/src/js/base.js
@@ -0,0 +1,85 @@
+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);
+};
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////
+/* ----------------------------------------------------
+ Async Ready and Template loading
+ ---------------------------------------------------- */
+var dom_ready = $.Deferred();
+$(document).ready(function () {
+ dom_ready.resolve();
+ // fix for ie
+ if($.fn.placeholder) $('input, textarea').placeholder();
+});
+
+
+// todo: remove and load a bundle of translated templates
+var all_ready;
+var 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();
+}
+
+var reload = function () {
+ location.hash = "scrollTop=" + window.document.body.scrollTop;
+ if (location.search.indexOf("enable_editor") > -1) {
+ window.location.href = window.location.href.replace(/enable_editor(=[^&]*)?/g, '');
+ } else {
+ window.location.reload();
+ }
+};
+
+var data = {
+ 'get_context': get_context,
+ 'url_translations': '/web/webclient/translations',
+ 'dom_ready': dom_ready,
+ 'ready': ready,
+ 'reload': reload
+};
+return data;
+
+});