Initial commit of Asset custom ui app
This commit is contained in:
commit
7d2c0d35a9
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
.DS_Store
|
||||||
|
*.pyc
|
||||||
|
*.egg-info
|
||||||
|
*.swp
|
||||||
|
tags
|
||||||
|
node_modules
|
||||||
|
__pycache__
|
||||||
7
README.md
Normal file
7
README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
## Asset Lite Custom Ui
|
||||||
|
|
||||||
|
custom app for modifying UI
|
||||||
|
|
||||||
|
#### License
|
||||||
|
|
||||||
|
mit
|
||||||
1
asset_lite_custom_ui/__init__.py
Normal file
1
asset_lite_custom_ui/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
__version__ = "0.0.1"
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
frappe.pages['modern-menu'].on_page_load = function(wrapper) {
|
||||||
|
var page = frappe.ui.make_app_page({
|
||||||
|
parent: wrapper,
|
||||||
|
title: 'Menu',
|
||||||
|
single_column: true
|
||||||
|
});
|
||||||
|
frappe.modern_menu.make(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
frappe.modern_menu ={
|
||||||
|
make(page){
|
||||||
|
// Get all items from side menu
|
||||||
|
let all_pages = frappe.workspaces;
|
||||||
|
|
||||||
|
// Create the HTML
|
||||||
|
let body = ``;
|
||||||
|
body +=`<div id="modern-menu" class="widget-group">
|
||||||
|
<div class="widget-group-head">
|
||||||
|
<div class="widget-group-title"></div>
|
||||||
|
</div>
|
||||||
|
<div class="widget-group-body grid-col-3">
|
||||||
|
`;
|
||||||
|
|
||||||
|
|
||||||
|
Object.values(all_pages)
|
||||||
|
.filter((page) => (page.parent_page == ""))
|
||||||
|
.forEach((item) => {
|
||||||
|
body += `
|
||||||
|
<div
|
||||||
|
class="widget widget-shadow desk-sidebar-item standard-sidebar-item menu-widget no-click"
|
||||||
|
data-widget-name="${item.title}">
|
||||||
|
<div class="widget-head">
|
||||||
|
<a class="widget-title" href="/app/${
|
||||||
|
item.public
|
||||||
|
? frappe.router.slug(item.title)
|
||||||
|
: "private/" + frappe.router.slug(item.title)
|
||||||
|
}" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span class="widget-title-text">${__(item.title)}</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
})
|
||||||
|
body +=`</div></div>`
|
||||||
|
|
||||||
|
// Append it to the page
|
||||||
|
$(frappe.render_template(body,this)).appendTo(page.main);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* <span class="widget-title-icon" item-icon=${item.icon || "folder-normal"}>
|
||||||
|
${
|
||||||
|
item.public
|
||||||
|
? frappe.utils.icon(item.icon || "folder-normal", "md")
|
||||||
|
: `<span class="indicator ${item.indicator_color}"></span>`
|
||||||
|
}
|
||||||
|
</span> */
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"content": null,
|
||||||
|
"creation": "2024-09-19 14:15:13.638500",
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Page",
|
||||||
|
"idx": 0,
|
||||||
|
"modified": "2024-09-20 15:37:55.472839",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Asset Lite Custom Ui",
|
||||||
|
"name": "modern-menu",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"page_name": "modern-menu",
|
||||||
|
"roles": [],
|
||||||
|
"script": null,
|
||||||
|
"standard": "Yes",
|
||||||
|
"style": null,
|
||||||
|
"system_page": 0,
|
||||||
|
"title": "Menu"
|
||||||
|
}
|
||||||
0
asset_lite_custom_ui/config/__init__.py
Normal file
0
asset_lite_custom_ui/config/__init__.py
Normal file
258
asset_lite_custom_ui/hooks.py
Normal file
258
asset_lite_custom_ui/hooks.py
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
app_name = "asset_lite_custom_ui"
|
||||||
|
app_title = "Asset Lite Custom Ui"
|
||||||
|
app_publisher = "SSPL"
|
||||||
|
app_description = "custom app for modifying UI"
|
||||||
|
app_email = "sonika123@gmail.com"
|
||||||
|
app_license = "mit"
|
||||||
|
|
||||||
|
app_include_css = ["/assets/asset_lite_custom_ui/css/theme.css",
|
||||||
|
"/assets/asset_lite_custom_ui/css/menu.css",]
|
||||||
|
|
||||||
|
app_include_js = ["/assets/asset_lite_custom_ui/js/theme.js",
|
||||||
|
"/assets/asset_lite_custom_ui/js/menu/router.js",
|
||||||
|
"/assets/asset_lite_custom_ui/js/menu/page.js",
|
||||||
|
"/assets/asset_lite_custom_ui/js/menu/workspace.js"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override_whitelisted_methods = {
|
||||||
|
"frappe.core.doctype.user.user.switch_theme": "asset_lite_custom_ui.overrides.switch_theme.switch_theme"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Apps
|
||||||
|
# ------------------
|
||||||
|
|
||||||
|
# required_apps = []
|
||||||
|
|
||||||
|
# Each item in the list will be shown as an app in the apps page
|
||||||
|
# add_to_apps_screen = [
|
||||||
|
# {
|
||||||
|
# "name": "asset_lite_custom_ui",
|
||||||
|
# "logo": "/assets/asset_lite_custom_ui/logo.png",
|
||||||
|
# "title": "Asset Lite Custom Ui",
|
||||||
|
# "route": "/asset_lite_custom_ui",
|
||||||
|
# "has_permission": "asset_lite_custom_ui.api.permission.has_app_permission"
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# Includes in <head>
|
||||||
|
# ------------------
|
||||||
|
|
||||||
|
# include js, css files in header of desk.html
|
||||||
|
# app_include_css = "/assets/asset_lite_custom_ui/css/asset_lite_custom_ui.css"
|
||||||
|
# app_include_js = "/assets/asset_lite_custom_ui/js/asset_lite_custom_ui.js"
|
||||||
|
|
||||||
|
# include js, css files in header of web template
|
||||||
|
# web_include_css = "/assets/asset_lite_custom_ui/css/asset_lite_custom_ui.css"
|
||||||
|
# web_include_js = "/assets/asset_lite_custom_ui/js/asset_lite_custom_ui.js"
|
||||||
|
|
||||||
|
# include custom scss in every website theme (without file extension ".scss")
|
||||||
|
# website_theme_scss = "asset_lite_custom_ui/public/scss/website"
|
||||||
|
|
||||||
|
# include js, css files in header of web form
|
||||||
|
# webform_include_js = {"doctype": "public/js/doctype.js"}
|
||||||
|
# webform_include_css = {"doctype": "public/css/doctype.css"}
|
||||||
|
|
||||||
|
# include js in page
|
||||||
|
# page_js = {"page" : "public/js/file.js"}
|
||||||
|
|
||||||
|
# include js in doctype views
|
||||||
|
# doctype_js = {"doctype" : "public/js/doctype.js"}
|
||||||
|
# doctype_list_js = {"doctype" : "public/js/doctype_list.js"}
|
||||||
|
# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"}
|
||||||
|
# doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"}
|
||||||
|
|
||||||
|
# Svg Icons
|
||||||
|
# ------------------
|
||||||
|
# include app icons in desk
|
||||||
|
# app_include_icons = "asset_lite_custom_ui/public/icons.svg"
|
||||||
|
|
||||||
|
# Home Pages
|
||||||
|
# ----------
|
||||||
|
|
||||||
|
# application home page (will override Website Settings)
|
||||||
|
# home_page = "login"
|
||||||
|
|
||||||
|
# website user home page (by Role)
|
||||||
|
# role_home_page = {
|
||||||
|
# "Role": "home_page"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Generators
|
||||||
|
# ----------
|
||||||
|
|
||||||
|
# automatically create page for each record of this doctype
|
||||||
|
# website_generators = ["Web Page"]
|
||||||
|
|
||||||
|
# Jinja
|
||||||
|
# ----------
|
||||||
|
|
||||||
|
# add methods and filters to jinja environment
|
||||||
|
# jinja = {
|
||||||
|
# "methods": "asset_lite_custom_ui.utils.jinja_methods",
|
||||||
|
# "filters": "asset_lite_custom_ui.utils.jinja_filters"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
# ------------
|
||||||
|
|
||||||
|
# before_install = "asset_lite_custom_ui.install.before_install"
|
||||||
|
# after_install = "asset_lite_custom_ui.install.after_install"
|
||||||
|
|
||||||
|
# Uninstallation
|
||||||
|
# ------------
|
||||||
|
|
||||||
|
# before_uninstall = "asset_lite_custom_ui.uninstall.before_uninstall"
|
||||||
|
# after_uninstall = "asset_lite_custom_ui.uninstall.after_uninstall"
|
||||||
|
|
||||||
|
# Integration Setup
|
||||||
|
# ------------------
|
||||||
|
# To set up dependencies/integrations with other apps
|
||||||
|
# Name of the app being installed is passed as an argument
|
||||||
|
|
||||||
|
# before_app_install = "asset_lite_custom_ui.utils.before_app_install"
|
||||||
|
# after_app_install = "asset_lite_custom_ui.utils.after_app_install"
|
||||||
|
|
||||||
|
# Integration Cleanup
|
||||||
|
# -------------------
|
||||||
|
# To clean up dependencies/integrations with other apps
|
||||||
|
# Name of the app being uninstalled is passed as an argument
|
||||||
|
|
||||||
|
# before_app_uninstall = "asset_lite_custom_ui.utils.before_app_uninstall"
|
||||||
|
# after_app_uninstall = "asset_lite_custom_ui.utils.after_app_uninstall"
|
||||||
|
|
||||||
|
# Desk Notifications
|
||||||
|
# ------------------
|
||||||
|
# See frappe.core.notifications.get_notification_config
|
||||||
|
|
||||||
|
# notification_config = "asset_lite_custom_ui.notifications.get_notification_config"
|
||||||
|
|
||||||
|
# Permissions
|
||||||
|
# -----------
|
||||||
|
# Permissions evaluated in scripted ways
|
||||||
|
|
||||||
|
# permission_query_conditions = {
|
||||||
|
# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# has_permission = {
|
||||||
|
# "Event": "frappe.desk.doctype.event.event.has_permission",
|
||||||
|
# }
|
||||||
|
|
||||||
|
# DocType Class
|
||||||
|
# ---------------
|
||||||
|
# Override standard doctype classes
|
||||||
|
|
||||||
|
# override_doctype_class = {
|
||||||
|
# "ToDo": "custom_app.overrides.CustomToDo"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Document Events
|
||||||
|
# ---------------
|
||||||
|
# Hook on document methods and events
|
||||||
|
|
||||||
|
# doc_events = {
|
||||||
|
# "*": {
|
||||||
|
# "on_update": "method",
|
||||||
|
# "on_cancel": "method",
|
||||||
|
# "on_trash": "method"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Scheduled Tasks
|
||||||
|
# ---------------
|
||||||
|
|
||||||
|
# scheduler_events = {
|
||||||
|
# "all": [
|
||||||
|
# "asset_lite_custom_ui.tasks.all"
|
||||||
|
# ],
|
||||||
|
# "daily": [
|
||||||
|
# "asset_lite_custom_ui.tasks.daily"
|
||||||
|
# ],
|
||||||
|
# "hourly": [
|
||||||
|
# "asset_lite_custom_ui.tasks.hourly"
|
||||||
|
# ],
|
||||||
|
# "weekly": [
|
||||||
|
# "asset_lite_custom_ui.tasks.weekly"
|
||||||
|
# ],
|
||||||
|
# "monthly": [
|
||||||
|
# "asset_lite_custom_ui.tasks.monthly"
|
||||||
|
# ],
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
# -------
|
||||||
|
|
||||||
|
# before_tests = "asset_lite_custom_ui.install.before_tests"
|
||||||
|
|
||||||
|
# Overriding Methods
|
||||||
|
# ------------------------------
|
||||||
|
#
|
||||||
|
# override_whitelisted_methods = {
|
||||||
|
# "frappe.desk.doctype.event.event.get_events": "asset_lite_custom_ui.event.get_events"
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# each overriding function accepts a `data` argument;
|
||||||
|
# generated from the base implementation of the doctype dashboard,
|
||||||
|
# along with any modifications made in other Frappe apps
|
||||||
|
# override_doctype_dashboards = {
|
||||||
|
# "Task": "asset_lite_custom_ui.task.get_dashboard_data"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# exempt linked doctypes from being automatically cancelled
|
||||||
|
#
|
||||||
|
# auto_cancel_exempted_doctypes = ["Auto Repeat"]
|
||||||
|
|
||||||
|
# Ignore links to specified DocTypes when deleting documents
|
||||||
|
# -----------------------------------------------------------
|
||||||
|
|
||||||
|
# ignore_links_on_delete = ["Communication", "ToDo"]
|
||||||
|
|
||||||
|
# Request Events
|
||||||
|
# ----------------
|
||||||
|
# before_request = ["asset_lite_custom_ui.utils.before_request"]
|
||||||
|
# after_request = ["asset_lite_custom_ui.utils.after_request"]
|
||||||
|
|
||||||
|
# Job Events
|
||||||
|
# ----------
|
||||||
|
# before_job = ["asset_lite_custom_ui.utils.before_job"]
|
||||||
|
# after_job = ["asset_lite_custom_ui.utils.after_job"]
|
||||||
|
|
||||||
|
# User Data Protection
|
||||||
|
# --------------------
|
||||||
|
|
||||||
|
# user_data_fields = [
|
||||||
|
# {
|
||||||
|
# "doctype": "{doctype_1}",
|
||||||
|
# "filter_by": "{filter_by}",
|
||||||
|
# "redact_fields": ["{field_1}", "{field_2}"],
|
||||||
|
# "partial": 1,
|
||||||
|
# },
|
||||||
|
# {
|
||||||
|
# "doctype": "{doctype_2}",
|
||||||
|
# "filter_by": "{filter_by}",
|
||||||
|
# "partial": 1,
|
||||||
|
# },
|
||||||
|
# {
|
||||||
|
# "doctype": "{doctype_3}",
|
||||||
|
# "strict": False,
|
||||||
|
# },
|
||||||
|
# {
|
||||||
|
# "doctype": "{doctype_4}"
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# Authentication and authorization
|
||||||
|
# --------------------------------
|
||||||
|
|
||||||
|
# auth_hooks = [
|
||||||
|
# "asset_lite_custom_ui.auth.validate"
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# Automatically update python controller files with type annotations for this app.
|
||||||
|
# export_python_type_annotations = True
|
||||||
|
|
||||||
|
# default_log_clearing_doctypes = {
|
||||||
|
# "Logging DocType Name": 30 # days to retain logs
|
||||||
|
# }
|
||||||
|
|
||||||
1
asset_lite_custom_ui/modules.txt
Normal file
1
asset_lite_custom_ui/modules.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Asset Lite Custom Ui
|
||||||
6
asset_lite_custom_ui/overrides/switch_theme.py
Normal file
6
asset_lite_custom_ui/overrides/switch_theme.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def switch_theme(theme):
|
||||||
|
if theme in ["Dark", "Light", "Automatic", "Modern_ui_theme"]:
|
||||||
|
frappe.db.set_value("User", frappe.session.user, "desk_theme", theme)
|
||||||
6
asset_lite_custom_ui/patches.txt
Normal file
6
asset_lite_custom_ui/patches.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[pre_model_sync]
|
||||||
|
# Patches added in this section will be executed before doctypes are migrated
|
||||||
|
# Read docs to understand patches: https://frappeframework.com/docs/v14/user/en/database-migrations
|
||||||
|
|
||||||
|
[post_model_sync]
|
||||||
|
# Patches added in this section will be executed after doctypes are migrated
|
||||||
0
asset_lite_custom_ui/public/.gitkeep
Normal file
0
asset_lite_custom_ui/public/.gitkeep
Normal file
52
asset_lite_custom_ui/public/css/menu.css
Normal file
52
asset_lite_custom_ui/public/css/menu.css
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
.no-click{
|
||||||
|
cursor:default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide-side-section{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget.menu-widget{
|
||||||
|
background-color: #d4daf9;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title .widget-title-text{
|
||||||
|
font-weight: 800;
|
||||||
|
color:white !important;
|
||||||
|
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-widget:hover .widget-title .widget-title-text {
|
||||||
|
color: var(--gray-100);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-open-btn{
|
||||||
|
margin-right: var(--margin-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget.menu-widget {
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding: 20px;
|
||||||
|
color: white; /* Adjust text color if needed */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specific background image for each module */
|
||||||
|
[data-widget-name="Asset Management"] {
|
||||||
|
background-image: url('https://i.im.ge/2024/09/19/fG0a6X.businesspeople-working-finance-accounting-analyze-financi.md.jpeg');
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-widget-name="CRM"] {
|
||||||
|
background-image: url('https://i.im.ge/2024/09/19/fGi7UW.customer-relationship-management-concept.md.jpeg');
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-widget-name="Buying"] {
|
||||||
|
background-image: url('https://i.im.ge/2024/09/19/fGhqI6.sumup-dkKsb9eCQS8-unsplash.md.jpeg');
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-widget-name="Stock"] {
|
||||||
|
background-image: url('https://i.im.ge/2024/09/19/fGik1P.Untitled-design.md.png');
|
||||||
|
}
|
||||||
0
asset_lite_custom_ui/public/css/modern_ui_theme.css
Normal file
0
asset_lite_custom_ui/public/css/modern_ui_theme.css
Normal file
340
asset_lite_custom_ui/public/css/theme.css
Normal file
340
asset_lite_custom_ui/public/css/theme.css
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
/* Works on Chrome, Edge, and Safari */
|
||||||
|
/* Taken from https://github.com/tahir-zaqout/sundae_theme/tree/master/sundae_theme/public/css */
|
||||||
|
:root{
|
||||||
|
--main-color: #271869;
|
||||||
|
--second-color: #271869;
|
||||||
|
--third-color: #271869;
|
||||||
|
--widget-bg: rgb(255, 255, 255) ;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme]{
|
||||||
|
--primary: var(--main-color);
|
||||||
|
--dt-primary-color: var(--main-color);
|
||||||
|
--blue-avatar-bg: var(--main-color);
|
||||||
|
--blue-avatar-color: var(--main-color);
|
||||||
|
--blue: var(--main-color)
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .page-container,
|
||||||
|
[data-theme=modern_ui_theme] .layout-main-section {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] ul li a:hover {
|
||||||
|
background-color: var(--second-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
/* Main */
|
||||||
|
[data-theme=modern_ui_theme] body {
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #f3f6f9;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme]a {
|
||||||
|
color: #666;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .small, small {
|
||||||
|
font-size: 95%;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .h6.uppercase, h6.uppercase {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 11.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation Bar */
|
||||||
|
[data-theme=modern_ui_theme] .standard-sidebar-item.selected{
|
||||||
|
background: var(--main-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .standard-sidebar-item.selected a{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .standard-sidebar-item.selected a svg{
|
||||||
|
fill: #fff;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .standard-sidebar-item:hover{
|
||||||
|
background-color: var(--second-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .standard-sidebar-item:hover a,
|
||||||
|
[data-theme=modern_ui_theme] .standard-sidebar-item:hover svg{
|
||||||
|
color: #fff;
|
||||||
|
fill: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .navbar {
|
||||||
|
background: var(--main-color);
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .navbar-nav>li>a{
|
||||||
|
color:#fff !important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .navbar-nav>li>a:hover{
|
||||||
|
color:#ddd !important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .navbar-brand:hover {
|
||||||
|
color:#ddd !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Widgets */
|
||||||
|
[data-theme=modern_ui_theme] .widget {
|
||||||
|
background-color: var(--widget-bg);
|
||||||
|
border: none;
|
||||||
|
box-shadow: 0px 3px 12px 0px var(--widget-bg), 0 3px 3px -2px #461a7714;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .widget.shortcut-widget-box .widget-head .widget-title i {
|
||||||
|
color: var(--third-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .widget.shortcut-widget-box .widget-head .widget-title:hover span{
|
||||||
|
color: var(--main-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .widget-body .link-item:hover{
|
||||||
|
color: #fff;
|
||||||
|
background: var(--third-color);
|
||||||
|
}
|
||||||
|
/* Sidebar */
|
||||||
|
[data-theme=modern_ui_theme] .desk-sidebar .desk-sidebar-item {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--widget-bg);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .layout-side-section {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .uppercase {
|
||||||
|
color:var(--third-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dropdowns */
|
||||||
|
[data-theme=modern_ui_theme] .dropdown-menu>li>a {
|
||||||
|
font-size: 13px;
|
||||||
|
color:#666;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .awesomplete > ul > li[aria-selected=true]{
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .awesomplete > ul > li:hover{
|
||||||
|
background: linear-gradient(to right, var(--main-color), var(--second-color));
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .awesomplete > ul > li:hover a{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
/* Page Heading */
|
||||||
|
[data-theme=modern_ui_theme] .page-head {
|
||||||
|
border-bottom: none !important;
|
||||||
|
box-shadow: 0 1px 10px 1px rgba(115, 108, 203, 0.1);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .page-title .title-text {
|
||||||
|
color: var(--third-color);
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .widget .widget-head .widget-title,
|
||||||
|
[data-theme=modern_ui_theme] .section-head,
|
||||||
|
[data-theme=modern_ui_theme] .comment-input-header {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--third-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Main Section */
|
||||||
|
[data-theme=modern_ui_theme] .list-row-head {
|
||||||
|
background-color: #f3f6f9;
|
||||||
|
border-bottom: 1px solid #e4e4e4 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
[data-theme=modern_ui_theme] .btn-primary {
|
||||||
|
background-color: var(--main-color);
|
||||||
|
border-color: var(--main-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .control-label, .grid-heading-row {
|
||||||
|
font-size:13px;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .btn-default:hover,
|
||||||
|
[data-theme=modern_ui_theme] .btn-default:focus, .btn-default.focus,
|
||||||
|
[data-theme=modern_ui_theme] .btn-default:active, .btn-default.active,
|
||||||
|
[data-theme=modern_ui_theme] .open > .dropdown-toggle.btn-default {
|
||||||
|
background-color: var(--third-color) !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .btn-default:hover svg{
|
||||||
|
stroke: #fff !important;
|
||||||
|
fill: #fff !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .btn-primary:hover,
|
||||||
|
[data-theme=modern_ui_theme] .btn-primary:focus, .btn-primary.focus,
|
||||||
|
[data-theme=modern_ui_theme] .btn-primary:active, .btn-primary.active,
|
||||||
|
[data-theme=modern_ui_theme] .open > .dropdown-toggle.btn-primary {
|
||||||
|
background-color: var(--main-color) !important;
|
||||||
|
border-color: var(--main-color) !important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .btn-secondary,
|
||||||
|
[data-theme=modern_ui_theme] .btn-secondary:focus, .btn-secondary.focus,
|
||||||
|
[data-theme=modern_ui_theme] .btn-secondary:active, .btn-secondary.active,
|
||||||
|
[data-theme=modern_ui_theme] .open > .dropdown-toggle.btn-secondary {
|
||||||
|
background-color: var(--third-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .btn-secondary:hover{
|
||||||
|
background-color: var(--main-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .indicator-right.blue:after, .indicator.blue:before {
|
||||||
|
background: var(--third-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Other Components*/
|
||||||
|
[data-theme=modern_ui_theme] input[type=checkbox]:checked:before {
|
||||||
|
color: var(--third-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] input[type=checkbox]:checked{
|
||||||
|
background: var(--main-color);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .frappe-control .ql-editor:not(.read-mode){
|
||||||
|
background: var(--widget-bg);
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .input-with-feedback,
|
||||||
|
[data-theme=modern_ui_theme] .like-disabled-input{
|
||||||
|
background-color: #e8eafcad;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .document-link-badge span{
|
||||||
|
background-color: var(--main-color) !important;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .document-link-badge{
|
||||||
|
background-color: var(--widget-bg)!important;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .document-link button{
|
||||||
|
background: var(--third-color) !important;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .document-link button svg{
|
||||||
|
fill: white;
|
||||||
|
stroke: white;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .indicator-pill.gray,
|
||||||
|
[data-theme=modern_ui_theme] .indicator-pill-right.gray,
|
||||||
|
[data-theme=modern_ui_theme] .indicator-pill-round.gray {
|
||||||
|
background: var(--third-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
[data-theme=modern_ui_theme] .indicator-pill.green,
|
||||||
|
[data-theme=modern_ui_theme] .indicator-pill-right.green,
|
||||||
|
[data-theme=modern_ui_theme] .indicator-pill-round.green {
|
||||||
|
color: var(--main-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .notifications-icon svg{
|
||||||
|
stroke: #fff;
|
||||||
|
fill: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] #page-Workspaces .page-head{
|
||||||
|
background: var(--widget-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .notifications-unseen use[href="#es-line-notifications-unseen"] {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .notifications-seen use[href="#es-line-notifications"] {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .notifications-unseen {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2264px%22%20height%3D%2264px%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20id%3D%22SVGRepo_bgCarrier%22%20stroke-width%3D%220%22%3E%3C%2Fg%3E%3Cg%20id%3D%22SVGRepo_tracerCarrier%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3C%2Fg%3E%3Cg%20id%3D%22SVGRepo_iconCarrier%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M9.29664%204.72727V5.25342C6.60683%206.35644%204.7276%209.97935%204.79579%2013.1192L4.79577%2014.8631C3.4188%2016.6333%203.49982%2019.2727%206.93518%2019.2727H9.29664C9.29664%2019.996%209.57852%2020.6897%2010.0803%2021.2012C10.582%2021.7127%2011.2625%2022%2011.9721%2022C12.6817%2022%2013.3622%2021.7127%2013.8639%2021.2012C14.3656%2020.6897%2014.6475%2019.996%2014.6475%2019.2727H17.0155C20.4443%2019.2727%2020.494%2016.6278%2019.1172%2014.8576L19.1555%2013.1216C19.2248%209.97811%2017.3419%206.35194%2014.6475%205.25049V4.72727C14.6475%204.00395%2014.3656%203.31026%2013.8639%202.7988C13.3622%202.28734%2012.6817%202%2011.9721%202C11.2625%202%2010.582%202.28734%2010.0803%202.7988C9.57852%203.31026%209.29664%204.00395%209.29664%204.72727ZM12.8639%204.72727C12.8639%204.72727%2012.8633%204.76414%2012.8622%204.78246C12.5718%204.74603%2012.2759%204.72727%2011.9757%204.72727C11.673%204.72727%2011.3747%204.74634%2011.082%204.78335C11.0808%204.76474%2011.0803%204.74603%2011.0803%204.72727C11.0803%204.48617%2011.1742%204.25494%2011.3415%204.08445C11.5087%203.91396%2011.7356%203.81818%2011.9721%203.81818C12.2086%203.81818%2012.4354%203.91396%2012.6027%204.08445C12.7699%204.25494%2012.8639%204.48617%2012.8639%204.72727ZM11.0803%2019.2727C11.0803%2019.5138%2011.1742%2019.7451%2011.3415%2019.9156C11.5087%2020.086%2011.7356%2020.1818%2011.9721%2020.1818C12.2086%2020.1818%2012.4354%2020.086%2012.6027%2019.9156C12.7699%2019.7451%2012.8639%2019.5138%2012.8639%2019.2727H11.0803ZM17.0155%2017.4545C17.7774%2017.4545%2018.1884%2016.5435%2017.6926%2015.9538C17.4516%2015.6673%2017.3233%2015.3028%2017.3316%2014.9286L17.3723%2013.0808C17.4404%209.99416%2015.0044%206.54545%2011.9757%206.54545C8.94765%206.54545%206.51196%209.99301%206.57898%2013.0789L6.61916%2014.9289C6.62729%2015.303%206.49893%2015.6674%206.25806%2015.9538C5.76221%2016.5435%206.17325%2017.4545%206.93518%2017.4545H17.0155ZM16.9799%203.20202C17.2945%202.74813%2017.9176%202.63524%2018.3715%202.94988C19.5192%203.74546%2020.8956%205.65348%2021.6471%207.9126C21.8214%208.43664%2021.5379%209.00279%2021.0139%209.17712C20.4898%209.35145%2019.9237%209.06795%2019.7493%208.5439C19.0892%206.55949%2017.9221%205.07189%2017.2321%204.59358C16.7782%204.27894%2016.6653%203.65592%2016.9799%203.20202ZM5.4303%202.94988C5.8842%202.63524%206.50722%202.74813%206.82185%203.20202C7.13649%203.65592%207.0236%204.27894%206.56971%204.59358C5.87969%205.07189%204.71256%206.55949%204.05242%208.5439C3.87809%209.06795%203.31194%209.35145%202.78789%209.17712C2.26384%209.00279%201.98034%208.43664%202.15467%207.9126C2.90619%205.65348%204.2826%203.74546%205.4303%202.94988Z%22%20fill%3D%22%23ffffff%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
background-size: 22px 20px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .notifications-seen {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2264px%22%20height%3D%2264px%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20id%3D%22SVGRepo_bgCarrier%22%20stroke-width%3D%220%22%3E%3C%2Fg%3E%3Cg%20id%3D%22SVGRepo_tracerCarrier%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3C%2Fg%3E%3Cg%20id%3D%22SVGRepo_iconCarrier%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M9.33497%204.72727V5.25342C6.64516%206.35644%204.76592%209.97935%204.83412%2013.1192L4.83409%2014.8631C3.45713%2016.6333%203.53815%2019.2727%206.9735%2019.2727H9.33497C9.33497%2019.996%209.61684%2020.6897%2010.1186%2021.2012C10.6203%2021.7127%2011.3008%2022%2012.0104%2022C12.72%2022%2013.4005%2021.7127%2013.9022%2021.2012C14.404%2020.6897%2014.6858%2019.996%2014.6858%2019.2727H17.0538C20.4826%2019.2727%2020.5323%2016.6278%2019.1555%2014.8576L19.1938%2013.1216C19.2631%209.97811%2017.3803%206.35194%2014.6858%205.25049V4.72727C14.6858%204.00396%2014.404%203.31026%2013.9022%202.7988C13.4005%202.28734%2012.72%202%2012.0104%202C11.3008%202%2010.6203%202.28734%2010.1186%202.7988C9.61684%203.31026%209.33497%204.00395%209.33497%204.72727ZM12.9022%204.72727C12.9022%204.74573%2012.9017%204.76414%2012.9006%204.78246C12.6101%204.74603%2012.3142%204.72727%2012.014%204.72727C11.7113%204.72727%2011.413%204.74634%2011.1203%204.78335C11.1192%204.76474%2011.1186%204.74603%2011.1186%204.72727C11.1186%204.48617%2011.2126%204.25494%2011.3798%204.08445C11.547%203.91396%2011.7739%203.81818%2012.0104%203.81818C12.2469%203.81818%2012.4738%203.91396%2012.641%204.08445C12.8083%204.25494%2012.9022%204.48617%2012.9022%204.72727ZM11.1186%2019.2727C11.1186%2019.5138%2011.2126%2019.7451%2011.3798%2019.9156C11.547%2020.086%2011.7739%2020.1818%2012.0104%2020.1818C12.2469%2020.1818%2012.4738%2020.086%2012.641%2019.9156C12.8083%2019.7451%2012.9022%2019.5138%2012.9022%2019.2727H11.1186ZM17.0538%2017.4545C17.8157%2017.4545%2018.2267%2016.5435%2017.7309%2015.9538C17.49%2015.6673%2017.3616%2015.3028%2017.3699%2014.9286L17.4106%2013.0808C17.4787%209.99416%2015.0427%206.54545%2012.014%206.54545C8.98598%206.54545%206.55028%209.99301%206.61731%2013.0789L6.65748%2014.9289C6.66561%2015.303%206.53726%2015.6674%206.29639%2015.9538C5.80054%2016.5435%206.21158%2017.4545%206.9735%2017.4545H17.0538Z%22%20fill%3D%22%23ffffff%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
background-size: 22px 20px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [data-theme=modern_ui_theme] .icon use[href="#icon-add"] {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
} */
|
||||||
|
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .btn-new .icon, .chart-menu {
|
||||||
|
/* width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2240px%22%20height%3D%2240px%22%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000000%22%3E%3Cg%20id%3D%22SVGRepo_bgCarrier%22%20stroke-width%3D%220%22%3E%3C%2Fg%3E%3Cg%20id%3D%22SVGRepo_tracerCarrier%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3C%2Fg%3E%3Cg%20id%3D%22SVGRepo_iconCarrier%22%3E%3Ctitle%3E%3C%2Ftitle%3E%3Cg%20id%3D%22Complete%22%3E%3Cg%20data-name%3D%22add%22%20id%3D%22add-2%22%3E%3Cg%3E%3Cline%20fill%3D%22none%22%20stroke%3D%22%23ffffff%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20x1%3D%2212%22%20x2%3D%2212%22%20y1%3D%2219%22%20y2%3D%225%22%2F%3E%3Cline%20fill%3D%22none%22%20stroke%3D%22%23ffffff%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20x1%3D%225%22%20x2%3D%2219%22%20y1%3D%2212%22%20y2%3D%2212%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||||
|
background-size: 22px 22px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center; */
|
||||||
|
--icon-fill: white;
|
||||||
|
--icon-stroke: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .btn-default:hover {
|
||||||
|
--icon-fill: white;
|
||||||
|
--icon-stroke: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .widget.links-widget-box .link-item .link-content:hover{
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .nav-item .nav-link:hover{
|
||||||
|
color:white !important
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .btn-reset.nav-link span {
|
||||||
|
color: white; /* Change text color to white on hover */
|
||||||
|
transition: color 0.3s ease; /* Optional: Smooth transition */
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .dashboard-graph .widget-group .grid-col-2 {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
column-gap: 8px;
|
||||||
|
row-gap: 15px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .dashboard-graph .widget-group .grid-col-2 .full-width {
|
||||||
|
grid-column-start: 1;
|
||||||
|
grid-column-end: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .dashboard-graph .widget-group {
|
||||||
|
font-size: 8px;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .dashboard-graph .legend-dataset-label {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme=modern_ui_theme] .dashboard-graph .legend-dataset-value {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Target frappe charts but exclude those in full-width widgets */
|
||||||
|
[data-theme=modern_ui_theme] .dashboard-graph .dashboard-widget-box:not(.full-width) .frappe-chart.chart {
|
||||||
|
height: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Profile Icon Colour */
|
||||||
|
[data-theme=modern_ui_theme] .avatar-frame.standard-image {
|
||||||
|
background-color: var(--dark-green-avatar-bg) !important;
|
||||||
|
color: var(--dark-green-avatar-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
112
asset_lite_custom_ui/public/js/menu/page.js
Normal file
112
asset_lite_custom_ui/public/js/menu/page.js
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
frappe.templates["page"] = `
|
||||||
|
<div class="page-head flex">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row flex align-center page-head-content justify-between">
|
||||||
|
<div class="col-md-4 col-sm-6 col-xs-7 page-title">
|
||||||
|
<!-- <div class="title-image hide hidden-md hidden-lg"></div> -->
|
||||||
|
<!-- title -->
|
||||||
|
<button class="btn-reset sidebar-toggle-btn">
|
||||||
|
<svg class="es-icon icon-md sidebar-toggle-placeholder">
|
||||||
|
<use href="#es-line-align-justify"></use>
|
||||||
|
</svg>
|
||||||
|
<span class="sidebar-toggle-icon">
|
||||||
|
<svg class="es-icon icon-md">
|
||||||
|
<use href="#es-line-sidebar-collapse">
|
||||||
|
</use>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<button class="btn-reset menu-open-btn hide-side-section">
|
||||||
|
<svg class="es-icon icon-md sidebar-toggle-placeholder">
|
||||||
|
<use href="#es-line-align-justify"></use>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<div class="flex fill-width title-area">
|
||||||
|
<div>
|
||||||
|
<div class="flex">
|
||||||
|
<h3 class="ellipsis title-text"></h3>
|
||||||
|
<span class="indicator-pill whitespace-nowrap"></span>
|
||||||
|
</div>
|
||||||
|
<div class="ellipsis sub-heading hide text-muted"></div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-default more-button hide">
|
||||||
|
<svg class="icon icon-sm">
|
||||||
|
<use href="#icon-dot-horizontal">
|
||||||
|
</use>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex col page-actions justify-content-end">
|
||||||
|
<!-- buttons -->
|
||||||
|
<div class="custom-actions hide hidden-xs hidden-md"></div>
|
||||||
|
<div class="standard-actions flex">
|
||||||
|
<span class="page-icon-group hide hidden-xs hidden-sm"></span>
|
||||||
|
<div class="menu-btn-group hide">
|
||||||
|
<button type="button" class="btn btn-default icon-btn" data-toggle="dropdown" aria-expanded="false" aria-label="{{ __("Menu") }}">
|
||||||
|
<span>
|
||||||
|
<span class="menu-btn-group-label">
|
||||||
|
<svg class="icon icon-sm">
|
||||||
|
<use href="#icon-dot-horizontal">
|
||||||
|
</use>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-secondary btn-default btn-sm hide"></button>
|
||||||
|
<div class="actions-btn-group hide">
|
||||||
|
<button type="button" class="btn btn-primary btn-sm" data-toggle="dropdown" aria-expanded="false">
|
||||||
|
<span>
|
||||||
|
<span class="hidden-xs actions-btn-group-label">{%= __("Actions") %}</span>
|
||||||
|
<svg class="icon icon-xs">
|
||||||
|
<use href="#icon-select">
|
||||||
|
</use>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-right" role="menu">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary btn-sm hide primary-action"></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container page-body">
|
||||||
|
<div class="page-toolbar hide">
|
||||||
|
<div class="container">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="page-wrapper">
|
||||||
|
<div class="page-content">
|
||||||
|
<div class="workflow-button-area btn-group pull-right hide"></div>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
|
||||||
|
frappe.ui.Page = class CustomPage extends frappe.ui.Page {
|
||||||
|
constructor(opts) {
|
||||||
|
super(opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
make() {
|
||||||
|
// Call parent's make and setup whatever it must
|
||||||
|
super.make();
|
||||||
|
// As an extra add our menu button action
|
||||||
|
this.setup_menupage_view();
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_menupage_view() {
|
||||||
|
let menupage_view = $(".page-head").find(".menu-open-btn");
|
||||||
|
menupage_view.click(() => {
|
||||||
|
frappe.set_route(['app', 'modern-menu']);
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
8
asset_lite_custom_ui/public/js/menu/router.js
Normal file
8
asset_lite_custom_ui/public/js/menu/router.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
frappe.router.render = function () {
|
||||||
|
if (this.current_route[0]) {
|
||||||
|
this.render_page();
|
||||||
|
} else {
|
||||||
|
// Show our menu page
|
||||||
|
frappe.set_route(['app', 'modern-menu']);
|
||||||
|
}
|
||||||
|
}
|
||||||
50
asset_lite_custom_ui/public/js/menu/workspace.js
Normal file
50
asset_lite_custom_ui/public/js/menu/workspace.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
frappe.views.Workspace = class CustomWorkspace extends frappe.views.Workspace {
|
||||||
|
constructor(wrapper) {
|
||||||
|
super(wrapper);
|
||||||
|
}
|
||||||
|
show() {
|
||||||
|
// hide side bar for particular view
|
||||||
|
if (frappe.router?.current_route &&
|
||||||
|
frappe.router.current_route.length > 1 &&
|
||||||
|
frappe.router.current_route[0].toLowerCase() === "workspaces") {
|
||||||
|
// side bar
|
||||||
|
let elements = document.querySelectorAll('.layout-side-section');
|
||||||
|
elements.forEach(element => {
|
||||||
|
if (element) element.classList.add('hide-side-section');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Toggle button
|
||||||
|
let elements2 = document.querySelectorAll('div[data-page-route]:not([data-page-route="menu"]) .sidebar-toggle-btn');
|
||||||
|
elements2.forEach(element2 => {
|
||||||
|
if (element2) element2.classList.add('hide-side-section');
|
||||||
|
});
|
||||||
|
|
||||||
|
// button to navigate to menu
|
||||||
|
let elements3 = document.querySelectorAll('div[data-page-route]:not([data-page-route="menu"]) .menu-open-btn');
|
||||||
|
elements3.forEach(element3 => {
|
||||||
|
if (element3) element3.classList.remove('hide-side-section');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// side bar
|
||||||
|
let elements = document.querySelectorAll('.layout-side-section');
|
||||||
|
elements.forEach(element => {
|
||||||
|
if (element) element.classList.remove('hide-side-section');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Toggle button
|
||||||
|
let elements2 = document.querySelectorAll('div[data-page-route]:not([data-page-route="menu"]) .sidebar-toggle-btn');
|
||||||
|
elements2.forEach(element2 => {
|
||||||
|
if (element2) element2.classList.remove('hide-side-section');
|
||||||
|
});
|
||||||
|
|
||||||
|
// button to navigate to menu
|
||||||
|
let elements3 = document.querySelectorAll('div[data-page-route]:not([data-page-route="menu"]) .menu-open-btn');
|
||||||
|
elements3.forEach(element3 => {
|
||||||
|
if (element3) element3.classList.add('hide-side-section');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// call the parent's show
|
||||||
|
super.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
34
asset_lite_custom_ui/public/js/theme.js
Normal file
34
asset_lite_custom_ui/public/js/theme.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
frappe.ui.ThemeSwitcher = class CustomThemeSwitcher extends frappe.ui.ThemeSwitcher {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch_themes() {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
this.themes = [
|
||||||
|
{
|
||||||
|
name: "light",
|
||||||
|
label: ("Frappe Light"),
|
||||||
|
info: ("Light Theme"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "dark",
|
||||||
|
label: "Timeless Night",
|
||||||
|
info: "Dark Theme",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "modern_ui_theme",
|
||||||
|
label: "Modern Desk UI",
|
||||||
|
info: "The theme I copied from github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "automatic",
|
||||||
|
label: "Automatic",
|
||||||
|
info: "Uses system's theme to switch between light and dark mode",
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
resolve(this.themes);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
0
asset_lite_custom_ui/templates/__init__.py
Normal file
0
asset_lite_custom_ui/templates/__init__.py
Normal file
0
asset_lite_custom_ui/templates/pages/__init__.py
Normal file
0
asset_lite_custom_ui/templates/pages/__init__.py
Normal file
21
license.txt
Normal file
21
license.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) [year] [fullname]
|
||||||
|
|
||||||
|
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.
|
||||||
20
pyproject.toml
Normal file
20
pyproject.toml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[project]
|
||||||
|
name = "asset_lite_custom_ui"
|
||||||
|
authors = [
|
||||||
|
{ name = "SSPL", email = "sonika123@gmail.com"}
|
||||||
|
]
|
||||||
|
description = "custom app for modifying UI"
|
||||||
|
requires-python = ">=3.10"
|
||||||
|
readme = "README.md"
|
||||||
|
dynamic = ["version"]
|
||||||
|
dependencies = [
|
||||||
|
# "frappe~=15.0.0" # Installed and managed by bench.
|
||||||
|
]
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["flit_core >=3.4,<4"]
|
||||||
|
build-backend = "flit_core.buildapi"
|
||||||
|
|
||||||
|
# These dependencies are only installed when developer mode is enabled
|
||||||
|
[tool.bench.dev-dependencies]
|
||||||
|
# package_name = "~=1.1.0"
|
||||||
Loading…
x
Reference in New Issue
Block a user