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('