From 90de23129e94593020fa45b4ff7913489b94e000 Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Mon, 27 Apr 2020 15:33:08 +0200 Subject: [PATCH 01/35] fix: socketio default port to fix #10119 Signed-off-by: mathieu.brunot --- frappe/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/templates/base.html b/frappe/templates/base.html index 907a7b6113..4ec9550820 100644 --- a/frappe/templates/base.html +++ b/frappe/templates/base.html @@ -65,7 +65,7 @@ frappe.ready_events.push(fn); } window.dev_server = {{ dev_server }}; - window.socketio_port = {{ frappe.socketio_port }}; + window.socketio_port = {{ (frappe.socketio_port or (3000 if dev_server else 80)) }}; From 2ed2e9f98b6e226f770794b18657b7456d9ed6c9 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 1 May 2020 04:32:34 +0530 Subject: [PATCH 02/35] fix: .snyk & package.json to reduce vulnerabilities The following vulnerabilities are fixed with a Snyk patch: - https://snyk.io/vuln/SNYK-JS-LODASH-567746 --- .snyk | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/.snyk b/.snyk index b39169dcee..0dfecc6136 100644 --- a/.snyk +++ b/.snyk @@ -1,5 +1,5 @@ # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. -version: v1.13.5 +version: v1.14.1 # ignores vulnerabilities until expiry date; change duration by modifying expiry date ignore: SNYK-JS-AWESOMPLETE-174474: @@ -22,3 +22,44 @@ patch: SNYK-JS-LODASH-450202: - frappe-datatable > lodash: patched: '2020-01-31T01:33:09.889Z' + SNYK-JS-LODASH-567746: + - frappe-datatable > lodash: + patched: '2020-04-30T23:02:32.330Z' + - quagga > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > lodash: + patched: '2020-04-30T23:02:32.330Z' + - tailwindcss > lodash: + patched: '2020-04-30T23:02:32.330Z' + - '@tailwindcss/ui > @tailwindcss/custom-forms > lodash': + patched: '2020-04-30T23:02:32.330Z' + - snyk > @snyk/dep-graph > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > inquirer > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-config > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-mvn-plugin > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-nodejs-lockfile-parser > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-nuget-plugin > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > @snyk/dep-graph > graphlib > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-go-plugin > graphlib > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-nodejs-lockfile-parser > graphlib > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > @snyk/snyk-cocoapods-plugin > @snyk/dep-graph > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-nuget-plugin > dotnet-deps-parser > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > snyk-php-plugin > @snyk/composer-lockfile-parser > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > @snyk/snyk-cocoapods-plugin > @snyk/dep-graph > graphlib > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > @snyk/snyk-cocoapods-plugin > @snyk/cocoapods-lockfile-parser > @snyk/ruby-semver > lodash: + patched: '2020-04-30T23:02:32.330Z' + - snyk > @snyk/snyk-cocoapods-plugin > @snyk/cocoapods-lockfile-parser > @snyk/dep-graph > graphlib > lodash: + patched: '2020-04-30T23:02:32.330Z' From d11463dfd65b26f6198ade410224e6f970d5e5ef Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 1 May 2020 04:32:35 +0530 Subject: [PATCH 03/35] fix: .snyk & package.json to reduce vulnerabilities The following vulnerabilities are fixed with a Snyk patch: - https://snyk.io/vuln/SNYK-JS-LODASH-567746 --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e735beee9b..583a9a00d3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "production": "FRAPPE_ENV=production node rollup/build.js", "watch": "node rollup/watch.js", "cypress:open": "cypress open", - "snyk-protect": "snyk protect" + "snyk-protect": "snyk protect", + "prepare": "yarn run snyk-protect" }, "repository": { "type": "git", @@ -42,7 +43,7 @@ "qz-tray": "^2.0.8", "redis": "^2.8.0", "showdown": "^1.9.1", - "snyk": "^1.297.4", + "snyk": "^1.316.1", "socket.io": "^2.3.0", "superagent": "^3.8.2", "tailwindcss": "^1.3.3", From ff89abd930c8c07d5424c4d43459213df1466f63 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Mon, 4 May 2020 14:23:45 +0530 Subject: [PATCH 04/35] fix(v13): use newer ipython compatible with python 3.8 --- frappe/commands/utils.py | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index da9d67be3b..3610393d9a 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -443,7 +443,7 @@ def console(context): for app in all_apps: locals()[app] = __import__(app) print("Apps in this namespace:\n{}".format(", ".join(all_apps))) - IPython.embed(display_banner="", header="") + IPython.embed(display_banner="", header="", colors="neutral") @click.command('run-tests') diff --git a/requirements.txt b/requirements.txt index 58f923d880..33239bb13b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,7 +23,7 @@ googlemaps==3.1.1 gunicorn==19.10.0 html2text==2016.9.19 html5lib==1.0.1 -ipython==5.9.0 +ipython==7.14.0 Jinja2==2.10.3 ldap3==2.7 markdown2==2.3.8 From e183d16a83ee72d1d34680d715c87fd8fb6fc779 Mon Sep 17 00:00:00 2001 From: prssanna Date: Wed, 6 May 2020 18:04:55 +0530 Subject: [PATCH 05/35] fix: headers not being exported for non dict columns --- frappe/desk/query_report.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 164f6389eb..74e841f107 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -299,7 +299,6 @@ def export_query(): _("You can try changing the filters of your report.")) return - data.columns = [col for col in data.columns if isinstance(col, dict) and not col.get('hidden')] columns = get_columns_dict(data.columns) from frappe.utils.xlsxutils import make_xlsx @@ -316,7 +315,8 @@ def build_xlsx_data(columns, data, visible_idx, include_indentation): # add column headings for idx in range(len(data.columns)): - result[0].append(columns[idx]["label"]) + if not columns[idx].get("hidden"): + result[0].append(columns[idx]["label"]) # build table from result for i, row in enumerate(data.result): From 2ed69034cb7137957ab2286b6b7a78cdc1a45cba Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Fri, 8 May 2020 15:34:55 +0530 Subject: [PATCH 06/35] perf(recorder): Don't store context (code) and frame locals --- .../js/frappe/recorder/RequestDetail.vue | 21 +------------------ frappe/recorder.py | 8 ------- 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/frappe/public/js/frappe/recorder/RequestDetail.vue b/frappe/public/js/frappe/recorder/RequestDetail.vue index 804c1c2f55..60795076ec 100644 --- a/frappe/public/js/frappe/recorder/RequestDetail.vue +++ b/frappe/public/js/frappe/recorder/RequestDetail.vue @@ -126,27 +126,9 @@ @@ -244,7 +226,6 @@ export default { }, group_duplicates: false, showing: null, - showing_traceback: null, request: { calls: [], }, diff --git a/frappe/recorder.py b/frappe/recorder.py index ffafffb93f..833fa87f7a 100644 --- a/frappe/recorder.py +++ b/frappe/recorder.py @@ -65,9 +65,6 @@ def get_current_stack_frames(): "filename": re.sub(".*/apps/", "", filename), "lineno": lineno, "function": function, - "context": "".join(context), - "index": index, - "locals": json.dumps(frame.f_locals, skipkeys=True, default=str) } @@ -175,11 +172,6 @@ def stop(*args, **kwargs): def get(uuid=None, *args, **kwargs): if uuid: result = frappe.cache().hget(RECORDER_REQUEST_HASH, uuid) - lexer = PythonLexer(tabsize=4) - for call in result["calls"]: - for stack in call["stack"]: - formatter = HtmlFormatter(noclasses=True, hl_lines=[stack["index"] + 1]) - stack["context"] = highlight(stack["context"], lexer, formatter) else: result = list(frappe.cache().hgetall(RECORDER_REQUEST_SPARSE_HASH).values()) return result From 95f3add3d37def51ced1f34416aebd74991e7534 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Fri, 8 May 2020 15:35:28 +0530 Subject: [PATCH 07/35] chore(requirements): Remove Pygments from requirements.txt --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6c22d66139..64ea6f60c5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,7 +38,6 @@ Pillow==6.2.2 premailer==3.6.1 psycopg2-binary==2.8.4 pyasn1==0.4.8 -Pygments==2.5.2 PyJWT==1.7.1 PyMySQL==0.9.3 pyOpenSSL==19.1.0 From cb294329ad60555b63cc88e3188bf1e8d3f7b7f7 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Fri, 8 May 2020 15:35:53 +0530 Subject: [PATCH 08/35] style: Black + Flake8 --- frappe/recorder.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/frappe/recorder.py b/frappe/recorder.py index 833fa87f7a..388efcbf6e 100644 --- a/frappe/recorder.py +++ b/frappe/recorder.py @@ -9,12 +9,8 @@ import inspect import json import re import time -import traceback import frappe import sqlparse -from pygments import highlight -from pygments.lexers import PythonLexer -from pygments.formatters import HtmlFormatter from frappe import _ @@ -30,7 +26,7 @@ def sql(*args, **kwargs): stack = list(get_current_stack_frames()) - if frappe.db.db_type == 'postgres': + if frappe.db.db_type == "postgres": query = frappe.db._cursor.query else: query = frappe.db._cursor._executed @@ -80,7 +76,7 @@ def dump(): frappe.local._recorder.dump() -class Recorder(): +class Recorder: def __init__(self): self.uuid = frappe.generate_hash(length=10) self.time = datetime.datetime.now() @@ -102,12 +98,18 @@ class Recorder(): "cmd": self.cmd, "time": self.time, "queries": len(self.calls), - "time_queries": float("{:0.3f}".format(sum(call["duration"] for call in self.calls))), - "duration": float("{:0.3f}".format((datetime.datetime.now() - self.time).total_seconds() * 1000)), + "time_queries": float( + "{:0.3f}".format(sum(call["duration"] for call in self.calls)) + ), + "duration": float( + "{:0.3f}".format((datetime.datetime.now() - self.time).total_seconds() * 1000) + ), "method": self.method, } frappe.cache().hset(RECORDER_REQUEST_SPARSE_HASH, self.uuid, request_data) - frappe.publish_realtime(event="recorder-dump-event", message=json.dumps(request_data, default=str)) + frappe.publish_realtime( + event="recorder-dump-event", message=json.dumps(request_data, default=str) + ) self.mark_duplicates() @@ -134,6 +136,7 @@ def do_not_record(function): del frappe.local._recorder frappe.db.sql = frappe.db._sql return function(*args, **kwargs) + return wrapper @@ -142,6 +145,7 @@ def administrator_only(function): if frappe.session.user != "Administrator": frappe.throw(_("Only Administrator is allowed to use Recorder")) return function(*args, **kwargs) + return wrapper From 4508c6be99a10b67f00356845b90f66cd7dcf597 Mon Sep 17 00:00:00 2001 From: prssanna Date: Fri, 8 May 2020 15:43:56 +0530 Subject: [PATCH 09/35] fix: fix error when group is set in link --- frappe/model/meta.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/model/meta.py b/frappe/model/meta.py index cb7c77c57d..7bf93d1968 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -452,6 +452,7 @@ class Meta(Document): for link in self.links: link.added = False for group in data.transactions: + group = frappe._dict(group) # group found if link.group and group.label == link.group: if link.link_doctype not in group.get('items'): @@ -460,7 +461,7 @@ class Meta(Document): if not link.added: # group not found, make a new group - data.transactions.append(frappe._dict( + data.transactions.append(dict( label = link.group, items = [link.link_doctype] )) From 9b6f0a2e4c261e9256e8eda1ecc2b2b4d556a0f6 Mon Sep 17 00:00:00 2001 From: "Chinmay D. Pai" Date: Fri, 8 May 2020 20:18:08 +0530 Subject: [PATCH 10/35] fix: use doctype instead of service name to send email Signed-off-by: Chinmay D. Pai --- frappe/integrations/offsite_backup_utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/integrations/offsite_backup_utils.py b/frappe/integrations/offsite_backup_utils.py index c280a1d9dd..7e80cb68c4 100644 --- a/frappe/integrations/offsite_backup_utils.py +++ b/frappe/integrations/offsite_backup_utils.py @@ -10,7 +10,7 @@ from frappe.utils import split_emails, get_backups_path def send_email(success, service_name, doctype, email_field, error_status=None): - recipients = get_recipients(service_name, email_field) + recipients = get_recipients(doctype, email_field) if not recipients: frappe.log_error("No Email Recipient found for {0}".format(service_name), "{0}: Failed to send backup status email".format(service_name)) @@ -36,11 +36,11 @@ def send_email(success, service_name, doctype, email_field, error_status=None): frappe.sendmail(recipients=recipients, subject=subject, message=message) -def get_recipients(service_name, email_field): +def get_recipients(doctype, email_field): if not frappe.db: frappe.connect() - return split_emails(frappe.db.get_value(service_name, None, email_field)) + return split_emails(frappe.db.get_value(doctype, None, email_field)) def get_latest_backup_file(with_files=False): From cf200c195eeb2d15fc90c1ee156705cf594fd015 Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Fri, 8 May 2020 20:43:52 +0200 Subject: [PATCH 11/35] socketio_port default to null Signed-off-by: mathieu.brunot --- frappe/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/templates/base.html b/frappe/templates/base.html index 4ec9550820..dd5dd63a1f 100644 --- a/frappe/templates/base.html +++ b/frappe/templates/base.html @@ -65,7 +65,7 @@ frappe.ready_events.push(fn); } window.dev_server = {{ dev_server }}; - window.socketio_port = {{ (frappe.socketio_port or (3000 if dev_server else 80)) }}; + window.socketio_port = {{ (frappe.socketio_port or 'null') }}; From a2a697b4d547369ed39c5bcdfdc2ab5fec1602ae Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Sat, 9 May 2020 15:38:08 +0530 Subject: [PATCH 12/35] fix: Remove theme based_on from Website Theme --- frappe/public/scss/website.scss | 11 ---- frappe/templates/base.html | 24 ++------ .../website_settings/website_settings.json | 6 +- .../doctype/website_theme/website_theme.json | 55 +++---------------- .../doctype/website_theme/website_theme.py | 12 ++-- .../website_theme/website_theme_template.scss | 7 ++- 6 files changed, 24 insertions(+), 91 deletions(-) diff --git a/frappe/public/scss/website.scss b/frappe/public/scss/website.scss index 546110bd5c..6f82e25ee0 100644 --- a/frappe/public/scss/website.scss +++ b/frappe/public/scss/website.scss @@ -23,17 +23,6 @@ footer { flex-shrink: 0; } -// make navbar padding consistent with the page -.navbar { - padding-left: 0; - padding-right: 0; - - .container { - padding-left: 15px; - padding-right: 15px; - } -} - .navbar.bg-dark { .dropdown-menu { font-size: .75rem; diff --git a/frappe/templates/base.html b/frappe/templates/base.html index dd5dd63a1f..0a81712eb9 100644 --- a/frappe/templates/base.html +++ b/frappe/templates/base.html @@ -25,26 +25,10 @@ {{ head_html or "" }} {%- endif %} - {%- if theme.based_on == 'Bootstrap 4' or doctype != 'Web Page' -%} - {%- if theme.theme_url -%} - - {%- else -%} - - {%- endif -%} - {% else %} - {%- if developer_mode -%} - - - {%- else -%} - - - - {% endif %} - {%- if theme.theme_css -%} - - {%- endif -%} + {%- if theme.theme_url -%} + + {%- else -%} + {%- endif -%} {%- for link in web_include_css %} diff --git a/frappe/website/doctype/website_settings/website_settings.json b/frappe/website/doctype/website_settings/website_settings.json index b2d765b81f..279b490c1a 100644 --- a/frappe/website/doctype/website_settings/website_settings.json +++ b/frappe/website/doctype/website_settings/website_settings.json @@ -161,20 +161,17 @@ "label": "Footer" }, { - "depends_on": "eval:doc.footer_type==='Standard'", "fieldname": "copyright", "fieldtype": "Data", "label": "Copyright" }, { - "depends_on": "eval:doc.footer_type==='Standard'", "description": "Address and other legal information you may want to put in the footer.", "fieldname": "address", "fieldtype": "Text Editor", "label": "Address" }, { - "depends_on": "eval:doc.footer_type==='Standard'", "fieldname": "footer_items", "fieldtype": "Table", "label": "Footer Items", @@ -182,7 +179,6 @@ }, { "default": "0", - "depends_on": "eval:doc.footer_type==='Standard'", "fieldname": "hide_footer_signup", "fieldtype": "Check", "label": "Hide Footer Signup" @@ -337,7 +333,7 @@ "issingle": 1, "links": [], "max_attachments": 10, - "modified": "2020-04-30 12:37:44.070662", + "modified": "2020-05-09 14:17:23.271806", "modified_by": "Administrator", "module": "Website", "name": "Website Settings", diff --git a/frappe/website/doctype/website_theme/website_theme.json b/frappe/website/doctype/website_theme/website_theme.json index 10d018aa05..6ec4751341 100644 --- a/frappe/website/doctype/website_theme/website_theme.json +++ b/frappe/website/doctype/website_theme/website_theme.json @@ -8,7 +8,6 @@ "engine": "InnoDB", "field_order": [ "theme", - "based_on", "module", "custom", "bootstrap_theme_section", @@ -25,16 +24,12 @@ "dark_color", "background_color", "stylesheet_section", - "theme_scss", + "custom_overrides", "custom_scss", + "theme_scss", "theme_url", - "tailwind_theme_section", "custom_css", "theme_css", - "navbar_section", - "navbar", - "footer_section", - "footer", "custom_js_section", "js" ], @@ -86,48 +81,11 @@ "label": "JavaScript", "options": "JS" }, - { - "default": "Bootstrap 4", - "fieldname": "based_on", - "fieldtype": "Select", - "label": "Theme Based On", - "options": "Bootstrap 4\nTailwind" - }, - { - "depends_on": "eval:doc.based_on == 'Tailwind'", - "fieldname": "navbar_section", - "fieldtype": "Section Break", - "label": "Navbar" - }, - { - "depends_on": "eval:doc.based_on=='Tailwind'", - "fieldname": "tailwind_theme_section", - "fieldtype": "Section Break", - "label": "Tailwind Theme" - }, { "fieldname": "bootstrap_theme_section", "fieldtype": "Section Break", "label": "Theme Configuration" }, - { - "depends_on": "eval:doc.based_on == 'Tailwind'", - "fieldname": "footer_section", - "fieldtype": "Section Break", - "label": "Footer" - }, - { - "fieldname": "navbar", - "fieldtype": "Table", - "label": "Navbar", - "options": "Web Page Block" - }, - { - "fieldname": "footer", - "fieldtype": "Table", - "label": "Footer", - "options": "Web Page Block" - }, { "fieldname": "custom_css", "fieldtype": "Code", @@ -177,7 +135,6 @@ "options": "Color" }, { - "depends_on": "eval:doc.based_on == 'Bootstrap 4'", "fieldname": "stylesheet_section", "fieldtype": "Section Break", "label": "Stylesheet" @@ -220,10 +177,16 @@ { "fieldname": "column_break_11", "fieldtype": "Column Break" + }, + { + "fieldname": "custom_overrides", + "fieldtype": "Code", + "label": "Custom Overrides", + "options": "SCSS" } ], "links": [], - "modified": "2020-04-25 00:00:23.347879", + "modified": "2020-05-09 15:03:35.001068", "modified_by": "Administrator", "module": "Website", "name": "Website Theme", diff --git a/frappe/website/doctype/website_theme/website_theme.py b/frappe/website/doctype/website_theme/website_theme.py index ac7637d6c7..da6d26c2e0 100644 --- a/frappe/website/doctype/website_theme/website_theme.py +++ b/frappe/website/doctype/website_theme/website_theme.py @@ -41,13 +41,9 @@ class WebsiteTheme(Document): def validate_theme(self): '''Generate theme css if theme_scss has changed''' - if self.based_on == 'Bootstrap 4': - doc_before_save = self.get_doc_before_save() - if doc_before_save is None or get_scss(self) != get_scss(doc_before_save): - self.generate_bootstrap_theme() - - if self.based_on == 'Tailwind': - self.theme_css = frappe.render_template('frappe/website/doctype/website_theme/custom_theme.css', self.as_dict(), is_path=True) + doc_before_save = self.get_doc_before_save() + if doc_before_save is None or get_scss(self) != get_scss(doc_before_save): + self.generate_bootstrap_theme() def export_doc(self): """Export to standard folder `[module]/website_theme/[name]/[name].json`.""" @@ -139,5 +135,5 @@ def generate_theme_files_if_not_exist(): frappe.log_error(frappe.get_traceback(), "Theme File Generation Failed") def get_scss(doc): - return (doc.theme_scss or '') + '\n' + (doc.custom_scss or '') + return frappe.render_template('frappe/website/doctype/website_theme/website_theme_template.scss', doc.as_dict()) diff --git a/frappe/website/doctype/website_theme/website_theme_template.scss b/frappe/website/doctype/website_theme/website_theme_template.scss index 1bb4685b98..275b105f92 100644 --- a/frappe/website/doctype/website_theme/website_theme_template.scss +++ b/frappe/website/doctype/website_theme/website_theme_template.scss @@ -1,6 +1,5 @@ {% if google_font %} @import url('https://fonts.googleapis.com/css?family={{ google_font.replace(' ', '+') }}:{{ font_properties }}&display=swap'); - $font-family-sans-serif: "{{ google_font }}", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; {% endif -%} @@ -14,6 +13,9 @@ $enable-shadows: {{ button_shadows and "true" or "false" }}; $enable-gradients: {{ button_gradients and "true" or "false" }}; $enable-rounded: {{ button_rounded_corners and "true" or "false" }}; +// Bootstrap Variable Overrides +{{ custom_overrides or '' }} + @import "frappe/public/scss/website"; {% if font_size -%} @@ -21,3 +23,6 @@ body { font-size: {{ font_size }}; } {%- endif %} + +// Custom Theme +{{ custom_scss or '' }} From e0510e2e06c84854430b5701361a3eeb048fc565 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Sat, 9 May 2020 15:38:27 +0530 Subject: [PATCH 13/35] fix: Navbar --- frappe/templates/includes/navbar/navbar.html | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/frappe/templates/includes/navbar/navbar.html b/frappe/templates/includes/navbar/navbar.html index 379c6660fc..9d48390170 100644 --- a/frappe/templates/includes/navbar/navbar.html +++ b/frappe/templates/includes/navbar/navbar.html @@ -1,5 +1,4 @@ -{%- if theme.based_on == 'Bootstrap 4' or doctype != 'Web Page' -%} -