mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-20 08:20:04 +00:00
Move the remaining legacy init code, which probed page classes with `querySelector`, to `data-global-init`, so each feature initializes from its own element. `hashchange` listeners now go through one module that runs them in priority order, because independent listeners broke when mount order changed. - Convert issue list, diff, repo create, settings and org team inits to `data-global-init` - Run `hashchange` listeners by priority, the diff scroll handler last - Make the devtest mock's failing log requests deterministic - Add e2e tests for diff tree navigation to folded files and job log permalinks --------- Co-authored-by: silverwind <me@silverwind.io>
26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
type HashChangeListener = (e: HashChangeEvent) => void | Promise<void>;
|
|
|
|
const hashChangeListeners: Array<{listener: HashChangeListener, priority: number}> = [];
|
|
let hashChangeListenersInited = false;
|
|
|
|
export function registerAsyncHashChangeListener(listener: HashChangeListener, priority = 0): void {
|
|
hashChangeListeners.push({listener, priority});
|
|
hashChangeListeners.sort((a, b) => a.priority - b.priority);
|
|
if (hashChangeListenersInited) listener(new HashChangeEvent('hashchange')); // late registrants missed the initial run
|
|
}
|
|
|
|
export function removeAsyncHashChangeListener(listener: HashChangeListener): void {
|
|
const index = hashChangeListeners.findIndex((item) => item.listener === listener);
|
|
if (index !== -1) hashChangeListeners.splice(index, 1);
|
|
}
|
|
|
|
async function runHashChangeListeners(e: HashChangeEvent) {
|
|
for (const {listener} of hashChangeListeners) await listener(e);
|
|
}
|
|
|
|
export async function initAsyncHashChangeListeners() {
|
|
hashChangeListenersInited = true;
|
|
window.addEventListener('hashchange', runHashChangeListeners);
|
|
await runHashChangeListeners(new HashChangeEvent('hashchange'));
|
|
}
|