diff --git a/backend_theme_infinito/README.rst b/backend_theme_infinito/README.rst new file mode 100755 index 000000000..bcb4fa6bf --- /dev/null +++ b/backend_theme_infinito/README.rst @@ -0,0 +1,41 @@ +Backend Theme Infinito +======================= +* Backend Theme Infinito module for Odoo 16 community editions + +Installation +============ + - www.odoo.com/documentation/16.0/setup/install.html + - Install our custom addon + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.odoo.com/documentation/user/16.0/legal/licenses/licenses.html) + +Company +------- +* 'Cybrosys Techno Solutions '__ + +Credits +------- +* 'Cybrosys Techno Solutions '__ + Author : Farseen, Musthafa @Cybrosys + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: ``__ + diff --git a/backend_theme_infinito/__init__.py b/backend_theme_infinito/__init__.py new file mode 100644 index 000000000..d29f8c047 --- /dev/null +++ b/backend_theme_infinito/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from .icon_hooks import icons_post_init_hook +from . import controllers +from . import models diff --git a/backend_theme_infinito/__manifest__.py b/backend_theme_infinito/__manifest__.py new file mode 100644 index 000000000..032399b83 --- /dev/null +++ b/backend_theme_infinito/__manifest__.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + "name": "Infinito Backend Theme", + "description": """Utmost and dynamic backend theme for Odoo 16""", + "summary": """The Backend Theme Infinito Is A Dynamic And Ultimate Theme + For Your Odoo V16. This Theme Will Give You A New Experience With Odoo. + Main Highlight Of The Theme Is You Can Dynamically Change The Colors, + Views, Buttons, Different Types Sidebar...Etc""", + "category": "Themes/Backend", + "version": "16.0.1.0.0", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + "depends": ['web', 'mail'], + "data": [ + 'views/assets.xml', + 'views/layout.xml', + 'views/base_pwa.xml', + 'views/icons.xml', + ], + 'assets': { + 'web._assets_primary_variables': { + 'backend_theme_infinito/static/src/scss/theme_variables.scss', + }, + 'web.assets_backend': { + '/backend_theme_infinito/static/src/xml/systray.xml', + '/backend_theme_infinito/static/src/xml/views.xml', + '/backend_theme_infinito/static/src/xml/theme_editor.xml', + '/backend_theme_infinito/static/src/xml/studio_elements.xml', + '/backend_theme_infinito/static/src/xml/ThemeStudioMenu.xml', + '/backend_theme_infinito/static/src/xml/style_add.xml', + '/backend_theme_infinito/static/src/xml/sidebar.xml', + '/backend_theme_infinito/static/src/xml/MenuBookmark.xml', + + 'https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap', + '/backend_theme_infinito/static/src/css/style.css', + '/backend_theme_infinito/static/src/css/loaders.css', + 'backend_theme_infinito/static/src/scss/sidebar.scss', + 'backend_theme_infinito/static/src/scss/responsive.scss', + 'backend_theme_infinito/static/src/scss/theme_date_picker.scss', + 'backend_theme_infinito/static/src/scss/theme_styles.scss', + 'backend_theme_infinito/static/src/scss/theme_rtl.scss', + 'backend_theme_infinito/static/src/scss/app_menu.scss', + 'backend_theme_infinito/static/src/scss/extra_styles.scss', + 'backend_theme_infinito/static/src/scss/views.scss', + '/backend_theme_infinito/static/src/js/systray.js', + '/backend_theme_infinito/static/src/js/loaders.js', + '/backend_theme_infinito/static/src/js/theme_editor.js', + '/backend_theme_infinito/static/src/js/ThemeStudioWidget.js', + '/backend_theme_infinito/static/src/js/Tool.js', + '/backend_theme_infinito/static/src/js/VisualEditor.js', + '/backend_theme_infinito/static/src/js/change.js', + '/backend_theme_infinito/static/src/js/style_add.js', + '/backend_theme_infinito/static/src/js/sidebar.js', + '/backend_theme_infinito/static/src/js/navbar.js', + '/backend_theme_infinito/static/src/js/theme_editor_sidebar.js', + '/backend_theme_infinito/static/src/js/recentApps.js', + '/backend_theme_infinito/static/src/js/timepicker.js', + '/backend_theme_infinito/static/src/js/MenuBookmark.js', + '/backend_theme_infinito/static/src/js/AdvancedFeautres.js', + '/backend_theme_infinito/static/src/js/theme_studio_action.js', + '/backend_theme_infinito/static/src/js/ThemeStudioMenu.js', + '/backend_theme_infinito/static/src/js/variables.js', + }, + }, + 'post_init_hook': 'icons_post_init_hook', + 'images': [ + 'static/description/banner.png', + 'static/description/theme_screenshot.png', + ], + 'license': 'LGPL-3', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/backend_theme_infinito/controllers/__init__.py b/backend_theme_infinito/controllers/__init__.py new file mode 100644 index 000000000..382fcf530 --- /dev/null +++ b/backend_theme_infinito/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import main +from . import base_pwa diff --git a/backend_theme_infinito/controllers/base_pwa.py b/backend_theme_infinito/controllers/base_pwa.py new file mode 100644 index 000000000..eb58b5966 --- /dev/null +++ b/backend_theme_infinito/controllers/base_pwa.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import json +from odoo import http +from odoo.http import request + + +class BasePwa(http.Controller): + def pwa_data(self): + # pwa_enable = request.env[ + # "ir.config_parameter"].sudo().get_param( + # "base_pwa.pwa_enable") + # if pwa_enable: + return { + 'short_name': 'Odoo', + 'name': 'Odoo-infinito', + 'description': 'PWA provided by backend theme infinito', + 'icons': [ + { + 'src': '/backend_theme_infinito/static/src/img/menu.png', + 'type': 'image/png', + 'sizes': '144x144', + 'purpose': 'any maskable' + }, + ], + 'start_url': 'http://cybrosys:8015/web', + 'background_color': 'white', + 'display': 'standalone', + 'theme_color': 'white', + } + + @http.route('/manifest/webmanifest', type='http', + auth='public', website=True, sitemap=False) + def base_pwa_data(self): + return request.make_response(json.dumps(self.pwa_data()), + headers=[('Content-Type', 'application/json;charset=utf-8')]) diff --git a/backend_theme_infinito/controllers/main.py b/backend_theme_infinito/controllers/main.py new file mode 100644 index 000000000..599b5dd39 --- /dev/null +++ b/backend_theme_infinito/controllers/main.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import json +import os +import re + +from odoo import http +from odoo.http import request + + +def minify_css(path): + """Minify css string""" + with open(path, 'r') as f: + css = f.read() + css = re.sub(r'/\*[\s\S]*?\*/', "", css) + css = re.sub(r'url\((["\'])([^)]*)\1\)', r'url(\2)', css) + css = re.sub(r'\s+', ' ', css) + css = re.sub(r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', + css) + css = re.sub(r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css) + rules = re.findall(r'([^{]+){([^}]*)}', css) + selectors_list = [] + css_values = {} + for rule in rules: + selector = rule[0] + content = rule[1] + if selector not in selectors_list: + selectors_list.append(selector) + css_values[selector] = content + else: + css_values[selector] = css_values[selector] + content + with open(path, 'w') as f: + selector_dict = {} + for selector in selectors_list: + rule = css_values[selector].split(';') + dict_rule = {} + for r in rule: + if r: + split_rule = r.split(':') + if len(split_rule) == 2: + dict_rule[split_rule[0].strip()] = split_rule[1] + selector_dict[selector] = dict_rule + f.write('/* This Styles are generated automatically by Theme Studio' + ' */\n') + for selector in selector_dict: + f.write(selector + '{') + for rule_data in selector_dict[selector]: + if rule_data != 'pointer-events': + if selector_dict[selector][rule_data].find( + '!important') == -1: + f.write(rule_data + ':' + + selector_dict[selector][rule_data] + + ' !important;') + else: + f.write(rule_data + ':' + + selector_dict[selector][rule_data] + ';') + f.write('}') + + +class ThemeStudio(http.Controller): + + @http.route(['/theme_studio/save_styles'], type="json") + def save_styles(self, changed_styles, object_class, hover=False): + """Create Dynamic Styles css file""" + changed_styles = json.loads(changed_styles) + working_dir = os.path.dirname(os.path.realpath(__file__)) + working_dir = working_dir.replace('/controllers', '') + file_path = working_dir + '/static/src/css/dynamic_styles.css' + style_file = open(file_path, 'a') + if os.stat(file_path).st_size == 0: + style_file.write('/* This file is generated automatically by ' + 'Theme Infinito */\n') + + style_file.write('\n.' + object_class + ':hover {\n') if hover else \ + style_file.write('\n.' + object_class + ' {\n') + for style in changed_styles: + style_file.write( + '\t' + style + ': ' + changed_styles[style] + ';\n') + style_file.write('}\n') + style_file.close() + minify_css(file_path) + return True + + @http.route(['/theme_studio/get_current_style'], type="json") + def get_current_style(self, selector): + working_dir = os.path.dirname(os.path.realpath(__file__)) + file_path = working_dir.replace('controllers', + 'static/src/css/dynamic_styles.css') + style_file = open(file_path, 'r') + css = style_file.read() + css = re.sub(r'/\*[\s\S]*?\*/', "", css) + css = re.sub(r'url\((["\'])([^)]*)\1\)', r'url(\2)', css) + css = re.sub(r'\s+', ' ', css) + css = re.sub(r'#([0-9a-f])\1([\da-f])\2([0-9a-f])\3(\s|;)', + r'#\1\2\3\4', css) + css = re.sub(r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css) + rules = re.findall(r'([^{]+){([^}]*)}', css) + for rule in rules: + selector_now = rule[0] + content = rule[1] + if selector == selector_now.strip(): + contents = content.split(';') + content = [] + for c in contents: + c = c.split(':') + if c[0] != '' and len(c) > 1: + content.append([c[0], c[1].strip().replace('!important', '')]) + return content + + return False + + @http.route(['/theme_studio/reset_to_default'], type="json") + def reset_to_default(self): + working_dir = os.path.dirname(os.path.realpath(__file__)) + file_path = working_dir.replace('controllers', + 'static/src/css/dynamic_styles.css') + style_file = open(file_path, 'w') + style_file.write('') + return True + + @http.route(['/theme_studio/set_advanced_data'], type="json") + def set_advanced_data(self, vals): + set_param = request.env['ir.config_parameter'].sudo().set_param + set_param('backend_theme_infinito.is_user_edit', vals['userEdit']) + set_param('backend_theme_infinito.is_sidebar_enabled', vals['sidebar']) + set_param('backend_theme_infinito.is_fullscreen_enabled', vals['fullscreen']) + set_param('backend_theme_infinito.is_sidebar_icon', vals['sidebarIcon']) + set_param('backend_theme_infinito.is_sidebar_name', vals['sidebarName']) + set_param('backend_theme_infinito.is_sidebar_company', vals['sidebarCompany']) + set_param('backend_theme_infinito.is_sidebar_user', vals['sidebarUser']) + set_param('backend_theme_infinito.is_recent_apps', vals['recentApps']) + set_param('backend_theme_infinito.is_fullscreen_app', vals['fullScreenApp']) + set_param('backend_theme_infinito.is_rtl', vals['infinitoRtl']) + set_param('backend_theme_infinito.is_dark', vals['infinitoDark']) + set_param('backend_theme_infinito.dark_mode', vals['infinitoDarkMode']) + set_param('backend_theme_infinito.dark_start', vals['infinitoDarkStart']) + set_param('backend_theme_infinito.dark_end', vals['infinitoDarkEnd']) + set_param('backend_theme_infinito.is_menu_bookmark', vals['infinitoBookmark']) + set_param('backend_theme_infinito.is_chameleon', vals['infinitoChameleon']) + + @http.route(['/theme_studio/set_advanced_data_user'], type="json") + def set_advanced_data_user(self, vals): + request.env.user.write({ + 'is_sidebar_enabled': vals['sidebar'], + 'is_fullscreen_enabled': vals['fullscreen'], + 'is_sidebar_icon': vals['sidebarIcon'], + 'is_sidebar_name': vals['sidebarName'], + 'is_sidebar_company': vals['sidebarCompany'], + 'is_sidebar_user': vals['sidebarUser'], + 'is_recent_apps': vals['recentApps'], + 'is_fullscreen_app': vals['fullScreenApp'], + 'is_rtl': vals['infinitoRtl'], + 'is_dark': vals['infinitoDark'], + 'dark_mode': vals['infinitoDarkMode'], + 'dark_start': vals['infinitoDarkStart'], + 'dark_end': vals['infinitoDarkEnd'], + 'is_menu_bookmark': vals['infinitoBookmark'], + 'loader_class': vals['loaderClass'], + 'is_chameleon': vals['infinitoChameleon'], + }) + + return True + + @http.route(['/theme_studio/add_recent_app'], type="json") + def add_recent_app(self, app): + recent_app = request.env['recent.apps'].sudo() + exist = recent_app.search([ + ('app_id', '=', int(app.get('appId'))), + ('user_id', '=', request.env.user.id) + ]) + exist.unlink() if exist else None + total_recent = recent_app.search([('user_id', '=', request.env.user.id)]) + if len(total_recent) > 4: + total_recent[0].unlink() + recent_app.create({ + 'app_id': int(app.get('appId')), + 'user_id': request.env.user.id + }) + + @http.route(['/theme_studio/get_recent_apps'], type="json") + def get_recent_apps(self): + recent_app = request.env['recent.apps'].sudo() + return recent_app.search_read([ + ('user_id', '=', request.env.user.id) + ]) + + @http.route(['/theme_studio/add_menu_bookmarks'], type="json") + def add_menu_bookmarks(self, menu): + menu_bookmark = request.env['infinito.menu.bookmark'].sudo() + menu_bookmark.create({ + 'action_id': int(menu.get('actionId')), + 'user_id': request.env.user.id, + 'url': menu.get('menuUrl'), + }) + + @http.route(['/theme_studio/remove_menu_bookmarks'], type="json") + def remove_menu_bookmarks(self, menu): + menu_bookmark = request.env['infinito.menu.bookmark'].sudo().search([ + ('action_id', '=', int(menu.get('actionId'))), + ('user_id', '=', request.env.user.id) + ]) + if menu_bookmark: + menu_bookmark.unlink() + + @http.route(['/theme_studio/get_presets'], type="json") + def get_presets(self): + working_dir = os.path.dirname(os.path.realpath(__file__)) + working_dir = working_dir.replace('/controllers', '') + file_path = working_dir + '/static/src/json/presets.json' + file = open(file_path, 'r') + presets = json.load(file) + + return presets diff --git a/backend_theme_infinito/doc/RELEASE_NOTES.md b/backend_theme_infinito/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..10d6b40b0 --- /dev/null +++ b/backend_theme_infinito/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 23.11.2022 +#### Version 16.0.1.0.0 +#### ADD +Initial Commit + diff --git a/backend_theme_infinito/icon_hooks.py b/backend_theme_infinito/icon_hooks.py new file mode 100644 index 000000000..f2b5ac7bd --- /dev/null +++ b/backend_theme_infinito/icon_hooks.py @@ -0,0 +1,158 @@ +"""Hooks for Changing Menu Web_icon""" +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import base64 + +from odoo import api, SUPERUSER_ID +from odoo.modules import get_module_resource + + +def icons_post_init_hook(cr, registry): + """post init hook for changing module icons""" + env = api.Environment(cr, SUPERUSER_ID, {}) + menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)]) + + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'contact.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'link-tracker.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'dashboard.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'sales.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Invoicing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'invoice.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'inventory.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'purchase.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'calendar.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'crm.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Notes': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'notes.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'website.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'pos.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'manufacturing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'repairs.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'sms-marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'project.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'surveys.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'employees.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'recruitment.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'attendance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'time-off.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'expense.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'maintenance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'live-chat.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'lunch.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'fleet.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'timesheets.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'events.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'elearning.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'members.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) diff --git a/backend_theme_infinito/models/__init__.py b/backend_theme_infinito/models/__init__.py new file mode 100644 index 000000000..d4276cb68 --- /dev/null +++ b/backend_theme_infinito/models/__init__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import res_config_settings +from . import res_users +from . import ir_http +from . import recent_apps +from . import menu_bookmark diff --git a/backend_theme_infinito/models/ir_http.py b/backend_theme_infinito/models/ir_http.py new file mode 100644 index 000000000..3cd55ce5f --- /dev/null +++ b/backend_theme_infinito/models/ir_http.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models + + +def float_to_time(time): + return '{0:02.0f}:{1:02.0f}'.format(*divmod(float(time) * 60, 60)) + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + res = super(IrHttp, self).session_info() + get_param = self.env['ir.config_parameter'].sudo().get_param + if self.env.user.has_group('base.group_user'): + user_edit = get_param( + 'backend_theme_infinito.is_user_edit', default=False) + res['userEdit'] = user_edit + if user_edit: + res['sidebar'] = self.env.user.is_sidebar_enabled + res['fullscreen'] = self.env.user.is_fullscreen_enabled + res['sidebarIcon'] = self.env.user.is_sidebar_icon + res['sidebarName'] = self.env.user.is_sidebar_name + res['sidebarCompany'] = self.env.user.is_sidebar_company + res['sidebarUser'] = self.env.user.is_sidebar_user + res['recentApps'] = self.env.user.is_recent_apps + res['fullScreenApp'] = self.env.user.is_fullscreen_app + res['infinitoRtl'] = self.env.user.is_rtl + res['infinitoDark'] = self.env.user.is_dark + res['infinitoDarkMode'] = self.env.user.dark_mode + res['infinitoDarkStart'] = float_to_time(self.env.user.dark_start) + res['infinitoDarkEnd'] = float_to_time(self.env.user.dark_end) + res['infinitoBookmark'] = self.env.user.is_menu_bookmark + res['loaderClass'] = self.env.user.loader_class + res['infinitoChameleon'] = self.env.user.is_chameleon + else: + res['sidebar'] = get_param( + 'backend_theme_infinito.is_sidebar_enabled', default=False) + res['fullscreen'] = get_param( + 'backend_theme_infinito.is_fullscreen_enabled', default=False) + res['sidebarIcon'] = get_param( + 'backend_theme_infinito.is_sidebar_icon', default=False) + res['sidebarName'] = get_param( + 'backend_theme_infinito.is_sidebar_name', default=False) + res['sidebarCompany'] = get_param( + 'backend_theme_infinito.is_sidebar_company', default=False) + res['sidebarUser'] = get_param( + 'backend_theme_infinito.is_sidebar_user', default=False) + res['recentApps'] = get_param( + 'backend_theme_infinito.is_recent_apps', default=False) + res['fullScreenApp'] = get_param( + 'backend_theme_infinito.is_fullscreen_app', default=False) + res['infinitoRtl'] = get_param( + 'backend_theme_infinito.is_rtl', default=False) + res['infinitoDark'] = get_param( + 'backend_theme_infinito.is_dark', default=False) + res['infinitoDarkMode'] = get_param( + 'backend_theme_infinito.dark_mode', default=False) + res['infinitoDarkStart'] = float_to_time(get_param( + 'backend_theme_infinito.dark_start', default=19.0)) + res['infinitoDarkEnd'] = float_to_time(get_param( + 'backend_theme_infinito.dark_end', default=5.0)) + res['infinitoBookmark'] = get_param( + 'backend_theme_infinito.is_menu_bookmark', default=False) + res['loaderClass'] = get_param( + 'backend_theme_infinito.loader_class', default=False) + res['infinitoChameleon'] = get_param( + 'backend_theme_infinito.is_chameleon', default=False) + menu_bookmark = self.env['infinito.menu.bookmark'].sudo(). \ + search([('user_id', '=', self.env.user.id)]) + list_bookmark = [] + for bookmark in menu_bookmark: + bkm = bookmark.read(['action_id', 'url', 'name'])[0] + bkm['short_name'] = bkm['name'][:2].upper() + list_bookmark.append(bkm) + res['infinitoBookmarks'] = menu_bookmark.action_id.ids + res['infinitoMenuBookmarks'] = list_bookmark + + return res diff --git a/backend_theme_infinito/models/menu_bookmark.py b/backend_theme_infinito/models/menu_bookmark.py new file mode 100644 index 000000000..87f8af1e4 --- /dev/null +++ b/backend_theme_infinito/models/menu_bookmark.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ModelName(models.Model): + _name = 'infinito.menu.bookmark' + _description = 'Menu Bookmark' + + name = fields.Char(related='action_id.name') + action_id = fields.Many2one('ir.actions.act_window') + url = fields.Text('Url') + user_id = fields.Many2one('res.users') diff --git a/backend_theme_infinito/models/recent_apps.py b/backend_theme_infinito/models/recent_apps.py new file mode 100644 index 000000000..eb9ab2b6b --- /dev/null +++ b/backend_theme_infinito/models/recent_apps.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models, api + + +class RecentApps(models.Model): + _name = 'recent.apps' + _description = 'Recent Apps' + + name = fields.Char(compute='_compute_icon', store=True) + app_id = fields.Integer() + icon = fields.Binary(compute='_compute_icon', store=True) + user_id = fields.Many2one('res.users') + + @api.depends('app_id') + def _compute_icon(self): + menu_ui = self.env['ir.ui.menu'] + for rec in self: + app = menu_ui.browse(rec.app_id) + rec.icon = app._compute_web_icon_data(app.web_icon) + rec.name = app.name diff --git a/backend_theme_infinito/models/res_config_settings.py b/backend_theme_infinito/models/res_config_settings.py new file mode 100644 index 000000000..1b19fe47c --- /dev/null +++ b/backend_theme_infinito/models/res_config_settings.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + is_user_edit = fields.Boolean('User edit', default=False) + is_sidebar_enabled = fields.Boolean('Sidebar Enabled', default=False) + is_fullscreen_enabled = fields.Boolean('Full screen Enabled', default=False) + is_sidebar_icon = fields.Boolean('Sidebar icon Enabled', default=True) + is_sidebar_name = fields.Boolean('Sidebar name Enabled', default=True) + is_sidebar_company = fields.Boolean('Sidebar Company Enabled', default=False) + is_sidebar_user = fields.Boolean('Sidebar User Enabled', default=False) + is_recent_apps = fields.Boolean('Recent Apps Enabled', default=False) + is_fullscreen_app = fields.Boolean('Full screen Apps Enabled', default=False) + is_rtl = fields.Boolean('Rtl Enabled', default=False) + is_dark = fields.Boolean('Dark mode Enabled', default=False) + is_menu_bookmark = fields.Boolean('Menu Bookmark mode Enabled', default=False) + is_chameleon = fields.Boolean('Chameleon mode Enabled', default=False) + dark_mode = fields.Selection([ + ('all', 'All'), + ('schedule', 'Schedule'), + ('auto', 'Automatic'), + ], default='all') + dark_start = fields.Float('Dark Start', default=19.0) + dark_end = fields.Float('Dark End', default=5.0) + loader_class = fields.Char('Loader', default='default') + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + get_param = self.env['ir.config_parameter'].sudo().get_param + res['is_user_edit'] = get_param('backend_theme_infinito.is_user_edit', default=False) + res['is_sidebar_enabled'] = get_param('backend_theme_infinito.is_sidebar_enabled', default=False) + res['is_fullscreen_enabled'] = get_param('backend_theme_infinito.is_fullscreen_enabled', default=False) + res['is_sidebar_icon'] = get_param('backend_theme_infinito.is_sidebar_icon', default=False) + res['is_sidebar_name'] = get_param('backend_theme_infinito.is_sidebar_name', default=False) + res['is_sidebar_company'] = get_param('backend_theme_infinito.is_sidebar_company', default=False) + res['is_sidebar_user'] = get_param('backend_theme_infinito.is_sidebar_user', default=False) + res['is_recent_apps'] = get_param('backend_theme_infinito.is_recent_apps', default=False) + res['is_rtl'] = get_param('backend_theme_infinito.is_rtl', default=False) + res['is_dark'] = get_param('backend_theme_infinito.is_dark', default=False) + res['is_menu_bookmark'] = get_param('backend_theme_infinito.is_menu_bookmark', default=False) + res['dark_mode'] = get_param('backend_theme_infinito.dark_mode', default='all') + res['dark_start'] = get_param('backend_theme_infinito.dark_start', default=19.0) + res['dark_end'] = get_param('backend_theme_infinito.dark_end', default=5.0) + res['loader_class'] = get_param('backend_theme_infinito.loader_class', default=5.0) + res['is_chameleon'] = get_param('backend_theme_infinito.is_chameleon', default=False) + + return res + + @api.model + def set_values(self): + set_param = self.env['ir.config_parameter'].sudo().set_param + set_param('backend_theme_infinito.is_user_edit', + self.is_user_edit) + set_param('backend_theme_infinito.is_sidebar_enabled', + self.is_sidebar_enabled) + set_param('backend_theme_infinito.is_fullscreen_enabled', + self.is_fullscreen_enabled) + set_param('backend_theme_infinito.is_sidebar_icon', + self.is_sidebar_icon) + set_param('backend_theme_infinito.is_sidebar_name', + self.is_sidebar_name) + set_param('backend_theme_infinito.is_sidebar_company', + self.is_sidebar_company) + set_param('backend_theme_infinito.is_sidebar_user', + self.is_sidebar_user) + set_param('backend_theme_infinito.is_recent_apps', + self.is_recent_apps) + set_param('backend_theme_infinito.is_rtl', + self.is_rtl) + set_param('backend_theme_infinito.is_dark', + self.is_dark) + set_param('backend_theme_infinito.dark_mode', + self.dark_mode) + set_param('backend_theme_infinito.dark_start', + self.dark_start) + set_param('backend_theme_infinito.dark_end', + self.dark_end) + set_param('backend_theme_infinito.is_menu_bookmark', + self.is_menu_bookmark) + set_param('backend_theme_infinito.loader_class', + self.loader_class) + set_param('backend_theme_infinito.is_chameleon', + self.is_chameleon) + + super(ResConfigSettings, self).set_values() diff --git a/backend_theme_infinito/models/res_users.py b/backend_theme_infinito/models/res_users.py new file mode 100644 index 000000000..575f99ee1 --- /dev/null +++ b/backend_theme_infinito/models/res_users.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class User(models.Model): + _inherit = 'res.users' + + is_sidebar_enabled = fields.Boolean('Sidebar Enabled', default=False) + is_fullscreen_enabled = fields.Boolean('Full screen Enabled', default=False) + is_sidebar_icon = fields.Boolean('Sidebar icon Enabled', default=True) + is_sidebar_name = fields.Boolean('Sidebar name Enabled', default=True) + is_sidebar_company = fields.Boolean('Sidebar Company Enabled', + default=False) + is_sidebar_user = fields.Boolean('Sidebar User Enabled', default=False) + is_recent_apps = fields.Boolean('Recent Apps Enabled', default=False) + is_fullscreen_app = fields.Boolean('Full screen Apps Enabled', + default=False) + is_rtl = fields.Boolean('Rtl Enabled', default=False) + is_dark = fields.Boolean('Dark mode Enabled', default=False) + is_menu_bookmark = fields.Boolean('Menu Bookmark mode Enabled', + default=False) + is_chameleon = fields.Boolean('Chameleon mode Enabled', default=False) + dark_mode = fields.Selection([ + ('all', 'All'), + ('schedule', 'Schedule'), + ('auto', 'Automatic'), + ], default='all') + dark_start = fields.Float('Dark Start', default=19.0) + dark_end = fields.Float('Dark End', default=5.0) + loader_class = fields.Char('Loader', default='default') diff --git a/backend_theme_infinito/static/description/assets/hero.png b/backend_theme_infinito/static/description/assets/hero.png new file mode 100644 index 000000000..80b9a6c62 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/hero.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/check.png b/backend_theme_infinito/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/check.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/chevron.png b/backend_theme_infinito/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/chevron.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/cogs.png b/backend_theme_infinito/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/cogs.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/consultation.png b/backend_theme_infinito/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/consultation.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/ecom-black.png b/backend_theme_infinito/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/ecom-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/education-black.png b/backend_theme_infinito/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/education-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/hotel-black.png b/backend_theme_infinito/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/hotel-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/license.png b/backend_theme_infinito/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/license.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/lifebuoy.png b/backend_theme_infinito/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/lifebuoy.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/manufacturing-black.png b/backend_theme_infinito/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/manufacturing-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/pos-black.png b/backend_theme_infinito/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/pos-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/puzzle.png b/backend_theme_infinito/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/puzzle.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/restaurant-black.png b/backend_theme_infinito/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/restaurant-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/service-black.png b/backend_theme_infinito/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/service-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/trading-black.png b/backend_theme_infinito/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/trading-black.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/training.png b/backend_theme_infinito/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/training.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/update.png b/backend_theme_infinito/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/update.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/user.png b/backend_theme_infinito/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/user.png differ diff --git a/backend_theme_infinito/static/description/assets/icons/wrench.png b/backend_theme_infinito/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/backend_theme_infinito/static/description/assets/icons/wrench.png differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/bookmark.jpg b/backend_theme_infinito/static/description/assets/screenshots/bookmark.jpg new file mode 100644 index 000000000..191a007ef Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/bookmark.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/calendar.jpg b/backend_theme_infinito/static/description/assets/screenshots/calendar.jpg new file mode 100644 index 000000000..e4fe90436 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/calendar.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/discuss.jpg b/backend_theme_infinito/static/description/assets/screenshots/discuss.jpg new file mode 100644 index 000000000..bb7e253cf Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/discuss.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/adv_button.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/adv_button.gif new file mode 100644 index 000000000..3a5eb4175 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/adv_button.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/adv_list.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/adv_list.gif new file mode 100644 index 000000000..a2b65df7b Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/adv_list.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/animation.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/animation.gif new file mode 100644 index 000000000..60ee06bfb Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/animation.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/app_bar.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/app_bar.gif new file mode 100644 index 000000000..dc7add82d Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/app_bar.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/bookmark.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/bookmark.gif new file mode 100644 index 000000000..7a933b32b Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/bookmark.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/dark_mode.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/dark_mode.gif new file mode 100644 index 000000000..f1c640c33 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/dark_mode.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/hover_nav.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/hover_nav.gif new file mode 100644 index 000000000..5af166a0d Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/hover_nav.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/preloader.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/preloader.gif new file mode 100644 index 000000000..363efa8dc Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/preloader.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/recent_apps.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/recent_apps.gif new file mode 100644 index 000000000..cd2174e71 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/recent_apps.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/rtl.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/rtl.gif new file mode 100644 index 000000000..fabd72ddf Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/rtl.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/gif/side_bar.gif b/backend_theme_infinito/static/description/assets/screenshots/gif/side_bar.gif new file mode 100644 index 000000000..9bfb81f81 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/gif/side_bar.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/infinito_adv.jpg b/backend_theme_infinito/static/description/assets/screenshots/infinito_adv.jpg new file mode 100644 index 000000000..52ea09419 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/infinito_adv.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/infinito_landing.jpg b/backend_theme_infinito/static/description/assets/screenshots/infinito_landing.jpg new file mode 100644 index 000000000..621bb701a Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/infinito_landing.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/infinito_styles.jpg b/backend_theme_infinito/static/description/assets/screenshots/infinito_styles.jpg new file mode 100644 index 000000000..5460ded7a Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/infinito_styles.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/kanban-1.jpg b/backend_theme_infinito/static/description/assets/screenshots/kanban-1.jpg new file mode 100644 index 000000000..dbc353ea8 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/kanban-1.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/kanban-grp.png b/backend_theme_infinito/static/description/assets/screenshots/kanban-grp.png new file mode 100644 index 000000000..43bd0bfde Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/kanban-grp.png differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/kanban-img.png b/backend_theme_infinito/static/description/assets/screenshots/kanban-img.png new file mode 100644 index 000000000..46acf1bfb Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/kanban-img.png differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/kanban.jpg b/backend_theme_infinito/static/description/assets/screenshots/kanban.jpg new file mode 100644 index 000000000..3387c9e07 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/kanban.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/kanban.png b/backend_theme_infinito/static/description/assets/screenshots/kanban.png new file mode 100644 index 000000000..65de76f3a Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/kanban.png differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/kanban_grp.jpg b/backend_theme_infinito/static/description/assets/screenshots/kanban_grp.jpg new file mode 100644 index 000000000..084fd1b0f Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/kanban_grp.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/list.jpg b/backend_theme_infinito/static/description/assets/screenshots/list.jpg new file mode 100644 index 000000000..c7709a9d1 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/list.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/list_group.jpg b/backend_theme_infinito/static/description/assets/screenshots/list_group.jpg new file mode 100644 index 000000000..262f15780 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/list_group.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/resp-app_bar.gif b/backend_theme_infinito/static/description/assets/screenshots/resp-app_bar.gif new file mode 100644 index 000000000..2744fa4aa Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/resp-app_bar.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/resp-sidebar.gif b/backend_theme_infinito/static/description/assets/screenshots/resp-sidebar.gif new file mode 100644 index 000000000..624f5482b Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/resp-sidebar.gif differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/sidebar-list.jpg b/backend_theme_infinito/static/description/assets/screenshots/sidebar-list.jpg new file mode 100644 index 000000000..079234c97 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/sidebar-list.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/sidebar-small.jpg b/backend_theme_infinito/static/description/assets/screenshots/sidebar-small.jpg new file mode 100644 index 000000000..1e9092513 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/sidebar-small.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/sidebar.jpg b/backend_theme_infinito/static/description/assets/screenshots/sidebar.jpg new file mode 100644 index 000000000..1f6acb3f4 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/sidebar.jpg differ diff --git a/backend_theme_infinito/static/description/assets/screenshots/user_edit.jpg b/backend_theme_infinito/static/description/assets/screenshots/user_edit.jpg new file mode 100644 index 000000000..aa3510598 Binary files /dev/null and b/backend_theme_infinito/static/description/assets/screenshots/user_edit.jpg differ diff --git a/backend_theme_infinito/static/description/banner.png b/backend_theme_infinito/static/description/banner.png new file mode 100644 index 000000000..c7f75d190 Binary files /dev/null and b/backend_theme_infinito/static/description/banner.png differ diff --git a/backend_theme_infinito/static/description/icon.png b/backend_theme_infinito/static/description/icon.png new file mode 100644 index 000000000..906933de8 Binary files /dev/null and b/backend_theme_infinito/static/description/icon.png differ diff --git a/backend_theme_infinito/static/description/index.html b/backend_theme_infinito/static/description/index.html new file mode 100644 index 000000000..53900e2e7 --- /dev/null +++ b/backend_theme_infinito/static/description/index.html @@ -0,0 +1,1106 @@ + +
+
+
+

+ Backend Theme iNFINITO +

+

+ Utmost and dynamic backend theme for Odoo 16

+
+
+ +
+
+
+ + + +
+
+
+

+ The Backend Theme Infinito Is A Dynamic And Ultimate Theme For Your Odoo V16. + This Theme Will Give You A New Experience + With Odoo. Main Highlight Of The Theme Is You Can Dynamically Change The Colors, Views, Buttons, Different Types Sidebar...Etc. + Moreover It Act As A Studio Based Theme. It Also Provides Dark Mode With 3 Configuration, Recent Apps, + Menu Bookmark And It Supports RTL. + It Is A Perfect Choice For Your Odoo Backend And An Attractive + Theme For Your Odoo 16. + It Will Give You A Clean Layout With A New Color Combination. It Has A + Sidebar With + New App Icons, Company Logo And User Menu. This Will Change Your Old + Kanban, List And Form Views To A Fully + Modified View And Infinto Provides You A Full Screen App Bar With User Image And Greetings. +

+
+
+ +
+
+
+ + + +
+
+
+

+ Features

+
+
+ + +
+
+
+ +
+
+ +
+
+ New +
+

Fully Responsive + Layout

+
+ Now take advantage of everything your dashboard has to + offer even on the go. Our design are + now + fully responsive enabling you to view and manage + everything from the comfort of your mobile + device. Everything + has been designed in a meticulous fashion so that every + view snaps itself to fit the size of + the + device you are using, be it smartphones, tablet or any + other portables, our theme adjusts + itself + to fit the screen size. +
+ + +

Fully responsive

+
+ + + +

Fly-out hamburger menu on the left

+
+ + + +

Fits perfectly to all screen sizes

+
+ + + +

Quick access menu at the bottom in discuss

+
+
+ +
+ +
+ +
+ +
+
+ + + +
+
+
+

Infinito Dynamic Styling

+
+ The significant and attractive feature of the Backend Theme Infinito is its dynamic and powerful styling. + The user can design their own style not only for the buttons but also for views, tabs, control panels, + and many more aspects. The new Backend Theme Infinito V16 delivers you an entirely redesigned Kanban view + and Kanban Group View. The unique stages in the Kanban view offer an extremely attractive design + and a precise view. The simple layout with unusual color combinations and custom fonts provides a + comfortable experience for the users. +
+
+
+ + +

Dynamic Styles

+
+ + + +

New Color Combination

+
+ + + +

Edit Button Style

+
+
+ +
+ + +

Choose Button Styles from the Preset

+
+ + + +

Clean Layout

+
+ + + +

Advanced Style Editor

+
+
+
+
+
+ +
+
+ +
+
+
+ + + +
+
+ +
+
+
+ New +
+

+ Sidebar with Customization

+
+ Backend Theme Infinito V16 ensures stunning themes for your Odoo 16 platform. + The new sidebar with more customization options provides a better experience. + The system encompasses the Enable/Disable Sidebar, Turn On/Off Company Icon, User menu, + and many other aspects such as options to toggle the App icon and name, a clear layout and + colors, responsive sidebars, and even the option for customizing your own sidebars. +
+
+ + +

Enable/Disable Sidebar

+
+ + + +

Turn On/Off Company icon

+
+ + +

User menu

+
+ + + +

Toggle the App Icon and Name

+
+ + +

Sidebar with New Menu Icons

+
+ + +

Responsive Sidebar

+
+ + +

Customize Your Own Sidebar

+
+ + +
+ +
+
+ +
+
+

+ New Responsive Sidebar

+
+ The All-New Menu Design is Main Attractive Section for + the Backend theme infinito. The Sidebar + have New Minimalist + Icons for Applications in Odoo. Also the Sidebar Have + Closing and Opening Option. + Customisable Logo Attached in Sidebar + That is Automatically Fetch Your Company Logo. +
+ +
+
+ +
+
+ + + +
+
+
+

Full Screen App Menu

+
+ The responsive full-screen app bar proffers a real-time view into the system. + The full-screen app bar feature in the application will be very comfortable for the users + to get quick and complete access to their applications. In addition, + the new application makes your system suitable for all the screen sizes, + such as computers, laptops, tablets, and even smartphones. +
+ +
+
+ +
+
+
+ + + +
+
+
+

Discuss Module View

+
+ Backend Theme Infinito Gives You The Fully Modified Discuss View + with a Full Screen Experience. It will + Give You a Clean Layout with the New Color Combination + and a Modified Font. +
+
+
+ + +

Modified Discuss Style

+
+ + + +

Full Screen View

+
+
+ +
+ + +

Responsive

+
+ + + +

New Color Combination

+
+
+
+
+
+ +
+
+
+ + + +
+
+
+

Menu Bookmark

+
+ You can bookmark menus. Bookmarked menus will be visible on hovering the mouse to the right side of screen. + You can easily add and remove the bookmarks. + The Menu bookmark feature transforms the platform more comfortable to use, + and the option is available on the right side of the screen. + Also, you have the provision to change the position of bookmarks by simply dragging and dropping them. +
+
+
+ +
+
+
+ + + +
+
+
+

Recent Apps

+
+ The Recent apps feature lodged in the application will be enormously valuable for getting a clear notion about the recently visited applications. + This system-level user interface has a profound effect on tracking recent activities and tasks. + All the recent apps will be displayed at the bottom of the screen, + and they can be dragged and dropped to any position. +
+ +
+
+ +
+
+
+ + + +
+
+
+

Dark Mode

+
+ The developers of our team went beyond expectations, and they invented a sleek, cool, and elegant dark mode for a better user experience. + The Dark mode can be applied in three different modes such as Automatic, Scheduled, and Always. + With the Automatic option, you can turn on dark mode automatically at a specific time. + It is also easy to schedule dark mode based on your preferences by enabling the Scheduled option. + Further, the Always option allows you to turn on the dark mode forever. +
+
+
+ +
+
+
+ + + +
+
+
+

User Edit

+
+ The newly developed Backend Theme Infinito application for Odoo 16 grants separate user edit options. + The user and the admin have different configuration options. +
+ +
+
+ +
+
+
+ + + +
+
+
+

RTL

+
+ The Infinito Backend Theme application supports RTL- Right To Left Language to ensure closer + collaboration with customers from certain regions. Now you can effortlessly respond to users + practicing Right To Left languages such as Arabic, Japanese, Chinese, and many others. +
+
+
+ +
+
+
+ + + +
+
+
+

Loaders

+
+ Another exclusive feature of the application is the Loaders. + The user has the provision to choose different loading styles from the presets. +
+ +
+
+ +
+
+
+ + + +
+
+
+

Navbar on Hover

+
+ The exclusive Navbar on hover feature included in the application is highly comfortable + for hiding the navbar for full screen. + Now the Navbar only shows when hovering at the top of the screen. +
+
+
+ +
+
+
+ + + +
+
+
+

Chameleon Mode

+
+ The Chameleon mode embedded in the application will be very convenient for changing theme colors automatically. +
+ +
+
+ +
+
+
+ + + +
+
+
+
+

+ Kanban view

+
+
+ +
+
+
+
+

+ Grouped Kanban view

+
+
+ +
+
+
+
+

+ Apps Kanban View

+
+
+ +
+
+
+
+ + + +
+
+
+

+ Screenshots

+
+
+ + +
+
+
+
+
+ 1
+
+
Kanban View
+
+
+ The Backend theme infinito V16 Gives You a Fully Modified Kanban View and Kanban Group View. + The Section Wise Separated Stages give a Pleasant Experience And an Extraordinary Design To + Your Content Tiles Making The Tiles Look Great. It will Give You a Clean Layout with the New Color + Combination and a Modified Font. +
+
+
+ +
+
+ + +
+
+
+
+
+ 2
+
+
Advanced Editor
+
+
+
+ +
+
+ + +
+
+
+
+
+ 3
+
+
Sidebar: Icons Only
+
+
+
+ +
+
+ + +
+
+
+
+
+ 4
+
+
Apps Page
+
+
+
+ +
+
+ + +
+
+
+
+
+ 5
+
+
Bookmark
+
+
+
+ +
+
+ + +
+
+
+
+
+ 6
+
+
Calendar View
+
+
+
+ +
+
+ + +
+
+
+
+
+ 7
+
+
List View
+
+
+
+ +
+
+ + +
+
+
+
+
+ 8
+
+
Grouped List View
+
+
+
+ +
+
+ + +
+
+
+
+
+ 9
+
+
Grouped Kanban View
+
+
+
+ +
+
+ +
+ + + +
+
+
+

+ Our Services

+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

+ Our Industries

+
+ +
+
+ +
+ Trading +
+

+ Easily + procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A + platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, + track and + schedule your operations

+
+
+
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+
+
+ +
+ Service Management +
+

+ Keep + track of + services and invoice

+
+
+
+
+ +
+ Restaurant +
+

+ Run + your bar or + restaurant methodically

+
+
+
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+
+
+ + + + +
+
+
+

+ Need Help?

+
+
+ + + +
+ +
+
+ +
+ +
+ +
+
+ +
\ No newline at end of file diff --git a/backend_theme_infinito/static/description/theme_screenshot.png b/backend_theme_infinito/static/description/theme_screenshot.png new file mode 100644 index 000000000..9636dd193 Binary files /dev/null and b/backend_theme_infinito/static/description/theme_screenshot.png differ diff --git a/backend_theme_infinito/static/src/css/dynamic_styles.css b/backend_theme_infinito/static/src/css/dynamic_styles.css new file mode 100644 index 000000000..e69de29bb diff --git a/backend_theme_infinito/static/src/css/layout.css b/backend_theme_infinito/static/src/css/layout.css new file mode 100644 index 000000000..293c83bf6 --- /dev/null +++ b/backend_theme_infinito/static/src/css/layout.css @@ -0,0 +1,34 @@ +.o_web_client { + background-color: var(--bg_white); +} + +.o_web_client > header { + margin: 10px 10px 0px 10px; + border-radius: 10px; + box-shadow: 1px 1px 15px 0; +} + +.o_main_navbar { + border-radius: 10px; +} + + .o_web_client > .o_action_manager, #sidebar_panel, .oe_kanban_card { + margin: 15px; + border-radius: 10px; + box-shadow: 1px 1px 15px 0; + padding: 15px; + background-color: var(--bg_white); +} + +#sidebar_panel { + margin-left: 0px; + background-color: var(--nav_bar_color); +} + +.o_main_navbar .o_navbar_apps_menu.show .o-dropdown--menu dropdown-menu { + border-radius: 10px 0 10px 10px; +} + +.oe_kanban_card { + box-shadow: none; +} diff --git a/backend_theme_infinito/static/src/css/loaders.css b/backend_theme_infinito/static/src/css/loaders.css new file mode 100644 index 000000000..5dc72428f --- /dev/null +++ b/backend_theme_infinito/static/src/css/loaders.css @@ -0,0 +1,128 @@ +/* Rotation */ + +.rotating::before{ + content: " "; + position: absolute; + top: calc(50% - 25px); + left: calc(50% - 25px); + height: 50px; + width: 50px; + background-image: linear-gradient(to bottom,black 50%, white 50%); + border-radius: 50%; + animation: rotate 1s; + animation-iteration-count: infinite; +} + +.rotating::after{ + content: " "; + position: absolute; + top: calc(50% - 20px); + left: calc(50% - 20px); + height: 40px; + width: 40px; + background-color: #020202; + border-radius: 50%; +} + +/* Blinking */ + +.blinking::after{ + content: " "; + position: absolute; + top: calc(50% - 25px); + left: calc(50% - 25px); + height: 50px; + width: 50px; + border-radius: 50%; + background-color:#fff; + animation: blink 2000ms ease infinite; +} + +.blinking-2::after{ + background-color: transparent; + border: 2px solid white; + transform: scale(0); + animation: blink-2 2000ms ease-out infinite,blink-2a 2s ease-out infinite; + animation-fill-mode: forwards; +} + +.bounce::after{ + content: " "; + position: absolute; + top: calc(50% - 50px); + left: calc(50% - 25px); + height: 50px; + width: 50px; + box-sizing: border-box; + background-image: linear-gradient(to bottom,rgb(255, 255, 255) 60%, rgb(235, 235, 235) 80%, rgb(210, 210, 210)); + border-radius: 50%; + animation: bounce 2s; + animation-iteration-count: infinite; +} + +.ring:after { + content: " "; + display: block; + width: 64px; + height: 64px; + margin: 8px; + border-radius: 50%; + border: 6px solid #fff; + border-color: #fff transparent #fff transparent; + animation: ring 1.2s linear infinite; +} + + +/* Key frames */ + +@keyframes rotate{ + from{ + transform: rotate(0deg); + } + to{ + transform: rotate(360deg); + } +} + +@keyframes blink{ + 0%{ + transform: scale(1); + } + 50%{ + transform: scale(1.5); + } + 100%{ + transform: scale(1); + } +} + +@keyframes blink-2{ + 0%{ + transform: scale(0.2); + } + 100%{ + transform: scale(1.5); + } +} + +@keyframes bounce{ + 0%,100%{ + transform: translateY(0); + height: 50px; + width: 50px; + } + 50%{ + transform: translateY(50px); + height: 45px; + width: 55px; + } +} + +@keyframes ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/css/style.css b/backend_theme_infinito/static/src/css/style.css new file mode 100644 index 000000000..dc47cd50c --- /dev/null +++ b/backend_theme_infinito/static/src/css/style.css @@ -0,0 +1,1460 @@ +:root { + --brand-1: #262a31; + --sub-color-i: #2f353d; + --sub-color-i-2:#3b3d43; + --sub-color-i-3:#3f454f; + --text-color-1:#707277; + --border-color:#e7e9ed; + --main-bg:#f9f9f9; + --white-color:#ffff; + --sub-color: #F5F5F5; + --text-color: #626262; + --sub-color-1: #dc3545; + --sub-color-2: #2250fc; + --sub-color-3: #c52132; + --white-color: #ffffff; + --black-color: #2e2b2b; + --p-color: #484848; + --border-color2: #eeecec; + --border-color: #dad6d6; + + --brand-11: #4F6BF8; + --sub-color: #F5F5F5; + --text-color: #626262; + --sub-color-1: #dc3545; + --sub-color-2: #2250fc; + --sub-color-3: #c52132; + --white-color: #ffffff; + --black-color: #2e2b2b; + --p-color: #484848; + --border-color2: #eeecec; + --border-color: #dad6d6; +} + +.theme_editor *:focus { + outline: 0 !important; +} + +.theme_editor *:hover { + transition: 0.5s; +} + +.theme_editor *:focus { + outline: 0 !important; + box-shadow: none !important; +} + +.theme_editor button:focus { + border: none; + outline: none; + box-shadow: none; +} + +.theme_editor * { + list-style-type: none; + font-family: "Poppins", sans-serif; + font-size: 16px; +} + +.theme_editor *:focus, .theme_editor *:active { + outline: none !important; +} + +html.sr .load-hidden { + visibility: hidden; +} + +.theme_editor *:hover { + transition: 0.8s !important; +} + +.theme_editor *::selection { + color: #f3ebee; + background-color: black; +} + +.theme_editor a, +.theme_editor a:visited { + color: black; + text-decoration: none; +} + +body { + position: relative; + background-color: var(--main-bg) !important; +} + +.affix { + top: 0; + width: 100%; + z-index: 9999 !important; +} + +html { + scroll-behavior: smooth !important; +} + +body { + scroll-behavior: smooth !important; +} + +.main_heading h1 { + color: var(--eco-color-1); + font-size: 24px; + text-transform: capitalize; +} + +.main_heading p { + color: var(--p-color2); + font-size: 14px; +} + +.heading_c { + color: var(--eco-color-1); + font-size: 24px; + font-weight: 700; + text-transform: capitalize; +} + +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +.btn { + position: relative; + display: inline-block; + color: var(--white-color); + border: none; + border-radius: 3px !important; + outline: 0; + font-size: 14px; + font-weight: normal; + text-align: center; + text-transform: capitalize; + cursor: pointer; +} + +.btn-border { + position: relative; + display: inline-block; + border: none; + border-radius: 0; + outline: 0; + padding: 9px 18px; + text-align: center; + background: var(--sub-color-i); +} + +.btn-reset { + position: relative; + display: inline-block; + border: none; + border-radius: 0; + outline: 0; + padding: 9px 18px; + text-align: center; + background: #dc3545 !important; + color: white !important; +} + +.btn-submit { + position: relative; + display: inline-block; + border: none; + border-radius: 0; + outline: 0; + padding: 9px 18px; + text-align: center; + background: green !important; + color: white !important; +} + +.main_header { + background: var(--brand-1); +} + +.main_header .navbar .navbar-brand { + margin-right: 50px; +} + +.main_header .navbar .navbar-nav .nav-item .nav-link { + color: var(--white-color); +} + +.main_header .navbar .navbar-collapse { + justify-content: space-between; +} + +.main_header .navbar .navbar-collapse .user a { + max-width: 50px; + display: block; +} + +.main_header .navbar .navbar-collapse .user a img { + border-radius: 50%; + width: 100%; +} + +/* width */ +::-webkit-scrollbar { + width: 5px; +} + +/* Track */ +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: #888; + border-radius: 0px; +} + +/* Handle on hover */ +::-webkit-scrollbar-thumb:hover { + background: #555; +} + +#hamburger { + background-color: transparent; + border: none; + cursor: pointer; + display: flex; + padding: 0; +} + +#hamburger .line { + fill: none; + stroke: #f1f1f1; + stroke-width: 3; + transition: stroke-dasharray 600ms cubic-bezier(0.4, 0, 0.2, 1), stroke-dashoffset 600ms cubic-bezier(0.4, 0, 0.2, 1); +} + +#hamburger .line1 { + stroke-dasharray: 60 207; + stroke-width: 6; +} + +#hamburger .line2 { + stroke-dasharray: 60 60; + stroke-width: 6; +} + +#hamburger .line3 { + stroke-dasharray: 60 207; + stroke-width: 6; +} + +#hamburger.open .line1 { + stroke-dasharray: 90 207; + stroke-dashoffset: -134; + stroke-width: 6; +} + +#hamburger.open .line2 { + stroke-dasharray: 1 60; + stroke-dashoffset: -30; + stroke-width: 6; +} + +#hamburger.open .line3 { + stroke-dasharray: 90 207; + stroke-dashoffset: -134; + stroke-width: 6; +} + +#theme_editor_sidebar { + position: absolute; + top: 0px; + left: 0px; + width: 330px; + height: 91.4vh; + transition: all 300ms linear; + z-index: 999; +} + +#main { + margin-left: 340px; + transition: all 300ms linear; +} + +.marg_main { + margin-left: 0px !important; + transition: all 300ms linear; +} + +.main_sidebar { + background-color: var(--sub-color-i); +} + +.main_sidebar .toggle-btn { + position: absolute; + right: -14px; + top: 50%; + height: 55px; + width: 15px; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + background-color: var(--sub-color-i); + cursor: pointer; +} + +.main_sidebar .toggle-btn .img_wrapper { + margin-top: 14px; + max-width: 7px; + margin-left: 2px; +} + +.main_sidebar .toggle-btn .img_wrapper img { + width: 100%; +} + +.navbar .navbar_header { + background-color: var(--brand-1); + padding: 6px; + display: flex; + align-items: center; +} + +.navbar .brand_logo { + max-width: 35px; + margin-left: 12px; +} + +.navbar .brand_logo img { + width: 100%; +} + +.navbar .brand_name { + margin-left: 8px; + margin-bottom: -1px; +} + +.navbar .brand_name a { + color: var(--white-color); + font-size: 20px; + font-weight: 600; +} + +.navbar .brand_name a:hover { + text-decoration: none; +} + +.main_sidebar .sidebar_wrapper { + padding: 15px 15px; + height: 85vh; + /* display: block; + background: red;*/ + overflow-y: scroll !important; +} +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties { + margin-bottom: 10px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties p { + margin-bottom: 0; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties p a { + background-size: 15px; + cursor: pointer; + font-size: 18px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .btn-primary_style { + width: 100%; + background-color: var(--brand-1); + text-align: left; + padding: 15px 15px 15px 15px; + font-size: 16px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .btn-primary_style { + color: var(--white-color); +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body { + border-radius: 0; + background-color: var(--sub-color-i-2) !important; + padding: 20px 15px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise h6, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise h6 { + color: var(--white-color); + font-weight: 400; + font-size: 12px; + padding-bottom: 10px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss { + padding-bottom: 20px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss select, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss select { + color: var(--white-color) !important; + background-color: var(--sub-color-i-3) !important; + background-clip: padding-box; + border: 1px solid var(--sub-color-i-3) !important; + border-radius: 0.25rem; + font-size: 12px; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss select option, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss select option { + border: none !important; + width: 90% !important; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .t_align, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .t_align { + display: flex; + padding-left: 0; + background-color: var(--sub-color-i-3) !important; + justify-content: space-around; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .t_align li, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .t_align li { + border: 1px solid transparent; + border-right-color: var(--text-color) !important; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .t_align li a, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .t_align li a { + display: block; + width: 12px; + margin-right: 14px; + padding: 8px 0; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .t_align li a img, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .t_align li a img { + width: 100%; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .t_align :last-child, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .t_align :last-child { + border-right-color: transparent !important; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .bg_color, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .bg_color { + display: flex; + justify-content: space-between; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .bg_color .color_picker input[type="color"], .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .bg_color .color_picker input[type="color"] { + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + background: none; + border: 0; + cursor: pointer; + height: 2em; + padding: 0; + width: 4em; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_slider, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_slider { + display: flex; + justify-content: space-between; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_width, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_width { + margin-top: 00px; + margin-bottom: 15px; + padding-bottom: 15px; + display: flex; + justify-content: space-between; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_width div.sliderContainer, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_width div.sliderContainer { + width: 70%; + text-align: center; + display: flex; + align-items: center; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_width #slider, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_width #slider { + appearance: none; + height: 5px !important; + width: 100%; + border-radius: 10em; + background-color: var(--sub-color-i); + outline: none; + border: none !important; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_width #slider::-webkit-slider-thumb, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_width #slider::-webkit-slider-thumb { + appearance: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: var(--white-color); + cursor: pointer; + border: 3px solid var(--brand-1); +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_width #slider::-moz-range-thumb, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_width #slider::-moz-range-thumb { + width: 22px; + height: 22px; + border-radius: 50%; + background-color: var(--brand-1); + cursor: pointer; + border: 3px solid #f4f4f4; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_width #output, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_width #output { + color: #1d1a1a; + font-size: 16px; + margin-left: 5px; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss input[type="text"], .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss input[type="text"] { + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + background: var(--sub-color-i); + border: 0; + border-radius: 3px; + cursor: pointer; + padding-left: 5px; + color: var(--white-color) !important; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_style, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_style { + display: flex; + padding-left: 0; + background-color: transparent !important; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_style li, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_style li { + text-align: center; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_style li input[type="number"], .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_style li input[type="number"] { + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + background: var(--sub-color-i-3); + border: 1px solid transparent; + border-right-color: var(--text-color) !important; + border-radius: 0px; + cursor: pointer; + height: 2em; + width: 2.5em; + padding-left: 5px; + color: var(--white-color); +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_style li span, .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_style li span { + color: var(--text-color); + font-size: 8px; + text-transform: uppercase; +} + +.main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card .button_cutomise .optss .b_style :last-child input[type="number"], .main_sidebar .sidebar_wrapper .sidebar_content .button_properties .card-body .button_cutomise .optss .b_style :last-child input[type="number"] { + border-right-color: transparent !important; +} + +.main_sidebar .sidebar_footer { + background-color: var(--brand-1); + padding: 15px 15px; + text-align: right; + position: absolute; + bottom: 0; + width: 100%; +} + +.dash_main { + background-color: var(--main-bg); + padding: 100px 0px 100px 20px; +} + +.dash_main .main_h h3 { + font-size: 24px; + font-weight: 600; + color: var(--sub-color-i); +} + +.dash_main .main_h p { + color: var(--text-color-1); + font-size: 14px; +} + +.dash_main .preview_area { + margin-top: 50px; + background-color: var(--white-color); + padding: 30px 20px; + border: 1px solid var(--border-color); + border-radius: 5px; + position: relative; +} + +.dash_main .preview_area .help { + position: absolute; + right: 0; + top: -100px; + display: block; + max-width: 20px; +} + +.dash_main .preview_area .help img { + width: 100%; +} + +.dash_main .preview_area .btn_grp { + display: grid; + grid-template-columns: 1fr 1fr 50%; + grid-row-gap: 15px; +} + +.dash_main .preview_area .btn_grp .btns { + width: fit-content; +} + +.dash_main .b_p { + text-align: right; + padding-top: 15px; + font-size: 12px; + text-transform: uppercase; + color: var(--text-color-1); +} + +.sidebar_left .wrapper { + margin-top: 15px; + height: 100%; +} + +.sidebar_left .wrapper .sub_style { + margin-bottom: 15px; + padding-bottom: 10px; + display: flex; +} + +.sidebar_left .wrapper .sub_style .t_settings { + padding: 6px; + width: 100%; + margin-right: 10px; + color: var(--white-color); + background-color: var(--sub-color-i-3) !important; + background-clip: padding-box; + border: 1px solid var(--sub-color-i-3) !important; + border-radius: 0.25rem; + font-size: 12px; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; +} + +.sidebar_left .wrapper .sub_style .switch { + border-radius: 5px; + position: relative; + display: inline-block; + width: 45px; + margin-bottom: 0; + background-color: var(--sub-color-i-3); +} + +.sidebar_left .wrapper .sub_style .switch input { + opacity: 0; + width: 0; + height: 0; +} + +.sidebar_left .wrapper .sub_style .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--sub-color-i-2); + transition: .4s; + border-radius: 34px; + margin: 7px 4px 7px 3px; +} + +.sidebar_left .wrapper .sub_style .slider:before { + position: absolute; + content: ""; + height: 15px; + width: 13px; + left: -2px; + bottom: 2px; + background-color: white; + transition: .4s; + border-radius: 50%; +} + +.sidebar_left .wrapper .sub_style input:checked + .slider { + background-color: var(--brand-1); +} + +.sidebar_left .wrapper .sub_style input:focus + .slider { + box-shadow: 0 0 1px var(--brand-11); +} + +.sidebar_left .wrapper .sub_style input:checked + .slider:before { + transform: translateX(18px); +} + +.sidebar_left .wrapper .sub_style2 { + margin-bottom: 15px; + display: flex; +} + +.sidebar_left .wrapper .sub_style2 .t_settings { + background-color: var(--white-color); + padding: 6px; + font-size: 12px; + color: var(--brand-11); + width: 67%; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + margin-right: 10px; + border-radius: 5px; +} +/* +.sidebar_left .wrapper .dark_mode { + padding-top: 15px; +} +*/ + +.sidebar_left .wrapper .dark_mode .dark-switch { + display: none; +} + +.sidebar_left .wrapper .dark_mode .dark-schedule { + display: none; +} + +.sidebar_left .wrapper .dark_mode .d_mode { + display: flex; + justify-content: space-between; + align-items: baseline; +} + +.sidebar_left .wrapper .dark_mode .d_mode h6 { + font-size: 12px; + font-weight: normal; + color: var(--brand-11); +} + +.sidebar_left .wrapper .dark_mode .d_mode .switch { + border-radius: 5px; + position: relative; + display: inline-block; + width: 39px; + height: 30px; + box-shadow: 0px 1px 2px 0px rgba(171, 171, 171, 0.61); + margin-bottom: 0; + background-color: white; +} + +.sidebar_left .wrapper .dark_mode .d_mode .switch input { + opacity: 0; + width: 0; + height: 0; +} + +.sidebar_left .wrapper .dark_mode .d_mode .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + transition: .4s; + border-radius: 34px; + margin: 7px 4px 7px 3px; +} + +.sidebar_left .wrapper .dark_mode .d_mode .slider:before { + position: absolute; + content: ""; + height: 15px; + width: 15px; + left: -3px; + bottom: 1.6px; + background-color: white; + transition: .4s; + border-radius: 50%; +} + +.sidebar_left .wrapper .dark_mode .d_mode input:checked + .slider { + background-color: var(--brand-11); +} + +.sidebar_left .wrapper .dark_mode .d_mode input:focus + .slider { + box-shadow: 0 0 1px var(--brand-11); +} + +.sidebar_left .wrapper .dark_mode .d_mode input:checked + .slider:before { + transform: translateX(18px); +} + +.sidebar_left .wrapper .dark_mode .mode { + padding-left: 0; + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 15px; +} + +.sidebar_left .wrapper .dark_mode .mode li { + background-color: var(--sub-color-i-3) !important; + border-radius: 3px; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + padding: 8px; + border: 1px solid var(--sub-color-i-3); + list-style: none; +} + +.sidebar_left .wrapper .dark_mode .mode li:hover { + background-color: var(--black-color) !important; +} + +.sidebar_left .wrapper .dark_mode .mode li:hover a i { + color: var(--white-color); +} + +.sidebar_left .wrapper .dark_mode .mode li:hover a span { + color: var(--white-color); +} + +.sidebar_left .wrapper .dark_mode .mode li a { + display: flex; + align-items: baseline; +} + +.sidebar_left .wrapper .dark_mode .mode li a:hover { + text-decoration: none; +} + +.sidebar_left .wrapper .dark_mode .mode li a i { + color: var(--brand-11); + font-size: 12px; + margin-right: 5px; +} + +.sidebar_left .wrapper .dark_mode .mode li a span { + color: var(--brand-11); + font-size: 11px; +} + +.sidebar_left .wrapper .dark_mode .mode li.active { + background: var(--black-color) !important; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); +} + +.sidebar_left .wrapper .dark_mode .mode li.active a { + display: flex; + align-items: baseline; +} + +.sidebar_left .wrapper .dark_mode .mode li.active a:hover { + text-decoration: none; +} + +.sidebar_left .wrapper .dark_mode .mode li.active a i { + color: var(--white-color); + font-size: 12px; + margin-right: 5px; +} + +.sidebar_left .wrapper .dark_mode .mode li.active a span { + color: var(--white-color); + font-size: 11px; +} + +.sidebar_left .wrapper .dark_mode .on_off { + background-color: var(--sub-color-i-3); + box-shadow: 0px 1px 2px 0px rgba(171, 171, 171, 0.61); + padding: 15px 15px 1px 15px; + border-radius: 5px; + margin-top: 20px; +} + +.sidebar_left .wrapper .dark_mode .on_off ul { + padding-left: 0; + margin-bottom: 0; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li { + margin-bottom: 15px; + justify-content: space-between; + align-items: center; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li .left { + color: var(--brand-11); + font-size: 12px; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li .right span, +.sidebar_left .wrapper .dark_mode .on_off ul li .right i { + color: var(--brand-11); + font-size: 12px; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li .right span { + margin-right: 25px; +} + +::-webkit-scrollbar { + width: 10px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +::-webkit-scrollbar-thumb { + background: #888; + border-radius: 5px; +} + +::-webkit-scrollbar-thumb:hover { + background: #555; +} + +.main_body { + position: relative; +} + +.main_body .dash_main { + padding-top: 70px; + padding-left: 15px; +} + +.top_section { + margin-bottom: 40px; +} + +.top_section .t_wrapper { + width: 100%; +} + +.top_section .t_wrapper img { + width: 100%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(206, 203, 203, 0.61); +} + +.mid_section { + margin-bottom: 40px; +} + +.mid_section .t_wrapper { + width: 100%; +} + +.mid_section .t_wrapper img { + width: 100%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(206, 203, 203, 0.61); +} + +.bottom_section { + margin-bottom: 40px; +} + +.bottom_section .t_wrapper { + width: 100%; +} + +.bottom_section .t_wrapper img { + width: 100%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(206, 203, 203, 0.61); +} + +.js_add_tool { + position: absolute; + right: 10px; + color: var(--white-color); +} +.fa.fa-plus.js_add_tool:hover { + scale: 1.3; + opacity: 0.7; +} + +.sidebar-hider-infinito { + left: -310px !important; +} + +.btn-infinito-reset { + right: 40px; + position: absolute; +} + +.error-message { + padding: 10px; + background-color: #e74c3c; + color: #fff; + font-size: 20px; + width: 600px; + text-align: center; + position: fixed; + top: 80px; + left: -600px; + z-index: 9999; + border-radius: 0 5px 5px 0; + box-shadow: 0px 0px 8px 2px #977b7b; +} + +span.title-infinito { + font-weight: bold; + font-size: 16px; +} + +a.info-infinito { + vertical-align: bottom; + position:relative; /* Anything but static */ + width: 1.5em; + height: 1.5em; + text-indent: -9999em; + display: inline-block; + color: white; + font-weight:bold; + font-size:1em; + line-height:1em; + background-color: #fff; + margin-left: .25em; + -webkit-border-radius:.75em; + -moz-border-radius:.75em; + border-radius:.75em; +} +a.info-infinito:hover { + cursor: hand; + cursor: pointer; +} +a.info-infinito:before { + content:"?"; + position: absolute; + top: .25em; + left:0; + text-indent: 0; + display:block; + width:1.5em; + text-align:center; +} + +.popover-title-infinito { + font-weight:bold; +} + + +label a.info-infinito, +label div.popover.fade.in { + opacity: 0; + -webkit-transition: opacity 0.2s ease; + -moz-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; +} +label:hover a.info, +label:hover div.popover.fade.in { + opacity: 1; +} +.backend_theme_studio_sidebar .btn.item { + height: 40px; + width: 200px; + font-size: 12px; + margin: 0 !important; +} +#theme_editor_sidebar .sidebar_left h6 { + color: var(--white-color); + font-weight: 400; + font-size: 12px; + padding-bottom: 10px; +} +#theme_editor_sidebar .sidebar_left .infinito-form-select { + color: var(--white-color) !important; + background-color: var(--sub-color-i-3) !important; + background-clip: padding-box; + border: 1px solid var(--sub-color-i-3) !important; + border-radius: 0.25rem; + font-size: 12px; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; +} +#theme_editor_sidebar .sidebar_left .infinito-form-select option { + border: none !important; + width: 90% !important; +} +.theme_editor i.fa { + color: #fff !important; +} +.button_properties i.fa { + top: 19px; +} +.infinito-btn-group-nav { + display: block; + height: 50px; + display: flex; + justify-content: space-between; + align-items: center; +} +.btn-reset { + position: relative; + display: inline-block; + border: none; + border-radius: 0; + outline: 0; + padding: 9px 18px; + text-align: center; + background: #dc3545 !important; + color: white !important; +} +.infinito-btn-group-nav .btn-infinito-close { + color: grey; + font-size: 14px; + border: 1px solid grey !important; +} +.infinito-btn-group-nav .btn-infinito-close:hover { + color: #cdcdcd; + border: 1px solid #cdcdcd !important; +} +.infinito-btn-group-nav .btn-infinito-close i.fa { + color: grey !important; +} +.infinito-btn-group-nav .btn-infinito-close .backend_theme_studio_close:hover { + color: #cdcdcd !important; +} +.infinito-btn-group-nav .btn-infinito-close:hover i.fa { + color: #cdcdcd !important; +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/css/style2.css b/backend_theme_infinito/static/src/css/style2.css new file mode 100644 index 000000000..fa1f0ab75 --- /dev/null +++ b/backend_theme_infinito/static/src/css/style2.css @@ -0,0 +1,1198 @@ + +:root { + --brand-1: #4F6BF8; + --sub-color: #F5F5F5; + --text-color: #626262; + --sub-color-1: #dc3545; + --sub-color-2: #2250fc; + --sub-color-3: #c52132; + --white-color: #ffffff; + --black-color: #2e2b2b; + --p-color: #484848; + --border-color2: #eeecec; + --border-color: #dad6d6; +} + +.theme_editor *:hover { + transition: 0.5s; +} + +.theme_editor *:focus { + outline: 0 !important; + box-shadow: none !important; +} + +.theme_editor *button:focus { + border: none; + outline: none; + box-shadow: none; +} + +.theme_editor * { + list-style-type: none; +} + +.theme_editor *:focus, .theme_editor *:active { + outline: none !important; +} + +html.sr .load-hidden { + visibility: hidden; +} + +.theme_editor *:hover { + transition: 0.8s !important; +} + +.theme_editor *::selection { + color: #f3ebee; + background-color: black; +} + +.theme_editor *a, +a:visited { + color: #990000; + text-decoration: none; +} + +body { + position: relative; + overflow: hidden; +} + +.affix { + top: 0; + width: 100%; + z-index: 9999 !important; +} + +html { + scroll-behavior: smooth !important; +} + +body { + scroll-behavior: smooth !important; +} + +.main_heading h1 { + color: var(--eco-color-1); + font-size: 24px; + text-transform: capitalize; +} + +.main_heading p { + color: var(--p-color2); + font-size: 14px; +} + +.heading_c { + color: var(--eco-color-1); + font-size: 24px; + font-weight: 700; + text-transform: capitalize; +} + +html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; +} + +main { + display: block; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +a { + background-color: transparent; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: bolder; +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +img { + border-style: none; +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +details { + display: block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none; +} + +.btn { + position: relative; + display: inline-block; + border: none; + border-radius: 0; + outline: 0; + font-size: 10px; + font-weight: normal; + text-align: center; + text-transform: capitalize; + cursor: pointer; +} + +.btn-primary { + position: relative; + display: inline-block; + color: var(--white-color); + border: none; + border-radius: 0; + outline: 0; + font-size: 10px; + text-align: center; + background: var(--brand-1); +} + +.main_header { + background: var(--brand-1); +} + +.main_header .navbar .navbar-brand { + margin-right: 50px; +} + +.main_header .navbar .navbar-nav .nav-item .nav-link { + color: var(--white-color); +} + +.main_header .navbar .navbar-collapse { + justify-content: space-between; +} + +.main_header .navbar .navbar-collapse .user a { + max-width: 50px; + display: block; +} + +.main_header .navbar .navbar-collapse .user a img { + border-radius: 50%; + width: 100%; +} + +.sidenav { + height: 100%; + width: 0; + position: absolute; + z-index: 1; + top: 0; + left: 0; + background-color: var(--sub-color); + overflow-x: hidden; + transition: 0.5s; + padding-top: 60px; + box-shadow: 0px 4px 11px 0px #888; +} + +.sidenav .wrapper { + padding: 15px 15px; +} + +.sidenav .wrapper .custom h6 { + font-size: 13px; + color: var(--text-color); + font-weight: 400; +} + +.sidenav .wrapper .custom .alignemet { + margin-top: 15px; + padding-left: 0; + display: flex; + background-color: var(--white-color); + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + border-radius: 5px; + padding: 8px 8px; + width: fit-content; +} + +.sidenav .wrapper .custom .alignemet li { + padding-left: 4px; +} + +.sidenav .wrapper .custom .alignemet li a { + display: block; + width: 25px; + padding-right: 10px; +} + +.sidenav .wrapper .custom .alignemet li a img { + width: 100%; + filter: invert(48%) sepia(42%) saturate(7497%) hue-rotate(219deg) brightness(98%) contrast(98%); +} + +.sidenav .wrapper .custom .alignemet li a:hover img { + filter: invert(74%) sepia(11%) saturate(1285%) hue-rotate(173deg) brightness(102%) contrast(94%); +} + +.sidenav .wrapper .custom .text { + margin-top: 15px; + padding-left: 0; + display: flex; + padding-top: 15px; +} + +.sidenav .wrapper .custom .text li { + background-color: var(--white-color); + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + border-radius: 5px; + padding: 6px 0px 6px 7px; + margin-right: 8px; +} + +.sidenav .wrapper .custom .text a { + display: block; + width: 25px; + padding-right: 10px; + color: var(--brand-1); +} + +.sidenav .wrapper .custom .text a:hover { + text-decoration: none; +} + +.sidenav .wrapper .custom .text a img { + width: 100%; + filter: invert(48%) sepia(42%) saturate(7497%) hue-rotate(219deg) brightness(98%) contrast(98%); +} + +.sidenav .wrapper .custom .text a:hover img { + filter: invert(74%) sepia(11%) saturate(1285%) hue-rotate(173deg) brightness(102%) contrast(94%); +} + +.sidenav .wrapper .custom .text a .under_line { + text-decoration: underline; +} + +.sidenav .wrapper .custom .text a .line_thr { + text-decoration: line-through; +} + +.sidenav .wrapper .font { + padding-top: 15px; +} + +.sidenav .wrapper .font .form-select { + width: 100% !important; +} + +.sidenav .wrapper .font .form-select { + background-color: transparent !important; + border: 1px solid !important; + border-color: transparent !important; + border-bottom-color: var(--border-color) !important; + font-size: 12px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 18px; + font-weight: 500; + width: 100%; + border-radius: 0px; + margin-bottom: 20px; +} + +.sidenav .wrapper .font .form-select option { + font-size: 12px; +} + +.sidenav .wrapper .font .form-select:focus { + border-color: #1479c7 !important; + border: 2px solid !important; +} + +.sidenav .wrapper .font_property { + padding-top: 15px; +} + +.sidenav .wrapper .font_property .form-control { + width: 100% !important; +} + +.sidenav .wrapper .font_property .form-control { + background-color: transparent !important; + border: 1px solid !important; + border-color: transparent !important; + border-bottom-color: var(--border-color) !important; + font-size: 12px; + display: flex; + justify-content: space-between; + align-items: center; + font-weight: 500; + width: 100%; + border-radius: 0px; + margin-bottom: 20px; +} + +.sidenav .wrapper .font_property .form-control option { + font-size: 12px; +} + +.sidenav .wrapper .font_property .form-control:focus { + border-color: #1479c7 !important; + border: 2px solid !important; +} + +.sidenav .wrapper .opacity { + margin-top: 20px; + margin-bottom: 15px; + padding-bottom: 15px; +} + +.sidenav .wrapper .opacity div.sliderContainer { + width: 100%; + text-align: center; + display: flex; + align-items: center; +} + +.sidenav .wrapper .opacity #slider { + appearance: none; + height: 5px !important; + width: 100%; + border-radius: 10em; + background-color: var(--brand-1); + outline: none; +} + +.sidenav .wrapper .opacity #slider::-webkit-slider-thumb { + appearance: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: var(--white-color); + cursor: pointer; + border: 3px solid var(--brand-1); +} + +.sidenav .wrapper .opacity #slider::-moz-range-thumb { + width: 22px; + height: 22px; + border-radius: 50%; + background-color: var(--brand-1); + cursor: pointer; + border: 3px solid #f4f4f4; +} + +.sidenav .wrapper .opacity #output { + color: #1d1a1a; + font-size: 16px; + margin-left: 5px; +} + +.sidenav .wrapper .color_picker { + display: flex; + justify-content: space-between; + padding-top: 15px; + align-items: center; +} + +.sidenav .wrapper .color_picker .wrapper_c { + display: flex; + align-items: flex-end; +} + +.sidenav .wrapper .color_picker .wrapper_c .ssd { + margin-left: 20px; +} + +.sidenav .wrapper .color_picker input[type="color"].c_box { + border-radius: 5; + height: 30px; + width: 85px; + border: none; + outline: none; + -webkit-appearance: none; +} + +.sidenav .wrapper .color_picker input[type="color"].c_box::-moz-color-swatch { + border: none; + border-radius: 10px; + padding: 0; +} +.sidenav .wrapper .color_picker input[type="color"].c_box::-moz-color-swatch-wrapper { + border: none; + border-radius: 10px; + padding: 0; +} + +.sidenav .wrapper .color_picker input[type="color"].c_box::-moz-color-swatch { + border: none; + border-radius: 100%; +} + +.sidenav .wrapper .color_picker input[type="color"].c_box::-webkit-color-swatch-wrapper { + padding: 0; +} + +.sidenav .wrapper .color_picker input[type="color"].c_box::-webkit-color-swatch { + border: none; + border-radius: 5px; +} + +.sidenav .wrapper .color_picker .cc { + font-size: 14px; + color: var(--text-color); +} + +.sidenav .wrapper .color_picker .c_picker { + max-width: 16px; + display: block; +} + +.sidenav .wrapper .color_picker .c_picker img { + width: 100%; +} + +.sidenav .wrapper .bord { + margin-top: 20px; + margin-bottom: 15px; + padding-bottom: 15px; + display: flex; + justify-content: space-between; +} + +.sidenav .wrapper .bord .b_example { + background-color: #ffffff; + border: 1px solid #b8b8b8; + border-radius: 5px; + width: 20%; + height: 25px; + display: block; +} + +.sidenav .wrapper .bord div.sliderContainer2 { + width: 70%; + text-align: center; + display: flex; + align-items: center; +} + +.sidenav .wrapper .bord #slider2 { + appearance: none; + height: 5px !important; + width: 100%; + border-radius: 10em; + background-color: var(--brand-1); + outline: none; +} + +.sidenav .wrapper .bord #slider2::-webkit-slider-thumb { + appearance: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: var(--white-color); + cursor: pointer; + border: 3px solid var(--brand-1); +} + +.sidenav .wrapper .bord #slider2::-moz-range-thumb { + width: 22px; + height: 22px; + border-radius: 50%; + background-color: var(--brand-1); + cursor: pointer; + border: 3px solid #f4f4f4; +} + +.sidenav .wrapper .bord #output2 { + color: #1d1a1a; + font-size: 16px; + margin-left: 5px; +} + +.sidenav .wrapper .b_shadow { + margin-top: 20px; + margin-bottom: 15px; + padding-bottom: 15px; +} + +.sidenav .wrapper .b_shadow div.sliderContainer3 { + width: 100%; + text-align: center; + display: flex; + align-items: center; +} + +.sidenav .wrapper .b_shadow #slider3 { + appearance: none; + height: 5px !important; + width: 100%; + border-radius: 10em; + background-color: var(--brand-1); + outline: none; +} + +.sidenav .wrapper .b_shadow #slider3::-webkit-slider-thumb { + appearance: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: var(--white-color); + cursor: pointer; + border: 3px solid var(--brand-1); +} + +.sidenav .wrapper .b_shadow #slider3::-moz-range-thumb { + width: 22px; + height: 22px; + border-radius: 50%; + background-color: var(--brand-1); + cursor: pointer; + border: 3px solid #f4f4f4; +} + +.sidenav .wrapper .b_shadow #output3 { + color: #1d1a1a; + font-size: 16px; + margin-left: 5px; +} + +.sidenav .wrapper .c_padding { + display: flex; + justify-content: flex-start; + padding-left: 0; + align-items: baseline; + margin-top: 15px; +} + +.sidenav .wrapper .c_padding li { + background-color: var(--white-color); + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + border-radius: 5px; + padding: 6px 6px; + margin-right: 8px; + font-size: 11px; + color: var(--text-color); +} + +.sidenav .wrapper .c_padding span { + font-size: 11px; + color: var(--text-color); + margin-left: 5px; +} + +.sidenav .wrapper .b_img { + padding-bottom: 10px; +} + +.sidenav .wrapper .b_img label { + color: var(--text-color); + white-space: nowrap; + font-size: 12px; +} + +.sidenav .wrapper .b_img .file-input { + display: inline-block; + text-align: left; + background: var(--brand-1); + padding: 4px; + width: 45%; + position: relative; + border-radius: 3px; +} + +.sidenav .wrapper .b_img .file-input > [type='file'] { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + z-index: 10; + cursor: pointer; +} + +.sidenav .wrapper .b_img .file-input > .label { + color: var(--white-color); + white-space: nowrap; + font-size: 12px; + margin-left: 6px; +} + +.sidenav .wrapper .b_img .file-input.-chosen > .label { + opacity: 1; +} + +.sidenav .wrapper .overlay { + margin-top: 20px; + margin-bottom: 15px; + padding-bottom: 15px; +} + +.sidenav .wrapper .overlay div.sliderContainer4 { + width: 100%; + text-align: center; + display: flex; + align-items: center; +} + +.sidenav .wrapper .overlay #slider4 { + appearance: none; + height: 5px !important; + width: 100%; + border-radius: 10em; + background-color: var(--brand-1); + outline: none; +} + +.sidenav .wrapper .overlay #slider4::-webkit-slider-thumb { + appearance: none; + width: 22px; + height: 22px; + border-radius: 50%; + background: var(--white-color); + cursor: pointer; + border: 3px solid var(--brand-1); +} + +.sidenav .wrapper .overlay #slider4::-moz-range-thumb { + width: 22px; + height: 22px; + border-radius: 50%; + background-color: var(--brand-1); + cursor: pointer; + border: 3px solid #f4f4f4; +} + +.sidenav .wrapper .overlay #output4 { + color: #1d1a1a; + font-size: 16px; + margin-left: 5px; +} + +.sidenav .wrapper .overlay .b_wrapper { + justify-content: space-around; +} + +.sidenav .closebtn { + position: absolute; + top: 0; + right: 25px; + font-size: 36px; + margin-left: 50px; + padding: 8px 8px 8px 32px; + text-decoration: none; + font-size: 25px; + color: #818181; + display: block; + transition: 0.3s; +} + +.sidenav .closebtn:hover { + color: #f1f1f1; +} + +#main { + transition: margin-left .5s; + padding: 16px; +} + +@media screen and (max-height: 450px) { + .sidenav { + padding-top: 15px; + } + .sidenav a { + font-size: 18px; + } +} + +.sidebar_left { + background-color: var(--sub-color); + height: 97%; + padding: 15px 15px; +} + +.sidebar_left .wrapper { + margin-top: 15px; + height: 100%; +} + +.sidebar_left .wrapper .sub_style { + margin-bottom: 15px; + padding-bottom: 10px; + display: flex; +} + +.sidebar_left .wrapper .sub_style .t_settings { + background-color: var(--white-color); + padding: 6px; + font-size: 12px; + color: var(--brand-1); + width: 100%; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + margin-right: 10px; + border-radius: 5px; +} + +.sidebar_left .wrapper .sub_style .switch { + border-radius: 5px; + position: relative; + display: inline-block; + width: 45px; + box-shadow: 0px 1px 2px 0px rgba(171, 171, 171, 0.61); + margin-bottom: 0; + background-color: white; +} + +.sidebar_left .wrapper .sub_style .switch input { + opacity: 0; + width: 0; + height: 0; +} + +.sidebar_left .wrapper .sub_style .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + transition: .4s; + border-radius: 34px; + margin: 7px 4px 7px 3px; +} + +.sidebar_left .wrapper .sub_style .slider:before { + position: absolute; + content: ""; + height: 14px; + width: 13px; + left: 0px; + bottom: 1px; + background-color: white; + transition: .4s; + border-radius: 50%; +} + +.sidebar_left .wrapper .sub_style input:checked + .slider { + background-color: var(--brand-1); +} + +.sidebar_left .wrapper .sub_style input:focus + .slider { + box-shadow: 0 0 1px var(--brand-1); +} + +.sidebar_left .wrapper .sub_style input:checked + .slider:before { + transform: translateX(18px); +} + +.sidebar_left .wrapper .sub_style2 { + margin-bottom: 15px; + display: flex; +} + +.sidebar_left .wrapper .sub_style2 .t_settings { + background-color: var(--white-color); + padding: 6px; + font-size: 12px; + color: var(--brand-1); + width: 67%; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); + margin-right: 10px; + border-radius: 5px; +} + +.sidebar_left .wrapper .dark_mode { + padding-top: 15px; +} + +.sidebar_left .wrapper .dark_mode .dark-switch { + display: none; +} + +.sidebar_left .wrapper .dark_mode .dark-schedule { + display: none; +} + +.sidebar_left .wrapper .dark_mode .d_mode { + display: flex; + justify-content: space-between; + align-items: baseline; +} + +.sidebar_left .wrapper .dark_mode .d_mode h6 { + font-size: 12px; + font-weight: normal; + color: var(--brand-1); +} + +.sidebar_left .wrapper .dark_mode .d_mode .switch { + border-radius: 5px; + position: relative; + display: inline-block; + width: 39px; + height: 30px; + box-shadow: 0px 1px 2px 0px rgba(171, 171, 171, 0.61); + margin-bottom: 0; + background-color: white; +} + +.sidebar_left .wrapper .dark_mode .d_mode .switch input { + opacity: 0; + width: 0; + height: 0; +} + +.sidebar_left .wrapper .dark_mode .d_mode .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + transition: .4s; + border-radius: 34px; + margin: 7px 4px 7px 3px; +} + +.sidebar_left .wrapper .dark_mode .d_mode .slider:before { + position: absolute; + content: ""; + height: 14px; + width: 13px; + left: -0px; + bottom: 1px; + background-color: white; + transition: .4s; + border-radius: 50%; +} + +.sidebar_left .wrapper .dark_mode .d_mode input:checked + .slider { + background-color: var(--brand-1); +} + +.sidebar_left .wrapper .dark_mode .d_mode input:focus + .slider { + box-shadow: 0 0 1px var(--brand-1); +} + +.sidebar_left .wrapper .dark_mode .d_mode input:checked + .slider:before { + transform: translateX(18px); +} + +.sidebar_left .wrapper .dark_mode .mode { + padding-left: 0; + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 15px; +} + +.sidebar_left .wrapper .dark_mode .mode li { + background-color: var(--white-color) !important; + padding: 2px 8px; + padding: 5px 12px; + border-radius: 3px; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); +} + +.sidebar_left .wrapper .dark_mode .mode li:hover { + background-color: var(--black-color) !important; +} + +.sidebar_left .wrapper .dark_mode .mode li:hover a i { + color: var(--white-color); +} + +.sidebar_left .wrapper .dark_mode .mode li:hover a span { + color: var(--white-color); +} + +.sidebar_left .wrapper .dark_mode .mode li a { + display: flex; + align-items: baseline; +} + +.sidebar_left .wrapper .dark_mode .mode li a:hover { + text-decoration: none; +} + +.sidebar_left .wrapper .dark_mode .mode li a i { + color: var(--brand-1); + font-size: 12px; + margin-right: 5px; +} + +.sidebar_left .wrapper .dark_mode .mode li a span { + color: var(--brand-1); + font-size: 11px; +} + +.sidebar_left .wrapper .dark_mode .mode li.active { + background: var(--black-color) !important; + box-shadow: 0px 2px 5px -3px rgba(0, 0, 0, 0.75); +} + +.sidebar_left .wrapper .dark_mode .mode li.active a { + display: flex; + align-items: baseline; +} + +.sidebar_left .wrapper .dark_mode .mode li.active a:hover { + text-decoration: none; +} + +.sidebar_left .wrapper .dark_mode .mode li.active a i { + color: var(--white-color); + font-size: 12px; + margin-right: 5px; +} + +.sidebar_left .wrapper .dark_mode .mode li.active a span { + color: var(--white-color); + font-size: 11px; +} + +.sidebar_left .wrapper .dark_mode .on_off { + background-color: var(--white-color); + box-shadow: 0px 1px 2px 0px rgba(171, 171, 171, 0.61); + padding: 15px 15px 1px 15px; + border-radius: 5px; + margin-top: 20px; +} + +.sidebar_left .wrapper .dark_mode .on_off ul { + padding-left: 0; + margin-bottom: 0; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li { + margin-bottom: 15px; + justify-content: space-between; + align-items: center; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li .left { + color: var(--brand-1); + font-size: 12px; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li .right span, +.sidebar_left .wrapper .dark_mode .on_off ul li .right i { + color: var(--brand-1); + font-size: 12px; +} + +.sidebar_left .wrapper .dark_mode .on_off ul li .right span { + margin-right: 25px; +} + +::-webkit-scrollbar { + width: 10px; +} + +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +::-webkit-scrollbar-thumb { + background: #888; + border-radius: 5px; +} + +::-webkit-scrollbar-thumb:hover { + background: #555; +} + +.main_body { + position: relative; +} + +.main_body .dash_main { + padding-top: 70px; + padding-left: 15px; +} + +.top_section { + margin-bottom: 40px; +} + +.top_section .t_wrapper { + width: 100%; +} + +.top_section .t_wrapper img { + width: 100%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(206, 203, 203, 0.61); +} + +.mid_section { + margin-bottom: 40px; +} + +.mid_section .t_wrapper { + width: 100%; +} + +.mid_section .t_wrapper img { + width: 100%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(206, 203, 203, 0.61); +} + +.bottom_section { + margin-bottom: 40px; +} + +.bottom_section .t_wrapper { + width: 100%; +} + +.bottom_section .t_wrapper img { + width: 100%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(206, 203, 203, 0.61); +} + diff --git a/backend_theme_infinito/static/src/img/alignment/align-objects.svg b/backend_theme_infinito/static/src/img/alignment/align-objects.svg new file mode 100644 index 000000000..bd447bb7e --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/align-objects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/alignment/align-right.svg b/backend_theme_infinito/static/src/img/alignment/align-right.svg new file mode 100644 index 000000000..59a7b5dec --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/align-right.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/alignment/center-align.svg b/backend_theme_infinito/static/src/img/alignment/center-align.svg new file mode 100644 index 000000000..3104ce0c2 --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/center-align.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/alignment/justification (1).svg b/backend_theme_infinito/static/src/img/alignment/justification (1).svg new file mode 100644 index 000000000..b97363475 --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/justification (1).svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/alignment/left-align.svg b/backend_theme_infinito/static/src/img/alignment/left-align.svg new file mode 100644 index 000000000..34cb06aee --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/left-align.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/alignment/right-align.svg b/backend_theme_infinito/static/src/img/alignment/right-align.svg new file mode 100644 index 000000000..3de00f62a --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/right-align.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/alignment/top-alignment.svg b/backend_theme_infinito/static/src/img/alignment/top-alignment.svg new file mode 100644 index 000000000..18669be32 --- /dev/null +++ b/backend_theme_infinito/static/src/img/alignment/top-alignment.svg @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/brand_icon/infinity.svg b/backend_theme_infinito/static/src/img/brand_icon/infinity.svg new file mode 100644 index 000000000..d1b9fab67 --- /dev/null +++ b/backend_theme_infinito/static/src/img/brand_icon/infinity.svg @@ -0,0 +1,2 @@ + + diff --git a/backend_theme_infinito/static/src/img/brightness.svg b/backend_theme_infinito/static/src/img/brightness.svg new file mode 100644 index 000000000..3531b7b01 --- /dev/null +++ b/backend_theme_infinito/static/src/img/brightness.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/center-align.png b/backend_theme_infinito/static/src/img/center-align.png new file mode 100644 index 000000000..ad53e1385 Binary files /dev/null and b/backend_theme_infinito/static/src/img/center-align.png differ diff --git a/backend_theme_infinito/static/src/img/centered-text-of-alignment-button.png b/backend_theme_infinito/static/src/img/centered-text-of-alignment-button.png new file mode 100644 index 000000000..e69de29bb diff --git a/backend_theme_infinito/static/src/img/close.png b/backend_theme_infinito/static/src/img/close.png new file mode 100644 index 000000000..c6ea25feb Binary files /dev/null and b/backend_theme_infinito/static/src/img/close.png differ diff --git a/backend_theme_infinito/static/src/img/color_picker/color-picker.png b/backend_theme_infinito/static/src/img/color_picker/color-picker.png new file mode 100644 index 000000000..ac64de098 Binary files /dev/null and b/backend_theme_infinito/static/src/img/color_picker/color-picker.png differ diff --git a/backend_theme_infinito/static/src/img/downward-arrow.svg b/backend_theme_infinito/static/src/img/downward-arrow.svg new file mode 100644 index 000000000..1f950ddbf --- /dev/null +++ b/backend_theme_infinito/static/src/img/downward-arrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/eyedropper.svg b/backend_theme_infinito/static/src/img/eyedropper.svg new file mode 100644 index 000000000..bad99d8e4 --- /dev/null +++ b/backend_theme_infinito/static/src/img/eyedropper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/gear.svg b/backend_theme_infinito/static/src/img/gear.svg new file mode 100644 index 000000000..aa9f9a63a --- /dev/null +++ b/backend_theme_infinito/static/src/img/gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/icons/apps.png b/backend_theme_infinito/static/src/img/icons/apps.png new file mode 100644 index 000000000..4849d275d Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/apps.png differ diff --git a/backend_theme_infinito/static/src/img/icons/attendance.png b/backend_theme_infinito/static/src/img/icons/attendance.png new file mode 100644 index 000000000..01c048257 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/attendance.png differ diff --git a/backend_theme_infinito/static/src/img/icons/calendar.png b/backend_theme_infinito/static/src/img/icons/calendar.png new file mode 100644 index 000000000..92d8584ce Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/calendar.png differ diff --git a/backend_theme_infinito/static/src/img/icons/contact.png b/backend_theme_infinito/static/src/img/icons/contact.png new file mode 100644 index 000000000..c8b3c7ed7 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/contact.png differ diff --git a/backend_theme_infinito/static/src/img/icons/crm.png b/backend_theme_infinito/static/src/img/icons/crm.png new file mode 100644 index 000000000..a978c8a6c Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/crm.png differ diff --git a/backend_theme_infinito/static/src/img/icons/dashboard.png b/backend_theme_infinito/static/src/img/icons/dashboard.png new file mode 100644 index 000000000..f26675566 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/dashboard.png differ diff --git a/backend_theme_infinito/static/src/img/icons/discuss.png b/backend_theme_infinito/static/src/img/icons/discuss.png new file mode 100644 index 000000000..c0082170a Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/discuss.png differ diff --git a/backend_theme_infinito/static/src/img/icons/elearning.png b/backend_theme_infinito/static/src/img/icons/elearning.png new file mode 100644 index 000000000..3c63b00af Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/elearning.png differ diff --git a/backend_theme_infinito/static/src/img/icons/employees.png b/backend_theme_infinito/static/src/img/icons/employees.png new file mode 100644 index 000000000..42a02ae12 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/employees.png differ diff --git a/backend_theme_infinito/static/src/img/icons/events.png b/backend_theme_infinito/static/src/img/icons/events.png new file mode 100644 index 000000000..76ba6b415 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/events.png differ diff --git a/backend_theme_infinito/static/src/img/icons/expense.png b/backend_theme_infinito/static/src/img/icons/expense.png new file mode 100644 index 000000000..7a7c4ddde Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/expense.png differ diff --git a/backend_theme_infinito/static/src/img/icons/fleet.png b/backend_theme_infinito/static/src/img/icons/fleet.png new file mode 100644 index 000000000..0f19ed974 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/fleet.png differ diff --git a/backend_theme_infinito/static/src/img/icons/inventory.png b/backend_theme_infinito/static/src/img/icons/inventory.png new file mode 100644 index 000000000..b282e1433 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/inventory.png differ diff --git a/backend_theme_infinito/static/src/img/icons/invoice.png b/backend_theme_infinito/static/src/img/icons/invoice.png new file mode 100644 index 000000000..31d31174f Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/invoice.png differ diff --git a/backend_theme_infinito/static/src/img/icons/link-tracker.png b/backend_theme_infinito/static/src/img/icons/link-tracker.png new file mode 100644 index 000000000..b19c8f098 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/link-tracker.png differ diff --git a/backend_theme_infinito/static/src/img/icons/live-chat.png b/backend_theme_infinito/static/src/img/icons/live-chat.png new file mode 100644 index 000000000..50d203d7e Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/live-chat.png differ diff --git a/backend_theme_infinito/static/src/img/icons/lunch.png b/backend_theme_infinito/static/src/img/icons/lunch.png new file mode 100644 index 000000000..ed566620d Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/lunch.png differ diff --git a/backend_theme_infinito/static/src/img/icons/maintenance.png b/backend_theme_infinito/static/src/img/icons/maintenance.png new file mode 100644 index 000000000..7527cb9b3 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/maintenance.png differ diff --git a/backend_theme_infinito/static/src/img/icons/manufacturing.png b/backend_theme_infinito/static/src/img/icons/manufacturing.png new file mode 100644 index 000000000..dd2034340 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/manufacturing.png differ diff --git a/backend_theme_infinito/static/src/img/icons/marketing.png b/backend_theme_infinito/static/src/img/icons/marketing.png new file mode 100644 index 000000000..1f9a59445 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/marketing.png differ diff --git a/backend_theme_infinito/static/src/img/icons/members.png b/backend_theme_infinito/static/src/img/icons/members.png new file mode 100644 index 000000000..552e434c1 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/members.png differ diff --git a/backend_theme_infinito/static/src/img/icons/notes.png b/backend_theme_infinito/static/src/img/icons/notes.png new file mode 100644 index 000000000..a34d1f55b Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/notes.png differ diff --git a/backend_theme_infinito/static/src/img/icons/pos.png b/backend_theme_infinito/static/src/img/icons/pos.png new file mode 100644 index 000000000..cb51b0093 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/pos.png differ diff --git a/backend_theme_infinito/static/src/img/icons/project.png b/backend_theme_infinito/static/src/img/icons/project.png new file mode 100644 index 000000000..f0f49f302 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/project.png differ diff --git a/backend_theme_infinito/static/src/img/icons/purchase.png b/backend_theme_infinito/static/src/img/icons/purchase.png new file mode 100644 index 000000000..9cc3a7b69 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/purchase.png differ diff --git a/backend_theme_infinito/static/src/img/icons/recruitment.png b/backend_theme_infinito/static/src/img/icons/recruitment.png new file mode 100644 index 000000000..5419baba2 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/recruitment.png differ diff --git a/backend_theme_infinito/static/src/img/icons/repairs.png b/backend_theme_infinito/static/src/img/icons/repairs.png new file mode 100644 index 000000000..09f0f5d3b Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/repairs.png differ diff --git a/backend_theme_infinito/static/src/img/icons/sales.png b/backend_theme_infinito/static/src/img/icons/sales.png new file mode 100644 index 000000000..04db37295 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/sales.png differ diff --git a/backend_theme_infinito/static/src/img/icons/settings.png b/backend_theme_infinito/static/src/img/icons/settings.png new file mode 100644 index 000000000..b086e0d16 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/settings.png differ diff --git a/backend_theme_infinito/static/src/img/icons/sms-marketing.png b/backend_theme_infinito/static/src/img/icons/sms-marketing.png new file mode 100644 index 000000000..b52e93a99 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/sms-marketing.png differ diff --git a/backend_theme_infinito/static/src/img/icons/surveys.png b/backend_theme_infinito/static/src/img/icons/surveys.png new file mode 100644 index 000000000..60c314376 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/surveys.png differ diff --git a/backend_theme_infinito/static/src/img/icons/time-off.png b/backend_theme_infinito/static/src/img/icons/time-off.png new file mode 100644 index 000000000..86868a927 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/time-off.png differ diff --git a/backend_theme_infinito/static/src/img/icons/timesheets.png b/backend_theme_infinito/static/src/img/icons/timesheets.png new file mode 100644 index 000000000..159812a00 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/timesheets.png differ diff --git a/backend_theme_infinito/static/src/img/icons/website.png b/backend_theme_infinito/static/src/img/icons/website.png new file mode 100644 index 000000000..20f097b47 Binary files /dev/null and b/backend_theme_infinito/static/src/img/icons/website.png differ diff --git a/backend_theme_infinito/static/src/img/infinito/1.svg b/backend_theme_infinito/static/src/img/infinito/1.svg new file mode 100644 index 000000000..5d71c936f --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/2.svg b/backend_theme_infinito/static/src/img/infinito/2.svg new file mode 100644 index 000000000..54b8bc198 --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/2.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/3.svg b/backend_theme_infinito/static/src/img/infinito/3.svg new file mode 100644 index 000000000..e6cb1b82f --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/3.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/4.svg b/backend_theme_infinito/static/src/img/infinito/4.svg new file mode 100644 index 000000000..c8350d2b4 --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/4.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/align-center.svg b/backend_theme_infinito/static/src/img/infinito/align-center.svg new file mode 100644 index 000000000..63df2e9ce --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/align-center.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/align-left.svg b/backend_theme_infinito/static/src/img/infinito/align-left.svg new file mode 100644 index 000000000..980d9208f --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/align-left.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/align-right.svg b/backend_theme_infinito/static/src/img/infinito/align-right.svg new file mode 100644 index 000000000..34625cb72 --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/align-right.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/arrow,-direction,-down,-navigate.svg b/backend_theme_infinito/static/src/img/infinito/arrow,-direction,-down,-navigate.svg new file mode 100644 index 000000000..ea2731391 --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/arrow,-direction,-down,-navigate.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow (1).png b/backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow (1).png new file mode 100644 index 000000000..630653284 Binary files /dev/null and b/backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow (1).png differ diff --git a/backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow.png b/backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow.png new file mode 100644 index 000000000..d649bb263 Binary files /dev/null and b/backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow.png differ diff --git a/backend_theme_infinito/static/src/img/infinito/help.svg b/backend_theme_infinito/static/src/img/infinito/help.svg new file mode 100644 index 000000000..b45f6002b --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/help.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/backend_theme_infinito/static/src/img/infinito/link.svg b/backend_theme_infinito/static/src/img/infinito/link.svg new file mode 100644 index 000000000..02570c071 --- /dev/null +++ b/backend_theme_infinito/static/src/img/infinito/link.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/backend_theme_infinito/static/src/img/justification.png b/backend_theme_infinito/static/src/img/justification.png new file mode 100644 index 000000000..cec3529cc Binary files /dev/null and b/backend_theme_infinito/static/src/img/justification.png differ diff --git a/backend_theme_infinito/static/src/img/justification.svg b/backend_theme_infinito/static/src/img/justification.svg new file mode 100644 index 000000000..3843e3f2f --- /dev/null +++ b/backend_theme_infinito/static/src/img/justification.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/landing_page/computer.svg b/backend_theme_infinito/static/src/img/landing_page/computer.svg new file mode 100644 index 000000000..6aec62df3 --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/computer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/landing_page/discuss.svg b/backend_theme_infinito/static/src/img/landing_page/discuss.svg new file mode 100644 index 000000000..65fae882e --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/discuss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/landing_page/file-paper.svg b/backend_theme_infinito/static/src/img/landing_page/file-paper.svg new file mode 100644 index 000000000..07e82a911 --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/file-paper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/landing_page/group.svg b/backend_theme_infinito/static/src/img/landing_page/group.svg new file mode 100644 index 000000000..4fe672fc7 --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/landing_page/hammer.svg b/backend_theme_infinito/static/src/img/landing_page/hammer.svg new file mode 100644 index 000000000..0dfedff62 --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/hammer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/landing_page/infinito_icons.zip b/backend_theme_infinito/static/src/img/landing_page/infinito_icons.zip new file mode 100644 index 000000000..a3dd6a22e Binary files /dev/null and b/backend_theme_infinito/static/src/img/landing_page/infinito_icons.zip differ diff --git a/backend_theme_infinito/static/src/img/landing_page/photo.jpg b/backend_theme_infinito/static/src/img/landing_page/photo.jpg new file mode 100644 index 000000000..b196096f3 Binary files /dev/null and b/backend_theme_infinito/static/src/img/landing_page/photo.jpg differ diff --git a/backend_theme_infinito/static/src/img/landing_page/search.svg b/backend_theme_infinito/static/src/img/landing_page/search.svg new file mode 100644 index 000000000..f68c79534 --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/landing_page/time.svg b/backend_theme_infinito/static/src/img/landing_page/time.svg new file mode 100644 index 000000000..41fcab52c --- /dev/null +++ b/backend_theme_infinito/static/src/img/landing_page/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/left-align.png b/backend_theme_infinito/static/src/img/left-align.png new file mode 100644 index 000000000..55bf43b53 Binary files /dev/null and b/backend_theme_infinito/static/src/img/left-align.png differ diff --git a/backend_theme_infinito/static/src/img/left-text-alignment-option.png b/backend_theme_infinito/static/src/img/left-text-alignment-option.png new file mode 100644 index 000000000..57dcbd389 Binary files /dev/null and b/backend_theme_infinito/static/src/img/left-text-alignment-option.png differ diff --git a/backend_theme_infinito/static/src/img/menu.png b/backend_theme_infinito/static/src/img/menu.png new file mode 100644 index 000000000..8ff887921 Binary files /dev/null and b/backend_theme_infinito/static/src/img/menu.png differ diff --git a/backend_theme_infinito/static/src/img/navbar/menu (1).png b/backend_theme_infinito/static/src/img/navbar/menu (1).png new file mode 100644 index 000000000..25fe32fe3 Binary files /dev/null and b/backend_theme_infinito/static/src/img/navbar/menu (1).png differ diff --git a/backend_theme_infinito/static/src/img/night-mode.svg b/backend_theme_infinito/static/src/img/night-mode.svg new file mode 100644 index 000000000..b9fe13e24 --- /dev/null +++ b/backend_theme_infinito/static/src/img/night-mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/plus.svg b/backend_theme_infinito/static/src/img/plus.svg new file mode 100644 index 000000000..75c5a1e48 --- /dev/null +++ b/backend_theme_infinito/static/src/img/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/right-align (1).png b/backend_theme_infinito/static/src/img/right-align (1).png new file mode 100644 index 000000000..23be7e5d6 Binary files /dev/null and b/backend_theme_infinito/static/src/img/right-align (1).png differ diff --git a/backend_theme_infinito/static/src/img/right-align.png b/backend_theme_infinito/static/src/img/right-align.png new file mode 100644 index 000000000..f24e9910b Binary files /dev/null and b/backend_theme_infinito/static/src/img/right-align.png differ diff --git a/backend_theme_infinito/static/src/img/right-arrow.svg b/backend_theme_infinito/static/src/img/right-arrow.svg new file mode 100644 index 000000000..c3e84a23c --- /dev/null +++ b/backend_theme_infinito/static/src/img/right-arrow.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/right-text-alignment.png b/backend_theme_infinito/static/src/img/right-text-alignment.png new file mode 100644 index 000000000..a057cfcae Binary files /dev/null and b/backend_theme_infinito/static/src/img/right-text-alignment.png differ diff --git a/backend_theme_infinito/static/src/img/schedule-button.svg b/backend_theme_infinito/static/src/img/schedule-button.svg new file mode 100644 index 000000000..017a5ace6 --- /dev/null +++ b/backend_theme_infinito/static/src/img/schedule-button.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend_theme_infinito/static/src/img/section_bg/Dummy_bg.jpg b/backend_theme_infinito/static/src/img/section_bg/Dummy_bg.jpg new file mode 100644 index 000000000..e653b26e5 Binary files /dev/null and b/backend_theme_infinito/static/src/img/section_bg/Dummy_bg.jpg differ diff --git a/backend_theme_infinito/static/src/img/toggle.svg b/backend_theme_infinito/static/src/img/toggle.svg new file mode 100644 index 000000000..961651a55 --- /dev/null +++ b/backend_theme_infinito/static/src/img/toggle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/top-alignment (1).svg b/backend_theme_infinito/static/src/img/top-alignment (1).svg new file mode 100644 index 000000000..5190073f3 --- /dev/null +++ b/backend_theme_infinito/static/src/img/top-alignment (1).svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/img/ui, 12.20.05 pm (2).xd b/backend_theme_infinito/static/src/img/ui, 12.20.05 pm (2).xd new file mode 100644 index 000000000..1504c489b Binary files /dev/null and b/backend_theme_infinito/static/src/img/ui, 12.20.05 pm (2).xd differ diff --git a/backend_theme_infinito/static/src/img/user/user.jpg b/backend_theme_infinito/static/src/img/user/user.jpg new file mode 100644 index 000000000..c18152428 Binary files /dev/null and b/backend_theme_infinito/static/src/img/user/user.jpg differ diff --git a/backend_theme_infinito/static/src/img/user/user.png b/backend_theme_infinito/static/src/img/user/user.png new file mode 100644 index 000000000..f54386b7a Binary files /dev/null and b/backend_theme_infinito/static/src/img/user/user.png differ diff --git a/backend_theme_infinito/static/src/js/AdvancedFeautres.js b/backend_theme_infinito/static/src/js/AdvancedFeautres.js new file mode 100644 index 000000000..f5b97cafe --- /dev/null +++ b/backend_theme_infinito/static/src/js/AdvancedFeautres.js @@ -0,0 +1,294 @@ +odoo.define('backend_theme_infinito.AdvancedFeatures', function (require) { + "use strict"; + const { mount} = owl; + + var Widget = require('backend_theme_infinito.ThemeStudioWidget'); + var TimePicker = require('backend_theme_infinito.timepicker'); + var ajax = require('web.ajax'); + var session = require('web.session'); + var AdvancedFeatures = Widget.extend({ + template: 'theme_editor_sidebar_advanced', + events: { + 'click .close_advanced': '_Close', + 'click .js_save_changes': '_SaveChanges', + 'change #navbarDarkToggler': '_OnChangeDark', + 'click .mode li': 'onChangeDarkMode', + 'click .schedule-input': 'onClickSchedule', + 'change #loader': 'onLoaderChange' + }, + current_tools: [], + init: function (parent, type) { + this._super.apply(this, arguments); + this.parent = parent; + this.sidebar_width = '330px'; + this.mode = session.infinitoDarkMode || 'all'; + this.darkStart = session.infinitoDarkStart || '19:00'; + this.darkEnd = session.infinitoDarkEnd || '5:00'; + this.darkStartFloat = this.timeToFloat(this.darkStart); + this.darkEndFloat = this.timeToFloat(this.darkEnd); + this.type = type; + if(this.type == 'user'){ + this.appendTo(document.body) + } + this.loaders = ['default', 'ring', 'rotating', 'blinking', 'bounce'] + }, + + start: function () { + this._super.apply(this, arguments); + this._Open(); + this.renderData(); + this.timePicker = new TimePicker(this); + this.timePicker.appendTo($(document.body)); + this.$el.next().removeClass('marg_main'); + if (this.mode == 'schedule'){ + $('.dark-schedule').css('display', 'flex'); + } else { + $('.dark-schedule').css('display', 'none'); + } + this.$('.info-infinito').popover({ + trigger: 'hover' + }); + }, + _Open: function(){ + this.$el.css('width', this.sidebar_width); + if(this.type == 'global'){ + this.$el.parent().next().css('margin-left', this.sidebar_width) + this.$el.css('height', '91.4vh'); + } else { + this.$el.parent().css('margin-right', this.sidebar_width) + this.$el.css('right', '0'); + this.$el.css('left', 'initial'); + this.$el.css('height', '100vh'); + } + }, + _Close: function() { + $('#hamburger').click() + this.$el.css('width', '0'); + if(this.type == 'global'){ + this.$el.parent().next().css('margin-left', '0'); + } else { + this.$el.parent().css('margin-right', '0'); + location.reload(); + } + }, + async renderData(){ + this.$el.find('#userEditToggler').attr('checked', session.userEdit); + this.$el.find('#sidebarToggler').attr('checked', session.sidebar); + this.$el.find('#sidebarIconToggler').attr('checked', session.sidebarIcon); + this.$el.find('#sidebarNameToggler').attr('checked', session.sidebarName); + this.$el.find('#navbarHoverToggler').attr('checked', session.fullscreen); + this.$el.find('#sidebarCompanyToggler').attr('checked', session.sidebarCompany); + this.$el.find('#sidebarUserToggler').attr('checked', session.sidebarUser); + this.$el.find('#navbarRecentToggler').attr('checked', session.recentApps); + this.$el.find('#navbarFullScreenAppToggler').attr('checked', session.fullScreenApp); + this.$el.find('#navbarRTLToggler').attr('checked', session.infinitoRtl); + this.$el.find('#navbarDarkToggler').attr('checked', session.infinitoDark); + this.$el.find('#navbarMenuBookmarkToggler').attr('checked', session.infinitoBookmark); + this.$el.find('#chameleonToggler').attr('checked', session.infinitoChameleon); + let content = ''; + for(let loader of this.loaders){ + content += ``; + } + this.$el.find('#loader').html(content); + this.$el.find('#loader').val(session.loaderClass); + this.showDarkOptions(session.infinitoDark); + this.$el.find(`[data-mode="${this.mode}"]`).closest('li').addClass('active'); + this.setRender(); + this.hideOptions(); + }, + setRender: function(){ + this.$el.find('#startSchedule').html(this.darkStart); + this.$el.find('#endSchedule').html(this.darkEnd); + this.$el.find('#item1').val(session.infinitoDarkStart); + this.$el.find('#item2').val(session.infinitoDarkEnd); + }, + hideOptions: function(){ + if(this.type == 'user'){ + this.$el.find('#userEditToggler').closest('.sub_style').remove(); + } + }, + async _SaveChanges(){ + let vals = { + 'sidebar': this.$el.find('#sidebarToggler')[0].checked, + 'sidebarIcon': this.$el.find('#sidebarIconToggler')[0].checked, + 'sidebarName': this.$el.find('#sidebarNameToggler')[0].checked, + 'fullscreen': this.$el.find('#navbarHoverToggler')[0].checked, + 'sidebarCompany': this.$el.find('#sidebarCompanyToggler')[0].checked, + 'sidebarUser': this.$el.find('#sidebarUserToggler')[0].checked, + 'recentApps': this.$el.find('#navbarRecentToggler')[0].checked, + 'fullScreenApp': this.$el.find('#navbarFullScreenAppToggler')[0].checked, + 'infinitoRtl': this.$el.find('#navbarRTLToggler')[0].checked, + 'infinitoDark': this.$el.find('#navbarDarkToggler')[0].checked, + 'infinitoBookmark': this.$el.find('#navbarMenuBookmarkToggler')[0].checked, + 'infinitoChameleon': this.$el.find('#chameleonToggler')[0].checked, + 'infinitoDarkMode': this.mode, + 'infinitoDarkStart': this.darkStartFloat, + 'infinitoDarkEnd': this.darkEndFloat, + 'loaderClass': this.$el.find('#loader').val(), + } + if(!vals.sidebarIcon && !vals.sidebarName && vals.sidebar){ + vals.sidebar = false; + this.$(".error-message").html('Sidebar is disabled due to icon and name is disabled'); + this.$(".error-message").animate({ + left: 0, + }, + 1000, + function () { + $(this).delay(3000).fadeOut(); + }); + } if(vals.fullScreenApp && vals.sidebar) { + vals.sidebar = false; + this.$(".error-message").html('Sidebar is disabled, only sidebar or fullscreen app show at a time'); + this.$(".error-message").animate({ + left: 0, + }, + 1000, + function () { + $(this).delay(3000).fadeOut(); + }); + } + session.sidebar = vals.sidebar; + session.sidebarIcon = vals.sidebarIcon; + session.sidebarName = vals.sidebarName; + session.fullscreen = vals.fullscreen; + session.sidebarCompany = vals.sidebarCompany; + session.sidebarUser = vals.sidebarUser; + session.recentApps = vals.recentApps; + session.fullScreenApp = vals.fullScreenApp; + session.infinitoBookmark = vals.infinitoBookmark; + session.infinitoDark = vals.infinitoDark; + session.infinitoDark = vals.infinitoDark; + session.infinitoChameleon = vals.infinitoChameleon; + session.infinitoDarkMode = this.mode; + session.infinitoDarkStart = this.darkStart; + session.infinitoDarkEnd = this.darkEnd; + session.loaderClass = vals.loaderClass; + if(this.type == 'global'){ + session.userEdit = this.$el.find('#userEditToggler')[0].checked; + vals.userEdit = this.$el.find('#userEditToggler')[0].checked; + await ajax.jsonRpc('/theme_studio/set_advanced_data', 'call', {vals}).then((_) => { + this._Close(); + }) + } else { + await ajax.jsonRpc('/theme_studio/set_advanced_data_user', 'call', {vals}).then((_) => { + this._Close(); + }) + } + }, + _OnChangeDark: function(ev){ + this.showDarkOptions(ev.target.checked); + }, + showDarkOptions: function(toggle){ + if(toggle){ + $('.dark-switch').css('display', 'flex'); + } else { + $('.dark-switch').css('display', 'none'); + } + if (this.mode == 'schedule' && toggle){ + $('.dark-schedule').css('display', 'flex'); + } else { + $('.dark-schedule').css('display', 'none'); + } + let lis = this.$el.find('.mode li'); + for(let li of lis){ + if($(li).find('a').data('mode') == this.mode){ + $(li).addClass('active'); + } else { + $(li).removeClass('active'); + } + } + }, + onChangeDarkMode: function(ev){ + if($(ev.target).nodeName == 'LI'){ + this.mode = $(ev.target).find('a').data('mode'); + } else { + this.mode = $(ev.target).parent().data('mode'); + } + this.showDarkOptions(true); + if(this.mode == 'auto') { + this.darkStartFloat = 19.0; + this.darkEndFloat = 5.0; + } + if (this.mode == 'schedule'){ + $('.dark-schedule').css('display', 'flex'); + } else { + $('.dark-schedule').css('display', 'none'); + } + }, + onClickSchedule: function(ev){ + this.timePicker.$el.removeClass('d-none') + this.timePicker.attach({ + target: this.$(ev.target).next()[0], + "24" : true, + time: this.$(ev.target).next()[0].id == 'time1' ? this.darkStart : this.darkEnd, + }); + }, + onChangeTime: function(ev){ + this.darkStartFloat = this.timeToFloat(ev.target.value); + this.darkStart = ev.target.value; + this.setRender(); + }, + onChangeTime2: function(ev){ + this.darkEndFloat = this.timeToFloat(ev.target.value); + this.darkEnd = ev.target.value; + this.setRender(); + }, + floatToTime: function(number){ + let hour = Math.floor(number); + let decpart = number - hour; + let min = 1 / 60; + decpart = min * Math.round(decpart / min); + let minute = Math.floor(decpart * 60) + ''; + if (minute.length < 2) { + minute = '0' + minute; + } + let time = hour + ':' + minute; + return time; + }, + timeToFloat: function(time){ + time = time.split(':'); + let decpart = 0 + if(time[1] && parseInt(time[1]) > 0){ + decpart = parseInt(time[1]) * 1.666; + } + let floatString = `${time[0]}.${Math.round(decpart)}`; + return parseFloat(floatString) + }, + onLoaderChange: function(ev){ + let val = ev.target.value; + let loader = val == 'default' ? `Loading...` : `` ; + let content = ` +
+
+ ${loader} +
+
+ Loading... +
+
`; + if(!session.userEdit || this.parent.$el) { + this.parent.$el.find('.previews').html(content); + setTimeout(()=>{ + this.parent.$el.find('.previews').html(''); + }, 3000) + } else { + $('.o_web_client').append(content); + setTimeout(()=>{ + $('.o_web_client').find('.o_blockUI').remove(); + }, 3000) + } + + }, + destroy: function(){ + this._super.apply(this, arguments); + }, + render: function(){ + this._super.apply(this, arguments); + mount(TimePicker, document.body); + } + + }); + + return AdvancedFeatures; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/MenuBookmark.js b/backend_theme_infinito/static/src/js/MenuBookmark.js new file mode 100644 index 000000000..0d921e471 --- /dev/null +++ b/backend_theme_infinito/static/src/js/MenuBookmark.js @@ -0,0 +1,71 @@ +/** @odoo-module alias=backend_theme_infinito.MenuBookmark **/ +const { Component, useState, xml, onMounted } = owl; +import session from 'web.session'; + +Component.prototype.dragElement = (elmnt, pos, display=true) => { + var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; + elmnt.onmousedown = dragMouseDown; + function dragMouseDown(e) { + elmnt.style.display = 'flex'; + e = e || window.event; + e.preventDefault(); + pos3 = e.clientX; + pos4 = e.clientY; + document.onmouseup = closeDragElement; + document.onmousemove = elementDrag; + } + function elementDrag(e) { + e = e || window.event; + e.preventDefault(); + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + if(pos.includes('y')){ + elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; + } + if(pos.includes('x')){ + elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + } + } + function closeDragElement() { + document.onmouseup = null; + document.onmousemove = null; + if(!display){ + elmnt.style.display = 'none'; + } + } +} + +export default class MenuBookmark extends Component { + constructor(parent){ + super(...arguments); + this.parent = parent; + } + setup(){ + super.setup(); + this.state = useState({ + menus: session.infinitoMenuBookmarks + }) + onMounted(this.mounted); + } + get menuBookmark() { + return this.state.menus; + } + mounted(){ + this.dragElement(this.__owl__.refs.menuBookmark, 'y', false); + } +} + +MenuBookmark.template = xml` + ` \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/ThemeStudioMenu.js b/backend_theme_infinito/static/src/js/ThemeStudioMenu.js new file mode 100644 index 000000000..3546fcf58 --- /dev/null +++ b/backend_theme_infinito/static/src/js/ThemeStudioMenu.js @@ -0,0 +1,115 @@ +odoo.define('backend_theme_infinito.ThemeStudioMenu', function (require) { +"use strict"; + + var core = require('web.core'); + var Widget = require('backend_theme_infinito.ThemeStudioWidget'); + var ajax = require('web.ajax'); + + var ThemeStudioMenu = Widget.extend({ + template: 'ThemeStudioMenu', + events: { + 'click .backend_theme_studio_close': '_onThemeStudioClose', + 'click .theme_studio_toggle_sidebar': '_onThemeStudioToggleSidebar', + 'click .dropdown-item': '_onButtonClick', + 'click .reset_to_default': '_onResetClick', + }, + init: function (parent, action) { + this._super(this, arguments); + this.action = action; + this.parent = parent; + this.editMode = parent.editMode; + this.menus = [{ + name: 'Views', + children: [{ + 'name': 'Tree/List', + 'selector': 'tree', + }, + { + 'name': 'Form', + 'selector': 'form', + }, + { + 'name': 'Kanban', + 'selector': 'kanban', + }, + { + 'name': 'Control Panel', + 'selector': 'control_panel', + }], + }, { + name: 'UI Elements', + children: [{ + 'name': 'Button', + 'selector': 'button', + }, + { + 'name': 'Progress Bar', + 'selector': 'progress_bar', + }, + { + 'name': 'Tab', + 'selector': 'tab', + }, + { + 'name': 'Input', + 'selector': 'input', + }, + { + 'name': 'Search', + 'selector': 'search', + }, + { + 'name': 'Misc', + 'selector': 'misc', + },], + } + ]; + }, + + _onThemeStudioClose: function (ev) { + ev.preventDefault(); + window.location.href = '/web' + }, + + _onThemeStudioToggleSidebar: function (ev) { + ev.currentTarget.classList.toggle('open'); + ev.preventDefault(); + this.parent._onToggleSidebar(); + }, + + _onButtonClick: function (ev) { + ev.preventDefault(); + var mode = ev.currentTarget.id; + if(mode){ + this.parent.editMode = mode; + this.parent.render(); + this.editMode = mode; + var sidebar = this.parent.sidebar; + if (sidebar) { + sidebar._Close(); + sidebar.destroy(); + } + this.saveData(); + } else { + var mode = ev.currentTarget.dataset.other; + this.parent.colors(); + } + }, + + _onResetClick: async function(ev){ + await ajax.jsonRpc('/theme_studio/reset_to_default', 'call', {}); + await this.setAssets(); + location.reload(); + }, + setAssets: function(){ + location.search = "?debug=assets"; + }, + + saveData: function () { + this._super.apply(this, arguments); + this.localStorage.setItem('editMode', this.editMode); + }, + }); + + return ThemeStudioMenu; +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/ThemeStudioWidget.js b/backend_theme_infinito/static/src/js/ThemeStudioWidget.js new file mode 100644 index 000000000..10be7e4e6 --- /dev/null +++ b/backend_theme_infinito/static/src/js/ThemeStudioWidget.js @@ -0,0 +1,26 @@ +odoo.define('backend_theme_infinito.ThemeStudioWidget', function (require) { +"use strict"; + + var Widget = require('web.Widget'); + + var ThemeStudioWidget = Widget.extend({ + init: function (parent, options) { + this._super.apply(this, arguments); + this.localStorage = window.localStorage; + this.loadData(); + }, + + loadData: function () { + this.editMode = this.localStorage.getItem('editMode') || 'tree'; + this.sidebar = JSON.parse(this.localStorage.getItem('sidebar')) || false; + this.data = JSON.parse(this.localStorage.getItem('data')) || {}; + this.tool = JSON.parse(this.localStorage.getItem('tool')) || false; + }, + saveData: function () { + this.localStorage.setItem('editMode', this.editMode); + }, + }); + + return ThemeStudioWidget; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/Tool.js b/backend_theme_infinito/static/src/js/Tool.js new file mode 100644 index 000000000..0744c6a28 --- /dev/null +++ b/backend_theme_infinito/static/src/js/Tool.js @@ -0,0 +1,80 @@ +odoo.define('backend_theme_infinito.Tools', function (require) { +"use strict"; + + var Widget = require('backend_theme_infinito.ThemeStudioWidget'); + + var Tool = Widget.extend({ + options: ['color', 'font-family', 'font-size', 'font-style', 'width', 'height', + 'border', 'padding', 'shadow', 'align'], + remove: ['--',], + + init: function (parent, object) { + this._super.apply(this, arguments); + this.object = object; + }, + + start: function () { + this.render(); + }, + + render: function () { + if (this.object && !this.tool) { + var style = getStyle(this.object[0].dataset.class, this.options, this.remove); + this.tool = style; + return style; + } else { + return this.tool; + } + }, + }); + + function componentToHex(c) { + c = parseInt(c); + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + function rgbToHex(r, g, b) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + } + + function getStyle(className, allowed, remove) { + var rules = window.getComputedStyle($('.' + className)[0]); + var rules_list = []; + var rules_value = []; + for (var rule of rules) { + var alw = allowed.some(w => rule.includes(w)); + var rmv = remove.some(w => rule.includes(w)); + var exist = rules_list.some(w => w === rule); + if (!exist && !rmv) { + rules_list.push(rule); + rules_value.push(rules[rule]); + } + } + return rules_list.map(function (rule, index) { + if (rule.includes('color')) { + var color = rules_value[index] != undefined ? rules_value[index] : '#000000'; + if (color.includes('rgb') && color.match(/\d+/g) !== null) { + var rgb = color.match(/\d+/g); + var hex = rgbToHex(rgb[0], rgb[1], rgb[2]); + var value = hex; + } else { + var value = color; + } + return [rule, 'color', value] + } else if (rules_value[index].includes('px')) { + return [rule, 'range', rules_value[index]] + } else { + return [rule, 'text', rules_value[index]] + } + + }); + } + + function isAllowed(rule, allowed) { + var result = allowed.any(w => rule.includes(w)); + } + + return Tool; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/VisualEditor.js b/backend_theme_infinito/static/src/js/VisualEditor.js new file mode 100644 index 000000000..71544ebaa --- /dev/null +++ b/backend_theme_infinito/static/src/js/VisualEditor.js @@ -0,0 +1,100 @@ +odoo.define('backend_theme_infinito.VisualEditor', function (require) { +"use strict"; + + var Dialog = require('web.Dialog'); + + var VisualEditor = Dialog.extend({ + template: "VisualEditor", + events: { + 'change input': '_onChangeInput', + }, + init: function (element) { + this.element = element; + var options = {}; + options.title = 'Visual Editor'; + options.size = 'medium'; + var self = this; + options.buttons = []; + options.buttons.push({text: "Apply", classes: "btn-primary", click: function (e) { + self._applyStyle(); + }}); + options.buttons.push({text: "Cancel", close: true}); + options.buttons.push({text: "Advanced", classes: "btn-primary", click: function (e) { + self._openAdvanced(); + }}); + this._super(element, options); + }, + start: function () { + this.$el[0].append(this.element[0].cloneNode(true)); + this.preview = this.$(this.$el[0].firstChild); + this.tools = this.$el[2]; + for (var child of this.tools.children) { + if (child.tagName in ['INPUT', 'SELECT']) { + var val = this.element.css(child.id); + if (val && val.includes('rgb') && val.match(/\d+/g) !== null) { + var rgb = val.match(/\d+/g); + var hex = rgbToHex(rgb[0], rgb[1], rgb[2]); + val = hex; + } else if (val && val.includes('px')) { + val = val.replace('px', ''); + if (val.includes(' ')) { + val = val.split(' ')[0]; + } + } + if ($(child).data('unit') == '%') { + val = getPercentage(val); + } + $(child).val(val); + } + } + }, + _onChangeInput: function (e) { + var input = e.target; + var value = input.value; + if (input.dataset.unit) { + value += input.dataset.unit; + } + var name = input.id; + var add = true; + var style = this.preview.attr('style') ? this.preview.attr('style').split(';') : []; + if (style) { + for (var i = 0; i < style.length; i++) { + var s = style[i].split(':'); + if (s[0] == name) { + style[i] = `${name}: ${value}`; + add = false; + break; + } + } + } + if(add) { + style.push(`${name}: ${value}`); + } + style = style.join(';'); + this.preview.attr('style', style); + }, + _applyStyle: function () { + var style = this.preview.attr('style'); + this.element.attr('style', style); + } + }); + + function componentToHex(c) { + c = parseInt(c); + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + function rgbToHex(r, g, b) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + } + + function getPercentage(value) { + var screenWidth = window.screen.width; + var perc = ( screenWidth - value ) / screenWidth; + return perc; + } + + return VisualEditor; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/change.js b/backend_theme_infinito/static/src/js/change.js new file mode 100644 index 000000000..ecea6edc9 --- /dev/null +++ b/backend_theme_infinito/static/src/js/change.js @@ -0,0 +1,179 @@ +odoo.define('backend_theme_infinito.NewTools', function (require) { +"use strict"; + + var NewTools = { + 'property': [ + {'name': 'align-content', 'type': 'select', 'options': ['baseline', 'center', 'flex-start', 'flex-end', 'stretch', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'align-items', 'type': 'select', 'options': ['baseline', 'center', 'flex-start', 'flex-end', 'stretch', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'align-self', 'type': 'select', 'options': ['auto', 'baseline', 'center', 'flex-start', 'flex-end', 'stretch', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'animation-delay', 'type': 'range', 'unit': 's', 'min': 0, 'max': 60, 'alt': ['-webkit-']}, + {'name': 'animation-direction', 'type': 'select', 'options': ['normal', 'reverse', 'alternate', 'alternate-reverse', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'animation-duration', 'type': 'range', 'unit': 's', 'min': 0, 'max': 60, 'alt': ['-webkit-']}, + {'name': 'animation-fill-mode', 'type': 'select', 'options': ['none', 'forwards', 'backwards', 'both', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'animation-iteration-count', 'type': 'range', 'unit': false, 'min': -1, 'max': 10, 'alt': ['-webkit-']}, + {'name': 'animation-name', 'type': 'input', 'alt': ['-webkit-']}, + {'name': 'animation-play-state', 'type': 'select', 'options': ['paused', 'running', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'animation-timing-function', 'type': 'select', 'options': ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'backface-visibility', 'type': 'select', 'options': ['visible', 'hidden', 'initial', 'inherit'], 'alt': []}, + {'name': 'background-attachment', 'type': 'select', 'options': ['scroll', 'fixed', 'inherit'], 'alt': []}, + {'name': 'background-clip', 'type': 'select', 'options': ['border-box', 'padding-box', 'content-box', 'initial', 'inherit'], 'alt': []}, + {'name': 'background-color', 'type': 'color', 'alt': []}, + {'name': 'background-origin', 'type': 'select', 'options': ['border-box', 'padding-box', 'content-box', 'initial', 'inherit'], 'alt': []}, + {'name': 'background-repeat', 'type': 'select', 'options': ['repeat', 'repeat-x ', 'repeat-y', 'no-repeat', 'inherit'], 'alt': []}, + {'name': 'background-size', 'type': 'range', 'unit': '%', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'border', 'type': 'input', 'alt': []}, + {'name': 'border-bottom', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-bottom-color', 'type': 'color', 'alt': []}, + {'name': 'border-bottom-left-radius', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'border-bottom-right-radius', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'border-bottom-style', 'type': 'select', 'options': ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': []}, + {'name': 'border-bottom-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-collapse', 'type': 'select', 'options': ['collapse', 'separate', 'inherit'], 'alt': []}, + {'name': 'border-color', 'type': 'color', 'alt': []}, + {'name': 'border-left', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-left-color', 'type': 'color', 'alt': []}, + {'name': 'border-left-style', 'type': 'select', 'options': ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': []}, + {'name': 'border-left-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-radius', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'border-right', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-right-color', 'type': 'color', 'alt': []}, + {'name': 'border-right-style', 'type': 'select', 'options': ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': []}, + {'name': 'border-right-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-spacing', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-style', 'type': 'select', 'options': ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': []}, + {'name': 'border-top', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-top-color', 'type': 'color', 'alt': []}, + {'name': 'border-top-left-radius', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'border-top-right-radius', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'border-top-style', 'type': 'select', 'options': ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': []}, + {'name': 'border-top-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'border-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'bottom', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'box-shadow', 'type': 'input', 'alt': []}, + {'name': 'box-sizing', 'type': 'select', 'options': ['content-box', 'padding-box', 'border-box', 'initial', 'inherit'], 'alt': []}, + {'name': 'caption-side', 'type': 'select', 'options': ['top', 'bottom', 'inherit'], 'alt': []}, + {'name': 'clear', 'type': 'select', 'options': ['none', 'left', 'right', 'both', 'inherit', 'auto'], 'alt': []}, + {'name': 'color', 'type': 'color', 'alt': []}, + {'name': 'column-count', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-fill', 'type': 'select', 'options': ['auto', 'balance', 'initial', 'inherit'], 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-gap', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 25, 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-rule-color', 'type': 'color', 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-rule-style', 'type': 'select', 'options': ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-rule-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 25, 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-span', 'type': 'select', 'options': ['none', 'all', 'initial', 'inherit'], 'alt': ['-webkit-', '-moz-']}, + {'name': 'column-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': ['-webkit-', '-moz-']}, + {'name': 'cursor', 'type': 'select', + 'options': ['auto', 'crosshair', 'default', 'pointer', 'move', 'e-resize', + 'ne-resize', 'nw-resize', 'n-resize', 'se-resize', 'sw-resize', + 's-resize', 'w-resize', 'text', 'wait', 'help', 'progress', + 'inherit'], 'alt': []}, + {'name': 'direction', 'type': 'select', 'options': ['ltr', 'rtl', 'inherit'], 'alt': []}, + {'name': 'display', 'type': 'select', + 'options': ['flex', 'inline', 'block', 'list-item', 'inline-block', 'table', + 'inline-table', 'table-row-group', 'table-header-group', + 'table-footer-group', 'table-row', 'table-column-group', + 'table-column', 'table-cell', 'table-caption', 'none', + 'inherit'], 'alt': []}, + {'name': 'empty-cells', 'type': 'select', 'options': ['show', 'hide', 'inherit'], 'alt': []}, + {'name': 'flex', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': ['-webkit-', '-ms-']}, + {'name': 'flex-basis', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': ['-webkit-']}, + {'name': 'flex-direction', 'type': 'select', 'options': ['left', 'right', 'none', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'flex-grow', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': ['-webkit-']}, + {'name': 'flex-shrink', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': ['-webkit-']}, + {'name': 'flex-wrap', 'type': 'select', 'options': ['nowrap', 'wrap', 'wrap-reverse', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'float', 'type': 'select', 'options': ['left', 'right', 'none', 'initial', 'inherit'], 'alt': []}, + {'name': 'font-family', 'type': 'input', 'alt': []}, + {'name': 'font-size', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 34, 'alt': []}, + {'name': 'font-size-adjust', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': []}, + {'name': 'font-stretch', 'type': 'select', 'options': ['normal', 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', 'initial', 'inherit'], 'alt': []}, + {'name': 'font-style', 'type': 'select', 'options': ['normal', 'italic', 'oblique', 'inherit'], 'alt': []}, + {'name': 'font-variant', 'type': 'select', 'options': ['normal', 'small-caps', 'inherit'], 'alt': []}, + {'name': 'font-weight', 'type': 'select', 'options': ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '700', '800', '900', 'inherit'], 'alt': []}, + {'name': 'height', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'justify-content', 'type': 'select', 'options': ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'left', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'letter-spacing', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'line-height', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': []}, + {'name': 'list-style-position', 'type': 'select', 'options': ['inside', 'outside', 'initial', 'inherit'], 'alt': []}, + {'name': 'list-style-type', 'type': 'select', 'options': ['disc', 'circle', 'square', 'decimal', 'decimal-leading-zero', 'lower-roman', 'upper-roman', 'lower-greek', 'lower-latin', 'upper-latin', 'armenian', 'georgian', 'lower-alpha', 'upper-alpha', 'none', 'inherit'], 'alt': []}, + {'name': 'margin', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'margin-bottom', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'margin-left', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'margin-right', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'margin-top', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'max-height', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'max-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'min-height', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'min-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'opacity', 'type': 'range', 'unit': '%', 'min': 0, 'max': 100, 'alt': []}, + {'name': 'order', 'type': 'range', 'unit': false, 'min': 0, 'max': 10, 'alt': ['-webkit-']}, + {'name': 'outline-color', 'type': 'color', 'alt': []}, + {'name': 'outline-offset', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'outline-style', 'type': 'select', 'options': ['none', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'initial', 'inherit'], 'alt': []}, + {'name': 'outline-width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 25, 'alt': []}, + {'name': 'overflow', 'type': 'select', 'options': ['visible', 'hidden', 'scroll', 'auto', 'inherit'], 'alt': []}, + {'name': 'overflow-x', 'type': 'select', 'options': ['visible', 'hidden', 'scroll', 'auto', 'inherit'], 'alt': []}, + {'name': 'overflow-y', 'type': 'select', 'options': ['visible', 'hidden', 'scroll', 'auto', 'inherit'], 'alt': []}, + {'name': 'padding', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'padding-bottom', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'padding-left', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'padding-right', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'padding-top', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'page-break-after', 'type': 'select', 'options': ['auto', 'always', 'avoid', 'left', 'right', 'inherit'], 'alt': []}, + {'name': 'page-break-before', 'type': 'select', 'options': ['auto', 'always', 'avoid', 'left', 'right', 'inherit'], 'alt': []}, + {'name': 'page-break-inside', 'type': 'select', 'options': ['avoid', 'auto', 'inherit'], 'alt': []}, + {'name': 'perspective', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 25, 'alt': []}, + {'name': 'perspective-origin', 'type': 'input', 'alt': []}, + {'name': 'position', 'type': 'select', 'options': ['static', 'relative', 'absolute', 'fixed', 'inherit'], 'alt': []}, + {'name': 'quotes', 'type': 'input', 'alt': []}, + {'name': 'resize', 'type': 'select', 'options': ['none', 'both', 'horizontal', 'vertical', 'initial', 'inherit'], 'alt': []}, + {'name': 'right', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'table-layout', 'type': 'select', 'options': ['auto', 'fixed', 'inherit'], 'alt': []}, + {'name': 'text-align', 'type': 'select', 'options': ['left', 'right', 'center', 'justify', 'inherit']}, + {'name': 'text-align-last', 'type': 'select', 'options': ['left', 'right', 'center', 'justify', 'inherit'], 'alt': ['-moz-']}, + {'name': 'text-decoration-color', 'type': 'color', 'alt': ['-moz-']}, + {'name': 'text-decoration-line', 'type': 'input', 'alt': ['-moz-']}, + {'name': 'text-decoration-style', 'type': 'select', 'options': ['none', 'underline', 'overline', 'line-through', 'blink', 'inherit'], 'alt': ['-moz-']}, + {'name': 'text-indent', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 20, 'alt': []}, + {'name': 'text-justify', 'type': 'select', 'options': ['auto', 'none', 'inter-word', 'distribute', 'initial', 'inherit'], 'alt': []}, + {'name': 'text-overflow', 'type': 'select', 'options': ['clip', 'ellipsis', 'string', 'initial', 'inherit'], 'alt': []}, + {'name': 'text-shadow', 'type': 'input', 'alt': []}, + {'name': 'text-transform', 'type': 'select', 'options': ['capitalize', 'uppercase', 'lowercase', 'none', 'inherit'], 'alt': []}, + {'name': 'top', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'transform', 'type': 'input', 'alt': ['-webkit-', '-moz-', '-ms-']}, + {'name': 'transform-origin', 'type': 'select', 'options': ['x-position', 'y-position', 'z-position', 'initial', 'inherit'], 'alt': ['-webkit-', '-moz-', '-ms-']}, + {'name': 'transform-style', 'type': 'select', 'options': ['flat', 'preserve-3d', 'initial', 'inherit'], 'alt': ['-webkit-', '-moz-', '-ms-']}, + {'name': 'transition', 'type': 'input', 'alt': ['-webkit-']}, + {'name': 'transition-delay', 'type': 'range', 'unit': 's', 'min': 0, 'max': 60, 'alt': ['-webkit-']}, + {'name': 'transition-duration', 'type': 'range', 'unit': 's', 'min': 0, 'max': 60, 'alt': ['-webkit-']}, + {'name': 'transition-property', 'type': 'input', 'alt': ['-webkit-']}, + {'name': 'transition-timing-function', 'type': 'select', 'options': ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'initial', 'inherit'], 'alt': ['-webkit-']}, + {'name': 'visibility', 'type': 'select', 'options': ['visible', 'hidden', 'collapse', 'inherit'], 'alt': []}, + {'name': 'white-space', 'type': 'select', 'options': ['normal', 'pre', 'nowrap', 'pre-wrap', 'pre-line', 'inherit'], 'alt': []}, + {'name': 'width', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 500, 'alt': []}, + {'name': 'word-break', 'type': 'select', 'options': ['normal', 'break-all', 'keep - all', 'initial', 'inherit'], 'alt': []}, + {'name': 'word-spacing', 'type': 'range', 'unit': 'px', 'min': 0, 'max': 10, 'alt': []}, + {'name': 'word-wrap', 'type': 'select', 'options': ['normal', 'break-word', 'initial', 'inherit'], 'alt': []}, + ] + } + + function displayName(nme){ + let names = nme.split('-'); + let newName = ''; + for(let name of names){ + if(newName == ''){ + newName += name.charAt(0).toUpperCase() + name.slice(1); + } else { + newName += ' ' + name.charAt(0).toUpperCase() + name.slice(1); + } + } + return newName; + } + + for(let tool of NewTools.property){ + tool.displayName = displayName(tool.name) + } + + return NewTools; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/loaders.js b/backend_theme_infinito/static/src/js/loaders.js new file mode 100644 index 000000000..2dee34e24 --- /dev/null +++ b/backend_theme_infinito/static/src/js/loaders.js @@ -0,0 +1,31 @@ +/** @odoo-module **/ +import { BlockUI } from "@web/core/ui/block_ui"; + +import { patch } from "@web/core/utils/patch"; +import session from 'web.session'; +const { xml } = owl; + +patch(BlockUI.prototype, "/backend_theme_infinito/static/src/js/loaders.js", { + setup() { + this._super(); + this.loaderClass = session.loaderClass; + }, +}); + +BlockUI.template = xml` +
+ +
+ + + + + Loading... + +
+
+
+ +
+
+
`; diff --git a/backend_theme_infinito/static/src/js/navbar.js b/backend_theme_infinito/static/src/js/navbar.js new file mode 100644 index 000000000..bef1f80e8 --- /dev/null +++ b/backend_theme_infinito/static/src/js/navbar.js @@ -0,0 +1,361 @@ +/** @odoo-module **/ +import { NavBar } from "@web/webclient/navbar/navbar"; +import { DropdownItem } from "@web/core/dropdown/dropdown_item"; +import { WebClient } from "@web/webclient/webclient"; +import { ControlPanel } from "@web/search/control_panel/control_panel"; +import { patch } from "@web/core/utils/patch"; +import ajax from 'web.ajax'; +import InfinitoRecentApps from './recentApps'; +import MenuBookmark from 'backend_theme_infinito.MenuBookmark'; +import session from 'web.session'; +const { fuzzyLookup } = require('@web/core/utils/search'); +import { computeAppsAndMenuItems } from "@web/webclient/menus/menu_helpers"; +import core from 'web.core'; +import { variables, colors, to_color } from 'backend_theme_infinito.variables'; +const { onMounted, onWillStart, useExternalListener, mount, useRef, useState} = owl; +patch(NavBar.prototype, 'backend_theme_infinito/static/src/js/navbar.NavBar.js', { + + /** + * @override + */ + setup() { + this._super(); + this._search_def = $.Deferred(); + let { + apps, + menuItems + } = computeAppsAndMenuItems(this.menuService.getMenuAsTree("root")); + this._apps = apps; + this._searchableMenus = menuItems; + + onMounted(() => { + this.$search_container = $(".search-container"); + this.$search_input = $(".search-input input"); + this.$search_results = $(".search-results"); + this.$app_menu = $(".app-menu"); + this.$dropdown_menu = $(".dropdown-menu"); + this.doGreeting(); + }); + }, + + doGreeting() { + let time = new Date().getHours(); + let greetings = 'Good' + if (12 > time > 0) { + greetings = 'Good Morning, ' + } else if (16 > time > 12) { + greetings = 'Good Afternoon, ' + } else { + greetings = 'Good Evening, ' + } + greetings += session.name + $('.infinito-greeting').text(greetings) + let img = `${session["web.base.url"]}/web/image?model=res.users&field=avatar_128&id=${session.uid}` + $('.infinito-user_img').attr('src', img) + }, + + _searchMenusSchedule: function() { + this.$search_results.removeClass("o_hidden") + this.$app_menu.addClass("o_hidden"); + this._search_def.reject(); + this._search_def = $.Deferred(); + setTimeout(this._search_def.resolve.bind(this._search_def), 50); + this._search_def.done(this._searchMenus.bind(this)); + }, + + _searchMenus: function() { + var query = this.$search_input.val(); + if (query === "") { + this.$search_container.removeClass("has-results"); + this.$app_menu.removeClass("o_hidden"); + this.$search_results.empty(); + return; + } + var results = []; + fuzzyLookup(query, this._apps, (menu) => menu.label) + .forEach((menu) => { + results.push({ + category: "apps", + name: menu.label, + actionID: menu.actionID, + id: menu.id, + webIconData: menu.webIconData, + }); + }); + fuzzyLookup(query, this._searchableMenus, (menu) => + (menu.parents + " / " + menu.label).split("/").reverse().join("/") + ).forEach((menu) => { + results.push({ + category: "menu_items", + name: menu.parents + " / " + menu.label, + actionID: menu.actionID, + id: menu.id, + }); + }); + this.$search_container.toggleClass( + "has-results", + Boolean(results.length) + ); + this.$search_results.html( + core.qweb.render( + "backend_theme_infinito.SearchResults", { + results: results, + widget: this, + } + ) + ); + }, + onClick(ev) { + let data; + if (ev.target.classList.contains('nav-link') || ev.target.classList.contains('dropdown-item')) { + data = ev.target.dataset + } else { + data = $(ev.target).parent()[0].dataset; + } + let app = { + 'appId': data.appId + } + if (data) ajax.jsonRpc('/theme_studio/add_recent_app', 'call', { + app + }); + }, + get sidebarEnabled() { + return session.sidebar; + }, + set sidebarEnabled(val) { + + }, + get sidebarIcon() { + return session.sidebarIcon; + }, + set sidebarIcon(val) { + }, + get sidebarName() { + return session.sidebarName; + }, + set sidebarName(val) { + }, + get sidebarResize() { + return session.sidebarIcon && !session.sidebarName ? 'm-sidebar' : '' + }, + set sidebarResize(val) { + }, + get sidebarCompany() { + return session.sidebarCompany; + }, + set sidebarCompany(val) { + }, + get sidebarCompanyLogo() { + return session.sidebarCompany ? 'has-company' : ''; + }, + set sidebarCompanyLogo(val) { + }, + get sidebarUser() { + return session.sidebarUser;; + }, + set sidebarUser(val) { + }, + get FullScreenEnabled() { + return session.fullscreen ? 'd-none' : ''; + }, + set FullScreenEnabled(val) { + }, + get fullScreenApp() { + return session.fullScreenApp; + }, + set fullScreenApp(val) { + } +}); + +patch(WebClient.prototype, 'backend_theme_infinito/static/src/js/navbar.WebClient.js', { + setup() { + this._super(); + useExternalListener(document.body, 'mousemove', this.mouseMove); + onWillStart(this.onWillStart); + onMounted(() => { + this.menuBookMark = mount(MenuBookmark, document.body); + this.recent = mount(InfinitoRecentApps, document.body); + }) + }, + async onWillStart() { + this.fullScreenEnabled = session.fullscreen; + this.recentApps = session.recentApps; + this.is_dark = false; + if (session.infinitoRtl) { + $('.o_web_client').addClass('infinito-rtl'); + } else { + $('.o_web_client').removeClass('infinito-rtl') + } + this.last_check = new Date().getMinutes(); + this.darkModeCheck(); + + }, + rerenderMenuBookmark(){ + this.menuBookmark.state.menus = session.infinitoMenuBookmarks; + }, + mouseMove(ev) { + if (this.fullScreenEnabled && this.env.services.ui.size >= 4) { + if (ev.clientY <= 20) { + $(ev.target).parents('.o_action_manager').prev().find('nav').removeClass('d-none'); + } else { + $(ev.target).parents('.o_action_manager').prev().find('nav').addClass('d-none'); + } + } + if (this.recentApps && this.env.services.ui.size >= 4) { + var recentapps = document.getElementById("recentApps"); + if (ev.clientY >= (screen.availHeight - 200)) { + recentapps.classList.remove('d-none'); + } else { + if (recentapps){ + recentapps.classList.add('d-none'); + }} + } + if (session.infinitoBookmarks.length && session.infinitoBookmark && this.env.services.ui.size >= 4) { + var Menuboook = document.getElementById("menuBookmark"); + if (ev.clientX >= (screen.availWidth - 160)) { + if (Menuboook){ + Menuboook.classList.add('d-flex'); + } + } else { + if (Menuboook){ + Menuboook.classList.remove('d-flex'); + } + } + } + let now = new Date(); + if (this.last_check != now.getMinutes()) { + this.darkModeCheck(); + this.last_check = now.getMinutes(); + } + }, + darkModeCheck() { + if (session.infinitoDark) { + if (session.infinitoDarkMode == 'all') { + $('.o_web_client').addClass('dark-mode'); + this.is_dark = true; + } else { + let now = new Date(); + let dark = false; + let hour = now.getHours(); + let min = now.getMinutes(); + let start = session.infinitoDarkStart.split(':'); + let startHour = parseInt(start[0]); + let startMin = parseInt(start[1]); + let end = session.infinitoDarkEnd.split(':'); + let endHour = parseInt(end[0]); + let endMin = parseInt(end[1]); + if (startHour > endHour) { + endHour += 24; + if (hour < startHour) { + hour += 24; + } + } + if (endHour > hour && hour > startHour) { + dark = true; + } else if (hour == startHour && min >= startMin && hour < endHour) { + dark = true; + } else if (hour == endHour && min <= endMin && hour >= startHour) { + dark = true; + } else { + dark = false; + } + if (dark) { + $('.o_web_client').addClass('dark-mode'); + this.is_dark = true; + } else { + $('.o_web_client').removeClass('dark-mode'); + this.is_dark = false; + } + } + } else if (!session.infinitoDark && this.is_dark) { + $('.o_web_client').removeClass('dark-mode'); + this.is_dark = false; + } + }, +}); + +patch(DropdownItem.prototype, 'backend_theme_infinito/static/src/js/navbar.MenuItem.js', { + onClick(ev) { + this._super(ev); + if (ev.target.classList.contains('o_app')) { + let app = { + 'appId': ev.target.dataset.section + } + ajax.jsonRpc('/theme_studio/add_recent_app', 'call', { + app + }); + } + } +}); + +patch(ControlPanel.prototype, 'backend_theme_infinito/static/src/js/navbar.ControlPanel.js', { + async onBookmark(ev) { + let action_id = this.env.config.actionId; + let url = location.href.split('/'); + let menu_url = url[url.length - 1]; + if (!this.state.infinitoBookmarks.includes(action_id)) { + let menu = { + 'actionId': action_id, + 'menuUrl': menu_url + } + let book = { + name: $('.breadcrumb-item.active').text(), + short_name: $('.breadcrumb-item.active').text().substring(0, 2).toUpperCase(), + url: menu_url + } + await ajax.jsonRpc('/theme_studio/add_menu_bookmarks', 'call', { + menu + }); + ev.target.classList.add("active"); + this.state.infinitoBookmarks.push(action_id) + this.state.infinitoMenuBookmarks.push(book); + console.log(this.state) + } else { + let index = this.state.infinitoBookmarks.indexOf(action_id); + this.state.infinitoBookmarks.splice(index, 1); + this.state.infinitoMenuBookmarks.splice(index, 1); + let menu = { + 'actionId': action_id + } + await ajax.jsonRpc('/theme_studio/remove_menu_bookmarks', 'call', { + menu + }); + ev.target.classList.remove("active"); + } + }, + + setup() { + this._super(); + onMounted(this.mounted); + this.state = useState({ + infinitoBookmarks: session.infinitoBookmarks, + infinitoMenuBookmarks: session.infinitoMenuBookmarks + }); + this.ref = useRef('bookmark'); + }, + + mounted() { + if (this.env.config && session.infinitoBookmark) { + let action_id = this.env.config.actionId; + if (this.state.infinitoBookmarks.includes(action_id)) { + if (this.ref.el){ + this.ref.el.classList.add("active"); + }} + } + }, + + get bookmarkOn() { + return session.infinitoBookmark; + } +}); + +if (session.infinitoChameleon) { + setInterval(() => { + let randomColor = colors[Math.floor(Math.random() * colors.length)]; + for (let key in variables) { + let index = variables[key][0] - 1; + let percentage = variables[key][1]; + document.documentElement.style.setProperty(key, to_color(randomColor[index], percentage)) + } + }, 600000); +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/recentApps.js b/backend_theme_infinito/static/src/js/recentApps.js new file mode 100644 index 000000000..6c1af8597 --- /dev/null +++ b/backend_theme_infinito/static/src/js/recentApps.js @@ -0,0 +1,36 @@ +/** @odoo-module **/ +import ajax from 'web.ajax'; +const { useRef, onWillStart, xml ,onMounted} = owl; +import session from 'web.session'; +export default class InfinitoRecentApps extends owl.Component { + setup(){ + super.setup(); + this.ref = useRef('recentApps'); + onWillStart(this.willStart); + onMounted(this.mounted) + } + async willStart(){ + await ajax.jsonRpc('/theme_studio/get_recent_apps', 'call', {}) + .then(data => this.recent_app = data); + } + get recentApps(){ + return this.recent_app; + } + mounted(){ + this.dragElement(this.__owl__.refs.recentApps, 'x'); + } +} +InfinitoRecentApps.template = xml` +
+
+ + +
+ +
+ +
+
+
+
+`; \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/sidebar.js b/backend_theme_infinito/static/src/js/sidebar.js new file mode 100644 index 000000000..103b0a71b --- /dev/null +++ b/backend_theme_infinito/static/src/js/sidebar.js @@ -0,0 +1,81 @@ +odoo.define('sidebar_app.SidebarMenu', function (require) { + "use strict"; + + var session = require('web.session'); + + //sidebar toggle effect + $(document).on("click", "#closeSidebar", function(event){ + $("#closeSidebar").hide(); + $("#openSidebar").show(); + }); + $(document).on("click", "#openSidebar", function(event){ + $("#openSidebar").hide(); + $("#closeSidebar").show(); + $("#sidebar_panel").css({'display':'block'}); + let marginLeft = $("#sidebar_panel").css('width'); + let margin_type = session.infinitoRtl ? 'margin-right' : 'margin-left'; + let style = `${margin_type}: calc(${marginLeft} + 25px)` + $(".o_action_manager").css({'transition':'all .1s linear'}); + $(".o_main_navbar").css({'transition':'all .1s linear'}); + $(".o_action_manager").attr('style', style); + + //add class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").addClass(action_manager_id); + action_manager.addClass("sidebar_margin"); + + //add class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").addClass(top_head_id); + top_head.addClass("sidebar_margin"); + }); + $(document).on("click", "#closeSidebar", function(event){ + let margin_type = session.infinitoRtl ? 'margin-right' : 'margin-left'; + let style = `${margin_type}: 15px`; + $("#sidebar_panel").css({'display':'none'}); + $(".o_action_manager").attr('style', style); + + //remove class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").removeClass(action_manager_id); + action_manager.removeClass("sidebar_margin"); + + //remove class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").removeClass(top_head_id); + top_head.removeClass("sidebar_margin"); + }); + + $(document).on("click", ".sidebar a", function(event){ + var menu = $(".sidebar a"); + var $this = $(this); + var id = $this.data("id"); + $("header").removeClass().addClass(id); + menu.removeClass("active"); + $this.addClass("active"); + + //sidebar close on menu-item click + let margin_type = session.infinitoRtl ? 'margin-right' : 'margin-left'; + let style = `${margin_type}: 15px`; + $("#sidebar_panel").css({'display':'none'}); + $(".o_action_manager").attr('style', style); + $("#closeSidebar").hide(); + $("#openSidebar").show(); + + //remove class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").removeClass(action_manager_id); + action_manager.removeClass("sidebar_margin"); + + //remove class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").removeClass(top_head_id); + top_head.removeClass("sidebar_margin"); + }); +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/style_add.js b/backend_theme_infinito/static/src/js/style_add.js new file mode 100644 index 000000000..7ea6d9ee1 --- /dev/null +++ b/backend_theme_infinito/static/src/js/style_add.js @@ -0,0 +1,54 @@ +odoo.define('backend_theme_infinito.StyleAdd', function (require) { +"use strict"; + + var Dialog = require('web.Dialog'); + + var StyleAdd = Dialog.extend({ + template: 'StyleAdd', + events: _.extend({}, Dialog.events, { + 'keyup .search_property': '_onChange', + }), + init: function(parent, tools, current_tools) { + var options = {}; + options.title = 'Select Property'; + options.size = 'medium'; + var self = this; + options.buttons = []; + options.buttons.push({text: "+", classes: "btn-primary", click: function (e) { + self.add(); + }}); + this._super(parent, options); + this.parent = parent; + this.tools = tools; + this.current_tools = current_tools; + }, + + start: function(){ + this.renderDrops(''); + }, + renderDrops: function(search){ + this.$el.find('select').html('') + for(var tool of this.tools){ + if(!this.current_tools.includes(tool.name) && tool.name.includes(search)){ + var content = ``; + this.$el.find('select').append(content); + } + } + }, + _onChange: function(ev){ + this.renderDrops(ev.target.value); + }, + add: function(){ + var val = this.$el.find('select').val(); + this.parent.current_tools.push(val); + this.current_tools.push(val); + var option = this.$el.find('select').find('option[data-value="' + val + '"]'); + var current = this.tools.filter(tool => tool.name == val); + this.parent.renderNewTool(current[0]); + this.close(); + }, + }); + + return StyleAdd; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/systray.js b/backend_theme_infinito/static/src/js/systray.js new file mode 100644 index 000000000..367e430fd --- /dev/null +++ b/backend_theme_infinito/static/src/js/systray.js @@ -0,0 +1,70 @@ +/** @odoo-module **/ +import { registry } from "@web/core/registry"; +import { useService } from "@web/core/utils/hooks"; +import session from 'web.session'; +import AdvancedFeatures from 'backend_theme_infinito.AdvancedFeatures'; + +class InfinitoSystrayItem extends owl.Component { + setup() { + this.render(); + this.action = useService("action"); + this.mode = false; + } + _onClickSimpleEditor() { + var $el = $('body') + this.mode = 'simple'; + $(this.el).find('#dropdown_infinito_mode').hide(); + this._removeEvents($el); + this._addEvents($el); + for (var element of $el.find('.dropdown-menu')){ + $(element).removeClass('.dropdown-menu'); + } + } + _onClickAdvancedEditor() { + this.action.doAction('action_theme_studio'); + } + _removeEvents(element) { + element = element[0] || element; + for (var child of element.children) { + $(child).off(); + this._removeEvents(child); + } + } + _addEvents(element) { + element = element[0] || element; + for (var child of element.children) { + $(child).on('click', this._onClickStudioMode.bind(this)); + this._addEvents(child); + } + } + _onClickStudioMode(e) { + e.stopPropagation(); + e.preventDefault(); + var $target = $(e.target); + } +} +InfinitoSystrayItem.template = "backend_theme_infinito.StudioSystray"; + +export const systrayItem = { + Component: InfinitoSystrayItem, + isDisplayed: (env) => env.services.user.isAdmin && env.services.ui.size >= 4 +}; + +class InfinitoSystrayAdv extends owl.Component { + _onClick(){ + if(this.sidebarAdvanced) this.sidebarAdvanced.destroy(); + this.sidebarAdvanced = new AdvancedFeatures(this, 'user'); + } +} + + +InfinitoSystrayAdv.template = "backend_theme_infinito.AdvSystray"; + +export const InfinitoSystrayAdvItem = { + Component: InfinitoSystrayAdv, + isDisplayed: (env) => session.userEdit && env.services.ui.size >= 4 +}; + +registry.category("systray") + .add("InfinitoSystrayItem", systrayItem, { sequence: 1 }) + .add("InfinitoSystrayAdv", InfinitoSystrayAdvItem, { sequence: 1 }); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/theme_editor.js b/backend_theme_infinito/static/src/js/theme_editor.js new file mode 100644 index 000000000..75ee425a4 --- /dev/null +++ b/backend_theme_infinito/static/src/js/theme_editor.js @@ -0,0 +1,83 @@ +odoo.define('backend_theme_infinito.theme_editor', function (require) { +"use strict"; + + var Widget = require('backend_theme_infinito.ThemeStudioWidget'); + var core = require('web.core'); + var ThemeEditorSidebar = require('backend_theme_infinito.theme_editor_sidebar'); + var AdvancedFeatures = require('backend_theme_infinito.AdvancedFeatures'); + var ThemeStudioMenu = require('backend_theme_infinito.ThemeStudioMenu'); + var ThemeEditor = Widget.extend({ + template: 'backend_theme_infinito.theme_editor', + xmlDependencies: ['/backend_theme_infinito/static/src/xml/views.xml'], + events: { + 'click .item': 'onItemClick', + }, + init: function (parent, action) { + this._super.apply(this, arguments); + this.action = action; + this.theme = false; + this.object = false; + this.item = false; + this.sidebar_view = false; + }, + + start: function () { + this._super.apply(this, arguments); + this.object = $($('.dash_main').firstChild); + this.menu = new ThemeStudioMenu(this, this.action); + this.menu.appendTo(this.$el[0]); + this.render(); + }, + + _onToggleSidebar: function () { + this.sidebar_pos = $('.backend_theme_studio_sidebar .sidebar-here'); + if(this.sidebar) this.sidebar.destroy(); + if(!this.sidebarAdvanced){ + this.sidebarAdvanced = new AdvancedFeatures(this, 'global'); + this.sidebarAdvanced.prependTo(this.sidebar_pos); + } else { + this.sidebarAdvanced.$el.next().addClass('marg_main') + this.sidebarAdvanced.destroy(); + this.sidebarAdvanced = false; + } + }, + + onItemClick: function (ev) { + ev.stopPropagation(); + this.sidebar_pos = $('.backend_theme_studio_sidebar .sidebar-here'); + this.object = this.$(ev.currentTarget); + if(this.sidebarAdvanced) this.sidebarAdvanced.destroy(); + if (this.sidebar_view) { + this.sidebar.destroy(); + this.sidebar = new ThemeEditorSidebar(this, this.object); + this.sidebar.prependTo(this.sidebar_pos); + } else { + this.sidebar = new ThemeEditorSidebar(this, this.object); + this.sidebar.prependTo(this.sidebar_pos); + } + this.sidebar_view = true; + }, + + render: function () { + this.$('.items').html(''); + this.$('#view-name').html(''); + this.$('#view-para').html(''); + this.$('.colors').html(''); + var view = 'ThemeStudio.' + this.editMode + this.$('.items').html(core.qweb.render(view)); + this.$('#view-name').html(this.editMode.charAt(0).toUpperCase() + this.editMode.slice(1).replace('_', ' ')); + let para = `Style ${this.editMode.replace('_', ' ')} the way you want using the option available.Preview will be generated here` + this.$('#view-para').html(para); + }, + + colors: function(){ + this.$('.colors').html(''); + this.$('.items').html(''); + this.$('.colors').html(core.qweb.render('ThemeStudio.colors')) + } + + }); + + return ThemeEditor; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/theme_editor_sidebar.js b/backend_theme_infinito/static/src/js/theme_editor_sidebar.js new file mode 100644 index 000000000..d39e331d2 --- /dev/null +++ b/backend_theme_infinito/static/src/js/theme_editor_sidebar.js @@ -0,0 +1,239 @@ +odoo.define('backend_theme_infinito.theme_editor_sidebar', function (require) { +"use strict"; + + var Widget = require('backend_theme_infinito.ThemeStudioWidget'); + var Tools = require('backend_theme_infinito.Tools'); + var NewTools = require('backend_theme_infinito.NewTools'); + var StyleAdd = require('backend_theme_infinito.StyleAdd'); + var ajax = require('web.ajax'); + var core = require('web.core'); + var Dialog = require('web.Dialog'); + const { browser } = require("@web/core/browser/browser"); + var QWeb = core.qweb; + var ThemeEditorSidebar = Widget.extend({ + template: 'theme_editor_sidebar', + events: { + 'change #slider': '_onClickInput', + 'change #favcolor': '_onClickInput', + 'change #file': '_onClickInput', + 'change #text': '_onClickInput', + 'change #select': '_onClickInput', + 'change #presets': '_onPresetChange', + 'click .js_add_tool': '_OnAddStyle', + 'click .close_studio': '_Close', + 'click .custom .alignemet a img': 'alignText', + 'click .js_save_changes': '_onSaveChanges', + 'click .js_reset_changes': '_onResetChanges', + 'click .toggle-btn': 'toggleSidebar', + }, + init: function (parent, object) { + this._super.apply(this, arguments); + this.object = object; + this.editMode = parent.editMode; + this.added_tools = []; + this.current_tools = [], + this.parent = parent; + }, + willStart: async function(){ + this._super.apply(this, arguments); + await ajax.jsonRpc('/theme_studio/get_presets', 'call', {}) + .then((response) => { + this.presets = response; + }); + }, + start: function () { + this._super.apply(this, arguments); + this.$el.next().removeClass('marg_main'); + this.$el.find('#elem_name').html(this.object.data('name')) + this.renderTools(); + this.renderPresets(); + }, + renderPresets: function(){ + if(this.object && this.object.data('preset')){ + let preset_type = this.object.data('preset') + this.$el.find('.infinito-preset').removeClass('d-none'); + let content = ''; + for(let preset of this.presets[preset_type]){ + content += `` + } + this.$el.find('.infinito-preset select').html(content); + } + }, + _onPresetChange: function(ev){ + let index = ev.target.selectedIndex; + let elem = ev.target.children[index]; + let style = JSON.parse(elem.dataset.style); + let data = []; + let new_style = ''; + this.object.attr('style', ''); + this.$el.find('.infinito-remove').remove(); + for(let rule in style){ + new_style += `${rule}: ${style[rule]} !important;` + data.push([rule, style[rule]]); + } + this.object.attr('style', new_style) + this.renderExistingTool(data); + }, + _Close: function() { + this.$el.css('width', '0'); + this.$el.parent().next().css('margin-left', '0') + }, + alignText: function(ev){ + ev.stopPropagation(); + let elem = this.$(ev.target).parent(); + this.object.attr('style', `${elem.data('type')}: ${elem.data('align')}`) + }, + _onClickSidebarItem: function (ev) { + var $target = $(ev.currentTarget); + }, + renderTools: function () { + var self = this; + this.$('.tools').html(''); + this.tools = this.tool || new Tools(this, this.object).render(); + ajax.jsonRpc('/theme_studio/get_current_style', 'call', { + 'selector': '.'+this.object[0].dataset.class, + }).then(function (data) { + if(data){ + self.renderExistingTool(data); + } + }); + this.saveData(); + }, + _OnAddStyle: function(){ + new StyleAdd(this, NewTools.property, this.current_tools).open(); + }, + _onSaveChanges: function(){ + var self = this; + new Dialog(this, { + title: "Save Changes", + $content: QWeb.render('backend_theme_infinito.saveChanges'), + buttons: [{text: 'Save', classes: 'btn-primary', close: true, click: async function () { + var styles = this.$el.find('input:checked'); + for(var style of styles){ + await self._onClickApply(style.name); + } + await self.setAssets(); + + }}, {text: 'Discard', close: true}], + }).open(); + }, + _onResetChanges: function(){ + this.object.attr('style', ''); + this.$el.find('.infinito-remove').remove(); + this.renderTools(); + }, + _onClickInput: function(ev){ + var input_value, new_attr = ''; + var input_type = $(ev.currentTarget).attr('name'); + var all_alts = [input_type]; + var unit = $(ev.currentTarget).data('unit'); + var alt = $(ev.currentTarget).data('alt').split(','); + if($(ev.currentTarget).attr('type') == 'range'){ + let value = $(ev.currentTarget).val(); + if(unit){ + value += unit; + } + value = $(ev.currentTarget).val() == '-1' ? 'infinite' : value; + $(ev.currentTarget).next().html(value); + } + if (unit) { + input_value = $(ev.currentTarget).val()+ unit + ' !important;'; + } else { + input_value = $(ev.currentTarget).val() + ' !important;'; + } + input_value = $(ev.currentTarget).val() == '-1' ? 'infinite !important;' : input_value; + var style = input_type + ': ' + input_value; + for (var i = 0; i < alt.length; i++){ + if (alt[i] != ''){ + style += alt[i] + input_type + ': ' + input_value; + all_alts.push(alt[i] + input_type) + } + } + var attr = this.object.attr('style'); + if(attr){ + attr = attr.split(';').filter(function(atr){ + if(!all_alts.includes(atr.split(':')[0]) && atr.split(':')[0] != ''){ + new_attr += atr + ';' + } + }); + } + this.object.attr('style', new_attr + style); + this.object.data('style', new_attr + style); + }, + _onClickApply: async function(data){ + var styles = this.object[0].style; + var changed_styles = []; + for (var i = 0; i < styles.length; i++) { + changed_styles.push(styles[i]); + } + var changed_style_json = {}; + for (var i in changed_styles) { + changed_style_json[changed_styles[i]] = styles[changed_styles[i]]; + } + await ajax.jsonRpc('/theme_studio/save_styles', 'call', { + 'changed_styles': JSON.stringify(changed_style_json), + 'object_class': this.object[0].dataset.class, + 'hover': data == 'hover' ? true : false, + }); + }, + renderNewTool: function(tool, val=null){ + if(tool){ + var value = this.getDefaultValue(tool.name); + if(val){ + value = val; + } + if(tool.type == 'range'){ + value = value.replace(/[^0-9,.]+/g, "") + } + tool.default = value; + var content = QWeb.render('backend_theme_infinito.'+tool.type, { + widget: tool, + }); + var elmnt = this.$el.find('.button_cutomise').append(content); + if(tool.type == 'select'){ + elmnt.find('select').val(value) + } + } + }, + renderExistingTool: function(data){ + for(var rule of data){ + var current = NewTools.property.filter(tool => tool.name == rule[0].replace(' ', '')); + this.current_tools.push(rule[0].replace(' ', '')); + this.renderNewTool(current[0]); + } + }, + getDefaultValue: function(property){ + var val = window.getComputedStyle(this.object[0]).getPropertyValue(property); + if(val.includes('rgb')){ + var rgb = val.match(/\d+/g); + val = rgbToHex(rgb[0], rgb[1], rgb[2]); + } + return val + }, + setAssets: function(){ + browser.location.search = "?debug=assets"; + }, + saveData: function () { + this._super.apply(this, arguments); + }, + + toggleSidebar: function(ev){ + this.$el.toggleClass('sidebar-hider-infinito'); + this.$el.next().toggleClass('marg_main'); + } + + }); + + function componentToHex(c) { + c = parseInt(c); + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + function rgbToHex(r, g, b) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + } + + return ThemeEditorSidebar; + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/theme_studio_action.js b/backend_theme_infinito/static/src/js/theme_studio_action.js new file mode 100644 index 000000000..c37a80c2d --- /dev/null +++ b/backend_theme_infinito/static/src/js/theme_studio_action.js @@ -0,0 +1,32 @@ +odoo.define('backend_theme_infinito.theme_studio_action', function (require) { +"use strict"; + + var AbstractAction = require('web.AbstractAction'); + var core = require('web.core'); + var ThemeEditor = require('backend_theme_infinito.theme_editor'); + + var ThemeStudioAction = AbstractAction.extend({ + init: function(parent, context, options) { + this._super.apply(this, arguments); + this.action = context.action; + this.title = 'Theme Studio'; + }, + + start: function() { + this.theme_editor = new ThemeEditor(this, this.action); + this.theme_editor.appendTo(this.$('.o_content')); + $('header').hide(); + $('body').removeClass('dark-mode'); + $(".o_action_manager").css({ + 'margin': '0', + 'transition':'all .3s linear', + 'border-radius': '0', + 'padding': '0' + }); + }, + + }); + + core.action_registry.add('action_theme_studio', ThemeStudioAction); + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/js/timepicker.js b/backend_theme_infinito/static/src/js/timepicker.js new file mode 100644 index 000000000..ff2e1f63e --- /dev/null +++ b/backend_theme_infinito/static/src/js/timepicker.js @@ -0,0 +1,113 @@ +odoo.define('backend_theme_infinito.timepicker', function (require) { + "use strict"; +var session = require('web.session'); +var Widget = require('backend_theme_infinito.ThemeStudioWidget'); + + +var TimePicker = Widget.extend({ + template: 'theme_advance', + events: { + 'click #tp-set': 'set', + 'click #tp-close': 'close', + }, + init: function (parent){ + this._super.apply(this, arguments); + this.parent = parent; + }, + start:function(){ + this._super.apply(...arguments) + this.hhr = this.$el.find('#tp-hr')[0]; + this.hmin = this.$el.find('#tp-min')[0]; + for (let segment of ["hr", "min"]) { + let up = this.$el.find(`#tp-${segment} .tp-up`)[0]; + let down = this.$el.find(`#tp-${segment} .tp-down`)[0]; + this["h"+segment] = this.$el.find(`#tp-${segment} .tp-val`)[0]; + up.onmousedown = () => { this.spin(true, segment); }; + down.onmousedown = () => { this.spin(false, segment); }; + up.onmouseup = () => { this.spin(null); }; + down.onmouseup = () => { this.spin(null); }; + up.onmouseleave = () => { this.spin(null); }; + down.onmouseleave = () => { this.spin(null); }; + } + this.timer = null; + this.minhr = 1; + this.maxhr = 12; + this.minmin = 0; + this.maxmin = 59; + this.setfield = null; + this.set24 = false; + this.setafter = null; + }, + spin: function(direction, segment) { + if (direction==null) { if (this.timer!=null) { + clearTimeout(this.timer); + this.timer = null; + }} + else { + let next = +this["h"+segment].innerHTML; + next = direction ? next+1 : next-1; + if (segment=="hr") { + if (next > this.maxhr) { next = this.maxhr; } + if (next < this.minhr) { next = this.minhr; } + } else { + if (next > this.maxmin) { next = this.maxmin; } + if (next < this.minmin) { next = this.minmin; } + } + if (next<10) { next = "0"+next; } + this["h"+segment].innerHTML = next; + this.timer = setTimeout(() => { this.spin(direction, segment); }, 100); + } + }, + attach: function(instance) { + instance.target.readOnly = true; + instance.target.setAttribute("autocomplete", "off"); + if (instance["24"]==undefined) { instance["24"] = false; } + this.show(instance); + }, + show: function(instance){ + this.setfield = instance.target; + this.setafter = instance.after; + this.set24 = instance["24"]; + this.minhr = this.set24 ? 0 : 1 ; + this.maxhr = this.set24 ? 23 : 12 ; + let val = this.setfield.value; + if (val=="") { + this.hhr.innerHTML = instance.time.substring(0, 2); + this.hmin.innerHTML = instance.time.substring(3, 5); + } else { + this.hhr.innerHTML = val.substring(0, 2); + if (this.set24) { + this.hmin.innerHTML = instance.time.substring(3, 5); + } else { + this.hmin.innerHTML = val.substring(3, 5); + } + } + if (this.set24) { this.$el.addClass("tp-24"); } + else { this.$el.removeClass("tp-24"); } + this.$el.addClass("show"); + }, + set: function(e){ + if (this.set24) { + this.setfield.value = this.hhr.innerHTML + ":" + this.hmin.innerHTML; + if(this.setfield.id == 'time1'){ + this.parent.onChangeTime({target: this.setfield}); + } else { + this.parent.onChangeTime2({target: this.setfield}); + } + } else { + this.setfield.value = this.hhr.innerHTML + ":" + this.hmin.innerHTML; + } + this.$el.removeClass("show"); + if (this.setafter) { this.setafter(this.setfield.value); } + }, + setPosition:function(left, bottom){ + this.$el.find('#tp-box')[0].style.left = left; + this.$el.find('#tp-box')[0].style.bottom = bottom; + }, + close: function(e){ + this.$el.removeClass("show"); + } +}); + return TimePicker; + +}); diff --git a/backend_theme_infinito/static/src/js/variables.js b/backend_theme_infinito/static/src/js/variables.js new file mode 100644 index 000000000..98acf5a9c --- /dev/null +++ b/backend_theme_infinito/static/src/js/variables.js @@ -0,0 +1,99 @@ +odoo.define('backend_theme_infinito.variables', function (require) { + "use strict"; + + var variables = { + "--bg_white": [1, 1], + "--bg_black": [5, 1], + "--bg_grey": [1, 20], + "--bg_grey_white": [1, 10], + "--dark_bg_grey": [1, 30], + "--light_bg_color": [1, 12], + "--nav_bar_color": [5, 20], + "--nav_font_color": [1, 1], + "--primary_accent": [2, 20], + "--primary_hover": [2, 10], + "--primary_btn_hover": [2, 10], + "--primary_btn_hover_border": [2, 1], + "--dark_primary_accent": [2, 10], + "--darker_primary_accent": [2, 1], + "--light_primary_accent": [2, 30], + "--lighter_primary_accent": [1, 15], + "--secondary_accent": [3, 1], + "--secondary_color": [3, 10], + "--secondary_btn": [3, 15], + "--secondary_btn_hover": [3, 20], + "--secondary_btn_hover_border": [3, 25], + "--dark_secondary_btn_hover_border": [3, 30], + "--light_secondary_btn": [1, 15], + "--custom_green": [2, 30], + "--success-color": [2, 5], + "--dark_success-color": [1, 35], + "--success-bg-color": [1, 30], + "--light_custom_green": [2, 40], + "--custom_red": [4, 10], + "--custom_red_hover": [4, 20], + "--custom_red_hover_border": [4, 18], + "--dark_custom_red_hover_border": [4, 13], + "--danger-bg-color": [1, 5], + "--danger-color": [4, 1], + "--dark_danger-color": [1, 5], + "--custom_rose": [4, 25], + "--bg_blue": [2, 40], + "--bg_blue_hover": [2, 45], + "--dark_bg_blue_hover": [2, 50], + "--info_color": [2, 55], + "--info-color": [2, 35], + "--info-bg-color": [1, 25], + "--dark_info-color": [1, 20], + "--warning-bg-color": [1, 5], + "--warning-color": [5, 1], + "--bg_yellow": [5, 10], + "--bg_yellow_hover": [5, 80], + "--dark_bg_yellow_hover": [5, 80], + "--dark_warning-color": [1, 5], + } + + let colors = [ + ['F9F9F8', 'E29E51', '94B1B3', '9A6B59', '2A373D'], + ['F4F6F6', '7D807E', '9DACC2', '738093', '34383A'], + ['EEF1F0', 'AFA378', '82AAAE', '937D54', '3D604C'], + ['FBF9F8', 'A9A3C0', '7BB3D5', '31A7DD', '242E4D'], + ['fefefe', 'EEE2DC', 'BAB2B5', '123C69', 'AC3B61'], + ['fefefe', '116466', 'D9B08C', 'FFCB9A', 'D1E8E2'], + ['EFE9E7', '997C55', 'C39247', '93391E', '121213'], + ['EDECE7', '98A1AD', 'F35256', 'C69182', '252029'], + ['fefefe', 'D1D2CD', '9D8FB9', 'BEBFE8', '385EA9'], + ['F3F0F0', '797075', '986351', '7B4E46', '2C2B30'], + ['F9F8F8', '93BBB8', '2BA699', 'A59D4E', '335A43'], + ] + + function to_color(cwith2, aaa) { + var p1_x = Math.round(aaa * 255 / 100); + var p2_x = Math.round(aaa * 255 / 100); + var p3_x = Math.round(aaa * 255 / 100); + var r = parseInt(cwith2.substring(0,2), 16); + var g = parseInt(cwith2.substring(2,4), 16); + var b = parseInt(cwith2.substring(4,6), 16); + var r_r = Math.abs(r - p1_x); + var r_g = Math.abs(g - p2_x); + var r_b = Math.abs(b - p3_x); + var result = rgbToHex(r_r, r_g, r_b) + return result; + } + + function componentToHex(c) { + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + function rgbToHex(r, g, b) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + } + + return { + variables: variables, + colors: colors, + to_color: to_color, + } + +}); \ No newline at end of file diff --git a/backend_theme_infinito/static/src/json/presets.json b/backend_theme_infinito/static/src/json/presets.json new file mode 100644 index 000000000..c4071b562 --- /dev/null +++ b/backend_theme_infinito/static/src/json/presets.json @@ -0,0 +1,73 @@ +{ + "button": [ + { + "name": "Default", + "style": { + "background-color": "var(--primary_accent)", + "border-width": "0", + "border-style": "", + "border-color": "", + "border-top-left-radius": "0", + "border-top-right-radius": "0", + "border-bottom-right-radius": "0", + "border-bottom-left-radius": "0", + "color": "var(--bg_white)" + } + }, + { + "name": "Rounded", + "style": { + "background-color": "var(--primary_accent)", + "border-radius": "30px", + "color": "var(--bg_white)" + } + }, + { + "name": "Half Rounded", + "style": { + "background-color": "var(--primary_accent)", + "border-top-left-radius": "0px", + "border-top-right-radius": "20px", + "border-bottom-right-radius": "0px", + "border-bottom-left-radius": "20px", + "color": "var(--bg_white)" + } + }, + { + "name": "Outline", + "style": { + "background-color": "#fff", + "border-width": "1px", + "border-style": " solid", + "border-color": " var(--primary_accent)", + "color": "var(--primary_accent)", + "border-radius": "0" + } + }, + { + "name": "Rounded Outline", + "style": { + "background-color": "#fff", + "border-width": "1px", + "border-style": " solid", + "border-color": " var(--primary_accent)", + "border-radius": "30px", + "color": "var(--primary_accent)" + } + }, + { + "name": "Half Rounded Outline", + "style": { + "background-color": "#fff", + "border-width": "1px", + "border-style": " solid", + "border-color": " var(--primary_accent)", + "border-top-left-radius": "0px", + "border-top-right-radius": "20px", + "border-bottom-right-radius": "0px", + "border-bottom-left-radius": "20px", + "color": "var(--primary_accent)" + } + } + ] +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/app_menu.scss b/backend_theme_infinito/static/src/scss/app_menu.scss new file mode 100644 index 000000000..d03593077 --- /dev/null +++ b/backend_theme_infinito/static/src/scss/app_menu.scss @@ -0,0 +1,263 @@ + +.landing * { + list-style-type: none; + font-family: "Poppins", sans-serif; + font-size: 16px; + color: #212529; +} + +.landing { + //background-color: var(--white-color); + background: #ffff; + height: 100vh; +} +.oe_topbar_name{ + margin-left: 12px !important; +} +.dropdown-toggle{ +margin-left:5px !important; +} +.o_user_menu{ +margin-left: 20px !important; +} +.landing .wrapper { + padding-top: 70px; +} + +.landing .wrapper .user_img { + max-width: 100px; + margin: auto; +} + +.landing .wrapper .user_img img { + width: 100%; + border-radius: 50%; +} + +.landing .wrapper .greeting { + padding-top: 15px; + text-align: center; + font-weight: 600; + font-size: 28px; +} + +.landing .wrapper .search_bar .input-group { + box-shadow: 0px 0px 16px -2px #e8e8e8; + //background-color: var(--white-color); + background-color: #ffff; + width: 70%; + margin: auto; +} + +.landing .wrapper .search_bar .input-group .form-control { + box-shadow: none !important; + outline: none !important; + font-size: 13px !important; + padding: 6px 10px; + //color: var(--text-color-1) !important; + color: #707277 !important; + border: none !important; + //background-color: var(--white-color); + background-color: #ffff; + height: 50px; +} + +.landing .wrapper .search_bar .input-group .input-group-append .btn-outline-secondary { + padding: 10px 20px; + background-color: transparent !important; +} + +.landing .wrapper .search_bar .input-group .input-group-append .btn-outline-secondary i { + color: #1c1818; +} + +.apps { + margin-top: 40px; + margin-left: 100px; + margin-right: 100px; +} + +.apps ul { + padding-top: 20px; + display: flex; + padding-left: 0; + justify-content: center; + flex-wrap: wrap; +} + +.apps ul li { + margin: 5px 13px; + padding: 2px 10px 2px 10px; + width: 125px; +text-align: center; +} + +.apps ul li a { + //color: var(--sub-color-i-3); + color: #3f454f; + text-decoration: none; +} + +.apps ul li a .img_wrapper { + max-width: 50px; + margin: auto; +} + +.apps ul li a .img_wrapper img { + width: 100%; +} + +.apps ul li a p { + font-size: 14px; + font-weight: 500; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + padding-top: 8px; +} + +.o_main_navbar .dropdown-menu .show { + max-height: auto !important; + min-width: 100%; + overflow: auto; + margin-top: 0; + position: static; + top: 0; + display: flex; + box-shadow: none; + border: none; + flex-wrap: wrap; + flex-direction: row; + overflow: unset; +} +.o_main_navbar .dropdown-menu.show { + max-height: none !important; + min-width: 100%; + overflow: auto; + margin-top: 0; +} +.dropdown-item.o_app.mt0 { + flex-basis: 20%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + margin-bottom: 23px; +} +.fullscreen-menu { + height: 100vh !important; + min-width: 100% !important; + overflow-y: auto !important; + overflow-x: hidden !important; + margin-top: 0 !important; + position: fixed !important; + top: 0px !important; + left: -1px !important; + padding: 2.5rem 0 !important; +} +.fullscreen-menu > .search-container > button.fullscreen-close { + position: absolute; + top: -55%; + left: -22%; + border-style: none; + background: transparent; + color: black; + font-size: 2rem; + opacity: 1; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + @media (max-width: 768px) { + position: absolute; + top: -45px; + left: 20px !important; + } + @media (max-width: 992px) { + position: absolute; + top: -45px; + left: 0px; + } +} +.fullscreen-menu > .search-container { + margin-top: 30px !important; +} +.app-menu { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + margin: 0 auto; + @media (max-width: 767.98px) { + .dropdown-item { + padding: 0px !important; + } + } +} +.app_bar .app_container a:hover { + background: red !important; +} +.app_bar .app_container .scroll_container .app_items_wrapper .app_items { + background-color: #ffffff; +} +.app_bar .app_container .scroll_container .app_items_wrapper .app_items .o-app-icon { + width: 32px; + height: 32px; + border-radius: 0px; +} +.a_app_menu_title { + color: white !important; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.50); + font-size: 14px; +} +.o-menu-search-result.dropdown-item.col-12.ml-auto.mr-auto { + background-repeat: no-repeat; + background-size: 23px; + padding-left: 40px; + margin-bottom: 5px; +} +.search-container.has-results { + height: 100%; + .search-input { + height: 3em; + } + .search-results { + height: calc(100% - 3em); + overflow: auto; + } +} +@media screen and (max-width: 992px){ + .apps { + margin-left: 0; + margin-right: 0; + } + .landing .wrapper { + padding-top: 0px; + } +} +@media (min-width: 768px) { + .search-container { + width: 750px; + margin: 0 auto; + } +} +@media (max-width: 768px) { + .app-menu { + width: 100%; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + justify-content: flex-start; + margin: 0 auto; + } +} +@media (max-width:767px) { + .dropdown-menu.show { + display: block; + border-radius:0; + } +} +@media (max-width:524px) { + div.app-menu *::before { + box-sizing:none; + } + div.app-menu *::after { + box-sizing:none; + } +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/extra_styles.scss b/backend_theme_infinito/static/src/scss/extra_styles.scss new file mode 100644 index 000000000..b54a5be34 --- /dev/null +++ b/backend_theme_infinito/static/src/scss/extra_styles.scss @@ -0,0 +1,240 @@ +.dark-mode { + filter: invert(100%); + img { + filter: invert(1) !important; + } + .o_kanban_image_inner_pic{ + filter: invert(0) !important; + } + .o_kanban_image_fill_left { + filter: invert(1) !important; + } +} + +#tp-wrap * { + font-family: arial, sans-serif; + box-sizing: border-box; +} +#tp-wrap *::selection { + background: transparent; +} +#tp-wrap { + width: 100vw; height: 100vh; + position: fixed; top: 0; left: 0; z-index: 999; + opacity: 0; visibility: hidden; + transition: opacity 0.3s; +} +#tp-wrap.show { + opacity: 1; visibility: visible; +} + +#tp-box { + position: absolute; + top: 78%; + left: 40%; + transform: translate(-50%, -50%); + width: 320px; + display: flex; flex-wrap: wrap; + box-shadow: 0px 0px 20px 5px #888; + background: $bg_white !important; +} + +.tp-cell { + width: 33.3%; padding: 0 15px; + text-align: center; +} +.tp-up, .tp-down { + padding: 10px 0; + color: $primary_accent; + font-size: 32px; font-weight: 700; + cursor: pointer; +} +.tp-val { + width: 100%; padding: 10px 0; + text-align: center; font-size: 22px; + background: #fff; +} + +#tp-close, #tp-set { + width: 50%; padding: 15px 0; border: 0; + font-size: 18px; font-weight: 700; + color: #fff; cursor: pointer; +} +#tp-close { + background: $secondary_btn; +} +#tp-set { + background: $primary_accent; +} + +#tp-wrap.tp-24 #tp-ap { + display: none; +} +#tp-wrap.tp-24 #tp-hr, #tp-wrap.tp-24 #tp-min { + width: 50%; +} + +.widget-wrap { + width: 500px; + padding: 30px; + border-radius: 20px; + background: rgba(255, 255, 255, 0.5); +} +.widget-wrap label, .widget-wrap input { + display: block; + padding: 10px; + width: 100%; +} + +#hash { + width: 100px; height:100px; + background-image: url('data:image/svg+xml;utf8,'); + background-repeat: no-repeat; + background-position: center; +} + +#code-boxx { + font-weight: 600; + margin-top: 30px; + a { + display: inline-block; + padding: 5px; + text-decoration: none; + background: #b90a0a; + color: #fff; + } +} + +.o_cp_top .btn-bookmark { + border-color: $dark_secondary_btn_hover_border; + border: 1px solid; + &.active { + color: $bg_yellow !important; + } +} + +.menu-bookmark { + position: absolute; + z-index: 999; + background-color: $bg_white; + display: none; + right: 0; + top: 20vh; + bottom: 10vh; + min-height: 30vh; + height: min-content; + width: 5vw; + box-shadow: 0px 0px 10px 0px #888; + border-radius: 8px; + padding: 20px 15px; + .menu-wrapper { + display: flex; + flex-direction: column; + align-items: start; + width: 100%; + margin-bottom: 15px; + .heading { + padding: 5px 0; + color: #253237; + width: 100%; + font-weight: 700; + border: 1px solid; + border-color: transparent; + border-bottom-color: rgb(193, 193, 193); + position: relative; + margin-bottom: 15px; + letter-spacing: .1rem; + &::after { + left: 0; + content: ""; + position: absolute; + background-color: black; + height: 1px; + width: 17px; + bottom: -1px; + } + } + .menu { + padding: 5px 10px; + color: #181818; + margin-bottom:8px; + text-decoration: none; + position: relative; + + .full{ + display: flex; + justify-content: space-between; + align-items: center; + } + img{ + width: 15px; + margin-right: 8px; + } + svg{ + fill: #2250fc !important; + } + &::after { + content: " "; + height: 29px; + width: 1px; + background-color: #2250fc; + position: absolute; + left: 1px; + top: 0; + opacity: 0; + } + &:hover { + background-color: #eaeaea; + &::after { + opacity: 1; + } + } + .full { + display: none; + } + } + } + &:hover { + width: 8vw; + .menu { + .full { + display: inline; + } + .small { + display: none; + } + } + } +} +.scale-up-tr { + -webkit-animation: scale-up-tr .4s cubic-bezier(.755, .05, .855, .06) both; + animation: scale-up-tr .4s cubic-bezier(.755, .05, .855, .06) both +} +@-webkit-keyframes scale-up-tr { + 0% { + -webkit-transform: scale(.5); + transform: scale(.5); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0 + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0 + } +} +@keyframes scale-up-tr { + 0% { + -webkit-transform: scale(.5); + transform: scale(.5); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0 + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0 + } +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/responsive.scss b/backend_theme_infinito/static/src/scss/responsive.scss new file mode 100644 index 000000000..9c001cb96 --- /dev/null +++ b/backend_theme_infinito/static/src/scss/responsive.scss @@ -0,0 +1,268 @@ +.o_cp_bottom { + justify-content: space-between; +} +@media (max-width: 1371px) { + nav.o_main_navbar { + display: flex; + height: auto; + } + ul.o_menu_systray.topbar_icon { + margin-left: auto; + } +} +@media (max-width: 992px) { + .o_action_manager.sidebar_margin { + margin: 0 !important; + } + .top_heading.sidebar_margin { + margin: 0 !important; + } + div.o_menu_sections_more .o-dropdown--menu { + position: fixed !important; + } + .sidebar_panel .sidebar { + position: relative; + padding-top: 0px !important; + } + .sidebar_panel .sidebar_close { + display: block !important; + } +} +@media (max-width: 767px) { + .o_form_view .o_group { + width:100% !important; + } + .dropdown-menu.show { + display: block; + border-radius:0; + } + .breadcrumb{ + background-color: transparent !important; + } + .o_control_panel .breadcrumb > li { + display: inline-block; + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: top; + } +// .o_control_panel .o_cp_top_right { +// display: none; +// } + .o_form_view .o_form_sheet_bg > .o_form_sheet { + min-width: 100%; + max-width: 100%; + min-height: 100%; + border: 1px solid #c8c8d3; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + background: white; + margin: 4.8px auto; + padding: 24px; + padding-right: 16px; + padding-left: 16px; + } + .oe_topbar_name { + display:none; + } + .nav-container { + position: relative; + width: 100vw !important; + display: flex; + align-items: start; + margin-top: 2rem; + } +// .o_cp_top { +// flex-wrap: wrap !important; +// } + .o_cp_top_left, .o_cp_searchview { + width: 100%; + } + .o_cp_top_right { + width: 100%; + margin: 1.5rem auto; + margin-left: 0 !important; + } + //Search Panel + .o_content .o_controller_with_searchpanel, .o_controller_with_searchpanel { + display:flex !important; + flex-direction: column !important; + } + .o_search_panel { + display: flex; + overflow-x: auto; + overflow-y: auto; + height: 200px; + width: 100%; + section { + margin-right: 1rem; + } + } + .o_search_panel section { + width: 100% !important; + } + .o_setting_container { + display: flex; + flex-direction: column; + } + .settings_tab { + display: flex; + flex-direction: row !important; + overflow-x: auto; + height: 40px; + } + .settings { + margin-top: 1.5rem; + } + .o_kanban_view.o_kanban_ungrouped .o_kanban_record { + margin: 2px 2px 2px 2px; + } + .o_Message .o_Message_content div p a { + background-color: var(--button-bg) !important; + } +} +@media (max-width: 575.98px) { + .o_main_navbar .o_menu_sections { + max-width: 200px; + overflow-x: auto; + flex-wrap: nowrap !important; + } + .o_search_panel { + flex: auto; + } +} +@media (max-width:524px) { + .o_control_panel .o_cp_bottom_right > .o_cp_pager { + margin-top:5px; + margin-bottom:5px; + } + div.app-menu *::before { + box-sizing:none; + } + div.app-menu *::after { + box-sizing:none; + } +} +@media (max-width:493px) { + .o_control_panel .o_cp_bottom_left > .o_cp_action_menus { + margin-left: 0px; + padding-right: 10px; + } +} +@media (max-width: 480px) { + ul.o_menu_apps { + padding-left: 25px; + } +// .o_control_panel { +// margin: 15px 10px 0 10px; +// } + .o_control_panel > div { + flex-wrap: wrap; + } + .o_cp_top_left, .o_cp_top_right, + .o_cp_bottom_left, .o_cp_bottom_right { + width: 100%; + } + .o_widget_Discuss .o_Discuss.o-mobile:not(.o-adding-item) { + border: none !important; + } + html .o_web_client > .o_action_manager { + overflow: auto !important; + } + ul.o_menu_systray.topbar_icon li:nth-child(1) { + margin-left: 20px; + } + .o_main_navbar .o_user_menu { + margin-left: 20px; + } + .sidebar_panel .sidebar .sidebar_logo img { + max-width: 112px; + } + .sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 5px; + } + li.o_switch_company_menu.show .dropdown-menu.dropdown-menu-right.show { + right: auto !important; + left: 0px; + } + ul.o_menu_systray.topbar_icon .dropdown-menu.show{ + left: 0px !important; + right: auto !important; + } + ul.o_menu_systray.topbar_icon { + margin-left: 0; + } + .o_MessagingMenu_dropdownMenu.o-mobile { + top: 70px; + } + .o_control_panel .o_cp_bottom_right { + flex-wrap: wrap; + } + .o_form_view .o_form_statusbar { + flex-wrap: wrap; + } +// .btn { +// padding: 2px 10px !important; +// height: 35px !important; +// } + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):before, + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):after { + border-top: 17px solid transparent !important; + border-bottom: 16px solid transparent !important; + } + .o_statusbar_status.o_field_widget.o_readonly_modifier { + width: 100%; + justify-content: end; + margin-top: 5px; + } + .o_form_view .o_form_statusbar > .o_statusbar_buttons > .btn { + margin: 1px 0px 4px 0; + } + .o_form_statusbar .o_statusbar_buttons .btn { + margin-right: 5px !important; + } + .o_control_panel .o_cp_bottom_left > .o_cp_action_menus .o_dropdown_toggler_btn { + margin-right: 3px; + } + .o_form_view .o_form_sheet_bg > .o_form_sheet { + min-width: auto; + } + .nav-tabs .nav-link { + padding: 8px; + } + .o_form_view .o_group .o_group_col_6 { + width: 100%; + } + .o_kanban_view.o_kanban_ungrouped .o_kanban_record { + flex-wrap: wrap; + } + .o_kanban_view .o_kanban_record.o_kanban_record_has_image_fill .o_kanban_image_fill_left { + border-radius: 5px; + } +} + +//news item + +@media screen and (max-width: 992px){ +.o_cp_top{ +display:block !important; +.o_cp_top_right{ +margin-top: 15px !important; +width: 100% !important; +} +} +} + +@media screen and (max-width: 768px){ + +.o_cp_bottom_left{ +padding-bottom: 15px !important; +} + + body .o_action_manager .o_action .o_control_panel .o_cp_bottom .o_cp_bottom_right, .o_action_manager .o_view_controller .o_control_panel .o_cp_bottom .o_cp_bottom_right { + display:block !important; + + } +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/sidebar.scss b/backend_theme_infinito/static/src/scss/sidebar.scss new file mode 100644 index 000000000..5731ed23f --- /dev/null +++ b/backend_theme_infinito/static/src/scss/sidebar.scss @@ -0,0 +1,404 @@ +// Sidebar and open-icon +a#closeSidebar, a#openSidebar { + margin-left: 10px; + color: white; +} +#sidebar_panel { + height: 100%; + position: fixed; +// background-color: $nav_bar_color; +// background-color: #17252A; + background-color: var(--tr-button-bg); + box-shadow: 0px 4px 11px 0px #888; + display: none; + width: 200px; + overflow-y: scroll; + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + z-index: 999; +} +#sidebar_panel::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari and Opera */ +} +.sidebar_panel .sidebar { + padding: 0; + white-space: nowrap; + padding-bottom: 20px; + padding-top: 5px; +} +.m-sidebar { + width: 100px !important; +} +.sidebar_panel .sidebar_close { + text-align: end; + display: none; + position: sticky; + height: 35px; + padding-top: 5px; + top: 0; + background: var(--tr-button-bg); + z-index: 1; +} +.sidebar_panel .sidebar_close a#closeSidebar { + font-size: 18px; + margin-right: 10px; + color: #ffffff; + opacity: .3; +} +.sidebar_panel .sidebar_close a#closeSidebar img { + width: 15px; +} +.sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 20px; +} +.sidebar_panel .sidebar .sidebar_logo img { + max-width: 150px; +} +.sidebar_panel .o_switch_company_menu { + display: none !important; +} + +.m-sidebar .sidebar .sidebar_logo .x-logo { + max-width: 98px; +} +.sidebar_panel .sidebar .sidebar_head { + padding-top: 20px; + padding-left: 15px; + color: #6a7187; + font-size: 14px; +} +.sidebar_panel .sidebar .sidebar_menu { + list-style: none; + margin: 0; + padding: 0; +} +.sidebar_panel .sidebar .sidebar_menu li { + margin: 0; + padding: 0; + border: 0px; + display: block; +} +.sidebar_panel .sidebar .sidebar_menu li a { + margin: 0; + border: 0px; + display: block; + cursor: pointer; + overflow: hidden; + padding: 8px 10px 8px 25px; + color: #514949; + font-size: 13px; + transition:.3s all; +} +.sidebar_panel .sidebar .sidebar_menu li:hover a { + background: #1e2230; + color: #fff; +} +.sidebar_panel .nav-link { + opacity: .5; + transition:.3s all; +} +.sidebar_panel .sidebar a.nav-link.active { + color: #000 !important; + opacity: 1; +} +.sidebar_panel .sidebar .sidebar_menu li a .sidebar_img { + width: 20px; + margin-right: 8px; +} + +.m-sidebar .sidebar .sidebar_menu li a .sidebar_img { + width: 40px; +} + +// Navbar style for Sidebar +.top_heading { + display: flex; + justify-content: flex-start; + align-items: center; + width: 100%; +} +.top_heading > a { + margin-left: 10px; +} +nav.o_main_navbar.small_nav { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + height: auto; +} +// Responsive +@media (max-width: 1371px) { + nav.o_main_navbar { + display: flex; + flex-wrap: wrap; + justify-content: right; + height: auto; + } + ul.o_menu_systray.topbar_icon { + margin-left: auto; + } +} +@media (max-width: 575.98px) { + .o_main_navbar .o_menu_sections { + max-width: 200px; + overflow-x: auto; + flex-wrap: nowrap !important; + } + .o_search_panel { + flex: auto; + } +} +@media (max-width:480px) { + ul.o_menu_apps { + padding-left: 25px; + } + .o_control_panel { + margin: 15px 10px 0 10px; + } + .o_control_panel > div { + flex-wrap: wrap; + } + .o_cp_top_left, .o_cp_top_right, + .o_cp_bottom_left, .o_cp_bottom_right { + width: 100%; + } + .sidebar_panel .sidebar .sidebar_logo img { + max-width: 112px; + } + .sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 5px; + } +} +@media (max-width:992px) { + .o_action_manager.sidebar_margin { + margin: 0 !important; + } + .top_heading.sidebar_margin { + margin: 0 !important; + } + .sidebar_panel .sidebar { + position: relative; + padding-top: 0px !important; + } + .sidebar_panel .sidebar_close { + display: block !important; + } +} + +.sidebar .o_menu_systray > *{ + display: none; + &:last-child{ + display: block !important; + max-width: 80px; + + .dropdown-toggle{ + padding-left: 15px !important; + display: flex; + align-items: center; + justify-content: flex-start; + } + .dropdown-toggle .oe_topbar_name{ +// display: none !important; + white-space: break-spaces; + color: #514949; + } + + @media (max-width: 767.98px) { + display: none !important; + } + } +} + +.m-sidebar .sidebar .oe_topbar_name{ + display: none !important; + +} + + + +.m-sidebar .sidebar .dropdown-toggle{ + justify-content: center; +} + +.sidebar .o_menu_systray .o_user_menu .dropdown-toggle{ + width: 100%; + background-color: transparent; + border: none; + height: 80px; + img{ + width: 40px; + height: 40px; + } + &:hover{ + background-color: var(--secoundary-hover) !important + } +} +.sidebar .o_menu_systray .o_user_menu .o-dropdown--menu { + display: flex; + top: 10px !important; + left: 80px !important; + overflow: visible; + z-index: 2; + + &:after{ + content: ''; + position: absolute; + display: block; + border-style: solid; + border-color: transparent #fff; + border-width: 10px 12px 10px 0; + top: 12%; + left: -12px; + } +} +.has-company .o_menu_systray .o_user_menu .o-dropdown--menu { + top: 85px !important; +} +.o_main_navbar .o_menu_systray{ + margin-right: 20px !important; +} +.o_main_navbar .o_MessagingMenu, +.o_main_navbar .o_mail_systray_item{ + margin-left: 10px !important; +} +// .o_main_navbar .o_user_menu{ +// display: none !important; +// @media (max-width: 768px) { +// display: block !important; +// } +// } +.o_main_navbar .o_menu_systray { + @media (max-width: 768px) { + margin-right: 0px !important; + } +} +.sidebar > .o_menu_systray > .o_user_menu{ + margin-left: 0px; +} +.o_menu_systray .dropdown-toggle:hover:hover { + background-color: var(--primary-hover) !important; + text-decoration: none !important; +} +.o_menu_sections_more .o-dropdown--menu{ + position: absolute !important; +} + +.recent-apps{ + display: flex; + justify-content: center; + position: relative; + .drag-infinito { + height: 30px; + width: 30px; + position: relative; + top: -62px; + background-color: white; + box-shadow: 0px 0px 5px 5px rgba(158, 158, 158, 0.15); + } + + .icon-tray { + z-index: 10; + background-color: $bg_white; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + cursor: pointer; + position: absolute; + bottom: 0; + display: flex; + box-shadow: 0px 0px 5px 5px rgba(158,158,158,0.15); + list-style: none ; + .icon { + text-align: center; + padding: 10px 0px; + width: 70px; + + + &:hover { + background-color: white; + text-decoration: none; + transition: all .2s ease-in-out; + + width: 80px; + &:first-child { + border-top-left-radius: 10px; + } + &:last-child { + border-top-right-radius: 10px; + } + & span { + display: block; + + margin-top: 15px; + } + & img { + display: none; + } + } + & span { + display: none; + color: #181818e7; + font-weight: 600; + + } + & img { + display: flex; + } + + &.active { + background: tomato; + mix-blend-mode: difference; + &:hover { + background-color: orangered; + } + &:first-child { + border-top-left-radius: 10px; + } + &:last-child { + border-top-right-radius: 10px; + } + } + .img_wrapper{ + max-width: 40px; + margin: auto; + img{ + width: 100%; + border-radius: 5px; + } + } + + } + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +@-webkit-keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + 50% { + opacity: 1; + } +} +@keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + 50% { + opacity: 1; + } +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/theme_date_picker.scss b/backend_theme_infinito/static/src/scss/theme_date_picker.scss new file mode 100644 index 000000000..5a43c2430 --- /dev/null +++ b/backend_theme_infinito/static/src/scss/theme_date_picker.scss @@ -0,0 +1,68 @@ +/* date time picker colour changes for the theme */ +.datepicker { + .table-sm { + > thead { + > tr > .prev { + color: $bg_white !important; + background-color: $primary_accent !important; + &:hover { + background-color: $dark_primary_accent !important; + } + > .fa { + color: $bg_white !important; + } + } + > tr > .next { + color: $bg_white !important; + background-color: $primary_accent !important; + &:hover { + background-color: $dark_primary_accent !important; + } + > .fa { + color: $bg_white !important; + } + } + > tr > .picker-switch { + color: $bg_white !important; + background-color: $primary_accent !important; + &:hover { + background-color: $dark_primary_accent !important; + } + } + } + > tbody > tr > td { + &.today:before { + border-bottom-color: $primary_accent !important; + } + &.active { + background-color: $primary_accent !important; + } + } + } +} +.picker-switch { + span.fa { + &.primary { + background-color: $primary_accent; + color: white; + &:hover { + background-color: $darker_primary_accent; + } + } + } +} + +.daterangepicker .drp-calendar .calendar-table thead tr:first-child { + color: $bg_white; + background-color: $primary_accent; +} + +.daterangepicker .drp-calendar .calendar-table tbody tr td:not(.off).active, +.daterangepicker .drp-calendar .calendar-table tbody tr td:not(.off).active:hover { + background-color: $primary_accent; +} + +.daterangepicker .drp-calendar .calendar-table thead tr:first-child th.prev:hover, +.daterangepicker .drp-calendar .calendar-table thead tr:first-child th.next:hover { + background-color: $darker_primary_accent; +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/theme_rtl.scss b/backend_theme_infinito/static/src/scss/theme_rtl.scss new file mode 100644 index 000000000..763f49fea --- /dev/null +++ b/backend_theme_infinito/static/src/scss/theme_rtl.scss @@ -0,0 +1,63 @@ +//RTL +.infinito-rtl { + *, *::after, *::before { + direction: rtl !important; + } + .o_main_navbar .o_menu_systray { + margin-right: auto !important; + } + .sidebar * { + direction: ltr !important; + } + .o_form_view .o_form_statusbar > .o_statusbar_status { + margin-left: 0; + flex-direction: row-reverse; + } + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before, + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::after { + rotate: 180deg; + left: -10px; + right: auto; + } + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before { + left: -11px; + right: auto; + } + .o_arrow_button { + padding-left: 10px; + padding-right: 25px; + } + .dropdown-toggle.btn.btn-light > * { + margin-left: 2px; + } + .o_form_view .oe_button_box + .oe_title, .o_form_view .oe_button_box + .oe_avatar + .oe_title { + width: 115px; + } + .o_control_panel .o_cp_bottom_left > .o_cp_action_menus { + margin-right: auto; + margin-left: 0; + } + .o_control_panel .o_cp_bottom_right > .o_cp_pager { + margin: auto auto auto 0; + } + .modal-header .close { + margin: -1rem -1rem -1rem 0; + } + .o_pager .btn-group { + direction: ltr !important; + } + .o_DiscussSidebarCategory_command:first-child { + margin-left: 5px; + } + .o-no-caret > i, button[aria-pressed="true"] { + margin-left: 4px; + } + .o_list_buttons.d-flex > * { + margin-left: 5px; + } + + .theme_editor * { + direction: ltr !important; + } + +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/theme_styles.scss b/backend_theme_infinito/static/src/scss/theme_styles.scss new file mode 100644 index 000000000..881e1570c --- /dev/null +++ b/backend_theme_infinito/static/src/scss/theme_styles.scss @@ -0,0 +1,1006 @@ +body { + background: var(--color-white) !important; +} +thead, tbody, tfoot, tr, td, th { + border-style: none !important; + padding:20px; +} +btn-fill-odoo:hover, .btn-odoo:hover { + background-color: #e9ecef !important; +} +.btn-light:hover, .o_form_view .o_statusbar_status .o_arrow_button:hover:not(.disabled) { + background-color: #e9ecef !important; +} +.o_DiscussSidebarMailbox_item { + color: #212529 !important; +} +.o_DiscussSidebarCategory_titleText { + color: #6c757d !important; +} +.o_record_selector .btn span{ +color:#017e84 !important; +} +.o_searchview_icon{ +color: var(--button-bg) !important; +} +.o_activity_view .o_activity_summary_cell.planned { + background-color: #28a745 !important; +} +.table-bordered{ +border: 1px solid #e9ecef !important; +} +.o_MessageList_emptyTitle{ + text-align: center !important; + font-style: italic !important; + color: rgba(73, 80, 87, 0.76) !important; +} +.o_DiscussSidebarCategoryItem_item{ +color: #212529 !important; +} + +.o_action_manager .o_action .o_content .o_list_renderer table tbody tr td, .o_action_manager .o_view_controller .o_content .o_list_view .table-responsive table tbody tr td{ +border: none !important; + padding: 15px 15px !important; + width: auto !important; + font-size: 14px !important; + font-weight: normal !important; + color: var(--text-color-1) !important; +} + + +.border-start { + border-left: none !important; +} +.border-bottom { + border-bottom: none !important; +} +.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove) { + display: table-cell !important; + max-width: 100% !important; + white-space: nowrap !important; + overflow: hidden !important; + text-overflow: ellipsis !important; + vertical-align: top !important; + color: var(--text-color-1) !important; +} +button ,.o_ChatterTopbar_button,.o_ChatterTopbar_buttonSendMessage,.btn{ +color:black !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_buttons > .btn { + min-height: 25px !important; + margin: 4px 3px 4px 0 !important; + padding-top: 2px !important; + padding-bottom: 2px !important ; +} +.dropdown-menu .dropdown-item.focus, .o-dropdown-menu .dropdown-item.focus { + background-color: var(--button-bg) !important; + color: white !important; +} +.o_ChatterTopbar_actions button{ +color: #495057 !important; +font-size: 15px !important; +} +.o_list_renderer .o_list_table thead th:not(.o_list_record_selector) { + border-left: none !important; +} +.btn-light, .o_form_view .o_statusbar_status .o_arrow_button:not(.disabled) { + color: black !important; +} +.table > :not(caption) > * > * { + border-bottom-width: 0px !important; +} +button, .o_ChatterTopbar_button, .o_ChatterTopbar_buttonSendMessage, .btn { + color: white !important; +} +.text-bg-primary { +border: 0; + font-size: 13px !important; + background-color: var(--tr-button-bg) !important; + font-weight: 500 !important; + display: inline-block !important; + max-width: 100% !important; + color: var(--button-bg) !important; + width: 100px !important; + text-align: center !important; + padding: 7px 5px !important; +} +.modal-body >.alert > .btn{ +color:red !important; +} +.o_field_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before{ +right: -11px; +border-left-color: var(--tr-button-bg) !important +} +.form-check-input:checked{ + background-color:var(--button-bg) !important; + border-color:#274d91 !important; +} +.dropend > .dropdown-item{ +color:#495057 !important; +} +.o_row > .fa-plus-square-o{ +background-color: white !important; +} +.o_lead_opportunity_form>.o_form_sheet_bg>.o_form_statusbar >.o_field_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::after { + content: " "; + display: block; + position: absolute; + top: 0px; + left: auto; + bottom: auto; + right: -12px; + border-right: none; + border-left: 14px solid #e6ecfc !important; + border-top: none !important; + border-bottom: none !important; + border-right: none; +} +.o_field_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::after { + content: " "; + display: block; + position: absolute; + top: 0px; + left: auto; + bottom: auto; + right: -12px; + border-top: 18px solid transparent !important; + border-bottom: 18px solid #ae0d0d00 !important; + border-right: none; + border-left: 14px solid #e6ecfc !important; +} +.o_field_statusbar > .o_statusbar_status > .o_arrow_button.o_arrow_button_current.disabled::after, .o_field_statusbar > .o_statusbar_status > .o_arrow_button.o_arrow_button_current.disabled::before { + border-left: 14px solid #5279be !important; + border-left-color: rgb(82, 121, 190); + border-left-style: solid; + border-left-width: 12px; +} +.o_wrap_field > .o_cell >.o_field_widget > .o_field_tags > .rounded-pill{ + background-color: var(--tr-button-bg) !important; + font-weight: 500 !important; + color: var(--button-bg) !important; + width: 148px !important; + text-align: center !important; + padding: 7px 5px !important; +} +.o_tag.o_tag_color_10 { + background-color: #30C381 !important; +} +.o_tag.o_tag_color_5 { + color: #FFFFFF !important; +} +.o_tag.o_tag_color_1{ + background-color: #F06050 !important; + color: #FFFFFF !important; +} +.o_tag.o_tag_color_4 { + background-color: #6CC1ED !important; + color: #000000 !important; +} +.o_tag.o_tag_color_6 { + background-color: #EB7E7F !important; + color: #000000 !important; +} +.o_tag.o_tag_color_2 { + background-color: #F4A460 !important; + color: #000000 !important; +} +.o_field_tags > .rounded-pill { + background-color: var(--tr-button-bg); + font-weight: 500 !important; + color: var(--button-bg); + width: 75px !important; + text-align: center !important; + padding: 7px 5px !important; +} +a >.text-success{ + color:green !important; +} +a >.text-warning{ +color: #9a6b01 !important; +} +.o_statusbar_status .o_arrow_button:not(.disabled){ +background-color: var(--tr-button-bg) !important; +} +a >.text-danger{ + color:red !important; +} + +:not(.o_field_x2many_list) > .o_list_renderer .o_list_table thead tr > :not(:empty), .o_list_renderer .o_list_table tfoot tr > :not(:empty) { + padding-top: var(--ListRenderer-thead-padding-v) !important; + padding-bottom: var(--ListRenderer-thead-padding-v) !important; +} +.o_list_renderer .o_list_table .o_column_sortable:not(.o_handle_cell) { + user-select: none !important; +} +.table > :not(caption) > * > * { + padding: 0.75rem 0.75rem !important; + background-color: var(--table-bg) !important; + box-shadow: inset 0 0 0 9999px var(--table-accent-bg) !important; +} +// Icon + +.fa{ + color:var( --button-bg) !important; +} + +.o_field_statusbar > .o_statusbar_status > .o_arrow_button.disabled:not(.o_arrow_button_current), .o_field_statusbar > .o_statusbar_status > .o_arrow_button.disabled:not(.o_arrow_button_current):hover, .o_field_statusbar > .o_statusbar_status > .o_arrow_button.disabled:not(.o_arrow_button_current):focus { + color: var(--button-bg) !important; + background: var(--tr-button-bg) !important; + padding: 9px 14px !important; +} + + +.o_field_statusbar > .o_statusbar_status > .o_arrow_button.o_arrow_button_current.disabled{ +color: white !important; +background-color: var(--button-bg) !important; +} +.o_ChatterTopbar_rightSection > .btn-primary{ +background-color:white !important; +} +.o_main_navbar { + // width: 98%; + background: #f3efef; + // margin: auto; + background: transparent !important; + height: 65px; + padding-top: 10px; + margin-top: 6px; + // margin-left: 20px; + // margin-right: 20px; + border: 1px solid transparent; + border-bottom-color: #e3e3e3; + .o_menu_brand { + color: var(--brand-1) !important; + font-size: 24px !important; + font-weight: 500; + &:hover { + color: var(--black-color) !important; + } + } + .dropdown-toggle { + color: var(--text-color-1) !important; + font-size: 15px !important; + } + .o_nav_entry { + color: var(--text-color-1); + font-size: 15px; + } + .o_menu_sections { + .o_nav_entry { + color: var(--text-color-1); + font-size: 15px; + } + } +} +.o_main_navbar, +.o_menu_systray, +.o_web_client>header { + margin-top: 0px !important; +} +.o_MessagingMenu_counter, +.o_notification_counter { + background: var(--button-bg) !important; + color: var(--white-color) !important; +} + +// Main body +.o_action_manager { + // margin-top: 25px !important; + // width: 98% !important; + // margin: auto; + .o_action, + .o_view_controller { + .o_control_panel { + border-bottom-color: transparent !important; + .o_cp_top { + margin-bottom: 10px !important; + justify-content: space-between; + } + .o_cp_top_left { + .breadcrumb { + .breadcrumb-item { + .text-900 { + color: var(--black-color) !important; + font-size: 26px !important; + font-weight: 600 !important; + } + } + } + } + .o_cp_top_right { + width: 40%; + .o_searchview { + background-color: var(--white-color); + border: none !important; + border-radius: 3px; + padding: 10px 26px 10px 8px; + -webkit-box-shadow: 0px 1px 12px 2px rgba(240, 240, 240, 0.93); + -moz-box-shadow: 0px 1px 12px 2px rgba(240, 240, 240, 0.93); + box-shadow: 0px 1px 12px 2px rgba(240, 240, 240, 0.93); + height: 40px; + .o_searchview_icon { + position: absolute; + top: 10px; + left: auto; + bottom: auto; + right: 16px; + font-size: 18px; + z-index: 999; + } + .o_searchview_input_container { + .o_searchview_facet { + border: none !important; + border: none !important; + background: var(--tr-button-bg) !important; + padding: 4px 8px; + border-radius: 6px; + color: var(--button-bg) !important; + margin-top: -3px; + .o_searchview_facet_label { + background: transparent !important; + color: var(--button-bg) !important; + } + .o_facet_remove { + color: var(--button-bg) !important; + top: 1px; + left: auto; + bottom: 0; + right: 3px; + } + } + } + } + } + .o_cp_bottom { + padding-top: 10px; + padding-bottom: 10px; + + .o_cp_pager{ + button{ + &:after{ + display: none !important; + } + } + } + .o_cp_bottom_left { + .o_cp_buttons { + .o_list_buttons {} + } + } + .o_cp_bottom_right { + width: auto !important; + display: contents !important; + .o_search_options { + :first-child {} + .o-dropdown--no-caret { + border-radius: 3px; + margin: 0px 3px; + background: var(--tr-button-bg) !important; + // padding: 4px 8px; + color: var(--button-bg) !important; + } + } + .o_cp_switch_buttons { + .btn-light { + border-radius: 3px; + background: var(--tr-button-bg) !important; + color: var(--button-bg) !important; + margin-left: 3px; + } + .active { + border-radius: 3px; + background: var(--tr-button-bg) !important; + color: var(--button-bg) !important; + } + } + } + } + } + .o_content { + // margin-top: 15px !important; + .o_list_view { + .o_dashboard_action{ + background:var(--button-bg) !important; + } + + .table-responsive { + table { + thead { + background: transparent !important; + border: none !important; + border-style: none !important; + th { + border: none !important; + border-style: none !important; + width: auto; + padding: 15px 15px; + font-size: 15px; + } + } + tbody { + tr { + td { + border: none !important; + padding: 15px 15px; + border-style: none !important; + width: auto; + font-size: 14px; + font-weight: normal !important; + color: var(--text-color-1) !important; + } + } + } + tfoot { + background: var(--white-color) !important; + border: none !important; + tr { + td { + border: none !important; + } + .o_list_number { + font-size: 16px !important; + } + } + } + } + table th:nth-child(7) { + text-align: center; + } + table td:nth-child(7) { + font-weight: 700 !important; + text-align: center; + } + } + } + .o_form_statusbar { + padding-bottom: 15px; + .o_statusbar_status { + button { + margin-right: 12px; + } + .o_arrow_button.btn-primary { + &:before { + display: none !important; + } + &:after { + content: " "; + display: block; + position: absolute; + top: 0px; + left: auto; + bottom: auto; + right: -12px; + border-top: 18px solid transparent !important; + border-bottom: 18px solid transparent !important; + border-right: none; + border-left: 12px solid #5279be !important; + } + } + } + } + .o_arrow_button.btn-secondary { + &:before { + display: none !important; + } + &:after { + content: " "; + display: block; + position: absolute; + top: 0px; + left: auto; + bottom: auto; + right: -12px; + border-top: 18px solid transparent !important; + border-bottom: 18px solid transparent !important; + border-right: none; + border-left: 12px solid #e6ecfc !important; + } + } + } + } +} +// Kanban view +.o_kanban_view { + .oe_kanban_card { + padding: 25px 15px; + border: none !important; + -webkit-box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + -moz-box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + background-color: white; + border-radius: 5px; + margin-bottom: 20px !important; + &:hover { + -webkit-transition: 0.5s; + transition: 0.5s; + box-shadow: 0 0 11px rgba(33, 33, 33, .2) !important; + } + .o_kanban_record_title { + font-size: 16px !important; + color: var(--sub-color-i-3) !important; + font-weight: 600 !important; + .o_field_number { + font-size: 16px !important; + color: var(--sub-color-i-2) !important; + font-weight: 600 !important; + } + } + } + .oe_module_vignette.o_kanban_record { + padding: 25px 15px; + border: none !important; + -webkit-box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + -moz-box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + background-color: white; + border-radius: 5px; + margin-bottom: 20px !important; + } +} +// Discuss +.o_Discuss_content { + .o_ThreadView_core { + .o_Message_prettyBody div p a { + background: var(--button-bg) !important; + } + } +} +// Calander +.o_calendar_container { + .fc-today { + background: var(--button-bg) !important; + } +} + + +// Contacts + +.o_form_sheet_bg{ + padding-top:20px; + .o_form_sheet{ + .oe_title { + .o_field_widget{ + margin-bottom:15px !important; + + .custom-radio{ + .o_form_label{ + padding-left: 5px !important; + padding-top: 2px; + } + } + } + } + } +} + + + + +// Attendances + +.o_hr_attendance_kiosk_mode_container{ + .o_hr_attendance_kiosk_backdrop{ + background:var(--white-color) !important; + } + .o_hr_attendance_kiosk_mode{ + box-shadow: 0 0 11px rgba(33, 33, 33, .2) !important; + + .o_hr_attendance_user_badge { + background: linear-gradient(to right bottom, #546bbf, #546bbf87); + } + + .o_hr_attendance_sign_in_out_icon{ + &:after{ + display:none !important; + } + } + } +} + + +// Settings + +.settings { + #invite_users_setting { + .o_setting_right_pane .d-flex { + display: unset !important; + } + } +} + +.o_base_settings { + .o_setting_container { + .settings_tab .selected { + box-shadow: inset 2px 0 0 var(--button-bg); + } + } +} + + +// Buttons +.btn { + display: inline-block; + font-weight: 400; + color: #495057; + text-align: center; + vertical-align: middle; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 13px; + line-height: 1.5; + border-radius: 3px; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + &-primary { + background-color: var(--button-bg) !important; + padding: 9px 20px; + font-size: 14px; + color: var(--white-color); + border: none !important; + } + &-secondary { + background: var(--tr-button-bg) !important; + margin-left: 7px !important; + color: var(--button-bg) !important; + padding: 9px 14px; + // &:after { + // content: " "; + // display: block; + // position: absolute; + // top: 0px; + // left: auto; + // bottom: auto; + // right: -10px; + // border-top: 19px solid transparent !important; + // border-bottom: 19px solid transparent !important; + // border-right: none; + // border-left: 11px solid #e6eafc !important; + // } + } + &-light { + color: var(--button-bg) !important; + .small { + font-size: 16px; + } + .mr-1 { + margin-right: 0.60rem !important; + } + span { + font-size: 15px; + } + &:hover { + background-color: transparent; + border-color: transparent; + } + } + &.o_external_button { + background:transparent !important; + } +// fa fa-external-link btn btn-secondary o_external_button + &-info { + color: var(--white-color); + background-color: #50a5f1 !important; + border-color: #50a5f1 !important; + &:hover { + color: var(--white-color); + background-color: #448ccd !important; + border-color: #4084c1 !important; + } + } + &-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + &:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; + } + } + &-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; + &:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; + } + } + &-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; + &:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; + } + } +} + + + +// Badges +.o_required_modifier .o_input{ +background:white !important; +border:none !important; +} +.o_input { + border-radius: 0px !important; + color: #1f1f1f; + background: var(--white-color) !important; + padding: 10px 4px !important; + margin-bottom: 10px !important; +} + +.rounded-pill{ +border: 0; + font-size: 14px; + user-select: none; + background-color: var(--tr-button-bg) !important; + font-weight: 500; + display: inline-block; + max-width: 100%; + width: 130px; + text-align: center; + padding: 7px 5px; +} +.o_tag.o_tag_color_5 { + color: #FFFFFF !important; +} +.o_facet_values{ +border: none !important; +} +.align-middle{ +border: none !important; + padding: 15px 15px !important; + font-size: 15px !important; +} +.o_list_renderer .o_list_table thead { + background-color: #fff !important; +} +.o_field_badge span, { +font-weight: 400 !important; +} +.o_kanban_renderer .o_kanban_record > div, .o_kanban_renderer .o_kanban_quick_create { + border: none; + background-color: white; +} +.btn-primary { + padding: 9px 20px !important; + font-size: 14px; + color: var(--white-color); + border: none !important; +} +.btn { + position: relative; + display: inline-block; + color: var(--white-color); + border: none; + border-radius: 3px !important; + outline: 0; + font-weight: normal; + text-align: center; + text-transform: capitalize; + cursor: pointer; +} +::placeholder { + opacity: 25 !important ; /* Firefox */ +} +.o_ActivityMenuView_counter{ +background-color: var(--button-bg) !important; +color:white !important; +} +.o_field_badge { + border: 0; + border-radius: 25px; + font-size: 14px; + user-select: none; + font-weight: 400; + display: inline-block; + max-width: 100%; + color: var(--button-bg) !important; + width: 130px; + text-align: center; + padding: 7px 5px; +} +.align-middle{ +padding:none !important; +} + +.badge-primary { + border: 0; + font-size: 13px; + background-color: var(--tr-button-bg) !important; + font-weight: 500; + display: inline-block; + max-width: 100%; + color: var(--button-bg) !important; + width: 100px; + text-align: center; + padding: 7px 5px; +} +.badge-default { + font-size: 12px; + color: var(--tr-button-bg) !important; + font-weight: 500; + display: inline-block; + background-color: var(--button-bg) !important; + padding: 7px 5px; +} + +// Input types and fields + +.o_form_label{ + font-size:14px !important; +} + +.o_input { +// border: 1px solid var(--border-color) !important; + border-radius: 0px !important; + color: #1f1f1f; + background:var(--white-color) !important; + padding: 10px 4px !important; + margin-bottom:10px !important; +} + +.o_required_modifier .o_input, +.o_required_modifier.o_input { +// background:var(--border-color2) !important; + +} +select.o_field_widget.o_input { + background:var(--border-color2) !important; + padding: 10px 4px !important; +} +.o_field_many2manytags{ + border: 1px solid transparent !important; + border-radius: 0px !important; + color: #1f1f1f; + background:var(--white-color) !important; + padding: 0px !important; + margin-bottom:10px !important; +} + +// .o_field_widget{ +// .btn-secondary{ +// background:transparent !important; +// } +// } + +.form-check{ + .form-check-label{ + &:before{ + color: #fff !important; + border-color: var(--button-bg) !important; + background-color: var(--button-bg) !important; + width: 1.5rem; + content: ""; + height: 1.5rem; + border-radius:2px !important; + } + &:after { + position: absolute; + top: 0.3125rem; + left: -1.5rem !important; + display: block; + width: 1.5rem !important; + height: 1.5rem !important; + content: ""; + background: no-repeat 50% / 50% 50%; + } + } +} + +.custom-radio { + .form-check-label{ + &:before{ + color: #fff; + border-color: var(--button-bg) !important; + background-color: var(--button-bg) !important; + width: 1.5rem; + height: 1.5rem; + border-radius:50% !important; + } + &:after { + position: absolute; + top: 0.3125rem; + left: -1.5rem !important; + display: block; + width: 1.5rem !important; + height: 1.5rem !important; + content: ""; + background: no-repeat 50% / 50% 50%; + } + } +} +:not(.o_field_x2many_list) > .o_list_renderer .o_list_table thead tr > :not(:empty), .o_list_renderer .o_list_table tfoot tr > :not(:empty) { + padding-left: 15px !important; +} +.o_list_record_selector{ + .custom-checkbox .custom-control-input:checked ~ .form-check-label::before{ + background:var(--sub-color-i-3) !important; + } +.form-check-input{ +color: #fff; + border-color: var(--tr-button-bg) !important; + background-color: var(--tr-button-bg) !important; + width: 1.5rem; + height: 1.5rem; + border-radius:2 !important; + } + .form-check-label{ + &:before{ + color: #fff; + border-color: var(--tr-button-bg) !important; + background-color: var(--tr-button-bg) !important; + width: 1.5rem; + height: 1.5rem; + border-radius:2 !important; + } + &:after { + position: absolute; + top: 0.3125rem; + left: -1.5rem !important; + display: block; + width: 1.5rem !important; + height: 1.5rem !important; + content: ""; + background: no-repeat 50% / 50% 50%; + } + } +} + +// Tabs +.nav-tabs{ + border-radius: 5px; + .nav-item{ + .nav-link{ + Font-size:16px; + color:var(--sub-color-i-3) !important; + font-weight:600 !important; + } + .nav-link.active{ + color:var(--sub-color-i) !important; + font-weight:bold !important; + } + } +} + +//Form view +.o_form_view { + .o_form_sheet_bg { + background: none; + padding-top: 0 !important; + .o_form_sheet { + border: none !important; + -webkit-box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + -moz-box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + box-shadow: 0px 0px 10px 1px rgba(240, 240, 240, 0.98); + border-radius: 5px; + padding: 25px; + } + } +} +.o_form_image_controls { + background-color: var(--tr-button-bg) !important; +} +.o_calendar_navigation_buttons { + .fa { + color: var(--white-color) !important; + } +} +.o_list_view tbody > tr.o_group_header { + background-image: linear-gradient(to bottom, var(--tr-button-bg), var(--white-color)); +} +.o_list_view tbody > tr.o_group_header:focus-within { + background-image: linear-gradient(to bottom, var(--tr-button-bg), var(--border-color)); +} +.o_searchview .o_searchview_autocomplete li.o_selection_focus { + background-color: var(--button-bg); +} +.o-dropdown.dropup > .o-dropdown--menu, .o-dropdown.dropdown > .o-dropdown--menu, .o-dropdown.dropleft > .o-dropdown--menu, .o-dropdown.dropright > .o-dropdown--menu { + left: auto !important; +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/scss/theme_variables.scss b/backend_theme_infinito/static/src/scss/theme_variables.scss new file mode 100644 index 000000000..b20779208 --- /dev/null +++ b/backend_theme_infinito/static/src/scss/theme_variables.scss @@ -0,0 +1,144 @@ +:root{ +// --bg_white: #ffffff; +// --bg_black: #000000; +// --bg_grey: #dddddd; +// --bg_grey_white: #f5f5f9; +// --dark_bg_grey: #c9ccd6; +// --bg_color: #f8f8fb; +// --light_bg_color: #f8f9fa; +// --nav_bar_color: #17252A; +// --nav_font_color: #ffffff; +// --primary_accent: #3AAFA9; +// --primary_hover: #2B7A78; +// --primary_btn_hover: #2B7A78; +// --primary_btn_hover_border: #1d5c5a; +// --dark_primary_accent: #2B7A78; +// --darker_primary_accent: #1d5c5a; +// --light_primary_accent: #54c7c1; +// --lighter_primary_accent: #DEF2F1; +// --secondary_accent: #334332; +// --secondary_color: #495057; + --secondary_btn: #74788d; + --secondary_btn_hover: #636678; + --secondary_btn_hover_border: #5d6071; + --dark_secondary_btn_hover_border: #575a6a; +// --light_secondary_btn: #dee2e6; +// --custom_green: #34c38f; +// --success-color: #1f7556; +// --dark_success-color: #c2eddd; +// --success-bg-color: #d6f3e9; +// --light_custom_green: #7BA94F; +// --custom_red: #f46a6a; +// --custom_red_hover: #cf5a5a; +// --custom_red_hover_border: #c35555; +// --dark_custom_red_hover_border: #b75050; +// --danger-bg-color: #fde1e1; +// --danger-color: #924040; +// --dark_danger-color: #fcd2d2; +// --custom_rose: #b9408d; +// --bg_blue: #50a5f1; +// --bg_blue_hover: #448ccd; +// --dark_bg_blue_hover: #4084c1; +// --info_color: #50a5f1; +// --info-color: #306391; +// --info-bg-color: #dcedfc; +// --dark_info-color: #c2eddd; +// --warning-bg-color: #fcf0db; +// --warning-color: #916c2e; + --bg_yellow: #f1b44c; +// --bg_yellow_hover: #cd9941; +// --dark_bg_yellow_hover: #c1903d; +// --dark_warning-color: #fbe9c9; +} +// +//$primary_accent: var(--primary_accent) !default; +//$secondary_accent: var(--secondary_accent) !default; +//$bg_white: var(--bg_white) !default; +//$bg_black: var(--bg_black) !default; +//$bg_grey_white: var(--bg_grey_white) !default; +//$bg_grey: var(--bg_grey) !default; +//$nav_font_color: var(--nav_font_color) !default; +//$primary_hover: var(--primary_hover) !default; +//$bg_color: var(--bg_color) !default; +//$custom_red: var(--custom_red) !default; +//$custom_red_hover: var(--custom_red_hover) !default; +//$custom_red_hover_border: var(--custom_red_hover_border) !default; +//$custom_green: var(--custom_green) !default; +//$custom_rose: var(--custom_rose) !default; +//$secondary_color: var(--secondary_color) !default; +//$info_color: var(--info_color) !default; +//$bg_blue: var(--bg_blue) !default; +//$bg_blue_hover: var(--bg_blue_hover) !default; +$bg_yellow: var(--bg_yellow) !default; +//$bg_yellow_hover: var(--bg_yellow_hover) !default; +//$primary_btn_hover: var(--primary_btn_hover) !default; +//$primary_btn_hover_border: var(--primary_btn_hover_border) !default; +$secondary_btn: var(--secondary_btn) !default; +//$secondary_btn_hover: var(--secondary_btn_hover) !default; +//$secondary_btn_hover_border: var(--secondary_btn_hover_border) !default; +//$success-color: var(--success-color) !default; +//$success-bg-color: var(--success-bg-color) !default; +//$info-color: var(--info-color) !default; +//$info-bg-color: var(--info-bg-color) !default; +//$danger-bg-color: var(--danger-bg-color) !default; +//$danger-color: var(--danger-color) !default; +//$warning-bg-color: var(--warning-bg-color) !default; +//$warning-color: var(--warning-color) !default; +$dark_secondary_btn_hover_border: var(--dark_secondary_btn_hover_border) !default; +//$dark_bg_blue_hover: var(--dark_bg_blue_hover) !default; +//$dark_custom_red_hover_border: var(--dark_custom_red_hover_border) !default; +//$dark_bg_yellow_hover: var(--dark_bg_yellow_hover) !default; +//$dark_bg_grey: var(--dark_bg_grey) !default; +//$dark_warning-color: var(--dark_warning-color) !default; +//$dark_danger-color: var(--dark_danger-color) !default; +//$dark_success-color: var(--dark_success-color) !default; +//$dark_info-color: var(--dark_info-color) !default; +//$darker_primary_accent: var(--darker_primary_accent) !default; +//$dark_primary_accent: var(--dark_primary_accent) !default; +//$light_bg_color: var(--light_bg_color) !default; +//$light_secondary_btn: var(--light_secondary_btn) !default; +//$light_primary_accent: var(--light_primary_accent) !default; +//$lighter_primary_accent: var(--lighter_primary_accent) !default; +//$light_custom_green: var(--light_custom_green) !default; +//$nav_bar_color: var(--nav_bar_color) !default; + + + +:root{ + --bg_white: #ffffff; + --bg_black: #000000; + + --brand-1: #262a31; + --sub-color-i: #2f353d; + --sub-color-i-2:#3b3d43; + --sub-color-i-3:#3f454f; + --text-color-1:#707277; + --border-color:#e7e9ed; + --main-bg:#f9f9f9; + --white-color:#ffff; + + --button-bg:#5279be; + --tr-button-bg:#e6ecfc; + + --sub-color: #F5F5F5; + --text-color: #626262; + --sub-color-1: #dc3545; + --sub-color-2: #2250fc; + --sub-color-3: #c52132; + --white-color: #ffffff; + --black-color: #2e2b2b; + + --p-color: #484848; + + --border-color2: #eeecec; + --border-color: #dad6d6; + --button-bg-dark: #3b588a; + --button-bg-darker: #2b4269; +} + +$bg_white: var(--bg_white) !default; +$bg_black: var(--bg_black) !default; + +$primary_accent: var(--button-bg) !default; +$dark_primary_accent: var(--button-bg-dark) !default; +$darker_primary_accent: var(--button-bg-darker) !default; diff --git a/backend_theme_infinito/static/src/scss/views.scss b/backend_theme_infinito/static/src/scss/views.scss new file mode 100644 index 000000000..c7fd8a6ac --- /dev/null +++ b/backend_theme_infinito/static/src/scss/views.scss @@ -0,0 +1,93 @@ +.o_list_view .o_list_table tbody tr{ + @for $tr from 1 through 80 { + &:nth-child(#{$tr}) { + animation: infinito_lazy_show #{$tr * .1}s ease-in; + } + } +} + +.o_form_view { + .o_form_sheet_bg { + .o_form_sheet { + animation: infinito_lazy_show .5s ease-in; + } + } +} + +.o_kanban_view { + .oe_kanban_card, .o_kanban_record { + @for $tr from 1 through 80 { + &:nth-child(#{$tr}) { + animation: infinito_kanban_shake #{$tr * .1}s ease-in; + } + } + } +} + +// .backend_theme_studio_sidebar, .backend_theme_studio_menu{ +// animation: infinito_lazy_up 1s ease-in; +// } + +@keyframes infinito_lazy_load { + 0% { + transform: scale(0); + } + + 100% { + transform: scale(1); + } +} + +@keyframes infinito_lazy_show { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes infinito_lazy_up { + 0% { + margin-top: 200px; + opacity: 0; + } + + 100% { + margin-top: 0; + opacity: 1; + } +} + +@keyframes infinito_kanban_shake { + 0% { + transform: rotate(-5deg); + opacity: 0; + } + + 20% { + transform: rotate(5deg); + } + + 40% { + transform: rotate(-3deg); + } + + 60% { + transform: rotate(3deg); + } + + 80% { + transform: rotate(-1deg); + } + + 90% { + transform: rotate(1deg); + } + + 100% { + transform: rotate(0deg); + opacity: 1; + } +} \ No newline at end of file diff --git a/backend_theme_infinito/static/src/xml/MenuBookmark.xml b/backend_theme_infinito/static/src/xml/MenuBookmark.xml new file mode 100644 index 000000000..b004298c1 --- /dev/null +++ b/backend_theme_infinito/static/src/xml/MenuBookmark.xml @@ -0,0 +1,8 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/xml/sidebar.xml b/backend_theme_infinito/static/src/xml/sidebar.xml new file mode 100644 index 000000000..c47a89ffe --- /dev/null +++ b/backend_theme_infinito/static/src/xml/sidebar.xml @@ -0,0 +1,193 @@ + + + + + + +
Text-alignment
+
+ +
+ + + + + + + + +
+ + +
+
+
︿
0
+
+
+
︿
0
+
+
+
︿
AM
+
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/backend_theme_infinito/static/src/xml/views.xml b/backend_theme_infinito/static/src/xml/views.xml new file mode 100644 index 000000000..8dbe779c6 --- /dev/null +++ b/backend_theme_infinito/static/src/xml/views.xml @@ -0,0 +1,503 @@ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ Field 1 + + Field 2 + + Field 3 + + Field 4 + + Field 5 +
+
+ +
+
+ Value 1 + + Value 2 + + Value 3 + + Value 4 + + Value 5 +
Value 1Value 2Value 3Value 4Value 5
+
+
+
+
+ + Control Panel +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+ + +
+
+ + +
+
+
+
+ +
+
+

+ Title +

+
+
+ + + + + + + + + + + +
Link
+ +
+ +
+ + + + + + + + + + + +
+ +
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ + Kanban grouped +
+
+
+
+ Stage + + + + +
+
+
+
+
+
+
+
+
$00,000
+
+
+ Muted Card +
+ +
+
+ Title +
+
+ $&nbsp;00,000.00 +
+
+
+ Tags +
+
+
+