To improve your experience with Odoo the Artify backend theme provides a fully configurable theme settings menu.
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Apps
-
Easly accessible apps where it reveals the apps menu on just a click. Moreover, its also fully customisable with Artify backend theme.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Responsive Layout
-
One of the critical highlights of the Artify backend theme is that it was genuinely responsive; moreover, it provides an efficient interface to manage a mobile device.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Attractive User Interface
-
It provides fully attractive, and a elgant User Interface with completely customizability..
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Custom Form view
-
Artify Backend theme provides a fully modified and colorful form view with the full view experience.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Custom Form view
-
Artify Backend theme provides a fully modified and colorful form view with the full view experience.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fully Responsive
- Layout.
-
-
-
-
Now take advantage of everything your dashboard has to offer even on the go. Our
- design are now fully responsive, enabling you to view and manage everything from the comfort of your
- mobile device.
-
-
Fully responsive
-
Fly-out hamburger menu on the left
-
Fits perfectly to all screen sizest
-
Quick access menu at the bottom in discuss
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kanban View
- Layout
-
-
-
-
The Artify Backend Theme V18 Gives You a Fully Modified Kanban View and Kanban Group View. The Section Wise Separated Stages give a Pleasant Experience And an Extraordinary Design To Your Content Tiles, Making The Tiles Look Great. It will Give You a Clean Layout with the New Color Combination and a Modified Font.
-
-
Stages are Separated in View
-
New Color Combination
-
Modified Font
-
Clean Layout
-
Buttons with New Colors
-
Full Screen View
-
-
-
-
-
-
-
-
-
-
-
-
-
- List View
- Layout
-
-
-
-
Artify Backend Theme V18 Gives You The Fully Modified List View. This Table Design Gives You More Beauty for Your Odoo Backend. It will Give You a Clean Layout with the New Color Combination and a Modified Font.
-
-
List View
-
Stages are Separated in View
-
New Color Combination
-
Modified Font
-
Clean Layout
-
Buttons with New Colors
-
Full Screen View
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form View
- Layout
-
-
-
-
The Artify Backend Theme V18 Gives You a Fully Modified Kanban View and Kanban Group View. The Section Wise Separated Stages give a Pleasant Experience And an Extraordinary Design To Your Content Tiles, Making The Tiles Look Great. It will Give You a Clean Layout with the New Color Combination and a Modified Font.
The Code Backend Theme V18 Gives You a Fully Modified View with a Full Screen Display. This is a Minimalist and Elegant Backend Theme for Odoo 18. This Theme Will Change Your Old Experience to a New Experience With Odoo. It is a Perfect Choice for Your Odoo Backend and an Attractive Theme for Your Odoo 18. It will Give You a Clean Layout with a New Color Combination and a Modified Font. It has a Sidebar with New App Icons and Company Logo. This Will Change Your Old Kanban, List, and Form Views to A Fully Modified View.
Now take advantage of everything
- your dashboard has to offer even on the go. Our
- design are now fully responsive, enabling you to
- view and manage everything from the comfort of
- your mobile device. Everything has been designed
- in a meticulous fashion so that every view snaps
- itself to fit the size of the device you are
- using, be it smartphones, tablet or any other
- portables, our theme adjusts itself to fit the
- screen size.
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Easily Access Sidebar Menu
-
Reveal the sidebar menu with just a
- click. Sidebar menu features all the relevant links to
- navigate through the application. Hiding the sidebar
- leaves more space on the main area offering a
- distraction-free view that lets you focus on what
- matters the most.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fully Responsive Layout
-
-
-
-
Now take advantage of everything your dashboard
- has to offer even on the go. Our design are now fully
- responsive, enabling you to view and manage everything from the
- comfort of your mobile device. Everything has been designed in a
- meticulous fashion so that every view snaps itself to fit the
- size of the device you are using, be it smartphones, tablet or
- any other portables, our theme adjusts itself to fit the screen
- size.
-
-
-
Fully responsive
-
Fly-out hamburger menu on the left
-
Fits perfectly to all screen sizes
-
Quick access menu at the bottom in discuss
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- List View
-
-
-
-
-
-
-
-
-
-
-
Code Backend Theme V18 Gives You
- The Fully Modified List View. This Table Design Gives
- You More Beauty for Your Odoo Backend. It will Give You
- a Clean Layout with the New Color Combination and a
- Modified Font.
-
-
Stages are Separated in View
-
New Color Combination
-
Modified Font
-
Clean Layout
-
Buttons with New Colors
-
Full Screen View
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kanban Group View
-
-
-
-
The Code Backend Theme V18 Gives You a Fully
- Modified Kanban View and Kanban Group View. The Section Wise
- Separated Stages give a Pleasant Experience And an Extraordinary
- Design To Your Content Tiles, Making The Tiles Look Great. It
- will Give You a Clean Layout with the New Color Combination and
- a Modified Font.
-
-
Stages are Separated in View
-
New Color Combination
-
Modified Font
-
Clean Layout
-
Buttons with New Colors
-
Full Screen View
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form View
-
-
-
-
-
-
-
-
-
-
-
Code Backend Theme Gives You The
- Fully Modified Form View with a Full Screen Experience.
- It will Give You a Clean Layout with the New Color
- Combination and a Modified Font.
Easily accessible sidebar where it reveals the sidebar
- menu on just a click. Moreover, its also fully
- customisable with Hue backend theme.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Kanban view
-
Hue Backend Theme gives a colorful
- & elegant kanban view, and it's fully
- customizable with this theme.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Hue Backend Theme Settings
-
To improve your experience with Odoo the Hue
- backend theme provides a fully configurable
- theme settings menu.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Custom Form view
-
Hue Backend theme provides a fully modified and
- colorful form view with the full view experience.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Attractive Customizable User Interface
-
It provides fully attractive,
- and an elegant User Interface which is
- completely customizable.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Advanced Searching for App Menus
-
Hue Backend Theme gives a more complex and
- powerful search than standard search, providing search
- options like enterprise edition.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Truly
- Responsive
-
-
-
-
One of the critical highlights of
- the Hue backend theme is that
- it was genuinely responsive; moreover, it provides
- an efficient interface to manage a mobile device.
-
-
Appealing card hover style
-
Detailed product filtering
-
Modernized mini basket
-
Cutting-edge single product
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Stunning
- Pages
-
-
-
-
Hue Backend Theme V18 is an Attractive Theme for Your
- Odoo 18. This Theme Will Improve
- Your Experience With Odoo.
-
-
-
-
diff --git a/multicolor_backend_theme/README.rst b/multicolor_backend_theme/README.rst
deleted file mode 100644
index 621d87029..000000000
--- a/multicolor_backend_theme/README.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
- :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
- :alt: License: LGPL-3
-
-Chameleon Multi color Backend Theme
-===================================
-* Configurable multi color backend theme for Odoo 18,Only Admin can have the role to create, update, and removing the themes
-
-Installation
-============
- - www.odoo.com/documentation/18.0/setup/install.html
- - Install our custom addon
-
-License
--------
-General Public License, Version 3 (LGPL v3).
-(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
-
-Company
--------
-* `Cybrosys Techno Solutions `__
-
-Credits
--------
-* Developer:
- Linto CT @ Cybrosys
- Sanjith Rashin @ Cybrosys
- V14 Dino @ Cybrosys
- V15 Sigha Ck @ Cybrosys
- V16 Sigha Ck @ Cybrosys
- V17 Fouzan M @ Cybrosys
- V18 Rosmy John @ Cybrosys
-
-Contacts
---------
-* Mail Contact : odoo@cybrosys.com
-
-Bug Tracker
------------
-Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
-
-Maintainer
-==========
-.. 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: ``__
\ No newline at end of file
diff --git a/multicolor_backend_theme/__init__.py b/multicolor_backend_theme/__init__.py
deleted file mode 100644
index 50349d36a..000000000
--- a/multicolor_backend_theme/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import controllers
-from . import models
diff --git a/multicolor_backend_theme/__manifest__.py b/multicolor_backend_theme/__manifest__.py
deleted file mode 100644
index 0bb085bf7..000000000
--- a/multicolor_backend_theme/__manifest__.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-{
- "name": "Chameleon Multi Color Backend Theme",
- "version": "18.0.1.0.0",
- "category": "Themes/Backend",
- "summary": "Configurable multi color backend theme for Odoo 18",
- "description": """
- Configurable multi color backend theme for Odoo 18,
- Only Admin can have the role to create, update, and removing the themes.
- """,
- 'author': 'Cybrosys Techno Solutions',
- 'company': 'Cybrosys Techno Solutions',
- 'maintainer': 'Cybrosys Techno Solutions',
- "website": "https://www.cybrosys.com",
- "depends": ['web', 'mail'],
- "data": [
- 'security/security_groups.xml',
- 'security/ir.model.access.csv',
- 'data/theme_data.xml',
- 'views/login_templates.xml',
- ],
- "assets": {
- 'web.assets_backend': [
- 'web/static/lib/jquery/jquery.js',
- '/multicolor_backend_theme/static/src/xml/sidebar_menu_icon.xml',
- '/multicolor_backend_theme/static/src/xml/systray_ext.xml',
- '/multicolor_backend_theme/static/src/scss/theme_style_backend.scss',
- '/multicolor_backend_theme/static/src/css/backend.css',
- '/multicolor_backend_theme/static/src/wcolpick/wcolpick.css',
- '/multicolor_backend_theme/static/src/js/sidebar_menu.js',
- '/multicolor_backend_theme/static/src/wcolpick/wcolpick.js',
- '/multicolor_backend_theme/static/src/js/search_apps.js',
- '/multicolor_backend_theme/static/src/js/systray_item.js',
- ],
- 'web.assets_frontend': [
- 'multicolor_backend_theme/static/src/scss/theme_style.scss',
- 'multicolor_backend_theme/static/src/js/login_page.js'
- ],
- },
- 'images': [
- 'static/description/banner.jpg',
- 'static/description/theme_screenshot.jpg',
- ],
- 'license': 'LGPL-3',
- 'installable': True,
- 'auto_install': False,
- 'application': False,
-}
diff --git a/multicolor_backend_theme/controllers/__init__.py b/multicolor_backend_theme/controllers/__init__.py
deleted file mode 100644
index 936cfa373..000000000
--- a/multicolor_backend_theme/controllers/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import theme_config
diff --git a/multicolor_backend_theme/controllers/theme_config.py b/multicolor_backend_theme/controllers/theme_config.py
deleted file mode 100644
index 0c2adb1fe..000000000
--- a/multicolor_backend_theme/controllers/theme_config.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import http
-from odoo.http import request
-
-
-class LoginPage(http.Controller):
- """Controller for the login page. This controller provides methods for
- retrieving the active theme's main color, view font color, and theme font
- color and updating the theme of the login page."""
- @http.route('/active_theme', auth='public', type='json')
- def find_active_theme(self):
- """find the active theme for updating theme of login page"""
- active_theme = request.env['theme.config'].sudo().search([
- ('is_theme_active', '=', True)
- ])
- return {'id': active_theme[0].id,
- 'theme_main_color': active_theme[0].theme_main_color,
- 'view_font_color': active_theme[0].view_font_color,
- 'theme_font_color': active_theme[0].theme_font_color,
- } if active_theme else []
diff --git a/multicolor_backend_theme/data/theme_data.xml b/multicolor_backend_theme/data/theme_data.xml
deleted file mode 100644
index b0c2da7b3..000000000
--- a/multicolor_backend_theme/data/theme_data.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- Theme 1
- #6fb702
- #fff
- #333
- true
-
-
- Theme 2
- #404a5e
- #fff
- #404a5e
- false
-
-
- Theme 3
- #f39b12
- #000
- #333
- false
-
-
-
\ No newline at end of file
diff --git a/multicolor_backend_theme/doc/RELEASE_NOTES.md b/multicolor_backend_theme/doc/RELEASE_NOTES.md
deleted file mode 100644
index c26a3f068..000000000
--- a/multicolor_backend_theme/doc/RELEASE_NOTES.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Module
-
-#### 18.10.2024
-#### Version 18.0.1.0.0
-#### ADD
-- Initial Commit for Chameleon Multi color Backend Theme
\ No newline at end of file
diff --git a/multicolor_backend_theme/models/__init__.py b/multicolor_backend_theme/models/__init__.py
deleted file mode 100644
index 936cfa373..000000000
--- a/multicolor_backend_theme/models/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import theme_config
diff --git a/multicolor_backend_theme/models/theme_config.py b/multicolor_backend_theme/models/theme_config.py
deleted file mode 100644
index b5eb7aa71..000000000
--- a/multicolor_backend_theme/models/theme_config.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import api, fields, models
-
-
-class ThemeConfig(models.Model):
- """Model for storing configuration settings related to the theme"""
- _name = 'theme.config'
- _description = "Model for storing configuration related to the theme"
-
- name = fields.Char(help="Theme name")
- theme_main_color = fields.Char(help="main theme color")
- view_font_color = fields.Char(help="backend font color")
- theme_font_color = fields.Char(help="backend view font color")
- is_theme_active = fields.Boolean(string="Active Theme")
-
- @api.model
- def create_new_theme(self):
- """function to create a new theme"""
- theme_obj = self.create({
- 'theme_main_color': '#6fb702',
- 'view_font_color': '#333',
- 'theme_font_color': '#fff',
- 'is_theme_active': False,
- })
- theme_obj.name = 'Theme ' + str(theme_obj.id)
- return theme_obj.read(['name', 'theme_main_color', 'view_font_color',
- 'theme_font_color', 'is_theme_active'])
-
- @api.model
- def update_active_theme(self, theme_id):
- """function to update active theme"""
- theme = {}
- for record in self.search([]):
- if record.is_theme_active:
- theme['prev'] = record.id
- record.is_theme_active = record.id == theme_id
- return theme
diff --git a/multicolor_backend_theme/security/ir.model.access.csv b/multicolor_backend_theme/security/ir.model.access.csv
deleted file mode 100644
index 2749c50d5..000000000
--- a/multicolor_backend_theme/security/ir.model.access.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_themes_manager,themes_selection,model_theme_config,multicolor_theme_manager_access,1,1,1,1
-access_themes_user,themes_selection,model_theme_config,base.group_user,1,0,0,0
\ No newline at end of file
diff --git a/multicolor_backend_theme/security/security_groups.xml b/multicolor_backend_theme/security/security_groups.xml
deleted file mode 100644
index bec6a2d95..000000000
--- a/multicolor_backend_theme/security/security_groups.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- Multicolor Backend Theme
- User access levels for Theme selection
- 10
-
-
- Administrator
-
-
-
-
\ No newline at end of file
diff --git a/multicolor_backend_theme/static/description/banner.jpg b/multicolor_backend_theme/static/description/banner.jpg
deleted file mode 100644
index bb7e05e2d..000000000
Binary files a/multicolor_backend_theme/static/description/banner.jpg and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/icon.png b/multicolor_backend_theme/static/description/icon.png
deleted file mode 100644
index 5868f8070..000000000
Binary files a/multicolor_backend_theme/static/description/icon.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/access.png b/multicolor_backend_theme/static/description/img/access.png
deleted file mode 100644
index cc8d29322..000000000
Binary files a/multicolor_backend_theme/static/description/img/access.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/admin_access.png b/multicolor_backend_theme/static/description/img/admin_access.png
deleted file mode 100644
index 687eed838..000000000
Binary files a/multicolor_backend_theme/static/description/img/admin_access.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/adv_search_1.png b/multicolor_backend_theme/static/description/img/adv_search_1.png
deleted file mode 100644
index ea140b8b3..000000000
Binary files a/multicolor_backend_theme/static/description/img/adv_search_1.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/arrows-repeat.svg b/multicolor_backend_theme/static/description/img/arrows-repeat.svg
deleted file mode 100644
index 94fb8f7f9..000000000
--- a/multicolor_backend_theme/static/description/img/arrows-repeat.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/banner-bg-1.svg b/multicolor_backend_theme/static/description/img/banner-bg-1.svg
deleted file mode 100644
index 7af9bab87..000000000
--- a/multicolor_backend_theme/static/description/img/banner-bg-1.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/banner.svg b/multicolor_backend_theme/static/description/img/banner.svg
deleted file mode 100644
index 3d4ed7a4a..000000000
--- a/multicolor_backend_theme/static/description/img/banner.svg
+++ /dev/null
@@ -1,49 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/chatbot1.png b/multicolor_backend_theme/static/description/img/chatbot1.png
deleted file mode 100644
index 567475725..000000000
Binary files a/multicolor_backend_theme/static/description/img/chatbot1.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/check.svg b/multicolor_backend_theme/static/description/img/check.svg
deleted file mode 100644
index 8bc79333d..000000000
--- a/multicolor_backend_theme/static/description/img/check.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/color_picker_1.png b/multicolor_backend_theme/static/description/img/color_picker_1.png
deleted file mode 100644
index 8d9343728..000000000
Binary files a/multicolor_backend_theme/static/description/img/color_picker_1.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/exp_sidebar.png b/multicolor_backend_theme/static/description/img/exp_sidebar.png
deleted file mode 100644
index 511fc0150..000000000
Binary files a/multicolor_backend_theme/static/description/img/exp_sidebar.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/exp_sidebar_1.png b/multicolor_backend_theme/static/description/img/exp_sidebar_1.png
deleted file mode 100644
index 6c62bfda8..000000000
Binary files a/multicolor_backend_theme/static/description/img/exp_sidebar_1.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/feature-star.svg b/multicolor_backend_theme/static/description/img/feature-star.svg
deleted file mode 100644
index a913270e8..000000000
--- a/multicolor_backend_theme/static/description/img/feature-star.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/form_view.png b/multicolor_backend_theme/static/description/img/form_view.png
deleted file mode 100644
index f3638c30d..000000000
Binary files a/multicolor_backend_theme/static/description/img/form_view.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/gear.svg b/multicolor_backend_theme/static/description/img/gear.svg
deleted file mode 100644
index ce383059d..000000000
--- a/multicolor_backend_theme/static/description/img/gear.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/hero.gif b/multicolor_backend_theme/static/description/img/hero.gif
deleted file mode 100644
index ceb5a4f98..000000000
Binary files a/multicolor_backend_theme/static/description/img/hero.gif and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/hire-odoo.svg b/multicolor_backend_theme/static/description/img/hire-odoo.svg
deleted file mode 100644
index 9cfec4e44..000000000
--- a/multicolor_backend_theme/static/description/img/hire-odoo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/kanban_view.png b/multicolor_backend_theme/static/description/img/kanban_view.png
deleted file mode 100644
index a2986d4d2..000000000
Binary files a/multicolor_backend_theme/static/description/img/kanban_view.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/life-ring-icon.svg b/multicolor_backend_theme/static/description/img/life-ring-icon.svg
deleted file mode 100644
index b6c797ba1..000000000
--- a/multicolor_backend_theme/static/description/img/life-ring-icon.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/login_page.png b/multicolor_backend_theme/static/description/img/login_page.png
deleted file mode 100644
index 33c7555a7..000000000
Binary files a/multicolor_backend_theme/static/description/img/login_page.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/min_sidebar_1.png b/multicolor_backend_theme/static/description/img/min_sidebar_1.png
deleted file mode 100644
index be6af8853..000000000
Binary files a/multicolor_backend_theme/static/description/img/min_sidebar_1.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/odoo-consultancy.svg b/multicolor_backend_theme/static/description/img/odoo-consultancy.svg
deleted file mode 100644
index c2c27e608..000000000
--- a/multicolor_backend_theme/static/description/img/odoo-consultancy.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/odoo-licencing.svg b/multicolor_backend_theme/static/description/img/odoo-licencing.svg
deleted file mode 100644
index 8a520b40f..000000000
--- a/multicolor_backend_theme/static/description/img/odoo-licencing.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/patter.svg b/multicolor_backend_theme/static/description/img/patter.svg
deleted file mode 100644
index 9b7b0d7cd..000000000
--- a/multicolor_backend_theme/static/description/img/patter.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/puzzle-piece-icon.svg b/multicolor_backend_theme/static/description/img/puzzle-piece-icon.svg
deleted file mode 100644
index ab5e56fa7..000000000
--- a/multicolor_backend_theme/static/description/img/puzzle-piece-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/responsive_screenshot.png b/multicolor_backend_theme/static/description/img/responsive_screenshot.png
deleted file mode 100644
index 4ed18d7aa..000000000
Binary files a/multicolor_backend_theme/static/description/img/responsive_screenshot.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/translate.svg b/multicolor_backend_theme/static/description/img/translate.svg
deleted file mode 100644
index eea729542..000000000
--- a/multicolor_backend_theme/static/description/img/translate.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/img/tree_view_1.png b/multicolor_backend_theme/static/description/img/tree_view_1.png
deleted file mode 100644
index 7ac0f3f8f..000000000
Binary files a/multicolor_backend_theme/static/description/img/tree_view_1.png and /dev/null differ
diff --git a/multicolor_backend_theme/static/description/img/wrench-icon.svg b/multicolor_backend_theme/static/description/img/wrench-icon.svg
deleted file mode 100644
index 4e0ce1d01..000000000
--- a/multicolor_backend_theme/static/description/img/wrench-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/multicolor_backend_theme/static/description/index.html b/multicolor_backend_theme/static/description/index.html
deleted file mode 100644
index 60917724f..000000000
--- a/multicolor_backend_theme/static/description/index.html
+++ /dev/null
@@ -1,781 +0,0 @@
-
-
-
-
-
-
- app index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Supports:
-
- Community
-
-
-
-
-
-
- Availability:
-
- Odoo Online
-
-
- Odoo.sh
-
-
- On Premise
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Our Features
-
-
info includes 300+ elements that you may need to create website without
- external plugins.
You can expand your sidebar to view apps with their names.
-
-
-
-
-
- Form view
-
-
Customised form view.
-
-
-
-
-
- Kanban view
-
-
Cusomised kanban view.
-
-
-
-
-
- Collapsed sidebar
-
-
Collapsed sidebar can be seen here.
-
-
-
-
-
- Tree view
-
-
Customised tree view can be seen from here.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Quick Customization at Your Fingertips!
-
Instantly chose colors for the view in a single click from the navbar.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Navigate with Ease
-
A Sidebar Tailored to Boost Productivity and Style.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Empower Your Workspace
- with Colors that Inspire
-
-
-
-
This feature set highlights ease of access, real-time feedback, and accessibility,
- making it highly convenient for users who prefer a straightforward and visually
- pleasing way to customize their workspace.
-
-
Navbar Color Picker
-
Quick activate Button
-
Customizable Color Palettes
-
Consistent Design Across Modules
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fully Responsive
- Layout
-
-
-
-
Now take advantage of everything your dashboard has to offer even on the go. Our
- design are now fully responsive, enabling you to view and manage everything from the comfort of your
- mobile device.
-
-
-
\ No newline at end of file
diff --git a/multicolor_backend_theme/static/src/xml/systray_ext.xml b/multicolor_backend_theme/static/src/xml/systray_ext.xml
deleted file mode 100644
index 22a22cc01..000000000
--- a/multicolor_backend_theme/static/src/xml/systray_ext.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Name
-
-
-
-
-
-
-
-
-
Active
-
-
-
-
-
-
-
Base Color
-
-
-
-
-
-
-
-
-
-
Font Color
-
-
-
-
-
-
-
-
View Font Color
-
-
-
-
-
-
-
-
-
-
-
-
Create
-
-
-
Remove
-
-
-
Apply
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/multicolor_backend_theme/views/login_templates.xml b/multicolor_backend_theme/views/login_templates.xml
deleted file mode 100644
index bfad0d3f2..000000000
--- a/multicolor_backend_theme/views/login_templates.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/theme_blast/README.rst b/theme_blast/README.rst
deleted file mode 100755
index 1af165219..000000000
--- a/theme_blast/README.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-.. 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
-
-Theme Blast
-===========
-* Theme Blast module provide attractive and unique front end theme mainly
-suitable for eCommerce website
-
-License
--------
-General Public License, Version 3 (AGPL v3).
-(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
-
-Company
--------
-* `Cybrosys Techno Solutions `__
-
-Credits
--------
-Developers: (V17) Jumana Haseen,
- (V18) Athira K
-
-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: ``__
diff --git a/theme_blast/__init__.py b/theme_blast/__init__.py
deleted file mode 100644
index dfc965963..000000000
--- a/theme_blast/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import controllers
-from . import models
diff --git a/theme_blast/__manifest__.py b/theme_blast/__manifest__.py
deleted file mode 100644
index c3f0fe361..000000000
--- a/theme_blast/__manifest__.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-{
- 'name': 'Theme Blast',
- 'version': '18.0.1.0.0',
- 'category': 'Theme/Corporate',
- 'summary': 'Theme Blast makes the website more unique and attractive'
- ' through its style and custom-designed snippet',
- 'description': 'Theme Blast Front-end theme provides Structural snippets'
- ' like Features, Subscribe, Choose , Cards, Banner and'
- ' Dynamic content snippets ',
- 'author': 'Cybrosys Techno Solutions',
- 'company': 'Cybrosys Techno Solutions',
- 'maintainer': 'Cybrosys Techno Solutions',
- 'website': 'https://www.cybrosys.com',
- 'depends': ['web', 'website_sale', 'website_mass_mailing'],
- 'data': [
- 'data/blast_configuration_data.xml',
- 'security/ir.model.access.csv',
- 'views/blast_configuration_views.xml',
- 'views/asked_questions_views.xml',
- 'views/res_partner_views.xml',
- 'views/snippets/snippets_templates.xml',
- 'views/snippets/asked_questions_templates.xml',
- 'views/snippets/banner_templates.xml',
- 'views/snippets/testimonial_templates.xml',
- 'views/snippets/choose_templates.xml',
- 'views/snippets/best_deal_templates.xml',
- 'views/snippets/best_products_carousal_templates.xml',
- 'views/snippets/cards_templates.xml',
- 'views/snippets/features_templates.xml',
- 'views/snippets/subscribe_templates.xml',
- 'views/theme_blast_templates.xml'
- ],
- 'assets': {
- 'web.assets_frontend': [
- 'https://code.jquery.com/jquery-3.1.0.js',
- 'theme_blast/static/src/css/owl.carousel.min.css',
- 'theme_blast/static/src/css/style.css',
- 'theme_blast/static/src/css/owl.theme.default.min.css',
- 'theme_blast/static/src/scss/_variables.scss',
- 'theme_blast/static/src/scss/_normalize.scss',
- 'theme_blast/static/src/css/owl.carousel.min.css',
- 'theme_blast/static/src/scss/components/_buttons.scss',
- 'theme_blast/static/src/scss/layout/_navigation.scss',
- 'theme_blast/static/src/scss/layout/_banner.scss',
- 'theme_blast/static/src/scss/layout/_product.scss',
- 'theme_blast/static/src/scss/layout/_footer.scss',
- 'theme_blast/static/src/scss/pages/home/_about.scss',
- 'theme_blast/static/src/scss/pages/home/_feature.scss',
- 'theme_blast/static/src/scss/pages/home/_deal.scss',
- 'theme_blast/static/src/scss/pages/home/_choose.scss',
- 'theme_blast/static/src/scss/pages/home/_testimonial.scss',
- 'theme_blast/static/src/scss/pages/home/_subscribe.scss',
- 'theme_blast/static/src/scss/pages/home/_faq.scss',
- 'theme_blast/static/src/js/snippets/best_deal/best_deal.js',
- 'theme_blast/static/src/js/snippets/best_products_carousel/best_products_carousal.js',
- 'theme_blast/static/src/js/snippets/testimonial/testimonial.js',
- 'theme_blast/static/src/js/owl.carousel.min.js',
- 'theme_blast/static/src/js/scroll.js',
- 'theme_blast/static/src/js/snippets/subscribe/subscribe.js',
- 'theme_blast/static/src/js/snippets/asked_questions/asked_questions.js',
- ]
- },
- 'images': [
- "static/description/banner.jpg",
- "static/description/theme_screenshot.jpg",
- ],
- 'license': 'AGPL-3',
- 'installable': True,
- 'application': False,
- 'auto_install': False,
-}
diff --git a/theme_blast/controllers/__init__.py b/theme_blast/controllers/__init__.py
deleted file mode 100644
index cbd29bdf0..000000000
--- a/theme_blast/controllers/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import theme_blast
diff --git a/theme_blast/controllers/theme_blast.py b/theme_blast/controllers/theme_blast.py
deleted file mode 100644
index ad85b4e18..000000000
--- a/theme_blast/controllers/theme_blast.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import http
-from odoo.http import request
-
-
-class BestSnippet(http.Controller):
- """Class BestSnippet that inherits from http.Controller. """
-
- @http.route('/get_product', auth='public', type='json', website=True)
- def get_products(self):
- """Controller to reflect chosen product in 'Best Deal' snippet"""
- blast_configuration = request.env.ref(
- 'theme_blast.blast_configuration_data')
- response = \
- http.Response(template='theme_blast.best_deal_template',
- qcontext={
- 'product_id': blast_configuration.best_deal_id,
- })
- return response.render()
-
- @http.route('/get_product_snippet', auth='public', type='json',
- website=True)
- def get_best_products(self):
- """Controller to reflect chosen products in 'Best Products Carousel'
- snippet"""
- blast_configuration = request.env.ref(
- 'theme_blast.blast_configuration_data')
- response = http.Response(
- template='theme_blast.best_product_carousel_snippet',
- qcontext={'products': blast_configuration.best_products_ids})
- return response.render()
-
- @http.route('/get_asked_questions', auth='public', type='json',
- website=True)
- def get_asked_questions(self):
- """Controller to reflect asked questions in 'Asked questions'
- snippet"""
- blast_configuration = request.env.ref(
- 'theme_blast.blast_configuration_data')
- response = http.Response(
- template='theme_blast.asked_questions_template',
- qcontext={
- 'asked_questions': blast_configuration.asked_questions_ids})
- return response.render()
-
- @http.route('/get_testimonial', auth='public', type='json', website=True)
- def get_testimonial(self):
- """Controller to reflect partner feedback in 'Testimonial' snippet"""
- partners = request.env['res.partner'].search(
- [('is_published', '=', 'True')])
- response = http.Response(template='theme_blast.testimonials_snippet',
- qcontext={'partners': partners})
- return response.render()
-
- @http.route('/get_countdown', auth='public', type='json', website=True)
- def get_countdown(self):
- """Used to reflect sale end date in 'Best Deal' snippet"""
- blast_configuration = request.env.ref(
- 'theme_blast.blast_configuration_data')
- return blast_configuration.date_end
diff --git a/theme_blast/data/blast_configuration_data.xml b/theme_blast/data/blast_configuration_data.xml
deleted file mode 100644
index b6a8ee450..000000000
--- a/theme_blast/data/blast_configuration_data.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
- Blast Configuration
-
-
-
diff --git a/theme_blast/doc/RELEASE_NOTES.md b/theme_blast/doc/RELEASE_NOTES.md
deleted file mode 100644
index c0d6d37c9..000000000
--- a/theme_blast/doc/RELEASE_NOTES.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Module
-
-#### 18.10.2024
-#### Version 18.0.1.0.0
-##### ADD
-- Initial Commit for Theme Blast
diff --git a/theme_blast/models/__init__.py b/theme_blast/models/__init__.py
deleted file mode 100644
index de6871593..000000000
--- a/theme_blast/models/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import asked_questions
-from . import blast_configuration
-from . import ir_module_module
-from . import res_partner
-from . import theme_utils
diff --git a/theme_blast/models/asked_questions.py b/theme_blast/models/asked_questions.py
deleted file mode 100644
index 7ca3202e7..000000000
--- a/theme_blast/models/asked_questions.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import fields, models
-
-
-class AskedQuestions(models.Model):
- """Contains fields for questions&answer and co-model in
- blast_configuration"""
- _name = 'asked.questions'
- _description = 'Asked Questions'
- _rec_name = 'blast_configuration_id'
-
- question = fields.Text(help="Add questions to display")
- answer = fields.Text(help="Add answers for the questions")
- blast_configuration_id = fields.Many2one('blast.configuration',
- help="Blast Configuration")
diff --git a/theme_blast/models/blast_configuration.py b/theme_blast/models/blast_configuration.py
deleted file mode 100644
index 6e7d997e4..000000000
--- a/theme_blast/models/blast_configuration.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import fields, models
-
-
-class BlastConfiguration(models.Model):
- """Contains fields to add needed values for snippets"""
- _name = 'blast.configuration'
- _description = 'Blast Configuration'
-
- name = fields.Char(help="Name of the Configuration.")
- best_deal_id = fields.Many2one('product.product',
- string="Best deal",
- domain="[('sale_ok', '=', True)]",
- help="Choose products to display as "
- "Best Deal product")
- date_start = fields.Datetime(string='Start Date',
- default=fields.Datetime.now(),
- help="Choose date to start the Deal")
- date_end = fields.Datetime(string='End Date',
- help="Choose date to end the Deal")
- best_products_ids = fields.Many2many('product.product',
- string="Best Products",
- help="Choose multiple products "
- "to display as Best Products",
- domain="[('sale_ok', '=', True)]")
- asked_questions_ids = fields.One2many('asked.questions',
- 'blast_configuration_id',
- string="Questions And Answers",
- help="Questions and corresponding "
- "answers.")
diff --git a/theme_blast/models/ir_module_module.py b/theme_blast/models/ir_module_module.py
deleted file mode 100644
index 9f1cec772..000000000
--- a/theme_blast/models/ir_module_module.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import models
-
-
-class IrModuleModule(models.Model):
- """Inherits model 'ir.module.module'"""
- _inherit = 'ir.module.module'
-
- def _theme_load(self, website):
- """Load snippets"""
- res = super()._theme_load(website)
- homepage = website.homepage_url
- if homepage:
- homepage.header_overlay = True
- return res
diff --git a/theme_blast/models/res_partner.py b/theme_blast/models/res_partner.py
deleted file mode 100644
index e7169db6b..000000000
--- a/theme_blast/models/res_partner.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import fields, models
-
-
-class ResPartner(models.Model):
- """Contain field to add customer feedback for Testimonial Snippet"""
- _inherit = 'res.partner'
-
- is_published = fields.Boolean(string='To Publish',
- help="Enable to publish partner message")
- message = fields.Text(help="Partner message")
diff --git a/theme_blast/models/theme_utils.py b/theme_blast/models/theme_utils.py
deleted file mode 100644
index d25641b11..000000000
--- a/theme_blast/models/theme_utils.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright(C) 2024-TODAY Cybrosys Techno Solutions
-# ()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU AFFERO
-# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details
-#
-# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-# (AGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import models
-
-
-class ThemeUtils(models.AbstractModel):
- """Inherits model 'theme.utils'"""
- _inherit = 'theme.utils'
-
- def _theme_blast_post_copy(self, mod):
- """Reinitialize templates"""
- self.disable_view('website.placeholder_header_call_to_action')
- self.enable_view('website.template_header_default_align_right')
diff --git a/theme_blast/security/ir.model.access.csv b/theme_blast/security/ir.model.access.csv
deleted file mode 100644
index c783119c4..000000000
--- a/theme_blast/security/ir.model.access.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_blast_configuration_user,access_blast_configuration,model_blast_configuration,base.group_user,1,1,1,1
-access_asked_questions_user,access_asked_questions,model_asked_questions,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/theme_blast/static/description/banner.jpg b/theme_blast/static/description/banner.jpg
deleted file mode 100644
index b604e27f1..000000000
Binary files a/theme_blast/static/description/banner.jpg and /dev/null differ
diff --git a/theme_blast/static/description/img/arrows-repeat.svg b/theme_blast/static/description/img/arrows-repeat.svg
deleted file mode 100644
index 94fb8f7f9..000000000
--- a/theme_blast/static/description/img/arrows-repeat.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_blast/static/description/img/banner-bg-1.svg b/theme_blast/static/description/img/banner-bg-1.svg
deleted file mode 100644
index 7af9bab87..000000000
--- a/theme_blast/static/description/img/banner-bg-1.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
diff --git a/theme_blast/static/description/img/banner1.png b/theme_blast/static/description/img/banner1.png
deleted file mode 100644
index efc82a8ea..000000000
Binary files a/theme_blast/static/description/img/banner1.png and /dev/null differ
diff --git a/theme_blast/static/description/img/best_deals.png b/theme_blast/static/description/img/best_deals.png
deleted file mode 100644
index 23b9980a3..000000000
Binary files a/theme_blast/static/description/img/best_deals.png and /dev/null differ
diff --git a/theme_blast/static/description/img/best_products.png b/theme_blast/static/description/img/best_products.png
deleted file mode 100644
index e30407fdc..000000000
Binary files a/theme_blast/static/description/img/best_products.png and /dev/null differ
diff --git a/theme_blast/static/description/img/cards1.png b/theme_blast/static/description/img/cards1.png
deleted file mode 100644
index 180d8a440..000000000
Binary files a/theme_blast/static/description/img/cards1.png and /dev/null differ
diff --git a/theme_blast/static/description/img/cards2.png b/theme_blast/static/description/img/cards2.png
deleted file mode 100644
index 8d3f98314..000000000
Binary files a/theme_blast/static/description/img/cards2.png and /dev/null differ
diff --git a/theme_blast/static/description/img/check.svg b/theme_blast/static/description/img/check.svg
deleted file mode 100644
index 8bc79333d..000000000
--- a/theme_blast/static/description/img/check.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_blast/static/description/img/choose.png b/theme_blast/static/description/img/choose.png
deleted file mode 100644
index fdbf30741..000000000
Binary files a/theme_blast/static/description/img/choose.png and /dev/null differ
diff --git a/theme_blast/static/description/img/choose_snippet.png b/theme_blast/static/description/img/choose_snippet.png
deleted file mode 100644
index ec272d22c..000000000
Binary files a/theme_blast/static/description/img/choose_snippet.png and /dev/null differ
diff --git a/theme_blast/static/description/img/feature-star.svg b/theme_blast/static/description/img/feature-star.svg
deleted file mode 100644
index a913270e8..000000000
--- a/theme_blast/static/description/img/feature-star.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/theme_blast/static/description/img/gear.svg b/theme_blast/static/description/img/gear.svg
deleted file mode 100644
index ce383059d..000000000
--- a/theme_blast/static/description/img/gear.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_blast/static/description/img/gif.gif b/theme_blast/static/description/img/gif.gif
deleted file mode 100644
index b7f7b4bb5..000000000
Binary files a/theme_blast/static/description/img/gif.gif and /dev/null differ
diff --git a/theme_blast/static/description/img/hire-odoo.svg b/theme_blast/static/description/img/hire-odoo.svg
deleted file mode 100644
index 9cfec4e44..000000000
--- a/theme_blast/static/description/img/hire-odoo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/theme_blast/static/description/img/life-ring-icon.svg b/theme_blast/static/description/img/life-ring-icon.svg
deleted file mode 100644
index b6c797ba1..000000000
--- a/theme_blast/static/description/img/life-ring-icon.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/theme_blast/static/description/img/odoo-consultancy.svg b/theme_blast/static/description/img/odoo-consultancy.svg
deleted file mode 100644
index c2c27e608..000000000
--- a/theme_blast/static/description/img/odoo-consultancy.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/theme_blast/static/description/img/odoo-licencing.svg b/theme_blast/static/description/img/odoo-licencing.svg
deleted file mode 100644
index 8a520b40f..000000000
--- a/theme_blast/static/description/img/odoo-licencing.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/theme_blast/static/description/img/patter.svg b/theme_blast/static/description/img/patter.svg
deleted file mode 100644
index 9b7b0d7cd..000000000
--- a/theme_blast/static/description/img/patter.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/theme_blast/static/description/img/phone-screenshots.jpg b/theme_blast/static/description/img/phone-screenshots.jpg
deleted file mode 100644
index 853d7cc1c..000000000
Binary files a/theme_blast/static/description/img/phone-screenshots.jpg and /dev/null differ
diff --git a/theme_blast/static/description/img/puzzle-piece-icon.svg b/theme_blast/static/description/img/puzzle-piece-icon.svg
deleted file mode 100644
index ab5e56fa7..000000000
--- a/theme_blast/static/description/img/puzzle-piece-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_blast/static/description/img/screenshot-1.svg b/theme_blast/static/description/img/screenshot-1.svg
deleted file mode 100644
index 72eeb921b..000000000
--- a/theme_blast/static/description/img/screenshot-1.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
diff --git a/theme_blast/static/description/img/screenshot-2.png b/theme_blast/static/description/img/screenshot-2.png
deleted file mode 100644
index e13b876da..000000000
Binary files a/theme_blast/static/description/img/screenshot-2.png and /dev/null differ
diff --git a/theme_blast/static/description/img/screenshot-3.png b/theme_blast/static/description/img/screenshot-3.png
deleted file mode 100644
index be1acdfd5..000000000
Binary files a/theme_blast/static/description/img/screenshot-3.png and /dev/null differ
diff --git a/theme_blast/static/description/img/screenshot-4.png b/theme_blast/static/description/img/screenshot-4.png
deleted file mode 100644
index 1d01e11fc..000000000
Binary files a/theme_blast/static/description/img/screenshot-4.png and /dev/null differ
diff --git a/theme_blast/static/description/img/screenshot-5.svg b/theme_blast/static/description/img/screenshot-5.svg
deleted file mode 100644
index 923e355bf..000000000
--- a/theme_blast/static/description/img/screenshot-5.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/theme_blast/static/description/img/screenshot-img.png b/theme_blast/static/description/img/screenshot-img.png
deleted file mode 100644
index a425d9ede..000000000
Binary files a/theme_blast/static/description/img/screenshot-img.png and /dev/null differ
diff --git a/theme_blast/static/description/img/screenshot-main.png b/theme_blast/static/description/img/screenshot-main.png
deleted file mode 100644
index 575f8e676..000000000
Binary files a/theme_blast/static/description/img/screenshot-main.png and /dev/null differ
diff --git a/theme_blast/static/description/img/translate.svg b/theme_blast/static/description/img/translate.svg
deleted file mode 100644
index eea729542..000000000
--- a/theme_blast/static/description/img/translate.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_blast/static/description/img/v17-icon.png b/theme_blast/static/description/img/v17-icon.png
deleted file mode 100644
index 9132f6208..000000000
Binary files a/theme_blast/static/description/img/v17-icon.png and /dev/null differ
diff --git a/theme_blast/static/description/img/wrench-icon.svg b/theme_blast/static/description/img/wrench-icon.svg
deleted file mode 100644
index 4e0ce1d01..000000000
--- a/theme_blast/static/description/img/wrench-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_blast/static/description/index.html b/theme_blast/static/description/index.html
deleted file mode 100644
index 634295f6d..000000000
--- a/theme_blast/static/description/index.html
+++ /dev/null
@@ -1,663 +0,0 @@
-
-
-
-
-
-
- app index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Supports:
-
- Enterprise
-
-
-
-
-
- Availability:
-
- Odoo Online
-
-
- Odoo.sh
-
-
- On Premise
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Our Features
-
-
info includes 300+ elements that you may need to create website without
- external plugins.
This mode is significantly easier than
- others because Odoo makes One Click Installation feasible.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Theme Features
-
-
-
-
- HIGHLIGHT
-
Showcase Your Products in Style
-
Present your products beautifully
- with Odoo’s sleek product views.
- Utilize detailed image galleries and clean layouts to
- captivate customers and enhance their shopping experience,
- driving sales effortlessly.
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Shop Smart
-
Browse through our stunning product displays and enjoy a smooth,
- intuitive shopping experience.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Explore Our Collection
-
Discover your next favorite product
- with beautifully designed product cards.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Unbeatable Deals
-
Elevate your brand with a beautifully crafted theme that adapts perfectly to any device.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Stunning Pages,
- Seamless Experience
-
-
-
-
Design beautiful, responsive pages that captivate
- visitors and enhance their shopping experience.
- With easy customization and smooth navigation,
- your store will shine on every device.
-
-
Fully Customizable Layouts
-
Mobile-Optimized Design
-
High-Quality Image Integration
-
Fast, Smooth Navigation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fully Responsive
- Layout
-
-
-
-
Now take advantage of everything your dashboard has to offer even on the go. Our
- design are now fully responsive, enabling you to view and manage everything from the comfort of your
- mobile device.
'],
- animateOut: 'fadeOut'
- });
-
- function counter() {
- var buttons = $('.owl-dots button');
- buttons.each(function(index, item) {
- $(item).find('span').text(index + 1);
- });
- }
- //add another class for banner_added
- var banner = $(".banner_added");
- var banner_id = banner.data("id");
- $("div").addClass(banner_id);
- banner.addClass("banner_hide");
-
- var url = window.location;
- // Will only work if string in href matches with location
- $('ul.navbar-nav a[href="' + url + '"]').parent().addClass('active');
- // Will also work for relative and absolute hrefs
- $('ul.navbar-nav a').filter(function() {
- return this.href == url;
- }).parent().addClass('active');
-
- // // Add active class to the current button in Navbar (highlight it)
- var header = document.getElementById("myDIV");
- var btns = header.getElementsByClassName("nav-link");
- for (var i = 0; i < btns.length; i++) {
- btns[i].addEventListener("click", function() {
- var current = document.getElementsByClassName("active");
- current[0].className = current[0].className.replace(" active", "");
- this.className += " active";
- });
- }
- //Add active class to the current button (highlight it)
- var header = document.getElementById("myDIV");
- var btns = header.getElementsByClassName("btn");
- for (var i = 0; i < btns.length; i++) {
- btns[i].addEventListener("click", function() {
- var current = document.getElementsByClassName("active");
- if (current.length > 0) {
- current[0].className = current[0].className.replace(" active", "");
- }
- this.className += " active";
- });
- }
- //spinner jquery--quantity
- jQuery('
+
-
').insertAfter('.quantity input');
- jQuery('.quantity').each(function() {
- var spinner = jQuery(this),
- input = spinner.find('input[type="number"]'),
- btnUp = spinner.find('.quantity-up'),
- btnDown = spinner.find('.quantity-down'),
- min = input.attr('min'),
- max = input.attr('max');
- btnUp.click(function() {
- var oldValue = parseFloat(input.val());
- if (oldValue >= max) {
- var newVal = oldValue;
- } else {
- var newVal = oldValue + 1;
- }
- spinner.find("input").val(newVal);
- spinner.find("input").trigger("change");
- });
- btnDown.click(function() {
- var oldValue = parseFloat(input.val());
- if (oldValue <= min) {
- var newVal = oldValue;
- } else {
- var newVal = oldValue - 1;
- }
- spinner.find("input").val(newVal);
- spinner.find("input").trigger("change");
- });
- });
- //shop jquery--card head
- $('.card-header').click(function() {
- $(this).find('i').toggleClass('fas fa-angle-down fas fa-angle-up');
- });
- //Tab
- $("#tile-1 .nav-tabs a").click(function() {
- var position = $(this).parent().position();
- var width = $(this).parent().width();
- });
- var actWidth = $("#tile-1 .nav-tabs").find(".active").parent("li").width();
- var actPosition = $("#tile-1 .nav-tabs .active").position();
- });
diff --git a/theme_boec/static/src/js/deal_week.js b/theme_boec/static/src/js/deal_week.js
deleted file mode 100644
index b6add37b0..000000000
--- a/theme_boec/static/src/js/deal_week.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/** @odoo-module **/
-
-import { renderToElement } from "@web/core/utils/render";
-import publicWidget from "@web/legacy/js/public/public_widget";
-import { rpc } from "@web/core/network/rpc";
-
-//created a public widget class for deal week snippet
-publicWidget.registry.DealWeek = publicWidget.Widget.extend({
- selector: '.deal_week_snippet_class',
- async start() {
- await this._super(...arguments);
- const result = await rpc("/get_products", {});
- if (result){
- this.$target.empty().html(renderToElement('theme_boec.deal_week', {product_id: result}))
- const time = await rpc("/get_countdown", {});
- if (time){
- let end_date = new Date(time).getTime();
- let days, hours, minutes, seconds;
- let countdown_div = this.$el.find('#countdown')[0];
- setInterval(function() {
- const current_date = new Date().getTime();
- let seconds_left = (end_date - current_date) / 1000;
- days = parseInt(seconds_left / 86400);
- seconds_left = seconds_left % 86400;
- hours = parseInt(seconds_left / 3600);
- seconds_left = seconds_left % 3600;
- minutes = parseInt(seconds_left / 60);
- seconds = parseInt(seconds_left % 60);
- if (countdown_div) {
- countdown_div.innerHTML = '' + days + ' ' + hours + ' ' +
- minutes + ' ' + seconds + ' ';
- }
- }, 1000);
- }
- }
-
- },
-});
-
-//export default publicWidget.registry.DealWeek;
\ No newline at end of file
diff --git a/theme_boec/static/src/js/jquery.countdown.min.js b/theme_boec/static/src/js/jquery.countdown.min.js
deleted file mode 100644
index 99b363168..000000000
--- a/theme_boec/static/src/js/jquery.countdown.min.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*!
- * The Final Countdown for jQuery v2.2.0 (http://hilios.github.io/jQuery.countdown/)
- * Copyright (c) 2016 Edson Hilios
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";function b(a){if(a instanceof Date)return a;if(String(a).match(g))return String(a).match(/^[0-9]*$/)&&(a=Number(a)),String(a).match(/\-/)&&(a=String(a).replace(/\-/g,"/")),new Date(a);throw new Error("Couldn't cast `"+a+"` to a date object.")}function c(a){var b=a.toString().replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");return new RegExp(b)}function d(a){return function(b){var d=b.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);if(d)for(var f=0,g=d.length;f1?c:d}var f=[],g=[],h={precision:100,elapse:!1,defer:!1};g.push(/^[0-9]*$/.source),g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g=new RegExp(g.join("|"));var i={Y:"years",m:"months",n:"daysToMonth",d:"daysToWeek",w:"weeks",W:"weeksToMonth",H:"hours",M:"minutes",S:"seconds",D:"totalDays",I:"totalHours",N:"totalMinutes",T:"totalSeconds"},j=function(b,c,d){this.el=b,this.$el=a(b),this.interval=null,this.offset={},this.options=a.extend({},h),this.firstTick=!0,this.instanceNumber=f.length,f.push(this),this.$el.data("countdown-instance",this.instanceNumber),d&&("function"==typeof d?(this.$el.on("update.countdown",d),this.$el.on("stoped.countdown",d),this.$el.on("finish.countdown",d)):this.options=a.extend({},h,d)),this.setFinalDate(c),this.options.defer===!1&&this.start()};a.extend(j.prototype,{start:function(){null!==this.interval&&clearInterval(this.interval);var a=this;this.update(),this.interval=setInterval(function(){a.update.call(a)},this.options.precision)},stop:function(){clearInterval(this.interval),this.interval=null,this.dispatchEvent("stoped")},toggle:function(){this.interval?this.stop():this.start()},pause:function(){this.stop()},resume:function(){this.start()},remove:function(){this.stop.call(this),f[this.instanceNumber]=null,delete this.$el.data().countdownInstance},setFinalDate:function(a){this.finalDate=b(a)},update:function(){if(0===this.$el.closest("html").length)return void this.remove();var a,b=new Date;return a=this.finalDate.getTime()-b.getTime(),a=Math.ceil(a/1e3),a=!this.options.elapse&&a<0?0:Math.abs(a),this.totalSecsLeft===a||this.firstTick?void(this.firstTick=!1):(this.totalSecsLeft=a,this.elapsed=b>=this.finalDate,this.offset={seconds:this.totalSecsLeft%60,minutes:Math.floor(this.totalSecsLeft/60)%60,hours:Math.floor(this.totalSecsLeft/60/60)%24,days:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToWeek:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToMonth:Math.floor(this.totalSecsLeft/60/60/24%30.4368),weeks:Math.floor(this.totalSecsLeft/60/60/24/7),weeksToMonth:Math.floor(this.totalSecsLeft/60/60/24/7)%4,months:Math.floor(this.totalSecsLeft/60/60/24/30.4368),years:Math.abs(this.finalDate.getFullYear()-b.getFullYear()),totalDays:Math.floor(this.totalSecsLeft/60/60/24),totalHours:Math.floor(this.totalSecsLeft/60/60),totalMinutes:Math.floor(this.totalSecsLeft/60),totalSeconds:this.totalSecsLeft},void(this.options.elapse||0!==this.totalSecsLeft?this.dispatchEvent("update"):(this.stop(),this.dispatchEvent("finish"))))},dispatchEvent:function(b){var c=a.Event(b+".countdown");c.finalDate=this.finalDate,c.elapsed=this.elapsed,c.offset=a.extend({},this.offset),c.strftime=d(this.offset),this.$el.trigger(c)}}),a.fn.countdown=function(){var b=Array.prototype.slice.call(arguments,0);return this.each(function(){var c=a(this).data("countdown-instance");if(void 0!==c){var d=f[c],e=b[0];j.prototype.hasOwnProperty(e)?d[e].apply(d,b.slice(1)):null===String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)?(d.setFinalDate.call(d,e),d.start()):a.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi,e))}else new j(this,b[0],b[1])})}});
\ No newline at end of file
diff --git a/theme_boec/static/src/js/owl.carousel.js b/theme_boec/static/src/js/owl.carousel.js
deleted file mode 100644
index e2086aff2..000000000
--- a/theme_boec/static/src/js/owl.carousel.js
+++ /dev/null
@@ -1,3438 +0,0 @@
-/**
- * Owl Carousel v2.3.4
- * Copyright 2013-2018 David Deutsch
- * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
- */
-/**
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates a carousel.
- * @class The Owl Carousel.
- * @public
- * @param {HTMLElement|jQuery} element - The element to create the carousel for.
- * @param {Object} [options] - The options
- */
- function Owl(element, options) {
-
- /**
- * Current settings for the carousel.
- * @public
- */
- this.settings = null;
-
- /**
- * Current options set by the caller including defaults.
- * @public
- */
- this.options = $.extend({}, Owl.Defaults, options);
-
- /**
- * Plugin element.
- * @public
- */
- this.$element = $(element);
-
- /**
- * Proxied event handlers.
- * @protected
- */
- this._handlers = {};
-
- /**
- * References to the running plugins of this carousel.
- * @protected
- */
- this._plugins = {};
-
- /**
- * Currently suppressed events to prevent them from being retriggered.
- * @protected
- */
- this._supress = {};
-
- /**
- * Absolute current position.
- * @protected
- */
- this._current = null;
-
- /**
- * Animation speed in milliseconds.
- * @protected
- */
- this._speed = null;
-
- /**
- * Coordinates of all items in pixel.
- * @todo The name of this member is missleading.
- * @protected
- */
- this._coordinates = [];
-
- /**
- * Current breakpoint.
- * @todo Real media queries would be nice.
- * @protected
- */
- this._breakpoint = null;
-
- /**
- * Current width of the plugin element.
- */
- this._width = null;
-
- /**
- * All real items.
- * @protected
- */
- this._items = [];
-
- /**
- * All cloned items.
- * @protected
- */
- this._clones = [];
-
- /**
- * Merge values of all items.
- * @todo Maybe this could be part of a plugin.
- * @protected
- */
- this._mergers = [];
-
- /**
- * Widths of all items.
- */
- this._widths = [];
-
- /**
- * Invalidated parts within the update process.
- * @protected
- */
- this._invalidated = {};
-
- /**
- * Ordered list of workers for the update process.
- * @protected
- */
- this._pipe = [];
-
- /**
- * Current state information for the drag operation.
- * @todo #261
- * @protected
- */
- this._drag = {
- time: null,
- target: null,
- pointer: null,
- stage: {
- start: null,
- current: null
- },
- direction: null
- };
-
- /**
- * Current state information and their tags.
- * @type {Object}
- * @protected
- */
- this._states = {
- current: {},
- tags: {
- 'initializing': [ 'busy' ],
- 'animating': [ 'busy' ],
- 'dragging': [ 'interacting' ]
- }
- };
-
- $.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {
- this._handlers[handler] = $.proxy(this[handler], this);
- }, this));
-
- $.each(Owl.Plugins, $.proxy(function(key, plugin) {
- this._plugins[key.charAt(0).toLowerCase() + key.slice(1)]
- = new plugin(this);
- }, this));
-
- $.each(Owl.Workers, $.proxy(function(priority, worker) {
- this._pipe.push({
- 'filter': worker.filter,
- 'run': $.proxy(worker.run, this)
- });
- }, this));
-
- this.setup();
- this.initialize();
- }
-
- /**
- * Default options for the carousel.
- * @public
- */
- Owl.Defaults = {
- items: 3,
- loop: false,
- center: false,
- rewind: false,
- checkVisibility: true,
-
- mouseDrag: true,
- touchDrag: true,
- pullDrag: true,
- freeDrag: false,
-
- margin: 0,
- stagePadding: 0,
-
- merge: false,
- mergeFit: true,
- autoWidth: false,
-
- startPosition: 0,
- rtl: false,
-
- smartSpeed: 250,
- fluidSpeed: false,
- dragEndSpeed: false,
-
- responsive: {},
- responsiveRefreshRate: 200,
- responsiveBaseElement: window,
-
- fallbackEasing: 'swing',
- slideTransition: '',
-
- info: false,
-
- nestedItemSelector: false,
- itemElement: 'div',
- stageElement: 'div',
-
- refreshClass: 'owl-refresh',
- loadedClass: 'owl-loaded',
- loadingClass: 'owl-loading',
- rtlClass: 'owl-rtl',
- responsiveClass: 'owl-responsive',
- dragClass: 'owl-drag',
- itemClass: 'owl-item',
- stageClass: 'owl-stage',
- stageOuterClass: 'owl-stage-outer',
- grabClass: 'owl-grab'
- };
-
- /**
- * Enumeration for width.
- * @public
- * @readonly
- * @enum {String}
- */
- Owl.Width = {
- Default: 'default',
- Inner: 'inner',
- Outer: 'outer'
- };
-
- /**
- * Enumeration for types.
- * @public
- * @readonly
- * @enum {String}
- */
- Owl.Type = {
- Event: 'event',
- State: 'state'
- };
-
- /**
- * Contains all registered plugins.
- * @public
- */
- Owl.Plugins = {};
-
- /**
- * List of workers involved in the update process.
- */
- Owl.Workers = [ {
- filter: [ 'width', 'settings' ],
- run: function() {
- this._width = this.$element.width();
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function(cache) {
- cache.current = this._items && this._items[this.relative(this._current)];
- }
- }, {
- filter: [ 'items', 'settings' ],
- run: function() {
- this.$stage.children('.cloned').remove();
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function(cache) {
- var margin = this.settings.margin || '',
- grid = !this.settings.autoWidth,
- rtl = this.settings.rtl,
- css = {
- 'width': 'auto',
- 'margin-left': rtl ? margin : '',
- 'margin-right': rtl ? '' : margin
- };
-
- !grid && this.$stage.children().css(css);
-
- cache.css = css;
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function(cache) {
- var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
- merge = null,
- iterator = this._items.length,
- grid = !this.settings.autoWidth,
- widths = [];
-
- cache.items = {
- merge: false,
- width: width
- };
-
- while (iterator--) {
- merge = this._mergers[iterator];
- merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;
-
- cache.items.merge = merge > 1 || cache.items.merge;
-
- widths[iterator] = !grid ? this._items[iterator].width() : width * merge;
- }
-
- this._widths = widths;
- }
- }, {
- filter: [ 'items', 'settings' ],
- run: function() {
- var clones = [],
- items = this._items,
- settings = this.settings,
- // TODO: Should be computed from number of min width items in stage
- view = Math.max(settings.items * 2, 4),
- size = Math.ceil(items.length / 2) * 2,
- repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,
- append = '',
- prepend = '';
-
- repeat /= 2;
-
- while (repeat > 0) {
- // Switch to only using appended clones
- clones.push(this.normalize(clones.length / 2, true));
- append = append + items[clones[clones.length - 1]][0].outerHTML;
- clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));
- prepend = items[clones[clones.length - 1]][0].outerHTML + prepend;
- repeat -= 1;
- }
-
- this._clones = clones;
-
- $(append).addClass('cloned').appendTo(this.$stage);
- $(prepend).addClass('cloned').prependTo(this.$stage);
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function() {
- var rtl = this.settings.rtl ? 1 : -1,
- size = this._clones.length + this._items.length,
- iterator = -1,
- previous = 0,
- current = 0,
- coordinates = [];
-
- while (++iterator < size) {
- previous = coordinates[iterator - 1] || 0;
- current = this._widths[this.relative(iterator)] + this.settings.margin;
- coordinates.push(previous + current * rtl);
- }
-
- this._coordinates = coordinates;
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function() {
- var padding = this.settings.stagePadding,
- coordinates = this._coordinates,
- css = {
- 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,
- 'padding-left': padding || '',
- 'padding-right': padding || ''
- };
-
- this.$stage.css(css);
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function(cache) {
- var iterator = this._coordinates.length,
- grid = !this.settings.autoWidth,
- items = this.$stage.children();
-
- if (grid && cache.items.merge) {
- while (iterator--) {
- cache.css.width = this._widths[this.relative(iterator)];
- items.eq(iterator).css(cache.css);
- }
- } else if (grid) {
- cache.css.width = cache.items.width;
- items.css(cache.css);
- }
- }
- }, {
- filter: [ 'items' ],
- run: function() {
- this._coordinates.length < 1 && this.$stage.removeAttr('style');
- }
- }, {
- filter: [ 'width', 'items', 'settings' ],
- run: function(cache) {
- cache.current = cache.current ? this.$stage.children().index(cache.current) : 0;
- cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));
- this.reset(cache.current);
- }
- }, {
- filter: [ 'position' ],
- run: function() {
- this.animate(this.coordinates(this._current));
- }
- }, {
- filter: [ 'width', 'position', 'items', 'settings' ],
- run: function() {
- var rtl = this.settings.rtl ? 1 : -1,
- padding = this.settings.stagePadding * 2,
- begin = this.coordinates(this.current()) + padding,
- end = begin + this.width() * rtl,
- inner, outer, matches = [], i, n;
-
- for (i = 0, n = this._coordinates.length; i < n; i++) {
- inner = this._coordinates[i - 1] || 0;
- outer = Math.abs(this._coordinates[i]) + padding * rtl;
-
- if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
- || (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
- matches.push(i);
- }
- }
-
- this.$stage.children('.active').removeClass('active');
- this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');
-
- this.$stage.children('.center').removeClass('center');
- if (this.settings.center) {
- this.$stage.children().eq(this.current()).addClass('center');
- }
- }
- } ];
-
- /**
- * Create the stage DOM element
- */
- Owl.prototype.initializeStage = function() {
- this.$stage = this.$element.find('.' + this.settings.stageClass);
-
- // if the stage is already in the DOM, grab it and skip stage initialization
- if (this.$stage.length) {
- return;
- }
-
- this.$element.addClass(this.options.loadingClass);
-
- // create stage
- this.$stage = $('<' + this.settings.stageElement + '>', {
- "class": this.settings.stageClass
- }).wrap( $( '', {
- "class": this.settings.stageOuterClass
- }));
-
- // append stage
- this.$element.append(this.$stage.parent());
- };
-
- /**
- * Create item DOM elements
- */
- Owl.prototype.initializeItems = function() {
- var $items = this.$element.find('.owl-item');
-
- // if the items are already in the DOM, grab them and skip item initialization
- if ($items.length) {
- this._items = $items.get().map(function(item) {
- return $(item);
- });
-
- this._mergers = this._items.map(function() {
- return 1;
- });
-
- this.refresh();
-
- return;
- }
-
- // append content
- this.replace(this.$element.children().not(this.$stage.parent()));
-
- // check visibility
- if (this.isVisible()) {
- // update view
- this.refresh();
- } else {
- // invalidate width
- this.invalidate('width');
- }
-
- this.$element
- .removeClass(this.options.loadingClass)
- .addClass(this.options.loadedClass);
- };
-
- /**
- * Initializes the carousel.
- * @protected
- */
- Owl.prototype.initialize = function() {
- this.enter('initializing');
- this.trigger('initialize');
-
- this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);
-
- if (this.settings.autoWidth && !this.is('pre-loading')) {
- var imgs, nestedSelector, width;
- imgs = this.$element.find('img');
- nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
- width = this.$element.children(nestedSelector).width();
-
- if (imgs.length && width <= 0) {
- this.preloadAutoWidthImages(imgs);
- }
- }
-
- this.initializeStage();
- this.initializeItems();
-
- // register event handlers
- this.registerEventHandlers();
-
- this.leave('initializing');
- this.trigger('initialized');
- };
-
- /**
- * @returns {Boolean} visibility of $element
- * if you know the carousel will always be visible you can set `checkVisibility` to `false` to
- * prevent the expensive browser layout forced reflow the $element.is(':visible') does
- */
- Owl.prototype.isVisible = function() {
- return this.settings.checkVisibility
- ? this.$element.is(':visible')
- : true;
- };
-
- /**
- * Setups the current settings.
- * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
- * @todo Support for media queries by using `matchMedia` would be nice.
- * @public
- */
- Owl.prototype.setup = function() {
- var viewport = this.viewport(),
- overwrites = this.options.responsive,
- match = -1,
- settings = null;
-
- if (!overwrites) {
- settings = $.extend({}, this.options);
- } else {
- $.each(overwrites, function(breakpoint) {
- if (breakpoint <= viewport && breakpoint > match) {
- match = Number(breakpoint);
- }
- });
-
- settings = $.extend({}, this.options, overwrites[match]);
- if (typeof settings.stagePadding === 'function') {
- settings.stagePadding = settings.stagePadding();
- }
- delete settings.responsive;
-
- // responsive class
- if (settings.responsiveClass) {
- this.$element.attr('class',
- this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)
- );
- }
- }
-
- this.trigger('change', { property: { name: 'settings', value: settings } });
- this._breakpoint = match;
- this.settings = settings;
- this.invalidate('settings');
- this.trigger('changed', { property: { name: 'settings', value: this.settings } });
- };
-
- /**
- * Updates option logic if necessery.
- * @protected
- */
- Owl.prototype.optionsLogic = function() {
- if (this.settings.autoWidth) {
- this.settings.stagePadding = false;
- this.settings.merge = false;
- }
- };
-
- /**
- * Prepares an item before add.
- * @todo Rename event parameter `content` to `item`.
- * @protected
- * @returns {jQuery|HTMLElement} - The item container.
- */
- Owl.prototype.prepare = function(item) {
- var event = this.trigger('prepare', { content: item });
-
- if (!event.data) {
- event.data = $('<' + this.settings.itemElement + '/>')
- .addClass(this.options.itemClass).append(item)
- }
-
- this.trigger('prepared', { content: event.data });
-
- return event.data;
- };
-
- /**
- * Updates the view.
- * @public
- */
- Owl.prototype.update = function() {
- var i = 0,
- n = this._pipe.length,
- filter = $.proxy(function(p) { return this[p] }, this._invalidated),
- cache = {};
-
- while (i < n) {
- if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
- this._pipe[i].run(cache);
- }
- i++;
- }
-
- this._invalidated = {};
-
- !this.is('valid') && this.enter('valid');
- };
-
- /**
- * Gets the width of the view.
- * @public
- * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
- * @returns {Number} - The width of the view in pixel.
- */
- Owl.prototype.width = function(dimension) {
- dimension = dimension || Owl.Width.Default;
- switch (dimension) {
- case Owl.Width.Inner:
- case Owl.Width.Outer:
- return this._width;
- default:
- return this._width - this.settings.stagePadding * 2 + this.settings.margin;
- }
- };
-
- /**
- * Refreshes the carousel primarily for adaptive purposes.
- * @public
- */
- Owl.prototype.refresh = function() {
- this.enter('refreshing');
- this.trigger('refresh');
-
- this.setup();
-
- this.optionsLogic();
-
- this.$element.addClass(this.options.refreshClass);
-
- this.update();
-
- this.$element.removeClass(this.options.refreshClass);
-
- this.leave('refreshing');
- this.trigger('refreshed');
- };
-
- /**
- * Checks window `resize` event.
- * @protected
- */
- Owl.prototype.onThrottledResize = function() {
- window.clearTimeout(this.resizeTimer);
- this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
- };
-
- /**
- * Checks window `resize` event.
- * @protected
- */
- Owl.prototype.onResize = function() {
- if (!this._items.length) {
- return false;
- }
-
- if (this._width === this.$element.width()) {
- return false;
- }
-
- if (!this.isVisible()) {
- return false;
- }
-
- this.enter('resizing');
-
- if (this.trigger('resize').isDefaultPrevented()) {
- this.leave('resizing');
- return false;
- }
-
- this.invalidate('width');
-
- this.refresh();
-
- this.leave('resizing');
- this.trigger('resized');
- };
-
- /**
- * Registers event handlers.
- * @todo Check `msPointerEnabled`
- * @todo #261
- * @protected
- */
- Owl.prototype.registerEventHandlers = function() {
- if ($.support.transition) {
- this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));
- }
-
- if (this.settings.responsive !== false) {
- this.on(window, 'resize', this._handlers.onThrottledResize);
- }
-
- if (this.settings.mouseDrag) {
- this.$element.addClass(this.options.dragClass);
- this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));
- this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });
- }
-
- if (this.settings.touchDrag){
- this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));
- this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));
- }
- };
-
- /**
- * Handles `touchstart` and `mousedown` events.
- * @todo Horizontal swipe threshold as option
- * @todo #261
- * @protected
- * @param {Event} event - The event arguments.
- */
- Owl.prototype.onDragStart = function(event) {
- var stage = null;
-
- if (event.which === 3) {
- return;
- }
-
- if ($.support.transform) {
- stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(',');
- stage = {
- x: stage[stage.length === 16 ? 12 : 4],
- y: stage[stage.length === 16 ? 13 : 5]
- };
- } else {
- stage = this.$stage.position();
- stage = {
- x: this.settings.rtl ?
- stage.left + this.$stage.width() - this.width() + this.settings.margin :
- stage.left,
-// y: stage.top
- };
- }
-
- if (this.is('animating')) {
- $.support.transform ? this.animate(stage.x) : this.$stage.stop()
- this.invalidate('position');
- }
-
- this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');
-
- this.speed(0);
-
- this._drag.time = new Date().getTime();
- this._drag.target = $(event.target);
- this._drag.stage.start = stage;
- this._drag.stage.current = stage;
- this._drag.pointer = this.pointer(event);
-
- $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));
-
- $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {
- var delta = this.difference(this._drag.pointer, this.pointer(event));
-
- $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));
-
- if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {
- return;
- }
-
- event.preventDefault();
-
- this.enter('dragging');
- this.trigger('drag');
- }, this));
- };
-
- /**
- * Handles the `touchmove` and `mousemove` events.
- * @todo #261
- * @protected
- * @param {Event} event - The event arguments.
- */
- Owl.prototype.onDragMove = function(event) {
- var minimum = null,
- maximum = null,
- pull = null,
- delta = this.difference(this._drag.pointer, this.pointer(event)),
- stage = this.difference(this._drag.stage.start, delta);
-
- if (!this.is('dragging')) {
- return;
- }
-
- event.preventDefault();
-
- if (this.settings.loop) {
- minimum = this.coordinates(this.minimum());
- maximum = this.coordinates(this.maximum() + 1) - minimum;
- stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;
- } else {
- minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
- maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
- pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;
- stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);
- }
-
- this._drag.stage.current = stage;
-
- this.animate(stage.x);
- };
-
- /**
- * Handles the `touchend` and `mouseup` events.
- * @todo #261
- * @todo Threshold for click event
- * @protected
- * @param {Event} event - The event arguments.
- */
- Owl.prototype.onDragEnd = function(event) {
- var delta = this.difference(this._drag.pointer, this.pointer(event)),
- stage = this._drag.stage.current,
- direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';
-
- $(document).off('.owl.core');
-
- this.$element.removeClass(this.options.grabClass);
-
- if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {
- this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
- this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));
- this.invalidate('position');
- this.update();
-
- this._drag.direction = direction;
-
- if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {
- this._drag.target.one('click.owl.core', function() { return false; });
- }
- }
-
- if (!this.is('dragging')) {
- return;
- }
-
- this.leave('dragging');
- this.trigger('dragged');
- };
-
- /**
- * Gets absolute position of the closest item for a coordinate.
- * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
- * @protected
- * @param {Number} coordinate - The coordinate in pixel.
- * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.
- * @return {Number} - The absolute position of the closest item.
- */
- Owl.prototype.closest = function(coordinate, direction) {
- var position = -1,
- pull = 30,
- width = this.width(),
- coordinates = this.coordinates();
-
- if (!this.settings.freeDrag) {
- // check closest item
- $.each(coordinates, $.proxy(function(index, value) {
- // on a left pull, check on current index
- if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {
- position = index;
- // on a right pull, check on previous index
- // to do so, subtract width from value and set position = index + 1
- } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {
- position = index + 1;
- } else if (this.op(coordinate, '<', value)
- && this.op(coordinate, '>', coordinates[index + 1] !== undefined ? coordinates[index + 1] : value - width)) {
- position = direction === 'left' ? index + 1 : index;
- }
- return position === -1;
- }, this));
- }
-
- if (!this.settings.loop) {
- // non loop boundries
- if (this.op(coordinate, '>', coordinates[this.minimum()])) {
- position = coordinate = this.minimum();
- } else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
- position = coordinate = this.maximum();
- }
- }
-
- return position;
- };
-
- /**
- * Animates the stage.
- * @todo #270
- * @public
- * @param {Number} coordinate - The coordinate in pixels.
- */
- Owl.prototype.animate = function(coordinate) {
- var animate = this.speed() > 0;
-
- this.is('animating') && this.onTransitionEnd();
-
- if (animate) {
- this.enter('animating');
- this.trigger('translate');
- }
-
- if ($.support.transform3d && $.support.transition) {
- this.$stage.css({
- transform: 'translate3d(' + coordinate + 'px,0px,0px)',
- transition: (this.speed() / 1000) + 's' + (
- this.settings.slideTransition ? ' ' + this.settings.slideTransition : ''
- )
- });
- } else if (animate) {
- this.$stage.animate({
- left: coordinate + 'px'
- }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));
- } else {
- this.$stage.css({
- left: coordinate + 'px'
- });
- }
- };
-
- /**
- * Checks whether the carousel is in a specific state or not.
- * @param {String} state - The state to check.
- * @returns {Boolean} - The flag which indicates if the carousel is busy.
- */
- Owl.prototype.is = function(state) {
- return this._states.current[state] && this._states.current[state] > 0;
- };
-
- /**
- * Sets the absolute position of the current item.
- * @public
- * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
- * @returns {Number} - The absolute position of the current item.
- */
- Owl.prototype.current = function(position) {
- if (position === undefined) {
- return this._current;
- }
-
- if (this._items.length === 0) {
- return undefined;
- }
-
- position = this.normalize(position);
-
- if (this._current !== position) {
- var event = this.trigger('change', { property: { name: 'position', value: position } });
-
- if (event.data !== undefined) {
- position = this.normalize(event.data);
- }
-
- this._current = position;
-
- this.invalidate('position');
-
- this.trigger('changed', { property: { name: 'position', value: this._current } });
- }
-
- return this._current;
- };
-
- /**
- * Invalidates the given part of the update routine.
- * @param {String} [part] - The part to invalidate.
- * @returns {Array.} - The invalidated parts.
- */
- Owl.prototype.invalidate = function(part) {
- if ($.type(part) === 'string') {
- this._invalidated[part] = true;
- this.is('valid') && this.leave('valid');
- }
- return $.map(this._invalidated, function(v, i) { return i });
- };
-
- /**
- * Resets the absolute position of the current item.
- * @public
- * @param {Number} position - The absolute position of the new item.
- */
- Owl.prototype.reset = function(position) {
- position = this.normalize(position);
-
- if (position === undefined) {
- return;
- }
-
- this._speed = 0;
- this._current = position;
-
- this.suppress([ 'translate', 'translated' ]);
-
- this.animate(this.coordinates(position));
-
- this.release([ 'translate', 'translated' ]);
- };
-
- /**
- * Normalizes an absolute or a relative position of an item.
- * @public
- * @param {Number} position - The absolute or relative position to normalize.
- * @param {Boolean} [relative=false] - Whether the given position is relative or not.
- * @returns {Number} - The normalized position.
- */
- Owl.prototype.normalize = function(position, relative) {
- var n = this._items.length,
- m = relative ? 0 : this._clones.length;
-
- if (!this.isNumeric(position) || n < 1) {
- position = undefined;
- } else if (position < 0 || position >= n + m) {
- position = ((position - m / 2) % n + n) % n + m / 2;
- }
-
- return position;
- };
-
- /**
- * Converts an absolute position of an item into a relative one.
- * @public
- * @param {Number} position - The absolute position to convert.
- * @returns {Number} - The converted position.
- */
- Owl.prototype.relative = function(position) {
- position -= this._clones.length / 2;
- return this.normalize(position, true);
- };
-
- /**
- * Gets the maximum position for the current item.
- * @public
- * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
- * @returns {Number}
- */
- Owl.prototype.maximum = function(relative) {
- var settings = this.settings,
- maximum = this._coordinates.length,
- iterator,
- reciprocalItemsWidth,
- elementWidth;
-
- if (settings.loop) {
- maximum = this._clones.length / 2 + this._items.length - 1;
- } else if (settings.autoWidth || settings.merge) {
- iterator = this._items.length;
- if (iterator) {
- reciprocalItemsWidth = this._items[--iterator].width();
- elementWidth = this.$element.width();
- while (iterator--) {
- reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;
- if (reciprocalItemsWidth > elementWidth) {
- break;
- }
- }
- }
- maximum = iterator + 1;
- } else if (settings.center) {
- maximum = this._items.length - 1;
- } else {
- maximum = this._items.length - settings.items;
- }
-
- if (relative) {
- maximum -= this._clones.length / 2;
- }
-
- return Math.max(maximum, 0);
- };
-
- /**
- * Gets the minimum position for the current item.
- * @public
- * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
- * @returns {Number}
- */
- Owl.prototype.minimum = function(relative) {
- return relative ? 0 : this._clones.length / 2;
- };
-
- /**
- * Gets an item at the specified relative position.
- * @public
- * @param {Number} [position] - The relative position of the item.
- * @return {jQuery|Array.} - The item at the given position or all items if no position was given.
- */
- Owl.prototype.items = function(position) {
- if (position === undefined) {
- return this._items.slice();
- }
-
- position = this.normalize(position, true);
- return this._items[position];
- };
-
- /**
- * Gets an item at the specified relative position.
- * @public
- * @param {Number} [position] - The relative position of the item.
- * @return {jQuery|Array.} - The item at the given position or all items if no position was given.
- */
- Owl.prototype.mergers = function(position) {
- if (position === undefined) {
- return this._mergers.slice();
- }
-
- position = this.normalize(position, true);
- return this._mergers[position];
- };
-
- /**
- * Gets the absolute positions of clones for an item.
- * @public
- * @param {Number} [position] - The relative position of the item.
- * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.
- */
- Owl.prototype.clones = function(position) {
- var odd = this._clones.length / 2,
- even = odd + this._items.length,
- map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
-
- if (position === undefined) {
- return $.map(this._clones, function(v, i) { return map(i) });
- }
-
- return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
- };
-
- /**
- * Sets the current animation speed.
- * @public
- * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
- * @returns {Number} - The current animation speed in milliseconds.
- */
- Owl.prototype.speed = function(speed) {
- if (speed !== undefined) {
- this._speed = speed;
- }
-
- return this._speed;
- };
-
- /**
- * Gets the coordinate of an item.
- * @todo The name of this method is missleanding.
- * @public
- * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
- * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.
- */
- Owl.prototype.coordinates = function(position) {
- var multiplier = 1,
- newPosition = position - 1,
- coordinate;
-
- if (position === undefined) {
- return $.map(this._coordinates, $.proxy(function(coordinate, index) {
- return this.coordinates(index);
- }, this));
- }
-
- if (this.settings.center) {
- if (this.settings.rtl) {
- multiplier = -1;
- newPosition = position + 1;
- }
-
- coordinate = this._coordinates[position];
- coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;
- } else {
- coordinate = this._coordinates[newPosition] || 0;
- }
-
- coordinate = Math.ceil(coordinate);
-
- return coordinate;
- };
-
- /**
- * Calculates the speed for a translation.
- * @protected
- * @param {Number} from - The absolute position of the start item.
- * @param {Number} to - The absolute position of the target item.
- * @param {Number} [factor=undefined] - The time factor in milliseconds.
- * @returns {Number} - The time in milliseconds for the translation.
- */
- Owl.prototype.duration = function(from, to, factor) {
- if (factor === 0) {
- return 0;
- }
-
- return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
- };
-
- /**
- * Slides to the specified item.
- * @public
- * @param {Number} position - The position of the item.
- * @param {Number} [speed] - The time in milliseconds for the transition.
- */
- Owl.prototype.to = function(position, speed) {
- var current = this.current(),
- revert = null,
- distance = position - this.relative(current),
- direction = (distance > 0) - (distance < 0),
- items = this._items.length,
- minimum = this.minimum(),
- maximum = this.maximum();
-
- if (this.settings.loop) {
- if (!this.settings.rewind && Math.abs(distance) > items / 2) {
- distance += direction * -1 * items;
- }
-
- position = current + distance;
- revert = ((position - minimum) % items + items) % items + minimum;
-
- if (revert !== position && revert - distance <= maximum && revert - distance > 0) {
- current = revert - distance;
- position = revert;
- this.reset(current);
- }
- } else if (this.settings.rewind) {
- maximum += 1;
- position = (position % maximum + maximum) % maximum;
- } else {
- position = Math.max(minimum, Math.min(maximum, position));
- }
-
- this.speed(this.duration(current, position, speed));
- this.current(position);
-
- if (this.isVisible()) {
- this.update();
- }
- };
-
- /**
- * Slides to the next item.
- * @public
- * @param {Number} [speed] - The time in milliseconds for the transition.
- */
- Owl.prototype.next = function(speed) {
- speed = speed || false;
- this.to(this.relative(this.current()) + 1, speed);
- };
-
- /**
- * Slides to the previous item.
- * @public
- * @param {Number} [speed] - The time in milliseconds for the transition.
- */
- Owl.prototype.prev = function(speed) {
- speed = speed || false;
- this.to(this.relative(this.current()) - 1, speed);
- };
-
- /**
- * Handles the end of an animation.
- * @protected
- * @param {Event} event - The event arguments.
- */
- Owl.prototype.onTransitionEnd = function(event) {
-
- // if css2 animation then event object is undefined
- if (event !== undefined) {
- event.stopPropagation();
-
- // Catch only owl-stage transitionEnd event
- if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
- return false;
- }
- }
-
- this.leave('animating');
- this.trigger('translated');
- };
-
- /**
- * Gets viewport width.
- * @protected
- * @return {Number} - The width in pixel.
- */
- Owl.prototype.viewport = function() {
- var width;
- if (this.options.responsiveBaseElement !== window) {
- width = $(this.options.responsiveBaseElement).width();
- } else if (window.innerWidth) {
- width = window.innerWidth;
- } else if (document.documentElement && document.documentElement.clientWidth) {
- width = document.documentElement.clientWidth;
- } else {
- console.warn('Can not detect viewport width.');
- }
- return width;
- };
-
- /**
- * Replaces the current content.
- * @public
- * @param {HTMLElement|jQuery|String} content - The new content.
- */
- Owl.prototype.replace = function(content) {
- this.$stage.empty();
- this._items = [];
-
- if (content) {
- content = (content instanceof jQuery) ? content : $(content);
- }
-
- if (this.settings.nestedItemSelector) {
- content = content.find('.' + this.settings.nestedItemSelector);
- }
-
- content.filter(function() {
- return this.nodeType === 1;
- }).each($.proxy(function(index, item) {
- item = this.prepare(item);
- this.$stage.append(item);
- this._items.push(item);
- this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
- }, this));
-
- this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
-
- this.invalidate('items');
- };
-
- /**
- * Adds an item.
- * @todo Use `item` instead of `content` for the event arguments.
- * @public
- * @param {HTMLElement|jQuery|String} content - The item content to add.
- * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
- */
- Owl.prototype.add = function(content, position) {
- var current = this.relative(this._current);
-
- position = position === undefined ? this._items.length : this.normalize(position, true);
- content = content instanceof jQuery ? content : $(content);
-
- this.trigger('add', { content: content, position: position });
-
- content = this.prepare(content);
-
- if (this._items.length === 0 || position === this._items.length) {
- this._items.length === 0 && this.$stage.append(content);
- this._items.length !== 0 && this._items[position - 1].after(content);
- this._items.push(content);
- this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
- } else {
- this._items[position].before(content);
- this._items.splice(position, 0, content);
- this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
- }
-
- this._items[current] && this.reset(this._items[current].index());
-
- this.invalidate('items');
-
- this.trigger('added', { content: content, position: position });
- };
-
- /**
- * Removes an item by its position.
- * @todo Use `item` instead of `content` for the event arguments.
- * @public
- * @param {Number} position - The relative position of the item to remove.
- */
- Owl.prototype.remove = function(position) {
- position = this.normalize(position, true);
-
- if (position === undefined) {
- return;
- }
-
- this.trigger('remove', { content: this._items[position], position: position });
-
- this._items[position].remove();
- this._items.splice(position, 1);
- this._mergers.splice(position, 1);
-
- this.invalidate('items');
-
- this.trigger('removed', { content: null, position: position });
- };
-
- /**
- * Preloads images with auto width.
- * @todo Replace by a more generic approach
- * @protected
- */
- Owl.prototype.preloadAutoWidthImages = function(images) {
- images.each($.proxy(function(i, element) {
- this.enter('pre-loading');
- element = $(element);
- $(new Image()).one('load', $.proxy(function(e) {
- element.attr('src', e.target.src);
- element.css('opacity', 1);
- this.leave('pre-loading');
- !this.is('pre-loading') && !this.is('initializing') && this.refresh();
- }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));
- }, this));
- };
-
- /**
- * Destroys the carousel.
- * @public
- */
- Owl.prototype.destroy = function() {
-
- this.$element.off('.owl.core');
- this.$stage.off('.owl.core');
- $(document).off('.owl.core');
-
- if (this.settings.responsive !== false) {
- window.clearTimeout(this.resizeTimer);
- this.off(window, 'resize', this._handlers.onThrottledResize);
- }
-
- for (var i in this._plugins) {
- this._plugins[i].destroy();
- }
-
- this.$stage.children('.cloned').remove();
-
- this.$stage.unwrap();
- this.$stage.children().contents().unwrap();
- this.$stage.children().unwrap();
- this.$stage.remove();
- this.$element
- .removeClass(this.options.refreshClass)
- .removeClass(this.options.loadingClass)
-// .removeClass(this.options.loadedClass)
- .removeClass(this.options.rtlClass)
- .removeClass(this.options.dragClass)
- .removeClass(this.options.grabClass)
- .attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), ''))
- .removeData('owl.carousel');
- };
-
- /**
- * Operators to calculate right-to-left and left-to-right.
- * @protected
- * @param {Number} [a] - The left side operand.
- * @param {String} [o] - The operator.
- * @param {Number} [b] - The right side operand.
- */
- Owl.prototype.op = function(a, o, b) {
- var rtl = this.settings.rtl;
- switch (o) {
- case '<':
- return rtl ? a > b : a < b;
- case '>':
- return rtl ? a < b : a > b;
- case '>=':
- return rtl ? a <= b : a >= b;
- case '<=':
- return rtl ? a >= b : a <= b;
- default:
- break;
- }
- };
-
- /**
- * Attaches to an internal event.
- * @protected
- * @param {HTMLElement} element - The event source.
- * @param {String} event - The event name.
- * @param {Function} listener - The event handler to attach.
- * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
- */
- Owl.prototype.on = function(element, event, listener, capture) {
- if (element.addEventListener) {
- element.addEventListener(event, listener, capture);
- } else if (element.attachEvent) {
- element.attachEvent('on' + event, listener);
- }
- };
-
- /**
- * Detaches from an internal event.
- * @protected
- * @param {HTMLElement} element - The event source.
- * @param {String} event - The event name.
- * @param {Function} listener - The attached event handler to detach.
- * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
- */
- Owl.prototype.off = function(element, event, listener, capture) {
- if (element.removeEventListener) {
- element.removeEventListener(event, listener, capture);
- } else if (element.detachEvent) {
- element.detachEvent('on' + event, listener);
- }
- };
-
- /**
- * Triggers a public event.
- * @todo Remove `status`, `relatedTarget` should be used instead.
- * @protected
- * @param {String} name - The event name.
- * @param {*} [data=null] - The event data.
- * @param {String} [namespace=carousel] - The event namespace.
- * @param {String} [state] - The state which is associated with the event.
- * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.
- * @returns {Event} - The event arguments.
- */
- Owl.prototype.trigger = function(name, data, namespace, state, enter) {
- var status = {
- item: { count: this._items.length, index: this.current() }
- }, handler = $.camelCase(
- $.grep([ 'on', name, namespace ], function(v) { return v })
- .join('-').toLowerCase()
- ), event = $.Event(
- [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
- $.extend({ relatedTarget: this }, status, data)
- );
-
- if (!this._supress[name]) {
- $.each(this._plugins, function(name, plugin) {
- if (plugin.onTrigger) {
- plugin.onTrigger(event);
- }
- });
-
- this.register({ type: Owl.Type.Event, name: name });
- this.$element.trigger(event);
-
- if (this.settings && typeof this.settings[handler] === 'function') {
- this.settings[handler].call(this, event);
- }
- }
-
- return event;
- };
-
- /**
- * Enters a state.
- * @param name - The state name.
- */
- Owl.prototype.enter = function(name) {
- $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
- if (this._states.current[name] === undefined) {
- this._states.current[name] = 0;
- }
-
- this._states.current[name]++;
- }, this));
- };
-
- /**
- * Leaves a state.
- * @param name - The state name.
- */
- Owl.prototype.leave = function(name) {
- $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
- this._states.current[name]--;
- }, this));
- };
-
- /**
- * Registers an event or state.
- * @public
- * @param {Object} object - The event or state to register.
- */
- Owl.prototype.register = function(object) {
- if (object.type === Owl.Type.Event) {
- if (!$.event.special[object.name]) {
- $.event.special[object.name] = {};
- }
-
- if (!$.event.special[object.name].owl) {
- var _default = $.event.special[object.name]._default;
- $.event.special[object.name]._default = function(e) {
- if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {
- return _default.apply(this, arguments);
- }
- return e.namespace && e.namespace.indexOf('owl') > -1;
- };
- $.event.special[object.name].owl = true;
- }
- } else if (object.type === Owl.Type.State) {
- if (!this._states.tags[object.name]) {
- this._states.tags[object.name] = object.tags;
- } else {
- this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);
- }
-
- this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {
- return $.inArray(tag, this._states.tags[object.name]) === i;
- }, this));
- }
- };
-
- /**
- * Suppresses events.
- * @protected
- * @param {Array.} events - The events to suppress.
- */
- Owl.prototype.suppress = function(events) {
- $.each(events, $.proxy(function(index, event) {
- this._supress[event] = true;
- }, this));
- };
-
- /**
- * Releases suppressed events.
- * @protected
- * @param {Array.} events - The events to release.
- */
- Owl.prototype.release = function(events) {
- $.each(events, $.proxy(function(index, event) {
- delete this._supress[event];
- }, this));
- };
-
- /**
- * Gets unified pointer coordinates from event.
- * @todo #261
- * @protected
- * @param {Event} - The `mousedown` or `touchstart` event.
- * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.
- */
- Owl.prototype.pointer = function(event) {
- var result = { x: null, y: null };
-
- event = event.originalEvent || event || window.event;
-
- event = event.touches && event.touches.length ?
- event.touches[0] : event.changedTouches && event.changedTouches.length ?
- event.changedTouches[0] : event;
-
- if (event.pageX) {
- result.x = event.pageX;
- result.y = event.pageY;
- } else {
- result.x = event.clientX;
- result.y = event.clientY;
- }
-
- return result;
- };
-
- /**
- * Determines if the input is a Number or something that can be coerced to a Number
- * @protected
- * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested
- * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number
- */
- Owl.prototype.isNumeric = function(number) {
- return !isNaN(parseFloat(number));
- };
-
- /**
- * Gets the difference of two vectors.
- * @todo #261
- * @protected
- * @param {Object} - The first vector.
- * @param {Object} - The second vector.
- * @returns {Object} - The difference.
- */
- Owl.prototype.difference = function(first, second) {
- return {
- x: first.x - second.x,
- y: first.y - second.y
- };
- };
-
- /**
- * The jQuery Plugin for the Owl Carousel
- * @todo Navigation plugin `next` and `prev`
- * @public
- */
- $.fn.owlCarousel = function(option) {
- var args = Array.prototype.slice.call(arguments, 1);
-
- return this.each(function() {
- var $this = $(this),
- data = $this.data('owl.carousel');
-
- if (!data) {
- data = new Owl(this, typeof option == 'object' && option);
- $this.data('owl.carousel', data);
-
- $.each([
- 'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'
- ], function(i, event) {
- data.register({ type: Owl.Type.Event, name: event });
- data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {
- if (e.namespace && e.relatedTarget !== this) {
- this.suppress([ event ]);
- data[event].apply(this, [].slice.call(arguments, 1));
- this.release([ event ]);
- }
- }, data));
- });
- }
-
- if (typeof option == 'string' && option.charAt(0) !== '_') {
- data[option].apply(data, args);
- }
- });
- };
-
- /**
- * The constructor for the jQuery Plugin
- * @public
- */
- $.fn.owlCarousel.Constructor = Owl;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * AutoRefresh Plugin
- * @version 2.3.4
- * @author Artus Kolanowski
- * @author David Deutsch
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates the auto refresh plugin.
- * @class The Auto Refresh Plugin
- * @param {Owl} carousel - The Owl Carousel
- */
- var AutoRefresh = function(carousel) {
- /**
- * Reference to the core.
- * @protected
- * @type {Owl}
- */
- this._core = carousel;
-
- /**
- * Refresh interval.
- * @protected
- * @type {number}
- */
- this._interval = null;
-
- /**
- * Whether the element is currently visible or not.
- * @protected
- * @type {Boolean}
- */
- this._visible = null;
-
- /**
- * All event handlers.
- * @protected
- * @type {Object}
- */
- this._handlers = {
- 'initialized.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.settings.autoRefresh) {
- this.watch();
- }
- }, this)
- };
-
- // set default options
- this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);
-
- // register event handlers
- this._core.$element.on(this._handlers);
- };
-
- /**
- * Default options.
- * @public
- */
- AutoRefresh.Defaults = {
- autoRefresh: true,
- autoRefreshInterval: 500
- };
-
- /**
- * Watches the element.
- */
- AutoRefresh.prototype.watch = function() {
- if (this._interval) {
- return;
- }
-
- this._visible = this._core.isVisible();
- this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);
- };
-
- /**
- * Refreshes the element.
- */
- AutoRefresh.prototype.refresh = function() {
- if (this._core.isVisible() === this._visible) {
- return;
- }
-
- this._visible = !this._visible;
-
- this._core.$element.toggleClass('owl-hidden', !this._visible);
-
- this._visible && (this._core.invalidate('width') && this._core.refresh());
- };
-
- /**
- * Destroys the plugin.
- */
- AutoRefresh.prototype.destroy = function() {
- var handler, property;
-
- window.clearInterval(this._interval);
-
- for (handler in this._handlers) {
- this._core.$element.off(handler, this._handlers[handler]);
- }
- for (property in Object.getOwnPropertyNames(this)) {
- typeof this[property] != 'function' && (this[property] = null);
- }
- };
-
- $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * Lazy Plugin
- * @version 2.3.4
- * @author Bartosz Wojciechowski
- * @author David Deutsch
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates the lazy plugin.
- * @class The Lazy Plugin
- * @param {Owl} carousel - The Owl Carousel
- */
- var Lazy = function(carousel) {
-
- /**
- * Reference to the core.
- * @protected
- * @type {Owl}
- */
- this._core = carousel;
-
- /**
- * Already loaded items.
- * @protected
- * @type {Array.}
- */
- this._loaded = [];
-
- /**
- * Event handlers.
- * @protected
- * @type {Object}
- */
- this._handlers = {
- 'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {
- if (!e.namespace) {
- return;
- }
-
- if (!this._core.settings || !this._core.settings.lazyLoad) {
- return;
- }
-
- if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
- var settings = this._core.settings,
- n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
- i = ((settings.center && n * -1) || 0),
- position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,
- clones = this._core.clones().length,
- load = $.proxy(function(i, v) { this.load(v) }, this);
- //TODO: Need documentation for this new option
- if (settings.lazyLoadEager > 0) {
- n += settings.lazyLoadEager;
- // If the carousel is looping also preload images that are to the "left"
- if (settings.loop) {
- position -= settings.lazyLoadEager;
- n++;
- }
- }
-
- while (i++ < n) {
- this.load(clones / 2 + this._core.relative(position));
- clones && $.each(this._core.clones(this._core.relative(position)), load);
- position++;
- }
- }
- }, this)
- };
-
- // set the default options
- this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
-
- // register event handler
- this._core.$element.on(this._handlers);
- };
-
- /**
- * Default options.
- * @public
- */
- Lazy.Defaults = {
- lazyLoad: false,
- lazyLoadEager: 0
- };
-
- /**
- * Loads all resources of an item at the specified position.
- * @param {Number} position - The absolute position of the item.
- * @protected
- */
- Lazy.prototype.load = function(position) {
- var $item = this._core.$stage.children().eq(position),
- $elements = $item && $item.find('.owl-lazy');
-
- if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
- return;
- }
-
- $elements.each($.proxy(function(index, element) {
- var $element = $(element), image,
- url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset');
-
- this._core.trigger('load', { element: $element, url: url }, 'lazy');
-
- if ($element.is('img')) {
- $element.one('load.owl.lazy', $.proxy(function() {
- $element.css('opacity', 1);
- this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
- }, this)).attr('src', url);
- } else if ($element.is('source')) {
- $element.one('load.owl.lazy', $.proxy(function() {
- this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
- }, this)).attr('srcset', url);
- } else {
- image = new Image();
- image.onload = $.proxy(function() {
- $element.css({
- 'background-image': 'url("' + url + '")',
- 'opacity': '1'
- });
- this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
- }, this);
- image.src = url;
- }
- }, this));
-
- this._loaded.push($item.get(0));
- };
-
- /**
- * Destroys the plugin.
- * @public
- */
- Lazy.prototype.destroy = function() {
- var handler, property;
-
- for (handler in this.handlers) {
- this._core.$element.off(handler, this.handlers[handler]);
- }
- for (property in Object.getOwnPropertyNames(this)) {
- typeof this[property] != 'function' && (this[property] = null);
- }
- };
-
- $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * AutoHeight Plugin
- * @version 2.3.4
- * @author Bartosz Wojciechowski
- * @author David Deutsch
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates the auto height plugin.
- * @class The Auto Height Plugin
- * @param {Owl} carousel - The Owl Carousel
- */
- var AutoHeight = function(carousel) {
- /**
- * Reference to the core.
- * @protected
- * @type {Owl}
- */
- this._core = carousel;
-
- this._previousHeight = null;
-
- /**
- * All event handlers.
- * @protected
- * @type {Object}
- */
- this._handlers = {
- 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.settings.autoHeight) {
- this.update();
- }
- }, this),
- 'changed.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){
- this.update();
- }
- }, this),
- 'loaded.owl.lazy': $.proxy(function(e) {
- if (e.namespace && this._core.settings.autoHeight
- && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {
- this.update();
- }
- }, this)
- };
-
- // set default options
- this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
-
- // register event handlers
- this._core.$element.on(this._handlers);
- this._intervalId = null;
- var refThis = this;
-
- // These changes have been taken from a PR by gavrochelegnou proposed in #1575
- // and have been made compatible with the latest jQuery version
- $(window).on('load', function() {
- if (refThis._core.settings.autoHeight) {
- refThis.update();
- }
- });
-
- // Autoresize the height of the carousel when window is resized
- // When carousel has images, the height is dependent on the width
- // and should also change on resize
- $(window).resize(function() {
- if (refThis._core.settings.autoHeight) {
- if (refThis._intervalId != null) {
- clearTimeout(refThis._intervalId);
- }
-
- refThis._intervalId = setTimeout(function() {
- refThis.update();
- }, 250);
- }
- });
-
- };
-
- /**
- * Default options.
- * @public
- */
- AutoHeight.Defaults = {
- autoHeight: false,
- autoHeightClass: 'owl-height'
- };
-
- /**
- * Updates the view.
- */
- AutoHeight.prototype.update = function() {
- var start = this._core._current,
- end = start + this._core.settings.items,
- lazyLoadEnabled = this._core.settings.lazyLoad,
- visible = this._core.$stage.children().toArray().slice(start, end),
- heights = [],
- maxheight = 0;
-
- $.each(visible, function(index, item) {
- heights.push($(item).height());
- });
-
- maxheight = Math.max.apply(null, heights);
-
- if (maxheight <= 1 && lazyLoadEnabled && this._previousHeight) {
- maxheight = this._previousHeight;
- }
-
- this._previousHeight = maxheight;
-
- this._core.$stage.parent()
- .height(maxheight)
- .addClass(this._core.settings.autoHeightClass);
- };
-
- AutoHeight.prototype.destroy = function() {
- var handler, property;
-
- for (handler in this._handlers) {
- this._core.$element.off(handler, this._handlers[handler]);
- }
- for (property in Object.getOwnPropertyNames(this)) {
- typeof this[property] !== 'function' && (this[property] = null);
- }
- };
-
- $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * Video Plugin
- * @version 2.3.4
- * @author Bartosz Wojciechowski
- * @author David Deutsch
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates the video plugin.
- * @class The Video Plugin
- * @param {Owl} carousel - The Owl Carousel
- */
- var Video = function(carousel) {
- /**
- * Reference to the core.
- * @protected
- * @type {Owl}
- */
- this._core = carousel;
-
- /**
- * Cache all video URLs.
- * @protected
- * @type {Object}
- */
- this._videos = {};
-
- /**
- * Current playing item.
- * @protected
- * @type {jQuery}
- */
- this._playing = null;
-
- /**
- * All event handlers.
- * @todo The cloned content removale is too late
- * @protected
- * @type {Object}
- */
- this._handlers = {
- 'initialized.owl.carousel': $.proxy(function(e) {
- if (e.namespace) {
- this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });
- }
- }, this),
- 'resize.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.settings.video && this.isInFullScreen()) {
- e.preventDefault();
- }
- }, this),
- 'refreshed.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.is('resizing')) {
- this._core.$stage.find('.cloned .owl-video-frame').remove();
- }
- }, this),
- 'changed.owl.carousel': $.proxy(function(e) {
- if (e.namespace && e.property.name === 'position' && this._playing) {
- this.stop();
- }
- }, this),
- 'prepared.owl.carousel': $.proxy(function(e) {
- if (!e.namespace) {
- return;
- }
-
- var $element = $(e.content).find('.owl-video');
-
- if ($element.length) {
- $element.css('display', 'none');
- this.fetch($element, $(e.content));
- }
- }, this)
- };
-
- // set default options
- this._core.options = $.extend({}, Video.Defaults, this._core.options);
-
- // register event handlers
- this._core.$element.on(this._handlers);
-
- this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
- this.play(e);
- }, this));
- };
-
- /**
- * Default options.
- * @public
- */
- Video.Defaults = {
- video: false,
- videoHeight: false,
- videoWidth: false
- };
-
- /**
- * Gets the video ID and the type (YouTube/Vimeo/vzaar only).
- * @protected
- * @param {jQuery} target - The target containing the video data.
- * @param {jQuery} item - The item containing the video.
- */
- Video.prototype.fetch = function(target, item) {
- var type = (function() {
- if (target.attr('data-vimeo-id')) {
- return 'vimeo';
- } else if (target.attr('data-vzaar-id')) {
- return 'vzaar'
- } else {
- return 'youtube';
- }
- })(),
- id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),
- width = target.attr('data-width') || this._core.settings.videoWidth,
- height = target.attr('data-height') || this._core.settings.videoHeight,
- url = target.attr('href');
-
- if (url) {
-
- /*
- Parses the id's out of the following urls (and probably more):
- https://www.youtube.com/watch?v=:id
- https://youtu.be/:id
- https://vimeo.com/:id
- https://vimeo.com/channels/:channel/:id
- https://vimeo.com/groups/:group/videos/:id
- https://app.vzaar.com/videos/:id
-
- Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F
- */
-
- id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
-
- if (id[3].indexOf('youtu') > -1) {
- type = 'youtube';
- } else if (id[3].indexOf('vimeo') > -1) {
- type = 'vimeo';
- } else if (id[3].indexOf('vzaar') > -1) {
- type = 'vzaar';
- } else {
- throw new Error('Video URL not supported.');
- }
- id = id[6];
- } else {
- throw new Error('Missing video URL.');
- }
-
- this._videos[url] = {
- type: type,
- id: id,
- width: width,
- height: height
- };
-
- item.attr('data-video', url);
-
- this.thumbnail(target, this._videos[url]);
- };
-
- /**
- * Creates video thumbnail.
- * @protected
- * @param {jQuery} target - The target containing the video data.
- * @param {Object} info - The video info object.
- * @see `fetch`
- */
- Video.prototype.thumbnail = function(target, video) {
- var tnLink,
- icon,
- path,
- dimensions = video.width && video.height ? 'width:' + video.width + 'px;height:' + video.height + 'px;' : '',
- customTn = target.find('img'),
- srcType = 'src',
- lazyClass = '',
- settings = this._core.settings,
- create = function(path) {
- icon = '';
-
- if (settings.lazyLoad) {
- tnLink = $('',{
- "class": 'owl-video-tn ' + lazyClass,
- "srcType": path
- });
- } else {
- tnLink = $( '', {
- "class": "owl-video-tn",
- "style": 'opacity:1;background-image:url(' + path + ')'
- });
- }
- target.after(tnLink);
- target.after(icon);
- };
-
- // wrap video content into owl-video-wrapper div
- target.wrap( $( '', {
- "class": "owl-video-wrapper",
- "style": dimensions
- }));
-
- if (this._core.settings.lazyLoad) {
- srcType = 'data-src';
- lazyClass = 'owl-lazy';
- }
-
- // custom thumbnail
- if (customTn.length) {
- create(customTn.attr(srcType));
- customTn.remove();
- return false;
- }
-
- if (video.type === 'youtube') {
- path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
- create(path);
- } else if (video.type === 'vimeo') {
- $.ajax({
- type: 'GET',
- url: '//vimeo.com/api/v2/video/' + video.id + '.json',
- jsonp: 'callback',
- dataType: 'jsonp',
- success: function(data) {
- path = data[0].thumbnail_large;
- create(path);
- }
- });
- } else if (video.type === 'vzaar') {
- $.ajax({
- type: 'GET',
- url: '//vzaar.com/api/videos/' + video.id + '.json',
- jsonp: 'callback',
- dataType: 'jsonp',
- success: function(data) {
- path = data.framegrab_url;
- create(path);
- }
- });
- }
- };
-
- /**
- * Stops the current video.
- * @public
- */
- Video.prototype.stop = function() {
- this._core.trigger('stop', null, 'video');
- this._playing.find('.owl-video-frame').remove();
- this._playing.removeClass('owl-video-playing');
- this._playing = null;
- this._core.leave('playing');
- this._core.trigger('stopped', null, 'video');
- };
-
- /**
- * Starts the current video.
- * @public
- * @param {Event} event - The event arguments.
- */
- Video.prototype.play = function(event) {
- var target = $(event.target),
- item = target.closest('.' + this._core.settings.itemClass),
- video = this._videos[item.attr('data-video')],
- width = video.width || '100%',
- height = video.height || this._core.$stage.height(),
- html,
- iframe;
-
- if (this._playing) {
- return;
- }
-
- this._core.enter('playing');
- this._core.trigger('play', null, 'video');
-
- item = this._core.items(this._core.relative(item.index()));
-
- this._core.reset(item.index());
-
- html = $( '' );
- html.attr( 'height', height );
- html.attr( 'width', width );
- if (video.type === 'youtube') {
- html.attr( 'src', '//www.youtube.com/embed/' + video.id + '?autoplay=1&rel=0&v=' + video.id );
- } else if (video.type === 'vimeo') {
- html.attr( 'src', '//player.vimeo.com/video/' + video.id + '?autoplay=1' );
- } else if (video.type === 'vzaar') {
- html.attr( 'src', '//view.vzaar.com/' + video.id + '/player?autoplay=true' );
- }
-
- iframe = $(html).wrap( '' ).insertAfter(item.find('.owl-video'));
-
- this._playing = item.addClass('owl-video-playing');
- };
-
- /**
- * Checks whether an video is currently in full screen mode or not.
- * @todo Bad style because looks like a readonly method but changes members.
- * @protected
- * @returns {Boolean}
- */
- Video.prototype.isInFullScreen = function() {
- var element = document.fullscreenElement || document.mozFullScreenElement ||
- document.webkitFullscreenElement;
-
- return element && $(element).parent().hasClass('owl-video-frame');
- };
-
- /**
- * Destroys the plugin.
- */
- Video.prototype.destroy = function() {
- var handler, property;
-
- this._core.$element.off('click.owl.video');
-
- for (handler in this._handlers) {
- this._core.$element.off(handler, this._handlers[handler]);
- }
- for (property in Object.getOwnPropertyNames(this)) {
- typeof this[property] != 'function' && (this[property] = null);
- }
- };
-
- $.fn.owlCarousel.Constructor.Plugins.Video = Video;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * Animate Plugin
- * @version 2.3.4
- * @author Bartosz Wojciechowski
- * @author David Deutsch
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates the animate plugin.
- * @class The Navigation Plugin
- * @param {Owl} scope - The Owl Carousel
- */
- var Animate = function(scope) {
- this.core = scope;
- this.core.options = $.extend({}, Animate.Defaults, this.core.options);
- this.swapping = true;
- this.previous = undefined;
- this.next = undefined;
-
- this.handlers = {
- 'change.owl.carousel': $.proxy(function(e) {
- if (e.namespace && e.property.name == 'position') {
- this.previous = this.core.current();
- this.next = e.property.value;
- }
- }, this),
- 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
- if (e.namespace) {
- this.swapping = e.type == 'translated';
- }
- }, this),
- 'translate.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
- this.swap();
- }
- }, this)
- };
-
- this.core.$element.on(this.handlers);
- };
-
- /**
- * Default options.
- * @public
- */
- Animate.Defaults = {
- animateOut: false,
- animateIn: false
- };
-
- /**
- * Toggles the animation classes whenever an translations starts.
- * @protected
- * @returns {Boolean|undefined}
- */
- Animate.prototype.swap = function() {
-
- if (this.core.settings.items !== 1) {
- return;
- }
-
- if (!$.support.animation || !$.support.transition) {
- return;
- }
-
- this.core.speed(0);
-
- var left,
- clear = $.proxy(this.clear, this),
- previous = this.core.$stage.children().eq(this.previous),
- next = this.core.$stage.children().eq(this.next),
- incoming = this.core.settings.animateIn,
- outgoing = this.core.settings.animateOut;
-
- if (this.core.current() === this.previous) {
- return;
- }
-
- if (outgoing) {
- left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
- previous.one($.support.animation.end, clear)
- .css( { 'left': left + 'px' } )
- .addClass('animated owl-animated-out')
- .addClass(outgoing);
- }
-
- if (incoming) {
- next.one($.support.animation.end, clear)
- .addClass('animated owl-animated-in')
- .addClass(incoming);
- }
- };
-
- Animate.prototype.clear = function(e) {
- $(e.target).css( { 'left': '' } )
- .removeClass('animated owl-animated-out owl-animated-in')
- .removeClass(this.core.settings.animateIn)
- .removeClass(this.core.settings.animateOut);
- this.core.onTransitionEnd();
- };
-
- /**
- * Destroys the plugin.
- * @public
- */
- Animate.prototype.destroy = function() {
- var handler, property;
-
- for (handler in this.handlers) {
- this.core.$element.off(handler, this.handlers[handler]);
- }
- for (property in Object.getOwnPropertyNames(this)) {
- typeof this[property] != 'function' && (this[property] = null);
- }
- };
-
- $.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * Autoplay Plugin
- * @version 2.3.4
- * @author Bartosz Wojciechowski
- * @author Artus Kolanowski
- * @author David Deutsch
- * @author Tom De Caluwé
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
-
- /**
- * Creates the autoplay plugin.
- * @class The Autoplay Plugin
- * @param {Owl} scope - The Owl Carousel
- */
- var Autoplay = function(carousel) {
- /**
- * Reference to the core.
- * @protected
- * @type {Owl}
- */
- this._core = carousel;
-
- /**
- * The autoplay timeout id.
- * @type {Number}
- */
- this._call = null;
-
- /**
- * Depending on the state of the plugin, this variable contains either
- * the start time of the timer or the current timer value if it's
- * paused. Since we start in a paused state we initialize the timer
- * value.
- * @type {Number}
- */
- this._time = 0;
-
- /**
- * Stores the timeout currently used.
- * @type {Number}
- */
- this._timeout = 0;
-
- /**
- * Indicates whenever the autoplay is paused.
- * @type {Boolean}
- */
- this._paused = true;
-
- /**
- * All event handlers.
- * @protected
- * @type {Object}
- */
- this._handlers = {
- 'changed.owl.carousel': $.proxy(function(e) {
- if (e.namespace && e.property.name === 'settings') {
- if (this._core.settings.autoplay) {
- this.play();
- } else {
- this.stop();
- }
- } else if (e.namespace && e.property.name === 'position' && this._paused) {
- // Reset the timer. This code is triggered when the position
- // of the carousel was changed through user interaction.
- this._time = 0;
- }
- }, this),
- 'initialized.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.settings.autoplay) {
- this.play();
- }
- }, this),
- 'play.owl.autoplay': $.proxy(function(e, t, s) {
- if (e.namespace) {
- this.play(t, s);
- }
- }, this),
- 'stop.owl.autoplay': $.proxy(function(e) {
- if (e.namespace) {
- this.stop();
- }
- }, this),
- 'mouseover.owl.autoplay': $.proxy(function() {
- if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
- this.pause();
- }
- }, this),
- 'mouseleave.owl.autoplay': $.proxy(function() {
- if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
- this.play();
- }
- }, this),
- 'touchstart.owl.core': $.proxy(function() {
- if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
- this.pause();
- }
- }, this),
- 'touchend.owl.core': $.proxy(function() {
- if (this._core.settings.autoplayHoverPause) {
- this.play();
- }
- }, this)
- };
-
- // register event handlers
- this._core.$element.on(this._handlers);
-
- // set default options
- this._core.options = $.extend({}, Autoplay.Defaults, this._core.options);
- };
-
- /**
- * Default options.
- * @public
- */
- Autoplay.Defaults = {
- autoplay: false,
- autoplayTimeout: 5000,
- autoplayHoverPause: false,
- autoplaySpeed: false
- };
-
- /**
- * Transition to the next slide and set a timeout for the next transition.
- * @private
- * @param {Number} [speed] - The animation speed for the animations.
- */
- Autoplay.prototype._next = function(speed) {
- this._call = window.setTimeout(
- $.proxy(this._next, this, speed),
- this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read()
- );
-
- if (this._core.is('interacting') || document.hidden) {
- return;
- }
- this._core.next(speed || this._core.settings.autoplaySpeed);
- }
-
- /**
- * Reads the current timer value when the timer is playing.
- * @public
- */
- Autoplay.prototype.read = function() {
- return new Date().getTime() - this._time;
- };
-
- /**
- * Starts the autoplay.
- * @public
- * @param {Number} [timeout] - The interval before the next animation starts.
- * @param {Number} [speed] - The animation speed for the animations.
- */
- Autoplay.prototype.play = function(timeout, speed) {
- var elapsed;
-
- if (!this._core.is('rotating')) {
- this._core.enter('rotating');
- }
-
- timeout = timeout || this._core.settings.autoplayTimeout;
-
- // Calculate the elapsed time since the last transition. If the carousel
- // wasn't playing this calculation will yield zero.
- elapsed = Math.min(this._time % (this._timeout || timeout), timeout);
-
- if (this._paused) {
- // Start the clock.
- this._time = this.read();
- this._paused = false;
- } else {
- // Clear the active timeout to allow replacement.
- window.clearTimeout(this._call);
- }
-
- // Adjust the origin of the timer to match the new timeout value.
- this._time += this.read() % timeout - elapsed;
-
- this._timeout = timeout;
- this._call = window.setTimeout($.proxy(this._next, this, speed), timeout - elapsed);
- };
-
- /**
- * Stops the autoplay.
- * @public
- */
- Autoplay.prototype.stop = function() {
- if (this._core.is('rotating')) {
- // Reset the clock.
- this._time = 0;
- this._paused = true;
-
- window.clearTimeout(this._call);
- this._core.leave('rotating');
- }
- };
-
- /**
- * Pauses the autoplay.
- * @public
- */
- Autoplay.prototype.pause = function() {
- if (this._core.is('rotating') && !this._paused) {
- // Pause the clock.
- this._time = this.read();
- this._paused = true;
-
- window.clearTimeout(this._call);
- }
- };
-
- /**
- * Destroys the plugin.
- */
- Autoplay.prototype.destroy = function() {
- var handler, property;
-
- this.stop();
-
- for (handler in this._handlers) {
- this._core.$element.off(handler, this._handlers[handler]);
- }
- for (property in Object.getOwnPropertyNames(this)) {
- typeof this[property] != 'function' && (this[property] = null);
- }
- };
-
- $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
-
-})(window.Zepto || window.jQuery, window, document);
-
-/**
- * Navigation Plugin
- * @version 2.3.4
- * @author Artus Kolanowski
- * @author David Deutsch
- * @license The MIT License (MIT)
- */
-;(function($, window, document, undefined) {
- 'use strict';
-
- /**
- * Creates the navigation plugin.
- * @class The Navigation Plugin
- * @param {Owl} carousel - The Owl Carousel.
- */
- var Navigation = function(carousel) {
- /**
- * Reference to the core.
- * @protected
- * @type {Owl}
- */
- this._core = carousel;
-
- /**
- * Indicates whether the plugin is initialized or not.
- * @protected
- * @type {Boolean}
- */
- this._initialized = false;
-
- /**
- * The current paging indexes.
- * @protected
- * @type {Array}
- */
- this._pages = [];
-
- /**
- * All DOM elements of the user interface.
- * @protected
- * @type {Object}
- */
- this._controls = {};
-
- /**
- * Markup for an indicator.
- * @protected
- * @type {Array.}
- */
- this._templates = [];
-
- /**
- * The carousel element.
- * @type {jQuery}
- */
- this.$element = this._core.$element;
-
- /**
- * Overridden methods of the carousel.
- * @protected
- * @type {Object}
- */
- this._overrides = {
- next: this._core.next,
- prev: this._core.prev,
- to: this._core.to
- };
-
- /**
- * All event handlers.
- * @protected
- * @type {Object}
- */
- this._handlers = {
- 'prepared.owl.carousel': $.proxy(function(e) {
- if (e.namespace && this._core.settings.dotsData) {
- this._templates.push('
- You have not selected any Hot Sale Products.
- Please go to Product > Ecommerce tab and check the 'Hot Sale'
- checkbox. Please select a minimum of 12 products.
-
-
-
-
\ No newline at end of file
diff --git a/theme_boec/views/about.xml b/theme_boec/views/about.xml
deleted file mode 100644
index 5632d7330..000000000
--- a/theme_boec/views/about.xml
+++ /dev/null
@@ -1,373 +0,0 @@
-
-
-
-
- About
- qweb
- theme_boec.about_boec
-
-
-
-
-
-
-
-
-
-
- About
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Who We Are ?
-
-
- Contextual
- advertising programs
- sometimes have strict
- policies
- that need to be adhered
- too. Let’s take Google
- as an example.
-
-
-
-
-
-
- What We Do ?
-
-
- In this digital
- generation where
- information can be
- easily obtained within
- seconds, business cards
- still
- have retained their
- importance.
-
-
-
-
-
-
- Why Choose Us
-
-
- A two or three storey
- house is the ideal way
- to maximise the piece of
- earth on which our home
- sits, but
- for older or infirm
- people.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- “Going out after work?
- Take your butane curling
- iron with you to the
- office,
- heat it up, style your
- hair before you leave
- the office and you won’t
- have to make a trip back
- home.”
-
-
-
-
diff --git a/theme_coffee_shop/README.rst b/theme_coffee_shop/README.rst
deleted file mode 100644
index e76054617..000000000
--- a/theme_coffee_shop/README.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-.. image:: https://img.shields.io/badge/license-LGPL--3-blue.svg
- :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
- :alt: License: LGPL-3
-
-Theme Coffee Shop
-=================
-This is a theme for Coffee Shop.
-
-Installation
-============
-- www.odoo.com/documentation/17.0/setup/install.html
-- Install our custom addon
-
-License
--------
-General Public License, Version 3 (LGPL v3).
-(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
-
-Company
--------
-* `Cybrosys Techno Solutions `__
-
-Credits
--------
-Developer: (V18) Mufeeda Shirin,
- (V17) Sayanth M K, Sruthi M,
- (V16) Ayisha Sumayya K, Abbas P,
-Contact: odoo@cybrosys.com
-
-Contacts
---------
-* Mail Contact : odoo@cybrosys.com
-* Website : https://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: ``__
\ No newline at end of file
diff --git a/theme_coffee_shop/__init__.py b/theme_coffee_shop/__init__.py
deleted file mode 100644
index 50349d36a..000000000
--- a/theme_coffee_shop/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import controllers
-from . import models
diff --git a/theme_coffee_shop/__manifest__.py b/theme_coffee_shop/__manifest__.py
deleted file mode 100644
index 7202c6fb5..000000000
--- a/theme_coffee_shop/__manifest__.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-{
- 'name': 'Theme Coffee Shop',
- 'version': '18.0.1.0.0',
- 'category': 'Theme',
- 'summary': 'A Captivating and Practical E-Commerce Theme for Coffee Shops',
- 'description': 'Theme Coffee Shop brings a captivating and highly '
- 'practical theme crafted exclusively for e-Commerce'
- ' websites specializing in coffee shops. With its blend of '
- 'aesthetic appeal and user-centric design, this theme '
- 'provides an exceptional browsing and shopping experience '
- 'for coffee enthusiasts and customers.It encapsulates the'
- ' essence of a cozy coffee shop, translating it into an '
- 'engaging online platform for your coffee products and '
- 'accessories.',
- 'author': 'Cybrosys Techno Solutions',
- 'company': 'Cybrosys Techno Solutions',
- 'maintainer': 'Cybrosys Techno Solutions',
- 'website': 'https://www.cybrosys.com',
- 'depends': ['website_sale_wishlist', 'auth_oauth', 'website_sale', 'sale'],
- 'data': [
- 'data/website_menu_data.xml',
- 'views/header.xml',
- 'views/footer.xml',
- 'views/contact_us.xml',
- 'views/cart_lines.xml',
- 'views/shop.xml',
- 'views/about_us.xml',
- 'views/feature.xml',
- 'views/menu_page.xml',
- ],
- 'assets': {
- 'web.assets_frontend': [
- 'theme_coffee_shop/static/src/css/style.css',
- ],
- },
- 'images': ['static/description/banner.png',
- 'static/description/theme_screenshot.png'],
- 'license': 'LGPL-3',
- 'installable': True,
- 'auto_install': False,
- 'application': False
-}
diff --git a/theme_coffee_shop/controllers/__init__.py b/theme_coffee_shop/controllers/__init__.py
deleted file mode 100644
index 593735790..000000000
--- a/theme_coffee_shop/controllers/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import theme_coffee_shop
diff --git a/theme_coffee_shop/controllers/theme_coffee_shop.py b/theme_coffee_shop/controllers/theme_coffee_shop.py
deleted file mode 100644
index e17e958eb..000000000
--- a/theme_coffee_shop/controllers/theme_coffee_shop.py
+++ /dev/null
@@ -1,389 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from collections import defaultdict
-from datetime import datetime
-from itertools import product as cartesian_product
-from werkzeug.exceptions import NotFound
-from odoo import http, tools
-from odoo.http import request
-from odoo.osv import expression
-from odoo.tools import lazy
-from odoo.addons.website.controllers.main import QueryURL
-from odoo.addons.website.models.ir_http import sitemap_qs2dom
-
-
-class TableCompute(object):
- """This is used to compute the table"""
-
- def __init__(self):
- self.table = {}
-
- def _check_place(self, posx, posy, sizex, sizey, ppr):
- """Checks the position """
- res = True
- for y in range(sizey):
- for x in range(sizex):
- if posx + x >= ppr:
- res = False
- break
- row = self.table.setdefault(posy + y, {})
- if row.setdefault(posx + x) is not None:
- res = False
- break
- for x in range(ppr):
- self.table[posy + y].setdefault(x, None)
- return res
-
- def process(self, products, ppg=20, ppr=4):
- """Compute products positions on the grid"""
- minpos = 0
- index = 0
- maxy = 0
- x = 0
- for p in products:
- x = min(max(p.website_size_x, 1), ppr)
- y = min(max(p.website_size_y, 1), ppr)
- if index >= ppg:
- x = y = 1
-
- pos = minpos
- while not self._check_place(pos % ppr, pos // ppr, x, y, ppr):
- pos += 1
- # if 21st products (index 20) and the last line is full , break
- # (pos + 1.0) / ppr is the line where the product would be inserted
- # maxy is the number of existing lines
- # + 1.0 is because pos begins at 0,
- # thus pos 20 is actually the 21st block
- # and to force python to not round the division operation
- if index >= ppg and ((pos + 1.0) // ppr) > maxy:
- break
- if x == 1 and y == 1: # simple heuristic for CPU optimization
- minpos = pos // ppr
-
- for y2 in range(y):
- for x2 in range(x):
- self.table[(pos // ppr) + y2][(pos % ppr) + x2] = False
- self.table[pos // ppr][pos % ppr] = {
- 'product': p, 'x': x, 'y': y,
- 'ribbon': p.sudo().website_ribbon_id,
- }
- if index <= ppg:
- maxy = max(maxy, y + (pos // ppr))
- index += 1
-
- # Format table according to HTML needs
- rows = sorted(self.table.items())
- rows = [r[1] for r in rows]
- for col in range(len(rows)):
- cols = sorted(rows[col].items())
- x += len(cols)
- rows[col] = [r[1] for r in cols if r[1]]
-
- return rows
-
-
-class ThemeCoffeeMenu(http.Controller):
- """ Controller for rendering datas to menu page """
-
- #
- def _get_search_order(self, post):
- """ OrderBy will be parsed in orm and so no direct sql injection id is
- added to be sure that order is a unique sort key
- """
- order = post.get('order') or request.env[
- 'website'].get_current_website().shop_default_sort
- return 'is_published desc, %s, id desc' % order
-
- def _get_search_domain(self, search, category, attrib_values,
- search_in_description=True):
- """Function for getting search domain"""
- domains = [request.website.sale_product_domain()]
- if search:
- for srch in search.split(" "):
- subdomains = [
- [('name', 'ilike', srch)],
- [('product_variant_ids.default_code', 'ilike', srch)]
- ]
- if search_in_description:
- subdomains.append([('website_description', 'ilike', srch)])
- subdomains.append([('description_sale', 'ilike', srch)])
- domains.append(expression.OR(subdomains))
- if category:
- domains.append([('public_categ_ids', 'child_of', int(category))])
- if attrib_values:
- attrib = None
- ids = []
- for value in attrib_values:
- if not attrib:
- attrib = value[0]
- ids.append(value[1])
- elif value[0] == attrib:
- ids.append(value[1])
- else:
- domains.append([
- ('attribute_line_ids.value_ids', 'in', ids)])
- attrib = value[0]
- ids = [value[1]]
- if attrib:
- domains.append([('attribute_line_ids.value_ids', 'in', ids)])
- return expression.AND(domains)
-
- def sitemap_shop(env, rule, qs):
- """Sitemap for shop"""
- if not qs or qs.lower() in '/menu':
- yield {'loc': '/menu'}
- category = env['product.public.category']
- dom = sitemap_qs2dom(qs, '/menu/category', category._rec_name)
- dom += env['website'].get_current_website().website_domain()
- for cat in category.search(dom):
- loc = '/menu/category/%s' % env['ir.http']._slug(cat)
- if not qs or qs.lower() in loc:
- yield {'loc': loc}
-
- def _get_search_options(
- self, category=None, attrib_values=None, pricelist=None, **post):
- """Function for returning search options"""
- return {
- 'displayDescription': True,
- 'displayDetail': True,
- 'displayExtraDetail': True,
- 'displayExtraLink': True,
- 'displayImage': True,
- 'allowFuzzy': not post.get('noFuzzy'),
- 'category': str(category.id) if category else None,
- 'attrib_values': attrib_values,
- 'display_currency': pricelist.currency_id,
- }
-
- def _shop_lookup_products(self, attrib_set, options,
- post, search, website):
- """ No limit because attributes are obtained from complete
- product list"""
- product_count, details, fuzzy_search_term = website._search_with_fuzzy(
- "products_only", search, limit=None,
- order=self._get_search_order(post), options=options
- )
- search_result = details[0].get(
- 'results', request.env['product.template']
- ).with_context(bin_size=True)
- if attrib_set:
- attribute_values = request.env[
- 'product.attribute.value'].browse(attrib_set)
- values_per_attribute = defaultdict(
- lambda: request.env['product.attribute.value'])
- multi_value_attribute = False
- for value in attribute_values:
- values_per_attribute[value.attribute_id] |= value
- if len(values_per_attribute[value.attribute_id]) > 1:
- multi_value_attribute = True
-
- def filter_template(template, attribute_values_list):
- """Transform product.attribute.value to
- product.template.attribute.value """
- attribute_value_to_ptav = {}
- for ptav in \
- template.attribute_line_ids.product_template_value_ids:
- attribute_value_to_ptav[
- ptav.product_attribute_value_id] = ptav.id
- possible_combinations = False
- for attribute_values in attribute_values_list:
- ptav_ids = [attribute_value_to_ptav[val] for val in
- attribute_values if
- val in attribute_value_to_ptav]
- ptavs = request.env[
- 'product.template.attribute.value'].browse(ptav_ids)
- if len(ptavs) < len(attribute_values):
- continue
- if len(ptavs) == len(template.attribute_line_ids):
- if template._is_combination_possible(ptavs):
- return True
- elif len(ptavs) < len(template.attribute_line_ids):
- if len(attribute_values_list) == 1:
- possible_combinations = (
- template._get_possible_combinations(
- necessary_values=ptavs))
- if any(possible_combinations):
- return True
- if not possible_combinations:
- possible_combinations = (
- template._get_possible_combinations())
- for combination in possible_combinations:
- if ptavs.issubset(combination):
- return True
- return False
-
- if not multi_value_attribute:
- possible_attrib_values_list = [attribute_values]
- else:
- possible_attrib_values_list = [attribute_values] if not \
- multi_value_attribute else \
- [request.env['product.attribute.value']
- .browse([rec.id for rec in values]) for values in
- cartesian_product(*values_per_attribute.values())]
- search_result = search_result.filtered(
- lambda tmpl: filter_template(possible_attrib_values_list)
- )
- return fuzzy_search_term, product_count, search_result
-
- def _menu_get_query_url_kwargs(self, category, search, attrib=None,
- order=None):
- """Function for returning category, search, order and attribute"""
- return {
- 'category': category,
- 'search': search,
- 'attrib': attrib,
- 'order': order,
- }
-
- @http.route([
- '/menu',
- '/menu/page/',
- '/menu/category/',
- '/menu/category//page/',
- ], type='http', auth="public", website=True, sitemap=sitemap_shop)
- def menu_page(self, page=0, category=None, search='',
- min_price=0.0, max_price=0.0, ppg=False, **post):
- """Function for rendering menu page"""
- category_id = request.env['product.public.category']
- if category:
- category = category_id.search([('id', '=', int(category))],
- limit=1)
- if not category or not category.can_access_from_current_website():
- raise NotFound()
- else:
- category = category_id
- website = request.env['website'].get_current_website()
- if ppg:
- try:
- ppg = int(ppg)
- post['ppg'] = ppg
- except ValueError:
- ppg = False
- if not ppg:
- ppg = website.shop_ppg or 20
- ppr = website.shop_ppr or 4
- attrib_list = request.httprequest.args.getlist('attrib')
- attrib_values = [[int(rec) for rec in res.split("-")]
- for res in attrib_list if res
- ]
- attributes_ids = {res[0] for res in attrib_values}
- attrib_set = {res[1] for res in attrib_values}
- keep = QueryURL('/menu', **self._menu_get_query_url_kwargs(
- category and int(category), search, min_price, max_price, **post))
- now = datetime.timestamp(datetime.now())
- pricelist = request.env['product.pricelist']. \
- browse(request.session.get('website_sale_current_pl'))
- if not pricelist or request.session. \
- get('website_sale_pricelist_time', 0) < now - 60 * 60:
- pricelist = website.pricelist_id
- request.session['website_sale_pricelist_time'] = now
- request.session['website_sale_current_pl'] = pricelist.id
- request.update_context(pricelist=pricelist.id,
- partner=request.env.user.partner_id)
- url = "/menu"
- if search:
- post["search"] = search
- if attrib_list:
- post['attrib'] = attrib_list
- options = self._get_search_options(
- category=category,
- attrib_values=attrib_values,
- pricelist=pricelist,
- **post
- )
- fuzzy_search_term, product_count, search_product = \
- self._shop_lookup_products(
- attrib_set, options, post, search, website)
- website_domain = website.website_domain()
- categs_domain = [('parent_id', '=', False)] + website_domain
- if search:
- search_categories = category_id.search(
- [('product_tmpl_ids', 'in', search_product.ids)
- ] + website_domain
- ).parents_and_self
- categs_domain.append(('id', 'in', search_categories.ids))
- else:
- search_categories = category_id
- categs = lazy(lambda: category_id.search(categs_domain))
- if category:
- url = "/menu/category/%s" % request.env['ir.http']._slug(category)
- pager = website.pager(url=url, total=product_count, page=page,
- step=ppg, scope=7, url_args=post)
- offset = pager['offset']
- products = search_product[offset:offset + ppg]
- product_attribute = request.env['product.attribute']
- if products:
- attributes = lazy(lambda: product_attribute.search([
- ('product_tmpl_ids', 'in', search_product.ids),
- ('visibility', '=', 'visible'),
- ]))
- else:
- attributes = lazy(lambda: product_attribute.browse(attributes_ids))
- layout_mode = request.session.get('website_sale_shop_layout_mode')
- if not layout_mode:
- if website.viewref('website_sale.products_list_view').active:
- layout_mode = 'list'
- else:
- layout_mode = 'grid'
- request.session['website_sale_shop_layout_mode'] = layout_mode
- # Try to fetch geoip based fpos or fallback on partner one
- products_prices = lazy(
- lambda: products._get_sales_prices(website))
- values = {
- 'order': post.get('order', ''),
- 'category': category,
- 'attrib_values': attrib_values,
- 'attrib_set': attrib_set,
- 'pager': pager,
- 'pricelist': pricelist,
- 'add_qty': int(post.get('add_qty', 1)),
- 'products': products,
- 'search_product': search_product,
- 'search_count': product_count,
- 'bins': lazy(lambda: TableCompute().process(
- products, ppg, ppr)),
- 'ppg': ppg,
- 'ppr': ppr,
- 'categories': categs,
- 'attributes': attributes,
- 'keep': keep,
- 'search_categories_ids': search_categories.ids,
- 'products_prices': products_prices,
- 'get_product_prices': lambda product: lazy(
- lambda: products_prices[product.id]
- ),
- 'float_round': tools.float_round,
- }
- if category:
- values['main_object'] = category
- return request.render("theme_coffee_shop.coffee_menu", values)
-
- @http.route(['/menu/'], type='http',
- auth="public", website=True, sitemap=True)
- def product(self, product, category='', search='', **kwargs):
- """Function for rendering product page"""
- if not request.website.has_ecommerce_access():
- return request.redirect('/web/login')
- return request.render("website_sale.product",
- self._prepare_product_values(product, category,
- search, **kwargs))
diff --git a/theme_coffee_shop/data/website_menu_data.xml b/theme_coffee_shop/data/website_menu_data.xml
deleted file mode 100644
index 28e32baa5..000000000
--- a/theme_coffee_shop/data/website_menu_data.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
- About us
- /about
-
- 30
-
-
-
- Features
- /feature
-
- 35
-
-
-
- Menu
- /menu
-
- 15
-
-
-
diff --git a/theme_coffee_shop/doc/RELEASE_NOTES.md b/theme_coffee_shop/doc/RELEASE_NOTES.md
deleted file mode 100644
index 20f288bc5..000000000
--- a/theme_coffee_shop/doc/RELEASE_NOTES.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Module
-
-#### 01.11.2024
-#### Version 18.0.1.0.0
-#### ADD
-- Initial commit for Theme Coffee Shop
diff --git a/theme_coffee_shop/models/__init__.py b/theme_coffee_shop/models/__init__.py
deleted file mode 100644
index c28c6d0c3..000000000
--- a/theme_coffee_shop/models/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import theme_utils
diff --git a/theme_coffee_shop/models/theme_utils.py b/theme_coffee_shop/models/theme_utils.py
deleted file mode 100644
index 186eb0281..000000000
--- a/theme_coffee_shop/models/theme_utils.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import api, models
-
-
-class ThemeUtils(models.AbstractModel):
- """ Class for enable and disable templates when using coffee shop theme """
- _inherit = 'theme.utils'
-
- @api.model
- def _theme_coffee_shop_post_copy(self, mod):
- """ Enable and disable templates when using coffee shop theme """
- self.enable_view("website_sale.products_categories")
- self.enable_view("website_sale.products_description")
- self.enable_view("website_sale.products_design_card")
- self.enable_view("website_sale.products_add_to_cart")
- self.enable_view("website_sale.product_comment")
- self.enable_view("website_sale.option_collapse_products_categories")
- self.enable_view("website_sale.product_buy_now")
- self.disable_view("website_sale.products_categories_top")
- self.disable_view("website_sale.products_design_grid")
diff --git a/theme_coffee_shop/static/description/banner.png b/theme_coffee_shop/static/description/banner.png
deleted file mode 100644
index c35dd2632..000000000
Binary files a/theme_coffee_shop/static/description/banner.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/icon.png b/theme_coffee_shop/static/description/icon.png
deleted file mode 100644
index 6bbd868bd..000000000
Binary files a/theme_coffee_shop/static/description/icon.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/01.jpg b/theme_coffee_shop/static/description/img/01.jpg
deleted file mode 100644
index 30f869b07..000000000
Binary files a/theme_coffee_shop/static/description/img/01.jpg and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/1.jpg b/theme_coffee_shop/static/description/img/1.jpg
deleted file mode 100644
index 3786216cc..000000000
Binary files a/theme_coffee_shop/static/description/img/1.jpg and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/2.jpg b/theme_coffee_shop/static/description/img/2.jpg
deleted file mode 100644
index b61c026ca..000000000
Binary files a/theme_coffee_shop/static/description/img/2.jpg and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/3.jpg b/theme_coffee_shop/static/description/img/3.jpg
deleted file mode 100644
index 1179f093e..000000000
Binary files a/theme_coffee_shop/static/description/img/3.jpg and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/arrows-repeat.svg b/theme_coffee_shop/static/description/img/arrows-repeat.svg
deleted file mode 100644
index 94fb8f7f9..000000000
--- a/theme_coffee_shop/static/description/img/arrows-repeat.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/banner-bg-1.svg b/theme_coffee_shop/static/description/img/banner-bg-1.svg
deleted file mode 100644
index 7af9bab87..000000000
--- a/theme_coffee_shop/static/description/img/banner-bg-1.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/banner.png b/theme_coffee_shop/static/description/img/banner.png
deleted file mode 100644
index c35dd2632..000000000
Binary files a/theme_coffee_shop/static/description/img/banner.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/banner.svg b/theme_coffee_shop/static/description/img/banner.svg
deleted file mode 100644
index 3d4ed7a4a..000000000
--- a/theme_coffee_shop/static/description/img/banner.svg
+++ /dev/null
@@ -1,49 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/check.svg b/theme_coffee_shop/static/description/img/check.svg
deleted file mode 100644
index 8bc79333d..000000000
--- a/theme_coffee_shop/static/description/img/check.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/coffee_01.png b/theme_coffee_shop/static/description/img/coffee_01.png
deleted file mode 100644
index 71180d4f5..000000000
Binary files a/theme_coffee_shop/static/description/img/coffee_01.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/countactus.png b/theme_coffee_shop/static/description/img/countactus.png
deleted file mode 100644
index 4bd999d12..000000000
Binary files a/theme_coffee_shop/static/description/img/countactus.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/demo-1.png b/theme_coffee_shop/static/description/img/demo-1.png
deleted file mode 100644
index 7cb3d9146..000000000
Binary files a/theme_coffee_shop/static/description/img/demo-1.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/demo-2.png b/theme_coffee_shop/static/description/img/demo-2.png
deleted file mode 100644
index 97b2e5092..000000000
Binary files a/theme_coffee_shop/static/description/img/demo-2.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/demo-3.png b/theme_coffee_shop/static/description/img/demo-3.png
deleted file mode 100644
index fc6e38fa7..000000000
Binary files a/theme_coffee_shop/static/description/img/demo-3.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/demo-5.png b/theme_coffee_shop/static/description/img/demo-5.png
deleted file mode 100644
index 7308bf5e2..000000000
Binary files a/theme_coffee_shop/static/description/img/demo-5.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/feature-star.svg b/theme_coffee_shop/static/description/img/feature-star.svg
deleted file mode 100644
index a913270e8..000000000
--- a/theme_coffee_shop/static/description/img/feature-star.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/featuress.png b/theme_coffee_shop/static/description/img/featuress.png
deleted file mode 100644
index 3192dbc2a..000000000
Binary files a/theme_coffee_shop/static/description/img/featuress.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/gear.svg b/theme_coffee_shop/static/description/img/gear.svg
deleted file mode 100644
index ce383059d..000000000
--- a/theme_coffee_shop/static/description/img/gear.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/hire-odoo.svg b/theme_coffee_shop/static/description/img/hire-odoo.svg
deleted file mode 100644
index 9cfec4e44..000000000
--- a/theme_coffee_shop/static/description/img/hire-odoo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/life-ring-icon.svg b/theme_coffee_shop/static/description/img/life-ring-icon.svg
deleted file mode 100644
index b6c797ba1..000000000
--- a/theme_coffee_shop/static/description/img/life-ring-icon.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/odoo-consultancy.svg b/theme_coffee_shop/static/description/img/odoo-consultancy.svg
deleted file mode 100644
index c2c27e608..000000000
--- a/theme_coffee_shop/static/description/img/odoo-consultancy.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/odoo-licencing.svg b/theme_coffee_shop/static/description/img/odoo-licencing.svg
deleted file mode 100644
index 8a520b40f..000000000
--- a/theme_coffee_shop/static/description/img/odoo-licencing.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/patter.svg b/theme_coffee_shop/static/description/img/patter.svg
deleted file mode 100644
index 9b7b0d7cd..000000000
--- a/theme_coffee_shop/static/description/img/patter.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/phone-screenshots.jpg b/theme_coffee_shop/static/description/img/phone-screenshots.jpg
deleted file mode 100644
index 6a7ba94f2..000000000
Binary files a/theme_coffee_shop/static/description/img/phone-screenshots.jpg and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/puzzle-piece-icon.svg b/theme_coffee_shop/static/description/img/puzzle-piece-icon.svg
deleted file mode 100644
index ab5e56fa7..000000000
--- a/theme_coffee_shop/static/description/img/puzzle-piece-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/screenshot-1.svg b/theme_coffee_shop/static/description/img/screenshot-1.svg
deleted file mode 100644
index 72eeb921b..000000000
--- a/theme_coffee_shop/static/description/img/screenshot-1.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/screenshot-2.png b/theme_coffee_shop/static/description/img/screenshot-2.png
deleted file mode 100644
index e13b876da..000000000
Binary files a/theme_coffee_shop/static/description/img/screenshot-2.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/screenshot-3.png b/theme_coffee_shop/static/description/img/screenshot-3.png
deleted file mode 100644
index be1acdfd5..000000000
Binary files a/theme_coffee_shop/static/description/img/screenshot-3.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/screenshot-4.png b/theme_coffee_shop/static/description/img/screenshot-4.png
deleted file mode 100644
index 1d01e11fc..000000000
Binary files a/theme_coffee_shop/static/description/img/screenshot-4.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/screenshot-5.svg b/theme_coffee_shop/static/description/img/screenshot-5.svg
deleted file mode 100644
index 923e355bf..000000000
--- a/theme_coffee_shop/static/description/img/screenshot-5.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/screenshot-img.png b/theme_coffee_shop/static/description/img/screenshot-img.png
deleted file mode 100644
index a425d9ede..000000000
Binary files a/theme_coffee_shop/static/description/img/screenshot-img.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/screenshot-main.png b/theme_coffee_shop/static/description/img/screenshot-main.png
deleted file mode 100644
index 575f8e676..000000000
Binary files a/theme_coffee_shop/static/description/img/screenshot-main.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/template-white-them-1.png b/theme_coffee_shop/static/description/img/template-white-them-1.png
deleted file mode 100644
index 8a51f2e57..000000000
Binary files a/theme_coffee_shop/static/description/img/template-white-them-1.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/theme_fuge.png b/theme_coffee_shop/static/description/img/theme_fuge.png
deleted file mode 100644
index 9f9c1a16b..000000000
Binary files a/theme_coffee_shop/static/description/img/theme_fuge.png and /dev/null differ
diff --git a/theme_coffee_shop/static/description/img/translate.svg b/theme_coffee_shop/static/description/img/translate.svg
deleted file mode 100644
index eea729542..000000000
--- a/theme_coffee_shop/static/description/img/translate.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/img/wrench-icon.svg b/theme_coffee_shop/static/description/img/wrench-icon.svg
deleted file mode 100644
index 4e0ce1d01..000000000
--- a/theme_coffee_shop/static/description/img/wrench-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_coffee_shop/static/description/index.html b/theme_coffee_shop/static/description/index.html
deleted file mode 100644
index 28aa4eb6a..000000000
--- a/theme_coffee_shop/static/description/index.html
+++ /dev/null
@@ -1,849 +0,0 @@
-
-
-
-
-
-
- app index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Supports:
-
- Community
-
-
- Enterprise
-
-
-
-
-
- Availability:
-
- Odoo
- Online
-
-
-
- Odoo.sh
-
-
- On
- Premise
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Our Features
-
-
The Theme Coffee Shop was created by Cybrosys
- Technology Solutions. This theme can be added to
- make a classy
- website for cafes, bistros, and restaurants.
- Additionally, if
- you own wineries, bakeries, burger joints, fast food
- chains, or
- recipe websites, you can use it. It's a complete
- food company
- theme, making it a fantastic option for both
- restaurants and
- food websites. This theme is the missing special
- ingredient for
- you to build irresistible websites.
-
-
-
-
It uses the collection of portfolio templates and
- powerful features to create a stylish portfolio for
- your
- business. Snippets can be used to create homepages
- that showcase
- your shop's drink menus and other offerings. Also,
- it features
- both common and unique short codes designed
- specifically for
- presentations. It might be useful for showcasing
- your company's
- identity and product offerings.
-
-
-
-
This theme contains everything from designed
- homepages, to shopping carts. It is compatible with
- Elementor
- and simple to drag and drop items. Quickly create
- any layout
- without any coding skills. Along with this theme ,
- it permits
- users to use third-party plugins also. This theme
- use the most
- recent iteration of a coffee shop's website. Both
- adaptable and
- user-friendly.
-
-
-
The shop display you products in a stylish
- way. It's displaying 4 products in a row, and it
- will attract your customers. Also, the Category
- side are customized in collapsible style.
- Display
- high quality images for your products
-
User-friendly interface for both desktop and
- mobile devices.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Theme Features
-
-
-
-
- HIGHLIGHT
-
Desktop View
-
Customizing and using our theme is
- effortless. With a simple
- drag-and-drop interface, you can
- create visually stunning
- webpages.
- Whether you're a novice or an
- experienced user, our intuitive
- design tools make the process
- seamless. Say goodbye to
- complicated
- setups and hello to hassle-free
- website customization. Elevate
- your
- online presence with ease using
- our
- user-friendly theme.
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Our awesome Premium Features.
-
Our expert baristas don’t just make coffee, they create works of art. From silky lattes to bold espressos, each cup is crafted with passion and precision..
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Let’s Talk Coffee
-
The Contact Us page should capture the warm, inviting, and cozy atmosphere of the café itself. The page should feel approachable, with a touch of personality that reflects the charm of your coffee shop
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
HomePage
-
Our homepage offers a clean, modern design with an inviting, cozy atmosphere that reflects the essence of our coffee shop. With an easy-to-navigate layout, stunning visuals, and a seamless user experience.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Infuse Your Website with the Warmth of a
- Coffee Shop
-
-
-
-
Give your coffee shop a digital makeover with a
- website that’s as smooth as your best brew.
- Optimized for desktop, tablet, or mobile, your site
- will combine stunning design with seamless
- functionality, offering visitors a visually pleasing
- and easy-to-navigate experience they’ll want to
- return to
-
-
High-Quality Visuals
-
Fast Load Times
-
Intuitive Navigation and User Experience
-
-
Responsive and Adaptive Design
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Designed for Mobile,
- Infused with Coffee Shop Vibes
-
-
-
-
Every detail of your website is brewed for
- perfection, delivering a seamless and user-friendly
- experience on any mobile device. Your customers will
- savor smooth navigation and rich visuals, just like
- their favorite coffee blend.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/theme_fuge/README.rst b/theme_fuge/README.rst
deleted file mode 100644
index 1a183d6b2..000000000
--- a/theme_fuge/README.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
- :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
- :alt: License: LGPL-3
-
-Theme Fuge
-==========
-* Design Web Pages with Theme Fuge
-
-Configuration
-============
- - www.odoo.com/documentation/17.0/setup/install.html
- - Install our custom addon
-
-Company
--------
-* `Cybrosys Techno Solutions `__
-
-License
--------
-General Public License, Version 3 (LGPL v3).
-(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
-
-Credits
--------
-* Developer: (V17) Swaraj R, Contact: odoo@cybrosys.com
- (V18) Athira K, Contact: odoo@cybrosys.com
-
-Contacts
---------
-* Mail Contact : odoo@cybrosys.com
-* Website : https://cybrosys.com
-
-Bug Tracker
------------
-Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
-
-Maintainer
---------
-This module is maintained by Cybrosys Technologies.
-
-For support and more information, please visit https://www.cybrosys.com
-
-.. image:: https://cybrosys.com/images/logo.png
- :target: https://cybrosys.com"
-
-Further information
-===================
-HTML Description: ``__
diff --git a/theme_fuge/__init__.py b/theme_fuge/__init__.py
deleted file mode 100644
index 50349d36a..000000000
--- a/theme_fuge/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import controllers
-from . import models
diff --git a/theme_fuge/__manifest__.py b/theme_fuge/__manifest__.py
deleted file mode 100644
index 459733aad..000000000
--- a/theme_fuge/__manifest__.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-{
- 'name': 'Theme Fuge',
- 'version': '18.0.1.0.0',
- 'category': 'Theme/eCommerce',
- 'summary': 'Design Web Pages with theme fuge',
- 'description': 'Theme Fuge is an attractive and modern eCommerce Website'
- ' theme',
- 'author': 'Cybrosys Techno Solutions',
- 'company': 'Cybrosys Techno Solutions',
- 'maintainer': 'Cybrosys Techno Solutions',
- 'website': "https://www.cybrosys.com",
- 'depends': ['website', 'website_sale_wishlist', 'website_blog'],
- 'data': [
- 'views/views.xml',
- 'views/shop_view.xml',
- 'views/shop_sidebar_view.xml',
- 'views/product_view.xml',
- 'views/blog.xml',
- 'views/popular_posts.xml',
- 'views/blog_details.xml',
- 'views/about.xml',
- 'views/contact.xml',
- 'views/footer.xml',
- 'views/snippets/banner.xml',
- 'views/snippets/shop_with_us.xml',
- 'views/snippets/offer_men.xml',
- 'views/snippets/offer_women.xml',
- 'views/snippets/product_section.xml',
- 'views/snippets/latest_blogs.xml',
- 'views/snippets/customer_review.xml',
- 'views/snippets/subscribe.xml',
- ],
- 'assets': {
- 'web.assets_frontend': [
- 'theme_fuge/static/src/css/style.css',
- 'theme_fuge/static/src/css/owl.carousel.min.css',
- 'theme_fuge/static/src/css/owl.theme.default.min.css',
- 'theme_fuge/static/src/js/product.js',
- ],
- },
- "images": [
- "static/description/banner.jpg",
- "static/description/theme_screenshot.jpg",
- ],
- 'license': 'LGPL-3',
- 'installable': True,
- 'auto_install': False,
- 'application': False,
-}
diff --git a/theme_fuge/controllers/__init__.py b/theme_fuge/controllers/__init__.py
deleted file mode 100644
index c05a61c02..000000000
--- a/theme_fuge/controllers/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import main
-from . import popular_post
diff --git a/theme_fuge/controllers/main.py b/theme_fuge/controllers/main.py
deleted file mode 100644
index 844d353e5..000000000
--- a/theme_fuge/controllers/main.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo.addons.website_sale.controllers.main import WebsiteSale
-from odoo import http, fields
-from odoo.http import request
-
-
-class MainProduct(http.Controller):
- """Class MainProduct with function get_main_product to fetch
- main product and return to corresponding template"""
- @http.route('/get_main_product', auth="public", type='json',
- website=True)
- def get_main_product(self):
- """Function returns the main products values to the
- product_section snippet"""
- main_products = request.env['product.template'].sudo().search(
- [('website_published', '=', True)],
- order='create_date asc', limit=8)
- values = {
- 'main_products': main_products,
- }
- response = http.Response(template='theme_fuge.product_snippet_section',
- qcontext=values)
- return response.render()
-
-
-class WebsiteBlog(http.Controller):
- """Class WebsiteBlog with function get_blog_post to fetch
- main blog and return to corresponding template"""
- @http.route('/get_blog_post', auth="public", type='json',
- website=True)
- def get_blog_post(self):
- """Function returns the value of latest blog to
- the snippet od template id latest_blog"""
- posts = request.env['blog.post'].sudo().search(
- [('website_published', '=', True),
- ('post_date', '<=', fields.Datetime.now())],
- order='published_date desc', limit=4)
- values = {
- 'posts_recent': posts,
- }
- response = http.Response(template='theme_fuge.latest_blog_section',
- qcontext=values)
- return response.render()
-
-
-class WebsiteContactUs(http.Controller):
- """Class WebsiteContactUs to with defined route to render contact us
- thanks template when successful contact is created"""
- @http.route('/contactus-thank-you', type="http", website=True,
- auth='public')
- def create_contact_us(self, **kw):
- """this function related to the above controller renders the template
- contactus_thanks after successful submission of contact us form"""
- return request.render("website.contactus_thanks", {})
-
-
-class WebsiteProductComparison(WebsiteSale):
- """Class WebsiteProductComparison with defined function to check
- the comparison settings is enabled in website config settings"""
- @http.route()
- def shop(self, **post):
- """Extracts the value of the module_website_sale_comparison field from
- the fetched configuration settings. This represents a boolean
- indicating whether product comparison is enabled or not"""
- res = super().shop(**post)
- res_config_settings = request.env['res.config.settings'].sudo().search(
- [], limit=1, order='id desc')
- boolean_product_comparison = (
- res_config_settings.module_website_sale_comparison)
- res.qcontext.update(
- {'boolean_product_comparison': boolean_product_comparison})
- return res
diff --git a/theme_fuge/controllers/popular_post.py b/theme_fuge/controllers/popular_post.py
deleted file mode 100644
index 6b244101a..000000000
--- a/theme_fuge/controllers/popular_post.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import http, fields
-from odoo.http import request
-from odoo.osv import expression
-from odoo.addons.website_blog.controllers.main import WebsiteBlog
-
-
-class WebsiteBlogInherit(WebsiteBlog):
- """Class WebsiteBlogInherit with multiple routes to fetch blog related
- data using function blog and blog_post"""
-
- @http.route([
- '/blog',
- '/blog/page/',
- '/blog/tag/',
- '/blog/tag//page/',
- '''/blog/''',
- '''/blog//page/''',
- '''/blog//tag/''',
- '''/blog//tag//page/''',
- ], type='http', auth="public", website=True, sitemap=True)
- def blog(self, blog=None, tag=None, page=1, search=None, **opt):
- """On user choosing blog filters in the website blogs this function
- returns the blog of count 3 on order published_date descending"""
- limit = 3
- order = 'published_date desc'
- dom = expression.AND([
- [('website_published', '=', True),
- ('post_date', '<=', fields.Datetime.now())],
- request.website.website_domain()
- ])
- posts = request.env['blog.post'].search(dom, limit=limit, order=order)
- res = super(WebsiteBlogInherit, self).blog(blog=blog, tag=tag, page=1,
- search=search, **opt)
- res.qcontext.update({'posts_popular': posts})
- return res
-
- @http.route(['''/blog//''', ],
- type='http', auth="public", website=True, sitemap=True)
- def blog_post(self, blog, blog_post, tag_id=None, page=1,
- enable_editor=None, **post):
- """This function returns the popular top 3 blogs to the
- corresponding template of order published_date descending"""
- limit = 3
- order = 'published_date desc'
- dom = expression.AND([
- [('website_published', '=', True),
- ('post_date', '<=', fields.Datetime.now())],
- request.website.website_domain()
- ])
- posts = request.env['blog.post'].search(dom, limit=limit, order=order)
- res = super(WebsiteBlogInherit, self).blog_post(blog, blog_post,
- tag_id=tag_id, page=1,
- enable_editor=None,
- **post)
- res.qcontext.update({'posts_popular': posts})
- return res
diff --git a/theme_fuge/doc/RELEASE_NOTES.md b/theme_fuge/doc/RELEASE_NOTES.md
deleted file mode 100644
index 98c4ab08e..000000000
--- a/theme_fuge/doc/RELEASE_NOTES.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Module
-
-#### 04.11.2024
-#### Version 18.0.1.0.0
-#### ADD
-- Initial commit for Theme Fuge
diff --git a/theme_fuge/models/__init__.py b/theme_fuge/models/__init__.py
deleted file mode 100644
index 2735fa970..000000000
--- a/theme_fuge/models/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from . import theme_fuge
diff --git a/theme_fuge/models/theme_fuge.py b/theme_fuge/models/theme_fuge.py
deleted file mode 100644
index 816e3e47a..000000000
--- a/theme_fuge/models/theme_fuge.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-from odoo import models
-
-
-class FugeTheme(models.AbstractModel):
- """Class FugeTheme inherited them.utils with function _fuge_theme_post_copy
- for manipulating views"""
- _inherit = 'theme.utils'
-
- def _fuge_theme_post_copy(self, mod):
- """Views are manipulated related to the blog post some of them are
- enabled and some of them are disabled"""
- self.enable_view('website_blog.opt_blog_sidebar_show')
- self.enable_view('website_blog.opt_blog_list_view')
- self.disable_view('website_blog.opt_posts_loop_show_author')
- self.disable_view('website_sale.add_grid_or_list_option')
- self.disable_view('website_sale.products_list_view')
diff --git a/theme_fuge/static/description/banner.jpg b/theme_fuge/static/description/banner.jpg
deleted file mode 100644
index fcfad38f3..000000000
Binary files a/theme_fuge/static/description/banner.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/icon.png b/theme_fuge/static/description/icon.png
deleted file mode 100644
index 9f9c1a16b..000000000
Binary files a/theme_fuge/static/description/icon.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/1.jpg b/theme_fuge/static/description/img/1.jpg
deleted file mode 100644
index 3786216cc..000000000
Binary files a/theme_fuge/static/description/img/1.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/img/2.jpg b/theme_fuge/static/description/img/2.jpg
deleted file mode 100644
index 2221e5b76..000000000
Binary files a/theme_fuge/static/description/img/2.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/img/3.jpg b/theme_fuge/static/description/img/3.jpg
deleted file mode 100644
index 1179f093e..000000000
Binary files a/theme_fuge/static/description/img/3.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/img/Banner-1.jpg b/theme_fuge/static/description/img/Banner-1.jpg
deleted file mode 100644
index c90962e0b..000000000
Binary files a/theme_fuge/static/description/img/Banner-1.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/img/Banner-2.jpg b/theme_fuge/static/description/img/Banner-2.jpg
deleted file mode 100644
index fcfad38f3..000000000
Binary files a/theme_fuge/static/description/img/Banner-2.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/img/arrows-repeat.svg b/theme_fuge/static/description/img/arrows-repeat.svg
deleted file mode 100644
index 94fb8f7f9..000000000
--- a/theme_fuge/static/description/img/arrows-repeat.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/banner-bg-1.svg b/theme_fuge/static/description/img/banner-bg-1.svg
deleted file mode 100644
index 7af9bab87..000000000
--- a/theme_fuge/static/description/img/banner-bg-1.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/banner.svg b/theme_fuge/static/description/img/banner.svg
deleted file mode 100644
index 3d4ed7a4a..000000000
--- a/theme_fuge/static/description/img/banner.svg
+++ /dev/null
@@ -1,49 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/check.svg b/theme_fuge/static/description/img/check.svg
deleted file mode 100644
index 8bc79333d..000000000
--- a/theme_fuge/static/description/img/check.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/demo-1.png b/theme_fuge/static/description/img/demo-1.png
deleted file mode 100644
index 7cb3d9146..000000000
Binary files a/theme_fuge/static/description/img/demo-1.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/demo-2.png b/theme_fuge/static/description/img/demo-2.png
deleted file mode 100644
index 97b2e5092..000000000
Binary files a/theme_fuge/static/description/img/demo-2.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/demo-3.png b/theme_fuge/static/description/img/demo-3.png
deleted file mode 100644
index fc6e38fa7..000000000
Binary files a/theme_fuge/static/description/img/demo-3.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/demo-5.png b/theme_fuge/static/description/img/demo-5.png
deleted file mode 100644
index 7308bf5e2..000000000
Binary files a/theme_fuge/static/description/img/demo-5.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/feature-star.svg b/theme_fuge/static/description/img/feature-star.svg
deleted file mode 100644
index a913270e8..000000000
--- a/theme_fuge/static/description/img/feature-star.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/gear.svg b/theme_fuge/static/description/img/gear.svg
deleted file mode 100644
index ce383059d..000000000
--- a/theme_fuge/static/description/img/gear.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/hire-odoo.svg b/theme_fuge/static/description/img/hire-odoo.svg
deleted file mode 100644
index 9cfec4e44..000000000
--- a/theme_fuge/static/description/img/hire-odoo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/life-ring-icon.svg b/theme_fuge/static/description/img/life-ring-icon.svg
deleted file mode 100644
index b6c797ba1..000000000
--- a/theme_fuge/static/description/img/life-ring-icon.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/odoo-consultancy.svg b/theme_fuge/static/description/img/odoo-consultancy.svg
deleted file mode 100644
index c2c27e608..000000000
--- a/theme_fuge/static/description/img/odoo-consultancy.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/odoo-licencing.svg b/theme_fuge/static/description/img/odoo-licencing.svg
deleted file mode 100644
index 8a520b40f..000000000
--- a/theme_fuge/static/description/img/odoo-licencing.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/patter.svg b/theme_fuge/static/description/img/patter.svg
deleted file mode 100644
index 9b7b0d7cd..000000000
--- a/theme_fuge/static/description/img/patter.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/phone-screenshots.jpg b/theme_fuge/static/description/img/phone-screenshots.jpg
deleted file mode 100644
index 6a7ba94f2..000000000
Binary files a/theme_fuge/static/description/img/phone-screenshots.jpg and /dev/null differ
diff --git a/theme_fuge/static/description/img/puzzle-piece-icon.svg b/theme_fuge/static/description/img/puzzle-piece-icon.svg
deleted file mode 100644
index ab5e56fa7..000000000
--- a/theme_fuge/static/description/img/puzzle-piece-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/screenshot-1.svg b/theme_fuge/static/description/img/screenshot-1.svg
deleted file mode 100644
index 72eeb921b..000000000
--- a/theme_fuge/static/description/img/screenshot-1.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/screenshot-2.png b/theme_fuge/static/description/img/screenshot-2.png
deleted file mode 100644
index e13b876da..000000000
Binary files a/theme_fuge/static/description/img/screenshot-2.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/screenshot-3.png b/theme_fuge/static/description/img/screenshot-3.png
deleted file mode 100644
index be1acdfd5..000000000
Binary files a/theme_fuge/static/description/img/screenshot-3.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/screenshot-4.png b/theme_fuge/static/description/img/screenshot-4.png
deleted file mode 100644
index 1d01e11fc..000000000
Binary files a/theme_fuge/static/description/img/screenshot-4.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/screenshot-5.svg b/theme_fuge/static/description/img/screenshot-5.svg
deleted file mode 100644
index 923e355bf..000000000
--- a/theme_fuge/static/description/img/screenshot-5.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/screenshot-img.png b/theme_fuge/static/description/img/screenshot-img.png
deleted file mode 100644
index a425d9ede..000000000
Binary files a/theme_fuge/static/description/img/screenshot-img.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/screenshot-main.png b/theme_fuge/static/description/img/screenshot-main.png
deleted file mode 100644
index 575f8e676..000000000
Binary files a/theme_fuge/static/description/img/screenshot-main.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/theme_fuge.png b/theme_fuge/static/description/img/theme_fuge.png
deleted file mode 100644
index 9f9c1a16b..000000000
Binary files a/theme_fuge/static/description/img/theme_fuge.png and /dev/null differ
diff --git a/theme_fuge/static/description/img/translate.svg b/theme_fuge/static/description/img/translate.svg
deleted file mode 100644
index eea729542..000000000
--- a/theme_fuge/static/description/img/translate.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_fuge/static/description/img/wrench-icon.svg b/theme_fuge/static/description/img/wrench-icon.svg
deleted file mode 100644
index 4e0ce1d01..000000000
--- a/theme_fuge/static/description/img/wrench-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/theme_fuge/static/description/index.html b/theme_fuge/static/description/index.html
deleted file mode 100644
index 1c5eaae35..000000000
--- a/theme_fuge/static/description/index.html
+++ /dev/null
@@ -1,685 +0,0 @@
-
-
-
-
-
-
- app index
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Supports:
-
- Community
-
-
- Enterprise
-
-
-
-
-
- Availability:
-
- Odoo Online
-
-
- Odoo.sh
-
-
- On Premise
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Our Features
-
-
info includes 300+ elements that you may need to create website without
- external plugins.
User-friendly interface for both desktop and mobile devices.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Theme Features
-
-
-
-
- HIGHLIGHT
-
Shop Smarter, Live Better
-
Find exactly what you’re looking for in our
- easy-to-navigate online store. Secure payments,
- fast delivery, and great deals—shopping made simple.
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Your Digital Guide to Success
-
Browse through our expert articles, how-to guides,
- and helpful tips to navigate today’s fast-paced world.
- Our blog helps you stay informed and empowered in every area of life.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Transform Your Website into a
- Visual Masterpiece
-
-
-
-
Unlock the full potential of your online presence with a stunning website design.
- Whether viewed on desktop, tablet, or mobile, your site will look incredible and function seamlessly.
- Delight visitors with a visually striking,
- user-friendly interface that keeps them coming back.
-
-
High-Quality Visuals
-
Fast Load Times
-
Intuitive Navigation and User Experience
-
Responsive and Adaptive Design
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Designed for Mobile,
- Built to Impress
-
-
-
-
Every detail of your website is crafted to deliver
- a stunning, user-friendly experience on any mobile device.
- Your customers will love the seamless navigation and clear visuals.
Excepteur sint occaecat non proident, sunt in culpa quis. Phasellus lacinia id erat eu
- ullamcorper.
- Nunc id ipsum fringilla, gravida felis vitae. Phasellus lacinia id, sunt in culpa quis.
- Phasellus lacinia
-
- Excepteur sint occaecat non proident, sunt in culpa quis.
- Phasellus lacinia id erat eu ullamcorper. Nunc id ipsum fringilla.
-
Excepteur sint occaecat non proident, sunt in culpa quis. Phasellus lacinia id erat
- eu ullamcorper.
- Nunc id ipsum fringilla, gravida felis vitae. Phasellus lacinia id, sunt in culpa
- quis.
- Phasellus lacinia
- Excepteur sint occaecat non proident, sunt in culpa quis.
- Phasellus lacinia id erat eu ullamcorper. Nunc id ipsum fringilla.
-
- Change the Color of the Theme by Clicking the Icon:
-
-
Customize your Vista Backend Theme effortlessly. Simply click on the color icon to start changing the appearance.
-
-
-
-
-
-
-
- Select Your Preferred Color:
-
-
Choose from a range of colors to personalize the look of your theme. The intuitive dropdown allows for easy selection and instant updates.
-
-
-
-
-
-
-
- Green Theme Example:
-
-
Experience a fresh, clean interface with the Green Theme option, providing a smooth and pleasing user experience.
-
-
-
-
-
- Black Theme Example:
-
-
Experience a fresh, clean interface with the Black Theme option, providing a smooth and pleasing user experience..
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Minimal, Colorful Login Screen
-
A sleek and vibrant login screen designed for a seamless and visually appealing user experience.
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Discuss
-
A reimagined Discuss page with an enhanced and modern interface.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Responsive Layout
-
A fully responsive design that adapts to different devices, ensuring easy management and access from desktops, tablets, and mobile phones.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Modified App Drawer
-
An updated app drawer designed to improve navigation across multiple applications with a streamlined and intuitive layout.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Tree View
-
A streamlined Tree View featuring a clean and organized layout with modernized font styles for improved readability.
-
-
-
-
-
-
-
-
-
-
-
-
- HIGHLIGHT
-
Custom Form view
-
An enhanced Form View with a sleek design and updated fonts, offering a clean and intuitive interface for better user interaction.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fully Responsive
- Layout.
-
-
-
-
Now take advantage of everything your dashboard has to offer even on the go. Our
- design are now fully responsive, enabling you to view and manage everything from the comfort of your
- mobile device.
-
-
Fully responsive
-
Fly-out hamburger menu on the left
-
Fits perfectly to all screen sizes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kanban View
- Layout
-
-
-
-
The Vista Backend Theme V18 provides a fully enhanced Kanban View and Kanban Group View. With its section-wise separated stages, the theme delivers an aesthetically pleasing and well-organized design, ensuring your content tiles stand out. It offers a clean, modern layout with a refreshed color scheme and customized fonts.
-
-
Stages are Separated in View
-
New Color Combination
-
Modified Font
-
Clean Layout
-
Buttons with New Colors
-
Full Screen View
-
-
-
-
-
-
-
-
-
-
-
-
-
- List View
- Layout
-
-
-
-
Vista Backend Theme V18 Gives You The Fully Modified List View. This Table Design Gives You More Beauty for Your Odoo Backend. It will Give You a Clean Layout with the New Color Combination and a Modified Font.
-
-
List View
-
Stages are Separated in View
-
New Color Combination
-
Modified Font
-
Clean Layout
-
Buttons with New Colors
-
Full Screen View
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form View
- Layout
-
-
-
-
The Vista Backend Theme V18 provides a fully enhanced Kanban View and Kanban Group View. Its section-wise separated stages offer a smooth and intuitive experience, giving your content tiles a standout, refined design. The theme ensures a clean, modern layout with a fresh color combination and customized fonts, making the overall interface visually appealing and easy to navigate.