mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-26 06:16:56 +09:00
chore: refactor legacy JS init code to use "data-global-init" (#39836)
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>
This commit is contained in:
1 parent
ae17c14cff
commit
f690ea8efd
26 files changed
+122
-125
No files matched your search
@@ -0,0 +1,25 @@
|
||||
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'));
|
||||
}
|
||||
Reference in new issue
Block a user