diff options
Diffstat (limited to 'addons/website/static/src/js/widgets/theme.js')
| -rw-r--r-- | addons/website/static/src/js/widgets/theme.js | 183 |
1 files changed, 94 insertions, 89 deletions
diff --git a/addons/website/static/src/js/widgets/theme.js b/addons/website/static/src/js/widgets/theme.js index f35769a3748..0b41f844b7e 100644 --- a/addons/website/static/src/js/widgets/theme.js +++ b/addons/website/static/src/js/widgets/theme.js @@ -143,7 +143,7 @@ var ThemeCustomizeDialog = Dialog.extend({ return core.qweb.add_template(data); }); } - return $.when(this._super.apply(this, arguments), templateDef); + return Promise.all([this._super.apply(this, arguments), templateDef]); }, /** * @override @@ -204,7 +204,7 @@ var ThemeCustomizeDialog = Dialog.extend({ } }); - return $.when(this._super.apply(this, arguments), loadDef); + return Promise.all([this._super.apply(this, arguments), loadDef]); }, //-------------------------------------------------------------------------- @@ -216,36 +216,37 @@ var ThemeCustomizeDialog = Dialog.extend({ */ _chooseBodyCustomImage: function () { var self = this; - var def = $.Deferred(); - var $image = $('<img/>'); - var editor = new weWidgets.MediaDialog(this, { - onlyImages: true, - firstFilters: ['background'], - }, $image[0]); - - editor.on('save', this, function (media) { // TODO use scss customization instead (like for user colors) - var src = $(media).attr('src'); - self._rpc({ - model: 'ir.model.data', - method: 'get_object_reference', - args: ['website', this.CUSTOM_BODY_IMAGE_XML_ID], - }).then(function (data) { - return self._rpc({ - model: 'ir.ui.view', - method: 'save', - args: [ - data[1], - '#wrapwrap { background-image: url("' + src + '"); }', - '//style', - ], - }); - }).always(def.resolve.bind(def)); - }); - editor.on('cancel', this, function () { - def.resolve(); - }); + var def = new Promise(function (resolve, reject) { + var $image = $('<img/>'); + var editor = new weWidgets.MediaDialog(this, { + onlyImages: true, + firstFilters: ['background'], + }, $image[0]); + + editor.on('save', this, function (media) { // TODO use scss customization instead (like for user colors) + var src = $(media).attr('src'); + self._rpc({ + model: 'ir.model.data', + method: 'get_object_reference', + args: ['website', this.CUSTOM_BODY_IMAGE_XML_ID], + }).then(function (data) { + return self._rpc({ + model: 'ir.ui.view', + method: 'save', + args: [ + data[1], + '#wrapwrap { background-image: url("' + src + '"); }', + '//style', + ], + }); + }).then(resolve).guardedCatch(resolve); + }); + editor.on('cancel', this, function () { + resolve(); + }); - editor.open(); + editor.open(); + }); return def; }, @@ -433,39 +434,37 @@ var ThemeCustomizeDialog = Dialog.extend({ var colorName = $color.data('color'); var colorType = $color.data('colorType'); - var def = $.Deferred(); - - var colorpicker = new ColorpickerDialog(this, { - defaultColor: $color.css('background-color'), - }); - var chosenColor = undefined; - colorpicker.on('colorpicker:saved', this, function (ev) { - ev.stopPropagation(); - chosenColor = ev.data.cssColor; - }); - colorpicker.on('closed', this, function (ev) { - if (chosenColor === undefined) { - def.resolve(); - return; - } + return new Promise(function (resolve, reject) { + var colorpicker = new ColorpickerDialog(this, { + defaultColor: $color.css('background-color'), + }); + var chosenColor = undefined; + colorpicker.on('colorpicker:saved', this, function (ev) { + ev.stopPropagation(); + chosenColor = ev.data.cssColor; + }); + colorpicker.on('closed', this, function (ev) { + if (chosenColor === undefined) { + resolve(); + return; + } - var baseURL = '/website/static/src/scss/options/colors/'; - var url = _.str.sprintf('%suser_%scolor_palette.scss', baseURL, (colorType ? (colorType + '_') : '')); + var baseURL = '/website/static/src/scss/options/colors/'; + var url = _.str.sprintf('%suser_%scolor_palette.scss', baseURL, (colorType ? (colorType + '_') : '')); - var colors = {}; - colors[colorName] = chosenColor; - if (colorName === 'alpha') { - colors['beta'] = 'null'; - colors['gamma'] = 'null'; - colors['delta'] = 'null'; - colors['epsilon'] = 'null'; - } + var colors = {}; + colors[colorName] = chosenColor; + if (colorName === 'alpha') { + colors['beta'] = 'null'; + colors['gamma'] = 'null'; + colors['delta'] = 'null'; + colors['epsilon'] = 'null'; + } - self._makeSCSSCusto(url, colors).always(def.resolve.bind(def)); + self._makeSCSSCusto(url, colors).always(resolve); + }); + colorpicker.open(); }); - colorpicker.open(); - - return def; }, /** * @private @@ -494,7 +493,7 @@ var ThemeCustomizeDialog = Dialog.extend({ return self._quickEdit($(inputData)); })); - return $.when.apply($, defs); + return Promise.all(defs); }, /** * @private @@ -504,23 +503,25 @@ var ThemeCustomizeDialog = Dialog.extend({ var value = parseFloat(text) || ''; var unit = text.match(/([^\s\d]+)$/)[1]; - var def = $.Deferred(); - var qEdit = new QuickEdit(this, value, unit); - qEdit.on('QuickEdit:save', this, function (ev) { - ev.stopPropagation(); + var def = new Promise(function (resolve, reject) { + var qEdit = new QuickEdit(this, value, unit); + qEdit.on('QuickEdit:save', this, function (ev) { + ev.stopPropagation(); - var value = ev.data.value; - // Convert back to rem if needed - if ($inputData.data('unit') === 'rem' && unit === 'px' && value !== 'null') { - value = parseFloat(value) / this.PX_BY_REM + 'rem'; - } + var value = ev.data.value; + // Convert back to rem if needed + if ($inputData.data('unit') === 'rem' && unit === 'px' && value !== 'null') { + value = parseFloat(value) / this.PX_BY_REM + 'rem'; + } - var values = {}; - values[$inputData.data('value')] = value; - this._makeSCSSCusto('/website/static/src/scss/options/user_values.scss', values) - .always(def.resolve.bind(def)); + var values = {}; + values[$inputData.data('value')] = value; + this._makeSCSSCusto('/website/static/src/scss/options/user_values.scss', values) + .always(resolve); + }); + qEdit.appendTo($inputData.closest('.o_theme_customize_option')); }); - qEdit.appendTo($inputData.closest('.o_theme_customize_option')); + return def; }, /** @@ -581,7 +582,7 @@ var ThemeCustomizeDialog = Dialog.extend({ disable: (disable || []).join(','), tab: this.$('.nav-link.active').parent().index(), }); - return $.Deferred(); + return Promise.resolve(); } return this._rpc({ @@ -599,22 +600,26 @@ var ThemeCustomizeDialog = Dialog.extend({ $allLinks = $allLinks.add($links); var $newLinks = $(bundleContent).filter(linkSelector); - var linksLoaded = $.Deferred(); - var nbLoaded = 0; - $newLinks.on('load', function (e) { - if (++nbLoaded >= $newLinks.length) { - linksLoaded.resolve(); - } - }); - $newLinks.on('error', function (e) { - linksLoaded.reject(); - window.location.hash = 'theme=true'; - window.location.reload(); + var linksLoaded = new Promise(function (resolve, reject) { + var nbLoaded = 0; + $newLinks.on('load', function () { + if (++nbLoaded >= $newLinks.length) { + resolve(); + } + }); + $newLinks.on('error', function () { + reject(); + window.location.hash = 'theme=true'; + window.location.reload(); + }); }); $links.last().after($newLinks); return linksLoaded; }); - return $.when.apply($, defs).always(function () { + return Promise.all(defs).then(function () { + $loading.remove(); + $allLinks.remove(); + }).guardedCatch(function () { $loading.remove(); $allLinks.remove(); }); @@ -750,7 +755,7 @@ var ThemeCustomizeMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({ * * @private * @param {string} tab - * @returns {Deferred} + * @returns {Promise} */ _openThemeCustomizeDialog: function (tab) { return new ThemeCustomizeDialog(this, {tab: tab}).open(); |
