diff --git a/odex25_base/odex_themecraft/__init__.py b/odex25_base/odex_themecraft/__init__.py
new file mode 100755
index 000000000..4a1357048
--- /dev/null
+++ b/odex25_base/odex_themecraft/__init__.py
@@ -0,0 +1,2 @@
+from . import models
+from .hooks import test_pre_init_hook
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/__manifest__.py b/odex25_base/odex_themecraft/__manifest__.py
new file mode 100755
index 000000000..a60d2eac7
--- /dev/null
+++ b/odex25_base/odex_themecraft/__manifest__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': 'Odex ThemeCraft',
+ 'category': 'Tools',
+ 'version': '0.4',
+ 'summary': 'Odex ThemeCraft empowers Odoo users to unleash their creativity and design stunning odoo system that reflect their brand identity and vision. With its intuitive interface and powerful customization features, Odex ThemeCraft revolutionizes the way users approach odoo backend theming in Odoo.',
+ 'description': 'Odex ThemeCraft is a comprehensive theme customization module for Odoo, designed to empower users with the ability to tailor their Odoo backend themes according to their unique brand identity and preferences. With Odex ThemeCraft, users can effortlessly personalize the look and feel of their odoo system, ensuring it aligns perfectly with their brand image and style.',
+ 'author': "Expert Co. Ltd.",
+ 'website': "http://www.exp-sa.com",
+ 'license': '',
+ 'depends': ['web','odex25_web','web_widget_colorpicker'],
+ 'data': [
+ 'views/webclient.xml',
+ 'views/ir_settings.xml',
+ ],
+ 'pre_init_hook': 'test_pre_init_hook',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': True,
+}
diff --git a/odex25_base/odex_themecraft/hooks.py b/odex25_base/odex_themecraft/hooks.py
new file mode 100644
index 000000000..929c5377c
--- /dev/null
+++ b/odex25_base/odex_themecraft/hooks.py
@@ -0,0 +1,65 @@
+import base64
+
+from odoo import api, SUPERUSER_ID, _
+from odoo.modules import get_module_resource
+from odoo.exceptions import UserError
+import os
+
+backend_theme_attrs = {
+ '$navbar_bg_color': 'rgba(31,91,117,1)',
+ '$navbar_toggle': 'rgba(0,0,0,1)',
+ '$selection_app_color': 'rgba(255,255,255,1)',
+ '$selection_app_bg_hover': 'rgba(31,91,87,1)',
+ '$navbar_ul_color': 'rgba(255,255,255,1)',
+ '$navbar_ul_bg_color_hover': 'rgba(31,91,87,1)',
+ '$navbar_ul_dropdown_bg_color': 'rgba(255,255,255,1)',
+ '$navbar_ul_dropdown_item_color': 'rgba(31,91,117,1)',
+ '$navbar_ul_dropdown_item_bg_color': 'rgba(255,255,255,1)',
+ '$navbar_ul_dropdown_item_color_hover': 'rgba(255,255,255,1)',
+ '$navbar_ul_dropdown_item_hover_color': 'rgba(31,91,117,1)',
+ '$navbar_badge_color': 'rgba(0,0,0,1)',
+
+ '$apps_bg_img': 'url(../img/odex_bg.jpg)',
+ '$app_name_color': 'rgba(255,255,255,1)',
+ '$app_hover_bg_color': 'rgba(31,91,87,1)',
+
+ '$apps_more_info': 'rgba(31,91,117,1)',
+ '$apps_install_color': 'rgba(255,255,255,1)',
+ '$apps_install_bg_color': 'rgba(38,133,127,1)',
+ '$apps_upgrade_color': 'rgba(255,255,255,1)',
+ '$apps_upgrade_bg_color': 'rgba(31,91,117,1)',
+
+ '$sections_titles_color': 'rgba(255,255,255,1)',
+ '$sections_titles_bg': 'rgba(31,91,117,1)',
+
+ '$filter_icon_bg_color': 'rgba(31,91,117,1)',
+ '$sidebar_categories_icon_color': 'rgba(31,91,117,1)',
+ '$sidebar_categories_item_color': 'rgba(0,0,0,1)',
+ '$sidebar_categories_item_bg_color': 'rgba(0,0,0,1)',
+ '$sidebar_categories_item_hover_active_color': 'rgba(255,255,255,1)',
+ '$sidebar_categories_item_bg_hover_active_color': 'rgba(38,133,127,1)',
+
+ '$english_default_font' : '"Roboto", "Odoo Unicode Support Noto", sans-serif',
+ '$arabic_default_font' : '"Roboto", "Odoo Unicode Support Noto", sans-serif'
+}
+
+def replace_file(file_path, static_dict):
+ try:
+ with open(file_path, 'w+') as new_file:
+ for key, value in static_dict.items():
+ line = ''.join([key, ': ', value, ';\n'])
+ new_file.write(line)
+ new_file.close()
+ except Exception as e:
+ raise UserError(_("Please follow the readme file. Contact to Administrator.""\n %s") % e)
+
+def test_pre_init_hook(cr):
+ """Hooks for Changing Menu Web_icon"""
+
+ try:
+ path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+ theme_path = path + "/odex_themecraft/static/src/scss/variables.scss"
+ except Exception as e:
+ raise UserError(_("Please Contact to Administrator. \n %s") % e)
+
+ replace_file(theme_path, backend_theme_attrs)
diff --git a/odex25_base/odex_themecraft/models/__init__.py b/odex25_base/odex_themecraft/models/__init__.py
new file mode 100755
index 000000000..2b537b9cc
--- /dev/null
+++ b/odex25_base/odex_themecraft/models/__init__.py
@@ -0,0 +1,3 @@
+# from . import ir_web_theme
+from . import model
+from . import ir_icons_settings
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/models/ir_icons_settings.py b/odex25_base/odex_themecraft/models/ir_icons_settings.py
new file mode 100755
index 000000000..94eafb335
--- /dev/null
+++ b/odex25_base/odex_themecraft/models/ir_icons_settings.py
@@ -0,0 +1,391 @@
+import base64
+from odoo import api, fields, models, _, SUPERUSER_ID
+from odoo import modules
+from odoo.exceptions import UserError
+import os
+
+def get_default_img():
+ with open(modules.get_module_resource('odex_themecraft', 'static/src/img', 'app_drawer.jpeg'),'rb') as f:
+ return base64.b64encode(f.read())
+
+class ResIconsConfigSettings(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ #Icons settings
+ setting_icon = fields.Binary(string="Settings Icon", attachment=True)
+ apps_icon = fields.Binary(string="Apps Icon", attachment=True)
+ discuss_icon = fields.Binary(string="Discuss Icon", attachment=True)
+ website_icon = fields.Binary(string="Website Icon", attachment=True)
+ sales_icon = fields.Binary(string="Sales Icon", attachment=True)
+ invoicing_icon = fields.Binary(string="Invoicing Icon", attachment=True)
+ crm_icon = fields.Binary(string="CRM Icon", attachment=True)
+ mrp_icon = fields.Binary(string="MRP II Icon", attachment=True)
+ inventory_icon = fields.Binary(string="Inventory Icon", attachment=True)
+ accounting_icon = fields.Binary(string="Accounting Icon", attachment=True)
+ purchase_icon = fields.Binary(string="Purchase Icon", attachment=True)
+ pos_icon = fields.Binary(string="Point of Sale Icon", attachment=True)
+ project_icon = fields.Binary(string="Project Icon", attachment=True)
+ ecommerce_icon = fields.Binary(string="eCommerce Icon", attachment=True)
+ manufacturing_icon = fields.Binary(string="Manufacturing Icon", attachment=True)
+ email_marketing_icon = fields.Binary(string="Email Marketing Icon", attachment=True)
+ timesheet_icon = fields.Binary(string="Timesheets Icon", attachment=True)
+ expenses_icon = fields.Binary(string="Expenses Icon", attachment=True)
+ studio_icon = fields.Binary(string="Studio Icon", attachment=True)
+ time_off_icon = fields.Binary(string="Time Off Icon", attachment=True)
+ recruitment_icon = fields.Binary(string="Recruitment Icon", attachment=True)
+ employee_icon = fields.Binary(string="Employees Icon", attachment=True)
+ maintenance_icon = fields.Binary(string="Maintenance Icon", attachment=True)
+ sign_icon = fields.Binary(string="Sign Icon", attachment=True)
+ helpdesk_icon = fields.Binary(string="Helpdesk Icon", attachment=True)
+ subscriptions_icon = fields.Binary(string="Subscriptions Icon", attachment=True)
+ quality_icon = fields.Binary(string="Quality Icon", attachment=True)
+ elearning_icon = fields.Binary(string="eLearning Icon", attachment=True)
+ planning_icon = fields.Binary(string="Planning Icon", attachment=True)
+ data_cleaning_icon = fields.Binary(string="Data Cleaning Icon", attachment=True)
+ events_icon = fields.Binary(string="Events Icon", attachment=True)
+ contacts_icon = fields.Binary(string="Contacts Icon", attachment=True)
+ mrp_icon = fields.Binary(string="Product Lifecycle Management (PLM) Icon", attachment=True)
+ calendar_icon = fields.Binary(string="Calendar Icon", attachment=True)
+ appraisal_icon = fields.Binary(string="Appraisal Icon", attachment=True)
+ fleet_icon = fields.Binary(string="Fleet Icon", attachment=True)
+ marketing_automation_icon = fields.Binary(string="Marketing Automation Icon", attachment=True)
+ blogs_icon = fields.Binary(string="Blogs Icon", attachment=True)
+ live_chat_icon = fields.Binary(string="Live Chat Icon", attachment=True)
+ appointments_icon = fields.Binary(string="Appointments Icon", attachment=True)
+ surveys_icon = fields.Binary(string="Surveys Icon", attachment=True)
+ android_iphone_icon = fields.Binary(string="Android & iPhone Icon", attachment=True)
+ dashboards_icon = fields.Binary(string="Dashboards Icon", attachment=True)
+ repairs_icon = fields.Binary(string="Repairs Icon", attachment=True)
+ attendance_icon = fields.Binary(string="Attendances Icon", attachment=True)
+ sms_marketing_icon = fields.Binary(string="SMS Marketing Icon", attachment=True)
+ barcode_icon = fields.Binary(string="Barcode Icon", attachment=True)
+ notes_icon = fields.Binary(string="Notes Icon", attachment=True)
+ forum_icon = fields.Binary(string="Forum Icon", attachment=True)
+ skills_management_icon = fields.Binary(string="Skills Management Icon", attachment=True)
+ voip_icon = fields.Binary(string="VoIP Icon", attachment=True)
+ lunch_icon = fields.Binary(string="Lunch Icon", attachment=True)
+ online_jobs_icon = fields.Binary(string="Online Jobs Icon", attachment=True)
+ members_icon = fields.Binary(string="Members Icon", attachment=True)
+ products_icon = fields.Binary(string="Products & Pricelists Icon", attachment=True)
+
+ def replace_file(self, file_path, static_dict):
+ try:
+ with open(file_path, 'w+') as new_file:
+ for key, value in static_dict.items():
+ line = ''.join([key, ': ', value, ';\n'])
+ new_file.write(line)
+ new_file.close()
+ except Exception as e:
+ raise UserError(_("Please follow the readme file. Contact to Administrator.""\n %s") % e)
+
+ @api.model
+ def get_values(self):
+ res = super(ResIconsConfigSettings, self).get_values()
+ ir_config = self.env['ir.config_parameter'].sudo()
+
+ #Icons settings
+ setting_icon = ir_config.get_param('setting_icon')
+ apps_icon = ir_config.get_param('apps_icon')
+ discuss_icon = ir_config.get_param('discuss_icon')
+ website_icon = ir_config.get_param('website_icon')
+ sales_icon = ir_config.get_param('sales_icon')
+ invoicing_icon = ir_config.get_param('invoicing_icon')
+ crm_icon = ir_config.get_param('crm_icon')
+ mrp_icon = ir_config.get_param('mrp_icon')
+ inventory_icon = ir_config.get_param('inventory_icon')
+ accounting_icon = ir_config.get_param('accounting_icon')
+ purchase_icon = ir_config.get_param('purchase_icon')
+ pos_icon = ir_config.get_param('pos_icon')
+ project_icon = ir_config.get_param('project_icon')
+ ecommerce_icon = ir_config.get_param('ecommerce_icon')
+ manufacturing_icon = ir_config.get_param('manufacturing_icon')
+ email_marketing_icon = ir_config.get_param('email_marketing_icon')
+ timesheet_icon = ir_config.get_param('timesheet_icon')
+ expenses_icon = ir_config.get_param('expenses_icon')
+ studio_icon = ir_config.get_param('studio_icon')
+ time_off_icon = ir_config.get_param('time_off_icon')
+ recruitment_icon = ir_config.get_param('recruitment_icon')
+ employee_icon = ir_config.get_param('employee_icon')
+ maintenance_icon = ir_config.get_param('maintenance_icon')
+ sign_icon = ir_config.get_param('sign_icon')
+ helpdesk_icon = ir_config.get_param('helpdesk_icon')
+ subscriptions_icon = ir_config.get_param('subscriptions_icon')
+ quality_icon = ir_config.get_param('quality_icon')
+ elearning_icon = ir_config.get_param('elearning_icon')
+ planning_icon = ir_config.get_param('planning_icon')
+ data_cleaning_icon = ir_config.get_param('data_cleaning_icon')
+ events_icon = ir_config.get_param('events_icon')
+ contacts_icon = ir_config.get_param('contacts_icon')
+ mrp_icon = ir_config.get_param('mrp_icon')
+ calendar_icon = ir_config.get_param('calendar_icon')
+ appraisal_icon = ir_config.get_param('appraisal_icon')
+ fleet_icon = ir_config.get_param('fleet_icon')
+ marketing_automation_icon = ir_config.get_param('marketing_automation_icon')
+ blogs_icon = ir_config.get_param('blogs_icon')
+ live_chat_icon = ir_config.get_param('live_chat_icon')
+ appointments_icon = ir_config.get_param('appointments_icon')
+ surveys_icon = ir_config.get_param('surveys_icon')
+ android_iphone_icon = ir_config.get_param('android_iphone_icon')
+ dashboards_icon = ir_config.get_param('dashboards_icon')
+ repairs_icon = ir_config.get_param('repairs_icon')
+ attendance_icon = ir_config.get_param('attendance_icon')
+ sms_marketing_icon = ir_config.get_param('sms_marketing_icon')
+ barcode_icon = ir_config.get_param('barcode_icon')
+ notes_icon = ir_config.get_param('notes_icon')
+ forum_icon = ir_config.get_param('forum_icon')
+ skills_management_icon = ir_config.get_param('skills_management_icon')
+ voip_icon = ir_config.get_param('voip_icon')
+ lunch_icon = ir_config.get_param('lunch_icon')
+ online_jobs_icon = ir_config.get_param('online_jobs_icon')
+ members_icon = ir_config.get_param('members_icon')
+ products_icon = ir_config.get_param('products_icon')
+
+ # update resourcess
+ res.update(setting_icon=setting_icon,apps_icon=apps_icon,discuss_icon=discuss_icon,website_icon=website_icon,
+ sales_icon=sales_icon,invoicing_icon=invoicing_icon,crm_icon=crm_icon,mrp_icon=mrp_icon,
+ inventory_icon=inventory_icon,accounting_icon=accounting_icon,purchase_icon=purchase_icon,
+ pos_icon=pos_icon,project_icon=project_icon,ecommerce_icon=ecommerce_icon,manufacturing_icon=manufacturing_icon,
+ email_marketing_icon=email_marketing_icon,timesheet_icon=timesheet_icon,expenses_icon=expenses_icon,
+ studio_icon=studio_icon,time_off_icon=time_off_icon,recruitment_icon=recruitment_icon,employee_icon=employee_icon,
+ maintenance_icon=maintenance_icon,sign_icon=sign_icon,helpdesk_icon=helpdesk_icon,subscriptions_icon=subscriptions_icon,
+ quality_icon=quality_icon,elearning_icon=elearning_icon,planning_icon=planning_icon,data_cleaning_icon=data_cleaning_icon,
+ events_icon=events_icon,contacts_icon=contacts_icon,calendar_icon=calendar_icon,appraisal_icon=appraisal_icon,
+ fleet_icon=fleet_icon,marketing_automation_icon=marketing_automation_icon,blogs_icon=blogs_icon,
+ live_chat_icon=live_chat_icon,appointments_icon=appointments_icon,surveys_icon=surveys_icon,android_iphone_icon=android_iphone_icon,
+ dashboards_icon=dashboards_icon,repairs_icon=repairs_icon,attendance_icon=attendance_icon,sms_marketing_icon=sms_marketing_icon,
+ barcode_icon=barcode_icon,notes_icon=notes_icon,forum_icon=forum_icon,skills_management_icon=skills_management_icon,
+ voip_icon=voip_icon,lunch_icon=lunch_icon,online_jobs_icon=online_jobs_icon,members_icon=members_icon,
+ products_icon=products_icon)
+
+ return res
+
+ def set_values(self):
+ super(ResIconsConfigSettings, self).set_values()
+ ir_config = self.env['ir.config_parameter'].sudo()
+
+ #Icons Settings
+ if self.setting_icon:
+ menu_item = self.env['ir.ui.menu'].search([('parent_id', '=', False)])
+ for menu in menu_item:
+ print("***************************",menu.read())
+ if menu.name == 'Settings':
+ if self.setting_icon:
+ ir_config.set_param("setting_icon",self.setting_icon)
+ menu.write({'web_icon_data': self.setting_icon})
+ elif menu.name == 'Apps':
+ if self.apps_icon:
+ ir_config.set_param("apps_icon",self.apps_icon)
+ menu.write({'web_icon_data': self.apps_icon})
+ elif menu.name == 'Discuss':
+ if self.discuss_icon:
+ ir_config.set_param("discuss_icon",self.discuss_icon)
+ menu.write({'web_icon_data': self.discuss_icon})
+ elif menu.name == 'Website':
+ if self.website_icon:
+ ir_config.set_param("website_icon",self.website_icon)
+ menu.write({'web_icon_data': self.website_icon})
+ elif menu.name == 'Sales':
+ if self.sales_icon:
+ ir_config.set_param("sales_icon",self.sales_icon)
+ menu.write({'web_icon_data': self.sales_icon})
+ elif menu.name == 'Invoicing':
+ if self.invoicing_icon:
+ ir_config.set_param("invoicing_icon",self.invoicing_icon)
+ menu.write({'web_icon_data': self.invoicing_icon})
+ elif menu.name == 'CRM':
+ if self.crm_icon:
+ ir_config.set_param("crm_icon",self.crm_icon)
+ menu.write({'web_icon_data': self.crm_icon})
+ elif menu.name == 'MRP II':
+ if self.mrp_icon:
+ ir_config.set_param("mrp_icon",self.mrp_icon)
+ menu.write({'web_icon_data': self.mrp_icon})
+ elif menu.name == 'Inventory':
+ if self.inventory_icon:
+ ir_config.set_param("inventory_icon",self.inventory_icon)
+ menu.write({'web_icon_data': self.inventory_icon})
+ elif menu.name == 'Accounting':
+ if self.accounting_icon:
+ ir_config.set_param("accounting_icon",self.accounting_icon)
+ menu.write({'web_icon_data': self.accounting_icon})
+ elif menu.name == 'Purchase':
+ if self.purchase_icon:
+ ir_config.set_param("purchase_icon",self.purchase_icon)
+ menu.write({'web_icon_data': self.purchase_icon})
+ elif menu.name == 'Point of Sale':
+ if self.pos_icon:
+ ir_config.set_param("pos_icon",self.pos_icon)
+ menu.write({'web_icon_data': self.pos_icon})
+ elif menu.name == 'Project':
+ if self.project_icon:
+ ir_config.set_param("project_icon",self.project_icon)
+ menu.write({'web_icon_data': self.project_icon})
+ elif menu.name == 'eCommerce':
+ if self.ecommerce_icon:
+ ir_config.set_param("ecommerce_icon",self.ecommerce_icon)
+ menu.write({'web_icon_data': self.ecommerce_icon})
+ elif menu.name == 'Manufacturing':
+ if self.manufacturing_icon:
+ ir_config.set_param("manufacturing_icon",self.manufacturing_icon)
+ menu.write({'web_icon_data': self.manufacturing_icon})
+ elif menu.name == 'Email Marketing':
+ if self.email_marketing_icon:
+ ir_config.set_param("email_marketing_icon",self.email_marketing_icon)
+ menu.write({'web_icon_data': self.email_marketing_icon})
+ elif menu.name == 'Timesheets':
+ if self.timesheet_icon:
+ ir_config.set_param("timesheet_icon",self.timesheet_icon)
+ menu.write({'web_icon_data': self.timesheet_icon})
+ elif menu.name == 'Expenses':
+ if self.expenses_icon:
+ ir_config.set_param("expenses_icon",self.expenses_icon)
+ menu.write({'web_icon_data': self.expenses_icon})
+ elif menu.name == 'Studio':
+ if self.studio_icon:
+ ir_config.set_param("studio_icon",self.studio_icon)
+ menu.write({'web_icon_data': self.studio_icon})
+ elif menu.name == 'Time Off':
+ if self.time_off_icon:
+ ir_config.set_param("time_off_icon",self.time_off_icon)
+ menu.write({'web_icon_data': self.time_off_icon})
+ elif menu.name == 'Recruitment':
+ if self.recruitment_icon:
+ ir_config.set_param("recruitment_icon",self.recruitment_icon)
+ menu.write({'web_icon_data': self.recruitment_icon})
+ elif menu.name == 'Employees':
+ if self.employee_icon:
+ ir_config.set_param("employee_icon",self.employee_icon)
+ menu.write({'web_icon_data': self.employee_icon})
+ elif menu.name == 'Maintenance':
+ if self.maintenance_icon:
+ ir_config.set_param("maintenance_icon",self.maintenance_icon)
+ menu.write({'web_icon_data': self.maintenance_icon})
+ elif menu.name == 'Sign':
+ if self.sign_icon:
+ ir_config.set_param("sign_icon",self.sign_icon)
+ menu.write({'web_icon_data': self.sign_icon})
+ elif menu.name == 'Helpdesk':
+ if self.helpdesk_icon:
+ ir_config.set_param("helpdesk_icon",self.helpdesk_icon)
+ menu.write({'web_icon_data': self.helpdesk_icon})
+ elif menu.name == 'Subscriptions':
+ if self.subscriptions_icon:
+ ir_config.set_param("subscriptions_icon",self.subscriptions_icon)
+ menu.write({'web_icon_data': self.subscriptions_icon})
+ elif menu.name == 'Quality':
+ if self.quality_icon:
+ ir_config.set_param("quality_icon",self.quality_icon)
+ menu.write({'web_icon_data': self.quality_icon})
+ elif menu.name == 'eLearning':
+ if self.elearning_icon:
+ ir_config.set_param("elearning_icon",self.elearning_icon)
+ menu.write({'web_icon_data': self.elearning_icon})
+ elif menu.name == 'Planning':
+ if self.planning_iconss:
+ ir_config.set_param("planning_icon",self.planning_icon)
+ menu.write({'web_icon_data': self.planning_icon})
+ elif menu.name == 'Data Cleaning':
+ if self.data_cleaning_icon:
+ ir_config.set_param("data_cleaning_icon",self.data_cleaning_icon)
+ menu.write({'web_icon_data': self.data_cleaning_icon})
+ elif menu.name == 'Events':
+ if self.events_icon:
+ ir_config.set_param("events_icon",self.events_icon)
+ menu.write({'web_icon_data': self.events_icon})
+ elif menu.name == 'Contacts':
+ if self.contacts_icon:
+ ir_config.set_param("contacts_icon",self.contacts_icon)
+ menu.write({'web_icon_data': self.contacts_icon})
+ elif menu.name == 'Product Lifecycle Management (PLM)':
+ if self.mrp_icon:
+ ir_config.set_param("mrp_icon",self.mrp_icon)
+ menu.write({'web_icon_data': self.mrp_icon})
+ elif menu.name == 'Calendar':
+ if self.calendar_icon:
+ ir_config.set_param("calendar_icon",self.calendar_icon)
+ menu.write({'web_icon_data': self.calendar_icon})
+ elif menu.name == 'Appraisal':
+ if self.appraisal_icon:
+ ir_config.set_param("appraisal_icon",self.appraisal_icon)
+ menu.write({'web_icon_data': self.appraisal_icon})
+ elif menu.name == 'Fleet':
+ if self.fleet_icon:
+ ir_config.set_param("fleet_icon",self.fleet_icon)
+ menu.write({'web_icon_data': self.fleet_icon})
+ elif menu.name == 'Marketing Automation':
+ if self.marketing_automation_icon:
+ ir_config.set_param("marketing_automation_icon",self.marketing_automation_icon)
+ menu.write({'web_icon_data': self.marketing_automation_icon})
+ elif menu.name == 'Blogs':
+ if self.blogs_icon:
+ ir_config.set_param("blogs_icon",self.blogs_icon)
+ menu.write({'web_icon_data': self.blogs_icon})
+ elif menu.name == 'Live Chat':
+ if self.live_chat_icon:
+ ir_config.set_param("live_chat_icon",self.live_chat_icon)
+ menu.write({'web_icon_data': self.live_chat_icon})
+ elif menu.name == 'Appointments':
+ if self.appointments_icon:
+ ir_config.set_param("appointments_icon",self.appointments_icon)
+ menu.write({'web_icon_data': self.appointments_icon})
+ elif menu.name == 'Surveys':
+ if self.surveys_icon:
+ ir_config.set_param("surveys_icon",self.surveys_icon)
+ menu.write({'web_icon_data': self.surveys_icon})
+ elif menu.name == 'Android & iPhone':
+ if self.android_iphone_icon:
+ ir_config.set_param("android_iphone_icon",self.android_iphone_icon)
+ menu.write({'web_icon_data': self.android_iphone_icon})
+ elif menu.name == 'Dashboards':
+ if self.dashboards_icon:
+ ir_config.set_param("dashboards_icon",self.dashboards_icon)
+ menu.write({'web_icon_data': self.dashboards_icon})
+ elif menu.name == 'Repairs':
+ if self.repairs_icon:
+ ir_config.set_param("repairs_icon",self.repairs_icon)
+ menu.write({'web_icon_data': self.repairs_icon})
+ elif menu.name == 'Attendances':
+ if self.attendance_icon:
+ ir_config.set_param("attendance_icon",self.attendance_icon)
+ menu.write({'web_icon_data': self.attendance_icon})
+ elif menu.name == 'SMS Marketing':
+ if self.sms_marketing_icon:
+ ir_config.set_param("sms_marketing_icon",self.sms_marketing_icon)
+ menu.write({'web_icon_data': self.sms_marketing_icon})
+ elif menu.name == 'Barcode':
+ if self.barcode_icon:
+ ir_config.set_param("barcode_icon",self.barcode_icon)
+ menu.write({'web_icon_data': self.barcode_icon})
+ elif menu.name == 'Notes':
+ if self.notes_icon:
+ ir_config.set_param("notes_icon",self.notes_icon)
+ menu.write({'web_icon_data': self.notes_icon})
+ elif menu.name == 'Forum':
+ if self.forum_icon:
+ ir_config.set_param("forum_icon",self.forum_icon)
+ menu.write({'web_icon_data': self.forum_icon})
+ elif menu.name == 'Skills Management':
+ if self.skills_management_icon:
+ ir_config.set_param("skills_management_icon",self.skills_management_icon)
+ menu.write({'web_icon_data': self.skills_management_icon})
+ elif menu.name == 'VoIP':
+ if self.voip_icon:
+ ir_config.set_param("voip_icon",self.voip_icon)
+ menu.write({'web_icon_data': self.voip_icon})
+ elif menu.name == 'Lunch':
+ if self.lunch_icon:
+ ir_config.set_param("lunch_icon",self.lunch_icon)
+ menu.write({'web_icon_data': self.lunch_icon})
+ elif menu.name == 'Online Jobs':
+ if self.online_jobs_icon:
+ ir_config.set_param("online_jobs_icon",self.online_jobs_icon)
+ menu.write({'web_icon_data': self.online_jobs_icon})
+ elif menu.name == 'Members':
+ if self.members_icon:
+ ir_config.set_param("members_icon",self.members_icon)
+ menu.write({'web_icon_data': self.members_icon})
+ elif menu.name == 'Products & Pricelists':
+ if self.products_icon:
+ ir_config.set_param("products_icon",self.products_icon)
+ menu.write({'web_icon_data': self.products_icon})
+
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/models/model.py b/odex25_base/odex_themecraft/models/model.py
new file mode 100755
index 000000000..884c8b037
--- /dev/null
+++ b/odex25_base/odex_themecraft/models/model.py
@@ -0,0 +1,296 @@
+import base64
+from odoo import api, fields, models, _, SUPERUSER_ID
+from odoo import modules
+from odoo.exceptions import UserError
+from odoo.modules import get_module_resource
+import os
+
+backend_theme_attrs = {
+ '$navbar_bg_color': 'rgba(31,91,117,1)',
+ '$navbar_toggle': 'rgba(0,0,0,1)',
+ '$selection_app_color': 'rgba(255,255,255,1)',
+ '$selection_app_bg_hover': 'rgba(31,91,87,1)',
+ '$navbar_ul_color': 'rgba(255,255,255,1)',
+ '$navbar_ul_bg_color_hover': 'rgba(31,91,87,1)',
+ '$navbar_ul_dropdown_bg_color': 'rgba(255,255,255,1)',
+ '$navbar_ul_dropdown_item_color': 'rgba(31,91,117,1)',
+ '$navbar_ul_dropdown_item_bg_color': 'rgba(255,255,255,1)',
+ '$navbar_ul_dropdown_item_color_hover': 'rgba(255,255,255,1)',
+ '$navbar_ul_dropdown_item_hover_color': 'rgba(31,91,117,1)',
+ '$navbar_badge_color': 'rgba(0,0,0,1)',
+
+ '$apps_bg_img': 'url(../img/odex_bg.jpg)',
+ '$app_name_color': 'rgba(255,255,255,1)',
+ '$app_hover_bg_color': 'rgba(31,91,87,1)',
+
+ '$apps_more_info': 'rgba(31,91,117,1)',
+ '$apps_install_color': 'rgba(255,255,255,1)',
+ '$apps_install_bg_color': 'rgba(38,133,127,1)',
+ '$apps_upgrade_color': 'rgba(255,255,255,1)',
+ '$apps_upgrade_bg_color': 'rgba(31,91,117,1)',
+
+ '$sections_titles_color': 'rgba(255,255,255,1)',
+ '$sections_titles_bg': 'rgba(31,91,117,1)',
+
+ '$filter_icon_bg_color': 'rgba(31,91,117,1)',
+ '$sidebar_categories_icon_color': 'rgba(31,91,117,1)',
+ '$sidebar_categories_item_color': 'rgba(0,0,0,1)',
+ '$sidebar_categories_item_bg_color': 'rgba(0,0,0,1)',
+ '$sidebar_categories_item_hover_active_color': 'rgba(255,255,255,1)',
+ '$sidebar_categories_item_bg_hover_active_color': 'rgba(38,133,127,1)',
+
+ '$english_default_font' : '"Roboto", "Odoo Unicode Support Noto", sans-serif',
+ '$arabic_default_font' : '"Roboto", "Odoo Unicode Support Noto", sans-serif'
+}
+
+def get_default_img():
+ with open(modules.get_module_resource('odex_themecraft', 'static/src/img', 'app_drawer.jpeg'),'rb') as f:
+ return base64.b64encode(f.read())
+
+class ResConfigSettings(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ # Navigation Bar
+ navbar_bg_color = fields.Char(string='Navbar Background',default="rgba(31,91,117,1)")
+ navbar_toggle = fields.Char(string='Navbar Background (Hover)',default="rgba(0,0,0,1)")
+ selection_app_color = fields.Char(string='Main Menu Title Background',default="rgba(255,255,255,1)")
+ selection_app_bg_hover = fields.Char(string='Main Menu Title Background (Hover)',default="rgba(31,91,87,1)")
+ navbar_ul_color = fields.Char(string='Navbar Item Color',default="rgba(255,255,255,1)")
+ navbar_ul_bg_color_hover = fields.Char(string='Navbar Item Background (Hover)',default="rgba(31,91,87,1)")
+ navbar_ul_dropdown_bg_color = fields.Char(string='Navbar Dropdown Background',default="rgba(255,255,255,1)")
+ navbar_ul_dropdown_item_color = fields.Char(string='Navbar Dropdown Item Color',default="rgba(31,91,117,1)")
+ navbar_ul_dropdown_item_color_hover = fields.Char(string='Navbar Dropdown Color (Hover)',default="rgba(255,255,255,1)")
+ navbar_ul_dropdown_item_bg_color = fields.Char(string='Navbar Dropdown Item Background',default="rgba(255,255,255,1)")
+ navbar_ul_dropdown_item_hover_color = fields.Char(string='Navbar Dropdown Item Background (Hover)',default="rgba(31,91,117,1)")
+ navbar_badge_color = fields.Char(string='Navbar Counter Badge Background',default="rgba(0,0,0,1)")
+ # App Drawer (home)
+ apps_bg_img = fields.Binary(string="App Drawer Background", attachment=True,default=get_default_img())
+ app_name_color = fields.Char(string='Navbar Counter Badge Background',default="rgba(255,255,255,1)")
+ app_hover_bg_color = fields.Char(string='App Background (Hover)',default="rgba(31,91,87,1)")
+ # Apps Module
+ apps_more_info = fields.Char(string='Apps More Info Button Background',default="rgba(31,91,117,1)")
+ apps_install_color = fields.Char(string='Apps Install Button Color',default="rgba(255,255,255,1)")
+ apps_install_bg_color = fields.Char(string='Apps Install Button Background',default="rgba(31,91,117,1)")
+ apps_upgrade_color = fields.Char(string='Apps Upgrade Button Color',default="rgba(255,255,255,1)")
+ apps_upgrade_bg_color = fields.Char(string='Apps Upgrade Button Background',default="rgba(31,91,117,1)")
+ # Setting Module
+ sections_titles_color = fields.Char(string='Section Titles Color',default="rgba(255,255,255,1)")
+ sections_titles_bg = fields.Char(string='Section Titles Background',default="rgba(31,91,117,1)")
+ # Font Settings
+ english_default_font = fields.Selection([
+ ('default','Default'),
+ ('font_1','Helvetica'),
+ ('font_2','Futura'),
+ ('font_3','Garamond'),
+ ('font_4','Times'),
+ ('font_5','Arial'),
+ ('font_6','Verdana'),
+ ('font_7','Comic Sans'),
+ ('font_8','Trebuchet'),
+ ('font_9','Gill Sans'),
+ ('font_10','Georgia'),
+ ], string='English Default Font', config_parameter='odex_themecraft.english_default_font', default='default')
+ arabic_default_font = fields.Selection([
+ ('default','Default'),
+ ('font_1','Arial'),
+ ('font_2','Droid Kufi'),
+ ('font_3','Aniri'),
+ ('font_4','Droid Naskh'),
+ ('font_5','Frutiger LT Arabic'),
+ ], string='Arabic Default Font', config_parameter='odex_themecraft.arabic_default_font', default='default')
+ #Icons settings
+ setting_icon = fields.Binary(string="Settings Icon", attachment=True)
+
+ def replace_file(self, file_path, static_dict):
+ try:
+ with open(file_path, 'w+') as new_file:
+ for key, value in static_dict.items():
+ line = ''.join([key, ': ', value, ';\n'])
+ new_file.write(line)
+ new_file.close()
+ except Exception as e:
+ raise UserError(_("Please follow the readme file. Contact to Administrator.""\n %s") % e)
+
+ @api.model
+ def get_values(self):
+ res = super(ResConfigSettings, self).get_values()
+ ir_config = self.env['ir.config_parameter'].sudo()
+
+ # Navigation Bar
+ navbar_bg_color = ir_config.get_param('navbar_bg_color',"rgba(31,91,117,1)")
+ navbar_toggle = ir_config.get_param('navbar_toggle',"rgba(0,0,0,1)")
+ selection_app_color = ir_config.get_param('selection_app_color',"rgba(255,255,255,1)")
+ selection_app_bg_hover = ir_config.get_param('selection_app_bg_hover',"rgba(31,91,87,1)")
+ navbar_ul_color = ir_config.get_param('navbar_ul_color',"rgba(31,91,87,1)")
+ navbar_ul_bg_color_hover = ir_config.get_param('navbar_ul_bg_color_hover',"rgba(255,255,255,1)")
+ navbar_ul_dropdown_bg_color = ir_config.get_param('navbar_ul_dropdown_bg_color',"rgba(31,91,117,1)")
+ navbar_ul_dropdown_item_color = ir_config.get_param('navbar_ul_dropdown_item_color',"rgba(31,91,117,1)")
+ navbar_ul_dropdown_item_color_hover = ir_config.get_param('navbar_ul_dropdown_item_color_hover',"rgba(255,255,255,1)")
+ navbar_ul_dropdown_item_bg_color = ir_config.get_param('navbar_ul_dropdown_item_bg_color',"rgba(255,255,255,1)")
+ navbar_ul_dropdown_item_hover_color = ir_config.get_param('navbar_ul_dropdown_item_hover_color',"rgba(31,91,117,1)")
+ navbar_badge_color = ir_config.get_param('navbar_badge_color',"rgba(0,0,0,1)")
+ # App Drawer (home)
+ apps_bg_img = ir_config.get_param('apps_bg_img')
+ app_name_color = ir_config.get_param('app_name_color',"rgba(255,255,255,1)")
+ app_hover_bg_color = ir_config.get_param('app_hover_bg_color',"rgba(31,91,87,1)")
+ # Apps Module
+ apps_more_info = ir_config.get_param('apps_more_info',"rgba(31,91,117,1)")
+ apps_install_color = ir_config.get_param('apps_install_color',"rgba(255,255,255,1)")
+ apps_install_bg_color = ir_config.get_param('apps_install_bg_color',"rgba(31,91,117,1)")
+ apps_upgrade_color = ir_config.get_param('apps_upgrade_color',"rgba(255,255,255,1)")
+ apps_upgrade_bg_color = ir_config.get_param('apps_upgrade_bg_color',"rgba(31,91,117,1)")
+ # Setting Module
+ sections_titles_color = ir_config.get_param('sections_titles_color',"rgba(255,255,255,1)")
+ sections_titles_bg = ir_config.get_param('sections_titles_bg',"rgba(31,91,117,1)")
+ # Fonts Settings
+ english_default_font = ir_config.get_param('english_default_font','default')
+ arabic_default_font = ir_config.get_param('arabic_default_font','default')
+
+ # update resourcess
+ res.update(navbar_bg_color=navbar_bg_color,navbar_toggle=navbar_toggle,selection_app_color=selection_app_color,
+ selection_app_bg_hover=selection_app_bg_hover,navbar_ul_color=navbar_ul_color,navbar_ul_bg_color_hover=navbar_ul_bg_color_hover,
+ navbar_ul_dropdown_bg_color=navbar_ul_dropdown_bg_color,navbar_ul_dropdown_item_color=navbar_ul_dropdown_item_color,
+ navbar_ul_dropdown_item_color_hover=navbar_ul_dropdown_item_color_hover,navbar_ul_dropdown_item_bg_color=navbar_ul_dropdown_item_bg_color,
+ navbar_ul_dropdown_item_hover_color=navbar_ul_dropdown_item_hover_color,navbar_badge_color=navbar_badge_color,
+ apps_bg_img=apps_bg_img,app_name_color=app_name_color,app_hover_bg_color=app_hover_bg_color,apps_more_info=apps_more_info,
+ apps_install_color=apps_install_color,apps_install_bg_color=apps_install_bg_color,apps_upgrade_color=apps_upgrade_color,
+ apps_upgrade_bg_color=apps_upgrade_bg_color,sections_titles_color=sections_titles_color,sections_titles_bg=sections_titles_bg,
+ english_default_font=english_default_font,arabic_default_font=arabic_default_font)
+ return res
+
+ def set_values(self):
+ super(ResConfigSettings, self).set_values()
+ ir_config = self.env['ir.config_parameter'].sudo()
+
+ # Navigation Bar
+ ir_config.set_param("navbar_bg_color",self.navbar_bg_color)
+ ir_config.set_param("navbar_toggle",self.navbar_toggle)
+ ir_config.set_param("selection_app_color",self.selection_app_color)
+ ir_config.set_param("selection_app_bg_hover",self.selection_app_bg_hover)
+ ir_config.set_param("navbar_ul_color",self.navbar_ul_color)
+ ir_config.set_param("navbar_ul_bg_color_hover",self.navbar_ul_bg_color_hover)
+ ir_config.set_param("navbar_ul_dropdown_bg_color",self.navbar_ul_dropdown_bg_color)
+ ir_config.set_param("navbar_ul_dropdown_item_color",self.navbar_ul_dropdown_item_color)
+ ir_config.set_param("navbar_ul_dropdown_item_color_hover",self.navbar_ul_dropdown_item_color_hover)
+ ir_config.set_param("navbar_ul_dropdown_item_bg_color",self.navbar_ul_dropdown_item_bg_color)
+ ir_config.set_param("navbar_ul_dropdown_item_hover_color",self.navbar_ul_dropdown_item_hover_color)
+ ir_config.set_param("navbar_badge_color",self.navbar_badge_color)
+ # App Drawer (home)
+ ir_config.set_param("apps_bg_img",self.apps_bg_img)
+ ir_config.set_param("app_name_color",self.app_name_color)
+ ir_config.set_param("app_hover_bg_color",self.app_hover_bg_color)
+ # Apps Module
+ ir_config.set_param("apps_more_info",self.apps_more_info)
+ ir_config.set_param("apps_install_color",self.apps_install_color)
+ ir_config.set_param("apps_install_bg_color",self.apps_install_bg_color)
+ ir_config.set_param("apps_upgrade_color",self.apps_upgrade_color)
+ ir_config.set_param("apps_upgrade_bg_color",self.apps_upgrade_bg_color)
+ # Setting Module
+ ir_config.set_param("sections_titles_color",self.sections_titles_color)
+ ir_config.set_param("sections_titles_bg",self.sections_titles_bg)
+ #Font Settings
+ ir_config.set_param("english_default_font",self.english_default_font)
+ ir_config.set_param("arabic_default_font",self.arabic_default_font)
+ #Icons settings
+ ir_config.set_param("setting_icon",self.setting_icon)
+
+ try:
+ path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+ theme_path = path + "/odex_themecraft/static/src/scss/variables.scss"
+ except Exception as e:
+ raise UserError(_("Please Contact to Administrator. \n %s") % e)
+
+ # Navigation Bar
+ if self.navbar_bg_color:
+ backend_theme_attrs.update({'$navbar_bg_color': self.navbar_bg_color})
+ if self.navbar_toggle:
+ backend_theme_attrs.update({'$navbar_toggle': self.navbar_toggle})
+ if self.selection_app_color:
+ backend_theme_attrs.update({'$selection_app_color': self.selection_app_color})
+ if self.selection_app_bg_hover:
+ backend_theme_attrs.update({'$selection_app_bg_hover': self.selection_app_bg_hover})
+ if self.navbar_ul_color:
+ backend_theme_attrs.update({'$navbar_ul_color': self.navbar_ul_color})
+ if self.navbar_ul_bg_color_hover:
+ backend_theme_attrs.update({'$navbar_ul_bg_color_hover': self.navbar_ul_bg_color_hover})
+ if self.navbar_ul_dropdown_bg_color:
+ backend_theme_attrs.update({'$navbar_ul_dropdown_bg_color': self.navbar_ul_dropdown_bg_color})
+ if self.navbar_ul_dropdown_item_color:
+ backend_theme_attrs.update({'$navbar_ul_dropdown_item_color': self.navbar_ul_dropdown_item_color})
+ if self.navbar_ul_dropdown_item_color_hover:
+ backend_theme_attrs.update({'$navbar_ul_dropdown_item_color_hover': self.navbar_ul_dropdown_item_color_hover})
+ if self.navbar_ul_dropdown_item_bg_color:
+ backend_theme_attrs.update({'$navbar_ul_dropdown_item_bg_color': self.navbar_ul_dropdown_item_bg_color})
+ if self.navbar_badge_color:
+ backend_theme_attrs.update({'$navbar_badge_color': self.navbar_badge_color})
+
+ # App Drawer (home)
+ if self.apps_bg_img:
+ backend_theme_attrs.update({'$apps_bg_img': "url('" + ("/web/image/res.config.settings/%s/apps_bg_img" % self.id) + "')"})
+ if self.app_name_color:
+ backend_theme_attrs.update({'$app_name_color': self.app_name_color})
+ if self.app_hover_bg_color:
+ backend_theme_attrs.update({'$app_hover_bg_color': self.app_hover_bg_color})
+
+ # Apps Module
+ if self.apps_more_info:
+ backend_theme_attrs.update({'$apps_more_info': self.apps_more_info})
+ if self.apps_install_color:
+ backend_theme_attrs.update({'$apps_install_color': self.apps_install_color})
+ if self.apps_install_bg_color:
+ backend_theme_attrs.update({'$apps_install_bg_color': self.apps_install_bg_color})
+ if self.apps_upgrade_color:
+ backend_theme_attrs.update({'$apps_upgrade_color': self.apps_upgrade_color})
+ if self.apps_upgrade_bg_color:
+ backend_theme_attrs.update({'$apps_upgrade_bg_color': self.apps_upgrade_bg_color})
+
+ # Setting Module
+ if self.sections_titles_color:
+ backend_theme_attrs.update({'$sections_titles_color': self.sections_titles_color})
+ if self.sections_titles_bg:
+ backend_theme_attrs.update({'$sections_titles_bg': self.sections_titles_bg})
+
+ # Font Settings
+ # English Font
+ if self.english_default_font:
+ english_font = '"Roboto", "Odoo Unicode Support Noto", sans-serif'
+ if self.english_default_font == 'font_1':
+ english_font = 'Helvetica, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_2':
+ english_font = 'Futura, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_3':
+ english_font = 'Garamond, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_4':
+ english_font = 'Times, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_5':
+ english_font = 'Arial, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_6':
+ english_font = 'Verdana, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_7':
+ english_font = 'Comic Sans, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_8':
+ english_font = 'Trebuchet, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_9':
+ english_font = 'Gill Sans, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ elif self.english_default_font == 'font_10':
+ english_font = 'Georgia, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ # Update english default font
+ backend_theme_attrs.update({'$english_default_font': english_font})
+ # Arabic Font
+ if self.arabic_default_font:
+ arabic_font = '"Roboto", "Odoo Unicode Support Noto", sans-serif'
+ if self.arabic_default_font == 'font_1':
+ arabic_font = 'Arial, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ if self.arabic_default_font == 'font_2':
+ arabic_font = '"Droid Arabic Kufi", "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ if self.arabic_default_font == 'font_3':
+ arabic_font = 'Amiri, "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ if self.arabic_default_font == 'font_4':
+ arabic_font = '"Droid Arabic Naskh", "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ if self.arabic_default_font == 'font_5':
+ arabic_font = '"Frutiger LT Arabic", "Roboto", "Odoo Unicode Support Noto", sans-serif'
+ # Update arabic default font
+ backend_theme_attrs.update({'$arabic_default_font': arabic_font})
+
+ self.replace_file(theme_path, backend_theme_attrs)
+
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/static/description/icon.png b/odex25_base/odex_themecraft/static/description/icon.png
new file mode 100644
index 000000000..0b9a317fd
Binary files /dev/null and b/odex25_base/odex_themecraft/static/description/icon.png differ
diff --git a/odex25_base/odex_themecraft/static/description/index.html b/odex25_base/odex_themecraft/static/description/index.html
new file mode 100755
index 000000000..895109bf0
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/description/index.html
@@ -0,0 +1,83 @@
+
+
+
+ ONE OF ODEX MODULES
+
+ ODEX system is over than 200+ modules developed by love of Expert Company, based on ODOO system
+
+ .to effectively suite's Saudi and Arabic market needs.It is the first Arabic open source ERP and all-in-one
+ solution
+
+
+
+
+
+
+
diff --git a/odex25_base/odex_themecraft/static/description/internet.png b/odex25_base/odex_themecraft/static/description/internet.png
new file mode 100755
index 000000000..a89809bfa
Binary files /dev/null and b/odex25_base/odex_themecraft/static/description/internet.png differ
diff --git a/odex25_base/odex_themecraft/static/description/linkedin.png b/odex25_base/odex_themecraft/static/description/linkedin.png
new file mode 100755
index 000000000..a0fe09caa
Binary files /dev/null and b/odex25_base/odex_themecraft/static/description/linkedin.png differ
diff --git a/odex25_base/odex_themecraft/static/description/mail.png b/odex25_base/odex_themecraft/static/description/mail.png
new file mode 100755
index 000000000..bc5a4de2a
Binary files /dev/null and b/odex25_base/odex_themecraft/static/description/mail.png differ
diff --git a/odex25_base/odex_themecraft/static/description/odex.png b/odex25_base/odex_themecraft/static/description/odex.png
new file mode 100755
index 000000000..de82c0ef4
Binary files /dev/null and b/odex25_base/odex_themecraft/static/description/odex.png differ
diff --git a/odex25_base/odex_themecraft/static/description/twitter.png b/odex25_base/odex_themecraft/static/description/twitter.png
new file mode 100755
index 000000000..983f325a3
Binary files /dev/null and b/odex25_base/odex_themecraft/static/description/twitter.png differ
diff --git a/odex25_base/odex_themecraft/static/src/css/custom.css b/odex25_base/odex_themecraft/static/src/css/custom.css
new file mode 100755
index 000000000..78d90a65e
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/css/custom.css
@@ -0,0 +1,77 @@
+.o_main_navbar{
+ border-color: transparent!important;
+ background-color: #3E5D7F!important;
+}
+
+.o_main_navbar > ul > li > a:hover,
+.o_main_navbar > ul > li > a:focus{
+ background-color: #5280b3 !important;
+}
+.o_main_navbar > a:hover,
+.o_main_navbar > button:hover,
+.o_main_navbar > a:focus,
+.o_main_navbar > button:focus
+{
+ background: #5280b3;
+}
+.o_main_navbar .show .dropdown-toggle{
+ background-color: #5280b3;
+}
+.o_home_menu_background{
+ background: url(/odex_themecraft/static/src/images/app_drawer.jpeg) no-repeat center/cover!important;
+}
+
+#about .o_setting_right_pane img{
+ height: 60px;
+}
+.o_home_menu_background:not(.o_home_menu_background_custom) .o_main_navbar{
+ background: transparent!important;
+}
+
+
+.o_searchview .o_searchview_facet .o_searchview_facet_label{
+ background-color: #5280b3;
+}
+
+.o_view_nocontent .o_nocontent_help .o_view_nocontent_smiling_face:before{
+ background: transparent url(/odex_themecraft/static/src/images/smiling_face.svg) no-repeat center;
+}
+.o_loading{
+ background-color: #5280b3;
+}
+
+.o_tooltip::before{
+ background: radial-gradient(#3d5774, #3e5d7f);
+}
+
+.o_tooltip.active{
+ border: 3px solid #5280b3!important;
+}
+
+.btn-fill-primary, .btn-primary{
+ background-color: #5280b3;
+ border-color: #3E5D7F;
+}
+
+.btn-fill-primary:hover, .btn-primary:hover{
+ background-color: #3E5D7F!important;
+ border-color: #3E5D7F;
+}
+
+.o_barcode_client_action .o_barcode_header{
+ background-color: #5280b3;
+}
+.o_barcode_client_action .o_barcode_lines_header{
+ background-color: #5280b3;
+}
+.o_onboarding.o_onboarding_violet .o_onboarding_wrap{
+ background-color: rgb(39 120 63 / 60%);
+ background-image: linear-gradient(to bottom, rgba(96, 112, 195, 0.5), #5280b3);
+}
+.o_onboarding.o_onboarding_orange .o_onboarding_wrap{
+ background-color: rgb(39 120 63 / 60%);
+ background-image: linear-gradient(to bottom, rgba(96, 112, 195, 0.5), #5280b3);
+}
+.o_MessagingMenu_counter{
+
+}
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/static/src/css/custom_login.css b/odex25_base/odex_themecraft/static/src/css/custom_login.css
new file mode 100755
index 000000000..58dd793ef
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/css/custom_login.css
@@ -0,0 +1,16 @@
+.btn-fill-secondary, .btn-secondary{
+ background: #5280b3;
+ border-color: #3E5D7F!important;
+}
+.btn-fill-primary, .btn-primary{
+ background-color: #5280b3;
+ border-color: #3E5D7F;
+}
+.btn-fill-primary:hover, .btn-primary:hover{
+ background-color: #3E5D7F!important;
+ border-color: #3E5D7F;
+}
+
+.o_home_menu_background{
+ background: url(/odex_themecraft/static/src/images/login.jpg) no-repeat center/cover!important;
+}
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/static/src/css/custom_point_of_sale.css b/odex25_base/odex_themecraft/static/src/css/custom_point_of_sale.css
new file mode 100755
index 000000000..856f5128c
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/css/custom_point_of_sale.css
@@ -0,0 +1,17 @@
+.pos .pos-topheader{
+ background:#5280b3;
+}
+
+.pos .pos-rightheader .header-button{
+ border-right: 1px solid #3E5D7F;
+}
+.pos .pos-rightheader .header-button:last-child{
+ border-left: 1px solid #3E5D7F;
+}
+.ticket-button:hover,
+.ticket-button:focus{
+ background-color: #5280b3 !important;
+}
+.pos .pos-rightheader > *{
+ border-right: 1px solid #3E5D7F;
+}
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.eot
new file mode 100755
index 000000000..560bc1a63
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff
new file mode 100755
index 000000000..055f58fb0
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff2
new file mode 100755
index 000000000..a876c8365
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.eot
new file mode 100755
index 000000000..0664b298e
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.woff
new file mode 100755
index 000000000..9be447fa7
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.woff2
new file mode 100755
index 000000000..2f55c283c
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-BoldSlanted.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.eot
new file mode 100755
index 000000000..31b2d331a
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.ttf
new file mode 100755
index 000000000..50eaaa3c0
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff
new file mode 100755
index 000000000..66713c77d
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff2
new file mode 100755
index 000000000..27fbc9388
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.eot
new file mode 100755
index 000000000..7bc87fe16
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.woff
new file mode 100755
index 000000000..875fd3283
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.woff2
new file mode 100755
index 000000000..645dfd70e
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Slanted.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-bold.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-bold.ttf
new file mode 100755
index 000000000..90152fea5
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-bold.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-boldslanted.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-boldslanted.ttf
new file mode 100755
index 000000000..6a957b97e
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-boldslanted.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-quran.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-quran.ttf
new file mode 100755
index 000000000..351dd5d59
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-quran.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-slanted.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-slanted.ttf
new file mode 100755
index 000000000..08774361a
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Amiri/amiri-slanted.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Black.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Black.ttf
new file mode 100644
index 000000000..94e347ab2
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Black.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Bold.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Bold.ttf
new file mode 100644
index 000000000..679fc937a
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Bold.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Light.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Light.ttf
new file mode 100644
index 000000000..54ff72527
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Light.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Roman.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Roman.ttf
new file mode 100644
index 000000000..02d82cb92
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Frutiger/Roman.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.eot
new file mode 100755
index 000000000..c98ced39f
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.ttf
new file mode 100755
index 000000000..650919e26
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.woff
new file mode 100755
index 000000000..565c0036b
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.woff2
new file mode 100755
index 000000000..27f95d004
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Bold.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.eot
new file mode 100755
index 000000000..d29fcdc8d
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.ttf
new file mode 100755
index 000000000..af859750b
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.woff
new file mode 100755
index 000000000..2c328bbd8
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.woff2
new file mode 100755
index 000000000..44cd1a9ae
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Kufi/DroidKufi-Regular.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.eot
new file mode 100755
index 000000000..be6a9abf7
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.ttf
new file mode 100755
index 000000000..692b79678
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff
new file mode 100755
index 000000000..61c4ce65a
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff2
new file mode 100755
index 000000000..a480760f3
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.eot b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.eot
new file mode 100755
index 000000000..00213363c
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.eot differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.ttf b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.ttf
new file mode 100755
index 000000000..da9a45f15
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.ttf differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff
new file mode 100755
index 000000000..7726404df
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff differ
diff --git a/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff2 b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff2
new file mode 100755
index 000000000..a5fd31b8f
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff2 differ
diff --git a/odex25_base/odex_themecraft/static/src/img/app_drawer.jpeg b/odex25_base/odex_themecraft/static/src/img/app_drawer.jpeg
new file mode 100755
index 000000000..de94dccec
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/img/app_drawer.jpeg differ
diff --git a/odex25_base/odex_themecraft/static/src/img/favicon.ico b/odex25_base/odex_themecraft/static/src/img/favicon.ico
new file mode 100755
index 000000000..1a5cafdca
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/img/favicon.ico differ
diff --git a/odex25_base/odex_themecraft/static/src/img/logo.png b/odex25_base/odex_themecraft/static/src/img/logo.png
new file mode 100755
index 000000000..e3b9e6da9
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/img/logo.png differ
diff --git a/odex25_base/odex_themecraft/static/src/img/odex_bg.jpg b/odex25_base/odex_themecraft/static/src/img/odex_bg.jpg
new file mode 100755
index 000000000..9c49b586e
Binary files /dev/null and b/odex25_base/odex_themecraft/static/src/img/odex_bg.jpg differ
diff --git a/odex25_base/odex_themecraft/static/src/img/smiling_face.svg b/odex25_base/odex_themecraft/static/src/img/smiling_face.svg
new file mode 100755
index 000000000..250900ea0
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/img/smiling_face.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_base/odex_themecraft/static/src/js/customize_user_menu.js b/odex25_base/odex_themecraft/static/src/js/customize_user_menu.js
new file mode 100644
index 000000000..e04795e90
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/js/customize_user_menu.js
@@ -0,0 +1,168 @@
+odoo.define('odex_themecraft.UserMenu', function (require) {
+ "use strict";
+
+ /**
+ * This widget is appended by the webclient to the right of the navbar.
+ * It displays the avatar and the name of the logged user (and optionally the
+ * db name, in debug mode).
+ * If clicked, it opens a dropdown allowing the user to perform actions like
+ * editing its preferences, accessing the documentation, logging out...
+ */
+
+ var UserMenu = require('web.UserMenu');
+ //避免错误,要再定义
+ var documentation_url = 'https://www.odooai.cn';
+ var documentation_dev_url = 'https://www.odooai.cn';
+ var support_url = 'https://www.odooai.cn';
+ var account_title = 'My Account';
+ var account_url = 'https://www.odooai.cn';
+
+ UserMenu.include({
+ init: function () {
+ this._super.apply(this, arguments);
+ var self = this;
+ var session = this.getSession();
+ var lang_list = '';
+
+ self._rpc({
+ model: 'res.lang',
+ method: 'search_read',
+ domain: [],
+ fields: ['name', 'code'],
+ lazy: false,
+ }).then(function (res) {
+ _.each(res, function (lang) {
+ var a = '';
+ if (lang['code'] === session.user_context.lang) {
+ a = ' ';
+ } else {
+ a = '';
+ }
+ lang_list += ' ' + lang['name'] + a + ' ';
+ });
+ lang_list += '
';
+ setTimeout( function() {
+ $('switch-lang').replaceWith(lang_list);
+ }, 1000);
+ })
+
+ //取参数
+ self._rpc({
+ model: 'ir.config_parameter',
+ method: 'search_read',
+ domain: [['key', '=like', 'app_%']],
+ fields: ['key', 'value'],
+ lazy: false,
+ }).then(function (res) {
+ $.each(res, function (key, val) {
+ if (val.key == 'app_documentation_url')
+ documentation_url = val.value;
+ if (val.key == 'app_documentation_dev_url')
+ documentation_dev_url = val.value;
+ if (val.key == 'app_support_url')
+ support_url = val.value;
+ if (val.key == 'app_account_title')
+ account_title = val.value;
+ if (val.key == 'app_account_url')
+ account_url = val.value;
+ // 控制显示
+ if (val.key == 'app_show_lang' && val.value == "False") {
+ $('switch-lang').hide();
+ }
+ //注意, odoo12,主用户id=2, 加了个 __system__
+ if (session.user_context.uid > 2 || (val.key == 'app_show_debug' && val.value == "False")) {
+ $('[data-menu="debug"]').hide();
+ $('[data-menu="debugassets"]').hide();
+ $('[data-menu="quitdebug"]').hide();
+ }
+ if (val.key == 'app_show_documentation' && val.value == "False") {
+ $('[data-menu="documentation"]').hide();
+ }
+ if (val.key == 'app_show_documentation_dev' && val.value == "False") {
+ $('[data-menu="documentation_dev"]').hide();
+ }
+ if (val.key == 'app_show_support' && val.value == "False") {
+ $('[data-menu="support"]').hide();
+ }
+ if (val.key == 'app_show_account' && val.value == "False") {
+ $('[data-menu="account"]').hide();
+ }
+ if (val.key == 'app_account_title' && val.value) {
+ $('[data-menu="account"]').html(account_title);
+ }
+ if (val.key == 'app_show_poweredby' && val.value == "False") {
+ $('.o_sub_menu_footer').hide();
+ }
+ });
+ })
+ },
+ /**
+ * @override
+ * 由于odoo11 没传ev到事件,所以要重载
+ */
+ start: function () {
+ var self = this;
+ return this._super.apply(this, arguments).then(function () {
+ //语言切换特殊处理
+ self.$el.on('click', 'a[data-lang-menu]', function (ev) {
+ ev.preventDefault();
+ var f = self['_onMenuLang']
+ f.call(self, $(this));
+ });
+ //控制debug显示
+ var mMode = 'normal';
+ if (window.location.href.indexOf('debug=1') != -1)
+ mMode = 'debug';
+ if (window.location.href.indexOf('debug=assets') != -1)
+ mMode = 'assets';
+ if (mMode == 'normal')
+ $('[data-menu="quitdebug"]').hide();
+ if (mMode == 'debug')
+ $('[data-menu="debug"]').hide();
+ if (mMode == 'assets')
+ $('[data-menu="debugassets"]').hide();
+ });
+ },
+ _onMenuAccount: function () {
+ window.open(account_url, '_blank');
+ },
+ _onMenuDocumentation: function () {
+ window.open(documentation_url, '_blank');
+ },
+ _onMenuSupport: function () {
+ window.open(support_url, '_blank');
+ },
+ //增加的方法
+ _onMenuDebug: function () {
+ window.location = $.param.querystring(window.location.href, 'debug=1');
+ },
+ _onMenuDebugassets: function () {
+ window.location = $.param.querystring(window.location.href, 'debug=assets');
+ },
+ _onMenuQuitdebug: function () {
+ window.location = $.param.querystring(window.location.href, 'debug=0');
+ },
+ _onMenuDocumentation_dev: function () {
+ window.open(documentation_dev_url, '_blank');
+ },
+ _onMenuLang: function (ev) {
+ var self = this;
+ var lang = ($(ev).data("lang-id"));
+ var session = this.getSession();
+ return this._rpc({
+ model: 'res.users',
+ method: 'write',
+ args: [session.uid, {'lang': lang}],
+ }).then(function (result) {
+ self.do_action({
+ type: 'ir.actions.client',
+ res_model: 'res.users',
+ tag: 'reload_context',
+ target: 'current',
+ });
+ });
+ },
+ })
+
+});
diff --git a/odex25_base/odex_themecraft/static/src/scss/controller.scss b/odex25_base/odex_themecraft/static/src/scss/controller.scss
new file mode 100755
index 000000000..87df547d8
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/controller.scss
@@ -0,0 +1,14 @@
+// web/login
+//////////////
+
+$form_bg_color: white;
+$label_color: black;
+$span_label_color: white;
+$inputs_font_color: black;
+$inputs_outline: rgb(155, 155, 155);
+$inputs_outline_hover: #1F5B75;
+$login_buttons_bg: #1F5B75;
+$login_buttons_bg_hover: #1F5B75;
+$buttons_font_color: white;
+$buttons_font_color_hover: white;
+$login_bg_img: url(../img/odex_bg.jpg);
diff --git a/odex25_base/odex_themecraft/static/src/scss/filter.scss b/odex25_base/odex_themecraft/static/src/scss/filter.scss
new file mode 100755
index 000000000..254ba182b
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/filter.scss
@@ -0,0 +1,25 @@
+
+.o_web_client{
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_bottom{
+ .o_cp_bottom_right{
+ .o_search_options{
+ .o_filter_menu{
+ ul.o_dropdown_menu{
+ li{
+ a{
+ padding-top: 8px!important;
+ padding-bottom: 8px!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/static/src/scss/fonts.scss b/odex25_base/odex_themecraft/static/src/scss/fonts.scss
new file mode 100644
index 000000000..e7a37c9cc
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/fonts.scss
@@ -0,0 +1,95 @@
+// ENGLISH FONTS
+
+// ARABIC FONTS
+
+// ARABIC - Droid Kufi
+@font-face {
+ font-family: 'Droid Arabic Kufi';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Regular.eot);
+ src: url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Regular.woff2) format('woff2'),
+ url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Regular.woff) format('woff'),
+ url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Regular.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Droid Arabic Kufi';
+ font-style: normal;
+ font-weight: 700;
+ src: url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Bold.eot);
+ src: url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Bold.woff2) format('woff2'),
+ url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Bold.woff) format('woff'),
+ url(/odex_themecraft/static/src/fonts/arabic/DroidKufi-Bold.ttf) format('truetype');
+}
+
+// ARABIC - Amiri
+@font-face {
+ font-family: 'Amiri';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.eot);
+ src: url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff2) format('woff2'),
+ url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.woff) format('woff'),
+ url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Regular.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Amiri';
+ font-style: normal;
+ font-weight: 700;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.eot);
+ src: url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff2) format('woff2'),
+ url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.woff) format('woff'),
+ url(/odex_themecraft/static/src/fonts/arabic/Amiri/Amiri-Bold.ttf) format('truetype');
+}
+
+// ARABIC - Droid Naskh
+@font-face {
+ font-family: 'Droid Arabic Naskh';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.eot);
+ src: url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff2) format('woff2'),
+ url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.woff) format('woff'),
+ url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Regular.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Droid Arabic Naskh';
+ font-style: normal;
+ font-weight: 700;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.eot);
+ src: url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff2) format('woff2'),
+ url(/odex_themecraft/static/src/fonts/arabic/Naskh/DroidNaskh-Bold.woff) format('woff'),
+ url(/odex_themecraft/static/src/fonts/arabic/DroidNaskh-Bold.ttf) format('truetype');
+}
+
+// ARABIC - Frutiger LT Arabic
+@font-face {
+ font-family: 'Frutiger LT Arabic';
+ font-style: normal;
+ font-weight: 200;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Frutiger/Light.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Frutiger LT Arabic';
+ font-style: normal;
+ font-weight: 400;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Frutiger/Roman.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Frutiger LT Arabic';
+ font-style: normal;
+ font-weight: 700;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Frutiger/Bold.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Frutiger LT Arabic';
+ font-style: normal;
+ font-weight: 900;
+ src: url(/odex_themecraft/static/src/fonts/arabic/Frutiger/Black.ttf) format('truetype');
+}
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/static/src/scss/login_style.scss b/odex25_base/odex_themecraft/static/src/scss/login_style.scss
new file mode 100755
index 000000000..f3940fe99
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/login_style.scss
@@ -0,0 +1,1631 @@
+@media screen and (max-width: 319px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 90%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ margin: 20px 0px!important;
+ .form-group{
+ label{
+ font-size: 13px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 12px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 320px) and (max-width: 420px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 90%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ margin: 20px 0px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 13px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 13px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 13px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 13px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 13px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 421px) and (max-width: 767px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 80%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 14px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 768px) and (max-width: 1024px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 50%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 14px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 896px) and (max-width: 1024px) and (max-device-height: 768px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 50%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 14px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 700px) and (max-width: 950px) and (max-device-height: 550px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 40px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 70%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ margin: 20px 0px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 14px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (max-width: 699px) and (max-device-height: 550px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 40px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 70%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ margin: 20px 0px!important;
+ .form-group{
+ label{
+ font-size: 13px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 12px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (max-width: 699px) and (max-device-height: 319px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 30px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 70%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ margin: 20px 0px!important;
+ .form-group{
+ label{
+ font-size: 13px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 12px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 12px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 768px) and (max-width: 895px) and (min-device-height: 1200px){}
+
+@media screen and (min-width: 896px) and (max-width: 1024px) and (min-device-height: 1250px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 40px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 50%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 25px!important;
+ .form-group{
+ label{
+ font-size: 16px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 16px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1025px) and (max-width: 1200px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 40%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 14px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1201px) and (max-width: 1599px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 30%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 14px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 14px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover ,&:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 14px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1600px) and (max-width: 1919px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 25%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 16px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 16px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover, &:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1920px) and (max-width: 2559px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 50px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 25%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ label{
+ font-size: 16px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 16px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 16px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ &:hover, &:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 2560px) and (max-width: 3839px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 150px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 25%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 20px!important;
+ .form-group{
+ margin-bottom: 30px!important;
+ label{
+ font-size: 20px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 20px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 10px!important;
+ color: $inputs_font_color!important;
+
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 20px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 20px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 10px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 20px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 15px 8px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ margin-bottom: 20px!important;
+ &:hover, &:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 20px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 3840px){
+ .login_page{
+ #wrapwrap{
+ main{
+ .oe_website_login_container{
+ width: 100%!important;
+ height: 100%!important;
+ padding: 0px!important;
+ max-width: initial!important;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding-top: 120px!important;
+ background-image: $login_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ .oe_login_form{
+ width: 25%!important;
+ height: auto;
+ max-width: initial!important;
+ background-color: $form_bg_color!important;
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ padding: 40px!important;
+ .form-group{
+ margin-bottom: 40px!important;
+ label{
+ font-size: 34px!important;
+ font-weight: 500;
+ font-family: 'Montserrat', sans-serif;
+ color: $label_color!important;
+ }
+ .input-group{
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 34px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 14px!important;
+ color: $inputs_font_color!important;
+
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ span{
+ a{
+ background-color: $login_buttons_bg!important;
+ font-size: 34px!important;
+ color: $label_color!important;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 5px;
+ }
+ }
+ }
+ input{
+ border: none!important;
+ outline: 1px solid $inputs_outline!important;
+ font-size: 34px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 14px!important;
+ color: $inputs_font_color!important;
+ &:hover, &:focus{
+ outline: 1px solid $inputs_outline_hover!important;
+ transition: outline .2s ease-in-out!important;
+ box-shadow: none!important;
+ }
+ }
+ }
+ .oe_login_buttons{
+ button{
+ border: none!important;
+ outline: none!important;
+ font-size: 34px!important;
+ font-family: 'Montserrat', sans-serif;
+ height: auto!important;
+ padding: 20px 12px!important;
+ background-color: $login_buttons_bg!important;
+ color: $buttons_font_color!important;
+ margin-bottom: 20px!important;
+ &:hover, &:focus{
+ background-color: $login_buttons_bg_hover!important;
+ color: $buttons_font_color_hover!important;
+ transition: background-color .2s ease-in-out;
+ box-shadow: none!important;
+ }
+ }
+ div{
+ margin: 10px 0px!important;
+ a{
+ color: $label_color!important;
+ font-size: 34px!important;
+ font-family: 'Montserrat', sans-serif;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/static/src/scss/rtl.scss b/odex25_base/odex_themecraft/static/src/scss/rtl.scss
new file mode 100755
index 000000000..65a996d8f
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/rtl.scss
@@ -0,0 +1,11 @@
+.o_rtl{
+ *:not(.fa) {
+ font-family: $arabic_default_font !important;
+ }
+}
+
+.rtl{
+ *:not(.fa) {
+ font-family: $english_default_font !important;
+ }
+}
diff --git a/odex25_base/odex_themecraft/static/src/scss/variables.scss b/odex25_base/odex_themecraft/static/src/scss/variables.scss
new file mode 100755
index 000000000..5063563fa
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/variables.scss
@@ -0,0 +1,30 @@
+$navbar_bg_color: rgba(31,91,117,1);
+$navbar_toggle: rgba(0,0,0,1);
+$selection_app_color: rgba(255,255,255,1);
+$selection_app_bg_hover: rgba(31,91,87,1);
+$navbar_ul_color: rgba(255,255,255,1);
+$navbar_ul_bg_color_hover: rgba(255,255,255,1);
+$navbar_ul_dropdown_bg_color: rgba(31,91,117,1);
+$navbar_ul_dropdown_item_color: rgba(31,91,117,1);
+$navbar_ul_dropdown_item_bg_color: rgba(255,255,255,1);
+$navbar_ul_dropdown_item_color_hover: rgba(255,255,255,1);
+$navbar_ul_dropdown_item_hover_color: rgba(31,91,117,1);
+$navbar_badge_color: rgba(0,0,0,1);
+$apps_bg_img: url('/web/image/res.config.settings/3/apps_bg_img');
+$app_name_color: rgba(255,255,255,1);
+$app_hover_bg_color: rgba(31,91,87,1);
+$apps_more_info: rgba(31,91,117,1);
+$apps_install_color: rgba(255,255,255,1);
+$apps_install_bg_color: rgba(31,91,117,1);
+$apps_upgrade_color: rgba(255,255,255,1);
+$apps_upgrade_bg_color: rgba(31,91,117,1);
+$sections_titles_color: rgba(255,255,255,1);
+$sections_titles_bg: rgba(31,91,117,1);
+$filter_icon_bg_color: rgba(31,91,117,1);
+$sidebar_categories_icon_color: rgba(31,91,117,1);
+$sidebar_categories_item_color: rgba(0,0,0,1);
+$sidebar_categories_item_bg_color: rgba(0,0,0,1);
+$sidebar_categories_item_hover_active_color: rgba(255,255,255,1);
+$sidebar_categories_item_bg_hover_active_color: rgba(38,133,127,1);
+$english_default_font: "Roboto", "Odoo Unicode Support Noto", sans-serif;
+$arabic_default_font: "Roboto", "Odoo Unicode Support Noto", sans-serif;
diff --git a/odex25_base/odex_themecraft/static/src/scss/web_theme.scss b/odex25_base/odex_themecraft/static/src/scss/web_theme.scss
new file mode 100755
index 000000000..2367a71b2
--- /dev/null
+++ b/odex25_base/odex_themecraft/static/src/scss/web_theme.scss
@@ -0,0 +1,2391 @@
+
+*:not(.fa) {
+ font-family: $english_default_font;
+}
+
+body{
+ &.o_home_menu_background{
+ background-image: $apps_bg_img;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ }
+
+ .o_setting_right_pane{
+ .img{
+ height: 60px;
+ }
+ }
+
+}
+
+.o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ border-bottom: 1px solid $navbar_bg_color;
+ }
+ }
+}
+
+
+.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ &:hover{
+ background-color: $apps_install_bg_color;
+ }
+}
+
+.btn-secondary{
+ color: $apps_more_info;
+}
+
+.o_backend_theme_icons{
+ background-color: #f9f9f9;
+}
+.app_item{
+ .app_item_body{
+ border: 1px solid #ddd;
+ margin-bottom: 10px;
+ // border-radius: 8px;
+ padding: 15px;
+ background-color: #fff;
+ p{
+ padding: 0;
+ text-wrap: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ .o_field_image{
+ padding: 0;
+ margin-bottom: 0;
+ img{
+ border: 1px solid #cdcdcd;
+ }
+ }
+
+ }
+}
+
+@media screen and (max-width: 319px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ border-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 12px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 320px) and (max-width: 420px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 14px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 421px) and (max-width: 767px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 14px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 768px) and (max-width: 1024px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 16px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 896px) and (max-width: 1024px) and (max-device-height: 768px){}
+
+@media screen and (min-width: 700px) and (max-width: 950px) and (max-device-height: 550px){}
+
+@media screen and (max-width: 699px) and (max-device-height: 550px){}
+
+@media screen and (max-width: 699px) and (max-device-height: 319px){}
+
+@media screen and (min-width: 768px) and (max-width: 895px) and (min-device-height: 1200px){}
+
+@media screen and (min-width: 896px) and (max-width: 1024px) and (min-device-height: 1250px){
+ .o_web_client{
+ .o_action_manager{
+ .o_action.o_view_controller{
+ .o_content{
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1025px) and (max-width: 1200px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 16px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1201px) and (max-width: 1599px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 16px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1600px) and (max-width: 1919px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 16px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 1920px) and (max-width: 2559px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 16px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 2560px) and (max-width: 3839px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 20px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 3840px){
+ .o_web_client{
+ header{
+ .o_main_navbar{
+ background-color: $navbar_bg_color;
+ /*Menu Toggle*/
+ a.o_menu_toggle{
+ background-color: $navbar_toggle;
+ }
+ button.o_mobile_menu_toggle{}
+ /*Selection Apps*/
+ a.o_menu_brand{
+ color: $selection_app_color;
+ &:hover{
+ background-color: $selection_app_bg_hover;
+ }
+ }
+ /*Nav Left ul*/
+ ul.o_menu_sections{
+ li{
+ a{
+ color:$navbar_ul_color;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ }
+ }
+ li.show{
+ a{
+ color:$navbar_ul_color;
+ background-color: $navbar_ul_bg_color_hover;;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ /*Nav Right ul*/
+ ul.o_menu_systray{
+ li.o_MessagingMenu{
+ a.o_MessagingMenu_toggler{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_mail_systray_item{
+ a.o-no-caret{
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: $navbar_badge_color;
+ // border-color: $navbar_ul_li_icons_color;
+ }
+ }
+ }
+ li.o_user_menu{
+ a.o-no-caret{
+ color: white!important;
+ font-weight: 600!important;
+ &:hover{
+ background-color: $navbar_ul_bg_color_hover;
+ }
+ span{
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+ }
+ li.o_user_menu.show{
+ a.o-no-caret{
+ // background-color: $navbar_ul_show_bg_color;
+ }
+ div.dropdown-menu{
+ background-color: $navbar_ul_dropdown_bg_color;
+ a{
+ color: $navbar_ul_dropdown_item_color;
+ background-color: $navbar_ul_dropdown_item_bg_color;
+ &:hover{
+ color: $navbar_ul_dropdown_item_color_hover;
+ background-color: $navbar_ul_dropdown_item_hover_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_home_menu{
+ /*search section*/
+ .o_menu_search{}
+ /*apps section*/
+ .o_home_menu_scrollable{
+ /*apps container*/
+ .o_apps{
+ /*app*/
+ .o_app{
+ &:hover{
+ background-color: $app_hover_bg_color!important;
+ }
+ .o_app_icon{}
+ .o_caption{
+ // font-size: 30px!important;
+ font-weight: 300!important;
+ color: $app_name_color!important;
+ }
+ }
+ }
+ }
+ }
+ .o_action_manager{
+ .o_action{
+ .o_control_panel{
+ .o_cp_top{
+ .o_cp_top_right{
+ .o_cp_searchview{
+ .o_searchview{
+ .o_searchview_input_container{
+ .o_searchview_facet{
+ .o_searchview_facet_label{
+ background-color: $filter_icon_bg_color;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_content{
+ /*Apps Module*/
+ .o_search_panel{
+ .o_search_panel_section{
+ header.o_search_panel_section_header{
+ i{
+ color: $sidebar_categories_icon_color;
+ }
+ }
+ ul.o_search_panel_field{
+ li{
+ header{
+ span{
+ color: $sidebar_categories_item_color!important;
+ }
+ }
+ header.active{
+ background-color: $sidebar_categories_item_bg_hover_active_color;
+ label{
+ color: $sidebar_categories_item_hover_active_color;
+ }
+ span{
+ color: $sidebar_categories_item_hover_active_color!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ .o_kanban_view{
+ .oe_module_vignette{
+ .oe_module_desc{
+ .oe_module_action{
+ a.btn-secondary{
+ color: $apps_more_info;
+ }
+ button.btn-primary{
+ color: $apps_install_color;
+ background-color: $apps_install_bg_color;
+ border-color: $apps_install_bg_color;
+ }
+ a.btn-info{
+ color: $apps_upgrade_color;
+ background-color: $apps_upgrade_bg_color;
+ border-color: $apps_upgrade_bg_color;
+ }
+ }
+ }
+ }
+ }
+ /*accounting module-invoice*/
+ .o_form_view.o_xxl_form_view{
+ height: auto!important;
+ display: flex!important;
+ flex-direction: column!important;
+ align-items: center!important;
+ .o_form_sheet_bg{
+ overflow: unset!important;
+ width: 100%!important;
+ }
+ }
+ /*Setting Module*/
+ .o_form_view.o_xxl_form_view.oe_form_configuration.o_base_settings.o_form_nosheet.o_form_editable{
+ .o_control_panel{
+ width: 100%!important;
+ }
+ .o_setting_container{
+ width: 100%!important;
+ .settings{
+ .app_settings_block{
+ h2{
+ background-color: $sections_titles_bg!important;
+ color: $sections_titles_color!important;
+ font-weight: 500!important;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/odex25_base/odex_themecraft/views/ir_settings.xml b/odex25_base/odex_themecraft/views/ir_settings.xml
new file mode 100755
index 000000000..496f3f9ca
--- /dev/null
+++ b/odex25_base/odex_themecraft/views/ir_settings.xml
@@ -0,0 +1,623 @@
+
+
+
+
+
+ res_config_settings_form_inhert
+ res.config.settings
+
+
+
+
+
+
About
+
+
+
+
FIXME Those links are
+ defined directly in the template which means that we
+ will have to update the template code is the link ever
+ changes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Home Menu
+
+
+
+
+
+
+
Apps Item Background (Hover)
+
+
+
+
+
+
+
Navigation Bar
+
+
+
+
+
+
+
+
Navbar Background (Hover)
+
+
+
+
Main Menu Title Background
+
+
+
+
Main Menu Title Background (Hover)
+
+
+
+
+
Navbar Item Background (Hover)
+
+
+
+
Navbar Counter Badge Background
+
+
+
+
+
+
+
+
+
+
+
+
Navbar Counter Badge Background
+
+
+
+
Navbar Dropdown Background
+
+
+
+
Navbar Dropdown Item Color
+
+
+
+
Navbar Dropdown Color (Hover)
+
+
+
+
Navbar Dropdown Item Background
+
+
+
+
Navbar Dropdown Item Background (Hover)
+
+
+
+
+
+
+
+
+
General Settings
+
+
+
+
+
+
Section Titles Color
+
+
+
+
Section Titles Background
+
+
+
+
+
+
+
Apps Screen
+
+
+
+
+
+
Apps More Info Button Background
+
+
+
+
Apps Install Button Color
+
+
+
+
Apps Install Button Background
+
+
+
+
+
+
+
+
+
Apps Upgrade Button Color
+
+
+
+
Apps Upgrade Button Background
+
+
+
+
+
+
+
Fonts
+
+
+
+
+
+
+
English Default Font
+
+
+
+
+
+
+
+
+
+
+
Arabic Default Font
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Icons Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Email Marketing Icon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Product Lifecycle Management (PLM) Icon
+
+
+
+
+
+
+
+
Products and Pricelists Icon
+
+
+
+
+
+
+
+
+
+
Marketing Automation Icon
+
+
+
+
+
+
+
+
+
+
+
+
+
Android and iPhone Icon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Skills Management Icon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_base/odex_themecraft/views/webclient.xml b/odex25_base/odex_themecraft/views/webclient.xml
new file mode 100755
index 000000000..270e04036
--- /dev/null
+++ b/odex25_base/odex_themecraft/views/webclient.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/README.rst b/odex25_base/web_widget_colorpicker/README.rst
new file mode 100644
index 000000000..779d7e8e8
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/README.rst
@@ -0,0 +1,41 @@
+Color Picker widget for Odoo web client
+================================
+
+
+Features
+========
+
+Now only in RGBA code.
+
+
+* Display the color on form view when you are not editing it
+
+ |form_view_no_edit|
+
+* Display the color on form view when you editing it
+
+ |form_view_edit|
+
+Usage
+=====
+
+You need to declare a char.
+
+ colorpicker = fields.Char(
+ string="Color Picker",
+ )
+
+
+In the view declaration,
+
+ ...
+
+
+
+ ...
+
+
diff --git a/odex25_base/web_widget_colorpicker/__init__.py b/odex25_base/web_widget_colorpicker/__init__.py
new file mode 100644
index 000000000..ec51c5a2b
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+#
diff --git a/odex25_base/web_widget_colorpicker/__manifest__.py b/odex25_base/web_widget_colorpicker/__manifest__.py
new file mode 100644
index 000000000..b1948b6bf
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/__manifest__.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+{
+ "name": """Web Widget Colorpicker""",
+ "summary": """Added Color Picker for From""",
+ "category": "web",
+ "images": ['static/description/icon.png'],
+ "version": "14.21.04.21",
+ "description": """
+
+ For Form View - added = widget="colorpicker"
+
+ ...
+
+
+
+ ...
+
+ """,
+
+ "author": "Viktor Vorobjov",
+ "license": "LGPL-3",
+ "website": "https://straga.github.io",
+ "support": "vostraga@gmail.com",
+ "price": 0.00,
+ "currency": "EUR",
+
+ "depends": [
+ "web"
+ ],
+ "external_dependencies": {"python": [], "bin": []},
+ "data": [
+ 'view/web_widget_colorpicker_view.xml'
+ ],
+ "qweb": [
+ 'static/src/xml/widget.xml',
+
+ ],
+ "demo": [],
+
+ "post_load": None,
+ "pre_init_hook": None,
+ "post_init_hook": None,
+ "installable": True,
+ "auto_install": False,
+ "application": False,
+}
diff --git a/odex25_base/web_widget_colorpicker/images/form_view_edit.png b/odex25_base/web_widget_colorpicker/images/form_view_edit.png
new file mode 100644
index 000000000..716e936ee
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/images/form_view_edit.png differ
diff --git a/odex25_base/web_widget_colorpicker/images/form_view_no_edit.png b/odex25_base/web_widget_colorpicker/images/form_view_no_edit.png
new file mode 100644
index 000000000..cb097a6cb
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/images/form_view_no_edit.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/description/form_view_edit.png b/odex25_base/web_widget_colorpicker/static/description/form_view_edit.png
new file mode 100644
index 000000000..716e936ee
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/description/form_view_edit.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/description/form_view_no_edit.png b/odex25_base/web_widget_colorpicker/static/description/form_view_no_edit.png
new file mode 100644
index 000000000..cb097a6cb
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/description/form_view_no_edit.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/description/icon.png b/odex25_base/web_widget_colorpicker/static/description/icon.png
new file mode 100644
index 000000000..ab43cbc9f
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/description/icon.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/description/index.html b/odex25_base/web_widget_colorpicker/static/description/index.html
new file mode 100644
index 000000000..1ad296b60
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/description/index.html
@@ -0,0 +1,80 @@
+
+
+
Web Widget field
+
Bootstrap Color Picker
+
+
+
+
+
+
+
+
+
+
+
+
+
Demo
+
Live:https://demo14.garage12.eu/
+
user: demo Password:demog
+
+
+
+
+
+
+
+
+
in Action
+
+
+
+ Form View
+
+
+
+
+
+
+ Edit Form View
+
+
+
+
+
+
+
+
+
+
+
+
+
Need our service?
+
Contact us by email
+
+
+
+
+
+
+
diff --git a/odex25_base/web_widget_colorpicker/static/src/css/widget.css b/odex25_base/web_widget_colorpicker/static/src/css/widget.css
new file mode 100644
index 000000000..7f0ad7cfd
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/css/widget.css
@@ -0,0 +1,55 @@
+.openerp .oe_form .oe_form_field_time_delta input {
+ width: 100%;
+}
+
+.openerp .oe_form .oe_form_field_delta div {
+ border: 1px solid;
+ display: inline-block;
+ height: 14px;
+ margin-right: 10px;
+ position: relative;
+ top: 3px;
+ width: 40px;
+}
+
+.oe_list_field_time_delta div {
+ border: 1px solid;
+ display: inline-block;
+ height: 14px;
+ margin-right: 10px;
+ position: relative;
+ top: 3px;
+ width: 40px;
+}
+
+.time_delta_box {
+ width: 10px;
+ height: 10px;
+ display: inline-block;
+ margin-right: 5px;
+}
+.colorpicker-element .input-group-addon i,
+.colorpicker-element .add-on i {
+ display: inline-block;
+ cursor: pointer;
+ /* height: 16px; */
+ height: 100%;
+ vertical-align: unset;
+ width: 30px;
+ border: 1px solid #c7c7c7;
+ border-left: none;
+}
+
+.o_rtl .colorpicker-element .input-group-addon i,
+.o_rtl .colorpicker-element .add-on i {
+ border: 1px solid #c7c7c7;
+ border-left: none;
+}
+.o_rtl .colorpicker-right:before{
+ left: auto;
+ right: 6px;
+}
+.o_rtl .colorpicker-right:after{
+ left: auto;
+ right: 7px;
+}
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/static/src/js/widget.js b/odex25_base/web_widget_colorpicker/static/src/js/widget.js
new file mode 100644
index 000000000..d20d51ffd
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/js/widget.js
@@ -0,0 +1,59 @@
+odoo.define('web.web_widget_colorpicker', function(require) {
+ "use strict";
+
+ var field_registry = require('web.field_registry');
+ var fields = require('web.basic_fields');
+
+ var FieldColorPicker = fields.FieldChar.extend({
+
+ template: 'FieldColorPicker',
+ widget_class: 'oe_form_field_color',
+
+ _renderReadonly: function () {
+ var show_value = this._formatValue(this.value);
+ console.log("*****************",show_value);
+ this.$el.text(show_value);
+ this.$el.css("background-color", show_value);
+
+ },
+
+ _getValue: function () {
+ var $input = this.$el.find('input');
+
+ var val = $input.val();
+ var isOk = /^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/i.test(val);
+
+ if (!isOk) {
+ return '';
+ }
+
+ return $input.val();
+
+
+ },
+
+ _renderEdit: function () {
+
+ var show_value = this.value ;
+ var $input = this.$el.find('input');
+ $input.val(show_value);
+
+ this.$el.colorpicker({format: 'rgba'});
+ this.$input = $input;
+
+ },
+
+
+ });
+
+ field_registry
+ .add('colorpicker', FieldColorPicker);
+
+
+
+return {
+ FieldColorPicker: FieldColorPicker
+};
+
+
+});
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.css b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.css
new file mode 100644
index 000000000..2abaeb1b3
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.css
@@ -0,0 +1,230 @@
+/*!
+ * Bootstrap Colorpicker v2.5.1
+ * https://itsjavi.com/bootstrap-colorpicker/
+ *
+ * Originally written by (c) 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ */
+.colorpicker-saturation {
+ width: 100px;
+ height: 100px;
+ background-image: url("data:image/png;base64,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");
+ cursor: crosshair;
+ float: left;
+}
+.colorpicker-saturation i {
+ display: block;
+ height: 5px;
+ width: 5px;
+ border: 1px solid #000;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: -4px 0 0 -4px;
+}
+.colorpicker-saturation i b {
+ display: block;
+ height: 5px;
+ width: 5px;
+ border: 1px solid #fff;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.colorpicker-hue,
+.colorpicker-alpha {
+ width: 15px;
+ height: 100px;
+ float: left;
+ cursor: row-resize;
+ margin-left: 4px;
+ margin-bottom: 4px;
+}
+.colorpicker-hue i,
+.colorpicker-alpha i {
+ display: block;
+ height: 1px;
+ background: #000;
+ border-top: 1px solid #fff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ margin-top: -1px;
+}
+.colorpicker-hue {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC");
+}
+.colorpicker-alpha {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=");
+ display: none;
+}
+.colorpicker-saturation,
+.colorpicker-hue,
+.colorpicker-alpha {
+ background-size: contain;
+}
+.colorpicker {
+ padding: 4px;
+ min-width: 130px;
+ margin-top: 1px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ z-index: 2500;
+}
+.colorpicker:before,
+.colorpicker:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.colorpicker:after {
+ clear: both;
+}
+.colorpicker:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ position: absolute;
+ top: -7px;
+ left: 6px;
+}
+.colorpicker:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ position: absolute;
+ top: -6px;
+ left: 7px;
+}
+.colorpicker div {
+ position: relative;
+}
+.colorpicker.colorpicker-with-alpha {
+ min-width: 140px;
+}
+.colorpicker.colorpicker-with-alpha .colorpicker-alpha {
+ display: block;
+}
+.colorpicker-color {
+ height: 10px;
+ margin-top: 5px;
+ clear: both;
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=");
+ background-position: 0 100%;
+}
+.colorpicker-color div {
+ height: 10px;
+}
+.colorpicker-selectors {
+ display: none;
+ height: 10px;
+ margin-top: 5px;
+ clear: both;
+}
+.colorpicker-selectors i {
+ cursor: pointer;
+ float: left;
+ height: 10px;
+ width: 10px;
+}
+.colorpicker-selectors i + i {
+ margin-left: 3px;
+}
+.colorpicker-element .input-group-addon i,
+.colorpicker-element .add-on i {
+ display: inline-block;
+ cursor: pointer;
+ height: 16px;
+ vertical-align: text-top;
+ width: 16px;
+}
+.colorpicker.colorpicker-inline {
+ position: relative;
+ display: inline-block;
+ float: none;
+ z-index: auto;
+}
+.colorpicker.colorpicker-horizontal {
+ width: 110px;
+ min-width: 110px;
+ height: auto;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-saturation {
+ margin-bottom: 4px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-color {
+ width: 100px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue,
+.colorpicker.colorpicker-horizontal .colorpicker-alpha {
+ width: 100px;
+ height: 15px;
+ float: left;
+ cursor: col-resize;
+ margin-left: 0px;
+ margin-bottom: 4px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue i,
+.colorpicker.colorpicker-horizontal .colorpicker-alpha i {
+ display: block;
+ height: 15px;
+ background: #ffffff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 1px;
+ border: none;
+ margin-top: 0px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==");
+}
+.colorpicker.colorpicker-horizontal .colorpicker-alpha {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=");
+}
+.colorpicker-right:before {
+ left: auto;
+ right: 6px;
+}
+.colorpicker-right:after {
+ left: auto;
+ right: 7px;
+}
+.colorpicker-no-arrow:before {
+ border-right: 0;
+ border-left: 0;
+}
+.colorpicker-no-arrow:after {
+ border-right: 0;
+ border-left: 0;
+}
+.colorpicker.colorpicker-visible,
+.colorpicker-alpha.colorpicker-visible,
+.colorpicker-saturation.colorpicker-visible,
+.colorpicker-hue.colorpicker-visible,
+.colorpicker-selectors.colorpicker-visible {
+ display: block;
+}
+.colorpicker.colorpicker-hidden,
+.colorpicker-alpha.colorpicker-hidden,
+.colorpicker-saturation.colorpicker-hidden,
+.colorpicker-hue.colorpicker-hidden,
+.colorpicker-selectors.colorpicker-hidden {
+ display: none;
+}
+.colorpicker-inline.colorpicker-visible {
+ display: inline-block;
+}
+/*# sourceMappingURL=bootstrap-colorpicker.css.map */
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.css.map b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.css.map
new file mode 100644
index 000000000..3c46f50b5
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/less/colorpicker.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Colorpicker v2.5.1\n * https://itsjavi.com/bootstrap-colorpicker/\n *\n * Originally written by (c) 2012 Stefan Petre\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0.txt\n *\n */\n\n.bgImg(@imgBase64) {\n background-image: url(\"@{imgBase64}\");\n}\n\n.borderRadius(@size) {\n -webkit-border-radius: @size;\n -moz-border-radius: @size;\n border-radius: @size;\n}\n\n.colorpicker-saturation {\n width: 100px;\n height: 100px;\n .bgImg('data:image/png;base64,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');\n cursor: crosshair;\n float: left;\n i {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #000;\n .borderRadius(5px);\n position: absolute;\n top: 0;\n left: 0;\n margin: -4px 0 0 -4px;\n b {\n display: block;\n height: 5px;\n width: 5px;\n border: 1px solid #fff;\n .borderRadius(5px);\n }\n }\n}\n\n.colorpicker-hue,\n.colorpicker-alpha {\n width: 15px;\n height: 100px;\n float: left;\n cursor: row-resize;\n margin-left: 4px;\n margin-bottom: 4px;\n}\n\n.colorpicker-hue i,\n.colorpicker-alpha i {\n display: block;\n height: 1px;\n background: #000;\n border-top: 1px solid #fff;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n margin-top: -1px;\n}\n\n.colorpicker-hue {\n .bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC');\n}\n\n.colorpicker-alpha {\n .bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=');\n display: none;\n}\n\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-alpha {\n background-size: contain;\n}\n\n.colorpicker {\n padding: 4px;\n min-width: 130px;\n margin-top: 1px;\n .borderRadius(4px);\n z-index: 2500;\n}\n\n.colorpicker:before,\n.colorpicker:after {\n display: table;\n content: \"\";\n line-height: 0;\n}\n\n.colorpicker:after {\n clear: both;\n}\n\n.colorpicker:before {\n content: '';\n display: inline-block;\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid #ccc;\n border-bottom-color: rgba(0, 0, 0, 0.2);\n position: absolute;\n top: -7px;\n left: 6px;\n}\n\n.colorpicker:after {\n content: '';\n display: inline-block;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #ffffff;\n position: absolute;\n top: -6px;\n left: 7px;\n}\n\n.colorpicker div {\n position: relative;\n}\n\n.colorpicker.colorpicker-with-alpha {\n min-width: 140px;\n}\n\n.colorpicker.colorpicker-with-alpha .colorpicker-alpha {\n display: block;\n}\n\n.colorpicker-color {\n height: 10px;\n margin-top: 5px;\n clear: both;\n .bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=');\n background-position: 0 100%;\n}\n\n.colorpicker-color div {\n height: 10px;\n}\n\n.colorpicker-selectors {\n display: none;\n height: 10px;\n margin-top: 5px;\n clear: both;\n}\n\n.colorpicker-selectors i {\n cursor: pointer;\n float: left;\n height: 10px;\n width: 10px;\n}\n\n.colorpicker-selectors i + i {\n margin-left: 3px;\n}\n\n.colorpicker-element .input-group-addon i,\n.colorpicker-element .add-on i {\n display: inline-block;\n cursor: pointer;\n height: 16px;\n vertical-align: text-top;\n width: 16px;\n}\n\n.colorpicker.colorpicker-inline {\n position: relative;\n display: inline-block;\n float: none;\n z-index: auto;\n}\n\n.colorpicker.colorpicker-horizontal {\n width: 110px;\n min-width: 110px;\n height: auto;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-saturation {\n margin-bottom: 4px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-color {\n width: 100px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n width: 100px;\n height: 15px;\n float: left;\n cursor: col-resize;\n margin-left: 0px;\n margin-bottom: 4px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue i,\n.colorpicker.colorpicker-horizontal .colorpicker-alpha i {\n display: block;\n height: 15px;\n background: #ffffff;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n border: none;\n margin-top: 0px;\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-hue {\n .bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==');\n}\n\n.colorpicker.colorpicker-horizontal .colorpicker-alpha {\n .bgImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=');\n}\n\n.colorpicker-right:before {\n left: auto;\n right: 6px;\n}\n\n.colorpicker-right:after {\n left: auto;\n right: 7px;\n}\n\n.colorpicker-no-arrow:before {\n border-right: 0;\n border-left: 0;\n}\n\n.colorpicker-no-arrow:after {\n border-right: 0;\n border-left: 0;\n}\n\n.colorpicker,\n.colorpicker-alpha,\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-selectors {\n &.colorpicker-visible {\n display: block;\n }\n}\n\n.colorpicker,\n.colorpicker-alpha,\n.colorpicker-saturation,\n.colorpicker-hue,\n.colorpicker-selectors {\n &.colorpicker-hidden {\n display: none;\n }\n}\n\n.colorpicker-inline.colorpicker-visible {\n display: inline-block;\n}\n"]}
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css
new file mode 100644
index 000000000..43494ca46
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css
@@ -0,0 +1,10 @@
+/*!
+ * Bootstrap Colorpicker v2.5.1
+ * https://itsjavi.com/bootstrap-colorpicker/
+ *
+ * Originally written by (c) 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ */.colorpicker-saturation{width:100px;height:100px;background-image:url(data:image/png;base64,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);cursor:crosshair;float:left}.colorpicker-saturation i{display:block;height:5px;width:5px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;position:absolute;top:0;left:0;margin:-4px 0 0 -4px}.colorpicker-saturation i b{display:block;height:5px;width:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-alpha,.colorpicker-hue{width:15px;height:100px;float:left;cursor:row-resize;margin-left:4px;margin-bottom:4px}.colorpicker-alpha i,.colorpicker-hue i{display:block;height:1px;background:#000;border-top:1px solid #fff;position:absolute;top:0;left:0;width:100%;margin-top:-1px}.colorpicker-hue{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAh0lEQVR4XgXAg3EDAAAAwI9to7Zt27a1/w49BASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTS1tHXo1KVbj159+g0YNGTYiFFjxk2YNGXajFlz5i1YtGTZilVr1m3YtGXbjl179h04dOTYiVNnzl24dOXajVt37j149OTZi1dv3n349OXbj19//wOxE1dQ8reGAAAAAElFTkSuQmCC)}.colorpicker-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=);display:none}.colorpicker-alpha,.colorpicker-hue,.colorpicker-saturation{background-size:contain}.colorpicker{padding:4px;min-width:130px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;z-index:2500}.colorpicker:after,.colorpicker:before{display:table;content:"";line-height:0}.colorpicker:after{clear:both}.colorpicker:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.colorpicker:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAQAAAAVxWkcAAABr0lEQVR4Xo2VwU0DQQxF7dmRuNIFlzlSAR3QAaXQQdIBJVABFXDcOVAAd67cjJLR07dkhcSrkZKfb/t7bG88rFo3B5gZPMNycItu2xloGV7MWHzM9zuzFWCkmA0nK6AszCUJDW6+mG6R03ncw5v8EMTEvZ2O3AliYjpslblc0RF9LmZYWxURU6aKytWZYsoWCAe+xwOZp1GsEukGiIkYxcQCHck99+gRgB7JncyIB5SGEhP3Yh5P6JwX+u6AnYot104d8DJT7uH7M9JH6OZbimj0vfMVaYnJIZFJDBW9kHlerL2C6JV4mSt7uuo2N57RxnZ+usQjn0R1jwBJBrNO3evJpVYUWsJ/E3UiXRlv24/7YZ04xmEdWlzcKS+B/eapeyMvFd2k0+hRk/T0AmTW8h69s2sjYMsdPntECiILhAeIMZAeH4QvUwfn6ijC0tTV+fT9ky8jM9nK2g7Ly1VjSpKYq6IvsAm7MtNu1orEqa/K3KNvgMFdhfquPfJmp2dbh0/8Gzb6Y22ViaNr6n5410zXdngVhbu6XqdOtWOuin5hjABGp4a2uotZ71MVCfwDBt2/v37yo6AAAAAASUVORK5CYII=);background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-selectors{display:none;height:10px;margin-top:5px;clear:both}.colorpicker-selectors i{cursor:pointer;float:left;height:10px;width:10px}.colorpicker-selectors i+i{margin-left:3px}.colorpicker-element .add-on i,.colorpicker-element .input-group-addon i{display:inline-block;cursor:pointer;height:16px;vertical-align:text-top;width:16px}.colorpicker.colorpicker-inline{position:relative;display:inline-block;float:none;z-index:auto}.colorpicker.colorpicker-horizontal{width:110px;min-width:110px;height:auto}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-alpha,.colorpicker.colorpicker-horizontal .colorpicker-hue{width:100px;height:15px;float:left;cursor:col-resize;margin-left:0;margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-alpha i,.colorpicker.colorpicker-horizontal .colorpicker-hue i{display:block;height:15px;background:#fff;position:absolute;top:0;left:0;width:1px;border:none;margin-top:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAABCAMAAAAfBfuPAAABLFBMVEXqFBb/ABH/ACL/ADH/AEH/AFD/AGD/AG7/AH7/AI3/AJ3/AKz/ALz/AMr/ANv/AOr/APr2AP/mAP/XAP/HAP+4AP+oAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8BAv8AEP8AH/8AL/8APv8ATv8AXP8Abf8Ae/8Ai/8Amv8Aqv8AuP8Ayf8A1/8A5/8A9/8A//gA/+kA/9kA/8oA/7oA/6wA/5sA/40A/30A/24A/14A/1AA/z8A/zEA/yEA/xEB/wMN/wAd/wAs/wA8/wBK/wBb/wBp/wB5/wCI/wCY/wCm/wC3/wDF/wDV/wDk/wD1/wD/+gD/7AD/3AD/zAD/vgD/rQD/nwD/jgD/gAD/cAD/YgD/UQD/QwD/MgD/JAD/FAD4Eg42qAedAAAAbUlEQVR4XgXAghEDsbxtlrZt27ax/w49ACAYQTGcICmaYTleECVZUTXdMC1Wm93hdLk9Xp8/EAyFI9FYPJFMpTPZXL5QLJUr1Vq90Wy1O91efzAcjSfT2XyxXK03293+cDydL9fb/fF8vT/f3x+LfRNXARMbCAAAAABJRU5ErkJggg==)}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAKCAQAAADoFTP1AAAB9ElEQVR4XoWTQW4VMRBEu9qWEimL7DhEMp8NF+ASnJJLcAQgE1bcgBUSkYKUuHCrZ9pjeqSU5Yn9LPu7umJQBIIv+k7vIOrtK66L4lmr3pVOrOv3otp619KZ0/KjdNI79L52Uo09FBQWrU0vfe5trezU+hLsoUKd3Repovte+0vbq/7Lj5XbaHECKasR9G4MPlbp+gzZxd6koPEJCkAYC5SjcOTAIIOK90Dja1IfIZ8Z+zAY9jm3b5Ia+MT5sFcqRJrR2AYYA8Kua5BzYRrFPNmD4PQMegGJMOffJJUsWiI3nCHZZjInNdffLWOufzbc3JaboCAVxwmnRHbhLSPwRJ4wU0BRSc6HkECYYVw95nMKgJOcylxrJttE5Ibzf9Xq9GPvP+WX3MiV/MGHfRu/SentRQrfG1GzsIrytdNXucSRKxQNIGHM9YhGFQJcdjNcBZvfJayuYe4Sia1CzwW+19mWOhe37HsxJWKwbu/jluEU15QzAQjAqCEbhMJc78GYV2E0kooHDubUImWkTOhGpgv8PoT8DJG/bzxna4BZ0eOFSOaLADGeSpFsg5AzeaDZIDQQXjZ4y/8ryfzUXBwdELRjTjCNvOeT0rNlrJz90vwy6N9pXXQEluX0inElpPWokSdiLCfiNJJjMKQ8Qsh8GEKQKMo/eiHrNbI9UksAAAAASUVORK5CYII=)}.colorpicker-right:before{left:auto;right:6px}.colorpicker-right:after{left:auto;right:7px}.colorpicker-no-arrow:before{border-right:0;border-left:0}.colorpicker-no-arrow:after{border-right:0;border-left:0}.colorpicker-alpha.colorpicker-visible,.colorpicker-hue.colorpicker-visible,.colorpicker-saturation.colorpicker-visible,.colorpicker-selectors.colorpicker-visible,.colorpicker.colorpicker-visible{display:block}.colorpicker-alpha.colorpicker-hidden,.colorpicker-hue.colorpicker-hidden,.colorpicker-saturation.colorpicker-hidden,.colorpicker-selectors.colorpicker-hidden,.colorpicker.colorpicker-hidden{display:none}.colorpicker-inline.colorpicker-visible{display:inline-block}
+/*# sourceMappingURL=bootstrap-colorpicker.min.css.map */
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css.map b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css.map
new file mode 100644
index 000000000..82c3ed06a
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/less/colorpicker.less"],"names":[],"mappings":";;;;;;;;AAoBA,wBACE,MAAA,MACA,OAAA,MAXA,iBAAsB,g7KAatB,OAAA,UACA,MAAA,KACA,0BACE,QAAA,MACA,OAAA,IACA,MAAA,IACA,OAAA,IAAA,MAAA,KAfF,sBAAA,IACA,mBAAA,IACA,cAAA,IAeE,SAAA,SACA,IAAA,EACA,KAAA,EACA,OAAA,KAAA,EAAA,EAAA,KACA,4BACE,QAAA,MACA,OAAA,IACA,MAAA,IACA,OAAA,IAAA,MAAA,KAzBJ,sBAAA,IACA,mBAAA,IACA,cAAA,IA8BF,mBADA,iBAEE,MAAA,KACA,OAAA,MACA,MAAA,KACA,OAAA,WACA,YAAA,IACA,cAAA,IAIiB,qBADF,mBAEf,QAAA,MACA,OAAA,IACA,WAAA,KACA,WAAA,IAAA,MAAA,KACA,SAAA,SACA,IAAA,EACA,KAAA,EACA,MAAA,KACA,WAAA,KAGF,iBA1DE,iBAAsB,4rBA8DxB,mBA9DE,iBAAsB,wqBAgEtB,QAAA,KAKF,mBADA,iBADA,wBAGE,gBAAA,QAGF,aACE,QAAA,IACA,UAAA,MACA,WAAA,IAxEA,sBAAA,IACA,mBAAA,IACA,cAAA,IAwEA,QAAA,KAIU,mBADA,oBAEV,QAAA,MACA,QAAA,GACA,YAAA,EAGU,mBACV,MAAA,KAGU,oBACV,QAAA,GACA,QAAA,aACA,YAAA,IAAA,MAAA,YACA,aAAA,IAAA,MAAA,YACA,cAAA,IAAA,MAAA,KACA,oBAAA,eACA,SAAA,SACA,IAAA,KACA,KAAA,IAGU,mBACV,QAAA,GACA,QAAA,aACA,YAAA,IAAA,MAAA,YACA,aAAA,IAAA,MAAA,YACA,cAAA,IAAA,MAAA,KACA,SAAA,SACA,IAAA,KACA,KAAA,IAGW,iBACX,SAAA,SAGU,oCACV,UAAA,MAGkC,uDAClC,QAAA,MAGF,mBACE,OAAA,KACA,WAAA,IACA,MAAA,KAlIA,iBAAsB,wqBAoItB,oBAAA,EAAA,KAGiB,uBACjB,OAAA,KAGF,uBACE,QAAA,KACA,OAAA,KACA,WAAA,IACA,MAAA,KAGqB,yBACrB,OAAA,QACA,MAAA,KACA,OAAA,KACA,MAAA,KAGuB,2BACvB,YAAA,IAI2B,+BADW,0CAEtC,QAAA,aACA,OAAA,QACA,OAAA,KACA,eAAA,SACA,MAAA,KAGU,gCACV,SAAA,SACA,QAAA,aACA,MAAA,KACA,QAAA,KAGU,oCACV,MAAA,MACA,UAAA,MACA,OAAA,KAGkC,4DAClC,cAAA,IAGkC,uDAClC,MAAA,MAIkC,uDADA,qDAElC,MAAA,MACA,OAAA,KACA,MAAA,KACA,OAAA,WACA,YAAA,EACA,cAAA,IAIqD,yDADF,uDAEnD,QAAA,MACA,OAAA,KACA,WAAA,KACA,SAAA,SACA,IAAA,EACA,KAAA,EACA,MAAA,IACA,OAAA,KACA,WAAA,EAGkC,qDAlNlC,iBAAsB,4pBAsNY,uDAtNlC,iBAAsB,owBA0NN,0BAChB,KAAA,KACA,MAAA,IAGgB,yBAChB,KAAA,KACA,MAAA,IAGmB,6BACnB,aAAA,EACA,YAAA,EAGmB,4BACnB,aAAA,EACA,YAAA,EAQC,uCAAA,qCAAA,4CAAA,2CAAA,iCACC,QAAA,MASD,sCAAA,oCAAA,2CAAA,0CAAA,gCACC,QAAA,KAIe,wCACjB,QAAA"}
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png
new file mode 100644
index 000000000..f83188951
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png
new file mode 100644
index 000000000..2e53a30e7
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png
new file mode 100644
index 000000000..3dcd5946a
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png
new file mode 100644
index 000000000..6f5ec2e50
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png
new file mode 100644
index 000000000..170841cba
Binary files /dev/null and b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png differ
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/js/bootstrap-colorpicker.js b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/js/bootstrap-colorpicker.js
new file mode 100644
index 000000000..b2cdf560c
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/js/bootstrap-colorpicker.js
@@ -0,0 +1,1325 @@
+/*!
+ * Bootstrap Colorpicker v2.5.1
+ * https://itsjavi.com/bootstrap-colorpicker/
+ *
+ * Originally written by (c) 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module unless amdModuleId is set
+ define(["jquery"], function(jq) {
+ return (factory(jq));
+ });
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory(require("jquery"));
+ } else if (jQuery && !jQuery.fn.colorpicker) {
+ factory(jQuery);
+ }
+}(this, function($) {
+ 'use strict';
+ /**
+ * Color manipulation helper class
+ *
+ * @param {Object|String} [val]
+ * @param {Object} [predefinedColors]
+ * @param {String|null} [fallbackColor]
+ * @param {String|null} [fallbackFormat]
+ * @param {Boolean} [hexNumberSignPrefix]
+ * @constructor
+ */
+ var Color = function(
+ val, predefinedColors, fallbackColor, fallbackFormat, hexNumberSignPrefix) {
+ this.fallbackValue = fallbackColor ?
+ (
+ fallbackColor && (typeof fallbackColor.h !== 'undefined') ?
+ fallbackColor :
+ this.value = {
+ h: 0,
+ s: 0,
+ b: 0,
+ a: 1
+ }
+ ) :
+ null;
+
+ this.fallbackFormat = fallbackFormat ? fallbackFormat : 'rgba';
+
+ this.hexNumberSignPrefix = hexNumberSignPrefix === true;
+
+ this.value = this.fallbackValue;
+
+ this.origFormat = null; // original string format
+
+ this.predefinedColors = predefinedColors ? predefinedColors : {};
+
+ // We don't want to share aliases across instances so we extend new object
+ this.colors = $.extend({}, Color.webColors, this.predefinedColors);
+
+ if (val) {
+ if (typeof val.h !== 'undefined') {
+ this.value = val;
+ } else {
+ this.setColor(String(val));
+ }
+ }
+
+ if (!this.value) {
+ // Initial value is always black if no arguments are passed or val is empty
+ this.value = {
+ h: 0,
+ s: 0,
+ b: 0,
+ a: 1
+ };
+ }
+ };
+
+ Color.webColors = { // 140 predefined colors from the HTML Colors spec
+ "aliceblue": "f0f8ff",
+ "antiquewhite": "faebd7",
+ "aqua": "00ffff",
+ "aquamarine": "7fffd4",
+ "azure": "f0ffff",
+ "beige": "f5f5dc",
+ "bisque": "ffe4c4",
+ "black": "000000",
+ "blanchedalmond": "ffebcd",
+ "blue": "0000ff",
+ "blueviolet": "8a2be2",
+ "brown": "a52a2a",
+ "burlywood": "deb887",
+ "cadetblue": "5f9ea0",
+ "chartreuse": "7fff00",
+ "chocolate": "d2691e",
+ "coral": "ff7f50",
+ "cornflowerblue": "6495ed",
+ "cornsilk": "fff8dc",
+ "crimson": "dc143c",
+ "cyan": "00ffff",
+ "darkblue": "00008b",
+ "darkcyan": "008b8b",
+ "darkgoldenrod": "b8860b",
+ "darkgray": "a9a9a9",
+ "darkgreen": "006400",
+ "darkkhaki": "bdb76b",
+ "darkmagenta": "8b008b",
+ "darkolivegreen": "556b2f",
+ "darkorange": "ff8c00",
+ "darkorchid": "9932cc",
+ "darkred": "8b0000",
+ "darksalmon": "e9967a",
+ "darkseagreen": "8fbc8f",
+ "darkslateblue": "483d8b",
+ "darkslategray": "2f4f4f",
+ "darkturquoise": "00ced1",
+ "darkviolet": "9400d3",
+ "deeppink": "ff1493",
+ "deepskyblue": "00bfff",
+ "dimgray": "696969",
+ "dodgerblue": "1e90ff",
+ "firebrick": "b22222",
+ "floralwhite": "fffaf0",
+ "forestgreen": "228b22",
+ "fuchsia": "ff00ff",
+ "gainsboro": "dcdcdc",
+ "ghostwhite": "f8f8ff",
+ "gold": "ffd700",
+ "goldenrod": "daa520",
+ "gray": "808080",
+ "green": "008000",
+ "greenyellow": "adff2f",
+ "honeydew": "f0fff0",
+ "hotpink": "ff69b4",
+ "indianred": "cd5c5c",
+ "indigo": "4b0082",
+ "ivory": "fffff0",
+ "khaki": "f0e68c",
+ "lavender": "e6e6fa",
+ "lavenderblush": "fff0f5",
+ "lawngreen": "7cfc00",
+ "lemonchiffon": "fffacd",
+ "lightblue": "add8e6",
+ "lightcoral": "f08080",
+ "lightcyan": "e0ffff",
+ "lightgoldenrodyellow": "fafad2",
+ "lightgrey": "d3d3d3",
+ "lightgreen": "90ee90",
+ "lightpink": "ffb6c1",
+ "lightsalmon": "ffa07a",
+ "lightseagreen": "20b2aa",
+ "lightskyblue": "87cefa",
+ "lightslategray": "778899",
+ "lightsteelblue": "b0c4de",
+ "lightyellow": "ffffe0",
+ "lime": "00ff00",
+ "limegreen": "32cd32",
+ "linen": "faf0e6",
+ "magenta": "ff00ff",
+ "maroon": "800000",
+ "mediumaquamarine": "66cdaa",
+ "mediumblue": "0000cd",
+ "mediumorchid": "ba55d3",
+ "mediumpurple": "9370d8",
+ "mediumseagreen": "3cb371",
+ "mediumslateblue": "7b68ee",
+ "mediumspringgreen": "00fa9a",
+ "mediumturquoise": "48d1cc",
+ "mediumvioletred": "c71585",
+ "midnightblue": "191970",
+ "mintcream": "f5fffa",
+ "mistyrose": "ffe4e1",
+ "moccasin": "ffe4b5",
+ "navajowhite": "ffdead",
+ "navy": "000080",
+ "oldlace": "fdf5e6",
+ "olive": "808000",
+ "olivedrab": "6b8e23",
+ "orange": "ffa500",
+ "orangered": "ff4500",
+ "orchid": "da70d6",
+ "palegoldenrod": "eee8aa",
+ "palegreen": "98fb98",
+ "paleturquoise": "afeeee",
+ "palevioletred": "d87093",
+ "papayawhip": "ffefd5",
+ "peachpuff": "ffdab9",
+ "peru": "cd853f",
+ "pink": "ffc0cb",
+ "plum": "dda0dd",
+ "powderblue": "b0e0e6",
+ "purple": "800080",
+ "red": "ff0000",
+ "rosybrown": "bc8f8f",
+ "royalblue": "4169e1",
+ "saddlebrown": "8b4513",
+ "salmon": "fa8072",
+ "sandybrown": "f4a460",
+ "seagreen": "2e8b57",
+ "seashell": "fff5ee",
+ "sienna": "a0522d",
+ "silver": "c0c0c0",
+ "skyblue": "87ceeb",
+ "slateblue": "6a5acd",
+ "slategray": "708090",
+ "snow": "fffafa",
+ "springgreen": "00ff7f",
+ "steelblue": "4682b4",
+ "tan": "d2b48c",
+ "teal": "008080",
+ "thistle": "d8bfd8",
+ "tomato": "ff6347",
+ "turquoise": "40e0d0",
+ "violet": "ee82ee",
+ "wheat": "f5deb3",
+ "white": "ffffff",
+ "whitesmoke": "f5f5f5",
+ "yellow": "ffff00",
+ "yellowgreen": "9acd32",
+ "transparent": "transparent"
+ };
+
+ Color.prototype = {
+ constructor: Color,
+ colors: {}, // merged web and predefined colors
+ predefinedColors: {},
+ /**
+ * @return {Object}
+ */
+ getValue: function() {
+ return this.value;
+ },
+ /**
+ * @param {Object} val
+ */
+ setValue: function(val) {
+ this.value = val;
+ },
+ _sanitizeNumber: function(val) {
+ if (typeof val === 'number') {
+ return val;
+ }
+ if (isNaN(val) || (val === null) || (val === '') || (val === undefined)) {
+ return 1;
+ }
+ if (val === '') {
+ return 0;
+ }
+ if (typeof val.toLowerCase !== 'undefined') {
+ if (val.match(/^\./)) {
+ val = "0" + val;
+ }
+ return Math.ceil(parseFloat(val) * 100) / 100;
+ }
+ return 1;
+ },
+ isTransparent: function(strVal) {
+ if (!strVal || !(typeof strVal === 'string' || strVal instanceof String)) {
+ return false;
+ }
+ strVal = strVal.toLowerCase().trim();
+ return (strVal === 'transparent') || (strVal.match(/#?00000000/)) || (strVal.match(/(rgba|hsla)\(0,0,0,0?\.?0\)/));
+ },
+ rgbaIsTransparent: function(rgba) {
+ return ((rgba.r === 0) && (rgba.g === 0) && (rgba.b === 0) && (rgba.a === 0));
+ },
+ // parse a string to HSB
+ /**
+ * @protected
+ * @param {String} strVal
+ * @returns {boolean} Returns true if it could be parsed, false otherwise
+ */
+ setColor: function(strVal) {
+ strVal = strVal.toLowerCase().trim();
+ if (strVal) {
+ if (this.isTransparent(strVal)) {
+ this.value = {
+ h: 0,
+ s: 0,
+ b: 0,
+ a: 0
+ };
+ return true;
+ } else {
+ var parsedColor = this.parse(strVal);
+ if (parsedColor) {
+ this.value = this.value = {
+ h: parsedColor.h,
+ s: parsedColor.s,
+ b: parsedColor.b,
+ a: parsedColor.a
+ };
+ if (!this.origFormat) {
+ this.origFormat = parsedColor.format;
+ }
+ } else if (this.fallbackValue) {
+ // if parser fails, defaults to fallbackValue if defined, otherwise the value won't be changed
+ this.value = this.fallbackValue;
+ }
+ }
+ }
+ return false;
+ },
+ setHue: function(h) {
+ this.value.h = 1 - h;
+ },
+ setSaturation: function(s) {
+ this.value.s = s;
+ },
+ setBrightness: function(b) {
+ this.value.b = 1 - b;
+ },
+ setAlpha: function(a) {
+ this.value.a = Math.round((parseInt((1 - a) * 100, 10) / 100) * 100) / 100;
+ },
+ toRGB: function(h, s, b, a) {
+ if (arguments.length === 0) {
+ h = this.value.h;
+ s = this.value.s;
+ b = this.value.b;
+ a = this.value.a;
+ }
+
+ h *= 360;
+ var R, G, B, X, C;
+ h = (h % 360) / 60;
+ C = b * s;
+ X = C * (1 - Math.abs(h % 2 - 1));
+ R = G = B = b - C;
+
+ h = ~~h;
+ R += [C, X, 0, 0, X, C][h];
+ G += [X, C, C, X, 0, 0][h];
+ B += [0, 0, X, C, C, X][h];
+
+ return {
+ r: Math.round(R * 255),
+ g: Math.round(G * 255),
+ b: Math.round(B * 255),
+ a: a
+ };
+ },
+ toHex: function(ignoreFormat, h, s, b, a) {
+ if (arguments.length <= 1) {
+ h = this.value.h;
+ s = this.value.s;
+ b = this.value.b;
+ a = this.value.a;
+ }
+
+ var prefix = '#';
+ var rgb = this.toRGB(h, s, b, a);
+
+ if (this.rgbaIsTransparent(rgb)) {
+ return 'transparent';
+ }
+
+ if (!ignoreFormat) {
+ prefix = (this.hexNumberSignPrefix ? '#' : '');
+ }
+
+ var hexStr = prefix + (
+ (1 << 24) +
+ (parseInt(rgb.r) << 16) +
+ (parseInt(rgb.g) << 8) +
+ parseInt(rgb.b))
+ .toString(16)
+ .slice(1);
+
+ return hexStr;
+ },
+ toHSL: function(h, s, b, a) {
+ if (arguments.length === 0) {
+ h = this.value.h;
+ s = this.value.s;
+ b = this.value.b;
+ a = this.value.a;
+ }
+
+ var H = h,
+ L = (2 - s) * b,
+ S = s * b;
+ if (L > 0 && L <= 1) {
+ S /= L;
+ } else {
+ S /= 2 - L;
+ }
+ L /= 2;
+ if (S > 1) {
+ S = 1;
+ }
+ return {
+ h: isNaN(H) ? 0 : H,
+ s: isNaN(S) ? 0 : S,
+ l: isNaN(L) ? 0 : L,
+ a: isNaN(a) ? 0 : a
+ };
+ },
+ toAlias: function(r, g, b, a) {
+ var c, rgb = (arguments.length === 0) ? this.toHex(true) : this.toHex(true, r, g, b, a);
+
+ // support predef. colors in non-hex format too, as defined in the alias itself
+ var original = this.origFormat === 'alias' ? rgb : this.toString(false, this.origFormat);
+
+ for (var alias in this.colors) {
+ c = this.colors[alias].toLowerCase().trim();
+ if ((c === rgb) || (c === original)) {
+ return alias;
+ }
+ }
+ return false;
+ },
+ RGBtoHSB: function(r, g, b, a) {
+ r /= 255;
+ g /= 255;
+ b /= 255;
+
+ var H, S, V, C;
+ V = Math.max(r, g, b);
+ C = V - Math.min(r, g, b);
+ H = (C === 0 ? null :
+ V === r ? (g - b) / C :
+ V === g ? (b - r) / C + 2 :
+ (r - g) / C + 4
+ );
+ H = ((H + 360) % 6) * 60 / 360;
+ S = C === 0 ? 0 : C / V;
+ return {
+ h: this._sanitizeNumber(H),
+ s: S,
+ b: V,
+ a: this._sanitizeNumber(a)
+ };
+ },
+ HueToRGB: function(p, q, h) {
+ if (h < 0) {
+ h += 1;
+ } else if (h > 1) {
+ h -= 1;
+ }
+ if ((h * 6) < 1) {
+ return p + (q - p) * h * 6;
+ } else if ((h * 2) < 1) {
+ return q;
+ } else if ((h * 3) < 2) {
+ return p + (q - p) * ((2 / 3) - h) * 6;
+ } else {
+ return p;
+ }
+ },
+ HSLtoRGB: function(h, s, l, a) {
+ if (s < 0) {
+ s = 0;
+ }
+ var q;
+ if (l <= 0.5) {
+ q = l * (1 + s);
+ } else {
+ q = l + s - (l * s);
+ }
+
+ var p = 2 * l - q;
+
+ var tr = h + (1 / 3);
+ var tg = h;
+ var tb = h - (1 / 3);
+
+ var r = Math.round(this.HueToRGB(p, q, tr) * 255);
+ var g = Math.round(this.HueToRGB(p, q, tg) * 255);
+ var b = Math.round(this.HueToRGB(p, q, tb) * 255);
+ return [r, g, b, this._sanitizeNumber(a)];
+ },
+ /**
+ * @param {String} strVal
+ * @returns {Object} Object containing h,s,b,a,format properties or FALSE if failed to parse
+ */
+ parse: function(strVal) {
+ if (arguments.length === 0) {
+ return false;
+ }
+
+ var that = this,
+ result = false,
+ isAlias = (typeof this.colors[strVal] !== 'undefined'),
+ values, format;
+
+ if (isAlias) {
+ strVal = this.colors[strVal].toLowerCase().trim();
+ }
+
+ $.each(this.stringParsers, function(i, parser) {
+ var match = parser.re.exec(strVal);
+ values = match && parser.parse.apply(that, [match]);
+ if (values) {
+ result = {};
+ format = (isAlias ? 'alias' : (parser.format ? parser.format : that.getValidFallbackFormat()));
+ if (format.match(/hsla?/)) {
+ result = that.RGBtoHSB.apply(that, that.HSLtoRGB.apply(that, values));
+ } else {
+ result = that.RGBtoHSB.apply(that, values);
+ }
+ if (result instanceof Object) {
+ result.format = format;
+ }
+ return false; // stop iterating
+ }
+ return true;
+ });
+ return result;
+ },
+ getValidFallbackFormat: function() {
+ var formats = [
+ 'rgba', 'rgb', 'hex', 'hsla', 'hsl'
+ ];
+ if (this.origFormat && (formats.indexOf(this.origFormat) !== -1)) {
+ return this.origFormat;
+ }
+ if (this.fallbackFormat && (formats.indexOf(this.fallbackFormat) !== -1)) {
+ return this.fallbackFormat;
+ }
+
+ return 'rgba'; // By default, return a format that will not lose the alpha info
+ },
+ /**
+ *
+ * @param {string} [format] (default: rgba)
+ * @param {boolean} [translateAlias] Return real color for pre-defined (non-standard) aliases (default: false)
+ * @param {boolean} [forceRawValue] Forces hashtag prefix when getting hex color (default: false)
+ * @returns {String}
+ */
+ toString: function(forceRawValue, format, translateAlias) {
+ format = format || this.origFormat || this.fallbackFormat;
+ translateAlias = translateAlias || false;
+
+ var c = false;
+
+ switch (format) {
+ case 'rgb':
+ {
+ c = this.toRGB();
+ if (this.rgbaIsTransparent(c)) {
+ return 'transparent';
+ }
+ return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';
+ }
+ break;
+ case 'rgba':
+ {
+ c = this.toRGB();
+ return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';
+ }
+ break;
+ case 'hsl':
+ {
+ c = this.toHSL();
+ return 'hsl(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%)';
+ }
+ break;
+ case 'hsla':
+ {
+ c = this.toHSL();
+ return 'hsla(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%,' + c.a + ')';
+ }
+ break;
+ case 'hex':
+ {
+ return this.toHex(forceRawValue);
+ }
+ break;
+ case 'alias':
+ {
+ c = this.toAlias();
+
+ if (c === false) {
+ return this.toString(forceRawValue, this.getValidFallbackFormat());
+ }
+
+ if (translateAlias && !(c in Color.webColors) && (c in this.predefinedColors)) {
+ return this.predefinedColors[c];
+ }
+
+ return c;
+ }
+ default:
+ {
+ return c;
+ }
+ break;
+ }
+ },
+ // a set of RE's that can match strings and generate color tuples.
+ // from John Resig color plugin
+ // https://github.com/jquery/jquery-color/
+ stringParsers: [{
+ re: /rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*?\)/,
+ format: 'rgb',
+ parse: function(execResult) {
+ return [
+ execResult[1],
+ execResult[2],
+ execResult[3],
+ 1
+ ];
+ }
+ }, {
+ re: /rgb\(\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*?\)/,
+ format: 'rgb',
+ parse: function(execResult) {
+ return [
+ 2.55 * execResult[1],
+ 2.55 * execResult[2],
+ 2.55 * execResult[3],
+ 1
+ ];
+ }
+ }, {
+ re: /rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,
+ format: 'rgba',
+ parse: function(execResult) {
+ return [
+ execResult[1],
+ execResult[2],
+ execResult[3],
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /rgba\(\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,
+ format: 'rgba',
+ parse: function(execResult) {
+ return [
+ 2.55 * execResult[1],
+ 2.55 * execResult[2],
+ 2.55 * execResult[3],
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /hsl\(\s*(\d*(?:\.\d+)?)\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*?\)/,
+ format: 'hsl',
+ parse: function(execResult) {
+ return [
+ execResult[1] / 360,
+ execResult[2] / 100,
+ execResult[3] / 100,
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /hsla\(\s*(\d*(?:\.\d+)?)\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,
+ format: 'hsla',
+ parse: function(execResult) {
+ return [
+ execResult[1] / 360,
+ execResult[2] / 100,
+ execResult[3] / 100,
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
+ format: 'hex',
+ parse: function(execResult) {
+ return [
+ parseInt(execResult[1], 16),
+ parseInt(execResult[2], 16),
+ parseInt(execResult[3], 16),
+ 1
+ ];
+ }
+ }, {
+ re: /#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
+ format: 'hex',
+ parse: function(execResult) {
+ return [
+ parseInt(execResult[1] + execResult[1], 16),
+ parseInt(execResult[2] + execResult[2], 16),
+ parseInt(execResult[3] + execResult[3], 16),
+ 1
+ ];
+ }
+ }],
+ colorNameToHex: function(name) {
+ if (typeof this.colors[name.toLowerCase()] !== 'undefined') {
+ return this.colors[name.toLowerCase()];
+ }
+ return false;
+ }
+ };
+
+ /*
+ * Default plugin options
+ */
+ var defaults = {
+ horizontal: false, // horizontal mode layout ?
+ inline: false, //forces to show the colorpicker as an inline element
+ color: false, //forces a color
+ format: false, //forces a format
+ input: 'input', // children input selector
+ container: false, // container selector
+ component: '.add-on, .input-group-addon', // children component selector
+ fallbackColor: false, // fallback color value. null = keeps current color.
+ fallbackFormat: 'hex', // fallback color format
+ hexNumberSignPrefix: true, // put a '#' (number sign) before hex strings
+ sliders: {
+ saturation: {
+ maxLeft: 100,
+ maxTop: 100,
+ callLeft: 'setSaturation',
+ callTop: 'setBrightness'
+ },
+ hue: {
+ maxLeft: 0,
+ maxTop: 100,
+ callLeft: false,
+ callTop: 'setHue'
+ },
+ alpha: {
+ maxLeft: 0,
+ maxTop: 100,
+ callLeft: false,
+ callTop: 'setAlpha'
+ }
+ },
+ slidersHorz: {
+ saturation: {
+ maxLeft: 100,
+ maxTop: 100,
+ callLeft: 'setSaturation',
+ callTop: 'setBrightness'
+ },
+ hue: {
+ maxLeft: 100,
+ maxTop: 0,
+ callLeft: 'setHue',
+ callTop: false
+ },
+ alpha: {
+ maxLeft: 100,
+ maxTop: 0,
+ callLeft: 'setAlpha',
+ callTop: false
+ }
+ },
+ template: '',
+ align: 'right',
+ customClass: null, // custom class added to the colorpicker element
+ colorSelectors: null // custom color aliases
+ };
+
+ /**
+ * Colorpicker component class
+ *
+ * @param {Object|String} element
+ * @param {Object} options
+ * @constructor
+ */
+ var Colorpicker = function(element, options) {
+ this.element = $(element).addClass('colorpicker-element');
+ this.options = $.extend(true, {}, defaults, this.element.data(), options);
+ this.component = this.options.component;
+ this.component = (this.component !== false) ? this.element.find(this.component) : false;
+ if (this.component && (this.component.length === 0)) {
+ this.component = false;
+ }
+ this.container = (this.options.container === true) ? this.element : this.options.container;
+ this.container = (this.container !== false) ? $(this.container) : false;
+
+ // Is the element an input? Should we search inside for any input?
+ this.input = this.element.is('input') ? this.element : (this.options.input ?
+ this.element.find(this.options.input) : false);
+ if (this.input && (this.input.length === 0)) {
+ this.input = false;
+ }
+ // Set HSB color
+ this.color = this.createColor(this.options.color !== false ? this.options.color : this.getValue());
+
+ this.format = this.options.format !== false ? this.options.format : this.color.origFormat;
+
+ if (this.options.color !== false) {
+ this.updateInput(this.color);
+ this.updateData(this.color);
+ }
+
+ // Setup picker
+ var $picker = this.picker = $(this.options.template);
+ if (this.options.customClass) {
+ $picker.addClass(this.options.customClass);
+ }
+ if (this.options.inline) {
+ $picker.addClass('colorpicker-inline colorpicker-visible');
+ } else {
+ $picker.addClass('colorpicker-hidden');
+ }
+ if (this.options.horizontal) {
+ $picker.addClass('colorpicker-horizontal');
+ }
+ if (
+ (['rgba', 'hsla', 'alias'].indexOf(this.format) !== -1) ||
+ this.options.format === false ||
+ this.getValue() === 'transparent'
+ ) {
+ $picker.addClass('colorpicker-with-alpha');
+ }
+ if (this.options.align === 'right') {
+ $picker.addClass('colorpicker-right');
+ }
+ if (this.options.inline === true) {
+ $picker.addClass('colorpicker-no-arrow');
+ }
+ if (this.options.colorSelectors) {
+ var colorpicker = this,
+ selectorsContainer = colorpicker.picker.find('.colorpicker-selectors');
+
+ if (selectorsContainer.length > 0) {
+ $.each(this.options.colorSelectors, function(name, color) {
+ var $btn = $(' ')
+ .addClass('colorpicker-selectors-color')
+ .css('background-color', color)
+ .data('class', name).data('alias', name);
+
+ $btn.on('mousedown.colorpicker touchstart.colorpicker', function(event) {
+ event.preventDefault();
+ colorpicker.setValue(
+ colorpicker.format === 'alias' ? $(this).data('alias') : $(this).css('background-color')
+ );
+ });
+ selectorsContainer.append($btn);
+ });
+ selectorsContainer.show().addClass('colorpicker-visible');
+ }
+ }
+
+ // Prevent closing the colorpicker when clicking on itself
+ $picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(function(e) {
+ if (e.target === e.currentTarget) {
+ e.preventDefault();
+ }
+ }, this));
+
+ // Bind click/tap events on the sliders
+ $picker.find('.colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha')
+ .on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this.mousedown, this));
+
+ $picker.appendTo(this.container ? this.container : $('body'));
+
+ // Bind other events
+ if (this.input !== false) {
+ this.input.on({
+ 'keyup.colorpicker': $.proxy(this.keyup, this)
+ });
+ this.input.on({
+ 'change.colorpicker': $.proxy(this.change, this)
+ });
+ if (this.component === false) {
+ this.element.on({
+ 'focus.colorpicker': $.proxy(this.show, this)
+ });
+ }
+ if (this.options.inline === false) {
+ this.element.on({
+ 'focusout.colorpicker': $.proxy(this.hide, this)
+ });
+ }
+ }
+
+ if (this.component !== false) {
+ this.component.on({
+ 'click.colorpicker': $.proxy(this.show, this)
+ });
+ }
+
+ if ((this.input === false) && (this.component === false)) {
+ this.element.on({
+ 'click.colorpicker': $.proxy(this.show, this)
+ });
+ }
+
+ // for HTML5 input[type='color']
+ if ((this.input !== false) && (this.component !== false) && (this.input.attr('type') === 'color')) {
+
+ this.input.on({
+ 'click.colorpicker': $.proxy(this.show, this),
+ 'focus.colorpicker': $.proxy(this.show, this)
+ });
+ }
+ this.update();
+
+ $($.proxy(function() {
+ this.element.trigger('create');
+ }, this));
+ };
+
+ Colorpicker.Color = Color;
+
+ Colorpicker.prototype = {
+ constructor: Colorpicker,
+ destroy: function() {
+ this.picker.remove();
+ this.element.removeData('colorpicker', 'color').off('.colorpicker');
+ if (this.input !== false) {
+ this.input.off('.colorpicker');
+ }
+ if (this.component !== false) {
+ this.component.off('.colorpicker');
+ }
+ this.element.removeClass('colorpicker-element');
+ this.element.trigger({
+ type: 'destroy'
+ });
+ },
+ reposition: function() {
+ if (this.options.inline !== false || this.options.container) {
+ return false;
+ }
+ var type = this.container && this.container[0] !== window.document.body ? 'position' : 'offset';
+ var element = this.component || this.element;
+ var offset = element[type]();
+ if (this.options.align === 'right') {
+ offset.left -= this.picker.outerWidth() - element.outerWidth();
+ }
+ this.picker.css({
+ top: offset.top + element.outerHeight(),
+ left: offset.left
+ });
+ },
+ show: function(e) {
+ if (this.isDisabled()) {
+ // Don't show the widget if it's disabled (the input)
+ return;
+ }
+ this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');
+ this.reposition();
+ $(window).on('resize.colorpicker', $.proxy(this.reposition, this));
+ if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {
+ if (e.stopPropagation && e.preventDefault) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ }
+ if ((this.component || !this.input) && (this.options.inline === false)) {
+ $(window.document).on({
+ 'mousedown.colorpicker': $.proxy(this.hide, this)
+ });
+ }
+ this.element.trigger({
+ type: 'showPicker',
+ color: this.color
+ });
+ },
+ hide: function(e) {
+ if ((typeof e !== 'undefined') && e.target) {
+ // Prevent hide if triggered by an event and an element inside the colorpicker has been clicked/touched
+ if (
+ $(e.currentTarget).parents('.colorpicker').length > 0 ||
+ $(e.target).parents('.colorpicker').length > 0
+ ) {
+ return false;
+ }
+ }
+ this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');
+ $(window).off('resize.colorpicker', this.reposition);
+ $(window.document).off({
+ 'mousedown.colorpicker': this.hide
+ });
+ this.update();
+ this.element.trigger({
+ type: 'hidePicker',
+ color: this.color
+ });
+ },
+ updateData: function(val) {
+ val = val || this.color.toString(false, this.format);
+ this.element.data('color', val);
+ return val;
+ },
+ updateInput: function(val) {
+ val = val || this.color.toString(false, this.format);
+ if (this.input !== false) {
+ this.input.prop('value', val);
+ this.input.trigger('change');
+ }
+ return val;
+ },
+ updatePicker: function(val) {
+ if (typeof val !== 'undefined') {
+ this.color = this.createColor(val);
+ }
+ var sl = (this.options.horizontal === false) ? this.options.sliders : this.options.slidersHorz;
+ var icns = this.picker.find('i');
+ if (icns.length === 0) {
+ return;
+ }
+ if (this.options.horizontal === false) {
+ sl = this.options.sliders;
+ icns.eq(1).css('top', sl.hue.maxTop * (1 - this.color.value.h)).end()
+ .eq(2).css('top', sl.alpha.maxTop * (1 - this.color.value.a));
+ } else {
+ sl = this.options.slidersHorz;
+ icns.eq(1).css('left', sl.hue.maxLeft * (1 - this.color.value.h)).end()
+ .eq(2).css('left', sl.alpha.maxLeft * (1 - this.color.value.a));
+ }
+ icns.eq(0).css({
+ 'top': sl.saturation.maxTop - this.color.value.b * sl.saturation.maxTop,
+ 'left': this.color.value.s * sl.saturation.maxLeft
+ });
+
+ this.picker.find('.colorpicker-saturation')
+ .css('backgroundColor', this.color.toHex(true, this.color.value.h, 1, 1, 1));
+
+ this.picker.find('.colorpicker-alpha')
+ .css('backgroundColor', this.color.toHex(true));
+
+ this.picker.find('.colorpicker-color, .colorpicker-color div')
+ .css('backgroundColor', this.color.toString(true, this.format));
+
+ return val;
+ },
+ updateComponent: function(val) {
+ var color;
+
+ if (typeof val !== 'undefined') {
+ color = this.createColor(val);
+ } else {
+ color = this.color;
+ }
+
+ if (this.component !== false) {
+ var icn = this.component.find('i').eq(0);
+ if (icn.length > 0) {
+ icn.css({
+ 'backgroundColor': color.toString(true, this.format)
+ });
+ } else {
+ this.component.css({
+ 'backgroundColor': color.toString(true, this.format)
+ });
+ }
+ }
+
+ return color.toString(false, this.format);
+ },
+ update: function(force) {
+ var val;
+ if ((this.getValue(false) !== false) || (force === true)) {
+ // Update input/data only if the current value is not empty
+ val = this.updateComponent();
+ this.updateInput(val);
+ this.updateData(val);
+ this.updatePicker(); // only update picker if value is not empty
+ }
+ return val;
+
+ },
+ setValue: function(val) { // set color manually
+ this.color = this.createColor(val);
+ this.update(true);
+ this.element.trigger({
+ type: 'changeColor',
+ color: this.color,
+ value: val
+ });
+ },
+ /**
+ * Creates a new color using the instance options
+ * @protected
+ * @param {String} val
+ * @returns {Color}
+ */
+ createColor: function(val) {
+ return new Color(
+ val ? val : null,
+ this.options.colorSelectors,
+ this.options.fallbackColor ? this.options.fallbackColor : this.color,
+ this.options.fallbackFormat,
+ this.options.hexNumberSignPrefix
+ );
+ },
+ getValue: function(defaultValue) {
+ defaultValue = (typeof defaultValue === 'undefined') ? this.options.fallbackColor : defaultValue;
+ var val;
+ if (this.hasInput()) {
+ val = this.input.val();
+ } else {
+ val = this.element.data('color');
+ }
+ if ((val === undefined) || (val === '') || (val === null)) {
+ // if not defined or empty, return default
+ val = defaultValue;
+ }
+ return val;
+ },
+ hasInput: function() {
+ return (this.input !== false);
+ },
+ isDisabled: function() {
+ if (this.hasInput()) {
+ return (this.input.prop('disabled') === true);
+ }
+ return false;
+ },
+ disable: function() {
+ if (this.hasInput()) {
+ this.input.prop('disabled', true);
+ this.element.trigger({
+ type: 'disable',
+ color: this.color,
+ value: this.getValue()
+ });
+ return true;
+ }
+ return false;
+ },
+ enable: function() {
+ if (this.hasInput()) {
+ this.input.prop('disabled', false);
+ this.element.trigger({
+ type: 'enable',
+ color: this.color,
+ value: this.getValue()
+ });
+ return true;
+ }
+ return false;
+ },
+ currentSlider: null,
+ mousePointer: {
+ left: 0,
+ top: 0
+ },
+ mousedown: function(e) {
+ if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {
+ e.pageX = e.originalEvent.touches[0].pageX;
+ e.pageY = e.originalEvent.touches[0].pageY;
+ }
+ e.stopPropagation();
+ e.preventDefault();
+
+ var target = $(e.target);
+
+ //detect the slider and set the limits and callbacks
+ var zone = target.closest('div');
+ var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;
+ if (!zone.is('.colorpicker')) {
+ if (zone.is('.colorpicker-saturation')) {
+ this.currentSlider = $.extend({}, sl.saturation);
+ } else if (zone.is('.colorpicker-hue')) {
+ this.currentSlider = $.extend({}, sl.hue);
+ } else if (zone.is('.colorpicker-alpha')) {
+ this.currentSlider = $.extend({}, sl.alpha);
+ } else {
+ return false;
+ }
+ var offset = zone.offset();
+ //reference to guide's style
+ this.currentSlider.guide = zone.find('i')[0].style;
+ this.currentSlider.left = e.pageX - offset.left;
+ this.currentSlider.top = e.pageY - offset.top;
+ this.mousePointer = {
+ left: e.pageX,
+ top: e.pageY
+ };
+ //trigger mousemove to move the guide to the current position
+ $(window.document).on({
+ 'mousemove.colorpicker': $.proxy(this.mousemove, this),
+ 'touchmove.colorpicker': $.proxy(this.mousemove, this),
+ 'mouseup.colorpicker': $.proxy(this.mouseup, this),
+ 'touchend.colorpicker': $.proxy(this.mouseup, this)
+ }).trigger('mousemove');
+ }
+ return false;
+ },
+ mousemove: function(e) {
+ if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {
+ e.pageX = e.originalEvent.touches[0].pageX;
+ e.pageY = e.originalEvent.touches[0].pageY;
+ }
+ e.stopPropagation();
+ e.preventDefault();
+ var left = Math.max(
+ 0,
+ Math.min(
+ this.currentSlider.maxLeft,
+ this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)
+ )
+ );
+ var top = Math.max(
+ 0,
+ Math.min(
+ this.currentSlider.maxTop,
+ this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)
+ )
+ );
+ this.currentSlider.guide.left = left + 'px';
+ this.currentSlider.guide.top = top + 'px';
+ if (this.currentSlider.callLeft) {
+ this.color[this.currentSlider.callLeft].call(this.color, left / this.currentSlider.maxLeft);
+ }
+ if (this.currentSlider.callTop) {
+ this.color[this.currentSlider.callTop].call(this.color, top / this.currentSlider.maxTop);
+ }
+ // Change format dynamically
+ // Only occurs if user choose the dynamic format by
+ // setting option format to false
+ if (
+ this.options.format === false &&
+ (this.currentSlider.callTop === 'setAlpha' ||
+ this.currentSlider.callLeft === 'setAlpha')
+ ) {
+
+ // Converting from hex / rgb to rgba
+ if (this.color.value.a !== 1) {
+ this.format = 'rgba';
+ this.color.origFormat = 'rgba';
+ }
+
+ // Converting from rgba to hex
+ else {
+ this.format = 'hex';
+ this.color.origFormat = 'hex';
+ }
+ }
+ this.update(true);
+
+ this.element.trigger({
+ type: 'changeColor',
+ color: this.color
+ });
+ return false;
+ },
+ mouseup: function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(window.document).off({
+ 'mousemove.colorpicker': this.mousemove,
+ 'touchmove.colorpicker': this.mousemove,
+ 'mouseup.colorpicker': this.mouseup,
+ 'touchend.colorpicker': this.mouseup
+ });
+ return false;
+ },
+ change: function(e) {
+ this.keyup(e);
+ },
+ keyup: function(e) {
+ if ((e.keyCode === 38)) {
+ if (this.color.value.a < 1) {
+ this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
+ }
+ this.update(true);
+ } else if ((e.keyCode === 40)) {
+ if (this.color.value.a > 0) {
+ this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
+ }
+ this.update(true);
+ } else {
+ this.color = this.createColor(this.input.val());
+ // Change format dynamically
+ // Only occurs if user choose the dynamic format by
+ // setting option format to false
+ if (this.color.origFormat && this.options.format === false) {
+ this.format = this.color.origFormat;
+ }
+ if (this.getValue(false) !== false) {
+ this.updateData();
+ this.updateComponent();
+ this.updatePicker();
+ }
+ }
+ this.element.trigger({
+ type: 'changeColor',
+ color: this.color,
+ value: this.input.val()
+ });
+ }
+ };
+
+ $.colorpicker = Colorpicker;
+
+ $.fn.colorpicker = function(option) {
+ var apiArgs = Array.prototype.slice.call(arguments, 1),
+ isSingleElement = (this.length === 1),
+ returnValue = null;
+
+ var $jq = this.each(function() {
+ var $this = $(this),
+ inst = $this.data('colorpicker'),
+ options = ((typeof option === 'object') ? option : {});
+
+ if (!inst) {
+ inst = new Colorpicker(this, options);
+ $this.data('colorpicker', inst);
+ }
+
+ if (typeof option === 'string') {
+ if ($.isFunction(inst[option])) {
+ returnValue = inst[option].apply(inst, apiArgs);
+ } else { // its a property ?
+ if (apiArgs.length) {
+ // set property
+ inst[option] = apiArgs[0];
+ }
+ returnValue = inst[option];
+ }
+ } else {
+ returnValue = $this;
+ }
+ });
+ return isSingleElement ? returnValue : $jq;
+ };
+
+ $.fn.colorpicker.constructor = Colorpicker;
+
+}));
diff --git a/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js
new file mode 100644
index 000000000..0271a46f1
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/lib/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap Colorpicker v2.5.1
+ * https://itsjavi.com/bootstrap-colorpicker/
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):jQuery&&!jQuery.fn.colorpicker&&b(jQuery)}(this,function(a){"use strict";var b=function(c,d,e,f,g){this.fallbackValue=e?e&&"undefined"!=typeof e.h?e:this.value={h:0,s:0,b:0,a:1}:null,this.fallbackFormat=f?f:"rgba",this.hexNumberSignPrefix=g===!0,this.value=this.fallbackValue,this.origFormat=null,this.predefinedColors=d?d:{},this.colors=a.extend({},b.webColors,this.predefinedColors),c&&("undefined"!=typeof c.h?this.value=c:this.setColor(String(c))),this.value||(this.value={h:0,s:0,b:0,a:1})};b.webColors={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32",transparent:"transparent"},b.prototype={constructor:b,colors:{},predefinedColors:{},getValue:function(){return this.value},setValue:function(a){this.value=a},_sanitizeNumber:function(a){return"number"==typeof a?a:isNaN(a)||null===a||""===a||void 0===a?1:""===a?0:"undefined"!=typeof a.toLowerCase?(a.match(/^\./)&&(a="0"+a),Math.ceil(100*parseFloat(a))/100):1},isTransparent:function(a){return!(!a||!("string"==typeof a||a instanceof String))&&(a=a.toLowerCase().trim(),"transparent"===a||a.match(/#?00000000/)||a.match(/(rgba|hsla)\(0,0,0,0?\.?0\)/))},rgbaIsTransparent:function(a){return 0===a.r&&0===a.g&&0===a.b&&0===a.a},setColor:function(a){if(a=a.toLowerCase().trim()){if(this.isTransparent(a))return this.value={h:0,s:0,b:0,a:0},!0;var b=this.parse(a);b?(this.value=this.value={h:b.h,s:b.s,b:b.b,a:b.a},this.origFormat||(this.origFormat=b.format)):this.fallbackValue&&(this.value=this.fallbackValue)}return!1},setHue:function(a){this.value.h=1-a},setSaturation:function(a){this.value.s=a},setBrightness:function(a){this.value.b=1-a},setAlpha:function(a){this.value.a=Math.round(parseInt(100*(1-a),10)/100*100)/100},toRGB:function(a,b,c,d){0===arguments.length&&(a=this.value.h,b=this.value.s,c=this.value.b,d=this.value.a),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Math.abs(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],{r:Math.round(255*e),g:Math.round(255*f),b:Math.round(255*g),a:d}},toHex:function(a,b,c,d,e){arguments.length<=1&&(b=this.value.h,c=this.value.s,d=this.value.b,e=this.value.a);var f="#",g=this.toRGB(b,c,d,e);if(this.rgbaIsTransparent(g))return"transparent";a||(f=this.hexNumberSignPrefix?"#":"");var h=f+((1<<24)+(parseInt(g.r)<<16)+(parseInt(g.g)<<8)+parseInt(g.b)).toString(16).slice(1);return h},toHSL:function(a,b,c,d){0===arguments.length&&(a=this.value.h,b=this.value.s,c=this.value.b,d=this.value.a);var e=a,f=(2-b)*c,g=b*c;return g/=f>0&&f<=1?f:2-f,f/=2,g>1&&(g=1),{h:isNaN(e)?0:e,s:isNaN(g)?0:g,l:isNaN(f)?0:f,a:isNaN(d)?0:d}},toAlias:function(a,b,c,d){var e,f=0===arguments.length?this.toHex(!0):this.toHex(!0,a,b,c,d),g="alias"===this.origFormat?f:this.toString(!1,this.origFormat);for(var h in this.colors)if(e=this.colors[h].toLowerCase().trim(),e===f||e===g)return h;return!1},RGBtoHSB:function(a,b,c,d){a/=255,b/=255,c/=255;var e,f,g,h;return g=Math.max(a,b,c),h=g-Math.min(a,b,c),e=0===h?null:g===a?(b-c)/h:g===b?(c-a)/h+2:(a-b)/h+4,e=(e+360)%6*60/360,f=0===h?0:h/g,{h:this._sanitizeNumber(e),s:f,b:g,a:this._sanitizeNumber(d)}},HueToRGB:function(a,b,c){return c<0?c+=1:c>1&&(c-=1),6*c<1?a+(b-a)*c*6:2*c<1?b:3*c<2?a+(b-a)*(2/3-c)*6:a},HSLtoRGB:function(a,b,c,d){b<0&&(b=0);var e;e=c<=.5?c*(1+b):c+b-c*b;var f=2*c-e,g=a+1/3,h=a,i=a-1/3,j=Math.round(255*this.HueToRGB(f,e,g)),k=Math.round(255*this.HueToRGB(f,e,h)),l=Math.round(255*this.HueToRGB(f,e,i));return[j,k,l,this._sanitizeNumber(d)]},parse:function(b){if(0===arguments.length)return!1;var c,d,e=this,f=!1,g="undefined"!=typeof this.colors[b];return g&&(b=this.colors[b].toLowerCase().trim()),a.each(this.stringParsers,function(a,h){var i=h.re.exec(b);return c=i&&h.parse.apply(e,[i]),!c||(f={},d=g?"alias":h.format?h.format:e.getValidFallbackFormat(),f=d.match(/hsla?/)?e.RGBtoHSB.apply(e,e.HSLtoRGB.apply(e,c)):e.RGBtoHSB.apply(e,c),f instanceof Object&&(f.format=d),!1)}),f},getValidFallbackFormat:function(){var a=["rgba","rgb","hex","hsla","hsl"];return this.origFormat&&a.indexOf(this.origFormat)!==-1?this.origFormat:this.fallbackFormat&&a.indexOf(this.fallbackFormat)!==-1?this.fallbackFormat:"rgba"},toString:function(a,c,d){c=c||this.origFormat||this.fallbackFormat,d=d||!1;var e=!1;switch(c){case"rgb":return e=this.toRGB(),this.rgbaIsTransparent(e)?"transparent":"rgb("+e.r+","+e.g+","+e.b+")";case"rgba":return e=this.toRGB(),"rgba("+e.r+","+e.g+","+e.b+","+e.a+")";case"hsl":return e=this.toHSL(),"hsl("+Math.round(360*e.h)+","+Math.round(100*e.s)+"%,"+Math.round(100*e.l)+"%)";case"hsla":return e=this.toHSL(),"hsla("+Math.round(360*e.h)+","+Math.round(100*e.s)+"%,"+Math.round(100*e.l)+"%,"+e.a+")";case"hex":return this.toHex(a);case"alias":return e=this.toAlias(),e===!1?this.toString(a,this.getValidFallbackFormat()):d&&!(e in b.webColors)&&e in this.predefinedColors?this.predefinedColors[e]:e;default:return e}},stringParsers:[{re:/rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*?\)/,format:"rgb",parse:function(a){return[a[1],a[2],a[3],1]}},{re:/rgb\(\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*?\)/,format:"rgb",parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],1]}},{re:/rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,format:"rgba",parse:function(a){return[a[1],a[2],a[3],a[4]]}},{re:/rgba\(\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,format:"rgba",parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],a[4]]}},{re:/hsl\(\s*(\d*(?:\.\d+)?)\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*?\)/,format:"hsl",parse:function(a){return[a[1]/360,a[2]/100,a[3]/100,a[4]]}},{re:/hsla\(\s*(\d*(?:\.\d+)?)\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,format:"hsla",parse:function(a){return[a[1]/360,a[2]/100,a[3]/100,a[4]]}},{re:/#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,format:"hex",parse:function(a){return[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16),1]}},{re:/#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,format:"hex",parse:function(a){return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16),1]}}],colorNameToHex:function(a){return"undefined"!=typeof this.colors[a.toLowerCase()]&&this.colors[a.toLowerCase()]}};var c={horizontal:!1,inline:!1,color:!1,format:!1,input:"input",container:!1,component:".add-on, .input-group-addon",fallbackColor:!1,fallbackFormat:"hex",hexNumberSignPrefix:!0,sliders:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturation",callTop:"setBrightness"},hue:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setHue"},alpha:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setAlpha"}},slidersHorz:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturation",callTop:"setBrightness"},hue:{maxLeft:100,maxTop:0,callLeft:"setHue",callTop:!1},alpha:{maxLeft:100,maxTop:0,callLeft:"setAlpha",callTop:!1}},template:'',align:"right",customClass:null,colorSelectors:null},d=function(b,d){this.element=a(b).addClass("colorpicker-element"),this.options=a.extend(!0,{},c,this.element.data(),d),this.component=this.options.component,this.component=this.component!==!1&&this.element.find(this.component),this.component&&0===this.component.length&&(this.component=!1),this.container=this.options.container===!0?this.element:this.options.container,this.container=this.container!==!1&&a(this.container),this.input=this.element.is("input")?this.element:!!this.options.input&&this.element.find(this.options.input),this.input&&0===this.input.length&&(this.input=!1),this.color=this.createColor(this.options.color!==!1?this.options.color:this.getValue()),this.format=this.options.format!==!1?this.options.format:this.color.origFormat,this.options.color!==!1&&(this.updateInput(this.color),this.updateData(this.color));var e=this.picker=a(this.options.template);if(this.options.customClass&&e.addClass(this.options.customClass),this.options.inline?e.addClass("colorpicker-inline colorpicker-visible"):e.addClass("colorpicker-hidden"),this.options.horizontal&&e.addClass("colorpicker-horizontal"),["rgba","hsla","alias"].indexOf(this.format)===-1&&this.options.format!==!1&&"transparent"!==this.getValue()||e.addClass("colorpicker-with-alpha"),"right"===this.options.align&&e.addClass("colorpicker-right"),this.options.inline===!0&&e.addClass("colorpicker-no-arrow"),this.options.colorSelectors){var f=this,g=f.picker.find(".colorpicker-selectors");g.length>0&&(a.each(this.options.colorSelectors,function(b,c){var d=a(" ").addClass("colorpicker-selectors-color").css("background-color",c).data("class",b).data("alias",b);d.on("mousedown.colorpicker touchstart.colorpicker",function(b){b.preventDefault(),f.setValue("alias"===f.format?a(this).data("alias"):a(this).css("background-color"))}),g.append(d)}),g.show().addClass("colorpicker-visible"))}e.on("mousedown.colorpicker touchstart.colorpicker",a.proxy(function(a){a.target===a.currentTarget&&a.preventDefault()},this)),e.find(".colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha").on("mousedown.colorpicker touchstart.colorpicker",a.proxy(this.mousedown,this)),e.appendTo(this.container?this.container:a("body")),this.input!==!1&&(this.input.on({"keyup.colorpicker":a.proxy(this.keyup,this)}),this.input.on({"change.colorpicker":a.proxy(this.change,this)}),this.component===!1&&this.element.on({"focus.colorpicker":a.proxy(this.show,this)}),this.options.inline===!1&&this.element.on({"focusout.colorpicker":a.proxy(this.hide,this)})),this.component!==!1&&this.component.on({"click.colorpicker":a.proxy(this.show,this)}),this.input===!1&&this.component===!1&&this.element.on({"click.colorpicker":a.proxy(this.show,this)}),this.input!==!1&&this.component!==!1&&"color"===this.input.attr("type")&&this.input.on({"click.colorpicker":a.proxy(this.show,this),"focus.colorpicker":a.proxy(this.show,this)}),this.update(),a(a.proxy(function(){this.element.trigger("create")},this))};d.Color=b,d.prototype={constructor:d,destroy:function(){this.picker.remove(),this.element.removeData("colorpicker","color").off(".colorpicker"),this.input!==!1&&this.input.off(".colorpicker"),this.component!==!1&&this.component.off(".colorpicker"),this.element.removeClass("colorpicker-element"),this.element.trigger({type:"destroy"})},reposition:function(){if(this.options.inline!==!1||this.options.container)return!1;var a=this.container&&this.container[0]!==window.document.body?"position":"offset",b=this.component||this.element,c=b[a]();"right"===this.options.align&&(c.left-=this.picker.outerWidth()-b.outerWidth()),this.picker.css({top:c.top+b.outerHeight(),left:c.left})},show:function(b){this.isDisabled()||(this.picker.addClass("colorpicker-visible").removeClass("colorpicker-hidden"),this.reposition(),a(window).on("resize.colorpicker",a.proxy(this.reposition,this)),!b||this.hasInput()&&"color"!==this.input.attr("type")||b.stopPropagation&&b.preventDefault&&(b.stopPropagation(),b.preventDefault()),!this.component&&this.input||this.options.inline!==!1||a(window.document).on({"mousedown.colorpicker":a.proxy(this.hide,this)}),this.element.trigger({type:"showPicker",color:this.color}))},hide:function(b){return("undefined"==typeof b||!b.target||!(a(b.currentTarget).parents(".colorpicker").length>0||a(b.target).parents(".colorpicker").length>0))&&(this.picker.addClass("colorpicker-hidden").removeClass("colorpicker-visible"),a(window).off("resize.colorpicker",this.reposition),a(window.document).off({"mousedown.colorpicker":this.hide}),this.update(),void this.element.trigger({type:"hidePicker",color:this.color}))},updateData:function(a){return a=a||this.color.toString(!1,this.format),this.element.data("color",a),a},updateInput:function(a){return a=a||this.color.toString(!1,this.format),this.input!==!1&&(this.input.prop("value",a),this.input.trigger("change")),a},updatePicker:function(a){"undefined"!=typeof a&&(this.color=this.createColor(a));var b=this.options.horizontal===!1?this.options.sliders:this.options.slidersHorz,c=this.picker.find("i");if(0!==c.length)return this.options.horizontal===!1?(b=this.options.sliders,c.eq(1).css("top",b.hue.maxTop*(1-this.color.value.h)).end().eq(2).css("top",b.alpha.maxTop*(1-this.color.value.a))):(b=this.options.slidersHorz,c.eq(1).css("left",b.hue.maxLeft*(1-this.color.value.h)).end().eq(2).css("left",b.alpha.maxLeft*(1-this.color.value.a))),c.eq(0).css({top:b.saturation.maxTop-this.color.value.b*b.saturation.maxTop,left:this.color.value.s*b.saturation.maxLeft}),this.picker.find(".colorpicker-saturation").css("backgroundColor",this.color.toHex(!0,this.color.value.h,1,1,1)),this.picker.find(".colorpicker-alpha").css("backgroundColor",this.color.toHex(!0)),this.picker.find(".colorpicker-color, .colorpicker-color div").css("backgroundColor",this.color.toString(!0,this.format)),a},updateComponent:function(a){var b;if(b="undefined"!=typeof a?this.createColor(a):this.color,this.component!==!1){var c=this.component.find("i").eq(0);c.length>0?c.css({backgroundColor:b.toString(!0,this.format)}):this.component.css({backgroundColor:b.toString(!0,this.format)})}return b.toString(!1,this.format)},update:function(a){var b;return this.getValue(!1)===!1&&a!==!0||(b=this.updateComponent(),this.updateInput(b),this.updateData(b),this.updatePicker()),b},setValue:function(a){this.color=this.createColor(a),this.update(!0),this.element.trigger({type:"changeColor",color:this.color,value:a})},createColor:function(a){return new b(a?a:null,this.options.colorSelectors,this.options.fallbackColor?this.options.fallbackColor:this.color,this.options.fallbackFormat,this.options.hexNumberSignPrefix)},getValue:function(a){a="undefined"==typeof a?this.options.fallbackColor:a;var b;return b=this.hasInput()?this.input.val():this.element.data("color"),void 0!==b&&""!==b&&null!==b||(b=a),b},hasInput:function(){return this.input!==!1},isDisabled:function(){return!!this.hasInput()&&this.input.prop("disabled")===!0},disable:function(){return!!this.hasInput()&&(this.input.prop("disabled",!0),this.element.trigger({type:"disable",color:this.color,value:this.getValue()}),!0)},enable:function(){return!!this.hasInput()&&(this.input.prop("disabled",!1),this.element.trigger({type:"enable",color:this.color,value:this.getValue()}),!0)},currentSlider:null,mousePointer:{left:0,top:0},mousedown:function(b){!b.pageX&&!b.pageY&&b.originalEvent&&b.originalEvent.touches&&(b.pageX=b.originalEvent.touches[0].pageX,b.pageY=b.originalEvent.touches[0].pageY),b.stopPropagation(),b.preventDefault();var c=a(b.target),d=c.closest("div"),e=this.options.horizontal?this.options.slidersHorz:this.options.sliders;if(!d.is(".colorpicker")){if(d.is(".colorpicker-saturation"))this.currentSlider=a.extend({},e.saturation);else if(d.is(".colorpicker-hue"))this.currentSlider=a.extend({},e.hue);else{if(!d.is(".colorpicker-alpha"))return!1;this.currentSlider=a.extend({},e.alpha)}var f=d.offset();this.currentSlider.guide=d.find("i")[0].style,this.currentSlider.left=b.pageX-f.left,this.currentSlider.top=b.pageY-f.top,this.mousePointer={left:b.pageX,top:b.pageY},a(window.document).on({"mousemove.colorpicker":a.proxy(this.mousemove,this),"touchmove.colorpicker":a.proxy(this.mousemove,this),"mouseup.colorpicker":a.proxy(this.mouseup,this),"touchend.colorpicker":a.proxy(this.mouseup,this)}).trigger("mousemove")}return!1},mousemove:function(a){!a.pageX&&!a.pageY&&a.originalEvent&&a.originalEvent.touches&&(a.pageX=a.originalEvent.touches[0].pageX,a.pageY=a.originalEvent.touches[0].pageY),a.stopPropagation(),a.preventDefault();var b=Math.max(0,Math.min(this.currentSlider.maxLeft,this.currentSlider.left+((a.pageX||this.mousePointer.left)-this.mousePointer.left))),c=Math.max(0,Math.min(this.currentSlider.maxTop,this.currentSlider.top+((a.pageY||this.mousePointer.top)-this.mousePointer.top)));return this.currentSlider.guide.left=b+"px",this.currentSlider.guide.top=c+"px",this.currentSlider.callLeft&&this.color[this.currentSlider.callLeft].call(this.color,b/this.currentSlider.maxLeft),this.currentSlider.callTop&&this.color[this.currentSlider.callTop].call(this.color,c/this.currentSlider.maxTop),this.options.format!==!1||"setAlpha"!==this.currentSlider.callTop&&"setAlpha"!==this.currentSlider.callLeft||(1!==this.color.value.a?(this.format="rgba",this.color.origFormat="rgba"):(this.format="hex",this.color.origFormat="hex")),this.update(!0),this.element.trigger({type:"changeColor",color:this.color}),!1},mouseup:function(b){return b.stopPropagation(),b.preventDefault(),a(window.document).off({"mousemove.colorpicker":this.mousemove,"touchmove.colorpicker":this.mousemove,"mouseup.colorpicker":this.mouseup,"touchend.colorpicker":this.mouseup}),!1},change:function(a){this.keyup(a)},keyup:function(a){38===a.keyCode?(this.color.value.a<1&&(this.color.value.a=Math.round(100*(this.color.value.a+.01))/100),this.update(!0)):40===a.keyCode?(this.color.value.a>0&&(this.color.value.a=Math.round(100*(this.color.value.a-.01))/100),this.update(!0)):(this.color=this.createColor(this.input.val()),this.color.origFormat&&this.options.format===!1&&(this.format=this.color.origFormat),this.getValue(!1)!==!1&&(this.updateData(),this.updateComponent(),this.updatePicker())),this.element.trigger({type:"changeColor",color:this.color,value:this.input.val()})}},a.colorpicker=d,a.fn.colorpicker=function(b){var c=Array.prototype.slice.call(arguments,1),e=1===this.length,f=null,g=this.each(function(){var e=a(this),g=e.data("colorpicker"),h="object"==typeof b?b:{};g||(g=new d(this,h),e.data("colorpicker",g)),"string"==typeof b?a.isFunction(g[b])?f=g[b].apply(g,c):(c.length&&(g[b]=c[0]),f=g[b]):f=e});return e?f:g},a.fn.colorpicker.constructor=d});
\ No newline at end of file
diff --git a/odex25_base/web_widget_colorpicker/static/src/xml/widget.xml b/odex25_base/web_widget_colorpicker/static/src/xml/widget.xml
new file mode 100644
index 000000000..14f1a8003
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/static/src/xml/widget.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_base/web_widget_colorpicker/view/web_widget_colorpicker_view.xml b/odex25_base/web_widget_colorpicker/view/web_widget_colorpicker_view.xml
new file mode 100644
index 000000000..1c784cdec
--- /dev/null
+++ b/odex25_base/web_widget_colorpicker/view/web_widget_colorpicker_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+