summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web/static/src/scss/bootstrap_overridden_frontend.scss3
-rw-r--r--addons/web_editor/static/src/js/widgets/widgets.js17
-rw-r--r--addons/web_editor/static/src/scss/bootstrap_overridden.scss77
-rw-r--r--addons/web_editor/static/src/scss/bootstrap_overridden_backend.scss4
-rw-r--r--addons/web_editor/static/src/scss/web_editor.variables.scss12
-rw-r--r--addons/web_editor/static/src/xml/editor.xml2
-rw-r--r--addons/web_editor/views/editor.xml5
-rw-r--r--addons/website/static/src/js/tours/customize.js2
-rw-r--r--addons/website/static/src/js/widgets/theme.js32
-rw-r--r--addons/website/static/src/scss/options/colors/user_theme_color_palette.scss11
-rw-r--r--addons/website/static/src/scss/secondary_variables.scss14
-rw-r--r--addons/website/static/src/xml/website.editor.xml4
12 files changed, 137 insertions, 46 deletions
diff --git a/addons/web/static/src/scss/bootstrap_overridden_frontend.scss b/addons/web/static/src/scss/bootstrap_overridden_frontend.scss
index 19ced6c9d8f..e69de29bb2d 100644
--- a/addons/web/static/src/scss/bootstrap_overridden_frontend.scss
+++ b/addons/web/static/src/scss/bootstrap_overridden_frontend.scss
@@ -1,3 +0,0 @@
-
-$black: black;
-$white: white;
diff --git a/addons/web_editor/static/src/js/widgets/widgets.js b/addons/web_editor/static/src/js/widgets/widgets.js
index 7b02703260b..3ccba2da261 100644
--- a/addons/web_editor/static/src/js/widgets/widgets.js
+++ b/addons/web_editor/static/src/js/widgets/widgets.js
@@ -1164,7 +1164,7 @@ var MediaDialog = Dialog.extend({
self.$media = self.$media.parent();
self.media = self.$media[0];
tabToShow = 'video';
- }
+ }
self.$('[href="#editor-media-' + tabToShow + '"]').tab('show');
});
@@ -1457,6 +1457,21 @@ var LinkDialog = Dialog.extend({
this.$('input[name="url"]').val(match ? match[1] : this.data.url);
}
+ // Hide the duplicate color buttons (most of the times, primary = alpha
+ // and secondary = beta for example but this may depend on the theme)
+ this.opened().then(function () {
+ var colors = [];
+ _.each(self.$('.o_btn_preview'), function (btn) {
+ var $btn = $(btn);
+ var color = $btn.css('background-color');
+ if (_.contains(colors, color)) {
+ $btn.remove();
+ } else {
+ colors.push(color);
+ }
+ });
+ });
+
this._adaptPreview();
this.$('input:visible:first').focus();
diff --git a/addons/web_editor/static/src/scss/bootstrap_overridden.scss b/addons/web_editor/static/src/scss/bootstrap_overridden.scss
index 15309f4de7f..2a0b900b10c 100644
--- a/addons/web_editor/static/src/scss/bootstrap_overridden.scss
+++ b/addons/web_editor/static/src/scss/bootstrap_overridden.scss
@@ -1,3 +1,5 @@
+// Hacky way to detect if its the backend or not
+$-is-backend: variable-exists('primary');
// Automatically update bootstrap colors map (unused by BS itself)
$-palette: nth($o-color-palettes, $o-color-palette-number);
@@ -6,28 +8,75 @@ $colors: map-merge($-palette, $colors);
// Automatically extend bootstrap to create theme background/text/button classes
$-palette: nth($o-theme-color-palettes, $o-theme-color-palette-number);
-$-main-color: map-get($-palette, 'primary');
+$-main-color: map-get($-palette, 'alpha');
$-main-color-lightness: lightness($-main-color);
-$-palette: map-merge($-palette, (
- // Compatibility: alpha and beta color exist but will now always be
- // equal to primary and secondary colors
- alpha: $-main-color,
- beta: map-get($-palette, 'secondary'),
+$-palette: map-merge((
+ // alpha and beta colors are used to override primary and secondary BS4
+ // colors by default, so that theme colors affect the default Odoo layouts
+ primary: $-main-color,
+ secondary: map-get($-palette, 'beta'),
// BS light and dark colors are not used for any BS component, just
// for color utilities. By default, we set them to a very light and
- // very dark version of a desaturate version of the primary color
+ // very dark version of a desaturate version of the primary color
light: lighten(desaturate($-main-color, 40%), min(70%, max(0%, 97% - $-main-color-lightness))), // Does not increase over 97% lightness
dark: darken(desaturate($-main-color, 40%), min(70%, max(0%, $-main-color-lightness - 10%))), // Does not lower under 10% lightness
-));
+), $-palette);
+@if $-is-backend {
+ $-palette: map-remove($-palette, 'primary', 'secondary', 'success', 'info', 'warning', 'danger', 'light', 'dark');
+}
$theme-colors: () !default;
$theme-colors: map-merge($-palette, $theme-colors);
// Extend grays with transparent ones (for some reason, BS4 create black-50 and
-// white-50 but does not allow overridding that with variables). Also add black
-// and white ones too as they were also not added by BS4...
+// white-50 but does not allow overridding that with variables), also use the
+// theme gray palette (which is supposed to at least declare white and black).
+$-palette: nth($o-gray-color-palettes, $o-gray-color-palette-number);
+$-palette: map-merge($o-transparent-grays, $-palette);
+@if $-is-backend {
+ $-palette: map-remove($-palette, '100', '200', '300', '400', '500', '600', '700', '800', '900');
+}
$grays: () !default;
-$grays: map-merge(map-merge($o-transparent-grays, (
- black: $black, // Note: those two needs to be redefined before bootstrap,
- white: $white, // otherwise they do not exist yet
-)), $grays);
+$grays: map-merge($-palette, $grays);
+
+// Bootstrap use standard variables to define individual colors which are then
+// placed into a map which is then used to get the value of each individual
+// color. As BS4 allows to extend the map a priori to define our own colors,
+// it does not take care of making the standard variables match the values in
+// the user's map. The problem is that, at least for grays, bootstrap uses the
+// standard variables in its _variables.scss file, so if:
+//
+// User file:
+// $grays: (
+// '100': blue,
+// );
+//
+// BS4:
+// $gray-100: gray !default;
+// $grays: () !default;
+// $grays: map-merge((
+// '100': $gray-100,
+// ), $grays);
+//
+// -> Here gray('100') is blue but $gray-100 is still gray... so BS4 is not
+// correctly generated as BS4 uses $gray-100 in _variables.scss
+$primary: theme-color('primary') !default;
+$secondary: theme-color('secondary') !default;
+$success: theme-color('success') !default;
+$info: theme-color('info') !default;
+$warning: theme-color('warning') !default;
+$danger: theme-color('danger') !default;
+$light: theme-color('light') !default;
+$dark: theme-color('dark') !default;
+
+$white: gray('white') !default;
+$gray-100: gray('100') !default;
+$gray-200: gray('200') !default;
+$gray-300: gray('300') !default;
+$gray-400: gray('400') !default;
+$gray-500: gray('500') !default;
+$gray-600: gray('600') !default;
+$gray-700: gray('700') !default;
+$gray-800: gray('800') !default;
+$gray-900: gray('900') !default;
+$black: gray('black') !default;
diff --git a/addons/web_editor/static/src/scss/bootstrap_overridden_backend.scss b/addons/web_editor/static/src/scss/bootstrap_overridden_backend.scss
deleted file mode 100644
index 114d49c8dd4..00000000000
--- a/addons/web_editor/static/src/scss/bootstrap_overridden_backend.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-
-// Hacky way to prevent our web_editor/website themes to affect the backend UI but
-// still allow to define extra colors for backend HTML editors
-$theme-colors: map-remove($theme-colors, 'primary', 'secondary', 'success', 'info', 'warning', 'danger', 'light', 'dark');
diff --git a/addons/web_editor/static/src/scss/web_editor.variables.scss b/addons/web_editor/static/src/scss/web_editor.variables.scss
index eff996bea20..730041fbb5f 100644
--- a/addons/web_editor/static/src/scss/web_editor.variables.scss
+++ b/addons/web_editor/static/src/scss/web_editor.variables.scss
@@ -230,8 +230,8 @@ $o-color-palette-number: 1;
// Theme colors
$o-theme-color-palettes: (
(
- primary: $o-enterprise-primary-color,
- secondary: $o-enterprise-color,
+ alpha: $o-enterprise-primary-color,
+ beta: $o-enterprise-color,
gamma: #5C5B80,
delta: #5B899E,
epsilon: #E46F78,
@@ -248,7 +248,13 @@ $o-transparent-grays: (
white-50: rgba(white, 0.5),
white-75: rgba(white, 0.75),
) !default;
-
+$o-gray-color-palettes: (
+ (
+ 'white': #FFFFFF, // Those two will enforce the creation of bg-white
+ 'black': #000000, // and bg-black classes.
+ ),
+) !default;
+$o-gray-color-palette-number: 1;
// Translations
$o-we-content-to-translate-color: rgb(255, 255, 90) !default;
diff --git a/addons/web_editor/static/src/xml/editor.xml b/addons/web_editor/static/src/xml/editor.xml
index b3d1763ca71..fe51450dac9 100644
--- a/addons/web_editor/static/src/xml/editor.xml
+++ b/addons/web_editor/static/src/xml/editor.xml
@@ -278,7 +278,7 @@
<input class="d-none link-style" name="link_style_color" type="radio" value=""/>
<i class="fa"/>
</label>
- <t t-foreach="['primary', 'secondary', 'gamma', 'delta', 'epsilon', 'success', 'info', 'warning', 'danger']" t-as="color">
+ <t t-foreach="['alpha', 'beta', 'gamma', 'delta', 'epsilon', 'primary', 'secondary', 'success', 'info', 'warning', 'danger']" t-as="color">
<label role="button" t-attf-class="o_link_dialog_color_item o_btn_preview btn btn-#{color}" t-attf-aria-label="Color for #{color}" t-attf-title="Color for #{color}">
<input type="radio" name="link_style_color" class="d-none link-style" t-att-value="color"/>
<i class="fa"/>
diff --git a/addons/web_editor/views/editor.xml b/addons/web_editor/views/editor.xml
index c9a3ddfccd0..9cd1a34bd4d 100644
--- a/addons/web_editor/views/editor.xml
+++ b/addons/web_editor/views/editor.xml
@@ -69,7 +69,6 @@
<template id="_assets_backend_helpers" inherit_id="web._assets_backend_helpers">
<xpath expr="//link[last()]" position="after">
<link rel="stylesheet" type="text/scss" href="/web_editor/static/src/scss/bootstrap_overridden.scss"/>
- <link rel="stylesheet" type="text/scss" href="/web_editor/static/src/scss/bootstrap_overridden_backend.scss"/>
</xpath>
</template>
@@ -154,8 +153,8 @@
<template id="web_editor.colorpicker" name="Color-Picker">
<colorpicker>
<div class="o_colorpicker_section" data-name="theme" data-display="Theme Colors" data-icon-class="fa fa-flask">
- <button data-color="primary"></button>
- <button data-color="secondary"></button>
+ <button data-color="alpha"></button>
+ <button data-color="beta"></button>
<button data-color="gamma"></button>
<button data-color="delta"></button>
<button data-color="epsilon"></button>
diff --git a/addons/website/static/src/js/tours/customize.js b/addons/website/static/src/js/tours/customize.js
index 510b9f12975..c1e1f185f2c 100644
--- a/addons/website/static/src/js/tours/customize.js
+++ b/addons/website/static/src/js/tours/customize.js
@@ -11,7 +11,7 @@ tour.register('theme_customize', {
url: '/',
wait_for: base.ready(),
}, [{
- trigger: 'button.o_theme_customize_color_primary',
+ trigger: 'button.o_theme_customize_color_primary, button.o_theme_customize_color_alpha',
content: _t("Click here to choose your main branding color.<br/>It will recompute the palette with suggested matching colors."),
position: 'bottom',
}]);
diff --git a/addons/website/static/src/js/widgets/theme.js b/addons/website/static/src/js/widgets/theme.js
index ce73fd35d3d..e2879fb25c6 100644
--- a/addons/website/static/src/js/widgets/theme.js
+++ b/addons/website/static/src/js/widgets/theme.js
@@ -62,6 +62,27 @@ var ThemeCustomizeDialog = Dialog.extend({
var $tabs = this.$('[data-toggle="tab"]');
this.opened().then(function () {
$tabs.eq(self.defaultTab).tab('show');
+
+ var $colorPreview = self.$('.o_theme_customize_color_previews:visible');
+ var $primary = $colorPreview.find('.o_theme_customize_color[data-color="primary"]');
+ var $alpha = $colorPreview.find('.o_theme_customize_color[data-color="alpha"]');
+ var $secondary = $colorPreview.find('.o_theme_customize_color[data-color="secondary"]');
+ var $beta = $colorPreview.find('.o_theme_customize_color[data-color="beta"]');
+ var sameAlphaPrimary = $primary.find('.o_color_preview').css('background-color') === $alpha.find('.o_color_preview').css('background-color');
+ var sameBetaSecondary = $secondary.find('.o_color_preview').css('background-color') === $beta.find('.o_color_preview').css('background-color');
+ if (!sameAlphaPrimary) {
+ $alpha.find('.o_color_name').text(_t("Extra Color"));
+ $primary.removeClass('d-none').addClass('d-flex');
+ }
+ if (!sameBetaSecondary) {
+ $beta.find('.o_color_name').text(_t("Extra Color"));
+ $secondary.removeClass('d-none').addClass('d-flex');
+ }
+ if (!sameAlphaPrimary && sameBetaSecondary) {
+ $beta.insertBefore($alpha);
+ } else if (sameAlphaPrimary && !sameBetaSecondary) {
+ $secondary.insertAfter($alpha);
+ }
});
// Hide the tab navigation if only one tab
@@ -153,6 +174,9 @@ var ThemeCustomizeDialog = Dialog.extend({
reload: $item.data('reload'),
}));
+ $multiChoiceLabel.find('.o_theme_customize_color[data-color="primary"]').addClass('d-none').removeClass('d-flex');
+ $multiChoiceLabel.find('.o_theme_customize_color[data-color="secondary"]').addClass('d-none').removeClass('d-flex');
+
if ($container.hasClass('form-row')) {
var $col = $('<div/>', {class: (icon ? 'col-4' : (colorPalette ? 'col-12' : 'col-6'))});
$col.append($multiChoiceLabel);
@@ -214,8 +238,8 @@ var ThemeCustomizeDialog = Dialog.extend({
params: {
xml_ids: this._getXMLIDs(this.$inputs),
},
- }).done(function (data) {
- self.$inputs.prop('checked', false);
+ }).done(function (data) {
+ self.$inputs.prop('checked', false);
_.each(self.$inputs.filter('[data-xmlid]:not([data-xmlid=""])'), function (input) {
var $input = $(input);
if (!_.difference(self._getXMLIDs($input), data[0]).length) {
@@ -454,7 +478,7 @@ var ThemeCustomizeDialog = Dialog.extend({
var colorType = $color.data('colorType');
var colorpicker = new ColorpickerDialog(this, {
- defaultColor: $color.find('span').css('background-color'),
+ defaultColor: $color.find('.o_color_preview').css('background-color'),
});
colorpicker.on('colorpicker:saved', this, function (ev) {
ev.stopPropagation();
@@ -551,4 +575,4 @@ var ThemeCustomizeMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
websiteNavbarData.websiteNavbarRegistry.add(ThemeCustomizeMenu, '#theme_customize');
return ThemeCustomizeDialog;
-}); \ No newline at end of file
+});
diff --git a/addons/website/static/src/scss/options/colors/user_theme_color_palette.scss b/addons/website/static/src/scss/options/colors/user_theme_color_palette.scss
index dc57b44bd5d..88c0847ae04 100644
--- a/addons/website/static/src/scss/options/colors/user_theme_color_palette.scss
+++ b/addons/website/static/src/scss/options/colors/user_theme_color_palette.scss
@@ -1,15 +1,20 @@
$o-user-theme-color-palette: map-merge((
// Theme colors
- primary: null,
- secondary: null,
+ alpha: null,
+ beta: null,
gamma: null,
epsilon: null,
delta: null,
+ // Depending on the theme, alpha and beta may not be equal to
+ // primary and secondary
+ primary: null,
+ secondary: null,
+
// BS state colors
success: null,
info: null,
warning: null,
- danger: null,
+ danger: null,
), o-map-omit($o-user-theme-color-palette));
diff --git a/addons/website/static/src/scss/secondary_variables.scss b/addons/website/static/src/scss/secondary_variables.scss
index 06b19ce4090..762b498b75e 100644
--- a/addons/website/static/src/scss/secondary_variables.scss
+++ b/addons/website/static/src/scss/secondary_variables.scss
@@ -8,14 +8,14 @@
$-palette-1: nth($o-color-palettes, 1);
$o-color-palettes: append($o-color-palettes, map-merge($-palette-1, o-map-omit($o-user-color-palette)));
-// Generate default theme color scheme if primary is set
-$-primary: map-get($o-user-theme-color-palette, 'primary');
-@if ($-primary) {
+// Generate default theme color scheme if alpha is set
+$-alpha: map-get($o-user-theme-color-palette, 'alpha');
+@if ($-alpha) {
$o-user-theme-color-palette: map-merge($o-user-theme-color-palette, map-merge((
- secondary: lighten(desaturate($-primary, 60%), 30%),
- gamma: desaturate(adjust-hue($-primary, -45deg), 10%),
- delta: desaturate(adjust-hue($-primary, 45deg), 10%),
- epsilon: desaturate(adjust-hue($-primary, 180deg), 10%),
+ beta: lighten(desaturate($-alpha, 60%), 30%),
+ gamma: desaturate(adjust-hue($-alpha, -45deg), 10%),
+ delta: desaturate(adjust-hue($-alpha, 45deg), 10%),
+ epsilon: desaturate(adjust-hue($-alpha, 180deg), 10%),
), o-map-omit($o-user-theme-color-palette)));
}
diff --git a/addons/website/static/src/xml/website.editor.xml b/addons/website/static/src/xml/website.editor.xml
index 15baaa1f514..56cac3b3feb 100644
--- a/addons/website/static/src/xml/website.editor.xml
+++ b/addons/website/static/src/xml/website.editor.xml
@@ -29,7 +29,7 @@
<div t-if="colorPalette" class="o_theme_customize_color_previews" t-att-data-depends="id">
<div>
<h6>Main colors</h6>
- <t t-foreach="{'primary': _t('Primary'), 'secondary': _t('Secondary'), 'gamma': _t('Extra Color 1'), 'delta': _t('Extra Color 2'), 'epsilon': _t('Extra Color 3')}" t-as="color">
+ <t t-foreach="{'primary': _t('Primary'), 'secondary': _t('Secondary'), 'alpha': _t('Primary'), 'beta': _t('Secondary'), 'gamma': _t('Extra Color'), 'delta': _t('Extra Color'), 'epsilon': _t('Extra Color')}" t-as="color">
<t t-call="website.theme_customize_color_palette_button">
<t t-set="color_type" t-value="'theme'"/>
</t>
@@ -66,7 +66,7 @@
t-attf-class="btn btn-sm btn-secondary d-flex align-items-center w-100 mt-2 justify-content-between o_theme_customize_color o_theme_customize_color_#{color}"
t-att-data-color="color"
t-att-data-color-type="color_type">
- <t t-esc="color_value"/>
+ <span class="o_color_name"><t t-esc="color_value"/></span>
<span t-attf-class="o_color_preview bg-#{color}"/>
</button>
</t>