fix(routing-v2): handle pop state and use currentTarget
This commit is contained in:
parent
029e757cc6
commit
984123c3eb
2 changed files with 35 additions and 23 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 = $('<div class="container"></div>').appendTo(page);
|
||||
container = $('<div></div>').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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue