diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website/models/assets.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website/models/assets.py')
| -rw-r--r-- | addons/website/models/assets.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/addons/website/models/assets.py b/addons/website/models/assets.py new file mode 100644 index 00000000..17b9ea26 --- /dev/null +++ b/addons/website/models/assets.py @@ -0,0 +1,94 @@ +# -*- 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. + """ + if 'color-palettes-number' in values: + self.reset_asset('/website/static/src/scss/options/colors/user_color_palette.scss', 'web.assets_common') + # Do not reset all theme colors for compatibility (not removing alpha -> epsilon colors) + self.make_scss_customization('/website/static/src/scss/options/colors/user_theme_color_palette.scss', { + 'success': 'null', + 'info': 'null', + 'warning': 'null', + 'danger': 'null', + }) + + 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 |
