From 90363f4ba9ae684f1f36f3be22ab3690f50e1bf7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 18 Dec 2020 13:17:08 +0530 Subject: [PATCH] fix(routes): minor fixes to route, favion, setup-wizard --- frappe/desk/page/setup_wizard/setup_wizard.js | 4 +-- frappe/public/images/frappe-favicon.svg | 19 ++++++++++++++ frappe/public/js/frappe/desk.js | 26 ++----------------- frappe/public/js/frappe/form/form.js | 20 ++++++-------- frappe/public/js/frappe/router.js | 3 ++- frappe/public/js/frappe/views/breadcrumbs.js | 9 ++++--- frappe/public/js/frappe/views/pageview.js | 2 +- frappe/public/scss/desk/slides.scss | 2 +- frappe/templates/base.html | 2 +- frappe/utils/data.py | 15 ++++++----- .../website_settings/website_settings.py | 2 +- 11 files changed, 50 insertions(+), 54 deletions(-) create mode 100644 frappe/public/images/frappe-favicon.svg diff --git a/frappe/desk/page/setup_wizard/setup_wizard.js b/frappe/desk/page/setup_wizard/setup_wizard.js index 9bdeecb51d..46eec522a4 100644 --- a/frappe/desk/page/setup_wizard/setup_wizard.js +++ b/frappe/desk/page/setup_wizard/setup_wizard.js @@ -144,7 +144,7 @@ frappe.setup.SetupWizard = class SetupWizard extends frappe.ui.Slides { if (id + 1 === this.slides.length) { this.$next_btn.removeClass("btn-primary").hide(); this.$complete_btn.addClass("btn-primary").show() - .on('click', this.action_on_complete.bind(this)); + .on('click', () => this.action_on_complete()); } else { this.$next_btn.addClass("btn-primary").show(); @@ -201,7 +201,7 @@ frappe.setup.SetupWizard = class SetupWizard extends frappe.ui.Slides { this.abort_setup(r.message.fail); } }, - error: this.abort_setup.bind(this, "Error in setup", true) + error: this.abort_setup("Error in setup", true) }); } diff --git a/frappe/public/images/frappe-favicon.svg b/frappe/public/images/frappe-favicon.svg new file mode 100644 index 0000000000..40abde3d41 --- /dev/null +++ b/frappe/public/images/frappe-favicon.svg @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 133e80235b..16f54c1b13 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -254,8 +254,8 @@ frappe.Application = Class.extend({ load_bootinfo: function() { if(frappe.boot) { frappe.modules = {}; - (frappe.boot.allowed_modules || []).forEach(function(m) { - frappe.modules[m.module_name]=m; + (frappe.boot.allowed_workspaces || []).forEach(function(m) { + frappe.modules[m.module]=m; }); frappe.model.sync(frappe.boot.docs); $.extend(frappe._messages, frappe.boot.__messages); @@ -613,24 +613,6 @@ frappe.get_module = function(m, default_module) { return module; } - if(module.type==="module" && !module.link) { - module.link = "modules/" + module.module_name; - } - - if(module.type==="list" && !module.link) { - module.link = "List/" + module._doctype; - } - - if (!module.link) module.link = ""; - - if (!module._id) { - // links can have complex values that range beyond simple plain text names, and so do not make for robust IDs. - // an example from python: "link": r"javascript:eval('window.open(\'timetracking\', \'_self\')')" - // this snippet allows a module to open a custom html page in the same window. - module._id = module.module_name.toLowerCase(); - } - - if(!module.label) { module.label = m; } @@ -639,10 +621,6 @@ frappe.get_module = function(m, default_module) { module._label = __(module.label); } - if(!module._doctype) { - module._doctype = ''; - } - module._setup = true; return module; diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index f994504d38..5c3ef3d33f 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -457,17 +457,11 @@ frappe.ui.form.Form = class FrappeForm { return this.script_manager.trigger("onload_post_render"); } }, + () => this.focus_on_first_input(), () => this.run_after_load_hook(), () => this.dashboard.after_refresh() ]); - // focus on first input - if(this.is_new()) { - var first = this.form_wrapper.find('.form-layout input:first'); - if(!in_list(["Date", "Datetime"], first.attr("data-fieldtype"))) { - first.focus(); - } - } } else { this.refresh_header(switched); } @@ -481,6 +475,13 @@ frappe.ui.form.Form = class FrappeForm { this.scroll_to_element(); } + focus_on_first_input() { + let first = this.form_wrapper.find('.form-layout :input:visible:first'); + if(!in_list(["Date", "Datetime"], first.attr("data-fieldtype"))) { + first.focus(); + } + } + run_after_load_hook() { if (frappe.route_hooks.after_load) { let route_callback = frappe.route_hooks.after_load; @@ -1041,11 +1042,6 @@ frappe.ui.form.Form = class FrappeForm { }); } - focus_on_first_input() { - let $first_input_el = $(frappe.container.page).find('.frappe-control:visible').eq(0); - $first_input_el.find('input, select, textarea').focus(); - } - rename_doc() { frappe.model.rename_doc(this.doctype, this.docname, () => this.refresh_header()); } diff --git a/frappe/public/js/frappe/router.js b/frappe/public/js/frappe/router.js index 848f131fd9..f8961d15ac 100644 --- a/frappe/public/js/frappe/router.js +++ b/frappe/public/js/frappe/router.js @@ -109,6 +109,7 @@ frappe.router = { }, parse(route) { + if (!route) return []; route = this.get_sub_path_string(route).split('/'); route = $.map(route, this.decode_component); this.set_route_options_from_url(route); @@ -267,7 +268,7 @@ frappe.router = { route = route[0]; } - if (route.length===1 && route[0].includes('/')) { + if (route.length===1 && route[0] && route[0].includes('/')) { // called as frappe.set_route('a/b/c') route = $.map(route[0].split('/'), this.decode_component); } diff --git a/frappe/public/js/frappe/views/breadcrumbs.js b/frappe/public/js/frappe/views/breadcrumbs.js index bf2e3b6811..b845fb3e8b 100644 --- a/frappe/public/js/frappe/views/breadcrumbs.js +++ b/frappe/public/js/frappe/views/breadcrumbs.js @@ -63,7 +63,8 @@ frappe.breadcrumbs = { this.set_workspace_breadcrumb(breadcrumbs); // form / print - const view = frappe.get_route()[0].toLowerCase(); + let view = frappe.get_route()[0]; + view = view ? view.toLowerCase() : null; if (breadcrumbs.doctype && ["print", "form"].includes(view)) { this.set_list_breadcrumb(breadcrumbs); this.set_form_breadcrumb(breadcrumbs, view); @@ -86,7 +87,7 @@ frappe.breadcrumbs = { } if (breadcrumbs.workspace) { - if(!breadcrumbs.module_info.blocked && frappe.visible_modules.includes(breadcrumbs.module_info.module_name)) { + if(!breadcrumbs.module_info.blocked && frappe.visible_modules.includes(breadcrumbs.module_info.module)) { $(repl('
  • %(label)s
  • ', { module: breadcrumbs.workspace, label: __(breadcrumbs.workspace) })) .appendTo(this.$breadcrumbs); @@ -163,8 +164,8 @@ frappe.breadcrumbs = { setup_modules() { if(!frappe.visible_modules) { - frappe.visible_modules = $.map(frappe.boot.allowed_modules, (m) => { - return m.module_name; + frappe.visible_modules = $.map(frappe.boot.allowed_workspaces, (m) => { + return m.module; }); } }, diff --git a/frappe/public/js/frappe/views/pageview.js b/frappe/public/js/frappe/views/pageview.js index 0550de3d2c..48a2780fac 100644 --- a/frappe/public/js/frappe/views/pageview.js +++ b/frappe/public/js/frappe/views/pageview.js @@ -21,7 +21,7 @@ frappe.views.pageview = { // cached in local storage frappe.model.sync(JSON.parse(localStorage["_page:" + name])); callback(); - } else { + } else if (name) { // get fresh return frappe.call({ method: 'frappe.desk.desk_page.getpage', diff --git a/frappe/public/scss/desk/slides.scss b/frappe/public/scss/desk/slides.scss index 115db3c177..ce05d95852 100644 --- a/frappe/public/scss/desk/slides.scss +++ b/frappe/public/scss/desk/slides.scss @@ -81,7 +81,7 @@ .slide-footer { margin: var(--margin-md) 0; - padding: 0 var(--padding-sm); + padding: 0 var(--padding-lg); .btn { box-shadow: none; diff --git a/frappe/templates/base.html b/frappe/templates/base.html index dc87ab72dd..29e776058f 100644 --- a/frappe/templates/base.html +++ b/frappe/templates/base.html @@ -15,7 +15,7 @@ {% block favicon %} {% endblock %} diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 6e33238d4a..678fa956c2 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -17,6 +17,7 @@ from six.moves.urllib.parse import quote, urljoin from html2text import html2text from markdown2 import markdown, MarkdownError from six import iteritems, text_type, string_types, integer_types +from frappe.desk.utils import get_doctype_route DATE_FORMAT = "%Y-%m-%d" TIME_FORMAT = "%H:%M:%S.%f" @@ -1058,25 +1059,25 @@ def get_link_to_report(name, label=None, report_type=None, doctype=None, filters return """{1}""".format(get_url_to_report(name, report_type, doctype), label) def get_absolute_url(doctype, name): - return "desk/app/Form/{0}/{1}".format(quoted(doctype), quoted(name)) + return "/app/{0}/{1}".format(quoted(get_doctype_route(doctype)), quoted(name)) def get_url_to_form(doctype, name): - return get_url(uri = "desk/app/Form/{0}/{1}".format(quoted(doctype), quoted(name))) + return get_url(uri = "/app/{0}/{1}".format(quoted(get_doctype_route(doctype)), quoted(name))) def get_url_to_list(doctype): - return get_url(uri = "desk/app/List/{0}".format(quoted(doctype))) + return get_url(uri = "/app/{0}".format(quoted(get_doctype_route(doctype)))) def get_url_to_report(name, report_type = None, doctype = None): if report_type == "Report Builder": - return get_url(uri = "desk#Report/{0}/{1}".format(quoted(doctype), quoted(name))) + return get_url(uri = "/app/{0}/view/report/{1}".format(quoted(get_doctype_route(doctype)), quoted(name))) else: - return get_url(uri = "desk#query-report/{0}".format(quoted(name))) + return get_url(uri = "/app/query-report/{0}".format(quoted(name))) def get_url_to_report_with_filters(name, filters, report_type = None, doctype = None): if report_type == "Report Builder": - return get_url(uri = "desk#Report/{0}?{1}".format(quoted(doctype), filters)) + return get_url(uri = "/app/{0}/view/report?{1}".format(quoted(doctype), filters)) else: - return get_url(uri = "desk#query-report/{0}?{1}".format(quoted(name), filters)) + return get_url(uri = "/app/query-report/{0}?{1}".format(quoted(name), filters)) operator_map = { # startswith diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index d7030dc6cb..7546b4d363 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -150,7 +150,7 @@ def get_website_settings(context=None): add_website_theme(context) if not context.get("favicon"): - context["favicon"] = "/assets/frappe/images/favicon.png" + context["favicon"] = "/assets/frappe/images/frappe-favicon.svg" if settings.favicon and settings.favicon != "attach_files:": context["favicon"] = settings.favicon