diff options
| author | DramixDw <rve@odoo.com> | 2020-05-18 16:10:05 +0000 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2020-05-29 13:59:15 +0000 |
| commit | 714f0aa07f25e8a88a778e8b21c79b48e9801231 (patch) | |
| tree | 5bf93bb6fe6810abef9e33495bdd2026e34f7f55 /addons/website/static | |
| parent | e16a325329be1d49d856ee0255224534baa0e353 (diff) | |
[IMP] website: reintroduce a way to post from js
It was deleted in 11.0 as it was not used anymore. Now, it is
reintroduce as it is a nice utility function for some external app or
fixes. Here, it is use so that /website/add and /website/add/<path> work
as a controller POST with a CSRF token.
task-2241766
Diffstat (limited to 'addons/website/static')
| -rw-r--r-- | addons/website/static/src/js/menu/new_content.js | 5 | ||||
| -rw-r--r-- | addons/website/static/src/js/utils.js | 33 |
2 files changed, 36 insertions, 2 deletions
diff --git a/addons/website/static/src/js/menu/new_content.js b/addons/website/static/src/js/menu/new_content.js index efb1b428134..1d6fdfce77e 100644 --- a/addons/website/static/src/js/menu/new_content.js +++ b/addons/website/static/src/js/menu/new_content.js @@ -94,8 +94,9 @@ var NewContentMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({ return; } var url = '/website/add/' + encodeURIComponent(val); - if ($dialog.find('input[type="checkbox"]').is(':checked')) url +='?add_menu=1'; - document.location = url; + const res = wUtils.sendRequest(url, { + add_menu: $dialog.find('input[type="checkbox"]').is(':checked') || '', + }); return new Promise(function () {}); }); }, diff --git a/addons/website/static/src/js/utils.js b/addons/website/static/src/js/utils.js index 7947eb6f93c..2544f4347fc 100644 --- a/addons/website/static/src/js/utils.js +++ b/addons/website/static/src/js/utils.js @@ -227,11 +227,44 @@ function websiteDomain(self) { return ['|', ['website_id', '=', false], ['website_id', '=', websiteID]]; } +function sendRequest(route, params) { + function _addInput(form, name, value) { + let param = document.createElement('input'); + param.setAttribute('type', 'hidden'); + param.setAttribute('name', name); + param.setAttribute('value', value); + form.appendChild(param); + } + + let form = document.createElement('form'); + form.setAttribute('action', route); + form.setAttribute('method', params.method || 'POST'); + + if (core.csrf_token) { + _addInput(form, 'csrf_token', core.csrf_token); + } + + for (const key in params) { + const value = params[key]; + if (Array.isArray(value) && value.length) { + for (const val of value) { + _addInput(form, key, val); + } + } else { + _addInput(form, key, value); + } + } + + document.body.appendChild(form); + form.submit(); +} + return { loadAnchors: loadAnchors, autocompleteWithPages: autocompleteWithPages, onceAllImagesLoaded: onceAllImagesLoaded, prompt: prompt, + sendRequest: sendRequest, websiteDomain: websiteDomain, }; }); |
