diff --git a/frappe/public/js/frappe/router.js b/frappe/public/js/frappe/router.js index 78d1b7e1d1..637def1bc3 100644 --- a/frappe/public/js/frappe/router.js +++ b/frappe/public/js/frappe/router.js @@ -23,6 +23,11 @@ $(window).on('hashchange', function() { } }); +window.addEventListener('popstate', (event) => { + // forward-back button, just re-render based on current route + frappe.route(); +}); + // routing v2, capture all clicks so that the target is managed with push-state $('body').on('click', 'a', function(e) { let override = (e, route) => { @@ -32,14 +37,14 @@ $('body').on('click', 'a', function(e) { }; // target has "#" ,this is a v1 style route, so remake it. - if (e.target.hash) { - return override(e, e.target.hash); + if (e.currentTarget.hash) { + return override(e, e.currentTarget.hash); } // target has "/desk, this is a v2 style route. - if (e.target.pathname && - (e.target.pathname.startWith('/desk') || e.target.pathname.startWith('desk'))) { - return override(e, e.target.pathname); + if (e.currentTarget.pathname && + (e.currentTarget.pathname.startsWith('/desk') || e.currentTarget.pathname.startsWith('desk'))) { + return override(e, e.currentTarget.pathname); } }); @@ -70,9 +75,6 @@ frappe.route = function() { frappe._cur_route = sub_path; let route = frappe.get_route(); - if (route === false) { - return; - } frappe.route_history.push(route); @@ -103,7 +105,7 @@ frappe.route = function() { } } } else { - // Show desk + // Show home frappe.views.pageview.show(''); } @@ -138,12 +140,6 @@ frappe.get_route = function(route) { frappe.route_options = $.extend(frappe.route_options || {}, query_params); } - // backward compatibility - if (route && route[0]==='Module') { - frappe.set_route('modules', route[1]); - return false; - } - return route; } @@ -178,8 +174,8 @@ frappe.get_sub_path_string = function(route) { route = window.location.pathname; } - if (route.substr(0, 1)=='/') route = route.substr(1); - if (route.startsWith('desk')) route = route.substr(4); + if (route.substr(0, 1)=='/') route = route.substr(1); // for /desk/sub + if (route.startsWith('desk')) route = route.substr(4); // for desk/sub if (route.substr(0, 1)=='/') route = route.substr(1); if (route.substr(0, 1)=='#') route = route.substr(1); if (route.substr(0, 1)=='!') route = route.substr(1); diff --git a/frappe/public/js/frappe/views/pageview.js b/frappe/public/js/frappe/views/pageview.js index 90c5965b85..e2c762edd4 100644 --- a/frappe/public/js/frappe/views/pageview.js +++ b/frappe/public/js/frappe/views/pageview.js @@ -38,15 +38,31 @@ frappe.views.pageview = { }, show: function(name) { - if(!name) { + if (!name) { name = (frappe.boot ? frappe.boot.home_page : window.page_name); + + if (name === "workspace") { + if (!frappe.workspace) { + let page = frappe.container.add_page('workspace'); + let container = $('
').appendTo(page); + container = $('').appendTo(container); + + frappe.workspace = new Desktop({ + wrapper: container + }); + } + } + frappe.container.change_to('workspace'); + frappe.workspace.route(); + frappe.utils.set_title(__('Home')); + return; } frappe.model.with_doctype("Page", function() { frappe.views.pageview.with_page(name, function(r) { - if(r && r.exc) { - if(!r['403']) + if (r && r.exc) { + if (!r['403']) frappe.show_not_found(name); - } else if(!frappe.pages[name]) { + } else if (!frappe.pages[name]) { new frappe.views.Page(name); } frappe.container.change_to(name); @@ -59,7 +75,7 @@ frappe.views.Page = class Page { constructor(name) { this.name = name; var me = this; - + // web home page if(name==window.page_name) { this.wrapper = document.getElementById('page-' + name); @@ -87,7 +103,7 @@ frappe.views.Page = class Page { } this.trigger_page_event('on_page_load'); - + // set events $(this.wrapper).on('show', function() { window.cur_frm = null;