fix(routing-v2): handle pop state and use currentTarget

This commit is contained in:
Rushabh Mehta 2020-11-11 11:45:15 +05:30 committed by Suraj Shetty
parent 029e757cc6
commit 984123c3eb
2 changed files with 35 additions and 23 deletions

View file

@ -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);

View file

@ -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;