pull/2467/merge
Sebastiano Picchi 2025-04-06 19:57:40 +00:00 committed by GitHub
commit 422f558b17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 88 additions and 5 deletions

View File

@ -44,6 +44,47 @@ class ResCompany(models.Model):
} }
} }
} }
a[href],
a[tabindex],
.btn-link,
.o_external_button {
color: %(color_link_text)s !important;
}
a:hover,
.btn-link:hover {
color: %(color_link_text_hover)s !important;
}
.btn-primary:not(.disabled),
.ui-autocomplete .ui-menu-item > a.ui-state-active {
color: %(color_button_text)s !important;
background-color: %(color_button_bg)s !important;
border-color: %(color_button_bg)s !important;
}
.btn-primary:hover:not(.disabled),
.ui-autocomplete .ui-menu-item > a.ui-state-active:hover {
color: %(color_button_text)s !important;
background-color: %(color_button_bg_hover)s !important;
border-color: %(color_button_bg_hover)s !important;
}
.o_searchview .o_searchview_facet .o_searchview_facet_label {
color: %(color_button_text)s !important;
background-color: %(color_button_bg)s !important;
}
.o_form_view .o_horizontal_separator {
color: %(color_link_text)s !important;
}
.o_form_view .oe_button_box .oe_stat_button .o_button_icon,
.o_form_view .oe_button_box .oe_stat_button .o_stat_info .o_stat_value,
.o_form_view .oe_button_box .oe_stat_button > span .o_stat_value {
color: %(color_link_text)s !important;
}
.o_form_view .o_form_statusbar > .o_statusbar_status >
.o_arrow_button.btn-primary.disabled {
color: %(color_link_text)s !important;
}
.o_required_modifier.o_input, .o_required_modifier .o_input {
background-color: lighten(%(color_button_bg)s, 10%%) !important;
}
""" """
company_colors = fields.Serialized() company_colors = fields.Serialized()
@ -52,6 +93,16 @@ class ResCompany(models.Model):
"Navbar Background Color Hover", sparse="company_colors" "Navbar Background Color Hover", sparse="company_colors"
) )
color_navbar_text = fields.Char("Navbar Text Color", sparse="company_colors") color_navbar_text = fields.Char("Navbar Text Color", sparse="company_colors")
color_button_text = fields.Char("Button Text Color", sparse="company_colors")
color_button_bg = fields.Char("Button Background Color", sparse="company_colors")
color_button_bg_hover = fields.Char(
"Button Background Color Hover", sparse="company_colors"
)
color_link_text = fields.Char("Link Text Color", sparse="company_colors")
color_link_text_hover = fields.Char(
"Link Text Color Hover", sparse="company_colors"
)
scss_modif_timestamp = fields.Char("SCSS Modif. Timestamp")
@api.model_create_multi @api.model_create_multi
def create(self, vals_list): def create(self, vals_list):
@ -73,6 +124,11 @@ class ResCompany(models.Model):
"color_navbar_bg", "color_navbar_bg",
"color_navbar_bg_hover", "color_navbar_bg_hover",
"color_navbar_text", "color_navbar_text",
"color_button_bg",
"color_button_bg_hover",
"color_button_text",
"color_link_text",
"color_link_text_hover",
) )
result = super().write(values) result = super().write(values)
if any([field in values for field in fields_to_check]): if any([field in values for field in fields_to_check]):
@ -95,13 +151,27 @@ class ResCompany(models.Model):
# Calc. optimal text color (b/w) # Calc. optimal text color (b/w)
# Grayscale human vision perception (Rec. 709 values) # Grayscale human vision perception (Rec. 709 values)
_a = 1 - (0.2126 * _r + 0.7152 * _g + 0.0722 * _b) _a = 1 - (0.2126 * _r + 0.7152 * _g + 0.0722 * _b)
color_navbar_bg = n_rgb_to_hex(_r, _g, _b)
_s += 0.25 if _s < 0.5 else -0.25
color_button_bg = n_rgb_to_hex(*hls_to_rgb(_h, _l, _s))
color_button_bg_hover = n_rgb_to_hex(
*hls_to_rgb(_h, _l, _s + 0.2 if _s < 0.8 else 1.0)
)
values.update( values.update(
{ {
"color_navbar_bg": n_rgb_to_hex(_r, _g, _b), "color_navbar_bg": color_navbar_bg,
"color_navbar_bg_hover": n_rgb_to_hex(_rd, _gd, _bd), "color_navbar_bg_hover": n_rgb_to_hex(_rd, _gd, _bd),
"color_navbar_text": "#000" if _a < 0.5 else "#fff", "color_navbar_text": "#000" if _a < 0.5 else "#fff",
"color_button_bg": color_button_bg,
"color_button_bg_hover": color_button_bg_hover,
"color_button_text": "#000" if _a < 0.5 else "#fff",
"color_link_text": color_navbar_bg,
"color_link_text_hover": color_button_bg,
} }
) )
self.write(values) self.write(values)
def _scss_get_sanitized_values(self): def _scss_get_sanitized_values(self):
@ -118,6 +188,14 @@ class ResCompany(models.Model):
or "$o-navbar-inverse-link-hover-bg" or "$o-navbar-inverse-link-hover-bg"
), ),
"color_navbar_text": (values.get("color_navbar_text") or "#FFF"), "color_navbar_text": (values.get("color_navbar_text") or "#FFF"),
"color_button_bg": values.get("color_button_bg") or "$primary",
"color_button_bg_hover": values.get("color_button_bg_hover")
or 'darken(theme-color("primary"), 10%)',
"color_button_text": values.get("color_button_text") or "#FFF",
"color_link_text": values.get("color_link_text")
or 'theme-color("primary")',
"color_link_text_hover": values.get("color_link_text_hover")
or 'darken(theme-color("primary"), 10%)',
} }
) )
return values return values

View File

@ -15,16 +15,21 @@
name="company_styles" name="company_styles"
groups="base.group_system" groups="base.group_system"
> >
<group string="Navbar Colors" name="navbar_colors"> <group string="Colors" name="navbar_colors">
<field name="color_navbar_bg" widget="color" />
<field name="color_navbar_bg_hover" widget="color" />
<field name="color_navbar_text" widget="color" />
<button <button
class="btn-primary" class="btn-primary"
name="button_compute_color" name="button_compute_color"
type="object" type="object"
string="Compute colors from logo" string="Compute colors from logo"
/> />
<field name="color_navbar_bg" widget="color" />
<field name="color_navbar_bg_hover" widget="color" />
<field name="color_navbar_text" widget="color" />
<field name="color_button_bg" widget="color" />
<field name="color_button_bg_hover" widget="color" />
<field name="color_button_text" widget="color" />
<field name="color_link_text" widget="color" />
<field name="color_link_text_hover" widget="color" />
</group> </group>
<div class="alert alert-info info_icon" role="alert"> <div class="alert alert-info info_icon" role="alert">
<span class="fa fa-info fa-2x" /> <span class="fa fa-info fa-2x" />