1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
odoo.define("web.commonEnv", function (require) {
"use strict";
/**
* This file defines the common environment, which contains everything that
* is needed in the env for both the backend and the frontend (Odoo
* terminology). This module shouldn't be used as is. It should only be
* imported by the module defining the final env to use (in the frontend or
* in the backend). For instance, module 'web.env' imports it, adds stuff to
* it, and exports the final env that is used by the whole webclient
* application.
*
* There should be as much dependencies as possible in the env object. This
* will allow an easier testing of components. See [1] for more information
* on environments.
*
* [1] https://github.com/odoo/owl/blob/master/doc/reference/environment.md#content-of-an-environment
*/
const { jsonRpc } = require("web.ajax");
const { device, isDebug } = require("web.config");
const { bus } = require("web.core");
const rpc = require("web.rpc");
const session = require("web.session");
const { _t } = require("web.translation");
const utils = require("web.utils");
const browser = {
clearInterval: window.clearInterval.bind(window),
clearTimeout: window.clearTimeout.bind(window),
Date: window.Date,
fetch: (window.fetch || (() => { })).bind(window),
Notification: window.Notification,
requestAnimationFrame: window.requestAnimationFrame.bind(window),
setInterval: window.setInterval.bind(window),
setTimeout: window.setTimeout.bind(window),
};
Object.defineProperty(browser, 'innerHeight', {
get: () => window.innerHeight,
});
Object.defineProperty(browser, 'innerWidth', {
get: () => window.innerWidth,
});
// Build the basic env
const env = {
_t,
browser,
bus,
device,
isDebug,
qweb: new owl.QWeb({ translateFn: _t }),
services: {
ajaxJsonRPC() {
return jsonRpc(...arguments);
},
getCookie() {
return utils.get_cookie(...arguments);
},
httpRequest(route, params = {}, readMethod = 'json') {
const info = {
method: params.method || 'POST',
};
if (params.method !== 'GET') {
const formData = new FormData();
for (const key in params) {
if (key === 'method') {
continue;
}
const value = params[key];
if (Array.isArray(value) && value.length) {
for (const val of value) {
formData.append(key, val);
}
} else {
formData.append(key, value);
}
}
info.body = formData;
}
return fetch(route, info).then(response => response[readMethod]());
},
navigate(url, params) {
window.location = $.param.querystring(url, params);
},
reloadPage() {
window.location.reload();
},
rpc(params, options) {
const query = rpc.buildQuery(params);
return session.rpc(query.route, query.params, options);
},
setCookie() {
utils.set_cookie(...arguments);
},
},
session,
};
return env;
});
|