summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/common_env.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/src/js/common_env.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/static/src/js/common_env.js')
-rw-r--r--addons/web/static/src/js/common_env.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/addons/web/static/src/js/common_env.js b/addons/web/static/src/js/common_env.js
new file mode 100644
index 00000000..792c3b96
--- /dev/null
+++ b/addons/web/static/src/js/common_env.js
@@ -0,0 +1,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;
+});