This repository has been archived on 2025-01-01. You can view files and clone it, but cannot push or open issues or pull requests.
moodle-local_treestudyplan/amd/src/util/browserbuttonevents.js
2024-06-02 17:21:30 +02:00

49 lines
No EOL
1.8 KiB
JavaScript

/*eslint no-var: "error" */
/*eslint no-unused-vars: "off" */
/*eslint linebreak-style: "off" */
/*eslint no-trailing-spaces: "off" */
/*eslint-env es6*/
import Debugger from './debugger';
const debug = new Debugger("browserbuttonevents");
/**
*
* @param {function} backwardCB
* @param {function} forwardCB
* @param {function} reloadCB
*/
export function addBrowserButtonEvent(backwardCB, forwardCB = null, reloadCB = null) {
debug.log("Registering navigation events",backwardCB,forwardCB,reloadCB);
const reorient = (e) => { // After travelling in the history stack
const positionLastShown = Number( // If none, then zero
sessionStorage.getItem( 'positionLastShown' ));
// debug.log("Popstate event",e,positionLastShown,history);
let position = history.state; // Absolute position in stack
if( position === null ) { // Meaning a new entry on the stack
position = positionLastShown + 1; // Top of stack
// (1) Stamp the entry with its own position in the stack
history.replaceState( position, /*no title*/'' );
}
// (2) Keep track of the last position shown
sessionStorage.setItem( 'positionLastShown', String(position) );
// (3) Discover the direction of travel by comparing the two
const direction = Math.sign( position - positionLastShown );
debug.log( 'Travel direction is ' + direction );
// One of backward (-1), reload (0) and forward (1)
if (direction == -1 && backwardCB) {
backwardCB();
}
if (direction == 1 && forwardCB) {
forwardCB();
}
if (direction == 0 && reloadCB) {
reloadCB();
}
};
//addEventListener( 'pageshow', reorient );
addEventListener( 'popstate', reorient ); // Travel in same page
}