2023-03-04 15:52:16 +08:00
|
|
|
|
// deno-lint-ignore-file no-window-prefix
|
|
|
|
|
import type { Pas } from "../../src/pra/pas.ts"
|
2023-03-05 17:16:09 +08:00
|
|
|
|
import type { NId } from "../../src/pra/que.ts"
|
|
|
|
|
import { adm } from "../../src/ont/adm.ts"
|
2023-03-16 18:32:47 +08:00
|
|
|
|
import { pas, aut, soc, usr, agd, md, idn } from "./article.ts"
|
2023-03-05 17:16:09 +08:00
|
|
|
|
import { adm1, adm2, pas_a, pos, que } from "./template.ts"
|
2023-03-04 15:52:16 +08:00
|
|
|
|
|
|
|
|
|
export const nav: {
|
|
|
|
|
pas: Pas | null,
|
|
|
|
|
hash: string,
|
2023-03-05 17:16:09 +08:00
|
|
|
|
nid: NId | null,
|
2023-03-12 11:28:27 +08:00
|
|
|
|
cont: (() => void) | null,
|
2023-03-04 15:52:16 +08:00
|
|
|
|
} = {
|
|
|
|
|
pas: null,
|
|
|
|
|
hash: "",
|
2023-03-05 17:16:09 +08:00
|
|
|
|
nid: null,
|
2023-03-12 11:28:27 +08:00
|
|
|
|
cont: null,
|
2023-03-04 15:52:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function navpas(
|
|
|
|
|
p?: Pas | null
|
|
|
|
|
) {
|
|
|
|
|
nav.pas = p === undefined ? await pos<Pas>("pas", {}) : p
|
|
|
|
|
if (nav.pas) {
|
|
|
|
|
pas_a.innerText = nav.pas.nam
|
|
|
|
|
pas_a.href = `#${nav.pas.uid}`
|
|
|
|
|
} else {
|
|
|
|
|
pas_a.innerText = "用户登录"
|
|
|
|
|
pas_a.href = "#pas"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-05 17:16:09 +08:00
|
|
|
|
function tag(
|
|
|
|
|
t: HTMLMenuElement,
|
|
|
|
|
h?: string,
|
|
|
|
|
n?: string,
|
|
|
|
|
) {
|
|
|
|
|
const l = t.appendChild(document.createElement("li"))
|
|
|
|
|
if (h) {
|
|
|
|
|
const a = l.appendChild(document.createElement("a"))
|
|
|
|
|
a.href = `#${h}`
|
|
|
|
|
a.addEventListener("click", () => {
|
|
|
|
|
for (const e of a.parentElement!.parentElement!.children) e.classList.remove("active")
|
|
|
|
|
a.parentElement!.classList.add("active")
|
|
|
|
|
// if (scroll) t.scrollIntoView({ behavior: "smooth" })
|
|
|
|
|
})
|
|
|
|
|
if (n) a.innerText = n
|
|
|
|
|
}
|
|
|
|
|
return l
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function menu(
|
|
|
|
|
t: HTMLMenuElement,
|
|
|
|
|
[ph, pn]: [string, string],
|
|
|
|
|
hn: [string, string][],
|
|
|
|
|
) {
|
|
|
|
|
t.innerHTML = ""
|
|
|
|
|
tag(t)
|
|
|
|
|
tag(t, ph, pn).classList.add("active")
|
|
|
|
|
for (const [h, n] of hn) tag(t, h, n)
|
|
|
|
|
tag(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function navnid(
|
|
|
|
|
p?: "soc" | "agd",
|
|
|
|
|
a1?: string,
|
|
|
|
|
a2?: string,
|
|
|
|
|
) {
|
|
|
|
|
if (!p) {
|
|
|
|
|
adm1.parentElement!.classList.add("none")
|
|
|
|
|
adm2.parentElement!.classList.add("none")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (!a1) {
|
|
|
|
|
nav.nid = await que<NId>("nid")
|
|
|
|
|
const admn = p === "soc" ? nav.nid!.adm1nsid : nav.nid!.adm1naid
|
2023-03-06 15:01:03 +08:00
|
|
|
|
const s = admn.reduce((x, y) => x + y[1], 0)
|
|
|
|
|
menu(adm1, [p, `全部 (${s})`], admn.map(([a, n]) => [`${p}${a}`, `${a} (${n})`]))
|
2023-03-05 17:16:09 +08:00
|
|
|
|
adm1.parentElement!.classList.remove("none")
|
|
|
|
|
adm2.parentElement!.classList.add("none")
|
|
|
|
|
} else if (!nav.nid) return
|
|
|
|
|
else if (!a2) {
|
|
|
|
|
const a2 = adm.get(a1)!
|
|
|
|
|
const admn = (p === "soc" ? nav.nid.adm2nsid : nav.nid.adm2naid)
|
|
|
|
|
.filter(an => a2.includes(an[0]))
|
2023-03-06 15:01:03 +08:00
|
|
|
|
const s = admn.reduce((x, y) => x + y[1], 0)
|
|
|
|
|
menu(adm2, [`${p}${a1}`, `全部 (${s})`], admn.map(([a, n]) => [`${p}${a1}-${a}`, `${a} (${n})`]))
|
2023-03-05 17:16:09 +08:00
|
|
|
|
adm1.parentElement!.classList.remove("none")
|
|
|
|
|
adm2.parentElement!.classList.remove("none")
|
|
|
|
|
} else {
|
|
|
|
|
adm1.parentElement!.classList.remove("none")
|
|
|
|
|
adm2.parentElement!.classList.remove("none")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-04 15:52:16 +08:00
|
|
|
|
export function navhash(
|
|
|
|
|
h: string
|
|
|
|
|
): boolean {
|
|
|
|
|
if (nav.hash === h || nav.hash === "" && h === "agd") return false
|
|
|
|
|
location.href = `#${h}`
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
window.addEventListener("hashchange", () => {
|
|
|
|
|
nav.hash = decodeURI(location.hash).substring(1)
|
2023-03-12 11:28:27 +08:00
|
|
|
|
nav.cont = null
|
2023-03-04 15:52:16 +08:00
|
|
|
|
if (nav.hash === "pas") pas()
|
2023-03-16 18:32:47 +08:00
|
|
|
|
else if (nav.hash === "aut") aut()
|
2023-03-04 15:52:16 +08:00
|
|
|
|
else if (/^\d+$/.test(nav.hash)) usr(parseInt(nav.hash))
|
|
|
|
|
else if (nav.hash === "soc") soc()
|
2023-03-05 17:16:09 +08:00
|
|
|
|
else if (nav.hash.startsWith("soc")) soc(nav.hash.substring(3))
|
2023-03-04 15:52:16 +08:00
|
|
|
|
else if (/^s\d+$/.test(nav.hash)) soc(parseInt(nav.hash.substring(1)))
|
|
|
|
|
else if (nav.hash === "" || nav.hash === "agd") agd()
|
2023-03-05 17:16:09 +08:00
|
|
|
|
else if (nav.hash.startsWith("agd")) agd(nav.hash.substring(3))
|
2023-03-04 15:52:16 +08:00
|
|
|
|
else if (/^a\d+$/.test(nav.hash)) agd(parseInt(nav.hash.substring(1)))
|
2023-03-11 12:25:52 +08:00
|
|
|
|
else if (nav.hash === "wsl") md("wsl", 0, "many")
|
|
|
|
|
else if (nav.hash.startsWith("wsl")) md("wsl", parseInt(nav.hash.substring(3)), "one")
|
|
|
|
|
else if (nav.hash === "lit") md("lit", 0, "many")
|
|
|
|
|
else if (nav.hash.startsWith("lit")) md("lit", parseInt(nav.hash.substring(3)), "one")
|
2023-03-04 15:52:16 +08:00
|
|
|
|
else idn(nav.hash, "链接")
|
|
|
|
|
})
|
|
|
|
|
|
2023-03-12 11:28:27 +08:00
|
|
|
|
window.addEventListener("scroll", () => {
|
|
|
|
|
if (nav.cont && window.innerHeight + window.scrollY >= document.body.offsetHeight) nav.cont()
|
|
|
|
|
})
|
|
|
|
|
|
2023-03-04 15:52:16 +08:00
|
|
|
|
export async function load(
|
|
|
|
|
) {
|
2023-03-19 13:16:14 +08:00
|
|
|
|
console.log("ismism-20230319")
|
2023-03-04 15:52:16 +08:00
|
|
|
|
console.log(`\n主义主义开发小组!成员招募中!\n\n发送自我介绍至网站维护邮箱,或微信联系 728 万大可\n \n`)
|
|
|
|
|
await navpas()
|
|
|
|
|
window.dispatchEvent(new Event("hashchange"))
|
|
|
|
|
}
|