From 26093941a30df81d1771630d2bd02e3e94034bcb Mon Sep 17 00:00:00 2001 From: AjmalCybro Date: Thu, 3 Nov 2022 11:30:20 +0530 Subject: [PATCH] Nov 3 [ADD] : Initial Commit 'backend_theme_infinito' --- backend_theme_infinito/README.rst | 41 + backend_theme_infinito/__init__.py | 24 + backend_theme_infinito/__manifest__.py | 97 ++ .../controllers/__init__.py | 23 + .../controllers/base_pwa.py | 55 + backend_theme_infinito/controllers/main.py | 232 +++ backend_theme_infinito/doc/RELEASE_NOTES.md | 7 + backend_theme_infinito/icon_hooks.py | 158 ++ backend_theme_infinito/models/__init__.py | 26 + backend_theme_infinito/models/ir_http.py | 99 ++ .../models/menu_bookmark.py | 32 + backend_theme_infinito/models/recent_apps.py | 40 + .../models/res_config_settings.py | 109 ++ backend_theme_infinito/models/res_users.py | 50 + .../static/description/assets/hero.png | Bin 0 -> 356969 bytes .../static/description/assets/icons/check.png | Bin 0 -> 3676 bytes .../description/assets/icons/chevron.png | Bin 0 -> 310 bytes .../static/description/assets/icons/cogs.png | Bin 0 -> 1377 bytes .../description/assets/icons/consultation.png | Bin 0 -> 1458 bytes .../description/assets/icons/ecom-black.png | Bin 0 -> 576 bytes .../assets/icons/education-black.png | Bin 0 -> 733 bytes .../description/assets/icons/hotel-black.png | Bin 0 -> 911 bytes .../description/assets/icons/license.png | Bin 0 -> 1095 bytes .../description/assets/icons/lifebuoy.png | Bin 0 -> 1199 bytes .../assets/icons/manufacturing-black.png | Bin 0 -> 673 bytes .../description/assets/icons/pos-black.png | Bin 0 -> 878 bytes .../description/assets/icons/puzzle.png | Bin 0 -> 653 bytes .../assets/icons/restaurant-black.png | Bin 0 -> 905 bytes .../assets/icons/service-black.png | Bin 0 -> 839 bytes .../assets/icons/trading-black.png | Bin 0 -> 427 bytes .../description/assets/icons/training.png | Bin 0 -> 627 bytes .../description/assets/icons/update.png | Bin 0 -> 1225 bytes .../static/description/assets/icons/user.png | Bin 0 -> 988 bytes .../description/assets/icons/wrench.png | Bin 0 -> 1205 bytes .../assets/screenshots/bookmark.jpg | Bin 0 -> 264120 bytes .../assets/screenshots/calendar.jpg | Bin 0 -> 218858 bytes .../assets/screenshots/discuss.jpg | Bin 0 -> 201609 bytes .../assets/screenshots/infinito_adv.jpg | Bin 0 -> 177999 bytes .../assets/screenshots/infinito_landing.jpg | Bin 0 -> 156799 bytes .../assets/screenshots/infinito_styles.jpg | Bin 0 -> 178426 bytes .../assets/screenshots/kanban-1.jpg | Bin 0 -> 244459 bytes .../assets/screenshots/kanban-grp.png | Bin 0 -> 10456 bytes .../assets/screenshots/kanban-img.png | Bin 0 -> 15242 bytes .../description/assets/screenshots/kanban.jpg | Bin 0 -> 272892 bytes .../description/assets/screenshots/kanban.png | Bin 0 -> 10365 bytes .../assets/screenshots/kanban_grp.jpg | Bin 0 -> 201653 bytes .../description/assets/screenshots/list.jpg | Bin 0 -> 226013 bytes .../assets/screenshots/list_group.jpg | Bin 0 -> 191780 bytes .../assets/screenshots/resp-app_bar.gif | Bin 0 -> 1724998 bytes .../assets/screenshots/resp-sidebar.gif | Bin 0 -> 1036750 bytes .../assets/screenshots/sidebar-list.jpg | Bin 0 -> 207219 bytes .../assets/screenshots/sidebar-small.jpg | Bin 0 -> 152999 bytes .../assets/screenshots/sidebar.jpg | Bin 0 -> 202092 bytes .../assets/screenshots/user_edit.jpg | Bin 0 -> 170508 bytes .../static/description/banner.png | Bin 0 -> 132531 bytes .../static/description/icon.png | Bin 0 -> 10873 bytes .../static/description/index.html | 1050 ++++++++++++ .../static/description/theme_screenshot.png | Bin 0 -> 293996 bytes .../static/src/css/dynamic_styles.css | 0 .../static/src/css/layout.css | 34 + .../static/src/css/loaders.css | 128 ++ .../static/src/css/style.css | 1460 +++++++++++++++++ .../static/src/css/style2.css | 1198 ++++++++++++++ .../src/img/alignment/align-objects.svg | 1 + .../static/src/img/alignment/align-right.svg | 6 + .../static/src/img/alignment/center-align.svg | 49 + .../src/img/alignment/justification (1).svg | 55 + .../static/src/img/alignment/left-align.svg | 55 + .../static/src/img/alignment/right-align.svg | 55 + .../src/img/alignment/top-alignment.svg | 8 + .../static/src/img/brand_icon/infinity.svg | 2 + .../static/src/img/brightness.svg | 86 + .../static/src/img/center-align.png | Bin 0 -> 5038 bytes .../img/centered-text-of-alignment-button.png | 0 .../static/src/img/close.png | Bin 0 -> 527 bytes .../src/img/color_picker/color-picker.png | Bin 0 -> 10741 bytes .../static/src/img/downward-arrow.svg | 1 + .../static/src/img/eyedropper.svg | 1 + .../static/src/img/gear.svg | 1 + .../static/src/img/icons/apps.png | Bin 0 -> 29336 bytes .../static/src/img/icons/attendance.png | Bin 0 -> 30581 bytes .../static/src/img/icons/calendar.png | Bin 0 -> 35966 bytes .../static/src/img/icons/contact.png | Bin 0 -> 41185 bytes .../static/src/img/icons/crm.png | Bin 0 -> 44597 bytes .../static/src/img/icons/dashboard.png | Bin 0 -> 43001 bytes .../static/src/img/icons/discuss.png | Bin 0 -> 25833 bytes .../static/src/img/icons/elearning.png | Bin 0 -> 28657 bytes .../static/src/img/icons/employees.png | Bin 0 -> 48672 bytes .../static/src/img/icons/events.png | Bin 0 -> 26055 bytes .../static/src/img/icons/expense.png | Bin 0 -> 45481 bytes .../static/src/img/icons/fleet.png | Bin 0 -> 26666 bytes .../static/src/img/icons/inventory.png | Bin 0 -> 11299 bytes .../static/src/img/icons/invoice.png | Bin 0 -> 18726 bytes .../static/src/img/icons/link-tracker.png | Bin 0 -> 29563 bytes .../static/src/img/icons/live-chat.png | Bin 0 -> 50310 bytes .../static/src/img/icons/lunch.png | Bin 0 -> 24133 bytes .../static/src/img/icons/maintenance.png | Bin 0 -> 28422 bytes .../static/src/img/icons/manufacturing.png | Bin 0 -> 63312 bytes .../static/src/img/icons/marketing.png | Bin 0 -> 48666 bytes .../static/src/img/icons/members.png | Bin 0 -> 45812 bytes .../static/src/img/icons/notes.png | Bin 0 -> 18646 bytes .../static/src/img/icons/pos.png | Bin 0 -> 30067 bytes .../static/src/img/icons/project.png | Bin 0 -> 31097 bytes .../static/src/img/icons/purchase.png | Bin 0 -> 45156 bytes .../static/src/img/icons/recruitment.png | Bin 0 -> 50174 bytes .../static/src/img/icons/repairs.png | Bin 0 -> 58048 bytes .../static/src/img/icons/sales.png | Bin 0 -> 14652 bytes .../static/src/img/icons/settings.png | Bin 0 -> 36863 bytes .../static/src/img/icons/sms-marketing.png | Bin 0 -> 34668 bytes .../static/src/img/icons/surveys.png | Bin 0 -> 20937 bytes .../static/src/img/icons/time-off.png | Bin 0 -> 24562 bytes .../static/src/img/icons/timesheets.png | Bin 0 -> 43305 bytes .../static/src/img/icons/website.png | Bin 0 -> 54549 bytes .../static/src/img/infinito/1.svg | 5 + .../static/src/img/infinito/2.svg | 16 + .../static/src/img/infinito/3.svg | 8 + .../static/src/img/infinito/4.svg | 8 + .../static/src/img/infinito/align-center.svg | 7 + .../static/src/img/infinito/align-left.svg | 7 + .../static/src/img/infinito/align-right.svg | 7 + .../arrow,-direction,-down,-navigate.svg | 5 + .../down-filled-triangular-arrow (1).png | Bin 0 -> 419 bytes .../infinito/down-filled-triangular-arrow.png | Bin 0 -> 422 bytes .../static/src/img/infinito/help.svg | 7 + .../static/src/img/infinito/link.svg | 6 + .../static/src/img/justification.png | Bin 0 -> 4490 bytes .../static/src/img/justification.svg | 53 + .../static/src/img/landing_page/computer.svg | 1 + .../static/src/img/landing_page/discuss.svg | 1 + .../src/img/landing_page/file-paper.svg | 1 + .../static/src/img/landing_page/group.svg | 1 + .../static/src/img/landing_page/hammer.svg | 1 + .../src/img/landing_page/infinito_icons.zip | Bin 0 -> 180170 bytes .../static/src/img/landing_page/photo.jpg | Bin 0 -> 177729 bytes .../static/src/img/landing_page/search.svg | 1 + .../static/src/img/landing_page/time.svg | 1 + .../static/src/img/left-align.png | Bin 0 -> 4987 bytes .../src/img/left-text-alignment-option.png | Bin 0 -> 3632 bytes .../static/src/img/menu.png | Bin 0 -> 14068 bytes .../static/src/img/navbar/menu (1).png | Bin 0 -> 18957 bytes .../static/src/img/night-mode.svg | 1 + .../static/src/img/plus.svg | 1 + .../static/src/img/right-align (1).png | Bin 0 -> 4503 bytes .../static/src/img/right-align.png | Bin 0 -> 4981 bytes .../static/src/img/right-arrow.svg | 43 + .../static/src/img/right-text-alignment.png | Bin 0 -> 3605 bytes .../static/src/img/schedule-button.svg | 43 + .../static/src/img/section_bg/Dummy_bg.jpg | Bin 0 -> 2328723 bytes .../static/src/img/toggle.svg | 1 + .../static/src/img/top-alignment (1).svg | 1 + .../static/src/img/ui, 12.20.05 pm (2).xd | Bin 0 -> 412123 bytes .../static/src/img/user/user.jpg | Bin 0 -> 55445 bytes .../static/src/img/user/user.png | Bin 0 -> 64153 bytes .../static/src/js/AdvancedFeautres.js | 290 ++++ .../static/src/js/MenuBookmark.js | 67 + .../static/src/js/ThemeStudioMenu.js | 135 ++ .../static/src/js/ThemeStudioWidget.js | 27 + backend_theme_infinito/static/src/js/Tool.js | 82 + .../static/src/js/VisualEditor.js | 100 ++ .../static/src/js/change.js | 187 +++ .../static/src/js/loaders.js | 34 + .../static/src/js/navbar.js | 319 ++++ .../static/src/js/recentApps.js | 33 + .../static/src/js/sidebar.js | 81 + .../static/src/js/style_add.js | 54 + .../static/src/js/systray.js | 73 + .../static/src/js/theme_editor.js | 87 + .../static/src/js/theme_editor_sidebar.js | 245 +++ .../static/src/js/theme_studio_action.js | 32 + .../static/src/js/timepicker.js | 135 ++ .../static/src/js/variables.js | 100 ++ .../static/src/json/presets.json | 73 + .../static/src/scss/app_menu.scss | 255 +++ .../static/src/scss/extra_styles.scss | 240 +++ .../static/src/scss/responsive.scss | 268 +++ .../static/src/scss/sidebar.scss | 401 +++++ .../static/src/scss/theme_date_picker.scss | 68 + .../static/src/scss/theme_rtl.scss | 63 + .../static/src/scss/theme_styles.scss | 690 ++++++++ .../static/src/scss/theme_variables.scss | 144 ++ .../static/src/scss/views.scss | 93 ++ .../static/src/xml/MenuBookmark.xml | 21 + .../static/src/xml/ThemeStudioMenu.xml | 80 + .../static/src/xml/sidebar.xml | 177 ++ .../static/src/xml/studio_elements.xml | 62 + .../static/src/xml/style_add.xml | 12 + .../static/src/xml/systray.xml | 36 + .../static/src/xml/theme_editor.xml | 592 +++++++ .../static/src/xml/views.xml | 503 ++++++ backend_theme_infinito/views/assets.xml | 19 + backend_theme_infinito/views/base_pwa.xml | 17 + backend_theme_infinito/views/icons.xml | 11 + backend_theme_infinito/views/layout.xml | 8 + 193 files changed, 11323 insertions(+) create mode 100755 backend_theme_infinito/README.rst create mode 100644 backend_theme_infinito/__init__.py create mode 100644 backend_theme_infinito/__manifest__.py create mode 100644 backend_theme_infinito/controllers/__init__.py create mode 100644 backend_theme_infinito/controllers/base_pwa.py create mode 100644 backend_theme_infinito/controllers/main.py create mode 100644 backend_theme_infinito/doc/RELEASE_NOTES.md create mode 100644 backend_theme_infinito/icon_hooks.py create mode 100644 backend_theme_infinito/models/__init__.py create mode 100644 backend_theme_infinito/models/ir_http.py create mode 100644 backend_theme_infinito/models/menu_bookmark.py create mode 100644 backend_theme_infinito/models/recent_apps.py create mode 100644 backend_theme_infinito/models/res_config_settings.py create mode 100644 backend_theme_infinito/models/res_users.py create mode 100644 backend_theme_infinito/static/description/assets/hero.png create mode 100644 backend_theme_infinito/static/description/assets/icons/check.png create mode 100644 backend_theme_infinito/static/description/assets/icons/chevron.png create mode 100644 backend_theme_infinito/static/description/assets/icons/cogs.png create mode 100644 backend_theme_infinito/static/description/assets/icons/consultation.png create mode 100644 backend_theme_infinito/static/description/assets/icons/ecom-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/education-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/hotel-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/license.png create mode 100644 backend_theme_infinito/static/description/assets/icons/lifebuoy.png create mode 100644 backend_theme_infinito/static/description/assets/icons/manufacturing-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/pos-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/puzzle.png create mode 100644 backend_theme_infinito/static/description/assets/icons/restaurant-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/service-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/trading-black.png create mode 100644 backend_theme_infinito/static/description/assets/icons/training.png create mode 100644 backend_theme_infinito/static/description/assets/icons/update.png create mode 100644 backend_theme_infinito/static/description/assets/icons/user.png create mode 100644 backend_theme_infinito/static/description/assets/icons/wrench.png create mode 100644 backend_theme_infinito/static/description/assets/screenshots/bookmark.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/calendar.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/discuss.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/infinito_adv.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/infinito_landing.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/infinito_styles.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/kanban-1.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/kanban-grp.png create mode 100644 backend_theme_infinito/static/description/assets/screenshots/kanban-img.png create mode 100644 backend_theme_infinito/static/description/assets/screenshots/kanban.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/kanban.png create mode 100644 backend_theme_infinito/static/description/assets/screenshots/kanban_grp.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/list.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/list_group.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/resp-app_bar.gif create mode 100644 backend_theme_infinito/static/description/assets/screenshots/resp-sidebar.gif create mode 100644 backend_theme_infinito/static/description/assets/screenshots/sidebar-list.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/sidebar-small.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/sidebar.jpg create mode 100644 backend_theme_infinito/static/description/assets/screenshots/user_edit.jpg create mode 100644 backend_theme_infinito/static/description/banner.png create mode 100644 backend_theme_infinito/static/description/icon.png create mode 100644 backend_theme_infinito/static/description/index.html create mode 100644 backend_theme_infinito/static/description/theme_screenshot.png create mode 100644 backend_theme_infinito/static/src/css/dynamic_styles.css create mode 100644 backend_theme_infinito/static/src/css/layout.css create mode 100644 backend_theme_infinito/static/src/css/loaders.css create mode 100644 backend_theme_infinito/static/src/css/style.css create mode 100644 backend_theme_infinito/static/src/css/style2.css create mode 100644 backend_theme_infinito/static/src/img/alignment/align-objects.svg create mode 100644 backend_theme_infinito/static/src/img/alignment/align-right.svg create mode 100644 backend_theme_infinito/static/src/img/alignment/center-align.svg create mode 100644 backend_theme_infinito/static/src/img/alignment/justification (1).svg create mode 100644 backend_theme_infinito/static/src/img/alignment/left-align.svg create mode 100644 backend_theme_infinito/static/src/img/alignment/right-align.svg create mode 100644 backend_theme_infinito/static/src/img/alignment/top-alignment.svg create mode 100644 backend_theme_infinito/static/src/img/brand_icon/infinity.svg create mode 100644 backend_theme_infinito/static/src/img/brightness.svg create mode 100644 backend_theme_infinito/static/src/img/center-align.png create mode 100644 backend_theme_infinito/static/src/img/centered-text-of-alignment-button.png create mode 100644 backend_theme_infinito/static/src/img/close.png create mode 100644 backend_theme_infinito/static/src/img/color_picker/color-picker.png create mode 100644 backend_theme_infinito/static/src/img/downward-arrow.svg create mode 100644 backend_theme_infinito/static/src/img/eyedropper.svg create mode 100644 backend_theme_infinito/static/src/img/gear.svg create mode 100644 backend_theme_infinito/static/src/img/icons/apps.png create mode 100644 backend_theme_infinito/static/src/img/icons/attendance.png create mode 100644 backend_theme_infinito/static/src/img/icons/calendar.png create mode 100644 backend_theme_infinito/static/src/img/icons/contact.png create mode 100644 backend_theme_infinito/static/src/img/icons/crm.png create mode 100644 backend_theme_infinito/static/src/img/icons/dashboard.png create mode 100644 backend_theme_infinito/static/src/img/icons/discuss.png create mode 100644 backend_theme_infinito/static/src/img/icons/elearning.png create mode 100644 backend_theme_infinito/static/src/img/icons/employees.png create mode 100644 backend_theme_infinito/static/src/img/icons/events.png create mode 100644 backend_theme_infinito/static/src/img/icons/expense.png create mode 100644 backend_theme_infinito/static/src/img/icons/fleet.png create mode 100644 backend_theme_infinito/static/src/img/icons/inventory.png create mode 100644 backend_theme_infinito/static/src/img/icons/invoice.png create mode 100644 backend_theme_infinito/static/src/img/icons/link-tracker.png create mode 100644 backend_theme_infinito/static/src/img/icons/live-chat.png create mode 100644 backend_theme_infinito/static/src/img/icons/lunch.png create mode 100644 backend_theme_infinito/static/src/img/icons/maintenance.png create mode 100644 backend_theme_infinito/static/src/img/icons/manufacturing.png create mode 100644 backend_theme_infinito/static/src/img/icons/marketing.png create mode 100644 backend_theme_infinito/static/src/img/icons/members.png create mode 100644 backend_theme_infinito/static/src/img/icons/notes.png create mode 100644 backend_theme_infinito/static/src/img/icons/pos.png create mode 100644 backend_theme_infinito/static/src/img/icons/project.png create mode 100644 backend_theme_infinito/static/src/img/icons/purchase.png create mode 100644 backend_theme_infinito/static/src/img/icons/recruitment.png create mode 100644 backend_theme_infinito/static/src/img/icons/repairs.png create mode 100644 backend_theme_infinito/static/src/img/icons/sales.png create mode 100644 backend_theme_infinito/static/src/img/icons/settings.png create mode 100644 backend_theme_infinito/static/src/img/icons/sms-marketing.png create mode 100644 backend_theme_infinito/static/src/img/icons/surveys.png create mode 100644 backend_theme_infinito/static/src/img/icons/time-off.png create mode 100644 backend_theme_infinito/static/src/img/icons/timesheets.png create mode 100644 backend_theme_infinito/static/src/img/icons/website.png create mode 100644 backend_theme_infinito/static/src/img/infinito/1.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/2.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/3.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/4.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/align-center.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/align-left.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/align-right.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/arrow,-direction,-down,-navigate.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow (1).png create mode 100644 backend_theme_infinito/static/src/img/infinito/down-filled-triangular-arrow.png create mode 100644 backend_theme_infinito/static/src/img/infinito/help.svg create mode 100644 backend_theme_infinito/static/src/img/infinito/link.svg create mode 100644 backend_theme_infinito/static/src/img/justification.png create mode 100644 backend_theme_infinito/static/src/img/justification.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/computer.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/discuss.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/file-paper.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/group.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/hammer.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/infinito_icons.zip create mode 100644 backend_theme_infinito/static/src/img/landing_page/photo.jpg create mode 100644 backend_theme_infinito/static/src/img/landing_page/search.svg create mode 100644 backend_theme_infinito/static/src/img/landing_page/time.svg create mode 100644 backend_theme_infinito/static/src/img/left-align.png create mode 100644 backend_theme_infinito/static/src/img/left-text-alignment-option.png create mode 100644 backend_theme_infinito/static/src/img/menu.png create mode 100644 backend_theme_infinito/static/src/img/navbar/menu (1).png create mode 100644 backend_theme_infinito/static/src/img/night-mode.svg create mode 100644 backend_theme_infinito/static/src/img/plus.svg create mode 100644 backend_theme_infinito/static/src/img/right-align (1).png create mode 100644 backend_theme_infinito/static/src/img/right-align.png create mode 100644 backend_theme_infinito/static/src/img/right-arrow.svg create mode 100644 backend_theme_infinito/static/src/img/right-text-alignment.png create mode 100644 backend_theme_infinito/static/src/img/schedule-button.svg create mode 100644 backend_theme_infinito/static/src/img/section_bg/Dummy_bg.jpg create mode 100644 backend_theme_infinito/static/src/img/toggle.svg create mode 100644 backend_theme_infinito/static/src/img/top-alignment (1).svg create mode 100644 backend_theme_infinito/static/src/img/ui, 12.20.05 pm (2).xd create mode 100644 backend_theme_infinito/static/src/img/user/user.jpg create mode 100644 backend_theme_infinito/static/src/img/user/user.png create mode 100644 backend_theme_infinito/static/src/js/AdvancedFeautres.js create mode 100644 backend_theme_infinito/static/src/js/MenuBookmark.js create mode 100644 backend_theme_infinito/static/src/js/ThemeStudioMenu.js create mode 100644 backend_theme_infinito/static/src/js/ThemeStudioWidget.js create mode 100644 backend_theme_infinito/static/src/js/Tool.js create mode 100644 backend_theme_infinito/static/src/js/VisualEditor.js create mode 100644 backend_theme_infinito/static/src/js/change.js create mode 100644 backend_theme_infinito/static/src/js/loaders.js create mode 100644 backend_theme_infinito/static/src/js/navbar.js create mode 100644 backend_theme_infinito/static/src/js/recentApps.js create mode 100644 backend_theme_infinito/static/src/js/sidebar.js create mode 100644 backend_theme_infinito/static/src/js/style_add.js create mode 100644 backend_theme_infinito/static/src/js/systray.js create mode 100644 backend_theme_infinito/static/src/js/theme_editor.js create mode 100644 backend_theme_infinito/static/src/js/theme_editor_sidebar.js create mode 100644 backend_theme_infinito/static/src/js/theme_studio_action.js create mode 100644 backend_theme_infinito/static/src/js/timepicker.js create mode 100644 backend_theme_infinito/static/src/js/variables.js create mode 100644 backend_theme_infinito/static/src/json/presets.json create mode 100644 backend_theme_infinito/static/src/scss/app_menu.scss create mode 100644 backend_theme_infinito/static/src/scss/extra_styles.scss create mode 100644 backend_theme_infinito/static/src/scss/responsive.scss create mode 100644 backend_theme_infinito/static/src/scss/sidebar.scss create mode 100644 backend_theme_infinito/static/src/scss/theme_date_picker.scss create mode 100644 backend_theme_infinito/static/src/scss/theme_rtl.scss create mode 100644 backend_theme_infinito/static/src/scss/theme_styles.scss create mode 100644 backend_theme_infinito/static/src/scss/theme_variables.scss create mode 100644 backend_theme_infinito/static/src/scss/views.scss create mode 100644 backend_theme_infinito/static/src/xml/MenuBookmark.xml create mode 100644 backend_theme_infinito/static/src/xml/ThemeStudioMenu.xml create mode 100644 backend_theme_infinito/static/src/xml/sidebar.xml create mode 100644 backend_theme_infinito/static/src/xml/studio_elements.xml create mode 100644 backend_theme_infinito/static/src/xml/style_add.xml create mode 100644 backend_theme_infinito/static/src/xml/systray.xml create mode 100644 backend_theme_infinito/static/src/xml/theme_editor.xml create mode 100644 backend_theme_infinito/static/src/xml/views.xml create mode 100644 backend_theme_infinito/views/assets.xml create mode 100644 backend_theme_infinito/views/base_pwa.xml create mode 100644 backend_theme_infinito/views/icons.xml create mode 100644 backend_theme_infinito/views/layout.xml diff --git a/backend_theme_infinito/README.rst b/backend_theme_infinito/README.rst new file mode 100755 index 000000000..db9fd24b0 --- /dev/null +++ b/backend_theme_infinito/README.rst @@ -0,0 +1,41 @@ +Backend Theme Infinito +======================= +* Backend Theme Infinito module for Odoo 15 community editions + +Installation +============ + - www.odoo.com/documentation/15.0/setup/install.html + - Install our custom addon + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.odoo.com/documentation/user/15.0/legal/licenses/licenses.html) + +Company +------- +* 'Cybrosys Techno Solutions '__ + +Credits +------- +* 'Cybrosys Techno Solutions '__ + Author : Fraseen, Musthafa @Cybrosys + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: ``__ + diff --git a/backend_theme_infinito/__init__.py b/backend_theme_infinito/__init__.py new file mode 100644 index 000000000..d29f8c047 --- /dev/null +++ b/backend_theme_infinito/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from .icon_hooks import icons_post_init_hook +from . import controllers +from . import models diff --git a/backend_theme_infinito/__manifest__.py b/backend_theme_infinito/__manifest__.py new file mode 100644 index 000000000..3be20d501 --- /dev/null +++ b/backend_theme_infinito/__manifest__.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + "name": "Infinito Backend Theme", + "description": """Utmost and dynamic backend theme for Odoo 15""", + "summary": """The Backend Theme Infinito Is A Dynamic And Ultimate Theme + For Your Odoo V15. This Theme Will Give You A New Experience With Odoo. + Main Highlight Of The Theme Is You Can Dynamically Change The Colors, + Views, Buttons, Different Types Sidebar...Etc""", + "category": "Themes/Backend", + "version": "15.0.1.0.0", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + "depends": ['web'], + "data": [ + 'views/assets.xml', + 'views/layout.xml', + 'views/base_pwa.xml', + 'views/icons.xml', + ], + 'assets': { + 'web._assets_primary_variables': { + 'backend_theme_infinito/static/src/scss/theme_variables.scss', + }, + 'web.assets_backend': { + 'https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap', + '/backend_theme_infinito/static/src/css/style.css', + '/backend_theme_infinito/static/src/css/loaders.css', + 'backend_theme_infinito/static/src/scss/sidebar.scss', + 'backend_theme_infinito/static/src/scss/responsive.scss', + 'backend_theme_infinito/static/src/scss/theme_date_picker.scss', + 'backend_theme_infinito/static/src/scss/theme_styles.scss', + 'backend_theme_infinito/static/src/scss/theme_rtl.scss', + 'backend_theme_infinito/static/src/scss/app_menu.scss', + 'backend_theme_infinito/static/src/scss/extra_styles.scss', + 'backend_theme_infinito/static/src/scss/views.scss', + '/backend_theme_infinito/static/src/js/systray.js', + '/backend_theme_infinito/static/src/js/loaders.js', + '/backend_theme_infinito/static/src/js/theme_editor.js', + '/backend_theme_infinito/static/src/js/ThemeStudioWidget.js', + '/backend_theme_infinito/static/src/js/Tool.js', + '/backend_theme_infinito/static/src/js/VisualEditor.js', + '/backend_theme_infinito/static/src/js/change.js', + '/backend_theme_infinito/static/src/js/style_add.js', + '/backend_theme_infinito/static/src/js/sidebar.js', + '/backend_theme_infinito/static/src/js/navbar.js', + '/backend_theme_infinito/static/src/js/theme_editor_sidebar.js', + '/backend_theme_infinito/static/src/js/recentApps.js', + '/backend_theme_infinito/static/src/js/timepicker.js', + '/backend_theme_infinito/static/src/js/MenuBookmark.js', + '/backend_theme_infinito/static/src/js/AdvancedFeautres.js', + '/backend_theme_infinito/static/src/js/theme_studio_action.js', + '/backend_theme_infinito/static/src/js/ThemeStudioMenu.js', + '/backend_theme_infinito/static/src/js/variables.js', + }, + 'web.assets_qweb': { + '/backend_theme_infinito/static/src/xml/systray.xml', + '/backend_theme_infinito/static/src/xml/views.xml', + '/backend_theme_infinito/static/src/xml/theme_editor.xml', + '/backend_theme_infinito/static/src/xml/studio_elements.xml', + '/backend_theme_infinito/static/src/xml/ThemeStudioMenu.xml', + '/backend_theme_infinito/static/src/xml/style_add.xml', + '/backend_theme_infinito/static/src/xml/sidebar.xml', + '/backend_theme_infinito/static/src/xml/MenuBookmark.xml', + }, + }, + 'post_init_hook': 'icons_post_init_hook', + 'images': [ + 'static/description/banner.png', + 'static/description/theme_screenshot.png', + ], + 'license': 'LGPL-3', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/backend_theme_infinito/controllers/__init__.py b/backend_theme_infinito/controllers/__init__.py new file mode 100644 index 000000000..382fcf530 --- /dev/null +++ b/backend_theme_infinito/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import main +from . import base_pwa diff --git a/backend_theme_infinito/controllers/base_pwa.py b/backend_theme_infinito/controllers/base_pwa.py new file mode 100644 index 000000000..eb58b5966 --- /dev/null +++ b/backend_theme_infinito/controllers/base_pwa.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import json +from odoo import http +from odoo.http import request + + +class BasePwa(http.Controller): + def pwa_data(self): + # pwa_enable = request.env[ + # "ir.config_parameter"].sudo().get_param( + # "base_pwa.pwa_enable") + # if pwa_enable: + return { + 'short_name': 'Odoo', + 'name': 'Odoo-infinito', + 'description': 'PWA provided by backend theme infinito', + 'icons': [ + { + 'src': '/backend_theme_infinito/static/src/img/menu.png', + 'type': 'image/png', + 'sizes': '144x144', + 'purpose': 'any maskable' + }, + ], + 'start_url': 'http://cybrosys:8015/web', + 'background_color': 'white', + 'display': 'standalone', + 'theme_color': 'white', + } + + @http.route('/manifest/webmanifest', type='http', + auth='public', website=True, sitemap=False) + def base_pwa_data(self): + return request.make_response(json.dumps(self.pwa_data()), + headers=[('Content-Type', 'application/json;charset=utf-8')]) diff --git a/backend_theme_infinito/controllers/main.py b/backend_theme_infinito/controllers/main.py new file mode 100644 index 000000000..599b5dd39 --- /dev/null +++ b/backend_theme_infinito/controllers/main.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import json +import os +import re + +from odoo import http +from odoo.http import request + + +def minify_css(path): + """Minify css string""" + with open(path, 'r') as f: + css = f.read() + css = re.sub(r'/\*[\s\S]*?\*/', "", css) + css = re.sub(r'url\((["\'])([^)]*)\1\)', r'url(\2)', css) + css = re.sub(r'\s+', ' ', css) + css = re.sub(r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', + css) + css = re.sub(r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css) + rules = re.findall(r'([^{]+){([^}]*)}', css) + selectors_list = [] + css_values = {} + for rule in rules: + selector = rule[0] + content = rule[1] + if selector not in selectors_list: + selectors_list.append(selector) + css_values[selector] = content + else: + css_values[selector] = css_values[selector] + content + with open(path, 'w') as f: + selector_dict = {} + for selector in selectors_list: + rule = css_values[selector].split(';') + dict_rule = {} + for r in rule: + if r: + split_rule = r.split(':') + if len(split_rule) == 2: + dict_rule[split_rule[0].strip()] = split_rule[1] + selector_dict[selector] = dict_rule + f.write('/* This Styles are generated automatically by Theme Studio' + ' */\n') + for selector in selector_dict: + f.write(selector + '{') + for rule_data in selector_dict[selector]: + if rule_data != 'pointer-events': + if selector_dict[selector][rule_data].find( + '!important') == -1: + f.write(rule_data + ':' + + selector_dict[selector][rule_data] + + ' !important;') + else: + f.write(rule_data + ':' + + selector_dict[selector][rule_data] + ';') + f.write('}') + + +class ThemeStudio(http.Controller): + + @http.route(['/theme_studio/save_styles'], type="json") + def save_styles(self, changed_styles, object_class, hover=False): + """Create Dynamic Styles css file""" + changed_styles = json.loads(changed_styles) + working_dir = os.path.dirname(os.path.realpath(__file__)) + working_dir = working_dir.replace('/controllers', '') + file_path = working_dir + '/static/src/css/dynamic_styles.css' + style_file = open(file_path, 'a') + if os.stat(file_path).st_size == 0: + style_file.write('/* This file is generated automatically by ' + 'Theme Infinito */\n') + + style_file.write('\n.' + object_class + ':hover {\n') if hover else \ + style_file.write('\n.' + object_class + ' {\n') + for style in changed_styles: + style_file.write( + '\t' + style + ': ' + changed_styles[style] + ';\n') + style_file.write('}\n') + style_file.close() + minify_css(file_path) + return True + + @http.route(['/theme_studio/get_current_style'], type="json") + def get_current_style(self, selector): + working_dir = os.path.dirname(os.path.realpath(__file__)) + file_path = working_dir.replace('controllers', + 'static/src/css/dynamic_styles.css') + style_file = open(file_path, 'r') + css = style_file.read() + css = re.sub(r'/\*[\s\S]*?\*/', "", css) + css = re.sub(r'url\((["\'])([^)]*)\1\)', r'url(\2)', css) + css = re.sub(r'\s+', ' ', css) + css = re.sub(r'#([0-9a-f])\1([\da-f])\2([0-9a-f])\3(\s|;)', + r'#\1\2\3\4', css) + css = re.sub(r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css) + rules = re.findall(r'([^{]+){([^}]*)}', css) + for rule in rules: + selector_now = rule[0] + content = rule[1] + if selector == selector_now.strip(): + contents = content.split(';') + content = [] + for c in contents: + c = c.split(':') + if c[0] != '' and len(c) > 1: + content.append([c[0], c[1].strip().replace('!important', '')]) + return content + + return False + + @http.route(['/theme_studio/reset_to_default'], type="json") + def reset_to_default(self): + working_dir = os.path.dirname(os.path.realpath(__file__)) + file_path = working_dir.replace('controllers', + 'static/src/css/dynamic_styles.css') + style_file = open(file_path, 'w') + style_file.write('') + return True + + @http.route(['/theme_studio/set_advanced_data'], type="json") + def set_advanced_data(self, vals): + set_param = request.env['ir.config_parameter'].sudo().set_param + set_param('backend_theme_infinito.is_user_edit', vals['userEdit']) + set_param('backend_theme_infinito.is_sidebar_enabled', vals['sidebar']) + set_param('backend_theme_infinito.is_fullscreen_enabled', vals['fullscreen']) + set_param('backend_theme_infinito.is_sidebar_icon', vals['sidebarIcon']) + set_param('backend_theme_infinito.is_sidebar_name', vals['sidebarName']) + set_param('backend_theme_infinito.is_sidebar_company', vals['sidebarCompany']) + set_param('backend_theme_infinito.is_sidebar_user', vals['sidebarUser']) + set_param('backend_theme_infinito.is_recent_apps', vals['recentApps']) + set_param('backend_theme_infinito.is_fullscreen_app', vals['fullScreenApp']) + set_param('backend_theme_infinito.is_rtl', vals['infinitoRtl']) + set_param('backend_theme_infinito.is_dark', vals['infinitoDark']) + set_param('backend_theme_infinito.dark_mode', vals['infinitoDarkMode']) + set_param('backend_theme_infinito.dark_start', vals['infinitoDarkStart']) + set_param('backend_theme_infinito.dark_end', vals['infinitoDarkEnd']) + set_param('backend_theme_infinito.is_menu_bookmark', vals['infinitoBookmark']) + set_param('backend_theme_infinito.is_chameleon', vals['infinitoChameleon']) + + @http.route(['/theme_studio/set_advanced_data_user'], type="json") + def set_advanced_data_user(self, vals): + request.env.user.write({ + 'is_sidebar_enabled': vals['sidebar'], + 'is_fullscreen_enabled': vals['fullscreen'], + 'is_sidebar_icon': vals['sidebarIcon'], + 'is_sidebar_name': vals['sidebarName'], + 'is_sidebar_company': vals['sidebarCompany'], + 'is_sidebar_user': vals['sidebarUser'], + 'is_recent_apps': vals['recentApps'], + 'is_fullscreen_app': vals['fullScreenApp'], + 'is_rtl': vals['infinitoRtl'], + 'is_dark': vals['infinitoDark'], + 'dark_mode': vals['infinitoDarkMode'], + 'dark_start': vals['infinitoDarkStart'], + 'dark_end': vals['infinitoDarkEnd'], + 'is_menu_bookmark': vals['infinitoBookmark'], + 'loader_class': vals['loaderClass'], + 'is_chameleon': vals['infinitoChameleon'], + }) + + return True + + @http.route(['/theme_studio/add_recent_app'], type="json") + def add_recent_app(self, app): + recent_app = request.env['recent.apps'].sudo() + exist = recent_app.search([ + ('app_id', '=', int(app.get('appId'))), + ('user_id', '=', request.env.user.id) + ]) + exist.unlink() if exist else None + total_recent = recent_app.search([('user_id', '=', request.env.user.id)]) + if len(total_recent) > 4: + total_recent[0].unlink() + recent_app.create({ + 'app_id': int(app.get('appId')), + 'user_id': request.env.user.id + }) + + @http.route(['/theme_studio/get_recent_apps'], type="json") + def get_recent_apps(self): + recent_app = request.env['recent.apps'].sudo() + return recent_app.search_read([ + ('user_id', '=', request.env.user.id) + ]) + + @http.route(['/theme_studio/add_menu_bookmarks'], type="json") + def add_menu_bookmarks(self, menu): + menu_bookmark = request.env['infinito.menu.bookmark'].sudo() + menu_bookmark.create({ + 'action_id': int(menu.get('actionId')), + 'user_id': request.env.user.id, + 'url': menu.get('menuUrl'), + }) + + @http.route(['/theme_studio/remove_menu_bookmarks'], type="json") + def remove_menu_bookmarks(self, menu): + menu_bookmark = request.env['infinito.menu.bookmark'].sudo().search([ + ('action_id', '=', int(menu.get('actionId'))), + ('user_id', '=', request.env.user.id) + ]) + if menu_bookmark: + menu_bookmark.unlink() + + @http.route(['/theme_studio/get_presets'], type="json") + def get_presets(self): + working_dir = os.path.dirname(os.path.realpath(__file__)) + working_dir = working_dir.replace('/controllers', '') + file_path = working_dir + '/static/src/json/presets.json' + file = open(file_path, 'r') + presets = json.load(file) + + return presets diff --git a/backend_theme_infinito/doc/RELEASE_NOTES.md b/backend_theme_infinito/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..836222832 --- /dev/null +++ b/backend_theme_infinito/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 03.11.2022 +#### Version 15.0.1.0.0 +#### ADD +Initial Commit + diff --git a/backend_theme_infinito/icon_hooks.py b/backend_theme_infinito/icon_hooks.py new file mode 100644 index 000000000..2f7cfc29a --- /dev/null +++ b/backend_theme_infinito/icon_hooks.py @@ -0,0 +1,158 @@ +"""Hooks for Changing Menu Web_icon""" +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import base64 + +from odoo import api, SUPERUSER_ID +from odoo.modules import get_module_resource + + +def icons_post_init_hook(cr, registry): + """post init hook for changing module icons""" + env = api.Environment(cr, SUPERUSER_ID, {}) + menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)]) + + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'contact.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'link-tracker.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'dashboard.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'sales.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Invoicing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'invoice.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'inventory.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'purchase.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'calendar.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'crm.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Notes': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'notes.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'website.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'pos.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'manufacturing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'repairs.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'sms-marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'project.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'surveys.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'employees.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'recruitment.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'attendance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'time-off.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'expense.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'maintenance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'live-chat.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'lunch.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'fleet.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'timesheets.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'events.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'elearning.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'backend_theme_infinito', 'static', 'src', 'img', 'icons', 'members.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) diff --git a/backend_theme_infinito/models/__init__.py b/backend_theme_infinito/models/__init__.py new file mode 100644 index 000000000..d4276cb68 --- /dev/null +++ b/backend_theme_infinito/models/__init__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import res_config_settings +from . import res_users +from . import ir_http +from . import recent_apps +from . import menu_bookmark diff --git a/backend_theme_infinito/models/ir_http.py b/backend_theme_infinito/models/ir_http.py new file mode 100644 index 000000000..3cd55ce5f --- /dev/null +++ b/backend_theme_infinito/models/ir_http.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models + + +def float_to_time(time): + return '{0:02.0f}:{1:02.0f}'.format(*divmod(float(time) * 60, 60)) + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + res = super(IrHttp, self).session_info() + get_param = self.env['ir.config_parameter'].sudo().get_param + if self.env.user.has_group('base.group_user'): + user_edit = get_param( + 'backend_theme_infinito.is_user_edit', default=False) + res['userEdit'] = user_edit + if user_edit: + res['sidebar'] = self.env.user.is_sidebar_enabled + res['fullscreen'] = self.env.user.is_fullscreen_enabled + res['sidebarIcon'] = self.env.user.is_sidebar_icon + res['sidebarName'] = self.env.user.is_sidebar_name + res['sidebarCompany'] = self.env.user.is_sidebar_company + res['sidebarUser'] = self.env.user.is_sidebar_user + res['recentApps'] = self.env.user.is_recent_apps + res['fullScreenApp'] = self.env.user.is_fullscreen_app + res['infinitoRtl'] = self.env.user.is_rtl + res['infinitoDark'] = self.env.user.is_dark + res['infinitoDarkMode'] = self.env.user.dark_mode + res['infinitoDarkStart'] = float_to_time(self.env.user.dark_start) + res['infinitoDarkEnd'] = float_to_time(self.env.user.dark_end) + res['infinitoBookmark'] = self.env.user.is_menu_bookmark + res['loaderClass'] = self.env.user.loader_class + res['infinitoChameleon'] = self.env.user.is_chameleon + else: + res['sidebar'] = get_param( + 'backend_theme_infinito.is_sidebar_enabled', default=False) + res['fullscreen'] = get_param( + 'backend_theme_infinito.is_fullscreen_enabled', default=False) + res['sidebarIcon'] = get_param( + 'backend_theme_infinito.is_sidebar_icon', default=False) + res['sidebarName'] = get_param( + 'backend_theme_infinito.is_sidebar_name', default=False) + res['sidebarCompany'] = get_param( + 'backend_theme_infinito.is_sidebar_company', default=False) + res['sidebarUser'] = get_param( + 'backend_theme_infinito.is_sidebar_user', default=False) + res['recentApps'] = get_param( + 'backend_theme_infinito.is_recent_apps', default=False) + res['fullScreenApp'] = get_param( + 'backend_theme_infinito.is_fullscreen_app', default=False) + res['infinitoRtl'] = get_param( + 'backend_theme_infinito.is_rtl', default=False) + res['infinitoDark'] = get_param( + 'backend_theme_infinito.is_dark', default=False) + res['infinitoDarkMode'] = get_param( + 'backend_theme_infinito.dark_mode', default=False) + res['infinitoDarkStart'] = float_to_time(get_param( + 'backend_theme_infinito.dark_start', default=19.0)) + res['infinitoDarkEnd'] = float_to_time(get_param( + 'backend_theme_infinito.dark_end', default=5.0)) + res['infinitoBookmark'] = get_param( + 'backend_theme_infinito.is_menu_bookmark', default=False) + res['loaderClass'] = get_param( + 'backend_theme_infinito.loader_class', default=False) + res['infinitoChameleon'] = get_param( + 'backend_theme_infinito.is_chameleon', default=False) + menu_bookmark = self.env['infinito.menu.bookmark'].sudo(). \ + search([('user_id', '=', self.env.user.id)]) + list_bookmark = [] + for bookmark in menu_bookmark: + bkm = bookmark.read(['action_id', 'url', 'name'])[0] + bkm['short_name'] = bkm['name'][:2].upper() + list_bookmark.append(bkm) + res['infinitoBookmarks'] = menu_bookmark.action_id.ids + res['infinitoMenuBookmarks'] = list_bookmark + + return res diff --git a/backend_theme_infinito/models/menu_bookmark.py b/backend_theme_infinito/models/menu_bookmark.py new file mode 100644 index 000000000..87f8af1e4 --- /dev/null +++ b/backend_theme_infinito/models/menu_bookmark.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ModelName(models.Model): + _name = 'infinito.menu.bookmark' + _description = 'Menu Bookmark' + + name = fields.Char(related='action_id.name') + action_id = fields.Many2one('ir.actions.act_window') + url = fields.Text('Url') + user_id = fields.Many2one('res.users') diff --git a/backend_theme_infinito/models/recent_apps.py b/backend_theme_infinito/models/recent_apps.py new file mode 100644 index 000000000..eb9ab2b6b --- /dev/null +++ b/backend_theme_infinito/models/recent_apps.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models, api + + +class RecentApps(models.Model): + _name = 'recent.apps' + _description = 'Recent Apps' + + name = fields.Char(compute='_compute_icon', store=True) + app_id = fields.Integer() + icon = fields.Binary(compute='_compute_icon', store=True) + user_id = fields.Many2one('res.users') + + @api.depends('app_id') + def _compute_icon(self): + menu_ui = self.env['ir.ui.menu'] + for rec in self: + app = menu_ui.browse(rec.app_id) + rec.icon = app._compute_web_icon_data(app.web_icon) + rec.name = app.name diff --git a/backend_theme_infinito/models/res_config_settings.py b/backend_theme_infinito/models/res_config_settings.py new file mode 100644 index 000000000..1b19fe47c --- /dev/null +++ b/backend_theme_infinito/models/res_config_settings.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + is_user_edit = fields.Boolean('User edit', default=False) + is_sidebar_enabled = fields.Boolean('Sidebar Enabled', default=False) + is_fullscreen_enabled = fields.Boolean('Full screen Enabled', default=False) + is_sidebar_icon = fields.Boolean('Sidebar icon Enabled', default=True) + is_sidebar_name = fields.Boolean('Sidebar name Enabled', default=True) + is_sidebar_company = fields.Boolean('Sidebar Company Enabled', default=False) + is_sidebar_user = fields.Boolean('Sidebar User Enabled', default=False) + is_recent_apps = fields.Boolean('Recent Apps Enabled', default=False) + is_fullscreen_app = fields.Boolean('Full screen Apps Enabled', default=False) + is_rtl = fields.Boolean('Rtl Enabled', default=False) + is_dark = fields.Boolean('Dark mode Enabled', default=False) + is_menu_bookmark = fields.Boolean('Menu Bookmark mode Enabled', default=False) + is_chameleon = fields.Boolean('Chameleon mode Enabled', default=False) + dark_mode = fields.Selection([ + ('all', 'All'), + ('schedule', 'Schedule'), + ('auto', 'Automatic'), + ], default='all') + dark_start = fields.Float('Dark Start', default=19.0) + dark_end = fields.Float('Dark End', default=5.0) + loader_class = fields.Char('Loader', default='default') + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + get_param = self.env['ir.config_parameter'].sudo().get_param + res['is_user_edit'] = get_param('backend_theme_infinito.is_user_edit', default=False) + res['is_sidebar_enabled'] = get_param('backend_theme_infinito.is_sidebar_enabled', default=False) + res['is_fullscreen_enabled'] = get_param('backend_theme_infinito.is_fullscreen_enabled', default=False) + res['is_sidebar_icon'] = get_param('backend_theme_infinito.is_sidebar_icon', default=False) + res['is_sidebar_name'] = get_param('backend_theme_infinito.is_sidebar_name', default=False) + res['is_sidebar_company'] = get_param('backend_theme_infinito.is_sidebar_company', default=False) + res['is_sidebar_user'] = get_param('backend_theme_infinito.is_sidebar_user', default=False) + res['is_recent_apps'] = get_param('backend_theme_infinito.is_recent_apps', default=False) + res['is_rtl'] = get_param('backend_theme_infinito.is_rtl', default=False) + res['is_dark'] = get_param('backend_theme_infinito.is_dark', default=False) + res['is_menu_bookmark'] = get_param('backend_theme_infinito.is_menu_bookmark', default=False) + res['dark_mode'] = get_param('backend_theme_infinito.dark_mode', default='all') + res['dark_start'] = get_param('backend_theme_infinito.dark_start', default=19.0) + res['dark_end'] = get_param('backend_theme_infinito.dark_end', default=5.0) + res['loader_class'] = get_param('backend_theme_infinito.loader_class', default=5.0) + res['is_chameleon'] = get_param('backend_theme_infinito.is_chameleon', default=False) + + return res + + @api.model + def set_values(self): + set_param = self.env['ir.config_parameter'].sudo().set_param + set_param('backend_theme_infinito.is_user_edit', + self.is_user_edit) + set_param('backend_theme_infinito.is_sidebar_enabled', + self.is_sidebar_enabled) + set_param('backend_theme_infinito.is_fullscreen_enabled', + self.is_fullscreen_enabled) + set_param('backend_theme_infinito.is_sidebar_icon', + self.is_sidebar_icon) + set_param('backend_theme_infinito.is_sidebar_name', + self.is_sidebar_name) + set_param('backend_theme_infinito.is_sidebar_company', + self.is_sidebar_company) + set_param('backend_theme_infinito.is_sidebar_user', + self.is_sidebar_user) + set_param('backend_theme_infinito.is_recent_apps', + self.is_recent_apps) + set_param('backend_theme_infinito.is_rtl', + self.is_rtl) + set_param('backend_theme_infinito.is_dark', + self.is_dark) + set_param('backend_theme_infinito.dark_mode', + self.dark_mode) + set_param('backend_theme_infinito.dark_start', + self.dark_start) + set_param('backend_theme_infinito.dark_end', + self.dark_end) + set_param('backend_theme_infinito.is_menu_bookmark', + self.is_menu_bookmark) + set_param('backend_theme_infinito.loader_class', + self.loader_class) + set_param('backend_theme_infinito.is_chameleon', + self.is_chameleon) + + super(ResConfigSettings, self).set_values() diff --git a/backend_theme_infinito/models/res_users.py b/backend_theme_infinito/models/res_users.py new file mode 100644 index 000000000..575f99ee1 --- /dev/null +++ b/backend_theme_infinito/models/res_users.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class User(models.Model): + _inherit = 'res.users' + + is_sidebar_enabled = fields.Boolean('Sidebar Enabled', default=False) + is_fullscreen_enabled = fields.Boolean('Full screen Enabled', default=False) + is_sidebar_icon = fields.Boolean('Sidebar icon Enabled', default=True) + is_sidebar_name = fields.Boolean('Sidebar name Enabled', default=True) + is_sidebar_company = fields.Boolean('Sidebar Company Enabled', + default=False) + is_sidebar_user = fields.Boolean('Sidebar User Enabled', default=False) + is_recent_apps = fields.Boolean('Recent Apps Enabled', default=False) + is_fullscreen_app = fields.Boolean('Full screen Apps Enabled', + default=False) + is_rtl = fields.Boolean('Rtl Enabled', default=False) + is_dark = fields.Boolean('Dark mode Enabled', default=False) + is_menu_bookmark = fields.Boolean('Menu Bookmark mode Enabled', + default=False) + is_chameleon = fields.Boolean('Chameleon mode Enabled', default=False) + dark_mode = fields.Selection([ + ('all', 'All'), + ('schedule', 'Schedule'), + ('auto', 'Automatic'), + ], default='all') + dark_start = fields.Float('Dark Start', default=19.0) + dark_end = fields.Float('Dark End', default=5.0) + loader_class = fields.Char('Loader', default='default') diff --git a/backend_theme_infinito/static/description/assets/hero.png b/backend_theme_infinito/static/description/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..80b9a6c624897ba9bd87a8bce2c4e524ba2fad56 GIT binary patch literal 356969 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