SequenceDiagram/web/scripts/slots/HashSlotNav.mjs

43 lines
823 B
JavaScript

const VALID_HASH = /^[0-9]{1,2}$/;
function getHash() {
const full = window.location.hash;
return full ? full.substr(1) : '';
}
export default class HashSlotNav {
constructor(changeListener = () => null) {
this.hash = getHash();
window.addEventListener('hashchange', () => {
// Only trigger listener if change wasn't caused by us
if(getHash() !== this.hash) {
changeListener();
}
});
}
getRawHash() {
return getHash();
}
maxSlots() {
// Capacity of localStorage is limited
// So avoid allowing too many documents
// (also acts as a fail-safe if anything gets loop-ey)
return 100;
}
getSlot() {
const hash = getHash();
if(VALID_HASH.test(hash)) {
return Number(hash);
}
return null;
}
setSlot(v) {
this.hash = v.toFixed(0);
window.location.hash = this.hash;
}
}