summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js/content
diff options
context:
space:
mode:
authorqsm-odoo <qsm@odoo.com>2020-07-27 10:24:44 +0000
committerqsm-odoo <qsm@odoo.com>2020-07-28 07:45:40 +0000
commit430b5b669f8dc42c7bd5ed08de3e080fb0200ac2 (patch)
treef7126b2021c397df3bdf1d0803c680f8c698b187 /addons/website/static/src/js/content
parent59d46b51b137715143d35ca749226316c3a0a5ec (diff)
[IMP] website, *: move all google map options to left panel
*: web_editor -> Introduce the we-gpspicker widget and improve the way the gmap lib is loaded (for Odoo / multiple snippets / ...). Part of https://github.com/odoo/odoo/pull/49101 task-2091396
Diffstat (limited to 'addons/website/static/src/js/content')
-rw-r--r--addons/website/static/src/js/content/website_root.js86
1 files changed, 82 insertions, 4 deletions
diff --git a/addons/website/static/src/js/content/website_root.js b/addons/website/static/src/js/content/website_root.js
index dedf5c94359..fa2a01eecd2 100644
--- a/addons/website/static/src/js/content/website_root.js
+++ b/addons/website/static/src/js/content/website_root.js
@@ -1,15 +1,14 @@
odoo.define('website.root', function (require) {
'use strict';
-var core = require('web.core');
+const ajax = require('web.ajax');
+const {_t} = require('web.core');
var Dialog = require('web.Dialog');
const KeyboardNavigationMixin = require('web.KeyboardNavigationMixin');
const session = require('web.session');
var publicRootData = require('web.public.root');
require("web.zoomodoo");
-var _t = core._t;
-
var websiteRootRegistry = publicRootData.publicRootRegistry;
var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
@@ -20,8 +19,10 @@ var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
'shown.bs.modal': '_onModalShown',
}),
custom_events: _.extend({}, publicRootData.PublicRoot.prototype.custom_events || {}, {
+ 'gmap_api_request': '_onGMapAPIRequest',
+ 'gmap_api_key_request': '_onGMapAPIKeyRequest',
'ready_to_clean_for_save': '_onWidgetsStopRequest',
- seo_object_request: '_onSeoObjectRequest',
+ 'seo_object_request': '_onSeoObjectRequest',
}),
/**
@@ -91,6 +92,21 @@ var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
}, this._super.apply(this, arguments));
},
/**
+ * @private
+ * @param {boolean} [refetch=false]
+ */
+ async _getGMapAPIKey(refetch) {
+ if (refetch || !this._gmapAPIKeyProm) {
+ this._gmapAPIKeyProm = new Promise(async resolve => {
+ const data = await this._rpc({
+ route: '/website/google_maps_api_key',
+ });
+ resolve(JSON.parse(data).google_maps_api_key || '');
+ });
+ }
+ return this._gmapAPIKeyProm;
+ },
+ /**
* @override
*/
_getPublicWidgetsRegistry: function (options) {
@@ -103,6 +119,50 @@ var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
return registry;
},
/**
+ * @private
+ * @param {boolean} [editableMode=false]
+ * @param {boolean} [refetch=false]
+ */
+ async _loadGMapAPI(editableMode, refetch) {
+ // Note: only need refetch to reload a configured key and load the
+ // library. If the library was loaded with a correct key and that the
+ // key changes meanwhile... it will not work but we can agree the user
+ // can bother to reload the page at that moment.
+ if (refetch || !this._gmapAPILoading) {
+ this._gmapAPILoading = new Promise(async resolve => {
+ const key = await this._getGMapAPIKey(refetch);
+
+ window.odoo_gmap_api_post_load = (async function odoo_gmap_api_post_load() {
+ await this._startWidgets(undefined, {editableMode: editableMode});
+ resolve(key);
+ }).bind(this);
+
+ if (!key) {
+ if (!editableMode && session.is_admin) {
+ this.displayNotification({
+ type: 'warning',
+ sticky: true,
+ message:
+ $('<div/>').append(
+ $('<span/>', {text: _t("Cannot load google map.")}),
+ $('<br/>'),
+ $('<a/>', {
+ href: "/web#action=website.action_website_configuration",
+ text: _t("Check your configuration."),
+ }),
+ )[0].outerHTML,
+ });
+ }
+ resolve(false);
+ this._gmapAPILoading = false;
+ return;
+ }
+ await ajax.loadJS(`https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&callback=odoo_gmap_api_post_load&key=${key}`);
+ });
+ }
+ return this._gmapAPILoading;
+ },
+ /**
* Toggles the fullscreen mode.
*
* @private
@@ -164,6 +224,24 @@ var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
window.location.href = _.str.sprintf("/website/lang/%(lang)s?r=%(url)s%(hash)s", redirect);
},
/**
+ * @private
+ * @param {OdooEvent} ev
+ */
+ async _onGMapAPIRequest(ev) {
+ ev.stopPropagation();
+ const apiKey = await this._loadGMapAPI(ev.data.editableMode, ev.data.refetch);
+ ev.data.onSuccess(apiKey);
+ },
+ /**
+ * @private
+ * @param {OdooEvent} ev
+ */
+ async _onGMapAPIKeyRequest(ev) {
+ ev.stopPropagation();
+ const apiKey = await this._getGMapAPIKey(ev.data.refetch);
+ ev.data.onSuccess(apiKey);
+ },
+ /**
/**
* Checks information about the page SEO object.
*