@ -0,0 +1,47 @@ |
|||||
|
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
||||
|
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
||||
|
:alt: License: AGPL-3 |
||||
|
|
||||
|
Backend Theme Infinito Plus |
||||
|
=========================== |
||||
|
* Backend Theme Infinito Plus module for Odoo 15 community editions |
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
* No additional configurations needed |
||||
|
|
||||
|
Company |
||||
|
======= |
||||
|
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
||||
|
|
||||
|
License |
||||
|
------- |
||||
|
General Public License, Version 3 (LGPL v3). |
||||
|
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
Developer: (V15) Ramees Jaman KT , Contact: odoo@cybrosys.com |
||||
|
|
||||
|
Contacts |
||||
|
-------- |
||||
|
* Mail Contact : odoo@cybrosys.com |
||||
|
|
||||
|
Bug Tracker |
||||
|
----------- |
||||
|
Bugs are tracked on GitHub Issues. In case of trouble, please check there if |
||||
|
your issue has already been reported. |
||||
|
|
||||
|
Maintainer |
||||
|
========== |
||||
|
.. image:: https://cybrosys.com/images/logo.png |
||||
|
:target: https://cybrosys.com |
||||
|
|
||||
|
This module is maintained by Cybrosys Technologies. |
||||
|
|
||||
|
For support and more information, please visit https://www.cybrosys.com |
||||
|
|
||||
|
Further information |
||||
|
=================== |
||||
|
HTML Description: `<static/description/index.html>`__ |
||||
|
|
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
from . import controllers |
||||
|
from . import models |
@ -0,0 +1,64 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
{ |
||||
|
'name': 'Backend Theme Infinito Plus', |
||||
|
'version': "15.0.1.0.0", |
||||
|
'category': 'Extra Tools', |
||||
|
'summary': 'The Backend Theme Infinito Is A Dynamic And Ultimate Theme' |
||||
|
'For Your Odoo V15. This Theme Will Give You A New Experience ' |
||||
|
'With Odoo.Main Highlight Of The Theme Is You Can Dynamically ' |
||||
|
'Change The Fonts,Animations, Languages,...Etc', |
||||
|
'description': """Utmost and dynamic backend theme for Odoo 15""", |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': 'Cybrosys Techno Solutions', |
||||
|
'website': "https://www.cybrosys.com", |
||||
|
'depends': ['web', 'backend_theme_infinito'], |
||||
|
'data': [ |
||||
|
'security/ir.model.access.csv' |
||||
|
], |
||||
|
'assets': { |
||||
|
'web.assets_backend': { |
||||
|
'backend_theme_infinito_plus/static/src/css/chatter.css', |
||||
|
'backend_theme_infinito_plus/static/src/css/font.css', |
||||
|
'backend_theme_infinito_plus/static/src/scss/animation.scss', |
||||
|
'backend_theme_infinito_plus/static/src/js/AdvancedFeautres.js', |
||||
|
'backend_theme_infinito_plus/static/src/js/navbar.js', |
||||
|
'backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js', |
||||
|
'backend_theme_infinito_plus/static/src/js/systray.js' |
||||
|
}, |
||||
|
'web.assets_qweb': { |
||||
|
'backend_theme_infinito_plus/static/src/xml/sidebar_templates.xml', |
||||
|
'backend_theme_infinito_plus/static/src/xml/AddGoogleFonts_templates.xml', |
||||
|
'backend_theme_infinito_plus/static/src/xml/refresh_templates.xml', |
||||
|
'backend_theme_infinito_plus/static/src/xml/systray_templates.xml' |
||||
|
} |
||||
|
}, |
||||
|
'images': [ |
||||
|
'static/description/banner.jpg', |
||||
|
'static/description/theme_screenshot.jpg', |
||||
|
], |
||||
|
'license': 'LGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
from . import backend_theme_infinito_plus |
@ -0,0 +1,128 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
import json |
||||
|
import os |
||||
|
|
||||
|
from odoo import http |
||||
|
from odoo.http import request |
||||
|
from odoo.addons.backend_theme_infinito.controllers.main import ThemeStudio |
||||
|
from odoo.addons.backend_theme_infinito.controllers.main import minify_css |
||||
|
|
||||
|
|
||||
|
class ThemeStudioPlus(ThemeStudio): |
||||
|
"""Controller for updating the changes from infinito control panel""" |
||||
|
|
||||
|
@http.route(['/theme_studio/save_styles_plus'], type="json") |
||||
|
def save_styles_plus(self, new_style): |
||||
|
"""Create Dynamic Styles css file for chat box layout""" |
||||
|
changed_styles = json.loads(new_style) |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
working_dir = working_dir.replace('/controllers', '') |
||||
|
file_path = working_dir + '/static/src/css/chatter.css' |
||||
|
style_file = open(file_path, 'a') |
||||
|
style_file.truncate(0) |
||||
|
if os.stat(file_path).st_size == 0: |
||||
|
style_file.write('/* This file is generated automatically by ' |
||||
|
'Theme Infinito Plus */\n') |
||||
|
style_file.write('.o_ChatWindow' + ' {\n') |
||||
|
for i in changed_styles[0]: |
||||
|
style_file.write('\t' + i + ':' + changed_styles[0][i] + ';\n') |
||||
|
style_file.write('}\n') |
||||
|
style_file.close() |
||||
|
minify_css(file_path) |
||||
|
return True |
||||
|
|
||||
|
@http.route(['/theme_studio/animation_styles'], type="json") |
||||
|
def animation_styles(self, style): |
||||
|
""" create the Dynamic css file for animation""" |
||||
|
animated = json.loads(style) |
||||
|
saved_style = animated[0] |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
file_path = working_dir.replace('/controllers', |
||||
|
'/static/src/scss/animation.scss') |
||||
|
read_file = open(file_path, 'r') |
||||
|
css = read_file.read() |
||||
|
write_file = open(file_path, 'w') |
||||
|
for line in css.split('\n'): |
||||
|
if 'ease-in' in line: |
||||
|
write_file.write(css.replace(line.strip(), |
||||
|
'animation:' + saved_style + ' #{$tr * .1}s ease-in !important;')) |
||||
|
write_file.close() |
||||
|
read_file.close() |
||||
|
|
||||
|
@http.route(['/theme_studio/font_style'], type="json") |
||||
|
def font_style(self, font_id): |
||||
|
"""updating th e google fonts""" |
||||
|
font_obj = request.env['infinito.google.font'] |
||||
|
if font_id == 0: |
||||
|
font_obj.remove_fonts() |
||||
|
else: |
||||
|
font_obj.browse(font_id).set_css() |
||||
|
|
||||
|
@http.route(['/theme_studio/set_advanced_plus_data'], type="json") |
||||
|
def set_advanced_data_plus(self, vals): |
||||
|
""" save the features from theme studio""" |
||||
|
set_param = request.env['ir.config_parameter'].sudo().set_param |
||||
|
set_param('backend_theme_infinito_plus.is_refresh', |
||||
|
vals['infinitoRefresh']) |
||||
|
set_param('backend_theme_infinito_plus.chatbox_position', |
||||
|
vals['chatBoxPosition']) |
||||
|
set_param('backend_theme_infinito_plus.google_font', |
||||
|
vals['infinitoGoogleFont']) |
||||
|
if 'infinitoAnimation' in vals.keys(): |
||||
|
set_param('backend_theme_infinito_plus.animation_plus', |
||||
|
vals['infinitoAnimation']) |
||||
|
|
||||
|
@http.route(['/theme_studio/set_advanced_plus_data_user'], type="json") |
||||
|
def set_advanced_plus_data_user(self, vals): |
||||
|
""""updating the user inifnito data""" |
||||
|
request.env.user.write({ |
||||
|
'is_refresh': vals['infinitoRefresh'], |
||||
|
'chatbox_position': vals['chatBoxPosition'], |
||||
|
'animation_plus': vals['infinitoAnimation'] |
||||
|
}) |
||||
|
return True |
||||
|
|
||||
|
@http.route(['/theme_studio_plus/reset_to_default_style'], type="json") |
||||
|
def reset_to_default_style(self): |
||||
|
"""rest to default styles""" |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
style_file_path = working_dir.replace('controllers', |
||||
|
'static/src/css/font.css') |
||||
|
animation_file_path = working_dir.replace('controllers', |
||||
|
'static/src/scss/animation.scss') |
||||
|
chat_file_path = working_dir.replace('controllers', |
||||
|
'static/src/css/chatter.css') |
||||
|
style_file = open(style_file_path, 'w') |
||||
|
style_file.write('') |
||||
|
animation_read_file = open(animation_file_path, 'r') |
||||
|
animation_css = animation_read_file.read() |
||||
|
animation_file = open(animation_file_path, 'w') |
||||
|
for line in animation_css.split('\n'): |
||||
|
if 'ease-in' in line: |
||||
|
animation_file.write(animation_css.replace(line.strip(), |
||||
|
'animation:' + 'infinito_kanban_shake' + ' #{$tr * .1}s ease-in !important;')) |
||||
|
chat_file = open(chat_file_path, 'w') |
||||
|
chat_file.write('') |
||||
|
request.env['ir.config_parameter'].sudo().set_param( |
||||
|
'backend_theme_infinito_plus.is_refresh', False) |
||||
|
return True |
@ -0,0 +1,6 @@ |
|||||
|
## Module <backend_theme_infinito_plus> |
||||
|
|
||||
|
#### 05.10.2023 |
||||
|
#### Version 15.0.1.0.0 |
||||
|
#### ADD |
||||
|
- Initial Commit for Infinito Backend Theme Plus |
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
from . import infinito_google_font |
||||
|
from . import ir_http |
||||
|
from . import res_config_settings |
||||
|
from . import res_users |
@ -0,0 +1,92 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
import os |
||||
|
import requests |
||||
|
|
||||
|
from odoo import api, fields, models, _ |
||||
|
|
||||
|
|
||||
|
class GoogleFont(models.Model): |
||||
|
"""Model for storing Google fonts. |
||||
|
This class is used to add and manage Google fonts in the Odoo |
||||
|
application.""" |
||||
|
_name = 'infinito.google.font' |
||||
|
_description = 'Add Google Fonts' |
||||
|
|
||||
|
name = fields.Char(string='Name', help='Google font name') |
||||
|
font_url = fields.Text(string='Url', |
||||
|
help='Add the url for downloading the ' |
||||
|
'google fons') |
||||
|
font = fields.Text(string='Font', help='Used for css file writing purpose') |
||||
|
|
||||
|
@api.model |
||||
|
def save_google_fonts(self, g_font): |
||||
|
"""Function to store fonts in the database""" |
||||
|
record = self.search([('font_url', '=', g_font[1])]) |
||||
|
if not record: |
||||
|
font = self.get_css(g_font[0]) |
||||
|
rec = self.create({ |
||||
|
'name': g_font[0], |
||||
|
'font_url': g_font[1], |
||||
|
'font': font |
||||
|
}) |
||||
|
rec.set_css() |
||||
|
|
||||
|
def get_css(self, name): |
||||
|
"""get the css file of selected google font""" |
||||
|
headers_woff2 = { |
||||
|
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' |
||||
|
'(KHTML, like Gecko) ' |
||||
|
'Chrome/101.0.4951.41 Safari/537.36', |
||||
|
} |
||||
|
url = f'https://fonts.googleapis.com/css?family={name}&display=swap' |
||||
|
req = requests.get(url, timeout=5, headers=headers_woff2) |
||||
|
return req.content |
||||
|
|
||||
|
def set_css(self): |
||||
|
"""open the file write the style in to the css file""" |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
working_dir = working_dir.replace('/models', |
||||
|
'/static/src/css/font.css') |
||||
|
# open the file in write mode |
||||
|
with open(working_dir, 'w') as file: |
||||
|
style = f""" |
||||
|
{self.font} |
||||
|
* {{ |
||||
|
font-family: '{self.name}' !important; |
||||
|
}} |
||||
|
.fa {{ |
||||
|
font: normal normal normal 14px/1 FontAwesome !important;}} |
||||
|
.oi {{ |
||||
|
font-family: 'odoo_ui_icons' !important;}} |
||||
|
""" |
||||
|
file.write(style) |
||||
|
|
||||
|
@staticmethod |
||||
|
def remove_fonts(): |
||||
|
"""remove the style when changing the font""" |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
working_dir = working_dir.replace('/models', |
||||
|
'/static/src/css/font.css') |
||||
|
open(working_dir, "r") |
||||
|
with open(working_dir, 'w') as file: |
||||
|
file.write('') |
@ -0,0 +1,57 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
from odoo import models |
||||
|
|
||||
|
|
||||
|
class IrHttp(models.AbstractModel): |
||||
|
"""Inhering ir.http class for storing data in session.""" |
||||
|
_inherit = 'ir.http' |
||||
|
|
||||
|
def session_info(self): |
||||
|
"""pass the session information """ |
||||
|
res = super(IrHttp, self).session_info() |
||||
|
get_param = self.env['ir.config_parameter'].sudo().get_param |
||||
|
all_langs = self.env['res.lang'].get_installed() |
||||
|
res['currentLang'] = \ |
||||
|
list(filter(lambda x: x[0] == self.env.user.lang, all_langs))[0] |
||||
|
res['availableLanguages'] = all_langs |
||||
|
if self.env.user.has_group('base.group_user'): |
||||
|
user_edit = get_param( |
||||
|
'backend_theme_infinito.is_user_edit', default=False) |
||||
|
res['userEdit'] = user_edit |
||||
|
if user_edit: |
||||
|
res['infinitoRefresh'] = self.env.user.is_refresh |
||||
|
res['chatBoxPosition'] = self.env.user.chatbox_position |
||||
|
res['infinitoAnimation'] = self.env.user.animation_plus |
||||
|
else: |
||||
|
res['infinitoRefresh'] = get_param( |
||||
|
'backend_theme_infinito_plus.is_refresh', default=False) |
||||
|
res['chatBoxPosition'] = get_param( |
||||
|
'backend_theme_infinito_plus.chatbox_position', |
||||
|
default=False) |
||||
|
res['infinitoAnimation'] = get_param( |
||||
|
'backend_theme_infinito_plus.animation_plus', |
||||
|
default=False) |
||||
|
res['infinitoGoogleFont'] = \ |
||||
|
get_param('backend_theme_infinito_plus.google_font', |
||||
|
default=0) |
||||
|
return res |
@ -0,0 +1,65 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################# |
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
|
class ResConfigSettings(models.TransientModel): |
||||
|
"""Inhering res.config.settings class for adding new fields.""" |
||||
|
_inherit = 'res.config.settings' |
||||
|
|
||||
|
is_refresh = fields.Boolean(string='Tree,Kanban Refresh mode Enabled', |
||||
|
help='To check refresh button enabled or not', |
||||
|
default=False) |
||||
|
chatbox_position = fields.Char(string='Chat box position', |
||||
|
help='To set chat box position') |
||||
|
animation_plus = fields.Char(string='Animation', |
||||
|
help='To set animation position') |
||||
|
google_font = fields.Integer(string='Google font', |
||||
|
help='To set google font') |
||||
|
|
||||
|
@api.model |
||||
|
def get_values(self): |
||||
|
"""Get the current values for the configuration settings""" |
||||
|
res = super(ResConfigSettings, self).get_values() |
||||
|
get_param = self.env['ir.config_parameter'].sudo().get_param |
||||
|
res['is_refresh'] = get_param('backend_theme_infinito_plus.is_refresh', |
||||
|
default=False) |
||||
|
res['chatbox_position'] = get_param( |
||||
|
'backend_theme_infinito_plus.chatbox_position') |
||||
|
res['animation_plus'] = get_param( |
||||
|
'backend_theme_infinito_plus.animation_plus') |
||||
|
res['google_font'] = get_param( |
||||
|
'backend_theme_infinito_plus.google_font') |
||||
|
return res |
||||
|
|
||||
|
@api.model |
||||
|
def set_values(self): |
||||
|
"""Update the values of the configuration settings""" |
||||
|
set_param = self.env['ir.config_parameter'].sudo().set_param |
||||
|
set_param('backend_theme_infinito_plus.is_refresh', self.is_refresh) |
||||
|
set_param('backend_theme_infinito_plus.chatbox_position', |
||||
|
self.chatbox_position) |
||||
|
set_param('backend_theme_infinito_plus.animation_plus', |
||||
|
self.animation_plus) |
||||
|
set_param('backend_theme_infinito_plus.google_font', |
||||
|
self.google_font) |
||||
|
super(ResConfigSettings, self).set_values() |
@ -0,0 +1,35 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU LESSER |
||||
|
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
# (LGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class Users(models.Model): |
||||
|
"""Inhering 'res.users' for adding new fields""" |
||||
|
_inherit = 'res.users' |
||||
|
|
||||
|
is_refresh = fields.Boolean(string='Tree,Kanban Refresh mode Enabled', |
||||
|
help="Refreshing feature for specific users", |
||||
|
default=False) |
||||
|
chatbox_position = fields.Char(string="ChatBox position", |
||||
|
help="different layouts for chatBox") |
||||
|
animation_plus = fields.Char(stirng="Animation", |
||||
|
help="Different Animations", defult='Default') |
|
After Width: | Height: | Size: 284 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 485 KiB |
After Width: | Height: | Size: 2.2 MiB |
After Width: | Height: | Size: 1.8 MiB |
After Width: | Height: | Size: 185 KiB |
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,526 @@ |
|||||
|
<div class="container" |
||||
|
style="padding: 1rem !important; margin-bottom: 1rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between" |
||||
|
style="border-bottom: 1px solid #d5d5d5;"> |
||||
|
<div class="my-3"> |
||||
|
<img src="./assets/icons/logo.png" |
||||
|
style="width: auto !important; height: 40px !important;"> |
||||
|
</div> |
||||
|
<div class="my-3 d-flex align-items-center"> |
||||
|
<div |
||||
|
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
||||
|
<i class="fa fa-check mr-1"></i>Community |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- HERO --> |
||||
|
<div class="container"> |
||||
|
<div class="row" |
||||
|
style="padding: 4rem 2.5rem 0 !important; background-color: #fff !important;"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12 d-flex flex-column align-items-center"> |
||||
|
<h1 class="text-center text-uppercase" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-size: 67px !important; color: #791d97; font-weight: 900 !important;"> |
||||
|
INFINITO PLUS<span style="color:#5154a5;">Backend Theme </span><sup></sup> |
||||
|
</h1> |
||||
|
<p class="my-1 text-center text-uppercase" |
||||
|
style="letter-spacing: 4px !important; color: #74788D !important;"> |
||||
|
Utmost and dynamic backend theme for Odoo 15</p> |
||||
|
</div> |
||||
|
<div class="col-lg-12 d-flex justify-content-center align-items-center" |
||||
|
style="margin: 2rem 0;"> |
||||
|
<img src="./assets/hero.png" width="100%" height="auto" |
||||
|
class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF HERO --> |
||||
|
|
||||
|
<!-- OVERVIEW --> |
||||
|
<div class="container"> |
||||
|
<div class="row" |
||||
|
style="padding: 0rem 2.5rem !important; background-color: #fff !important;"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center"> |
||||
|
<p class="my-1 text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;"> |
||||
|
The Backend Theme Infinito Is A Dynamic And Ultimate Theme For |
||||
|
Your Odoo V15. |
||||
|
This Theme Will Give You A New Experience |
||||
|
With Odoo. Main Highlight Of The Theme Is You Can Dynamically |
||||
|
Change The Fonts, animation, Chatbox Layout,...Etc. |
||||
|
Moreover, it acts as a studio-based theme. |
||||
|
It Is A Perfect Choice For Your Odoo Backend And An Attractive |
||||
|
Theme For Your Odoo 15. |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="col-lg-12 mt-4"> |
||||
|
<div class="alert alert-warning text-center" role="alert"> |
||||
|
<i class="fa fa-exclamation-triangle mr-2" |
||||
|
aria-hidden="true"></i>Please make sure that you install |
||||
|
all |
||||
|
your apps prior to the installation of this theme. |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF OVERVIEW--> |
||||
|
|
||||
|
<!-- FEATURE --> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Features</h2> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- RESPONSIVE --> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem;padding: 0rem !important;background-color: #fff !important;border-top: 5px solid #791d97 !important;min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/refresh_icon.gif" |
||||
|
width="100%" |
||||
|
height="auto" |
||||
|
class="img-responsive"> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-8" style="padding: 2.5rem !important;"> |
||||
|
<div class="text-center" |
||||
|
style="font-size: 0.9rem !important; background-color: #791d97 !important; padding: 0.5 1.5rem !important; width: 60px; color: #ffffff !important; font-weight: 700; border-radius: 0.2rem !important; margin: 10px 0 !important;"> |
||||
|
New |
||||
|
</div> |
||||
|
<h3 style="font-weight: 700 !important;">View Refresh</h3> |
||||
|
<h6 |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
</h6> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF RESPONSIVE --> |
||||
|
|
||||
|
<!-- FEATURE Infinito Dynamic Styling--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem;padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> |
||||
|
<h3 style="font-weight: 700 !important;">Infinito |
||||
|
Animation</h3> |
||||
|
<h6 |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
The significant and attractive feature of the Backend Theme |
||||
|
Infinito is its dynamic and powerful styling. |
||||
|
The user can select different animation. The new Backend |
||||
|
Theme Infinito V15 delivers you an entirely redesigned |
||||
|
Kanban view |
||||
|
and Kanban Group View. The animated view provides a |
||||
|
comfortable experience for the users. |
||||
|
</h6> |
||||
|
<div class="row mt-4"> |
||||
|
<div class="col-lg-6"> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Dynamic Styles</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Clean Layout</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/animation.gif" |
||||
|
width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF FEATURE --> |
||||
|
|
||||
|
<!-- TWO COLUMN BLOCK Sidebar--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem;padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<h3 class="mx-4 mt-3" style="font-weight: 700 !important;"> |
||||
|
ChatBox Layout Customization</h3> |
||||
|
<h6 class="mx-4" |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
Backend Theme Infinito V15 ensures stunning themes for your |
||||
|
Odoo |
||||
|
15 platform. |
||||
|
The new chatbox layout with more customization options provides |
||||
|
a better experience. |
||||
|
The system encompasses the Left, Right, Top, Bottom positions, |
||||
|
user can select position from these positions. |
||||
|
</h6> |
||||
|
<div class="mx-4 my-4"> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Bottom Left</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Bottom Right</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Top Right</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Top Left</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/chatbox_layout.png" width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- FEATURE full screen app bar--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> |
||||
|
<h3 style="font-weight: 700 !important;">Google Font</h3> |
||||
|
<h6 class="mx-4" |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
User can customize fonts.This customization options provides a |
||||
|
better experience. |
||||
|
</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/google_font.gif" width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> |
||||
|
<h3 style="font-weight: 700 !important;">Language Switching</h3> |
||||
|
<h6 style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
You can switch languages easily. All added languages will be |
||||
|
visible on systray option from where you can select the |
||||
|
language. |
||||
|
</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/swtich_languages.gif" width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF FEATURE --> |
||||
|
<!-- END OF SCREENSHOTS --> |
||||
|
|
||||
|
<!-- OUR SERVICES --> |
||||
|
<section class="container" style="margin-top: 6rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Our Services</h2> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/cogs.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Customization</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/wrench.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Implementation</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/lifebuoy.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Support</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/user.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Hire |
||||
|
Odoo |
||||
|
Developer</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/puzzle.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Integration</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/update.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Migration</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/consultation.png" |
||||
|
class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Consultancy</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/training.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Implementation</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/license.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Licensing Consultancy</h6> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<!-- OUR INDUSTRIES --> |
||||
|
<section class="container" |
||||
|
style="margin-top: 6rem !important; background-color: #fff !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Our Industries</h2> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/trading-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Trading |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Easily |
||||
|
procure |
||||
|
and |
||||
|
sell your products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/pos-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
POS |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Easy |
||||
|
configuration |
||||
|
and convivial experience</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/education-black.png" |
||||
|
class="img-responsive mb-3" height="48px" |
||||
|
width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Education |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
A |
||||
|
platform for |
||||
|
educational management</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/manufacturing-black.png" |
||||
|
class="img-responsive mb-3" height="48px" |
||||
|
width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Manufacturing |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Plan, |
||||
|
track and |
||||
|
schedule your operations</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/ecom-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
E-commerce & Website |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Mobile |
||||
|
friendly, |
||||
|
awe-inspiring product pages</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/service-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Service Management |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Keep |
||||
|
track of |
||||
|
services and invoice</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/restaurant-black.png" |
||||
|
class="img-responsive mb-3" height="48px" |
||||
|
width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Restaurant |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Run |
||||
|
your bar or |
||||
|
restaurant methodically</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/hotel-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Hotel Management |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
An |
||||
|
all-inclusive |
||||
|
hotel management application</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- FOOTER --> |
||||
|
<!-- Footer Section --> |
||||
|
<section class="container" |
||||
|
style="margin: 5rem auto 2rem; background-color: #fff !important;"> |
||||
|
<div class="row" style="max-width:1540px;"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Need Help?</h2> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- Contact Cards --> |
||||
|
<div class="row d-flex justify-content-center align-items-center" |
||||
|
style="max-width:1540px; margin: 0 auto 2rem auto;"> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> |
||||
|
<div class="row mt-4"> |
||||
|
<div class="col-lg-6"> |
||||
|
<a href="mailto:odoo@cybrosys.com" target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i |
||||
|
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> |
||||
|
</div> |
||||
|
<div class="col-lg-6"> |
||||
|
<a href="https://api.whatsapp.com/send?phone=918606827707" |
||||
|
target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"> |
||||
|
<i class="fa fa-whatsapp mr-2"></i>+91 86068 |
||||
|
27707</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- End of Contact Cards --> |
||||
|
</section> |
||||
|
<!-- Footer --> |
||||
|
<section class="oe_container" |
||||
|
style="padding: 2rem 3rem 1rem; background-color: #fff !important;"> |
||||
|
<div class="row" |
||||
|
style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> |
||||
|
<!-- Logo --> |
||||
|
<div class="col-lg-12 d-flex justify-content-center align-items-center" |
||||
|
style="margin-top: 3rem;"> |
||||
|
<img src="https://www.cybrosys.com/images/logo.png" |
||||
|
width="200px" height="auto"/> |
||||
|
</div> |
||||
|
<!-- End of Logo --> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF FOOTER --> |
After Width: | Height: | Size: 522 KiB |
@ -0,0 +1,28 @@ |
|||||
|
|
||||
|
/* latin-ext */ |
||||
|
@font-face { |
||||
|
font-family: 'Titan One'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/titanone/v15/mFTzWbsGxbbS_J5cQcjCmjgm6Es.woff2) format('woff2'); |
||||
|
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; |
||||
|
} |
||||
|
/* latin */ |
||||
|
@font-face { |
||||
|
font-family: 'Titan One'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/titanone/v15/mFTzWbsGxbbS_J5cQcjClDgm.woff2) format('woff2'); |
||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; |
||||
|
} |
||||
|
|
||||
|
* { |
||||
|
font-family: 'Titan One' !important; |
||||
|
} |
||||
|
.fa { |
||||
|
font: normal normal normal 14px/1 FontAwesome !important;} |
||||
|
.oi { |
||||
|
font-family: 'odoo_ui_icons' !important;} |
||||
|
|
@ -0,0 +1,165 @@ |
|||||
|
odoo.define('backend_theme_infinito_plus.AdvancedFeatures', function (require) { |
||||
|
"use strict"; |
||||
|
var AdvancedFeatures = require('backend_theme_infinito.AdvancedFeatures'); |
||||
|
var session = require('web.session'); |
||||
|
var ajax = require('web.ajax'); |
||||
|
var Dialog = require('web.Dialog'); |
||||
|
var core = require('web.core'); |
||||
|
var rpc = require('web.rpc'); |
||||
|
var _t = core._t; |
||||
|
//Overriding the AdvancedFeatures component for adding new features to module
|
||||
|
AdvancedFeatures.include({ |
||||
|
events: _.extend({}, AdvancedFeatures.prototype.events, { |
||||
|
'change #chatBoxPosition': 'onPositionChange', |
||||
|
'change #infinito_font_select': 'onFontChange', |
||||
|
'click #infinito_font_select_google': '_onAddGoogleFontClick', |
||||
|
'change #animatedView': 'onAnimationChange' |
||||
|
}), |
||||
|
//Initializes the Chat Widget settings.
|
||||
|
init: function (parent, type) { |
||||
|
this._super.apply(this, arguments); |
||||
|
this.chatBoxPosition = ['Top Right', 'Top Left', 'Bottom Right', 'Bottom Left']; |
||||
|
this.infinitoAnimation = ['Default', 'Scale', 'Slide in']; }, |
||||
|
//This function is responsible for rendering the Chat Widget data and initializing the settings.
|
||||
|
async renderData() { |
||||
|
this._super.apply(this, arguments); |
||||
|
this.chat_style = []; |
||||
|
rpc.query({ |
||||
|
model: "infinito.google.font", |
||||
|
method: 'search_read', |
||||
|
args: [], |
||||
|
}).then((res) =>{ |
||||
|
var selectElement = this.$el.find('#infinito_font_select'); |
||||
|
var font_id = session.infinitoGoogleFont |
||||
|
res.forEach(function(option){ |
||||
|
var newOption = $("<option>").text(option['name']).val(option['id']).addClass('form-select infinito-form-select google-font'); |
||||
|
selectElement.find("option:eq(1)").before(newOption); |
||||
|
if (font_id == option['id']){ |
||||
|
newOption.prop('selected', true); |
||||
|
} |
||||
|
}) |
||||
|
}); |
||||
|
if (this.type == 'user'){ |
||||
|
this.$el.find("#fonts_container").prop("class","button_properties d-none"); |
||||
|
} |
||||
|
else{ |
||||
|
this.$el.find("#fonts_container").prop("class","button_properties d-block"); |
||||
|
} |
||||
|
this.$el.find('#infinito_font_select').val(session.infinitoGoogleFont); |
||||
|
let position_content = ''; |
||||
|
for (let position of this.chatBoxPosition) { |
||||
|
position_content += `<option value="${position}">${position}</option>`; |
||||
|
} |
||||
|
this.$el.find('#chatBoxPosition').html(position_content); |
||||
|
this.$el.find('#chatBoxPosition').val(session.chatBoxPosition); |
||||
|
|
||||
|
let animationContent = ''; |
||||
|
let index = 0 |
||||
|
for (let animation of this.infinitoAnimation) { |
||||
|
animationContent += `<option value="${index}">${animation}</option>`; |
||||
|
index +=1; |
||||
|
} |
||||
|
this.$el.find('#animatedView').html(animationContent); |
||||
|
this.$el.find('#animatedView').val(session.infinitoAnimation) |
||||
|
this.$el.find('#navbarRefreshToggler').prop('checked', session.infinitoRefresh); |
||||
|
}, |
||||
|
//This function is responsible for saving the changes made to the Chat Widget settings.
|
||||
|
async _SaveChanges() { |
||||
|
this._super.apply(this, arguments); |
||||
|
let vals = { |
||||
|
'infinitoRefresh': this.$el.find('#navbarRefreshToggler').is(':checked'), |
||||
|
'chatBoxPosition': this.$el.find('#chatBoxPosition').val(), |
||||
|
'infinitoAnimation': this.$el.find('#animatedView').val(), |
||||
|
'animations' : this.animated_id, |
||||
|
'infinitoGoogleFont' : this.font_id ? this.font_id : 0, |
||||
|
}; |
||||
|
var chat_style = this.chat_style; |
||||
|
session.chatBoxPosition = vals.chatBoxPosition; |
||||
|
session.infinitoAnimation = vals.infinitoAnimation; |
||||
|
session.infinitoRefresh = vals.infinitoRefresh |
||||
|
var style = []; |
||||
|
if (vals.animations === '1') { |
||||
|
style.push('infinito_kanban_scale'); |
||||
|
} else if (vals.animations === '0') { |
||||
|
style.push('infinito_kanban_shake'); |
||||
|
} else if (vals.animations === '2') { |
||||
|
style.push('infinito_kanban_slide_in'); |
||||
|
} |
||||
|
if (style.length != 0){ |
||||
|
await ajax.jsonRpc('/theme_studio/animation_styles', 'call', { 'style': JSON.stringify(style)}); |
||||
|
} |
||||
|
if (chat_style.length !== 0) { |
||||
|
await ajax.jsonRpc('/theme_studio/save_styles_plus', 'call', { 'new_style': JSON.stringify(chat_style) }); |
||||
|
} |
||||
|
if (vals.infinitoGoogleFont.length !== 0){ |
||||
|
await ajax.jsonRpc('/theme_studio/font_style', 'call', { font_id: vals.infinitoGoogleFont });} |
||||
|
if (this.type == 'global'){ |
||||
|
await ajax.jsonRpc('/theme_studio/set_advanced_plus_data', 'call', {vals}) |
||||
|
} |
||||
|
if(this.type == 'user'){ |
||||
|
await ajax.jsonRpc('/theme_studio/set_advanced_plus_data_user', 'call', {vals}).then((_) => { |
||||
|
this._Close(); }) |
||||
|
} |
||||
|
}, |
||||
|
//ChatBox position change function.
|
||||
|
async onPositionChange(ev) { |
||||
|
let val = ev.target.value; |
||||
|
const positionMap = { |
||||
|
'Top Right': { 'top': '10px', 'left': 'auto' }, |
||||
|
'Top Left': { 'top': '10px', 'left': '10px', 'right': 'auto' }, |
||||
|
'Bottom Left': { 'left': '10px', 'bottom': '10px', 'top': 'auto', 'right': 'auto' }, |
||||
|
'Bottom Right': { 'right': '10px', 'bottom': '10px', 'top': 'auto', 'left': 'auto' } |
||||
|
}; |
||||
|
this.chat_style = [positionMap[val]] || []; |
||||
|
}, |
||||
|
//Animation change function.
|
||||
|
onAnimationChange: function(ev) { |
||||
|
this.animated_id = ev.target.value; |
||||
|
}, |
||||
|
//Font change function.
|
||||
|
onFontChange: function(ev){ |
||||
|
let options = ev.target.options |
||||
|
let selected = this.$(options[options.selectedIndex]) |
||||
|
if(selected.hasClass('add-font')){ |
||||
|
this.addGoogleFont() |
||||
|
} |
||||
|
else if(selected.hasClass('system-font')){ |
||||
|
this.font_id = 0} |
||||
|
else { |
||||
|
this.font_id = parseInt(selected.val())} |
||||
|
}, |
||||
|
//AddGoogleFont - Function to open a dialog for adding a Google Font and save it to the backend.
|
||||
|
addGoogleFont: function(){ |
||||
|
const dialog = new Dialog(this, { |
||||
|
title: _t("Add a Google Font"), |
||||
|
$content: $(core.qweb.render('backend_theme_infinito_plus.dialog.addGoogleFont')), |
||||
|
// open a wizard for selecting google font
|
||||
|
buttons: [ |
||||
|
{ text: _t("Save & Reload"), |
||||
|
classes: 'btn-primary', |
||||
|
click: async () => { |
||||
|
const inputEl = dialog.el.querySelector('.o_input_google_font'); |
||||
|
let m = inputEl.value.match(/\bfamily=([\w+]+)/); |
||||
|
// validation of link
|
||||
|
if(m){ |
||||
|
const font = m[1].replace(/\+/g, ' '); |
||||
|
var self = this; |
||||
|
rpc.query({ |
||||
|
model: "infinito.google.font", |
||||
|
method: 'save_google_fonts', |
||||
|
args: [[font,m.input]], |
||||
|
}).then(function (data) { |
||||
|
window.location.reload(); |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
text: _t("Discard"), |
||||
|
close: true,},], |
||||
|
}); |
||||
|
dialog.open(); |
||||
|
} |
||||
|
}); |
||||
|
return AdvancedFeatures; |
||||
|
}); |
@ -0,0 +1,12 @@ |
|||||
|
odoo.define('backend_theme_infinito_plus.ThemeStudioMenu', function (require) { |
||||
|
"use strict"; |
||||
|
var ThemeStudioMenu = require('backend_theme_infinito.ThemeStudioMenu'); |
||||
|
var ajax = require('web.ajax'); |
||||
|
ThemeStudioMenu.include({ |
||||
|
//Reset all the features.
|
||||
|
_onResetClick: async function(ev){ |
||||
|
this._super.apply(this, arguments); |
||||
|
await ajax.jsonRpc('/theme_studio_plus/reset_to_default_style', 'call', {}); |
||||
|
}, |
||||
|
}) |
||||
|
}); |
@ -0,0 +1,15 @@ |
|||||
|
/** @odoo-module **/ |
||||
|
import ControlPanel from "web.ControlPanel"; |
||||
|
import { patch } from 'web.utils'; |
||||
|
var session = require('web.session'); |
||||
|
//Patching the ControlPanel for adding new clicks
|
||||
|
patch(ControlPanel.prototype, 'backend_theme_infinito_plus/static/src/js/navbar.js', { |
||||
|
//Function to refresh the model data.
|
||||
|
onRefreshClick(){ |
||||
|
this.model.dispatch() |
||||
|
}, |
||||
|
//Function for enable and disable the refresh button in navbar.
|
||||
|
RefreshOn(){ |
||||
|
return session.infinitoRefresh; |
||||
|
} |
||||
|
}) |
@ -0,0 +1,32 @@ |
|||||
|
/** @odoo-module **/ |
||||
|
import SystrayMenu from 'web.SystrayMenu'; |
||||
|
import Widget from 'web.Widget'; |
||||
|
import session from "web.session"; |
||||
|
var rpc = require('web.rpc'); |
||||
|
var ExampleWidget = Widget.extend({ |
||||
|
template: 'LanguageSwitch', |
||||
|
events: { |
||||
|
'click .dropdown-menu': '_onLanguageSelect', |
||||
|
}, |
||||
|
// Initializes the object by copying the current language and available languages
|
||||
|
// from the session object.
|
||||
|
init: function () { |
||||
|
this.currentLang = [session.currentLang[0], session.currentLang[1]]; |
||||
|
this.availableLanguages = session.availableLanguages |
||||
|
}, |
||||
|
// Handle the selection of language.
|
||||
|
_onLanguageSelect: function (ev) { |
||||
|
var lang = ev.target.dataset.langKey |
||||
|
rpc.query({ |
||||
|
model: 'res.users', |
||||
|
method: 'write', |
||||
|
args: [[session.uid], { |
||||
|
"lang": lang |
||||
|
}], |
||||
|
}).then(() => { |
||||
|
window.location.reload(); |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
SystrayMenu.Items.push(ExampleWidget); |
||||
|
export default ExampleWidget; |
@ -0,0 +1,49 @@ |
|||||
|
.o_kanban_view { |
||||
|
.oe_kanban_card, .o_kanban_record { |
||||
|
@for $tr from 1 through 80 { |
||||
|
&:nth-child(#{$tr}) { |
||||
|
animation:infinito_kanban_shake #{$tr * .1}s ease-in !important; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@keyframes infinito_kanban_slide_in { |
||||
|
0% { transform: translateX(-100%); } |
||||
|
100% { transform: translateX(0); } |
||||
|
} |
||||
|
@keyframes infinito_kanban_scale { |
||||
|
0%, 100% { transform: translateY(0); } |
||||
|
50% { transform: translateY(-10px); } |
||||
|
} |
||||
|
@keyframes infinito_kanban_shake { |
||||
|
0% { |
||||
|
transform: rotate(-5deg); |
||||
|
opacity: 0; |
||||
|
} |
||||
|
|
||||
|
20% { |
||||
|
transform: rotate(5deg); |
||||
|
} |
||||
|
|
||||
|
40% { |
||||
|
transform: rotate(-3deg); |
||||
|
} |
||||
|
|
||||
|
60% { |
||||
|
transform: rotate(3deg); |
||||
|
} |
||||
|
|
||||
|
80% { |
||||
|
transform: rotate(-1deg); |
||||
|
} |
||||
|
|
||||
|
90% { |
||||
|
transform: rotate(1deg); |
||||
|
} |
||||
|
|
||||
|
100% { |
||||
|
transform: rotate(0deg); |
||||
|
opacity: 1; |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<templates id="template" xml:space="preserve"> |
||||
|
<!-- Google font popup template--> |
||||
|
<div t-name="backend_theme_infinito_plus.dialog.addGoogleFont"> |
||||
|
<div class="mb-3 row"> |
||||
|
<label class="col-form-label col-md-3" for="google_font_html">Google Font address</label> |
||||
|
<div class="col-md-9"> |
||||
|
<textarea id="google_font_html_infinito" class="form-control o_input_google_font" |
||||
|
placeholder="https://fonts.google.com/specimen/Roboto" style="height: 100px;"/> |
||||
|
<span class="float-end text-muted"> |
||||
|
Select one font on <a target="_blank" href="https://fonts.google.com">fonts.google.com</a> and copy paste the address of the font page here. |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</templates> |
||||
|
|
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<templates id="template" xml:space="preserve"> |
||||
|
<!-- Refresh Button--> |
||||
|
<t t-inherit="web.Legacy.ControlPanel" t-inherit-mode="extension" owl="1"> |
||||
|
<xpath expr="//div[hasclass('o_cp_bottom')]//div[hasclass('o_cp_bottom_right')]/div[1]" position="before"> |
||||
|
<button type="button" t-if="RefreshOn()" class="btn btn-refresh fa fa-refresh" t-on-click="onRefreshClick"/> |
||||
|
</xpath> |
||||
|
</t> |
||||
|
</templates> |
@ -0,0 +1,104 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<templates> |
||||
|
<!-- Extending the Infinito ControlPanel sidebar for adding new options--> |
||||
|
<t t-inherit="backend_theme_infinito.theme_editor_sidebar_advanced" t-inherit-mode="extension"> |
||||
|
<xpath expr="//div[hasclass('sidebar_content')]//div[hasclass('button_properties')][4]" position="after"> |
||||
|
<div class="button_properties"> |
||||
|
<p> |
||||
|
<a class="btn btn-primary_style" data-toggle="collapse" href="#chatBox" role="button" |
||||
|
aria-expanded="false" aria-controls="chatox"> |
||||
|
Chat Box |
||||
|
</a> |
||||
|
</p> |
||||
|
<div class="collapse" id="chatBox"> |
||||
|
<div class="card card-body"> |
||||
|
<div class="sidebar_left"> |
||||
|
<div class="wrapper"> |
||||
|
<div> |
||||
|
<h6 class="info-infinito" data-toggle="popover" data-placement="right" |
||||
|
data-content="All internal users can edit their Advanced features for themself" |
||||
|
title="" data-original-title="Help">Position |
||||
|
</h6> |
||||
|
<div class="sub_style"> |
||||
|
<select class="form-select infinito-form-select" id="chatBoxPosition"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="button_properties"> |
||||
|
<p> |
||||
|
<a class="btn btn-primary_style" data-toggle="collapse" href="#animation" role="button" |
||||
|
aria-expanded="false" aria-controls="animation"> |
||||
|
Animation |
||||
|
</a> |
||||
|
</p> |
||||
|
<div class="collapse" id="animation"> |
||||
|
<div class="card card-body"> |
||||
|
<div class="sidebar_left"> |
||||
|
<div class="wrapper"> |
||||
|
<div> |
||||
|
<h6 class="info-infinito" data-toggle="popover" data-placement="right" |
||||
|
data-content="All internal users can edit their Advanced features for themself" |
||||
|
title="" data-original-title="Help">Type |
||||
|
</h6> |
||||
|
<div class="sub_style"> |
||||
|
<select class="form-select infinito-form-select" id="animatedView"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="button_properties" id="fonts_container"> |
||||
|
<p> |
||||
|
<a class="btn btn-primary_style" data-toggle="collapse" href="#googleFont" role="button" |
||||
|
aria-expanded="false" aria-controls="googleFont"> |
||||
|
Fonts |
||||
|
</a> |
||||
|
</p> |
||||
|
<div class="collapse" id="googleFont"> |
||||
|
<div class="card card-body"> |
||||
|
<div class="sidebar_left"> |
||||
|
<div class="wrapper"> |
||||
|
<div> |
||||
|
<h6 class="info-infinito" data-toggle="popover" data-placement="right" |
||||
|
data-content="All internal users can edit their Advanced features for themself" |
||||
|
title="" data-original-title="Help">Font Style |
||||
|
</h6> |
||||
|
<div class="sub_style"> |
||||
|
<select id="infinito_font_select" class="form-select infinito-form-select "> |
||||
|
<option href="#" class="form-select infinito-form-select system-font" |
||||
|
t-att-data-variable="variable">System Font |
||||
|
</option> |
||||
|
<option href="#" |
||||
|
class="form-select infinito-form-sele ct add-font infinito_font_select_google" |
||||
|
t-att-data-variable="variable">Add a Google Font |
||||
|
</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
<xpath expr="//div[@id='other']//div[hasclass('wrapper')]" position="inside"> |
||||
|
<div class="sub_style"> |
||||
|
<div class="t_settings info-infinito" data-bs-toggle="popover" data-placement="right" |
||||
|
data-content="Refresh the tree, kanban view" |
||||
|
title="" data-original-title="Help"> |
||||
|
Refresh |
||||
|
</div> |
||||
|
<label class="switch"> |
||||
|
<input type="checkbox" id="navbarRefreshToggler"/> |
||||
|
<span class="slider round"/> |
||||
|
</label> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
</t> |
||||
|
</templates> |
@ -0,0 +1,20 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<templates> |
||||
|
<t t-name="LanguageSwitch"> |
||||
|
<div class="dropdown"> |
||||
|
<button class="dropdown-toggle" type="button" |
||||
|
id="dropdownMenuButton" data-toggle="dropdown" |
||||
|
aria-haspopup="true" aria-expanded="false"> |
||||
|
<span class="current-language" style="font-size: small;" t-esc="widget.currentLang[1]"/> |
||||
|
</button> |
||||
|
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> |
||||
|
<t t-foreach="widget.availableLanguages" t-as="lang"> |
||||
|
<a class="dropdown-item" href="#" |
||||
|
t-att-data-lang-key="lang[0]"> |
||||
|
<t t-esc="lang[1]"/> |
||||
|
</a> |
||||
|
</t> |
||||
|
</div> |
||||
|
</div> |
||||
|
</t> |
||||
|
</templates> |