* theme_bootswatch, theme_default, website_theme_install This commit makes use of the new 'auto' widget for font selection: instead of enabling a template which will enable a scss file which sets a font variable to a specific value... we directly allow to do a scss custo which sets that value. The code in charge of resetting font customizations on theme switching is also moved and refactored here in website (instead of being specific to each theme). Part of https://github.com/odoo/odoo/pull/33442 task-1974659 Co-authored-by: qsm-odoo <qsm@odoo.com>
85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import re
|
|
|
|
from odoo import models
|
|
|
|
|
|
class Assets(models.AbstractModel):
|
|
_inherit = 'web_editor.assets'
|
|
|
|
def make_scss_customization(self, url, values):
|
|
"""
|
|
Makes a scss customization of the given file. That file must
|
|
contain a scss map including a line comment containing the word 'hook',
|
|
to indicate the location where to write the new key,value pairs.
|
|
|
|
Params:
|
|
url (str):
|
|
the URL of the scss file to customize (supposed to be a variable
|
|
file which will appear in the assets_common bundle)
|
|
|
|
values (dict):
|
|
key,value mapping to integrate in the file's map (containing the
|
|
word hook). If a key is already in the file's map, its value is
|
|
overridden.
|
|
"""
|
|
custom_url = self.make_custom_asset_file_url(url, 'web.assets_common')
|
|
updatedFileContent = self.get_asset_content(custom_url) or self.get_asset_content(url)
|
|
updatedFileContent = updatedFileContent.decode('utf-8')
|
|
for name, value in values.items():
|
|
pattern = "'%s': %%s,\n" % name
|
|
regex = re.compile(pattern % ".+")
|
|
replacement = pattern % value
|
|
if regex.search(updatedFileContent):
|
|
updatedFileContent = re.sub(regex, replacement, updatedFileContent)
|
|
else:
|
|
updatedFileContent = re.sub(r'( *)(.*hook.*)', r'\1%s\1\2' % replacement, updatedFileContent)
|
|
|
|
# Bundle is 'assets_common' as this route is only meant to update
|
|
# variables scss files
|
|
self.save_asset(url, 'web.assets_common', updatedFileContent, 'scss')
|
|
|
|
def _get_custom_attachment(self, custom_url, op='='):
|
|
"""
|
|
See web_editor.Assets._get_custom_attachment
|
|
Extend to only return the attachments related to the current website.
|
|
"""
|
|
website = self.env['website'].get_current_website()
|
|
res = super(Assets, self)._get_custom_attachment(custom_url, op=op)
|
|
return res.with_context(website_id=website.id).filtered(lambda x: not x.website_id or x.website_id == website)
|
|
|
|
def _get_custom_view(self, custom_url, op='='):
|
|
"""
|
|
See web_editor.Assets._get_custom_view
|
|
Extend to only return the views related to the current website.
|
|
"""
|
|
website = self.env['website'].get_current_website()
|
|
res = super(Assets, self)._get_custom_view(custom_url, op=op)
|
|
return res.with_context(website_id=website.id).filter_duplicate()
|
|
|
|
def _save_asset_attachment_hook(self):
|
|
"""
|
|
See web_editor.Assets._save_asset_attachment_hook
|
|
Extend to add website ID at attachment creation.
|
|
"""
|
|
res = super(Assets, self)._save_asset_attachment_hook()
|
|
|
|
website = self.env['website'].get_current_website()
|
|
if website:
|
|
res['website_id'] = website.id
|
|
return res
|
|
|
|
def _save_asset_view_hook(self):
|
|
"""
|
|
See web_editor.Assets._save_asset_view_hook
|
|
Extend to add website ID at view creation.
|
|
"""
|
|
res = super(Assets, self)._save_asset_view_hook()
|
|
|
|
website = self.env['website'].get_current_website()
|
|
if website:
|
|
res['website_id'] = website.id
|
|
return res
|