├── .gitignore ├── MANIFEST.in ├── README.md ├── license.txt ├── requirements.txt ├── setup.py └── whitetheme_v13 ├── __init__.py ├── config ├── __init__.py ├── desktop.py └── docs.py ├── hooks.py ├── modules.txt ├── patches.txt ├── public └── css │ └── whitetheme.css ├── templates ├── __init__.py └── pages │ └── __init__.py ├── whitetheme_v13 └── __init__.py └── www └── __init__.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.pyc 3 | *.egg-info 4 | *.swp 5 | tags 6 | whitetheme_v13/docs/current -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include MANIFEST.in 2 | include requirements.txt 3 | include *.json 4 | include *.md 5 | include *.py 6 | include *.txt 7 | recursive-include whitetheme_v13 *.css 8 | recursive-include whitetheme_v13 *.csv 9 | recursive-include whitetheme_v13 *.html 10 | recursive-include whitetheme_v13 *.ico 11 | recursive-include whitetheme_v13 *.js 12 | recursive-include whitetheme_v13 *.json 13 | recursive-include whitetheme_v13 *.md 14 | recursive-include whitetheme_v13 *.png 15 | recursive-include whitetheme_v13 *.py 16 | recursive-include whitetheme_v13 *.svg 17 | recursive-include whitetheme_v13 *.txt 18 | recursive-exclude whitetheme_v13 *.pyc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Classic Theme for Frappe/ERPNext v13 2 | 3 | Custom Theme for Frappe/ERPNext v13 4 | 5 | ![alt text](https://discuss.erpnext.com/uploads/default/original/3X/d/0/d0347964a04a3ba630ba8301be89356a69625358.png) 6 | 7 | To install this theme, 8 | 9 | 1. bench get-app https://github.com/hashirluv/whitetheme-v13.git 10 | 2. bench --site (sitename) install-app whitetheme_v13 11 | 3. bench clear-cache 12 | 13 | To uninstall this theme 14 | 15 | 1. bench --site (sitename) uninstall-app whitetheme_v13 -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | License: MIT -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | frappe -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from setuptools import setup, find_packages 3 | 4 | with open('requirements.txt') as f: 5 | install_requires = f.read().strip().split('\n') 6 | 7 | # get version from __version__ variable in whitetheme_v13/__init__.py 8 | from whitetheme_v13 import __version__ as version 9 | 10 | setup( 11 | name='whitetheme_v13', 12 | version=version, 13 | description='White Theme for v13', 14 | author='Hashir', 15 | author_email='hashirabdulla@gmail.com', 16 | packages=find_packages(), 17 | zip_safe=False, 18 | include_package_data=True, 19 | install_requires=install_requires 20 | ) 21 | -------------------------------------------------------------------------------- /whitetheme_v13/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | __version__ = '1.0.0' 5 | 6 | -------------------------------------------------------------------------------- /whitetheme_v13/config/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashirluv/whitetheme-v13/ea70dc789929913a5343ab566606347d2a67c73f/whitetheme_v13/config/__init__.py -------------------------------------------------------------------------------- /whitetheme_v13/config/desktop.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | from frappe import _ 4 | 5 | def get_data(): 6 | return [ 7 | { 8 | "module_name": "Whitetheme V13", 9 | "color": "grey", 10 | "icon": "octicon octicon-file-directory", 11 | "type": "module", 12 | "label": _("Whitetheme V13") 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /whitetheme_v13/config/docs.py: -------------------------------------------------------------------------------- 1 | """ 2 | Configuration for docs 3 | """ 4 | 5 | # source_link = "https://github.com/[org_name]/whitetheme_v13" 6 | # docs_base_url = "https://[org_name].github.io/whitetheme_v13" 7 | # headline = "App that does everything" 8 | # sub_heading = "Yes, you got that right the first time, everything" 9 | 10 | def get_context(context): 11 | context.brand_html = "Whitetheme V13" 12 | -------------------------------------------------------------------------------- /whitetheme_v13/hooks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # from __future__ import unicode_literals 3 | # from . import __version__ as app_version 4 | 5 | app_name = "whitetheme_v13" 6 | app_title = "Whitetheme V13" 7 | app_publisher = "Hashir" 8 | app_description = "White Theme for v13" 9 | app_icon = "octicon octicon-file-directory" 10 | app_color = "grey" 11 | app_email = "hashirabdulla@gmail.com" 12 | app_license = "MIT" 13 | 14 | # Includes in 15 | # ------------------ 16 | 17 | # include js, css files in header of desk.html 18 | app_include_css = "/assets/whitetheme_v13/css/whitetheme.css" 19 | # app_include_js = "/assets/whitetheme_v13/js/whitetheme_v13.js" 20 | 21 | # include js, css files in header of web template 22 | # web_include_css = "/assets/whitetheme_v13/css/whitetheme_v13.css" 23 | # web_include_js = "/assets/whitetheme_v13/js/whitetheme_v13.js" 24 | 25 | # include custom scss in every website theme (without file extension ".scss") 26 | # website_theme_scss = "whitetheme_v13/public/scss/website" 27 | 28 | # include js, css files in header of web form 29 | # webform_include_js = {"doctype": "public/js/doctype.js"} 30 | # webform_include_css = {"doctype": "public/css/doctype.css"} 31 | 32 | # include js in page 33 | # page_js = {"page" : "public/js/file.js"} 34 | 35 | # include js in doctype views 36 | # doctype_js = {"doctype" : "public/js/doctype.js"} 37 | # doctype_list_js = {"doctype" : "public/js/doctype_list.js"} 38 | # doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} 39 | # doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"} 40 | 41 | # Home Pages 42 | # ---------- 43 | 44 | # application home page (will override Website Settings) 45 | # home_page = "login" 46 | 47 | # website user home page (by Role) 48 | # role_home_page = { 49 | # "Role": "home_page" 50 | # } 51 | 52 | # Generators 53 | # ---------- 54 | 55 | # automatically create page for each record of this doctype 56 | # website_generators = ["Web Page"] 57 | 58 | # Installation 59 | # ------------ 60 | 61 | # before_install = "whitetheme_v13.install.before_install" 62 | # after_install = "whitetheme_v13.install.after_install" 63 | 64 | # Desk Notifications 65 | # ------------------ 66 | # See frappe.core.notifications.get_notification_config 67 | 68 | # notification_config = "whitetheme_v13.notifications.get_notification_config" 69 | 70 | # Permissions 71 | # ----------- 72 | # Permissions evaluated in scripted ways 73 | 74 | # permission_query_conditions = { 75 | # "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", 76 | # } 77 | # 78 | # has_permission = { 79 | # "Event": "frappe.desk.doctype.event.event.has_permission", 80 | # } 81 | 82 | # DocType Class 83 | # --------------- 84 | # Override standard doctype classes 85 | 86 | # override_doctype_class = { 87 | # "ToDo": "custom_app.overrides.CustomToDo" 88 | # } 89 | 90 | # Document Events 91 | # --------------- 92 | # Hook on document methods and events 93 | 94 | # doc_events = { 95 | # "*": { 96 | # "on_update": "method", 97 | # "on_cancel": "method", 98 | # "on_trash": "method" 99 | # } 100 | # } 101 | 102 | # Scheduled Tasks 103 | # --------------- 104 | 105 | # scheduler_events = { 106 | # "all": [ 107 | # "whitetheme_v13.tasks.all" 108 | # ], 109 | # "daily": [ 110 | # "whitetheme_v13.tasks.daily" 111 | # ], 112 | # "hourly": [ 113 | # "whitetheme_v13.tasks.hourly" 114 | # ], 115 | # "weekly": [ 116 | # "whitetheme_v13.tasks.weekly" 117 | # ] 118 | # "monthly": [ 119 | # "whitetheme_v13.tasks.monthly" 120 | # ] 121 | # } 122 | 123 | # Testing 124 | # ------- 125 | 126 | # before_tests = "whitetheme_v13.install.before_tests" 127 | 128 | # Overriding Methods 129 | # ------------------------------ 130 | # 131 | # override_whitelisted_methods = { 132 | # "frappe.desk.doctype.event.event.get_events": "whitetheme_v13.event.get_events" 133 | # } 134 | # 135 | # each overriding function accepts a `data` argument; 136 | # generated from the base implementation of the doctype dashboard, 137 | # along with any modifications made in other Frappe apps 138 | # override_doctype_dashboards = { 139 | # "Task": "whitetheme_v13.task.get_dashboard_data" 140 | # } 141 | 142 | # exempt linked doctypes from being automatically cancelled 143 | # 144 | # auto_cancel_exempted_doctypes = ["Auto Repeat"] 145 | 146 | -------------------------------------------------------------------------------- /whitetheme_v13/modules.txt: -------------------------------------------------------------------------------- 1 | Whitetheme V13 -------------------------------------------------------------------------------- /whitetheme_v13/patches.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashirluv/whitetheme-v13/ea70dc789929913a5343ab566606347d2a67c73f/whitetheme_v13/patches.txt -------------------------------------------------------------------------------- /whitetheme_v13/public/css/whitetheme.css: -------------------------------------------------------------------------------- 1 | /* Works on Chrome, Edge, and Safari */ 2 | *::-webkit-scrollbar { 3 | width: 6px; 4 | } 5 | *::-webkit-scrollbar-track { 6 | background: var(--scroll-bg); 7 | } 8 | *::-webkit-scrollbar-thumb { 9 | background-color: var(--scroll-color); 10 | border-radius: 20px; 11 | } 12 | * { 13 | scrollbar-width: thin; 14 | scrollbar-color: var(--scroll-color) var(--scroll-bg); 15 | } 16 | .awesomplete .input-with-feedback { 17 | border: 1px solid var(--border-color); 18 | } 19 | .form-control { 20 | border: 1px solid var(--border-color); 21 | } 22 | .search-bar .awesomplete input { 23 | background-color: var(--bg-color) 24 | } 25 | .modal-backdrop{ 26 | background-color: #2c436b !important; 27 | } 28 | .widget .widget-head .widget-title { 29 | font-size: var(--text-base); 30 | } 31 | .comment-box .comment-input-header, .form-dashboard-section .section-head, .form-section .section-head, .head-title { 32 | font-size: var(--text-base); 33 | font-weight: 600; 34 | } 35 | .comment-box .comment-input-container .ql-editor { 36 | border: 1px solid var(--border-color); 37 | } 38 | .duration-picker .duration-input { 39 | background-color: var(--bg-color); 40 | border: 1px solid var(--border-color); 41 | } 42 | .control-label { 43 | font-weight: 500; 44 | } 45 | [data-theme="dark"] { 46 | --bg-color: var(--gray-900); 47 | --disabled-control-bg: var(--gray-900); 48 | --border-color: #1c2126; 49 | --margin-lg : 15px; 50 | --text-bold: 600; 51 | --scroll-bg: #161a1f; 52 | --scroll-color: #1c2126; 53 | } 54 | 55 | [data-theme="light"] { 56 | --bg-color: #f2f5fa; 57 | --text-bold: 600; 58 | --control-bg : #fff; 59 | --control-bg-on-gray: #d4dcea; 60 | --disabled-control-bg: #f2f5fa; 61 | --heading-color: #333; 62 | --border-color:#e3e8f1; 63 | --avatar-frame-bg: #dde2ea; 64 | --margin-lg: 15px; 65 | --sidebar-select-color: #d4dcea; 66 | --awesomplete-hover-bg: #d4dcea; 67 | --scroll-bg: #eef1f5; 68 | --scroll-color: #d9dfe6; 69 | } -------------------------------------------------------------------------------- /whitetheme_v13/templates/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashirluv/whitetheme-v13/ea70dc789929913a5343ab566606347d2a67c73f/whitetheme_v13/templates/__init__.py -------------------------------------------------------------------------------- /whitetheme_v13/templates/pages/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashirluv/whitetheme-v13/ea70dc789929913a5343ab566606347d2a67c73f/whitetheme_v13/templates/pages/__init__.py -------------------------------------------------------------------------------- /whitetheme_v13/whitetheme_v13/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashirluv/whitetheme-v13/ea70dc789929913a5343ab566606347d2a67c73f/whitetheme_v13/whitetheme_v13/__init__.py -------------------------------------------------------------------------------- /whitetheme_v13/www/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashirluv/whitetheme-v13/ea70dc789929913a5343ab566606347d2a67c73f/whitetheme_v13/www/__init__.py --------------------------------------------------------------------------------