@inpageedit/core 0.14.4 → 0.14.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index-DVOc6fB6.js → index-7R2LfhNn.js} +62 -53
- package/dist/index-7R2LfhNn.js.map +1 -0
- package/dist/{index-BdHmr8jw.js → index-DxaqNWv4.js} +3 -3
- package/dist/{index-BdHmr8jw.js.map → index-DxaqNWv4.js.map} +1 -1
- package/dist/index.d.ts +9 -8
- package/dist/index.js +2 -2
- package/dist/plugins/index.js +1 -1
- package/dist/services/index.js +1 -1
- package/dist/style.css +1 -1
- package/lib/index.umd.js +2 -2
- package/lib/index.umd.js.map +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/dist/index-DVOc6fB6.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-BdHmr8jw.js","sources":["../../../node_modules/.pnpm/@inpageedit+logger@0.1.0/node_modules/@inpageedit/logger/dist/index.js","../src/services/ApiService.ts","../src/services/CurrentPageService.ts","../src/services/ResourceLoaderService.ts","../../modal/dist/index.js","../src/services/ModalService.tsx","../src/utils/url.ts","../src/services/WikiMetadataService.tsx","../src/services/storage/managers/LocalStorageManager.ts","../../../node_modules/.pnpm/idb-plus@0.2.0/node_modules/idb-plus/dist/index.js","../src/services/storage/managers/IDBStorageManager.ts","../src/services/storage/index.ts","../src/services/WikiPageService.ts","../src/services/WikiTitleService.ts","../src/services/PreferencesService.tsx","../src/services/i18n/interpolate.ts","../src/services/i18n/I18nManager.ts","../src/services/i18n/index.ts","../src/InPageEdit.ts"],"sourcesContent":["/**\n * @inpageedit/logger\n *\n * Flexible, Extensible Console Logger with Colored Labels and Hierarchical Loggers\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n */\nvar $ = /* @__PURE__ */ ((n) => (n[n.debug = -1] = \"debug\", n[n.log = 0] = \"log\", n[n.info = 1] = \"info\", n[n.warn = 2] = \"warn\", n[n.error = 3] = \"error\", n[n.silent = 4] = \"silent\", n))($ || {});\nconst f = globalThis || window, d = Symbol.for(\"__IPE_LOGGER_COLOR_MAP__\");\nf[d] || (f[d] = /* @__PURE__ */ new Map());\nconst _ = f[d];\nfunction c(n) {\n let t = 2166136261;\n for (let e = 0; e < n.length; e++)\n t ^= n.charCodeAt(e), t = (t >>> 0) * 16777619;\n return t >>> 0;\n}\nconst g = [\n [350, 360],\n [0, 15],\n [15, 30],\n [200, 230],\n [230, 250],\n [250, 280],\n [280, 310],\n [310, 330],\n [140, 160],\n [160, 180]\n];\nfunction E(n, t) {\n const e = g.length, l = c(n) % e, [r, w] = g[l], x = w - r, C = c(n + \":\" + t), s = r + C % (x || 1), b = c(n + \":s\"), a = c(n + \":l\");\n let i, h;\n if (t === \"name\")\n i = 62 + b % 18, h = 30 + a % 12;\n else {\n const P = s >= 0 && s < 50 || s > 330 && s < 360, R = s >= 200 && s <= 300;\n i = 55 + b % 20, R ? h = 55 + a % 8 : P ? h = 48 + a % 6 : h = 50 + a % 8, i < 60 && (i += 5);\n }\n return `hsl(${s}, ${i}%, ${h}%)`;\n}\nfunction u(n, t) {\n if (t)\n return _.set(n, t), t;\n const e = _.get(n);\n if (e) return e;\n const o = n.startsWith(\"name:\") ? \"name\" : \"group\", l = E(n, o);\n return _.set(n, l), l;\n}\n/**\n * @inpageedit/logger\n * Flexible, Extensible Console Logger with Colored Labels and Hierarchical Loggers\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n *\n * @example\n * ```ts\n * const logger = new Logger({ name: 'MyApp', level: LoggerLevel.debug })\n * // normal usage\n * logger.info('Application started')\n * // create sub-logger group\n * const apiLogger = logger.group('API', { color: '#f59e0b' })\n * apiLogger.warn('Deprecated API endpoint used')\n * // define custom level\n * logger.defineLevel('success', { level: LoggerLevel.info, label: '✅', method: 'info' })\n * logger.success('User created successfully')\n * ```\n */\nclass m {\n /**\n * Note: constructor returns a callable Proxy so that you can do `logger('group')`.\n */\n constructor(t = {}) {\n this._custom = (e) => {\n if (!this._enabled(e.level)) return v;\n const [o, l] = this._prefix(e.label);\n return this._consoleMethod(e.method).bind(console, o, ...l);\n }, this._name = t.name, this._nameColor = t.color, this._groupPath = t._groupPath ? [...t._groupPath] : [], this._dynamicLevels = { ...t._dynamicLevels }, this._levelRef = t._levelRef ?? {\n value: t.level ?? 1\n /* info */\n }, this._name && u(`name:${this._name}`, this._nameColor), this._installBuiltinLevels();\n for (const e of Object.keys(this._dynamicLevels))\n this._installLevelGetter(e, this._dynamicLevels[e]);\n return y(this);\n }\n // ---------- public API ----------\n get level() {\n return this._levelRef.value;\n }\n set level(t) {\n this._levelRef.value = t;\n }\n /** Create a sub-logger with a group label */\n group(t, e) {\n return t && u(`group:${t}`, e?.color), new m({\n name: this._name,\n color: this._nameColor,\n _groupPath: [...this._groupPath, t],\n _dynamicLevels: this._dynamicLevels,\n _levelRef: this._levelRef\n });\n }\n /** Define a custom level, e.g. logger.defineLevel('success', { level: info, label: '✅', method: 'info' }) */\n defineLevel(t, e) {\n this._dynamicLevels[t] = { ...e }, this._installLevelGetter(t, e);\n }\n // Built-in level getters\n get debug() {\n return this._method(\"debug\");\n }\n get log() {\n return this._method(\"log\");\n }\n get info() {\n return this._method(\"info\");\n }\n get warn() {\n return this._method(\"warn\");\n }\n get error() {\n return this._method(\"error\");\n }\n // ---------- internals ----------\n _installBuiltinLevels() {\n }\n _installLevelGetter(t, e) {\n Object.defineProperty(this, t, {\n configurable: !0,\n enumerable: !1,\n get: () => this._custom(e)\n });\n }\n _method(t) {\n const e = O[t];\n if (!this._enabled(e.level)) return v;\n const [o, l] = this._prefix(e.label);\n return this._consoleMethod(t).bind(console, o, ...l);\n }\n _consoleMethod(t) {\n const e = console[t];\n return (e || console.log).bind(console);\n }\n _enabled(t) {\n return t >= this._levelRef.value && this._levelRef.value !== 4;\n }\n _prefix(t) {\n const e = [];\n let o = \"\";\n if (this._name) {\n const l = u(`name:${this._name}`, this._nameColor);\n o += `%c${this._name}%c`, e.push(\n `background:${l}; color:#fff; padding:1px 4px; border-radius:2px; font-weight:700;`,\n p\n );\n }\n if (t && (o += ` ${t}`), this._groupPath.length) {\n const l = this._groupPath.join(\"/\"), r = u(`group:${l}`);\n o += ` %c${l}%c`, e.push(`color:${r}; text-decoration: underline;`, p);\n }\n return [o, e];\n }\n}\nconst v = () => {\n}, p = \"color:inherit; background:transparent; text-decoration:none;\", O = {\n debug: { level: -1, label: \"\", method: \"debug\" },\n log: { level: 0, label: \"\", method: \"log\" },\n info: { level: 1, label: \"[I]\", method: \"info\" },\n warn: { level: 2, label: \"[W]\", method: \"warn\" },\n error: { level: 3, label: \"[E]\", method: \"error\" }\n};\nfunction y(n) {\n const t = function(e, o) {\n return n.group(e, o);\n };\n return new Proxy(t, {\n get(e, o, l) {\n return n[o];\n },\n set(e, o, l) {\n return n[o] = l, !0;\n },\n apply(e, o, l) {\n return n.group(l[0], l[1]);\n },\n has(e, o) {\n return o in n;\n }\n });\n}\nfunction S(n) {\n return new m(n);\n}\nexport {\n m as Logger,\n $ as LoggerLevel,\n S as createLogger\n};\n//# sourceMappingURL=index.js.map\n","import { InPageEdit } from '@/InPageEdit'\nimport { FexiosConfigs } from 'wiki-saikou'\nimport { MwApi } from 'wiki-saikou/browser'\n\nexport type * from 'wiki-saikou/browser'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n api: MwApi\n }\n}\n\nexport interface ApiServiceOptions extends Partial<FexiosConfigs> {}\n\nexport class ApiService {\n constructor(\n public ctx: InPageEdit,\n options: Partial<ApiServiceOptions> = {}\n ) {\n if (location?.href && options?.baseURL?.toString()?.startsWith('/')) {\n options.baseURL = new URL(options.baseURL, location.origin)\n }\n const api = new MwApi({\n baseURL: options.baseURL!.toString(),\n fexiosConfigs: {\n headers: {\n 'x-api-user-agent': `InPageEdit-NEXT ${ctx.version}`,\n ...options.headers,\n },\n ...options,\n },\n throwOnApiError: true,\n })\n ctx.set('api', api)\n }\n}\n","import { Inject, InPageEdit, Service } from '@/InPageEdit.js'\nimport { IWikiTitle } from '@/models/WikiTitle'\n\ndeclare module '@/InPageEdit.js' {\n interface InPageEdit {\n /**\n * Basic information of the current web page\n */\n currentPage: CurrentPageService\n }\n}\n\n@Inject(['wiki', 'wikiTitle'])\nexport class CurrentPageService extends Service {\n constructor(readonly ctx: InPageEdit) {\n super(ctx, 'currentPage', false)\n }\n private get logger() {\n return this.ctx.logger('CURRENT_PAGE')\n }\n\n protected async start() {\n await this.#init()\n\n this.#injectHistoryPopState()\n window.addEventListener('popstate', this.#onPopState.bind(this))\n\n this.logger.info('initialized', this.wikiTitle)\n }\n\n protected stop(): void | Promise<void> {\n window.removeEventListener('popstate', this.#onPopState.bind(this))\n }\n\n async #init() {\n await this.#initCurrentTitle()\n await this.#initIsMainPage()\n }\n\n #injectHistoryPopState() {\n const injectKey = Symbol.for('InPageEdit.CurrentPageService.UrlChangeListenerInstalled')\n if ((window as any)[injectKey]) {\n return\n }\n const _pushState = history.pushState\n const _replaceState = history.replaceState\n history.pushState = function (data: any, title: string, url?: string | null) {\n _pushState.apply(this, [data, title, url])\n window.dispatchEvent(new PopStateEvent('popstate', { state: data }))\n }\n history.replaceState = function (data: any, title: string, url?: string | null) {\n _replaceState.apply(this, [data, title, url])\n window.dispatchEvent(new PopStateEvent('popstate', { state: data }))\n }\n ;(window as any)[injectKey] = true\n }\n async #onPopState(e: PopStateEvent) {\n const oldURL = this.url\n const newURL = new URL(window.location.href)\n this.url = newURL\n\n // 只有 path/title=/curid= 变化时,才刷新状态\n if (\n oldURL.pathname !== newURL.pathname ||\n oldURL.searchParams.get('title') !== newURL.searchParams.get('title') ||\n oldURL.searchParams.get('curid') !== newURL.searchParams.get('curid')\n ) {\n await this.#init()\n this.logger.info('location changed', newURL, this.wikiTitle)\n }\n }\n\n url: URL = new URL(window.location.href)\n get params() {\n return this.url.searchParams\n }\n get canonicalUrl() {\n const href = (\n qs<HTMLLinkElement>('link[rel=\"alternate\"][hreflang=\"x-default\"]') ||\n qs<HTMLLinkElement>('link[rel=\"canonical\"]')\n )?.href\n let url: URL | null = null\n if (href) {\n url = new URL(href, location.origin)\n }\n Reflect.defineProperty(this, 'canonicalUrl', {\n get: () => url,\n })\n return url\n }\n\n readonly isMainPage!: boolean\n async #initIsMainPage() {\n const title = this.wikiTitle\n const isMainPage = title?.getMainDBKey() === this.ctx.wiki.mainPageName\n Reflect.defineProperty(this, 'isMainPage', {\n get: () => isMainPage,\n })\n return isMainPage\n }\n\n /**\n * Get the title of the current page by location URL\n * @returns IWikiTitle or null if cannot be determined\n */\n wikiTitle!: IWikiTitle | null\n async #initCurrentTitle(): Promise<IWikiTitle | null> {\n let title: IWikiTitle | null = null\n if (this.canonicalUrl) {\n title = await this.ctx.wikiTitle.newTitleFromUrl(this.canonicalUrl)\n } else {\n title = await this.ctx.wikiTitle.newTitleFromUrl(this.url)\n }\n Object.freeze(title)\n Reflect.defineProperty(this, 'wikiTitle', {\n get: () => title,\n })\n return title\n }\n\n get wikiAction() {\n return this.params.get('action') || 'view'\n }\n}\n","import { InPageEdit, Service } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n resourceLoader: ResourceLoaderService\n }\n}\n\nexport class ResourceLoaderService extends Service {\n constructor(public ctx: InPageEdit) {\n super(ctx, 'resourceLoader', true)\n }\n protected stop(): void | Promise<void> {\n this.removeAll()\n }\n\n loadScript(src: string, attrs?: Record<string, any>): Promise<HTMLScriptElement | null> {\n if (!src) {\n return Promise.resolve(null)\n }\n const key = `script:${src}`\n const existed = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (existed) {\n return Promise.resolve(existed as HTMLScriptElement)\n }\n const promise = new Promise<HTMLScriptElement>((resolve, reject) => {\n const script = document.createElement('script')\n script.src = src\n script.dataset.ipe = key\n if (attrs) {\n Object.entries(attrs).forEach(([key, value]) => {\n if (typeof value === 'undefined' || value === false || value === null) {\n script.removeAttribute(key)\n } else {\n script.setAttribute(key, value)\n }\n })\n }\n document.body.appendChild(script)\n script.onload = () => resolve(script)\n script.onerror = (e) => reject(e)\n })\n return promise\n }\n\n loadStyle(href: string, attrs?: Record<string, any>): Promise<HTMLLinkElement | null> {\n if (!href) {\n return Promise.resolve(null)\n }\n const key = `style:${href}`\n const existed = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (existed) {\n return Promise.resolve(existed as HTMLLinkElement)\n }\n const promise = new Promise<HTMLLinkElement>((resolve, reject) => {\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n link.dataset.ipe = key\n if (attrs) {\n Object.entries(attrs).forEach(([key, value]) => {\n if (typeof value === 'undefined' || value === false || value === null) {\n link.removeAttribute(key)\n } else {\n link.setAttribute(key, value)\n }\n })\n }\n const meta =\n document.querySelector('meta[name=\"ipe-styles\"]') ||\n (() => {\n const meta = document.createElement('meta')\n meta.id = 'ipe-styles'\n meta.name = 'ipe-styles'\n document.head.insertAdjacentElement('afterbegin', meta)\n return meta\n })()\n meta.before(link)\n link.onload = () => resolve(link)\n link.onerror = (e) => reject(e)\n })\n return promise\n }\n\n removeStyle(href: string) {\n const key = `style:${href}`\n const link = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (link) {\n link.remove()\n }\n }\n removeScript(src: string) {\n const key = `script:${src}`\n const script = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (script) {\n script.remove()\n }\n }\n removeAll() {\n document.querySelectorAll('[data-ipe]').forEach((el) => {\n el.remove()\n })\n }\n\n resolveImportPath(path: string) {\n if (path.startsWith('http') || path.startsWith('//')) {\n return path\n }\n if (import.meta.env.VITE_BUILD_FORMAT === 'import') {\n return import.meta.resolve(path)\n }\n const src = (document.currentScript as HTMLScriptElement)?.src\n if (!src) {\n return `https://unpkg.com/mediawiki-inpageedit@latest/dist/${path}`\n }\n const url = new URL(src)\n if (!url.pathname.endsWith('.js')) {\n url.pathname = url.pathname + '/'\n }\n return new URL(path, url.toString()).toString()\n }\n}\n","const S = Object.keys;\nfunction j(s) {\n return typeof s == \"boolean\";\n}\nfunction U(s) {\n return s && typeof s.nodeType == \"number\";\n}\nfunction B(s) {\n return typeof s == \"string\";\n}\nfunction I(s) {\n return typeof s == \"number\";\n}\nfunction w(s) {\n return typeof s == \"object\" ? s !== null : v(s);\n}\nfunction v(s) {\n return typeof s == \"function\";\n}\nfunction Y(s) {\n return !!(s && s.isComponent);\n}\nfunction W(s) {\n return w(s) && typeof s.length == \"number\" && typeof s.nodeType != \"number\";\n}\nfunction x(s, t) {\n if (s)\n for (const e of S(s))\n t(s[e], e);\n}\nfunction G(s) {\n return w(s) && \"current\" in s;\n}\nconst A = {\n animationIterationCount: 0,\n borderImageOutset: 0,\n borderImageSlice: 0,\n borderImageWidth: 0,\n boxFlex: 0,\n boxFlexGroup: 0,\n boxOrdinalGroup: 0,\n columnCount: 0,\n columns: 0,\n flex: 0,\n flexGrow: 0,\n flexPositive: 0,\n flexShrink: 0,\n flexNegative: 0,\n flexOrder: 0,\n gridArea: 0,\n gridRow: 0,\n gridRowEnd: 0,\n gridRowSpan: 0,\n gridRowStart: 0,\n gridColumn: 0,\n gridColumnEnd: 0,\n gridColumnSpan: 0,\n gridColumnStart: 0,\n fontWeight: 0,\n lineClamp: 0,\n lineHeight: 0,\n opacity: 0,\n order: 0,\n orphans: 0,\n tabSize: 0,\n widows: 0,\n zIndex: 0,\n zoom: 0,\n // SVG-related properties\n fillOpacity: 0,\n floodOpacity: 0,\n stopOpacity: 0,\n strokeDasharray: 0,\n strokeDashoffset: 0,\n strokeMiterlimit: 0,\n strokeOpacity: 0,\n strokeWidth: 0\n};\nfunction Z(s, t) {\n return s + t.charAt(0).toUpperCase() + t.substring(1);\n}\nconst q = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\nS(A).forEach((s) => {\n q.forEach((t) => {\n A[Z(t, s)] = 0;\n });\n});\nconst V = Symbol.for(\"jsx-dom:type\");\nvar R = /* @__PURE__ */ function(s) {\n return s.ShadowRoot = \"ShadowRoot\", s;\n}(R || {});\nfunction J(s) {\n return s != null && s[V] === R.ShadowRoot;\n}\nconst Q = \"http://www.w3.org/2000/svg\", tt = \"http://www.w3.org/1999/xlink\", et = \"http://www.w3.org/XML/1998/namespace\";\nfunction F(s) {\n return !j(s) && s != null;\n}\nfunction T(s) {\n return Array.isArray(s) ? s.map(T).filter(Boolean).join(\" \") : w(s) ? Symbol.iterator in s ? T(Array.from(s)) : S(s).filter((t) => s[t]).join(\" \") : F(s) ? \"\" + s : \"\";\n}\nconst st = {\n animate: 0,\n circle: 0,\n clipPath: 0,\n defs: 0,\n desc: 0,\n ellipse: 0,\n feBlend: 0,\n feColorMatrix: 0,\n feComponentTransfer: 0,\n feComposite: 0,\n feConvolveMatrix: 0,\n feDiffuseLighting: 0,\n feDisplacementMap: 0,\n feDistantLight: 0,\n feFlood: 0,\n feFuncA: 0,\n feFuncB: 0,\n feFuncG: 0,\n feFuncR: 0,\n feGaussianBlur: 0,\n feImage: 0,\n feMerge: 0,\n feMergeNode: 0,\n feMorphology: 0,\n feOffset: 0,\n fePointLight: 0,\n feSpecularLighting: 0,\n feSpotLight: 0,\n feTile: 0,\n feTurbulence: 0,\n filter: 0,\n foreignObject: 0,\n g: 0,\n image: 0,\n line: 0,\n linearGradient: 0,\n marker: 0,\n mask: 0,\n metadata: 0,\n path: 0,\n pattern: 0,\n polygon: 0,\n polyline: 0,\n radialGradient: 0,\n rect: 0,\n stop: 0,\n svg: 0,\n switch: 0,\n symbol: 0,\n text: 0,\n textPath: 0,\n tspan: 0,\n use: 0,\n view: 0\n}, it = /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;\nfunction nt(s) {\n const t = document.createDocumentFragment();\n return E(s.children, t), t;\n}\nfunction ot(s, t, e) {\n t = {\n ...t,\n children: e\n };\n const i = new s(t), n = i.render();\n return \"ref\" in t && M(t.ref, i), n;\n}\nfunction c(s, t) {\n let { children: e, ...i } = t;\n !i.namespaceURI && st[s] === 0 && (i = {\n ...i,\n namespaceURI: Q\n });\n let n;\n if (B(s)) {\n if (n = i.namespaceURI ? document.createElementNS(i.namespaceURI, s) : document.createElement(s), at(i, n), E(e, n), n instanceof window.HTMLSelectElement && i.value != null)\n if (i.multiple === !0 && Array.isArray(i.value)) {\n const o = i.value.map((l) => String(l));\n n.querySelectorAll(\"option\").forEach(\n (l) => l.selected = o.includes(l.value)\n );\n } else\n n.value = i.value;\n M(i.ref, n);\n } else if (v(s))\n w(s.defaultProps) && (i = {\n ...s.defaultProps,\n ...i\n }), n = Y(s) ? ot(s, i, e) : s({\n ...i,\n children: e\n });\n else\n throw new TypeError(`Invalid JSX element type: ${s}`);\n return n;\n}\nfunction M(s, t) {\n G(s) ? s.current = t : v(s) && s(t);\n}\nfunction E(s, t) {\n if (W(s))\n rt(s, t);\n else if (B(s) || I(s))\n L(document.createTextNode(s), t);\n else if (s === null)\n L(document.createComment(\"\"), t);\n else if (U(s))\n L(s, t);\n else if (J(s)) {\n const e = t.attachShadow(s.attr);\n E(s.children, e), M(s.ref, e);\n }\n}\nfunction rt(s, t) {\n for (const e of [...s])\n E(e, t);\n return t;\n}\nfunction L(s, t) {\n t instanceof window.HTMLTemplateElement ? t.content.appendChild(s) : t.appendChild(s);\n}\nfunction C(s, t) {\n return s.replace(/[A-Z]/g, (e) => t + e.toLowerCase());\n}\nfunction K(s, t) {\n t == null || t === !1 || (Array.isArray(t) ? t.forEach((e) => K(s, e)) : B(t) ? s.setAttribute(\"style\", t) : w(t) && x(t, (e, i) => {\n i.indexOf(\"-\") === 0 ? s.style.setProperty(i, e) : I(e) && A[i] !== 0 ? s.style[i] = e + \"px\" : s.style[i] = e;\n }));\n}\nfunction lt(s, t, e) {\n switch (s) {\n case \"xlinkActuate\":\n case \"xlinkArcrole\":\n case \"xlinkHref\":\n case \"xlinkRole\":\n case \"xlinkShow\":\n case \"xlinkTitle\":\n case \"xlinkType\":\n _(e, tt, C(s, \":\"), t);\n return;\n case \"xmlnsXlink\":\n b(e, C(s, \":\"), t);\n return;\n case \"xmlBase\":\n case \"xmlLang\":\n case \"xmlSpace\":\n _(e, et, C(s, \":\"), t);\n return;\n }\n switch (s) {\n case \"htmlFor\":\n b(e, \"for\", t);\n return;\n case \"dataset\":\n x(t, (i, n) => {\n i != null && (e.dataset[n] = i);\n });\n return;\n case \"innerHTML\":\n case \"innerText\":\n case \"textContent\":\n F(t) && (e[s] = t);\n return;\n case \"dangerouslySetInnerHTML\":\n w(t) && (e.innerHTML = t.__html);\n return;\n case \"value\":\n if (t == null || e instanceof window.HTMLSelectElement)\n return;\n if (e instanceof window.HTMLTextAreaElement) {\n e.value = t;\n return;\n }\n break;\n case \"spellCheck\":\n e.spellcheck = t;\n return;\n case \"class\":\n case \"className\":\n v(t) ? t(e) : b(e, \"class\", T(t));\n return;\n case \"ref\":\n case \"namespaceURI\":\n return;\n case \"style\":\n K(e, t);\n return;\n case \"on\":\n case \"onCapture\":\n x(t, (i, n) => {\n e.addEventListener(n, i, s === \"onCapture\");\n });\n return;\n }\n if (v(t)) {\n if (s[0] === \"o\" && s[1] === \"n\") {\n let i = s.toLowerCase();\n const n = i.endsWith(\"capture\");\n if (i === \"ondoubleclick\" ? i = \"ondblclick\" : n && i === \"ondoubleclickcapture\" && (i = \"ondblclickcapture\"), !n && e[i] === null)\n e[i] = t;\n else if (n)\n e.addEventListener(\n i.substring(2, i.length - 7),\n t,\n !0\n );\n else {\n let o;\n i in window ? o = i.substring(2) : o = i[2] + s.slice(3), e.addEventListener(o, t);\n }\n }\n } else w(t) ? e[s] = t : t === !0 ? b(e, s, \"\") : t !== !1 && t != null && (e instanceof SVGElement && !it.test(s) ? b(e, C(s, \"-\"), t) : b(e, s, t));\n}\nfunction b(s, t, e) {\n s.setAttribute(t, e);\n}\nfunction _(s, t, e, i) {\n s.setAttributeNS(t, e, i);\n}\nfunction at(s, t) {\n for (const e of S(s))\n lt(e, s[e], t);\n return t;\n}\nvar P = /* @__PURE__ */ ((s) => (s.Init = \"modal.init\", s.BeforeShow = \"modal.beforeShow\", s.Show = \"modal.show\", s.BeforeClose = \"modal.beforeClose\", s.Close = \"modal.close\", s.Destroy = \"modal.destroy\", s.ToastShow = \"toast.show\", s.ToastClose = \"toast.close\", s))(P || {});\nlet ct = 0;\nconst z = (s) => `${s}-${++ct}`;\nfunction k(s) {\n return s instanceof Node ? s : document.createTextNode(String(s));\n}\nfunction p(s, t) {\n if (!s) throw new Error(`${t ?? \"Element\"} not found`);\n return s;\n}\nfunction H(s) {\n const t = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])'\n ].join(\",\");\n return Array.from(s.querySelectorAll(t)).filter(\n (e) => !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)\n );\n}\nfunction h(s, t = {}) {\n const e = document.createElement(s);\n if (t.className && (e.className = t.className), t.html != null && (e.innerHTML = t.html), t.text != null && (e.textContent = t.text), t.attrs)\n for (const [i, n] of Object.entries(t.attrs)) e.setAttribute(i, n);\n return e;\n}\nconst ht = typeof navigator < \"u\" && /Mac|iPhone|iPad|iPod/i.test(navigator.platform), X = [\"ctrl\", \"alt\", \"shift\", \"meta\"];\nfunction dt(s) {\n if (!s) return null;\n const t = String(s).trim().toLowerCase().split(/[+\\-\\s]+/g).filter(Boolean), e = [];\n let i = null;\n const n = (l) => {\n e.includes(l) || e.push(l);\n };\n for (const l of t) {\n let r = l;\n if (r === \"control\" || r === \"ctrl\") {\n n(\"ctrl\");\n continue;\n }\n if (r === \"alt\" || r === \"option\") {\n n(\"alt\");\n continue;\n }\n if (r === \"shift\") {\n n(\"shift\");\n continue;\n }\n if (r === \"meta\" || r === \"cmd\" || r === \"command\" || r === \"super\") {\n n(\"meta\");\n continue;\n }\n if (r === \"mod\") {\n n(ht ? \"meta\" : \"ctrl\");\n continue;\n }\n r === \"esc\" && (r = \"escape\"), r === \"return\" && (r = \"enter\"), (r === \"space\" || r === \"spacebar\") && (r = \"space\"), i = r;\n }\n const o = X.filter((l) => e.includes(l));\n return !i || i === \"\" ? o.length ? o.join(\"+\") : null : o.length ? `${o.join(\"+\")}+${i}` : i;\n}\nfunction ft(s) {\n const t = [];\n s.ctrlKey && t.push(\"ctrl\"), s.altKey && t.push(\"alt\"), s.shiftKey && t.push(\"shift\"), s.metaKey && t.push(\"meta\");\n let e = s.key;\n e === \" \" && (e = \"space\");\n const i = (e.length === 1, e.toLowerCase()), n = X.filter((o) => t.includes(o));\n return n.length ? `${n.join(\"+\")}+${i}` : i;\n}\nclass ut {\n constructor() {\n this.zBase = 1e3, this.stack = [];\n }\n push(t) {\n this.stack.push(t), this.syncZ();\n }\n remove(t) {\n this.stack = this.stack.filter((e) => e !== t), this.syncZ();\n }\n top() {\n return this.stack[this.stack.length - 1];\n }\n closeAll(t, e) {\n const i = new Set((Array.isArray(e) ? e : e ? [e] : []).map(String)), n = new Set((Array.isArray(t) ? t : t ? [t] : []).map(String));\n [...this.stack].reverse().forEach((o) => {\n const l = o.modalId, r = n.size ? n.has(o.pluginName) : !0, a = i.has(l);\n r && !a && o.close();\n });\n }\n removeAll() {\n [...this.stack].forEach((t) => t.destroy()), this.stack = [];\n }\n syncZ() {\n this.stack.forEach((t, e) => t.setZIndex(this.zBase + e * 2));\n }\n lockBodyScroll() {\n document.body.classList.add(\"ipe-modal-no-scroll\");\n }\n unlockBodyScroll() {\n document.body.classList.remove(\"ipe-modal-no-scroll\");\n }\n}\nconst d = new ut();\nclass N {\n constructor(t = {}) {\n this.backdropId = z(\"ipe-modal-backdrop\"), this.modalId = z(\"ipe-modal\"), this.numberId = this.modalId.split(\"-\")[1], this._isDestroyed = !1, this.pluginName = \"normalModal\", this.buttonElsLeft = [], this.buttonElsRight = [], this.keyMap = /* @__PURE__ */ new Map(), this.isOpen = !1, this.isToast = !1, this.isDragging = !1, this.dragStartX = 0, this.dragStartY = 0, this.modalStartX = 0, this.modalStartY = 0, this.Event = P, this._hooks = [], this.startCloseTimer = (e) => {\n this.stopCloseTimer(), this.closeTimer = window.setTimeout(() => this.close(), e);\n }, this.stopCloseTimer = () => {\n this.closeTimer && window.clearTimeout(this.closeTimer), this.closeTimer = void 0;\n }, this.onDragMove = (e) => {\n if (!this.isDragging) return;\n e.preventDefault();\n const i = e.clientX - this.dragStartX, n = e.clientY - this.dragStartY, o = this.get$modal(), l = this.modalStartX + i, r = this.modalStartY + n;\n o.style.left = `${l}px`, o.style.top = `${r}px`;\n }, this.onDragEnd = () => {\n if (!this.isDragging) return;\n this.isDragging = !1, document.removeEventListener(\"pointermove\", this.onDragMove), document.removeEventListener(\"pointerup\", this.onDragEnd);\n const e = this.get$modal(), i = this.get$window();\n e.classList.remove(\"is-dragging\"), i.style.animation = \"none\", requestAnimationFrame(() => {\n this.applyAnimation(!0);\n });\n }, this.options = { ...N.DEFAULT_OPTIONS, ...t }, this.options.backdrop === !1 && t.bodyScroll === void 0 && (this.options.bodyScroll = !0);\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n static {\n this.DEFAULT_OPTIONS = {\n className: \"\",\n sizeClass: \"auto\",\n center: !0,\n fitScreen: !1,\n closeIcon: !0,\n bodyScroll: !1,\n outSideClose: !0,\n backdrop: !0,\n animation: {\n show: \"ipe-modal-fade-in\",\n hide: \"ipe-modal-fade-out\"\n },\n animationSpeed: 200\n };\n }\n static extends(t = {}) {\n return class extends this {\n constructor(e = {}) {\n super({ ...t, ...e });\n }\n };\n }\n // ------------------------------ lifecycle ------------------------------ //\n init() {\n if (this.$modal) return this;\n const t = this.options.backdrop !== !1;\n let e;\n t && (e = h(\"div\", {\n className: \"ipe-modal-backdrop\",\n attrs: { id: this.backdropId, \"data-modal-id\": this.modalId }\n }));\n const i = h(\"div\", {\n className: \"ipe-modal-modal\",\n attrs: { id: this.modalId, role: \"dialog\", \"aria-modal\": \"true\", tabindex: \"-1\" }\n });\n if (i.modal = this, !t) {\n i.classList.add(\"no-backdrop\");\n const m = window.pageYOffset || document.documentElement.scrollTop, $ = window.pageXOffset || document.documentElement.scrollLeft, D = window.innerWidth;\n i.style.top = `${m + 60}px`, this.once(\"modal.show\", () => {\n i.style.left = `${$ + D / 2 - i.offsetWidth / 2}px`;\n });\n }\n const n = h(\"div\", {\n className: `ipe-modal-modal__window size--${this.options.sizeClass || \"auto\"} plugin--${this.pluginName}`\n });\n n.modal = this;\n const o = h(\"div\", { className: \"ipe-modal-modal__header\" }), l = `${this.modalId}-title`, r = h(\"h2\", {\n className: \"ipe-modal-modal__title\",\n attrs: { id: l, role: \"heading\", \"aria-level\": \"2\" }\n });\n i.setAttribute(\"aria-labelledby\", l);\n const a = h(\"div\", { className: \"ipe-modal-modal__icons\" });\n if (this.options.closeIcon) {\n const m = h(\"button\", {\n className: \"ipe-modal-modal__close\",\n attrs: { type: \"button\", \"aria-label\": \"Close\" },\n html: \"×\"\n });\n m.addEventListener(\"click\", () => {\n let $ = !0;\n typeof this.options.onClickClose == \"function\" ? this.options.onClickClose(this) === !1 && ($ = !1) : this.options.onClickClose === !1 && ($ = !1), $ && this.close();\n }), a.appendChild(m);\n }\n o.append(r, a), this.options.draggable && t && (this.options.draggable = !1), this.options.draggable && (o.style.cursor = \"move\", o.style.userSelect = \"none\", o.addEventListener(\"pointerdown\", this.onDragStart.bind(this)), i.classList.add(\"is-draggable\"));\n const u = h(\"div\", { className: \"ipe-modal-modal__content\" }), f = h(\"div\", { className: \"ipe-modal-modal__footer\" }), y = h(\"div\", {\n className: \"ipe-modal-modal__buttons ipe-modal-modal__buttons--left\"\n }), O = h(\"div\", {\n className: \"ipe-modal-modal__buttons ipe-modal-modal__buttons--right\"\n });\n return f.append(y, O), n.append(o, u, f), i.appendChild(n), this.$backdrop = e, this.$modal = i, this.$window = n, this.$header = o, this.$title = r, this.$icons = a, this.$content = u, this.$footer = f, this.$buttonsLeft = y, this.$buttonsRight = O, this.options.title && this.setTitle(this.options.title), this.options.content && this.setContent(this.options.content), this.options.buttons?.length ? this.setButtons(this.options.buttons) : f.style.display = \"none\", this.options.center && this.$modal.classList.add(\"is-centered\"), this.options.fitScreen && this.$modal.classList.add(\"is-fullscreen\"), this.options.iconButtons && this.$header.classList.add(\"has-icon-buttons\"), this.options.className && this.$window.classList.add(...this.options.className.split(/[\\s\\.#+]+/g).filter(Boolean)), typeof this.options.fixedHeight == \"number\" ? this.$window.style.height = `${Math.max(0, this.options.fixedHeight)}px` : this.options.fixedHeight === !0 && this.$window.classList.add(\"is-fixed-height\"), e && e.addEventListener(\"pointerdown\", (m) => {\n this.options.outSideClose && m.target === e && this.close();\n }), this.options.draggable && n.addEventListener(\"pointerdown\", (m) => {\n m.target && n.contains(m.target) && this.bringToFront();\n }), this.onKeyDown = this.onKeyDown.bind(this), this.emit(\n \"modal.init\"\n /* Init */\n ), this;\n }\n show() {\n if (this.$modal || this.init(), !this.$modal) throw new Error(\"Failed to initialize modal\");\n if (this.isOpen) return this;\n {\n const i = this.emit(\"modal.beforeShow\", !0), n = this.options.beforeShow ? this.options.beforeShow(this) !== !1 : !0;\n if (!i || !n) return this;\n }\n this.lastFocused = document.activeElement ?? null, this.$backdrop && document.body.appendChild(this.$backdrop), document.body.appendChild(this.$modal), this.shouldLockBodyOnOpen() && d.lockBodyScroll(), requestAnimationFrame(() => {\n this.$backdrop?.classList.add(\"is-open\"), this.$modal.classList.add(\"is-open\"), this.applyAnimation(!0), this.focusFirst();\n }), document.addEventListener(\"keydown\", this.onKeyDown), d.push(this), this.isOpen = !0, this.options.onShow?.(this), this.emit(\n \"modal.show\"\n /* Show */\n );\n const t = typeof this.options.closeAfter == \"number\" ? this.options.closeAfter : this.options.closeAfter?.time, e = typeof this.options.closeAfter == \"number\" ? !0 : this.options.closeAfter?.resetOnHover;\n return t && (this.startCloseTimer(t), e && (this.$window?.addEventListener(\"mouseenter\", this.stopCloseTimer), this.$window?.addEventListener(\"mouseleave\", () => this.startCloseTimer(t)))), this;\n }\n close() {\n if (!this.isOpen) return this;\n {\n const o = this.emit(\"modal.beforeClose\", !0), l = this.options.beforeClose ? this.options.beforeClose(this) !== !1 : !0;\n if (!o || !l) return this;\n }\n if (this.isToast) {\n this.applyAnimation(!1), this.emit(\n \"modal.close\"\n /* Close */\n ), this.emit(\n \"toast.close\"\n /* ToastClose */\n );\n const o = this.isAnimationDisabled() ? 0 : this.options.animationSpeed ?? 200;\n let l = !1;\n const r = () => {\n l || (l = !0, this.destroy(), this.options.onClose?.(this));\n }, a = (u, f) => {\n const y = () => {\n u.removeEventListener(f, y), r();\n };\n u.addEventListener(f, y, { once: !0 });\n };\n return o > 0 && this.$window ? (a(this.$window, \"transitionend\"), a(this.$window, \"animationend\"), window.setTimeout(r, o + 20)) : window.setTimeout(r, o), this;\n }\n this.applyAnimation(!1), this.$backdrop?.classList.remove(\"is-open\"), this.$modal?.classList.remove(\"is-open\"), this.emit(\n \"modal.close\"\n /* Close */\n );\n const t = this.isAnimationDisabled() ? 0 : this.options.animationSpeed ?? 200;\n let e = !1;\n const i = () => {\n e || (e = !0, this.destroy(), this.options.onClose?.(this));\n }, n = (o, l) => {\n const r = () => {\n o.removeEventListener(l, r), i();\n };\n o.addEventListener(l, r, { once: !0 });\n };\n return t > 0 && this.$window ? (n(this.$window, \"transitionend\"), n(this.$window, \"animationend\"), window.setTimeout(i, t + 20)) : window.setTimeout(i, t), this;\n }\n /** Immediately removes DOM and listeners */\n destroy() {\n if (this._isDestroyed) return this;\n if (this.stopCloseTimer(), document.removeEventListener(\"keydown\", this.onKeyDown), this.isDragging && this.onDragEnd(), this.$window?.removeEventListener(\"mouseenter\", this.stopCloseTimer), this.isToast) {\n this.$window?.parentElement && this.$window.parentElement.removeChild(this.$window);\n const t = g.indexOf(this);\n t !== -1 && g.splice(t, 1);\n } else\n this.$backdrop?.parentElement && this.$backdrop.parentElement.removeChild(this.$backdrop), this.$modal?.parentElement && this.$modal.parentElement.removeChild(this.$modal), d.remove(this), this.shouldUnlockBodyOnClose() && d.unlockBodyScroll();\n return this.isOpen = !1, this.lastFocused?.focus?.(), this.emit(\n \"modal.destroy\"\n /* Destroy */\n ), this._isDestroyed = !0, this;\n }\n // ------------------------------ getters ------------------------------- //\n get$backdrop() {\n return this.$backdrop;\n }\n get$modal() {\n return p(this.$modal, \"modal\");\n }\n get$window() {\n return p(this.$window, \"window\");\n }\n get$header() {\n return p(this.$header, \"header\");\n }\n get$title() {\n return p(this.$title, \"title\");\n }\n get$content() {\n return p(this.$content, \"content\");\n }\n get$icons() {\n return p(this.$icons, \"icons\");\n }\n get$buttons(t) {\n return t === \"leftButtons\" ? p(this.$buttonsLeft, \"leftButtons\") : t === \"rightButtons\" ? p(this.$buttonsRight, \"rightButtons\") : p(this.$footer, \"buttons\");\n }\n // ------------------------------ content ------------------------------- //\n setTitle(t) {\n const e = this.get$title();\n return e.innerHTML = \"\", e.append(k(t)), this;\n }\n setContent(t, e = \"replace\") {\n const i = this.get$content();\n return e === \"replace\" ? (i.innerHTML = \"\", i.append(k(t))) : e === \"append\" ? i.append(k(t)) : i.prepend(k(t)), this;\n }\n setIcons(t) {\n const e = this.get$icons();\n e.innerHTML = \"\";\n for (const i of t) {\n const n = h(\"button\", {\n className: `ipe-modal-modal__icon ${i.className}`,\n attrs: { type: \"button\" }\n });\n n.addEventListener(\"click\", i.method), e.appendChild(n);\n }\n return this;\n }\n setButtons(t, e) {\n const i = this.$buttonsLeft, n = this.$buttonsRight;\n [i, n].forEach((l) => l.innerHTML = \"\"), this.buttonElsLeft = [], this.buttonElsRight = [], this.keyMap.clear();\n const o = e ?? this.$footer;\n if (o === this.$footer)\n t.forEach((l) => this.addButton(l)), t.length === 0 && (this.$footer.style.display = \"none\");\n else {\n o.innerHTML = \"\";\n for (const l of t) {\n const r = this.generateButton(l);\n o.appendChild(r);\n }\n }\n return this;\n }\n generateButton(t) {\n const e = t.type ?? \"button\", i = e === \"link\" ? h(\"a\") : h(\"button\", { attrs: { type: \"button\" } });\n t.id && (i.id = t.id), i.className = `ipe-modal-btn ${t.className ?? \"\"}`.trim();\n const n = k(t.label ?? \"OK\");\n if (i.append(n), e === \"link\" && t.href && (i.href = t.href), t.method && i.addEventListener(\"click\", (o) => {\n if (i._ipe_tmpDisabled) {\n o.preventDefault(), o.stopPropagation();\n return;\n }\n t.method.call(i, o, this);\n }), typeof t.closeAfter == \"number\" && t.closeAfter >= 0 && i.addEventListener(\"click\", () => {\n window.setTimeout(() => this.close(), t.closeAfter);\n }), typeof t.enableAfter == \"number\" && t.enableAfter > 0) {\n e === \"button\" && i.setAttribute(\"disabled\", \"true\"), i._ipe_tmpDisabled = !0, i.setAttribute(\"aria-disabled\", \"true\");\n const o = () => {\n e === \"button\" && i.removeAttribute(\"disabled\"), delete i._ipe_tmpDisabled, i.removeAttribute(\"aria-disabled\");\n };\n window.setTimeout(o, t.enableAfter);\n }\n if (t.keyPress) {\n const l = String(t.keyPress).split(/[\\,\\|]+/g).map((r) => r.trim()).filter(Boolean);\n for (const r of l) {\n const a = dt(r);\n a && this.keyMap.set(a, i);\n }\n }\n return i;\n }\n /** Dynamically add button(s) into footer. Supports insertion index per side. */\n addButton(t, e) {\n this.$footer && (this.$footer.style.display = \"\");\n const i = t.side ?? \"right\", n = i === \"left\" ? this.$buttonsLeft : this.$buttonsRight, o = i === \"left\" ? this.buttonElsLeft : this.buttonElsRight, l = this.generateButton(t), r = Math.max(0, Math.min(e ?? o.length, o.length));\n return r >= n.children.length ? n.appendChild(l) : n.insertBefore(l, n.children[r]), o.splice(r, 0, l), this;\n }\n /** Remove button by element / id / global index (left first, then right). */\n removeButton(t) {\n const e = this.buttonElsLeft, i = this.buttonElsRight, n = [...e, ...i];\n let o = null;\n if (t === \"*\")\n return n.forEach((r) => {\n this.keyMap.delete(r.id), r.parentElement?.removeChild(r);\n }), this.$footer && (this.$footer.style.display = \"none\"), this;\n if (typeof t == \"number\" ? o = n[t] ?? null : typeof t == \"string\" ? o = n.find((r) => r.id === t) ?? null : t instanceof HTMLElement && (o = n.find((r) => r === t) ?? null), !o) return this;\n for (const [r, a] of this.keyMap.entries()) a === o && this.keyMap.delete(r);\n let l = e.indexOf(o);\n return l !== -1 ? (e.splice(l, 1), o.parentElement?.removeChild(o)) : (l = i.indexOf(o), l !== -1 && (i.splice(l, 1), o.parentElement?.removeChild(o))), e.length === 0 && i.length === 0 && this.$footer && (this.$footer.style.display = \"none\"), this;\n }\n changePreviewState() {\n return this.get$modal().classList.toggle(\"is-fullscreen\"), this;\n }\n setModalHeight(t, e = \"height\") {\n const i = this.get$window(), n = Math.max(0, window.innerHeight - t);\n return i.style[e] = `${n}px`, n;\n }\n setOptions(t, e) {\n return typeof t == \"string\" ? this.options[t] = e : Object.assign(this.options, t), this;\n }\n setPluginName(t) {\n return this.$window && (this.$window.className = this.$window.className.replace(\n `plugin--${this.pluginName}`,\n `plugin--${t}`\n )), this.pluginName = t, this;\n }\n // ------------------------------ helpers ------------------------------- //\n applyAnimation(t) {\n const e = this.get$modal(), i = this.get$window(), n = this.$backdrop, o = this.options.modalAnimation ?? this.options.animation, l = typeof o == \"string\" ? o : o && (t ? o.show : o.hide), r = this.options.backdropAnimation ?? this.options.animation, a = typeof r == \"string\" ? r : r && (t ? r.show : r.hide);\n !l || l === !1 ? (e.style.transition = \"none\", i.style.animation = \"none\", i.style.removeProperty(\"--ipe-modal-anim\")) : (e.style.removeProperty(\"transition\"), i.style.setProperty(\"--ipe-modal-anim\", l)), n && (!a || a === !1 ? n.style.transition = \"none\" : n.style.removeProperty(\"transition\"));\n }\n on(t, e) {\n return this._hooks.push({ type: t, listener: e }), () => this.off(t, e);\n }\n off(t, e) {\n return this._hooks = this._hooks.filter(\n (i) => i.type !== t && (e ? i.listener !== e : !0)\n ), this;\n }\n once(t, e) {\n const i = this.on(t, (n) => (i(), e(n)));\n return i;\n }\n emit(t, e) {\n const i = this._hooks.filter((a) => a.type === t);\n let n = !0;\n for (const a of i) {\n const u = new CustomEvent(t, { detail: this, cancelable: e }), f = a.listener(u);\n if (u.defaultPrevented && (n = !1), f === !1 && (n = !1), !n) break;\n }\n const o = this.$modal ?? document.body, l = new CustomEvent(t, { detail: this, cancelable: e });\n return (!o.dispatchEvent(l) || l.defaultPrevented) && (n = !1), n;\n }\n focusFirst() {\n const t = this.get$modal(), e = H(t);\n e.length ? e[0].focus() : t.focus({ preventScroll: !0 });\n }\n onKeyDown(t) {\n if (d.top() !== this) return;\n if (t.key === \"Escape\") {\n t.preventDefault(), this.close();\n return;\n }\n const e = this.get$modal();\n if (!e.contains(document.activeElement)) return;\n if (t.key === \"Tab\") {\n const r = H(e);\n if (!r.length) return;\n const a = r[0], u = r[r.length - 1], f = document.activeElement;\n t.shiftKey && f === a ? (t.preventDefault(), u.focus()) : !t.shiftKey && f === u && (t.preventDefault(), a.focus());\n }\n const i = t.ctrlKey || t.altKey || t.metaKey, n = t.target;\n if (!i && (n && [\"INPUT\", \"TEXTAREA\"].includes(n.tagName) || n.contentEditable === \"true\"))\n return;\n const o = ft(t), l = this.keyMap.get(o);\n if (l) {\n t.preventDefault(), l.click();\n return;\n }\n }\n setZIndex(t) {\n this.$backdrop && (this.$backdrop.style.zIndex = String(t)), this.$modal && (this.$modal.style.zIndex = String(t + 1));\n }\n /** Bring this modal to the top of the stack. */\n bringToFront() {\n return d.remove(this), d.push(this), this;\n }\n isAnimationDisabled() {\n const t = this.options.modalAnimation ?? this.options.animation;\n return t === !1 || t == null;\n }\n shouldLockBodyOnOpen() {\n return this.options.backdrop === !1 || this.options.bodyScroll !== !1 ? !1 : !d.stack.some(\n (e) => e !== this && e.options.backdrop !== !1 && e.options.bodyScroll === !1\n );\n }\n shouldUnlockBodyOnClose() {\n return this.options.backdrop === !1 || this.options.bodyScroll !== !1 ? !1 : !d.stack.some(\n (e) => e !== this && e.options.backdrop !== !1 && e.options.bodyScroll === !1\n );\n }\n // ------------------------------ drag handlers ------------------------------- //\n onDragStart(t) {\n if (this.options.backdrop !== !1 || !this.options.draggable) return;\n t.preventDefault(), this.isDragging = !0, this.bringToFront(), this.dragStartX = t.clientX, this.dragStartY = t.clientY;\n const e = this.get$modal(), i = e.getBoundingClientRect();\n this.modalStartX = i.left + window.pageXOffset, this.modalStartY = i.top + window.pageYOffset, e.style.transform = \"none\", e.style.left = `${this.modalStartX}px`, e.style.top = `${this.modalStartY}px`, document.addEventListener(\"pointermove\", this.onDragMove), document.addEventListener(\"pointerup\", this.onDragEnd), e.classList.add(\"is-dragging\");\n }\n // ------------------------------ toast ------------------------------- //\n /** Show as toast (no backdrop, container stack). */\n showToast(t) {\n this.$window || this.init();\n const e = mt(t.position ?? \"top right\"), i = this.get$window();\n this.isToast = !0, i.style.pointerEvents = \"auto\", this.applyAnimation(!0), e.appendChild(i);\n const n = (typeof this.options.closeAfter == \"number\" ? this.options.closeAfter : this.options.closeAfter?.time) ?? 3e3, o = (typeof this.options.closeAfter == \"number\" ? !0 : this.options.closeAfter?.resetOnHover) ?? !0;\n return n > 0 && (this.startCloseTimer(n), o && (i.addEventListener(\"mouseenter\", this.stopCloseTimer), i.addEventListener(\"mouseleave\", () => this.startCloseTimer(n)))), this.isOpen = !0, this.options.onShow?.(this), g.push(this), this.emit(\n \"toast.show\"\n /* ToastShow */\n ), this.emit(\n \"modal.show\"\n /* Show */\n ), this;\n }\n // ------------------------------ static helpers --------------------------- //\n static show(t, e) {\n return new this(t).init().show();\n }\n static createObject(t, e) {\n return new this(t);\n }\n static close(t) {\n if (!t) {\n const o = d.top();\n return o?.close(), o;\n }\n const e = typeof t == \"string\" ? t : t.id, i = d.stack.find((o) => o.modalId === e);\n if (i)\n return i.close(), i;\n const n = g.find((o) => o.modalId === e);\n return n?.close(), n;\n }\n static closeAll(t, e) {\n const i = new Set((Array.isArray(e) ? e : e ? [e] : []).map(String)), n = new Set((Array.isArray(t) ? t : t ? [t] : []).map(String));\n return d.closeAll(t, e), [...g].forEach((o) => {\n const l = o.modalId, r = n.size ? n.has(o.pluginName) : !0, a = i.has(l);\n r && !a && o.close();\n }), d.top() ?? new N();\n }\n static removeAll() {\n d.removeAll(), [...g].forEach((t) => t.destroy());\n }\n static dialog(t, e) {\n const i = new this({\n sizeClass: \"dialog\",\n buttons: [\n {\n label: \"OK\",\n className: \"is-primary is-ghost\",\n method: (n, o) => {\n e?.(n, o), n.defaultPrevented || i.close();\n },\n keyPress: \"Enter\"\n }\n ],\n ...t\n });\n return i.init().show();\n }\n static confirm(t, e) {\n t.title ??= \"Confirm\", t.content ??= \"Are you sure you want to perform this action?\";\n const i = t.okBtn ?? { label: \"OK\", className: \"is-primary is-ghost\" }, n = t.cancelBtn ?? { label: \"Cancel\", className: \"is-danger is-ghost\" };\n return new this({\n sizeClass: \"dialog\",\n ...t,\n buttons: [\n {\n label: n.label,\n className: n.className,\n keyPress: \"n\",\n method: (l, r) => {\n e?.(!1, r, l), r.close();\n }\n },\n {\n label: i.label,\n className: i.className,\n keyPress: \"y\",\n method: (l, r) => {\n e?.(!0, r, l), l.defaultPrevented || r.close();\n }\n }\n ]\n }).init().show();\n }\n static getDefaultNotifyIcon(t) {\n switch (t) {\n case \"success\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-circle-check\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\" })\n ]\n }\n );\n case \"error\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-alert-triangle\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\" })\n ]\n }\n );\n case \"warning\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-alert-circle\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm.01 13l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -8a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\" })\n ]\n }\n );\n case \"info\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-info-circle\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm0 9h-1l-.117 .007a1 1 0 0 0 0 1.986l.117 .007v3l.007 .117a1 1 0 0 0 .876 .876l.117 .007h1l.117 -.007a1 1 0 0 0 .876 -.876l.007 -.117l-.007 -.117a1 1 0 0 0 -.764 -.857l-.112 -.02l-.117 -.006v-3l-.007 -.117a1 1 0 0 0 -.876 -.876l-.117 -.007zm.01 -3l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007z\" })\n ]\n }\n );\n case \"dialog\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n class: \"icon icon-tabler icons-tabler-outline icon-tabler-message-dots\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 11v.01\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M8 11v.01\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M16 11v.01\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3z\" })\n ]\n }\n );\n case \"confirm\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-copy-check\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M18.333 6a3.667 3.667 0 0 1 3.667 3.667v8.666a3.667 3.667 0 0 1 -3.667 3.667h-8.666a3.667 3.667 0 0 1 -3.667 -3.667v-8.666a3.667 3.667 0 0 1 3.667 -3.667zm-3.333 -4c1.094 0 1.828 .533 2.374 1.514a1 1 0 1 1 -1.748 .972c-.221 -.398 -.342 -.486 -.626 -.486h-10c-.548 0 -1 .452 -1 1v9.998c0 .32 .154 .618 .407 .805l.1 .065a1 1 0 1 1 -.99 1.738a3 3 0 0 1 -1.517 -2.606v-10c0 -1.652 1.348 -3 3 -3zm1.293 9.293l-3.293 3.292l-1.293 -1.292a1 1 0 0 0 -1.414 1.414l2 2a1 1 0 0 0 1.414 0l4 -4a1 1 0 0 0 -1.414 -1.414\" })\n ]\n }\n );\n default:\n return null;\n }\n }\n static notify(t, e, i) {\n if (e?.overrideOther && [...g].forEach((r) => r.close()), typeof e.title > \"u\") {\n const r = t || \"Notification\";\n e.title = r[0].toUpperCase() + r.slice(1).toLowerCase();\n }\n const n = e.icon ?? this.getDefaultNotifyIcon(t);\n n && (n instanceof Element && n.classList.add(\"ipe-modal-notify-icon\"), e.title = /* @__PURE__ */ c(nt, { children: [\n n,\n e.title\n ] })), t === \"confirm\" && (typeof e.closeAfter > \"u\" && (e.closeAfter = 0), e.okBtn || (e.okBtn = { label: \"OK\" })), e.okBtn && (typeof e.okBtn != \"object\" && (e.okBtn = { label: \"OK\" }), e.okBtn.label ??= \"OK\", e.okBtn.className ??= \"is-primary is-text ok-btn\", e.okBtn.method = (r, a) => {\n i?.(!0, a, r), a.close();\n }), e.cancelBtn && (typeof e.cancelBtn != \"object\" && (e.cancelBtn = { label: \"Cancel\" }), e.cancelBtn.label ??= \"Cancel\", e.cancelBtn.className ??= \"is-danger is-text cancel-btn\", e.cancelBtn.method = (r, a) => {\n i?.(!1, a, r), a.close();\n }), e.buttons = [e.cancelBtn, e.okBtn, ...e.buttons ?? []].filter(\n Boolean\n );\n const o = `is-notify type-${t || \"default\"} ${e.className ?? \"\"}`, l = new this({\n ...e,\n className: o,\n sizeClass: \"auto\",\n center: !1,\n fitScreen: !1,\n closeIcon: !0,\n outSideClose: !1,\n bodyScroll: !0,\n buttons: e.buttons ?? []\n });\n return l.setPluginName(\"toast\"), l.showToast({\n position: e.position ?? \"top right\"\n });\n }\n}\nconst g = [];\nfunction mt(s = \"top right\") {\n const t = \"ipe-modal-toast-container\", e = `${t}-${s.replace(/[\\s-\\.|\\/]+/g, \"-\")}`;\n let i = document.getElementById(e);\n return i || (i = h(\"div\", {\n className: `${t} ${s}`,\n attrs: { id: e, \"data-position\": s }\n }), document.body.appendChild(i)), i;\n}\nexport {\n N as IPEModal,\n P as IPEModalEvent\n};\n//# sourceMappingURL=index.js.map\n","import { InPageEdit } from '@/InPageEdit'\nimport { IPEModal, IPEModalEvent, IPEModalOptions } from '@inpageedit/modal'\nimport '@inpageedit/modal/style.css'\n\nexport * from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n modal: ModalService\n }\n}\n\n// Custom plugins\nexport class CustomIPEModal extends IPEModal {\n constructor(options: Partial<IPEModalOptions> = {}) {\n options.className ||= ''\n options.className += ' theme-ipe'\n options.modalAnimation ||= {\n show: 'ipe-modal-fade-in',\n hide: 'ipe-modal-fade-out',\n }\n super(options)\n }\n\n private _tmpDisabledActiveInputs?: NodeListOf<HTMLInputElement | HTMLButtonElement>\n setLoadingState(state: boolean) {\n this.get$window().classList.toggle('loading', state)\n // start loading\n if (state) {\n const activeInputs = this.get$window().querySelectorAll<HTMLInputElement | HTMLButtonElement>(\n 'input:not([disabled]),button:not([disabled])'\n )\n this._tmpDisabledActiveInputs = activeInputs\n activeInputs.forEach((el) => {\n el.disabled = true\n })\n this.get$content().append(\n <div\n id=\"ipe-modalLoadingWrapper\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.5)',\n zIndex: 2000,\n }}\n >\n <ProgressBar style={{ width: '80%', maxWidth: '800px' }} />\n </div>\n )\n } else {\n // stop loading\n this.get$window().querySelector('#ipe-modalLoadingWrapper')?.remove()\n const activeInputs = this._tmpDisabledActiveInputs\n if (activeInputs) {\n activeInputs.forEach((el) => {\n el.disabled = false\n })\n }\n }\n }\n}\n\nexport class ModalService {\n constructor(public ctx: InPageEdit) {\n ctx.set('modal', this)\n ctx.on('dispose', () => {\n CustomIPEModal.closeAll()\n })\n }\n IPEModal = CustomIPEModal\n IPEModalEvent = IPEModalEvent\n show = CustomIPEModal.show.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.show>\n ) => CustomIPEModal\n createObject = CustomIPEModal.createObject.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.createObject>\n ) => CustomIPEModal\n close = CustomIPEModal.close.bind(CustomIPEModal)\n closeAll = CustomIPEModal.closeAll.bind(CustomIPEModal)\n removeAll = CustomIPEModal.removeAll.bind(CustomIPEModal)\n dialog = CustomIPEModal.dialog.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.dialog>\n ) => CustomIPEModal\n confirm = CustomIPEModal.confirm.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.confirm>\n ) => CustomIPEModal\n notify = CustomIPEModal.notify.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.notify>\n ) => CustomIPEModal\n}\n","/**\n * Transform a plain object into a URL search params string.\n *\n * @example\n * ```\n * makeURLSearchParams({ str: '123' }) // str=123\n * makeURLSearchParams({ num: 123 }) // num=123\n * makeURLSearchParams({ bool: true }) // bool=true\n * makeURLSearchParams({ arr: [1, 2, 3] }) // arr=1&arr=2&arr=3\n * makeURLSearchParams({ plainObj: { a: 1, b: 2 } }) // plainObj[a]=1&plainObj[b]=2\n * makeURLSearchParams({ obj: <object> }) // obj=<object>.toString() (if object is not a primitive type)\n * makeURLSearchParams({ empty: '' }) // empty=\n * makeURLSearchParams({ null: null, undefined: undefined }) // (ignored)\n * ```\n */\nexport const makeSearchParams = (params?: Record<string, any>): URLSearchParams => {\n if (!params) {\n return new URLSearchParams()\n }\n if (params instanceof URLSearchParams) {\n return params\n }\n if (typeof params !== 'object' || params?.constructor !== Object) {\n throw new TypeError('only plain object is supported')\n }\n\n const sp = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === void 0 || value === null) {\n continue\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n sp.append(key, item?.toString())\n }\n continue\n }\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n for (const [objKey, objValue] of Object.entries(value)) {\n if (objValue !== void 0 && objValue !== null) {\n sp.set(`${key}[${objKey}]`, objValue?.toString())\n }\n }\n continue\n }\n sp.set(key, value?.toString())\n }\n return sp\n}\n\n/**\n * Create a URL object with the given parameters.\n *\n * @example\n * ```\n * makeURL('https://example.com?existing=1', { foo: 'bar' }, 'baz') // https://example.com?existing=1&foo=bar#baz\n */\nexport const makeURL = (url: string | URL, params?: Record<string, any>, hash?: string): URL => {\n const u = typeof url === 'string' ? new URL(url, window?.location?.origin) : new URL(url)\n\n const existingParams = new URLSearchParams(u.search)\n const newParams = makeSearchParams(params)\n for (const [key, value] of newParams.entries()) {\n existingParams.set(key, value)\n }\n\n u.search = existingParams.toString()\n u.hash = hash || ''\n return u\n}\n","import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { WikiSiteInfo, WikiUserBlockInfo, WikiUserInfo } from '@/types/WikiMetadata'\nimport { AbstractIPEStorageManager } from './storage'\nimport { MwApiParams } from 'wiki-saikou'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n wiki: WikiMetadataService\n getUrl: WikiMetadataService['getUrl']\n getSciprtUrl: WikiMetadataService['getSciprtUrl']\n getMainpageUrl: WikiMetadataService['getMainpageUrl']\n }\n interface Events {\n /**\n * Application requires to clear caches and reload the page\n * If returns true, the page will not be reloaded\n */\n 'clear-cache'(): AwaitAble<boolean | void>\n }\n}\n\ninterface WikiMetadataKindMap {\n siteinfo: WikiSiteInfo\n userinfo: WikiUserInfo\n}\n\n@Inject(['api', 'storage'])\nexport class WikiMetadataService extends Service {\n private readonly _data: WikiMetadataKindMap = {} as any\n private readonly CACHE_VERSION = 3\n private readonly CACHE_TTL: Readonly<Record<keyof WikiMetadataKindMap, number>> = {\n siteinfo: 1000 * 60 * 60 * 24 * 3, // 3 days\n userinfo: 1000 * 60 * 30, // 30 minutes\n }\n private readonly QUERY_DATA: Readonly<Record<keyof WikiMetadataKindMap, MwApiParams>> = {\n siteinfo: {\n meta: 'siteinfo',\n siprop: 'general|specialpagealiases|namespacealiases|namespaces|magicwords',\n },\n userinfo: { meta: 'userinfo', uiprop: 'groups|rights|blockinfo|options' },\n }\n private readonly CACHE_DB: AbstractIPEStorageManager<\n WikiMetadataKindMap[keyof WikiMetadataKindMap]\n >\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'wiki', false)\n this.CACHE_DB = ctx.storage.createDatabase<WikiMetadataKindMap[keyof WikiMetadataKindMap]>(\n 'wiki-metadata',\n Infinity,\n this.CACHE_VERSION\n )\n }\n\n private get logger() {\n return this.ctx.logger('WIKI_METADATA')\n }\n\n private get api() {\n return this.ctx.api\n }\n\n readonly mwConfig = {\n get: ((key: string, fallback?: any) => {\n return window?.mw?.config?.get?.(key, fallback) ?? fallback\n }) as typeof mw.config.get,\n has: ((key: string) => {\n return window?.mw?.config?.exists?.(key) ?? false\n }) as typeof mw.config.exists,\n get values() {\n return ((window?.mw?.config as any)?.values || {}) as ReturnType<typeof mw.config.get>\n },\n }\n\n protected async start(): Promise<void> {\n await Promise.all(\n Object.keys(this.QUERY_DATA).map((key) => this.initData(key as keyof WikiMetadataKindMap))\n )\n this.ctx.on('clear-cache', this.onClearCache.bind(this))\n\n this.ctx.set('getUrl', this.getUrl.bind(this))\n this.ctx.set('getSciprtUrl', this.getSciprtUrl.bind(this))\n this.ctx.set('getMainpageUrl', this.getMainpageUrl.bind(this))\n\n this.ctx.inject(['preferences', '$'], (ctx) => {\n const $ = ctx.$\n ctx.preferences.registerCustomConfig(\n 'WikiMetadataService',\n Schema.object({\n WikiMetadataService: Schema.const(\n <div>\n <h3>{$`Wiki Informations`}</h3>\n <ul>\n <li>\n <strong>{$`Site`}:</strong> {this.general.sitename} ({this.landingPageUrl})\n </li>\n <li>\n <strong>{$`User`}</strong>: {this.userInfo.name} (ID: {this.userInfo.id})\n </li>\n <li>\n <strong>{$`Groups`}</strong>: {this.userGroups.join(', ') || 'None'}\n </li>\n </ul>\n <div>\n <p style={{ fontStyle: 'italic' }}>\n {$`If the information shown above is incorrect (for example, the user is not you), click the button below.`}\n </p>\n <button\n className=\"btn danger\"\n onClick={async (e) => {\n e.preventDefault()\n const prevent = await ctx.serial('clear-cache')\n if (!prevent) {\n window.location.reload()\n }\n }}\n >\n 🧹 {$`Clear caches & Reload`}\n </button>\n </div>\n </div>\n ).role('raw-html'),\n }).description('WikiMetadataService'),\n 'about'\n )\n })\n\n this.logger.info('All initialized', this._data)\n }\n\n async initData<T extends keyof WikiMetadataKindMap>(kind: T, noCache = false) {\n const cached = noCache ? null : await this.fetchFromCache(kind)\n if (cached) {\n this._data[kind] = cached\n this.logger.debug('Using cached', kind, cached)\n return cached\n } else {\n const data = await this.fetchFromApi(kind)\n this.saveToCache(kind, data)\n this._data[kind] = data\n this.logger.debug('Fetched from API', kind, data)\n return data\n }\n }\n\n private getCacheKey<T extends keyof WikiMetadataKindMap>(kind: T): string {\n return `${kind}:${new URL(this.ctx.api.config.baseURL).pathname.replace(/^\\//, '')}`\n }\n\n async fetchFromApi<T extends keyof WikiMetadataKindMap>(\n kind: T\n ): Promise<WikiMetadataKindMap[T]> {\n return this.api\n .get({\n action: 'query',\n ...this.QUERY_DATA[kind],\n })\n .then(({ data }) => {\n if (typeof data?.query !== 'object' || data.query === null) {\n throw new Error('Invalid query data', { cause: data })\n }\n if (kind === 'siteinfo') {\n return data.query as WikiMetadataKindMap[T]\n } else {\n return (data.query?.[kind] || data.query) as WikiMetadataKindMap[T]\n }\n })\n .catch((e) => {\n this.logger.error('Failed to fetch', e)\n return Promise.reject(e)\n })\n }\n\n async fetchFromCache<T extends keyof WikiMetadataKindMap>(\n kind: T\n ): Promise<WikiMetadataKindMap[T] | null> {\n const key = this.getCacheKey(kind)\n const data = await this.CACHE_DB.get(key, this.CACHE_TTL[kind])\n return data as WikiMetadataKindMap[T] | null\n }\n async saveToCache<T extends keyof WikiMetadataKindMap>(kind: T, data: WikiMetadataKindMap[T]) {\n const key = this.getCacheKey(kind)\n return this.CACHE_DB.set(key, data)\n }\n async invalidateCache<T extends keyof WikiMetadataKindMap>(kind: T) {\n const key = this.getCacheKey(kind)\n return this.CACHE_DB.delete(key)\n }\n private async onClearCache() {\n await this.CACHE_DB.clear()\n }\n\n // ====== shortcuts ======\n get _raw() {\n return this._data\n }\n\n // siteInfo\n get siteInfo() {\n return this._data.siteinfo\n }\n get general() {\n return this.siteInfo.general\n }\n get specialPageAliases() {\n return this.siteInfo.specialpagealiases\n }\n get namespaceAliases() {\n return this.siteInfo.namespacealiases\n }\n get namespaces() {\n return this.siteInfo.namespaces\n }\n get namespaceMap() {\n const map = Object.values(this.namespaces)\n .map((ns) => ({\n id: ns.id,\n canonical: ns.canonical,\n aliases: this.namespaceAliases\n .filter((alias) => alias.id === ns.id)\n .map((alias) => alias.alias),\n }))\n .sort((a, b) => a.id - b.id)\n Reflect.defineProperty(this, 'namespaceMap', {\n get: () => map,\n })\n return map\n }\n get magicWords() {\n return this.siteInfo.magicwords\n }\n\n // userInfo\n get userInfo() {\n return this._data.userinfo\n }\n get userOptions() {\n return this.userInfo.options\n }\n get isUserBlocked() {\n return (\n this.userInfo.blockedbyid &&\n this.userInfo.blockexpiry &&\n new Date(this.userInfo.blockexpiry).getTime() > Date.now()\n )\n }\n get userGroups() {\n return this.userInfo.groups\n }\n get userRights() {\n return this.userInfo.rights\n }\n /**\n * Base URL, without trailing slash\n * @example \"https://mediawiki.org\"\n */\n get baseUrl() {\n const server = this.general.server\n if (server.startsWith('//')) {\n return `${window?.location?.protocol || 'https:'}//${server.slice(2)}`\n } else {\n return server\n }\n }\n /**\n * Home page URL of this wiki\n * @description Generally same as the Mainpage URL,\n * but after MediaWiki 1.34,\n * it can be set to the website root directory.\n * @example \"https://mediawiki.org/wiki/Main_Page\" (In most cases)\n * @example \"https://mediawiki.org/\" ($wgMainPageIsDomainRoot = true)\n */\n get landingPageUrl() {\n return this.general.base\n }\n get mainPageName() {\n return this.general.mainpage\n }\n /**\n * Exact Mainpage URL of this wiki\n * @example \"https://mediawiki.org/wiki/Main_Page\"\n */\n get mainPageUrl() {\n return this.getUrl(this.mainPageName)\n }\n /**\n * Article path, with the $1 placeholder\n * @example \"/wiki/$1\"\n */\n get articlePath() {\n return this.general.articlepath\n }\n /**\n * Script path, without trailing slash\n * @example \"/w\"\n */\n get scriptPath() {\n return this.general.scriptpath\n }\n /**\n * Article base URL, with the $1 placeholder\n * @example \"https://mediawiki.org/wiki/$1\"\n */\n get articleBaseUrl() {\n return `${this.baseUrl}${this.articlePath}`\n }\n /**\n * Script base URL, without trailing slash\n * @example \"https://mediawiki.org/w\"\n */\n get scriptBaseUrl() {\n return `${this.baseUrl}${this.scriptPath}`\n }\n\n // utils\n getSciprtUrl(name = 'index') {\n return `${this.scriptBaseUrl}/${name.replace(/\\.php$/, '')}.php`\n }\n\n /** Get mainpage URL */\n getMainpageUrl(params?: Record<string, any>): string {\n return makeURL(this.siteInfo.general.base, params).toString()\n }\n /** Get page URL by title */\n getUrl(title: string, params?: Record<string, any>): string\n /** Get page URL by page ID */\n getUrl(pageId: number, params?: Record<string, any>): string\n getUrl(titleOrPageId: string | number, params?: Record<string, any>): string {\n const searchParams = makeSearchParams(params)\n let url: URL\n if (typeof titleOrPageId === 'string' && titleOrPageId !== '') {\n url = new URL(`${this.articleBaseUrl.replace('$1', titleOrPageId)}`)\n } else if (typeof titleOrPageId === 'number') {\n searchParams.set('curid', titleOrPageId.toString())\n url = new URL(this.getSciprtUrl('index'))\n } else {\n url = new URL(this.getSciprtUrl('index'))\n }\n url.search = searchParams.toString()\n return url.toString()\n }\n\n hasRight(right: string) {\n return this.userRights.includes(right)\n }\n hasAnyRight(...rights: string[]) {\n return rights.some((right) => this.hasRight(right))\n }\n hasEveryRights(...rights: string[]) {\n return rights.every((right) => this.hasRight(right))\n }\n inGroup(name: string) {\n return this.userGroups.includes(name)\n }\n inAnyGroup(...names: string[]) {\n return this.userGroups.some((group) => names.includes(group))\n }\n getBlockInfo() {\n if (!this.isUserBlocked) return null\n return {\n blockid: this.userInfo.blockid!,\n blockedby: this.userInfo.blockedbyid!,\n blockedbyid: this.userInfo.blockedbyid!,\n blockreason: this.userInfo.blockreason!,\n blockedtimestamp: this.userInfo.blockedtimestamp!,\n blockexpiry: this.userInfo.blockexpiry!,\n } as WikiUserBlockInfo\n }\n}\n","import { AbstractIPEStorageManager, TypedStorageEntry } from '../index.js'\nimport { MemoryStorage, useMemoryStorage } from '@/models/MemoryStorage.js'\n\nconst _memoryStorage = (() => {\n const sym = Symbol.for('IPE.GlobalMemoryStorage')\n if (!(sym in globalThis)) {\n ;(globalThis as any)[sym] = useMemoryStorage()\n }\n return (globalThis as any)[sym] as MemoryStorage\n})()\n\nexport class LocalStorageManager<T = unknown> implements AbstractIPEStorageManager<T> {\n private db: Storage\n constructor(\n public dbName?: string,\n readonly storeName?: string,\n public ttl: number = Infinity,\n public version?: number | string,\n public engine: 'localStorage' | 'sessionStorage' | 'memory' = 'localStorage'\n ) {\n // Normalize ttl\n if (typeof ttl !== 'number') this.ttl = Number(ttl)\n if (isNaN(this.ttl) || this.ttl <= 0) this.ttl = Infinity\n\n // Initialize storage engine\n if (this.engine === 'localStorage' && 'localStorage' in window) {\n this.db = window.localStorage\n } else if (this.engine === 'sessionStorage' && 'sessionStorage' in window) {\n this.db = window.sessionStorage\n } else {\n this.db = _memoryStorage\n }\n }\n\n // Key builder\n private makeKey(key: string) {\n return `${this.dbName ? this.dbName + ':' : ''}${this.storeName ? this.storeName + '/' : ''}${key}`\n }\n\n // Internal load & validation\n private load(key: string): TypedStorageEntry<T> | null {\n const raw = this.getRaw(key)\n if (raw === null) return null\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch (_) {\n this.deleteSync(key)\n return null\n }\n const rec = parsed as Partial<TypedStorageEntry<T>>\n // Structural checks\n if (typeof rec.time !== 'number' || !('value' in rec)) {\n this.deleteSync(key)\n return null\n }\n // Version check\n if (\n typeof this.version !== 'undefined' &&\n typeof this.version !== 'undefined' &&\n rec.version !== this.version\n ) {\n this.deleteSync(key)\n return null\n }\n return rec as TypedStorageEntry<T>\n }\n\n private getRaw(key: string): string | null {\n const fullKey = this.makeKey(key)\n return this.db.getItem(fullKey)\n }\n\n private setRaw(key: string, value: string) {\n const fullKey = this.makeKey(key)\n try {\n this.db.setItem(fullKey, value)\n } catch (_) {\n // Quota exceeded or write error — silently ignore for now.\n }\n }\n\n private deleteSync(key: string) {\n const fullKey = this.makeKey(key)\n this.db.removeItem(fullKey)\n }\n\n private isExpired(rec: TypedStorageEntry<T> | null, ttl = this.ttl) {\n if (!rec) return false\n return Date.now() - rec.time > ttl\n }\n\n async get(key: string, ttl = this.ttl, setter?: () => Promise<T> | T): Promise<T | null> {\n const rec = this.load(key)\n const expired = this.isExpired(rec, ttl)\n if (!rec || expired) {\n if (typeof setter === 'function') {\n const newValue = await setter()\n await this.set(key, newValue as T)\n return newValue as T\n }\n return null\n }\n return rec.value\n }\n\n // Overloads\n async set(key: string, value: null | undefined): Promise<void>\n async set(key: string, value: T): Promise<TypedStorageEntry<T>>\n async set(\n record: Record<string, T | null | undefined>\n ): Promise<Record<string, TypedStorageEntry<T> | void>>\n async set(\n keyOrRecord: string | Record<string, T | null | undefined>,\n maybeValue?: T | null | undefined\n ): Promise<TypedStorageEntry<T> | void | Record<string, TypedStorageEntry<T> | void>> {\n const now = Date.now()\n\n if (typeof keyOrRecord === 'string') {\n const key = keyOrRecord\n const value = maybeValue as T | null | undefined\n if (value === null || typeof value === 'undefined') {\n await this.delete(key)\n return\n }\n const rec: TypedStorageEntry<T> = { time: now, value, version: this.version }\n this.setRaw(key, JSON.stringify(rec))\n return rec\n }\n\n const recordObj = keyOrRecord as Record<string, T | null | undefined>\n const results: Record<string, TypedStorageEntry<T> | void> = {}\n for (const [k, v] of Object.entries(recordObj)) {\n if (v === null || typeof v === 'undefined') {\n this.deleteSync(k)\n continue\n }\n const rec: TypedStorageEntry<T> = { time: now, value: v as T, version: this.version }\n this.setRaw(k, JSON.stringify(rec))\n results[k] = rec\n }\n return results\n }\n\n async has(key: string, ttl = this.ttl): Promise<boolean> {\n const rec = this.load(key)\n return rec !== null && !this.isExpired(rec, ttl)\n }\n\n async delete(key: string): Promise<void> {\n this.deleteSync(key)\n }\n\n async updatedAt(key: string): Promise<number> {\n const rec = this.load(key)\n return rec ? rec.time : 0\n }\n\n async clear(): Promise<this> {\n // Remove only keys with our prefix+storeName\n const prefix = this.makeKey('')\n // Collect first to avoid index shifting issues\n const toRemove: string[] = []\n for (let i = 0; i < this.db.length; i++) {\n const k = this.db.key(i)\n if (k && k.startsWith(prefix)) toRemove.push(k)\n }\n for (const k of toRemove) this.db.removeItem(k)\n return this\n }\n\n // Async generators\n async *keys(): AsyncIterable<string> {\n const prefix = this.makeKey('')\n for (let i = 0; i < this.db.length; i++) {\n const k = this.db.key(i)\n if (k && k.startsWith(prefix)) yield k.slice(prefix.length)\n }\n }\n\n async *values(): AsyncIterable<TypedStorageEntry<T>> {\n for await (const k of this.keys()) {\n const rec = this.load(k)\n if (!rec) continue\n if (this.isExpired(rec)) {\n this.deleteSync(k)\n continue\n }\n yield rec\n }\n }\n\n async *entries(): AsyncIterable<[string, TypedStorageEntry<T>]> {\n for await (const k of this.keys()) {\n const rec = this.load(k)\n if (!rec) continue\n if (this.isExpired(rec)) {\n this.deleteSync(k)\n continue\n }\n yield [k, rec]\n }\n }\n}\n","var s;\n((i) => {\n i.cache = /* @__PURE__ */ new Map(), i.defaults = Object.freeze({ iterBatch: 100, retry: { attempts: 3, baseDelayMs: 16 } }), i.sleep = (e) => new Promise((n) => setTimeout(n, e));\n function t(e) {\n const n = e?.name ?? \"\";\n return n === \"AbortError\" || n === \"InvalidStateError\" || n === \"TransactionInactiveError\" || n === \"UnknownError\";\n }\n i.shouldReconnect = t;\n async function a(e, n, r) {\n const w = Math.max(1, e.attempts);\n for (let y = 0; y < w; y++)\n try {\n return await n(y);\n } catch (d) {\n if (y === w - 1) throw d;\n await r?.(d, y);\n const u = e.baseDelayMs * Math.pow(2, y) + Math.floor(Math.random() * 10);\n await (0, i.sleep)(u);\n }\n throw new Error(\"withRetry exhausted unexpectedly\");\n }\n i.withRetry = a;\n function o(e, n, r) {\n return new Promise((w, y) => {\n const d = indexedDB.open(e, n);\n d.onupgradeneeded = () => {\n try {\n const u = d.result, l = d.transaction;\n r?.(u, l);\n } catch (u) {\n y(u);\n }\n }, d.onerror = () => y(d.error), d.onblocked = () => {\n }, d.onsuccess = () => {\n const u = d.result;\n u.onversionchange = () => {\n try {\n u.close();\n } finally {\n i.cache.delete(e);\n }\n }, w(u);\n };\n });\n }\n async function h(e, n, r) {\n let w = !e.objectStoreNames.contains(n), y = [];\n if (!w && r?.indexes?.length) {\n const l = e.transaction(n, \"readonly\"), p = l.objectStore(n), g = new Set(Array.from(p.indexNames));\n y = (r.indexes || []).filter((m) => !g.has(m.name)), await new Promise((m, R) => {\n l.oncomplete = () => m(), l.onabort = () => R(l.error), l.onerror = () => R(l.error);\n });\n }\n if (!w && y.length === 0) return e;\n const d = e.version + 1;\n e.close();\n const u = await o(e.name, d, (l, p) => {\n let g;\n l.objectStoreNames.contains(n) ? g = p.objectStore(n) : g = l.createObjectStore(n, {\n keyPath: r?.keyPath ?? void 0,\n autoIncrement: !!r?.autoIncrement\n });\n for (const m of y)\n g.indexNames.contains(m.name) || g.createIndex(m.name, m.keyPath, m.options);\n });\n return u.onversionchange = () => {\n try {\n u.close();\n } finally {\n i.cache.delete(u.name);\n }\n }, u;\n }\n async function c(e, n, r) {\n let w = i.cache.get(e);\n return w ? (w = w.then((y) => h(y, n, r)), i.cache.set(e, w)) : (w = (async () => {\n const y = await o(e);\n return h(y, n, r);\n })(), i.cache.set(e, w)), w;\n }\n i.getDB = c;\n async function f(e) {\n const n = i.cache.get(e);\n if (i.cache.delete(e), n)\n try {\n (await n).close();\n } catch {\n }\n }\n i.closeConnection = f;\n function v(e) {\n return new Promise((n, r) => {\n e.onsuccess = () => n(e.result), e.onerror = () => r(e.error);\n });\n }\n i.asyncRequest = v;\n function S(e) {\n return new Promise((n, r) => {\n e.oncomplete = () => n(), e.onabort = () => r(e.error ?? new DOMException(\"Aborted\", \"AbortError\")), e.onerror = () => r(e.error ?? new DOMException(\"TransactionError\", \"UnknownError\"));\n });\n }\n i.waitTx = S;\n})(s || (s = {}));\n/**\n * IDB Plus\n *\n * 🗄️ Minimal Promise based IndexedDB Wrapper with Map-like API\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n */\nclass x {\n constructor(t, a, o = {}) {\n this.dbName = t, this.storeName = a, this.options = o;\n }\n get _iterBatch() {\n return this.options.iterBatch ?? s.defaults.iterBatch;\n }\n get _retryCfg() {\n const t = this.options.retry ?? s.defaults.retry;\n return { attempts: t.attempts ?? 3, baseDelayMs: t.baseDelayMs ?? 16 };\n }\n async _withStore(t, a) {\n const o = this._retryCfg;\n return s.withRetry(\n o,\n async () => {\n const h = await s.getDB(this.dbName, this.storeName, this.options.ensure);\n try {\n const c = h.transaction(this.storeName, t), f = c.objectStore(this.storeName), v = await a(f);\n return await s.waitTx(c), v;\n } catch (c) {\n throw c;\n }\n },\n async (h) => {\n s.shouldReconnect(h) && await s.closeConnection(this.dbName);\n }\n );\n }\n async get(t) {\n return this._withStore(\"readonly\", async (a) => {\n const o = await s.asyncRequest(a.get(t));\n return o === void 0 ? void 0 : o;\n });\n }\n async set(t, a) {\n return await this._withStore(\"readwrite\", async (o) => {\n const c = this.options.ensure?.keyPath != null ? o.put(a) : o.put(a, t);\n await s.asyncRequest(c);\n }), this;\n }\n async delete(t) {\n return this._withStore(\"readwrite\", async (a) => {\n const o = await s.asyncRequest(a.get(t)) !== void 0;\n return await s.asyncRequest(a.delete(t)), o;\n });\n }\n async clear() {\n await this._withStore(\"readwrite\", async (t) => {\n await s.asyncRequest(t.clear());\n });\n }\n async has(t) {\n return await this.get(t) !== void 0;\n }\n async count() {\n return this._withStore(\"readonly\", async (t) => await s.asyncRequest(t.count()) ?? 0);\n }\n async *_iterateEntries() {\n let t = null, a = !1;\n const o = Math.max(1, this._iterBatch);\n for (; !a; ) {\n const h = await this._withStore(\"readonly\", async (c) => {\n const f = [], v = t === null ? void 0 : IDBKeyRange.lowerBound(t, !0);\n return await new Promise((S, e) => {\n const n = c.openCursor(v);\n n.onerror = () => e(n.error), n.onsuccess = () => {\n const r = n.result;\n if (!r) {\n a = !0, S();\n return;\n }\n f.push([r.key, r.value]), t = r.key, f.length >= o ? S() : r.continue();\n };\n }), f;\n });\n for (const c of h) yield c;\n if (h.length === 0) break;\n }\n }\n entries() {\n return this._iterateEntries();\n }\n async *keys() {\n for await (const [t] of this.entries()) yield t;\n }\n async *values() {\n for await (const [, t] of this.entries()) yield t;\n }\n [Symbol.asyncIterator]() {\n return this.entries()[Symbol.asyncIterator]();\n }\n async forEach(t) {\n for await (const [a, o] of this.entries())\n await t(o, a, this);\n }\n async getMany(t) {\n const a = /* @__PURE__ */ new Map();\n for await (const o of t) a.set(o, void 0);\n return await this._withStore(\"readonly\", async (o) => {\n await Promise.all(\n a.keys().map(async (h) => {\n const c = await s.asyncRequest(o.get(h));\n a.set(h, c === void 0 ? void 0 : c);\n })\n );\n }), a;\n }\n async setMany(t) {\n const a = this.options.ensure?.keyPath != null;\n return await this._withStore(\"readwrite\", async (o) => {\n for await (const [h, c] of t) {\n const f = a ? o.put(c) : o.put(c, h);\n await s.asyncRequest(f);\n }\n }), this;\n }\n async deleteMany(t) {\n let a = 0;\n return await this._withStore(\"readwrite\", async (o) => {\n for await (const h of t)\n await s.asyncRequest(o.get(h)) !== void 0 && a++, await s.asyncRequest(o.delete(h));\n }), a;\n }\n async disconnect() {\n await s.closeConnection(this.dbName);\n }\n}\nexport {\n x as IDBPlus,\n s as IDBPlusHelper\n};\n//# sourceMappingURL=index.js.map\n","import { IDBPlus } from 'idb-plus'\nimport { AbstractIPEStorageManager, TypedStorageEntry } from '../index.js'\n\nexport class IDBStorageManager<T = unknown> implements AbstractIPEStorageManager<T> {\n readonly db: IDBPlus<string, TypedStorageEntry<T>>\n keys: () => AsyncIterable<string>\n values: () => AsyncIterable<TypedStorageEntry<T>>\n entries: () => AsyncIterable<[string, TypedStorageEntry<T>]>\n\n constructor(\n readonly dbName: string,\n readonly storeName: string,\n public ttl: number = Infinity,\n public version?: number | string\n ) {\n this.db = new IDBPlus<string, TypedStorageEntry<T>>(dbName, storeName)\n this.keys = this.db.keys.bind(this.db)\n this.values = this.db.values.bind(this.db)\n this.entries = this.db.entries.bind(this.db)\n if (typeof this.ttl !== 'number') {\n this.ttl = Number(this.ttl)\n }\n if (isNaN(this.ttl) || this.ttl <= 0) {\n this.ttl = Infinity\n }\n this._clearExpiredEntries().catch(() => {})\n }\n\n private async _clearExpiredEntries() {\n if (this.ttl === Infinity) return\n const now = Date.now()\n const toDelete: string[] = []\n for await (const [key, entry] of this.db.entries()) {\n if (typeof entry.time === 'number' && now - entry.time > this.ttl) {\n toDelete.push(key)\n }\n }\n if (toDelete.length > 0) {\n await this.db.deleteMany(toDelete)\n }\n }\n\n async get(key: string, ttl = this.ttl, setter?: () => Promise<T> | T): Promise<T | null> {\n const data = await this.loadFromDB(key)\n const isExpired = this.checkIfExpired(data, ttl)\n if (!data || isExpired) {\n if (typeof setter === 'function') {\n const newData = await setter()\n await this.set(key, newData as T)\n return newData as T\n }\n return null\n }\n return data.value\n }\n\n set(key: string, value: null | undefined): Promise<void>\n set(key: string, value: T): Promise<TypedStorageEntry<T>>\n set(\n record: Record<string, T | null | undefined>\n ): Promise<Record<string, TypedStorageEntry<T> | void>>\n async set(\n keyOrRecord: string | Record<string, T | null | undefined>,\n maybeValue?: T | null | undefined\n ): Promise<TypedStorageEntry<T> | void | Record<string, TypedStorageEntry<T> | void>> {\n const now = Date.now()\n\n // Overload 1: set(key, value)\n if (typeof keyOrRecord === 'string') {\n const key = keyOrRecord\n const value = maybeValue as T | null | undefined\n if (value === null || typeof value === 'undefined') {\n return this.delete(key)\n }\n const record: TypedStorageEntry<T> = {\n time: now,\n value,\n version: this.version,\n }\n await this.db.set(key, record)\n return record\n }\n\n // Overload 2: set(record)\n const recordObject = keyOrRecord as Record<string, T | null | undefined>\n const toSet: Array<[string, TypedStorageEntry<T>]> = []\n const toDelete: Array<string> = []\n const results: Record<string, TypedStorageEntry<T> | void> = {}\n\n for (const [key, value] of Object.entries(recordObject)) {\n if (value === null || typeof value === 'undefined') {\n toDelete.push(key)\n } else {\n const rec: TypedStorageEntry<T> = { time: now, value: value as T, version: this.version }\n toSet.push([key, rec])\n results[key] = rec\n }\n }\n\n if (toSet.length > 0) {\n await this.db.setMany(toSet)\n }\n if (toDelete.length > 0) {\n await this.db.deleteMany(toDelete)\n }\n return results\n }\n\n async has(key: string, ttl = this.ttl): Promise<boolean> {\n const data = await this.loadFromDB(key)\n const isExpired = this.checkIfExpired(data, ttl)\n return data !== null && !isExpired\n }\n\n async delete(key: string): Promise<void> {\n await this.db.delete(key)\n }\n\n async updatedAt(key: string): Promise<number> {\n const data = await this.loadFromDB(key)\n return data ? data.time : 0\n }\n\n private async loadFromDB(key: string) {\n const data = await this.db.get(key)\n // Not exist\n if (data === void 0) {\n return null\n }\n // Bad data\n if (typeof data.time !== 'number' || typeof data.value === 'undefined') {\n try {\n await this.delete(key)\n } catch (_) {}\n return null\n }\n // Version mismatch\n if (\n typeof this.version !== 'undefined' &&\n typeof this.version !== 'undefined' &&\n data.version !== this.version\n ) {\n try {\n await this.delete(key)\n } catch (_) {}\n return null\n }\n return data\n }\n\n private checkIfExpired(data: TypedStorageEntry<T> | null, ttl = this.ttl) {\n if (!data) return false\n return Date.now() - data.time > ttl\n }\n\n /**\n * [DANGER] Use with caution!\n * Delete all data from the database.\n */\n async clear() {\n await this.db.clear()\n return this\n }\n}\n","import { InPageEdit, Service } from '@/InPageEdit.js'\nimport { LocalStorageManager } from './managers/LocalStorageManager.js'\nimport { IDBStorageManager } from './managers/IDBStorageManager.js'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n storage: StorageService\n }\n}\n\nexport interface StorageServiceConfig {\n dbName: string\n}\n\nexport class StorageService extends Service<StorageServiceConfig> {\n readonly kv: IDBStorageManager<any>\n readonly simpleKV: LocalStorageManager<any>\n readonly memoryKV: LocalStorageManager<any>\n constructor(\n ctx: InPageEdit,\n public config: StorageServiceConfig\n ) {\n super(ctx, 'storage', false)\n this.kv = this.createDatabase<any>('key-val', 0, 1, 'indexedDB') as IDBStorageManager<any>\n this.simpleKV = this.createDatabase<any>('~', 0, 1, 'localStorage') as LocalStorageManager<any>\n this.memoryKV = this.createDatabase<any>('~', 0, 1, 'memory') as LocalStorageManager<any>\n }\n\n createDatabase<T = any>(\n storeName: string,\n ttl?: number,\n version?: number | string,\n engine: 'indexedDB' | 'localStorage' | 'sessionStorage' | 'memory' = 'indexedDB'\n ): AbstractIPEStorageManager<T> {\n const canUseIDB = 'indexedDB' in window && window.indexedDB !== null\n if (engine === 'indexedDB' && !canUseIDB) {\n engine = 'localStorage'\n }\n switch (engine) {\n case 'indexedDB':\n return new IDBStorageManager<T>(this.config.dbName, storeName, ttl, version)\n case 'localStorage':\n case 'sessionStorage':\n case 'memory':\n return new LocalStorageManager<T>(this.config.dbName, storeName, ttl, version, engine)\n default:\n throw new Error(`Unsupported storage engine: ${engine}`)\n }\n }\n}\n\nexport interface TypedStorageEntry<T = any> {\n /** last update time */\n time: number\n /** stored value */\n value: T\n /** version */\n version?: number | string\n}\n\nexport interface AbstractIPEStorageManager<T = unknown> {\n get(key: string, ttl?: number, setter?: () => Promise<any> | any): Promise<T | null>\n set(key: string, value: null | undefined): Promise<void>\n set(\n record: Record<string, T | null | undefined>\n ): Promise<Record<string, TypedStorageEntry<T> | void>>\n set(key: string, value: T): Promise<TypedStorageEntry<T>>\n has(key: string, ttl?: number): Promise<boolean>\n delete(key: string): Promise<void>\n keys(): AsyncIterable<string>\n values(): AsyncIterable<TypedStorageEntry<T>>\n entries(): AsyncIterable<[string, TypedStorageEntry<T>]>\n updatedAt(key: string): Promise<number>\n clear(): Promise<this>\n}\n","import { Inject, InPageEdit, Service } from '@/InPageEdit'\nimport { createWikiPageModel, IWikiPage, WikiPageConstructor } from '@/models/WikiPage'\nimport { PageInfo } from '@/models/WikiPage/types/PageInfo'\nimport { IWikiTitle } from '@/models/WikiTitle/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n wikiPage: WikiPageService\n }\n}\n\nexport class WikiPageService extends Service {\n static readonly inject: Inject = ['api']\n WikiPage: WikiPageConstructor\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'wikiPage', true)\n this.WikiPage = createWikiPageModel(this.ctx.api)\n }\n\n async createInstance(payload: Record<string, any>, noCache = false) {\n const page = await this.WikiPage.newFromApi(payload)\n return page\n }\n async newFromTitle(\n title: string | IWikiTitle,\n converttitles = false,\n rvsection?: number | string,\n noCache = false\n ) {\n return this.createInstance({ titles: title.toString(), converttitles, rvsection }, noCache)\n }\n async newFromPageId(pageid: number, rvsection?: number | string, noCache = false) {\n return this.createInstance({ pageids: pageid, rvsection }, noCache)\n }\n async newFromRevision(revid: number, rvsection?: number | string, noCache = false) {\n return await this.createInstance({ revids: revid, rvsection }, noCache)\n }\n newBlankPage(init: Partial<PageInfo> = {}) {\n return this.WikiPage.newBlankPage(init)\n }\n}\n\n// TODO: Currently not used\nclass WikiPageCache {\n private _cachedPages = new Map<string, IWikiPage>()\n getCacheByPayload(payload: Record<string, any>) {\n const title = payload.titles || ''\n const pageId = payload.pageids ? String(payload.pageids) : ''\n const revId = payload.revids ? String(payload.revids) : ''\n const section = payload.rvsection ? String(payload.rvsection) : 'full'\n let cacheKey = ''\n\n if (revId) {\n cacheKey = `rev:${revId}#${section}`\n } else if (pageId) {\n cacheKey = `pageid:${pageId}#section:${section}`\n } else if (title) {\n cacheKey = `title:${title}#section:${section}`\n }\n return this._cachedPages.get(cacheKey) || null\n }\n setCacheByPage(page: IWikiPage, section?: number | string) {\n const title = page.title || ''\n const pageId = page.pageid ? String(page.pageid) : ''\n const revId = page.revisions?.[0]?.revid ? String(page.revisions[0].revid) : ''\n const sectionStr = section !== void 0 ? String(section) : 'full'\n if (!pageId) {\n return page\n }\n const keys = [\n `rev:${revId}#section:${sectionStr}`,\n `pageid:${pageId}#section:${sectionStr}`,\n `title:${title}#section:${sectionStr}`,\n ]\n keys.forEach((cacheKey) => {\n this._cachedPages.set(cacheKey, page)\n })\n return page\n }\n removeCacheByPage(page: IWikiPage) {\n this._cachedPages.entries().forEach(([key, cachedPage]) => {\n if (cachedPage.pageid === page.pageid) {\n this._cachedPages.delete(key)\n }\n })\n return this\n }\n}\n","import { Inject, InPageEdit, Service } from '@/InPageEdit'\nimport { IWikiPage } from '@/models/WikiPage/index.js'\nimport { createWikiTitleModel, IWikiTitle, WikiTitleConstructor } from '@/models/WikiTitle/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n wikiTitle: WikiTitleService\n }\n}\n\nexport interface WikiLinkMetadata {\n title?: IWikiTitle\n pageId?: number\n revId?: number\n url: URL\n params: URLSearchParams\n hash: string\n action: 'view' | 'edit' | 'create' | 'diff' | string\n}\n\nexport class WikiTitleService extends Service {\n static readonly inject: Inject = ['wiki', 'wikiPage']\n\n readonly Title: WikiTitleConstructor\n constructor(public ctx: InPageEdit) {\n super(ctx, 'wikiTitle', true)\n this.Title = createWikiTitleModel(this.ctx.wiki.siteInfo)\n }\n private readonly logger = this.ctx.logger('WikiTitleService')\n\n newTitle(title: string, namespace?: number) {\n return new this.Title(title, namespace)\n }\n newMainPageTitle() {\n return this.newTitle(this.ctx.wiki.mainPageName)\n }\n async newTitleFromUrl(url: string | URL) {\n const linkInfo = this.parseWikiLink(url)\n if (linkInfo?.title) {\n return linkInfo.title\n } else if (linkInfo?.pageId) {\n return this.newTitleFromPageId(linkInfo.pageId)\n } else {\n return null\n }\n }\n private _cachedTitles = new Map<string, Promise<IWikiTitle | null>>()\n private async newTitleFromAnyId(\n payload: { title?: string; pageId?: number; revId?: number },\n noCache = false\n ) {\n const { title, pageId, revId } = payload ?? {}\n if (typeof title === 'string') {\n return this.newTitle(title)\n }\n let id: number | undefined = undefined\n let kind: 'pageid' | 'revid' | undefined = undefined\n if (revId) {\n id = parseInt(revId.toString(), 10)\n kind = 'revid'\n } else if (pageId) {\n id = parseInt(pageId.toString(), 10)\n kind = 'pageid'\n }\n if (!id || !kind || isNaN(id) || id <= 0) {\n throw new Error('Invalid id or kind', { cause: payload })\n }\n\n if (!noCache && this._cachedTitles.has(`${kind}:${id}`)) {\n return await this._cachedTitles.get(`${kind}:${id}`)!\n }\n const { promise, resolve, reject } = promiseWithResolvers<IWikiTitle | null>()\n this._cachedTitles.set(`${kind}:${id}`, promise)\n try {\n const { wikiPage } = this.ctx\n let page: IWikiPage | null = null\n if (kind === 'pageid') {\n page = await wikiPage.newFromPageId(id)\n } else if (kind === 'revid') {\n page = await wikiPage.newFromRevision(id)\n } else {\n throw new Error(`Invalid kind: ${kind}`)\n }\n resolve(this.newTitle(page.title))\n } catch (e) {\n this._cachedTitles.delete(`${kind}:${id}`)\n reject(e)\n }\n return promise\n }\n async newTitleFromPageId(pageId: number) {\n return this.newTitleFromAnyId({ pageId: pageId })\n }\n async newTitleFromRevision(revId: number) {\n return this.newTitleFromAnyId({ revId: revId })\n }\n\n /**\n * Resolve **special** special pages to it's real target\n *\n * If target is self or cannot be resolved, return null\n * @example\n * ```\n * Special:MyPage -> User:<username>\n * Special:Edit/Page_Title -> Page_Title\n * Special:NewSection/Page_Title -> Page_Title (section=new)\n * ```\n */\n resolveSpecialPageTarget(input: IWikiTitle | string): {\n title: IWikiTitle\n action?: string | undefined\n section?: number | 'new' | undefined\n } | null {\n const title = typeof input === 'string' ? this.newTitle(input) : input\n if (!title) {\n return null\n }\n if (title.getNamespaceId() !== -1) {\n return null\n }\n let titleText: string | undefined\n let section: number | 'new' | undefined = undefined\n let action = 'view'\n const sub = title.getMainDBKey().split('/').slice(1).join('/') || ''\n if (title.isSpecial('edit') && sub) {\n titleText = sub\n action = 'edit'\n } else if (title.isSpecial('talkpage') && sub) {\n const talkPage = title.newTitle(sub).getTalkPage()\n if (!talkPage) {\n return null\n }\n titleText = talkPage.getPrefixedDBKey()\n } else if (title.isSpecial('mypage')) {\n const userPage = title.newTitle(this.ctx.wiki.userInfo.name, 2)\n titleText = userPage.getPrefixedDBKey() + (sub ? `/${sub}` : '')\n } else if (title.isSpecial('mytalk')) {\n const userTalkPage = title.newTitle(this.ctx.wiki.userInfo.name, 3)\n titleText = userTalkPage.getPrefixedDBKey() + (sub ? `/${sub}` : '')\n } else if (title.isSpecial('newsection') && sub) {\n titleText = sub\n section = 'new'\n action = 'edit'\n } else {\n return null\n }\n\n return {\n title: new this.Title(titleText),\n section,\n action,\n }\n }\n\n // shortcuts\n private readonly wiki = this.ctx.wiki\n /**\n * @example \"https://example.com\"\n */\n private readonly wikiBaseUrl = this.wiki.baseUrl\n /**\n * Article path, with trailing slash\n * @example \"/wiki/\" (if wgArticlePath is \"/wiki/$1\")\n */\n private readonly wikiArticlePath = this.wiki.articlePath.replace('$1', '')\n /**\n * Article base URL, with trailing slash\n * @example \"https://example.com/wiki/\" (if wgArticlePath is \"/wiki/$1\")\n */\n private readonly wikiArticleBaseUrl = this.wiki.articleBaseUrl.replace('$1', '')\n /**\n * Script base URL, **without** trailing slash\n * @example \"https://example.com/w\" (if wgScriptPath is \"/w\")\n */\n private readonly wikiIndexPhpUrl = this.wiki.getSciprtUrl('index.php')\n\n isWikiLink(url: string): boolean {\n return (\n url.startsWith(this.wikiArticleBaseUrl) ||\n url.startsWith(this.wikiIndexPhpUrl) ||\n // Some servers allow index.php to be omitted\n url.startsWith(`${this.wikiBaseUrl}/?`) ||\n // It's the landing page\n url === this.ctx.wiki.landingPageUrl\n )\n }\n\n static readonly REG_SKIPPED_HREF = /^(#|javascript:|vbscript:|file:)/i\n validateHrefAttr(href: string | null): boolean {\n if (typeof href !== 'string') {\n return false\n }\n return !WikiTitleService.REG_SKIPPED_HREF.test(href)\n }\n\n parseWikiLink(link: string | URL): WikiLinkMetadata | null {\n if (!link) {\n return null\n }\n\n if (typeof link === 'string' && !this.validateHrefAttr(link)) {\n return null\n }\n\n const url = makeURL(link)\n if (!this.isWikiLink(url.toString())) {\n return null\n }\n const params = url.searchParams\n const hash = url.hash.replace('#', '')\n const action = params.get('action') || 'view'\n const titleParam = params.get('title') || ''\n const curid = parseInt(params.get('curid') || '0', 10)\n const oldid = parseInt(params.get('oldid') || '0', 10)\n let titleText =\n titleParam ||\n (() => {\n try {\n return decodeURIComponent(url.pathname.substring(this.wikiArticlePath.length))\n } catch (e) {\n this.logger.error('parseLink', url, e)\n return ''\n }\n })()\n if (titleText.endsWith('index.php')) {\n titleText = ''\n }\n\n let title: IWikiTitle | undefined = undefined\n let pageId: number | undefined = undefined\n let revId: number | undefined = undefined\n // 此处的优先级遵循 MediaWiki 对 url 参数处理的优先级\n if (oldid) {\n revId = oldid\n } else if (curid) {\n pageId = curid\n } else if (titleText) {\n title = this.newTitle(titleText)\n } else {\n // 无任何有效参数\n if (url.origin + url.pathname === this.ctx.wiki.landingPageUrl) {\n // 但 url 是 landingPageUrl,则认为是主页\n title = this.newMainPageTitle()\n } else {\n return null\n }\n }\n\n return {\n title,\n pageId,\n revId,\n url,\n params,\n hash,\n action,\n }\n }\n}\n","import { Inject, InPageEdit, Schema, Service, type PreferencesMap } from '@/InPageEdit.js'\nimport { AbstractIPEStorageManager } from '@/services/storage/index.js'\nimport { computeFallback, ComputeAble } from '@/utils/computeable.js'\nimport { IDBStorageManager } from './storage/managers/IDBStorageManager'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n preferences: PreferencesService\n // Alias\n prefs: PreferencesService\n }\n export interface Events {\n 'preferences/changed'(payload: {\n ctx: InPageEdit\n /** original input */\n input: Record<string, unknown>\n /** changed settings */\n changes: Record<string, unknown>\n }): void\n }\n}\n\nexport interface InPageEditPreferenceUICategory {\n name: string\n label: string\n description?: string\n index?: number\n /**\n * 自定义渲染函数\n * @param ctx - InPageEdit 上下文\n * @param onUnmount - 卸载回调,当偏好设置 UI 被卸载时会被调用\n */\n customRenderer?: (payload: {\n ctx: InPageEdit\n onMounted: (callback: (container: HTMLElement) => void) => void\n onUnmount: (callback: () => void) => void\n }) => Promise<Node> | Node\n /**\n * 是否自动生成该分类下的表单\n * @default true\n */\n autoGenerateForm?: boolean\n}\n\nexport interface InPageEditPreferenceUIRegistryItem {\n name: string\n schema: Schema\n category: string\n}\n\n@Inject(['storage', 'wiki'])\nexport class PreferencesService extends Service {\n private db: AbstractIPEStorageManager<any>\n public customRegistries: InPageEditPreferenceUIRegistryItem[] = []\n public categoryDefinitions: InPageEditPreferenceUICategory[] = []\n private _defaultPreferences: Record<string, any> = {}\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'preferences', true)\n ctx.set('prefs', this)\n this.db = ctx.storage.createDatabase<any>(`preferences:${ctx.wiki.userInfo.id}`, Infinity)\n try {\n this._migrageFromLegacyMasterDB()\n } catch (e) {}\n }\n\n get logger() {\n return this.ctx.logger('PREFERENCES')\n }\n\n async start() {}\n\n // 重载魔术:一些类型体操……\n /**\n * 获取配置项的值\n * @param key 配置项的键名\n * @param fallback 当配置项不存在时的回退值\n * @returns\n * - 未提供 key 时,返回所有配置项的键值对\n * - 提供 key 时,返回对应配置项的值,若不存在则返回回退值或 null\n * @tips 你可以通过重载 PreferencesMap 来定义你的配置项类型,以自动获得类型推导\n */\n get(): Promise<PreferencesMap>\n get<K extends keyof PreferencesMap>(\n key: K,\n fallback?: ComputeAble<PreferencesMap[K]>\n ): Promise<PreferencesMap[K] | null>\n get<U = unknown>(key: string, fallback?: ComputeAble<U>): Promise<U | null>\n async get(key?: string, fallback?: ComputeAble<unknown>): Promise<unknown | null> {\n if (!key) {\n return this.getAll()\n }\n fallback ??= () => {\n const defaultValue = this.defaultOf(key as keyof PreferencesMap)\n this.logger.debug(key, `(fallback value: ${defaultValue})`)\n return defaultValue as unknown\n }\n const value = await this.db.get(key, undefined)\n return value !== null ? value : await computeFallback(fallback)\n }\n /**\n * 获取全部注册的配置项以及最终生效的值\n * 未保存的配置项将使用默认值\n */\n async getAll() {\n const data = this.loadDefaultConfigs()\n for await (const [key, record] of this.db.entries()) {\n // 旧版本埋的坑\n if (key === '_touched') continue\n if (key in data) {\n ;(data as any)[key] = record.value\n }\n }\n return data\n }\n\n set<K extends keyof PreferencesMap>(\n key: K,\n value: PreferencesMap[K] | undefined | null\n ): Promise<PreferencesMap[K] | void>\n set<U = unknown>(key: string, value: U | undefined | null): Promise<U | void>\n async set(key: string, value: unknown): Promise<unknown | void> {\n const result = await this.setMany({ [key]: value } as any)\n return (result as any)[key]\n }\n\n setMany(input: {\n [K in keyof PreferencesMap]?: PreferencesMap[K] | undefined | null\n }): Promise<{\n [K in keyof PreferencesMap]?: PreferencesMap[K] | undefined | null\n }>\n setMany<U = unknown>(\n input: Record<string, U | undefined | null>\n ): Promise<Record<string, U | undefined | null>>\n async setMany(input: Record<string, unknown>) {\n const defaults = this.loadDefaultConfigs()\n const changes: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(input)) {\n if (value === (defaults as any)[key] || value === void 0) {\n changes[key] = void 0\n } else {\n changes[key] = value\n }\n }\n await this.db.set(changes)\n this.ctx.emit('preferences/changed', { ctx: this.ctx, input, changes })\n return changes\n }\n\n defaultOf<T extends keyof PreferencesMap>(key: T): PreferencesMap[T] | undefined\n defaultOf<U = unknown>(key: string): U | undefined\n defaultOf(key: string) {\n return (this._defaultPreferences[key] ??=\n this.loadDefaultConfigs()[key as keyof PreferencesMap])\n }\n\n /**\n * Get exportable configurations\n * - exclude values that are the same as the default value\n * - exclude invalid or undefined values\n * - sort by keys\n */\n async getExportableRecord(configs?: Record<string, unknown>) {\n configs ??= (await this.getAll()) as any\n const defaults = this.loadDefaultConfigs()\n\n const out: Record<string, any> = {}\n Object.entries(defaults)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(([key, value]) => {\n const pref = configs![key]\n if (pref !== void 0 && pref !== value) {\n out[key] = pref\n }\n })\n return out\n }\n\n private loadDefaultConfigs() {\n const data = {} as any\n this.getConfigRegistries().forEach((item) => {\n // 首先读取 schema 上的默认值\n try {\n const defaultValues = item.schema({}) as any\n Object.entries(defaultValues).forEach(([key, val]) => {\n data[key] = val\n })\n } catch {}\n })\n\n Object.entries(data).forEach(([key, val]) => {\n this._defaultPreferences[key] = val\n })\n\n return data as PreferencesMap\n }\n\n registerCustomConfig(id: string, schema: Schema, category?: string) {\n const config = {\n name: id,\n schema,\n category: category || 'general',\n }\n const index = this.customRegistries.findIndex((item) => item.name === id)\n if (index >= 0) {\n this.customRegistries[index] = config\n } else {\n this.customRegistries.push(config)\n }\n return this\n }\n\n getConfigRegistries(category?: string): InPageEditPreferenceUIRegistryItem[] {\n return Array.from(this.ctx.registry.entries())\n .map<{\n name: string\n schema: Schema\n }>(([plugin]) => {\n if (plugin === null) {\n return {\n name: '@root',\n schema: (InPageEdit as any)?.PreferencesSchema || null,\n }\n } else {\n return {\n name: plugin.name,\n schema: (plugin as any)?.PreferencesSchema || null,\n }\n }\n })\n .filter((item) => item.schema !== null)\n .map((item) => {\n return {\n ...item,\n category: item.schema.meta.category || 'general',\n }\n })\n .concat(this.customRegistries)\n .filter((item) => !category || item.category === category)\n }\n getAllSchema() {\n return new Schema<PreferencesMap>(\n Schema.intersect(this.getConfigRegistries().map((item) => item.schema))\n )\n }\n\n defineCategory(category: InPageEditPreferenceUICategory) {\n const index = this.categoryDefinitions.findIndex((tab) => tab.name === category.name)\n if (index < 0) {\n this.categoryDefinitions.push(category)\n } else {\n this.categoryDefinitions[index] = category\n }\n this.categoryDefinitions.sort((a, b) => {\n return (a.index ?? 0) - (b.index ?? 0)\n })\n return this\n }\n\n getConfigCategories() {\n return this.categoryDefinitions\n }\n\n private async _migrageFromLegacyMasterDB() {\n const legacyDB = this.ctx.storage.createDatabase<any>('preferences', Infinity)\n let count = 0\n for await (const [key, record] of legacyDB.entries()) {\n if (key === '_touched') continue\n await this.db.set(key, record.value)\n count++\n }\n count && this.logger.info(`Migrated ${count} preferences from master DB`)\n await legacyDB.clear()\n await (legacyDB as IDBStorageManager)?.db?.disconnect?.()\n return count\n }\n}\n","// keyword & RegExp caches\nconst ESCAPE_ARG_L = '\\uF114'\nconst ESCAPE_ARG_R = '\\uF514'\nconst REG_ESCAPE_ARG_L = /\\\\\\{/g\nconst REG_ESCAPE_ARG_R = /\\\\\\}/g\nconst REG_RESTORE_ARG_L = new RegExp(ESCAPE_ARG_L, 'g')\nconst REG_RESTORE_ARG_R = new RegExp(ESCAPE_ARG_R, 'g')\n\n/**\n * interpolate\n * - 具名插值:`{{expr}}`,其中 expr 可为标识符或简单表达式(如 `{{ name || \"world\" }}`、`{{ name ? 'hi ' + name : '' }}`)。\n * - 匿名插值:使用 `{{ $1 }}`、`{{ $2 }}`...,可用可变参数或数组提供位置参数。\n * - 具名与匿名可混用;若缺失值,替换为空字符串。\n *\n * 示例:\n * ```ts\n * interpolate('hello, {{ name }}') // 'hello, '\n * interpolate('hello, {{ name || \"world\" }}') // 'hello, world'\n * interpolate('hello, {{ name || \"world\" }}', { name: 'dragon' }) // 'hello, dragon'\n * interpolate('hello, {{ $1 }}. {{ $2 }}', 'dragon', 'yeah') // 'hello, dragon. yeah'\n * interpolate('hello, {{ $1 }}. {{ $2 }}', ['dragon', 'yeah']) // 'hello, dragon. yeah'\n * interpolate('hello, {{ $1 }}. {{ greeting || \"\" }}', { $1: 'dragon', greeting: 'yeah' }) // 'hello, dragon. yeah'\n * ```\n */\nexport function interpolate(template: string): string\nexport function interpolate(template: string, context: Record<string, unknown>): string\nexport function interpolate(template: string, ...numricContext: string[]): string\nexport function interpolate(template: string, numricContext: string[]): string\nexport function interpolate(template: string, ...args: Array<unknown>): string {\n return baseInterpolate(undefined, template, ...args)\n}\n\n/**\n * 创建带有“全局可用函数/变量”的插值函数。\n * - 传入的 globals 会作为模板可用的全局,只在上下文未提供同名键时生效(上下文优先)。\n * - 返回的函数与 interpolate 具有相同签名。\n *\n * 示例:\n * ```ts\n * const interpolate = createInterpolate({ getUrl })\n * interpolate('url is: {{ getUrl(title) }}', { title: 'foo' })\n * ```\n */\nexport type Interpolator = {\n (template: string): string\n (template: string, context: Record<string, unknown>): string\n (template: string, ...numricContext: string[]): string\n (template: string, numricContext: string[]): string\n}\nexport function createInterpolate(globals?: Record<string, unknown>): Interpolator {\n const g = globals ? { ...globals } : undefined\n const fn = (template: string, ...args: Array<unknown>) => {\n return baseInterpolate(g, template, ...args)\n }\n return fn as Interpolator\n}\n\nfunction baseInterpolate(\n globals: Record<string, unknown> | undefined,\n template: string,\n ...args: Array<unknown>\n): string {\n if (!template) return ''\n\n let out = String(template)\n .replace(REG_ESCAPE_ARG_L, ESCAPE_ARG_L)\n .replace(REG_ESCAPE_ARG_R, ESCAPE_ARG_R)\n\n let named: Record<string, unknown> = {}\n let numrics: unknown[] = []\n\n if (args.length === 1 && Array.isArray(args[0])) {\n numrics = args[0] as unknown[]\n } else if (args.length === 1 && isPlainObject(args[0])) {\n named = args[0] as Record<string, unknown>\n } else if (args.length > 0) {\n numrics = args\n }\n\n const ctx: Record<string, unknown> = Object.create(null)\n if (numrics && numrics.length) {\n for (let i = 0; i < numrics.length; i++) {\n ctx[`$${i + 1}`] = numrics[i]\n }\n }\n if (named && Object.keys(named).length) {\n for (const k of Object.keys(named)) ctx[k] = (named as any)[k]\n }\n // 合入全局(不覆盖上下文已提供的同名键)\n if (globals && Object.keys(globals).length) {\n for (const k of Object.keys(globals)) {\n if (typeof ctx[k] === 'undefined') {\n ctx[k] = (globals as any)[k]\n }\n }\n }\n\n out = out.replace(/\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g, (_m, exprRaw: string) => {\n const expr = String(exprRaw).trim()\n if (!expr) return ''\n try {\n const value = safeEval(expr, ctx)\n if (value == null) return ''\n return String(value)\n } catch {\n return ''\n }\n })\n\n return out.replace(REG_RESTORE_ARG_L, '{').replace(REG_RESTORE_ARG_R, '}')\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && (v as object).constructor === Object\n}\n\nconst safeEval = createEvaluator()\nfunction createEvaluator() {\n const globalNames = new Set([\n 'eval',\n 'Object',\n 'Array',\n 'String',\n 'Number',\n 'Boolean',\n 'Date',\n 'Math',\n 'JSON',\n 'undefined',\n 'null',\n 'true',\n 'false',\n 'NaN',\n 'Infinity',\n 'isNaN',\n 'isFinite',\n 'parseInt',\n 'parseFloat',\n ])\n\n const fn = new Function(\n '__expr__',\n 'ctx',\n `\n try {\n with (ctx) {\n return (eval(__expr__));\n }\n } catch (e) {\n throw e;\n }\n `\n ) as (expr: string, ctx: Record<string, unknown>) => unknown\n return (expr: string, ctx: Record<string, unknown>) => {\n /**\n * 创建 ctx 的代理,避免模板字符串调用了未传递的参数\n * 例如:interpolate('hello, {{ name || \"world\" }}')\n * 我们没有传递任何参数,引用 name 会出现 ReferenceError\n */\n const proxiedCtx = new Proxy(ctx, {\n has: (target, prop) => {\n if (typeof prop === 'symbol') {\n return prop in target\n }\n if (typeof prop === 'string' && (globalNames.has(prop) || prop === '__expr__')) {\n return false\n }\n return true\n },\n get: (target, prop) => {\n if (prop in target) {\n return target[prop as string]\n }\n return undefined\n },\n })\n return fn(expr, proxiedCtx)\n }\n}\n","import { createInterpolate } from './interpolate.js'\nimport type { Interpolator } from './interpolate.js'\n\nfunction joinTemplateStrings(strings: TemplateStringsArray, values: Array<unknown>) {\n let out = strings[0] ?? ''\n for (let i = 0; i < values.length; i++) {\n out += String(values[i]) + (strings[i + 1] ?? '')\n }\n return out\n}\n\nexport class I18nManager {\n private languages = new Map<string, Map<string, string>>()\n private currentLanguage = 'en'\n // 记录某个键在哪些语言中缺失了\n private missingKeys = new Map<string, string[]>()\n // 记录已使用的所有键\n private usedKeys = new Set<string>()\n interpolate: Interpolator\n constructor(\n init?: Record<string, any>,\n options?: {\n language?: string\n globals?: Record<string, unknown>\n }\n ) {\n const lang = options?.language || 'en'\n this.currentLanguage = lang\n this.interpolate = createInterpolate(options?.globals)\n if (init && Object.keys(init).length) {\n this.setLanguageData(lang, init)\n }\n }\n\n setGlobals(globals: Record<string, unknown>) {\n this.interpolate = createInterpolate(globals)\n return this\n }\n\n /**\n * ```\n * { foo: 'foo', bar: { baz: 'qux' } }\n * ```\n * will be merged into\n * ```\n * { foo: 'foo', 'bar.baz': 'qux' }\n * ```\n */\n set(key: string, value: string): this\n set(data: Record<string, any>): this\n set(arg1: string | Record<string, any>, arg2?: string): this {\n const lang = this.currentLanguage\n const dict = this.ensureLanguageMap(lang)\n if (typeof arg1 === 'string' && typeof arg2 === 'string') {\n dict.set(arg1, arg2)\n } else if (typeof arg1 === 'object') {\n const flat = this.toStringRecord(arg1)\n for (const [k, v] of Object.entries(flat)) {\n dict.set(k, v)\n }\n }\n return this\n }\n\n setLanguageData(language: string, data: Record<string, any>): this {\n language = paramCase(language).toLowerCase()\n const dict = this.ensureLanguageMap(language)\n const flat = this.toStringRecord(data)\n for (const [k, v] of Object.entries(flat)) {\n dict.set(k, v)\n }\n return this\n }\n\n setLanguage(language: string) {\n language = paramCase(language).toLowerCase()\n this.currentLanguage = language\n return this\n }\n\n getLanguage() {\n return this.currentLanguage\n }\n\n hasLanguage(language: string) {\n language = paramCase(language).toLowerCase()\n const data = this.languages.get(language)\n return data && Object.keys(data).length > 0\n }\n\n private toStringRecord(data: Record<string, any>, prefix?: string): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(data)) {\n const nextKey = prefix ? `${prefix}.${key}` : key\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const nested = this.toStringRecord(value as Record<string, any>, nextKey)\n for (const [nk, nv] of Object.entries(nested)) {\n result[nk] = String(nv)\n }\n } else {\n result[nextKey] = String(value)\n }\n }\n return result\n }\n\n has(key: string) {\n const langs = this.resolveLanguageOrder(this.currentLanguage)\n for (const lg of langs) {\n const dict = this.languages.get(lg)\n if (dict?.has(key)) return true\n }\n return false\n }\n\n get(key: string) {\n this.recordUsedKey(key)\n const langs = this.resolveLanguageOrder(this.currentLanguage)\n const missing: string[] = []\n for (const lg of langs) {\n const dict = this.languages.get(lg)\n const val = dict?.get(key)\n if (typeof val !== 'undefined') {\n if (missing.length) this.recordMissing(key, missing)\n return val\n }\n missing.push(lg)\n }\n // 全链均未命中,记录整条链\n if (missing.length) this.recordMissing(key, missing)\n return undefined\n }\n\n /**\n * [payload as template] Interpolate a message with optional arguments\n * @example\n * ```\n * i18n.msg('Hello, {{ name }}', 'dragon')\n * // good: \"你好,dragon\"\n * // missing: \"Hello, dragon\"\n * ```\n */\n translate(msg: string): string\n translate(msg: string, context: Record<string, unknown>): string\n translate(msg: string, ...numricContext: string[]): string\n translate(msg: string, numricContext: string[]): string\n translate(msg: string, ...args: Array<unknown>): string {\n if (!msg) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${msg}⧽`\n }\n const template = this.get(msg)\n if (typeof template === 'undefined') {\n return this.interpolate(msg, ...(args as any))\n }\n return this.interpolate(template, ...(args as any))\n }\n /**\n * $ => translate\n * @example\n * ```\n * $`hello, world` // \"你好,世界\"\n * $('dragon')`hello, {{ $1 }}` // \"你好,dragon\"\n */\n $(\n context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $(...numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $(strings: TemplateStringsArray, ...values: unknown[]): string\n $(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any)?.raw\n if (isTagCall) {\n // 直接作为模板标签使用:$`...`\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const msg = joinTemplateStrings(strings, values)\n return this.translate(msg)\n }\n // 先传上下文/位置参数,返回模板标签函数:$({...})`...` / $('a','b')`...`\n const capturedArgs = args\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const msg = joinTemplateStrings(strings, values)\n return this.translate(msg, ...(capturedArgs as any))\n }\n }\n\n /**\n * [payload as template] Return the raw message without interpolation\n * @example\n * ```\n * i18n.rawMsg('Hello, {{ name }}')\n * // good: \"你好,{{ name }}\"\n * // missing: \"Hello, {{ name }}\"\n * ```\n */\n translateRaw(msg: string): string {\n if (!msg) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${msg}⧽`\n }\n const template = this.get(msg)\n return template ?? msg\n }\n /**\n * $raw => translateRaw\n * @example\n * ```\n * $raw`hello, {{ $1 }}`\n * // good: \"你好,{{ $1 }}\"\n * // missing: \"hello, {{ $1 }}\"\n * ```\n */\n $raw(\n _context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $raw(..._numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $raw(strings: TemplateStringsArray, ...values: unknown[]): string\n $raw(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any)?.raw\n if (isTagCall) {\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const msg = joinTemplateStrings(strings, values)\n return this.translateRaw(msg)\n }\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const msg = joinTemplateStrings(strings, values)\n return this.translateRaw(msg)\n }\n }\n\n /**\n * [payload as key] Interpolate a message by key with optional arguments\n * @example\n * ```\n * i18n.strictMsg('greeting', 'dragon')\n * // good: \"你好,dragon\"\n * // missing: \"(greeting)\"\n * ```\n */\n message(key: string): string\n message(key: string, context: Record<string, unknown>): string\n message(key: string, ...numricContext: string[]): string\n message(key: string, numricContext: string[]): string\n message(key: string, ...args: Array<unknown>): string {\n if (!key) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${key}⧽`\n }\n const template = this.get(key)\n if (typeof template === 'undefined') {\n return `(${key})`\n }\n return this.interpolate(template, ...(args as any))\n }\n /**\n * $$ => message\n * @example\n * ```\n * $$`hello`\n * // good: \"你好\"\n * // missing: \"(hello)\"\n * $$('dragon')`greeting`\n * // good: \"你好,dragon\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$(\n context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$(...numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$(strings: TemplateStringsArray, ...values: unknown[]): string\n $$(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any)?.raw\n if (isTagCall) {\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const key = joinTemplateStrings(strings, values)\n return this.message(key)\n }\n const capturedArgs = args\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const key = joinTemplateStrings(strings, values)\n return this.message(key, ...(capturedArgs as any))\n }\n }\n\n /**\n * [payload as key] Return the raw message without interpolation\n * @example\n * ```\n * i18n.rawMsg('greeting')\n * // good: \"你好,{{ name }}\"\n * // missing: \"(greeting)\"\n * ```\n */\n messageRaw(key: string): string {\n if (!key) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${key}⧽`\n }\n const template = this.get(key)\n return template ?? `(${key})`\n }\n /**\n * $$raw => messageRaw\n * @example\n * ```\n * $$raw`greeting`\n * // good: \"你好,{{ name }}\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$raw(\n _context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$raw(\n ..._numricContext: string[]\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$raw(strings: TemplateStringsArray, ...values: unknown[]): string\n $$raw(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any).raw\n if (isTagCall) {\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const key = joinTemplateStrings(strings, values)\n return this.messageRaw(key)\n }\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const key = joinTemplateStrings(strings, values)\n return this.messageRaw(key)\n }\n }\n\n getAvailableLanguages() {\n return Array.from(this.languages.keys())\n }\n\n private ensureLanguageMap(language: string) {\n let dict = this.languages.get(language)\n if (!dict) {\n dict = new Map<string, string>()\n this.languages.set(language, dict)\n }\n return dict\n }\n\n private resolveLanguageOrder(language: string) {\n // 简化回退逻辑:仅当前语言 -> en\n const cur = language\n return cur === 'en' ? ['en'] : [cur, 'en']\n }\n\n /**\n * 获取缺失键报告:\n * { foo: ['zh', 'zh-hans', 'en'] }\n */\n getMissingReport() {\n return Object.fromEntries(this.missingKeys.entries())\n }\n\n /**\n * 清空缺失键记录\n */\n clearMissingReport() {\n this.missingKeys.clear()\n }\n\n private recordMissing(key: string, langs: string[]) {\n if (!langs.length) return\n const list = this.missingKeys.get(key) || []\n for (const lg of langs) {\n if (!list.includes(lg)) list.push(lg)\n }\n this.missingKeys.set(key, list)\n }\n\n private recordUsedKey(key: string) {\n this.usedKeys.add(key)\n }\n\n private getUsedKeys() {\n return Array.from(this.usedKeys)\n }\n private generateBlankKeyRecord() {\n const record: Record<string, string> = {}\n for (const key of this.getUsedKeys()) {\n record[key] = ''\n }\n return record\n }\n}\n","import { Inject, InPageEdit, Logger, Schema, Service } from '@/InPageEdit'\nimport { I18nManager as I18nManager } from './I18nManager.js'\nimport { Endpoints } from '@/constants/endpoints.js'\nimport { AbstractIPEStorageManager } from '../storage/index.js'\n\nexport interface I18nIndexV1 {\n manifest_version: 1\n base_language: string\n last_modified: string\n languages: Record<string, I18nIndexLanguage>\n}\n\nexport interface I18nIndexLanguage {\n file: string\n iso_name?: string\n endonym?: string\n fallback?: string\n data?: I18nStringRecord\n}\n\ninterface I18nStringRecord {\n [key: string]: string | I18nStringRecord\n}\n\nexport const I18nIndexV1Schema = new Schema<I18nIndexV1>(\n Schema.object({\n manifest_version: Schema.const(1).required(),\n base_language: Schema.string().required(),\n last_modified: Schema.string().required(),\n languages: Schema.dict(\n Schema.object({\n file: Schema.string().required(),\n fallback: Schema.string(),\n iso_name: Schema.string(),\n endonym: Schema.string(),\n data: Schema.transform(Schema.dict(Schema.any()).default({}), (v) =>\n Object.keys(v).length > 0 ? v : undefined\n ),\n })\n ).required(),\n })\n)\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n i18n: I18nService\n\n /**\n * $ => translate [payload as template]\n * @example\n * ```\n * $`hello, world`\n * // good: \"你好,世界\"\n * // missing: \"hello, world\"\n * $('dragon')`hello, {{ $1 }}`\n * // good: \"你好,dragon\"\n * // missing: \"hello, dragon\"\n * ```\n */\n $: I18nManager['$']\n /**\n * $raw => translateRaw [payload as template]\n * @example\n * ```\n * $raw`hello, {{ $1 }}`\n * // good: \"你好,{{ $1 }}\"\n * // missing: \"hello, {{ $1 }}\"\n * ```\n */\n $raw: I18nManager['$raw']\n /**\n * $$ => message [payload as key]\n * @example\n * ```\n * $$`hello`\n * // good: \"你好\"\n * // missing: \"(hello)\"\n * $$('dragon')`greeting`\n * // good: \"你好,dragon\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$: I18nManager['$$']\n /**\n * $$raw => messageRaw [payload as key]\n * @example\n * ```\n * $$raw`greeting`\n * // good: \"你好,{{ name }}\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$raw: I18nManager['$$raw']\n }\n export interface PreferencesMap {\n language: string\n 'i18n.index_url': string\n }\n export interface Events {\n 'i18n/changed'(payload: { ctx: InPageEdit; language: string }): void\n }\n}\n\n@Inject(['wiki', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'i18n.index_url': Schema.string()\n .description('I18n index URL (DO NOT CHANGE THIS) ')\n .default(\n import.meta.env.PROD\n ? Endpoints.I18N_INDEX_URL\n : import.meta.resolve('/src/__mock__/i18n/index.json')\n ),\n })\n .description('')\n .extra('category', 'general')\n)\nexport class I18nService extends Service {\n private readonly logger: Logger\n private _indexUrl!: string\n private _indexCache: I18nIndexV1 | null = null\n public readonly manager: I18nManager\n\n private i18nIndexDB: AbstractIPEStorageManager<I18nIndexV1>\n private i18nDataDB: AbstractIPEStorageManager<Record<string, string>>\n\n $!: I18nManager['$']\n $raw!: I18nManager['$raw']\n $$!: I18nManager['$$']\n $$raw!: I18nManager['$$raw']\n\n constructor(readonly ctx: InPageEdit) {\n super(ctx, 'i18n', false)\n this.logger = this.ctx.logger('I18nService')\n this.manager = new I18nManager(\n {},\n {\n language: '',\n globals: {\n getUrl: (...args: Parameters<InPageEdit['wiki']['getUrl']>) => ctx.wiki.getUrl(...args),\n },\n }\n )\n this.i18nIndexDB = ctx.storage.createDatabase<I18nIndexV1>(\n 'i18n-index',\n 1000 * 60 * 60 * 24 * 3, // 3 days\n this.ctx.version,\n 'indexedDB'\n )\n this.i18nDataDB = ctx.storage.createDatabase<Record<string, string>>(\n 'i18n-data',\n 1000 * 60 * 60 * 24 * 3, // 3 days\n this.ctx.version,\n 'indexedDB'\n )\n this.$ = this.manager.$.bind(this.manager)\n this.$raw = this.manager.$raw.bind(this.manager)\n this.$$ = this.manager.$$.bind(this.manager)\n this.$$raw = this.manager.$$raw.bind(this.manager)\n }\n\n protected async start(): Promise<void> {\n // pre-register\n this.ctx.preferences.registerCustomConfig(\n 'language',\n Schema.object({\n language: Schema.union([\n '@user',\n '@site',\n Schema.string().description('Custom language code'),\n ])\n .description('UI language')\n .default('@user'),\n }).description('UI language')\n )\n\n this.ctx.on('clear-cache', this.onClearCache.bind(this))\n\n const indexUrl = (this._indexUrl = (await this.ctx.preferences.get('i18n.index_url')) || '')\n if (!indexUrl) {\n this.logger.error('I18n index URL is not set')\n this.setupShortcuts()\n return\n }\n\n let index: I18nIndexV1 | null = null\n try {\n index = await this.getI18nIndex(indexUrl)\n } catch (e) {\n this.logger.error('Failed to fetch i18n index', e)\n this.setupShortcuts()\n return\n }\n this._indexCache = index\n Object.entries(index.languages).forEach(([code, meta]) => {\n if (meta.data && Object.keys(meta.data).length > 0) {\n this.manager.setLanguageData(code, meta.data)\n }\n })\n\n const prefer = await this.ctx.preferences.get('language')\n const normalized = this.normalizeLanguageCode(prefer)\n\n this.logger.debug('Settings', { prefer, normalized })\n\n try {\n await this.switchLanguage(normalized)\n this.logger.info(`Initialized for language: ${this.language}`)\n } catch (e) {\n this.logger.error('Failed to fetch i18n index', e)\n this.manager.setLanguage('en')\n }\n\n // rewrite-schema\n this.ctx.preferences.registerCustomConfig(\n 'language',\n Schema.object({\n language: Schema.union([\n Schema.const('@user').description(this.$`Same as your personal language`),\n Schema.const('@site').description(this.$`Same as the site language`),\n ...this.getAvailableLanguageCodes().map(({ code, endonym, iso_name }) =>\n Schema.const(code).description(endonym || iso_name || code)\n ),\n ]).default('@user'),\n }).description(this.$`InPageEdit UI language`)\n )\n\n this.setupShortcuts()\n\n // 当偏好设置中的 language 发生变化时,自动热切换\n this.ctx.on('preferences/changed', async ({ changes }) => {\n if (!('language' in changes)) return\n const next = this.normalizeLanguageCode(await this.ctx.preferences.get('language'))\n if (next && next !== this.language) {\n await this.switchLanguage(next)\n }\n })\n }\n\n private setupShortcuts() {\n if (!this.manager) throw new Error('I18nManager is not initialized')\n this.ctx.set('$', this.manager.$.bind(this.manager))\n this.ctx.set('$raw', this.manager.$raw.bind(this.manager))\n this.ctx.set('$$', this.manager.$$.bind(this.manager))\n this.ctx.set('$$raw', this.manager.$$raw.bind(this.manager))\n }\n\n private normalizeLanguageCode(code: any) {\n if (!code || typeof code !== 'string') return 'en'\n if (code === '@user') code = this.ctx.wiki.userInfo.options.language || 'en'\n if (code === '@site') code = this.ctx.wiki.siteInfo.general.lang || 'en'\n return paramCase(String(code)).toLowerCase()\n }\n\n get language() {\n return this.manager.getLanguage()\n }\n\n /**\n * 主动设置偏好值(会触发 preferences/changed,从而热切换)\n */\n async setLanguagePreference(value: '@user' | '@site' | string) {\n await this.ctx.preferences.set('language', value as any)\n }\n\n /**\n * 直接切换到具体语言(不修改偏好值)\n */\n async switchLanguage(language: string) {\n const lang = this.normalizeLanguageCode(language)\n await this.ensureLanguageLoaded(lang)\n this.manager.setLanguage(lang)\n this.ctx.emit('i18n/changed', { ctx: this.ctx, language: lang })\n }\n\n /**\n * 为指定语言注册(或合并)消息。\n * - 推荐加命名空间避免冲突:{ myPlugin: { key: 'value' } }\n * - 若 language 为当前语言,将立即可用;必要时你可以手动触发 UI 刷新或监听 i18n/changed。\n */\n async registerMessages(\n language: string,\n data: Record<string, any>,\n options?: { namespace?: string }\n ) {\n const payload = options?.namespace ? { [options.namespace]: data } : data\n this.manager.setLanguageData(language, payload)\n if (language === this.language) {\n // 不更改语言,仅提示有新消息注入;由调用方决定是否刷新 UI\n this.ctx.emit('i18n/changed', { ctx: this.ctx, language: this.language })\n }\n }\n\n /**\n * 列出可用语言与文件(来源于 index.json)\n */\n getAvailableLanguageCodes(): (I18nIndexLanguage & { code: string })[] {\n if (!this._indexCache) throw new Error('I18n index is not loaded')\n return Object.entries(this._indexCache.languages)\n .filter(([_, meta]) => !meta.fallback)\n .reduce(\n (acc, [code, meta]) => {\n acc.push({ code, ...meta })\n return acc\n },\n [] as (I18nIndexLanguage & { code: string })[]\n )\n }\n\n private findLanguageMeta(\n index: I18nIndexV1,\n language: string\n ): (I18nIndexLanguage & { code: string }) | undefined {\n const normalized = paramCase(String(language)).toLowerCase()\n const found = index.languages[normalized]\n if (found) {\n return {\n code: normalized,\n ...found,\n }\n } else {\n const en = index.languages['en']\n if (en) {\n return {\n code: 'en',\n ...en,\n }\n }\n }\n }\n\n public async getI18nIndex(url: string, noCache = false): Promise<I18nIndexV1> {\n if (!noCache) {\n const cached = await this.i18nIndexDB.get(url)\n if (cached) {\n try {\n return I18nIndexV1Schema(cached)\n } catch (e) {\n this.logger.error('Failed to parse cached i18n index', e)\n this.i18nIndexDB.delete(url)\n }\n }\n }\n const index = await this.fetchI18nIndex(url)\n this.i18nIndexDB.set(url, index)\n return index\n }\n private async fetchI18nIndex(url: string): Promise<I18nIndexV1> {\n const index = (await fetch(url).then((res) => res.json())) as I18nIndexV1\n return I18nIndexV1Schema(index)\n }\n\n private async ensureLanguageLoaded(language: string) {\n if (!this.manager || !this._indexCache) throw new Error('I18nManager is not initialized')\n if (this.manager.hasLanguage(language)) {\n return this.logger.debug('Language already loaded', language)\n }\n const data = await this.getLanguageData(language)\n this.manager.setLanguageData(language, data)\n this.logger.debug('Language data ensured', language, data)\n }\n\n public async getLanguageData(language: string, noCache = false): Promise<Record<string, string>> {\n if (!this._indexCache) throw new Error('I18n index is not loaded')\n const meta = this.findLanguageMeta(this._indexCache, language)\n if (!meta) return {}\n\n const key = `${this._indexUrl}#${meta.file}`\n if (!noCache) {\n const cached = await this.i18nDataDB.get(key)\n if (cached && Object.keys(cached).length > 0) {\n this.logger.debug('Using cached language data', language, cached)\n return cached\n }\n }\n\n const data =\n meta.data ||\n (await fetch(new URL(meta.file, this._indexUrl).toString()).then((res) => res.json()))\n\n this.i18nDataDB.set(key, data)\n this.logger.debug('Language data fetched', language, meta.file, data)\n\n return data\n }\n\n /**\n * 获取缺失键报告,形如:\n * { foo: ['zh', 'zh-hans', 'en'] }\n */\n getMissingReport() {\n return this.manager.getMissingReport()\n }\n\n /**\n * 清空缺失键记录\n */\n clearMissingReport() {\n this.manager.clearMissingReport()\n }\n\n private async onClearCache() {\n await this.i18nIndexDB.clear()\n await this.i18nDataDB.clear()\n }\n}\n","import { Context, Inject } from '@cordisjs/core'\nimport Schema from 'schemastery'\nimport { LoggerLevel, createLogger, type Logger } from '@inpageedit/logger'\nimport { deepMerge, FexiosConfigs } from 'wiki-saikou'\nimport { ApiService } from '@/services/ApiService.js'\nimport { CurrentPageService } from '@/services/CurrentPageService'\nimport { ResourceLoaderService } from '@/services/ResourceLoaderService.js'\nimport { ModalService } from '@/services/ModalService.js'\nimport { WikiMetadataService } from '@/services/WikiMetadataService.js'\nimport { StorageService } from '@/services/storage/index.js'\nimport { WikiPageService } from '@/services/WikiPageService.js'\nimport { WikiTitleService } from '@/services/WikiTitleService.js'\nimport '@/styles/index.scss'\nimport { PreferencesService } from './services/PreferencesService'\n\nexport interface InPageEditCoreConfig {\n apiConfigs: Partial<FexiosConfigs>\n legacyPreferences: Record<string, any>\n logLevel: number\n storageNamespace: string\n autoloadStyles: boolean\n autoInstallCorePlugins: boolean\n}\n\n/**\n * ✏️ InPageEdit NEXT\n *\n * 🚀 Modular, Extensible Supercharged Plugin for MediaWiki\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n * @see https://github.com/inpageedit/inpageedit-next\n * @see https://www.ipe.wiki/\n */\nexport class InPageEdit extends Context {\n readonly version: string = import.meta.env.__VERSION__ || '0.0.0'\n\n public config: InPageEditCoreConfig\n static DEFAULT_CONFIG: InPageEditCoreConfig = {\n apiConfigs: {},\n legacyPreferences: {},\n logLevel: import.meta.env.DEV ? LoggerLevel.debug : LoggerLevel.info,\n storageNamespace: 'InPageEdit',\n autoloadStyles: true,\n autoInstallCorePlugins: true,\n }\n Endpoints = Endpoints\n readonly schema = Schema\n readonly logger: Logger\n\n constructor(config?: Partial<InPageEditCoreConfig>) {\n super({\n name: 'InPageEdit',\n })\n this.config = deepMerge(InPageEdit.DEFAULT_CONFIG, config)\n this.logger = createLogger({\n name: 'IPE',\n color: '#33aaff',\n level: this.config.logLevel,\n })\n this.#init()\n }\n\n async #init() {\n await this.#initCoreServices()\n if (this.config.autoInstallCorePlugins) {\n this.#initCorePlugins()\n }\n this.#initCoreAssets()\n }\n\n async #initCoreServices() {\n this.plugin(I18nService)\n this.plugin(ApiService, this.config.apiConfigs)\n this.plugin(CurrentPageService)\n this.plugin(ResourceLoaderService)\n this.plugin(ModalService)\n this.plugin(PreferencesService)\n this.plugin(StorageService, { dbName: this.config.storageNamespace })\n this.plugin(WikiMetadataService)\n this.plugin(WikiPageService)\n this.plugin(WikiTitleService)\n\n // 标记内置服务,所以用户即使忘记 inject 也能使用\n this.#markServiceAsBuiltIn([\n 'i18n',\n '$',\n '$$',\n 'api',\n 'currentPage',\n 'resourceLoader',\n 'modal',\n 'preferences',\n 'storage',\n 'wikiPage',\n 'wikiTitle',\n // WikiMetadataService\n 'wiki',\n 'getUrl',\n 'getSciprtUrl',\n 'getMainpageUrl',\n ])\n }\n\n #markServiceAsBuiltIn(services: string[]) {\n if (!Array.isArray(services) || services.length === 0) return this\n for (const name of services) {\n const internal = this[InPageEdit.internal][name]\n if (internal?.type === 'service') {\n internal.builtin = true\n }\n }\n return this\n }\n\n // TODO: 这里不应该硬编码,暂时先这样\n async #initCorePlugins() {\n const plugins = [\n import('@/plugins/analytics/index.js').then(({ PluginAnalytics }) => PluginAnalytics),\n import('@/plugins/in-article-links/index.js').then(\n ({ PluginInArticleLinks }) => PluginInArticleLinks\n ),\n import('@/plugins/plugin-store/index.js').then(({ PluginPluginStore }) => PluginPluginStore),\n import('@/plugins/preferences-ui/index.js').then(\n ({ PluginPreferencesUI }) => PluginPreferencesUI\n ),\n import('@/plugins/quick-edit/index.js').then(({ PluginQuickEdit }) => PluginQuickEdit),\n import('@/plugins/quick-move/index.js').then(({ PluginQuickMove }) => PluginQuickMove),\n import('@/plugins/quick-preview/index.js').then(\n ({ PluginQuickPreview }) => PluginQuickPreview\n ),\n import('@/plugins/quick-diff/index.js').then(({ PluginQuickDiff }) => PluginQuickDiff),\n import('@/plugins/quick-redirect/index.js').then(\n ({ PluginQuickRedirect }) => PluginQuickRedirect\n ),\n import('@/plugins/toolbox/index.js').then(({ PluginToolbox }) => PluginToolbox),\n ]\n plugins.forEach(async (plugin) => {\n this.plugin(await plugin)\n })\n\n if (import.meta.env.DEV) {\n this.plugin((await import('@/plugins/_debug/index.js')).default)\n }\n }\n\n // TODO: 应该抽象到 PluginTheme 中去,暂时先硬编码\n async #initCoreAssets() {\n this.inject(['resourceLoader'], (ctx) => {\n if (\n import.meta.env.PROD &&\n import.meta.env.VITE_BUILD_FORMAT === 'import' &&\n this.config.autoloadStyles\n ) {\n ctx.resourceLoader.loadStyle(import.meta.resolve('./style.css'))\n }\n })\n }\n\n async withInject(inject: Inject) {\n const { promise, resolve } = promiseWithResolvers<this>()\n this.inject(inject, (ctx) => {\n resolve(ctx)\n })\n return promise\n }\n}\n\n// 导出依赖包以便用户使用\nexport { default as Schema } from 'schemastery'\nexport * from '@inpageedit/logger'\nexport interface PreferencesMap {}\n\n// 类型体操\nexport {\n Inject,\n EffectScope,\n ForkScope,\n MainScope,\n ScopeStatus,\n symbols as CordisSymbols,\n Service,\n CordisError,\n Lifecycle,\n} from '@cordisjs/core'\nimport {\n Events as CordisEvents,\n Plugin as CordisPlugin,\n Registry as CordisRegistry,\n} from '@cordisjs/core'\nimport { I18nService } from './services/i18n/index.js'\nexport interface Events<C extends InPageEdit = InPageEdit> extends CordisEvents<C> {}\nexport type IPEPlugin<C = any> = CordisPlugin<InPageEdit, C>\nexport type IPERegistry = CordisRegistry<InPageEdit>\nexport interface InPageEdit {\n [InPageEdit.events]: Events<this>\n}\n"],"names":["$","n","f","d","_","c","t","e","g","E","l","r","w","x","C","s","b","a","i","h","P","R","u","o","m","v","y","O","p","S","ApiService","ctx","options","api","MwApi","_CurrentPageService_decorators","_init","_a","Inject","CurrentPageService","Service","#init","#injectHistoryPopState","#onPopState","#initCurrentTitle","#initIsMainPage","injectKey","_pushState","_replaceState","data","title","url","oldURL","newURL","href","qs","isMainPage","__decoratorStart","__decorateElement","__runInitializers","ResourceLoaderService","src","attrs","key","existed","resolve","reject","script","value","link","meta","el","path","j","U","B","I","Y","W","G","A","Z","q","V","J","Q","tt","et","F","T","st","it","nt","ot","M","at","rt","L","K","lt","ct","z","k","H","ht","X","dt","ft","ut","N","D","mt","CustomIPEModal","IPEModal","state","activeInputs","jsx","ProgressBar","ModalService","IPEModalEvent","makeSearchParams","params","sp","item","objKey","objValue","makeURL","hash","existingParams","newParams","_WikiMetadataService_decorators","WikiMetadataService","fallback","Schema","jsxs","kind","noCache","cached","map","ns","alias","server","name","titleOrPageId","searchParams","right","rights","names","group","_memoryStorage","sym","useMemoryStorage","LocalStorageManager","dbName","storeName","ttl","version","engine","raw","parsed","rec","fullKey","setter","expired","newValue","keyOrRecord","maybeValue","now","recordObj","results","prefix","toRemove","IDBStorageManager","IDBPlus","toDelete","entry","isExpired","newData","record","recordObject","toSet","StorageService","config","canUseIDB","WikiPageService","createWikiPageModel","payload","converttitles","rvsection","pageid","revid","init","WikiTitleService","createWikiTitleModel","namespace","linkInfo","pageId","revId","id","promise","promiseWithResolvers","wikiPage","page","input","titleText","section","action","sub","talkPage","titleParam","curid","oldid","_PreferencesService_decorators","PreferencesService","defaultValue","computeFallback","defaults","changes","configs","out","pref","defaultValues","val","schema","category","index","plugin","InPageEdit","tab","legacyDB","count","ESCAPE_ARG_L","ESCAPE_ARG_R","REG_ESCAPE_ARG_L","REG_ESCAPE_ARG_R","REG_RESTORE_ARG_L","REG_RESTORE_ARG_R","createInterpolate","globals","template","args","baseInterpolate","named","numrics","isPlainObject","_m","exprRaw","expr","safeEval","createEvaluator","globalNames","fn","proxiedCtx","target","prop","joinTemplateStrings","strings","values","I18nManager","lang","arg1","arg2","dict","flat","language","paramCase","result","nextKey","nested","nk","nv","langs","lg","missing","msg","capturedArgs","cur","list","_I18nService_decorators","I18nIndexV1Schema","RegisterPreferences","Endpoints","I18nService","indexUrl","code","prefer","normalized","endonym","iso_name","next","acc","found","en","res","Context","deepMerge","createLogger","LoggerLevel","#initCoreServices","#initCorePlugins","#initCoreAssets","#markServiceAsBuiltIn","services","internal","PluginAnalytics","PluginInArticleLinks","PluginPluginStore","PluginPreferencesUI","PluginQuickEdit","PluginQuickMove","PluginQuickPreview","PluginQuickDiff","PluginQuickRedirect","PluginToolbox","inject"],"mappings":"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","x_google_ignoreList":[0,9]}
|
|
1
|
+
{"version":3,"file":"index-DxaqNWv4.js","sources":["../../../node_modules/.pnpm/@inpageedit+logger@0.1.0/node_modules/@inpageedit/logger/dist/index.js","../src/services/ApiService.ts","../src/services/CurrentPageService.ts","../src/services/ResourceLoaderService.ts","../../modal/dist/index.js","../src/services/ModalService.tsx","../src/utils/url.ts","../src/services/WikiMetadataService.tsx","../src/services/storage/managers/LocalStorageManager.ts","../../../node_modules/.pnpm/idb-plus@0.2.0/node_modules/idb-plus/dist/index.js","../src/services/storage/managers/IDBStorageManager.ts","../src/services/storage/index.ts","../src/services/WikiPageService.ts","../src/services/WikiTitleService.ts","../src/services/PreferencesService.tsx","../src/services/i18n/interpolate.ts","../src/services/i18n/I18nManager.ts","../src/services/i18n/index.ts","../src/InPageEdit.ts"],"sourcesContent":["/**\n * @inpageedit/logger\n *\n * Flexible, Extensible Console Logger with Colored Labels and Hierarchical Loggers\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n */\nvar $ = /* @__PURE__ */ ((n) => (n[n.debug = -1] = \"debug\", n[n.log = 0] = \"log\", n[n.info = 1] = \"info\", n[n.warn = 2] = \"warn\", n[n.error = 3] = \"error\", n[n.silent = 4] = \"silent\", n))($ || {});\nconst f = globalThis || window, d = Symbol.for(\"__IPE_LOGGER_COLOR_MAP__\");\nf[d] || (f[d] = /* @__PURE__ */ new Map());\nconst _ = f[d];\nfunction c(n) {\n let t = 2166136261;\n for (let e = 0; e < n.length; e++)\n t ^= n.charCodeAt(e), t = (t >>> 0) * 16777619;\n return t >>> 0;\n}\nconst g = [\n [350, 360],\n [0, 15],\n [15, 30],\n [200, 230],\n [230, 250],\n [250, 280],\n [280, 310],\n [310, 330],\n [140, 160],\n [160, 180]\n];\nfunction E(n, t) {\n const e = g.length, l = c(n) % e, [r, w] = g[l], x = w - r, C = c(n + \":\" + t), s = r + C % (x || 1), b = c(n + \":s\"), a = c(n + \":l\");\n let i, h;\n if (t === \"name\")\n i = 62 + b % 18, h = 30 + a % 12;\n else {\n const P = s >= 0 && s < 50 || s > 330 && s < 360, R = s >= 200 && s <= 300;\n i = 55 + b % 20, R ? h = 55 + a % 8 : P ? h = 48 + a % 6 : h = 50 + a % 8, i < 60 && (i += 5);\n }\n return `hsl(${s}, ${i}%, ${h}%)`;\n}\nfunction u(n, t) {\n if (t)\n return _.set(n, t), t;\n const e = _.get(n);\n if (e) return e;\n const o = n.startsWith(\"name:\") ? \"name\" : \"group\", l = E(n, o);\n return _.set(n, l), l;\n}\n/**\n * @inpageedit/logger\n * Flexible, Extensible Console Logger with Colored Labels and Hierarchical Loggers\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n *\n * @example\n * ```ts\n * const logger = new Logger({ name: 'MyApp', level: LoggerLevel.debug })\n * // normal usage\n * logger.info('Application started')\n * // create sub-logger group\n * const apiLogger = logger.group('API', { color: '#f59e0b' })\n * apiLogger.warn('Deprecated API endpoint used')\n * // define custom level\n * logger.defineLevel('success', { level: LoggerLevel.info, label: '✅', method: 'info' })\n * logger.success('User created successfully')\n * ```\n */\nclass m {\n /**\n * Note: constructor returns a callable Proxy so that you can do `logger('group')`.\n */\n constructor(t = {}) {\n this._custom = (e) => {\n if (!this._enabled(e.level)) return v;\n const [o, l] = this._prefix(e.label);\n return this._consoleMethod(e.method).bind(console, o, ...l);\n }, this._name = t.name, this._nameColor = t.color, this._groupPath = t._groupPath ? [...t._groupPath] : [], this._dynamicLevels = { ...t._dynamicLevels }, this._levelRef = t._levelRef ?? {\n value: t.level ?? 1\n /* info */\n }, this._name && u(`name:${this._name}`, this._nameColor), this._installBuiltinLevels();\n for (const e of Object.keys(this._dynamicLevels))\n this._installLevelGetter(e, this._dynamicLevels[e]);\n return y(this);\n }\n // ---------- public API ----------\n get level() {\n return this._levelRef.value;\n }\n set level(t) {\n this._levelRef.value = t;\n }\n /** Create a sub-logger with a group label */\n group(t, e) {\n return t && u(`group:${t}`, e?.color), new m({\n name: this._name,\n color: this._nameColor,\n _groupPath: [...this._groupPath, t],\n _dynamicLevels: this._dynamicLevels,\n _levelRef: this._levelRef\n });\n }\n /** Define a custom level, e.g. logger.defineLevel('success', { level: info, label: '✅', method: 'info' }) */\n defineLevel(t, e) {\n this._dynamicLevels[t] = { ...e }, this._installLevelGetter(t, e);\n }\n // Built-in level getters\n get debug() {\n return this._method(\"debug\");\n }\n get log() {\n return this._method(\"log\");\n }\n get info() {\n return this._method(\"info\");\n }\n get warn() {\n return this._method(\"warn\");\n }\n get error() {\n return this._method(\"error\");\n }\n // ---------- internals ----------\n _installBuiltinLevels() {\n }\n _installLevelGetter(t, e) {\n Object.defineProperty(this, t, {\n configurable: !0,\n enumerable: !1,\n get: () => this._custom(e)\n });\n }\n _method(t) {\n const e = O[t];\n if (!this._enabled(e.level)) return v;\n const [o, l] = this._prefix(e.label);\n return this._consoleMethod(t).bind(console, o, ...l);\n }\n _consoleMethod(t) {\n const e = console[t];\n return (e || console.log).bind(console);\n }\n _enabled(t) {\n return t >= this._levelRef.value && this._levelRef.value !== 4;\n }\n _prefix(t) {\n const e = [];\n let o = \"\";\n if (this._name) {\n const l = u(`name:${this._name}`, this._nameColor);\n o += `%c${this._name}%c`, e.push(\n `background:${l}; color:#fff; padding:1px 4px; border-radius:2px; font-weight:700;`,\n p\n );\n }\n if (t && (o += ` ${t}`), this._groupPath.length) {\n const l = this._groupPath.join(\"/\"), r = u(`group:${l}`);\n o += ` %c${l}%c`, e.push(`color:${r}; text-decoration: underline;`, p);\n }\n return [o, e];\n }\n}\nconst v = () => {\n}, p = \"color:inherit; background:transparent; text-decoration:none;\", O = {\n debug: { level: -1, label: \"\", method: \"debug\" },\n log: { level: 0, label: \"\", method: \"log\" },\n info: { level: 1, label: \"[I]\", method: \"info\" },\n warn: { level: 2, label: \"[W]\", method: \"warn\" },\n error: { level: 3, label: \"[E]\", method: \"error\" }\n};\nfunction y(n) {\n const t = function(e, o) {\n return n.group(e, o);\n };\n return new Proxy(t, {\n get(e, o, l) {\n return n[o];\n },\n set(e, o, l) {\n return n[o] = l, !0;\n },\n apply(e, o, l) {\n return n.group(l[0], l[1]);\n },\n has(e, o) {\n return o in n;\n }\n });\n}\nfunction S(n) {\n return new m(n);\n}\nexport {\n m as Logger,\n $ as LoggerLevel,\n S as createLogger\n};\n//# sourceMappingURL=index.js.map\n","import { InPageEdit } from '@/InPageEdit'\nimport { FexiosConfigs } from 'wiki-saikou'\nimport { MwApi } from 'wiki-saikou/browser'\n\nexport type * from 'wiki-saikou/browser'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n api: MwApi\n }\n}\n\nexport interface ApiServiceOptions extends Partial<FexiosConfigs> {}\n\nexport class ApiService {\n constructor(\n public ctx: InPageEdit,\n options: Partial<ApiServiceOptions> = {}\n ) {\n if (location?.href && options?.baseURL?.toString()?.startsWith('/')) {\n options.baseURL = new URL(options.baseURL, location.origin)\n }\n const api = new MwApi({\n baseURL: options.baseURL!.toString(),\n fexiosConfigs: {\n headers: {\n 'x-api-user-agent': `InPageEdit-NEXT ${ctx.version}`,\n ...options.headers,\n },\n ...options,\n },\n throwOnApiError: true,\n })\n ctx.set('api', api)\n }\n}\n","import { Inject, InPageEdit, Service } from '@/InPageEdit.js'\nimport { IWikiTitle } from '@/models/WikiTitle'\n\ndeclare module '@/InPageEdit.js' {\n interface InPageEdit {\n /**\n * Basic information of the current web page\n */\n currentPage: CurrentPageService\n }\n}\n\n@Inject(['wiki', 'wikiTitle'])\nexport class CurrentPageService extends Service {\n constructor(readonly ctx: InPageEdit) {\n super(ctx, 'currentPage', false)\n }\n private get logger() {\n return this.ctx.logger('CURRENT_PAGE')\n }\n\n protected async start() {\n await this.#init()\n\n this.#injectHistoryPopState()\n window.addEventListener('popstate', this.#onPopState.bind(this))\n\n this.logger.info('initialized', this.wikiTitle)\n }\n\n protected stop(): void | Promise<void> {\n window.removeEventListener('popstate', this.#onPopState.bind(this))\n }\n\n async #init() {\n await this.#initCurrentTitle()\n await this.#initIsMainPage()\n }\n\n #injectHistoryPopState() {\n const injectKey = Symbol.for('InPageEdit.CurrentPageService.UrlChangeListenerInstalled')\n if ((window as any)[injectKey]) {\n return\n }\n const _pushState = history.pushState\n const _replaceState = history.replaceState\n history.pushState = function (data: any, title: string, url?: string | null) {\n _pushState.apply(this, [data, title, url])\n window.dispatchEvent(new PopStateEvent('popstate', { state: data }))\n }\n history.replaceState = function (data: any, title: string, url?: string | null) {\n _replaceState.apply(this, [data, title, url])\n window.dispatchEvent(new PopStateEvent('popstate', { state: data }))\n }\n ;(window as any)[injectKey] = true\n }\n async #onPopState(e: PopStateEvent) {\n const oldURL = this.url\n const newURL = new URL(window.location.href)\n this.url = newURL\n\n // 只有 path/title=/curid= 变化时,才刷新状态\n if (\n oldURL.pathname !== newURL.pathname ||\n oldURL.searchParams.get('title') !== newURL.searchParams.get('title') ||\n oldURL.searchParams.get('curid') !== newURL.searchParams.get('curid')\n ) {\n await this.#init()\n this.logger.info('location changed', newURL, this.wikiTitle)\n }\n }\n\n url: URL = new URL(window.location.href)\n get params() {\n return this.url.searchParams\n }\n get canonicalUrl() {\n const href = (\n qs<HTMLLinkElement>('link[rel=\"alternate\"][hreflang=\"x-default\"]') ||\n qs<HTMLLinkElement>('link[rel=\"canonical\"]')\n )?.href\n let url: URL | null = null\n if (href) {\n url = new URL(href, location.origin)\n }\n Reflect.defineProperty(this, 'canonicalUrl', {\n get: () => url,\n })\n return url\n }\n\n readonly isMainPage!: boolean\n async #initIsMainPage() {\n const title = this.wikiTitle\n const isMainPage = title?.getMainDBKey() === this.ctx.wiki.mainPageName\n Reflect.defineProperty(this, 'isMainPage', {\n get: () => isMainPage,\n })\n return isMainPage\n }\n\n /**\n * Get the title of the current page by location URL\n * @returns IWikiTitle or null if cannot be determined\n */\n wikiTitle!: IWikiTitle | null\n async #initCurrentTitle(): Promise<IWikiTitle | null> {\n let title: IWikiTitle | null = null\n if (this.canonicalUrl) {\n title = await this.ctx.wikiTitle.newTitleFromUrl(this.canonicalUrl)\n } else {\n title = await this.ctx.wikiTitle.newTitleFromUrl(this.url)\n }\n Object.freeze(title)\n Reflect.defineProperty(this, 'wikiTitle', {\n get: () => title,\n })\n return title\n }\n\n get wikiAction() {\n return this.params.get('action') || 'view'\n }\n}\n","import { InPageEdit, Service } from '@/InPageEdit'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n resourceLoader: ResourceLoaderService\n }\n}\n\nexport class ResourceLoaderService extends Service {\n constructor(public ctx: InPageEdit) {\n super(ctx, 'resourceLoader', true)\n }\n protected stop(): void | Promise<void> {\n this.removeAll()\n }\n\n loadScript(src: string, attrs?: Record<string, any>): Promise<HTMLScriptElement | null> {\n if (!src) {\n return Promise.resolve(null)\n }\n const key = `script:${src}`\n const existed = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (existed) {\n return Promise.resolve(existed as HTMLScriptElement)\n }\n const promise = new Promise<HTMLScriptElement>((resolve, reject) => {\n const script = document.createElement('script')\n script.src = src\n script.dataset.ipe = key\n if (attrs) {\n Object.entries(attrs).forEach(([key, value]) => {\n if (typeof value === 'undefined' || value === false || value === null) {\n script.removeAttribute(key)\n } else {\n script.setAttribute(key, value)\n }\n })\n }\n document.body.appendChild(script)\n script.onload = () => resolve(script)\n script.onerror = (e) => reject(e)\n })\n return promise\n }\n\n loadStyle(href: string, attrs?: Record<string, any>): Promise<HTMLLinkElement | null> {\n if (!href) {\n return Promise.resolve(null)\n }\n const key = `style:${href}`\n const existed = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (existed) {\n return Promise.resolve(existed as HTMLLinkElement)\n }\n const promise = new Promise<HTMLLinkElement>((resolve, reject) => {\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n link.dataset.ipe = key\n if (attrs) {\n Object.entries(attrs).forEach(([key, value]) => {\n if (typeof value === 'undefined' || value === false || value === null) {\n link.removeAttribute(key)\n } else {\n link.setAttribute(key, value)\n }\n })\n }\n const meta =\n document.querySelector('meta[name=\"ipe-styles\"]') ||\n (() => {\n const meta = document.createElement('meta')\n meta.id = 'ipe-styles'\n meta.name = 'ipe-styles'\n document.head.insertAdjacentElement('afterbegin', meta)\n return meta\n })()\n meta.before(link)\n link.onload = () => resolve(link)\n link.onerror = (e) => reject(e)\n })\n return promise\n }\n\n removeStyle(href: string) {\n const key = `style:${href}`\n const link = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (link) {\n link.remove()\n }\n }\n removeScript(src: string) {\n const key = `script:${src}`\n const script = document.querySelector(`[data-ipe=\"${key}\"]`)\n if (script) {\n script.remove()\n }\n }\n removeAll() {\n document.querySelectorAll('[data-ipe]').forEach((el) => {\n el.remove()\n })\n }\n\n resolveImportPath(path: string) {\n if (path.startsWith('http') || path.startsWith('//')) {\n return path\n }\n if (import.meta.env.VITE_BUILD_FORMAT === 'import') {\n return import.meta.resolve(path)\n }\n const src = (document.currentScript as HTMLScriptElement)?.src\n if (!src) {\n return `https://unpkg.com/mediawiki-inpageedit@latest/dist/${path}`\n }\n const url = new URL(src)\n if (!url.pathname.endsWith('.js')) {\n url.pathname = url.pathname + '/'\n }\n return new URL(path, url.toString()).toString()\n }\n}\n","const S = Object.keys;\nfunction j(s) {\n return typeof s == \"boolean\";\n}\nfunction U(s) {\n return s && typeof s.nodeType == \"number\";\n}\nfunction B(s) {\n return typeof s == \"string\";\n}\nfunction I(s) {\n return typeof s == \"number\";\n}\nfunction w(s) {\n return typeof s == \"object\" ? s !== null : v(s);\n}\nfunction v(s) {\n return typeof s == \"function\";\n}\nfunction Y(s) {\n return !!(s && s.isComponent);\n}\nfunction W(s) {\n return w(s) && typeof s.length == \"number\" && typeof s.nodeType != \"number\";\n}\nfunction x(s, t) {\n if (s)\n for (const e of S(s))\n t(s[e], e);\n}\nfunction G(s) {\n return w(s) && \"current\" in s;\n}\nconst A = {\n animationIterationCount: 0,\n borderImageOutset: 0,\n borderImageSlice: 0,\n borderImageWidth: 0,\n boxFlex: 0,\n boxFlexGroup: 0,\n boxOrdinalGroup: 0,\n columnCount: 0,\n columns: 0,\n flex: 0,\n flexGrow: 0,\n flexPositive: 0,\n flexShrink: 0,\n flexNegative: 0,\n flexOrder: 0,\n gridArea: 0,\n gridRow: 0,\n gridRowEnd: 0,\n gridRowSpan: 0,\n gridRowStart: 0,\n gridColumn: 0,\n gridColumnEnd: 0,\n gridColumnSpan: 0,\n gridColumnStart: 0,\n fontWeight: 0,\n lineClamp: 0,\n lineHeight: 0,\n opacity: 0,\n order: 0,\n orphans: 0,\n tabSize: 0,\n widows: 0,\n zIndex: 0,\n zoom: 0,\n // SVG-related properties\n fillOpacity: 0,\n floodOpacity: 0,\n stopOpacity: 0,\n strokeDasharray: 0,\n strokeDashoffset: 0,\n strokeMiterlimit: 0,\n strokeOpacity: 0,\n strokeWidth: 0\n};\nfunction Z(s, t) {\n return s + t.charAt(0).toUpperCase() + t.substring(1);\n}\nconst q = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\nS(A).forEach((s) => {\n q.forEach((t) => {\n A[Z(t, s)] = 0;\n });\n});\nconst V = Symbol.for(\"jsx-dom:type\");\nvar R = /* @__PURE__ */ function(s) {\n return s.ShadowRoot = \"ShadowRoot\", s;\n}(R || {});\nfunction J(s) {\n return s != null && s[V] === R.ShadowRoot;\n}\nconst Q = \"http://www.w3.org/2000/svg\", tt = \"http://www.w3.org/1999/xlink\", et = \"http://www.w3.org/XML/1998/namespace\";\nfunction F(s) {\n return !j(s) && s != null;\n}\nfunction T(s) {\n return Array.isArray(s) ? s.map(T).filter(Boolean).join(\" \") : w(s) ? Symbol.iterator in s ? T(Array.from(s)) : S(s).filter((t) => s[t]).join(\" \") : F(s) ? \"\" + s : \"\";\n}\nconst st = {\n animate: 0,\n circle: 0,\n clipPath: 0,\n defs: 0,\n desc: 0,\n ellipse: 0,\n feBlend: 0,\n feColorMatrix: 0,\n feComponentTransfer: 0,\n feComposite: 0,\n feConvolveMatrix: 0,\n feDiffuseLighting: 0,\n feDisplacementMap: 0,\n feDistantLight: 0,\n feFlood: 0,\n feFuncA: 0,\n feFuncB: 0,\n feFuncG: 0,\n feFuncR: 0,\n feGaussianBlur: 0,\n feImage: 0,\n feMerge: 0,\n feMergeNode: 0,\n feMorphology: 0,\n feOffset: 0,\n fePointLight: 0,\n feSpecularLighting: 0,\n feSpotLight: 0,\n feTile: 0,\n feTurbulence: 0,\n filter: 0,\n foreignObject: 0,\n g: 0,\n image: 0,\n line: 0,\n linearGradient: 0,\n marker: 0,\n mask: 0,\n metadata: 0,\n path: 0,\n pattern: 0,\n polygon: 0,\n polyline: 0,\n radialGradient: 0,\n rect: 0,\n stop: 0,\n svg: 0,\n switch: 0,\n symbol: 0,\n text: 0,\n textPath: 0,\n tspan: 0,\n use: 0,\n view: 0\n}, it = /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;\nfunction nt(s) {\n const t = document.createDocumentFragment();\n return E(s.children, t), t;\n}\nfunction ot(s, t, e) {\n t = {\n ...t,\n children: e\n };\n const i = new s(t), n = i.render();\n return \"ref\" in t && M(t.ref, i), n;\n}\nfunction c(s, t) {\n let { children: e, ...i } = t;\n !i.namespaceURI && st[s] === 0 && (i = {\n ...i,\n namespaceURI: Q\n });\n let n;\n if (B(s)) {\n if (n = i.namespaceURI ? document.createElementNS(i.namespaceURI, s) : document.createElement(s), at(i, n), E(e, n), n instanceof window.HTMLSelectElement && i.value != null)\n if (i.multiple === !0 && Array.isArray(i.value)) {\n const o = i.value.map((l) => String(l));\n n.querySelectorAll(\"option\").forEach(\n (l) => l.selected = o.includes(l.value)\n );\n } else\n n.value = i.value;\n M(i.ref, n);\n } else if (v(s))\n w(s.defaultProps) && (i = {\n ...s.defaultProps,\n ...i\n }), n = Y(s) ? ot(s, i, e) : s({\n ...i,\n children: e\n });\n else\n throw new TypeError(`Invalid JSX element type: ${s}`);\n return n;\n}\nfunction M(s, t) {\n G(s) ? s.current = t : v(s) && s(t);\n}\nfunction E(s, t) {\n if (W(s))\n rt(s, t);\n else if (B(s) || I(s))\n L(document.createTextNode(s), t);\n else if (s === null)\n L(document.createComment(\"\"), t);\n else if (U(s))\n L(s, t);\n else if (J(s)) {\n const e = t.attachShadow(s.attr);\n E(s.children, e), M(s.ref, e);\n }\n}\nfunction rt(s, t) {\n for (const e of [...s])\n E(e, t);\n return t;\n}\nfunction L(s, t) {\n t instanceof window.HTMLTemplateElement ? t.content.appendChild(s) : t.appendChild(s);\n}\nfunction C(s, t) {\n return s.replace(/[A-Z]/g, (e) => t + e.toLowerCase());\n}\nfunction K(s, t) {\n t == null || t === !1 || (Array.isArray(t) ? t.forEach((e) => K(s, e)) : B(t) ? s.setAttribute(\"style\", t) : w(t) && x(t, (e, i) => {\n i.indexOf(\"-\") === 0 ? s.style.setProperty(i, e) : I(e) && A[i] !== 0 ? s.style[i] = e + \"px\" : s.style[i] = e;\n }));\n}\nfunction lt(s, t, e) {\n switch (s) {\n case \"xlinkActuate\":\n case \"xlinkArcrole\":\n case \"xlinkHref\":\n case \"xlinkRole\":\n case \"xlinkShow\":\n case \"xlinkTitle\":\n case \"xlinkType\":\n _(e, tt, C(s, \":\"), t);\n return;\n case \"xmlnsXlink\":\n b(e, C(s, \":\"), t);\n return;\n case \"xmlBase\":\n case \"xmlLang\":\n case \"xmlSpace\":\n _(e, et, C(s, \":\"), t);\n return;\n }\n switch (s) {\n case \"htmlFor\":\n b(e, \"for\", t);\n return;\n case \"dataset\":\n x(t, (i, n) => {\n i != null && (e.dataset[n] = i);\n });\n return;\n case \"innerHTML\":\n case \"innerText\":\n case \"textContent\":\n F(t) && (e[s] = t);\n return;\n case \"dangerouslySetInnerHTML\":\n w(t) && (e.innerHTML = t.__html);\n return;\n case \"value\":\n if (t == null || e instanceof window.HTMLSelectElement)\n return;\n if (e instanceof window.HTMLTextAreaElement) {\n e.value = t;\n return;\n }\n break;\n case \"spellCheck\":\n e.spellcheck = t;\n return;\n case \"class\":\n case \"className\":\n v(t) ? t(e) : b(e, \"class\", T(t));\n return;\n case \"ref\":\n case \"namespaceURI\":\n return;\n case \"style\":\n K(e, t);\n return;\n case \"on\":\n case \"onCapture\":\n x(t, (i, n) => {\n e.addEventListener(n, i, s === \"onCapture\");\n });\n return;\n }\n if (v(t)) {\n if (s[0] === \"o\" && s[1] === \"n\") {\n let i = s.toLowerCase();\n const n = i.endsWith(\"capture\");\n if (i === \"ondoubleclick\" ? i = \"ondblclick\" : n && i === \"ondoubleclickcapture\" && (i = \"ondblclickcapture\"), !n && e[i] === null)\n e[i] = t;\n else if (n)\n e.addEventListener(\n i.substring(2, i.length - 7),\n t,\n !0\n );\n else {\n let o;\n i in window ? o = i.substring(2) : o = i[2] + s.slice(3), e.addEventListener(o, t);\n }\n }\n } else w(t) ? e[s] = t : t === !0 ? b(e, s, \"\") : t !== !1 && t != null && (e instanceof SVGElement && !it.test(s) ? b(e, C(s, \"-\"), t) : b(e, s, t));\n}\nfunction b(s, t, e) {\n s.setAttribute(t, e);\n}\nfunction _(s, t, e, i) {\n s.setAttributeNS(t, e, i);\n}\nfunction at(s, t) {\n for (const e of S(s))\n lt(e, s[e], t);\n return t;\n}\nvar P = /* @__PURE__ */ ((s) => (s.Init = \"modal.init\", s.BeforeShow = \"modal.beforeShow\", s.Show = \"modal.show\", s.BeforeClose = \"modal.beforeClose\", s.Close = \"modal.close\", s.Destroy = \"modal.destroy\", s.ToastShow = \"toast.show\", s.ToastClose = \"toast.close\", s))(P || {});\nlet ct = 0;\nconst z = (s) => `${s}-${++ct}`;\nfunction k(s) {\n return s instanceof Node ? s : document.createTextNode(String(s));\n}\nfunction p(s, t) {\n if (!s) throw new Error(`${t ?? \"Element\"} not found`);\n return s;\n}\nfunction H(s) {\n const t = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])'\n ].join(\",\");\n return Array.from(s.querySelectorAll(t)).filter(\n (e) => !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)\n );\n}\nfunction h(s, t = {}) {\n const e = document.createElement(s);\n if (t.className && (e.className = t.className), t.html != null && (e.innerHTML = t.html), t.text != null && (e.textContent = t.text), t.attrs)\n for (const [i, n] of Object.entries(t.attrs)) e.setAttribute(i, n);\n return e;\n}\nconst ht = typeof navigator < \"u\" && /Mac|iPhone|iPad|iPod/i.test(navigator.platform), X = [\"ctrl\", \"alt\", \"shift\", \"meta\"];\nfunction dt(s) {\n if (!s) return null;\n const t = String(s).trim().toLowerCase().split(/[+\\-\\s]+/g).filter(Boolean), e = [];\n let i = null;\n const n = (l) => {\n e.includes(l) || e.push(l);\n };\n for (const l of t) {\n let r = l;\n if (r === \"control\" || r === \"ctrl\") {\n n(\"ctrl\");\n continue;\n }\n if (r === \"alt\" || r === \"option\") {\n n(\"alt\");\n continue;\n }\n if (r === \"shift\") {\n n(\"shift\");\n continue;\n }\n if (r === \"meta\" || r === \"cmd\" || r === \"command\" || r === \"super\") {\n n(\"meta\");\n continue;\n }\n if (r === \"mod\") {\n n(ht ? \"meta\" : \"ctrl\");\n continue;\n }\n r === \"esc\" && (r = \"escape\"), r === \"return\" && (r = \"enter\"), (r === \"space\" || r === \"spacebar\") && (r = \"space\"), i = r;\n }\n const o = X.filter((l) => e.includes(l));\n return !i || i === \"\" ? o.length ? o.join(\"+\") : null : o.length ? `${o.join(\"+\")}+${i}` : i;\n}\nfunction ft(s) {\n const t = [];\n s.ctrlKey && t.push(\"ctrl\"), s.altKey && t.push(\"alt\"), s.shiftKey && t.push(\"shift\"), s.metaKey && t.push(\"meta\");\n let e = s.key;\n e === \" \" && (e = \"space\");\n const i = (e.length === 1, e.toLowerCase()), n = X.filter((o) => t.includes(o));\n return n.length ? `${n.join(\"+\")}+${i}` : i;\n}\nclass ut {\n constructor() {\n this.zBase = 1e3, this.stack = [];\n }\n push(t) {\n this.stack.push(t), this.syncZ();\n }\n remove(t) {\n this.stack = this.stack.filter((e) => e !== t), this.syncZ();\n }\n top() {\n return this.stack[this.stack.length - 1];\n }\n closeAll(t, e) {\n const i = new Set((Array.isArray(e) ? e : e ? [e] : []).map(String)), n = new Set((Array.isArray(t) ? t : t ? [t] : []).map(String));\n [...this.stack].reverse().forEach((o) => {\n const l = o.modalId, r = n.size ? n.has(o.pluginName) : !0, a = i.has(l);\n r && !a && o.close();\n });\n }\n removeAll() {\n [...this.stack].forEach((t) => t.destroy()), this.stack = [];\n }\n syncZ() {\n this.stack.forEach((t, e) => t.setZIndex(this.zBase + e * 2));\n }\n lockBodyScroll() {\n document.body.classList.add(\"ipe-modal-no-scroll\");\n }\n unlockBodyScroll() {\n document.body.classList.remove(\"ipe-modal-no-scroll\");\n }\n}\nconst d = new ut();\nclass N {\n constructor(t = {}) {\n this.backdropId = z(\"ipe-modal-backdrop\"), this.modalId = z(\"ipe-modal\"), this.numberId = this.modalId.split(\"-\")[1], this._isDestroyed = !1, this.pluginName = \"normalModal\", this.buttonElsLeft = [], this.buttonElsRight = [], this.keyMap = /* @__PURE__ */ new Map(), this.isOpen = !1, this.isToast = !1, this.isDragging = !1, this.dragStartX = 0, this.dragStartY = 0, this.modalStartX = 0, this.modalStartY = 0, this.Event = P, this._hooks = [], this.startCloseTimer = (e) => {\n this.stopCloseTimer(), this.closeTimer = window.setTimeout(() => this.close(), e);\n }, this.stopCloseTimer = () => {\n this.closeTimer && window.clearTimeout(this.closeTimer), this.closeTimer = void 0;\n }, this.onDragMove = (e) => {\n if (!this.isDragging) return;\n e.preventDefault();\n const i = e.clientX - this.dragStartX, n = e.clientY - this.dragStartY, o = this.get$modal(), l = this.modalStartX + i, r = this.modalStartY + n;\n o.style.left = `${l}px`, o.style.top = `${r}px`;\n }, this.onDragEnd = () => {\n if (!this.isDragging) return;\n this.isDragging = !1, document.removeEventListener(\"pointermove\", this.onDragMove), document.removeEventListener(\"pointerup\", this.onDragEnd);\n const e = this.get$modal(), i = this.get$window();\n e.classList.remove(\"is-dragging\"), i.style.animation = \"none\", requestAnimationFrame(() => {\n this.applyAnimation(!0);\n });\n }, this.options = { ...N.DEFAULT_OPTIONS, ...t }, this.options.backdrop === !1 && t.bodyScroll === void 0 && (this.options.bodyScroll = !0);\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n static {\n this.DEFAULT_OPTIONS = {\n className: \"\",\n sizeClass: \"auto\",\n center: !0,\n fitScreen: !1,\n closeIcon: !0,\n bodyScroll: !1,\n outSideClose: !0,\n backdrop: !0,\n animation: {\n show: \"ipe-modal-fade-in\",\n hide: \"ipe-modal-fade-out\"\n },\n animationSpeed: 200\n };\n }\n static extends(t = {}) {\n return class extends this {\n constructor(e = {}) {\n super({ ...t, ...e });\n }\n };\n }\n // ------------------------------ lifecycle ------------------------------ //\n init() {\n if (this.$modal) return this;\n const t = this.options.backdrop !== !1;\n let e;\n t && (e = h(\"div\", {\n className: \"ipe-modal-backdrop\",\n attrs: { id: this.backdropId, \"data-modal-id\": this.modalId }\n }));\n const i = h(\"div\", {\n className: \"ipe-modal-modal\",\n attrs: { id: this.modalId, role: \"dialog\", \"aria-modal\": \"true\", tabindex: \"-1\" }\n });\n if (i.modal = this, !t) {\n i.classList.add(\"no-backdrop\");\n const m = window.pageYOffset || document.documentElement.scrollTop, $ = window.pageXOffset || document.documentElement.scrollLeft, D = window.innerWidth;\n i.style.top = `${m + 60}px`, this.once(\"modal.show\", () => {\n i.style.left = `${$ + D / 2 - i.offsetWidth / 2}px`;\n });\n }\n const n = h(\"div\", {\n className: `ipe-modal-modal__window size--${this.options.sizeClass || \"auto\"} plugin--${this.pluginName}`\n });\n n.modal = this;\n const o = h(\"div\", { className: \"ipe-modal-modal__header\" }), l = `${this.modalId}-title`, r = h(\"h2\", {\n className: \"ipe-modal-modal__title\",\n attrs: { id: l, role: \"heading\", \"aria-level\": \"2\" }\n });\n i.setAttribute(\"aria-labelledby\", l);\n const a = h(\"div\", { className: \"ipe-modal-modal__icons\" });\n if (this.options.closeIcon) {\n const m = h(\"button\", {\n className: \"ipe-modal-modal__close\",\n attrs: { type: \"button\", \"aria-label\": \"Close\" },\n html: \"×\"\n });\n m.addEventListener(\"click\", () => {\n let $ = !0;\n typeof this.options.onClickClose == \"function\" ? this.options.onClickClose(this) === !1 && ($ = !1) : this.options.onClickClose === !1 && ($ = !1), $ && this.close();\n }), a.appendChild(m);\n }\n o.append(r, a), this.options.draggable && t && (this.options.draggable = !1), this.options.draggable && (o.style.cursor = \"move\", o.style.userSelect = \"none\", o.addEventListener(\"pointerdown\", this.onDragStart.bind(this)), i.classList.add(\"is-draggable\"));\n const u = h(\"div\", { className: \"ipe-modal-modal__content\" }), f = h(\"div\", { className: \"ipe-modal-modal__footer\" }), y = h(\"div\", {\n className: \"ipe-modal-modal__buttons ipe-modal-modal__buttons--left\"\n }), O = h(\"div\", {\n className: \"ipe-modal-modal__buttons ipe-modal-modal__buttons--right\"\n });\n return f.append(y, O), n.append(o, u, f), i.appendChild(n), this.$backdrop = e, this.$modal = i, this.$window = n, this.$header = o, this.$title = r, this.$icons = a, this.$content = u, this.$footer = f, this.$buttonsLeft = y, this.$buttonsRight = O, this.options.title && this.setTitle(this.options.title), this.options.content && this.setContent(this.options.content), this.options.buttons?.length ? this.setButtons(this.options.buttons) : f.style.display = \"none\", this.options.center && this.$modal.classList.add(\"is-centered\"), this.options.fitScreen && this.$modal.classList.add(\"is-fullscreen\"), this.options.iconButtons && this.$header.classList.add(\"has-icon-buttons\"), this.options.className && this.$window.classList.add(...this.options.className.split(/[\\s\\.#+]+/g).filter(Boolean)), typeof this.options.fixedHeight == \"number\" ? this.$window.style.height = `${Math.max(0, this.options.fixedHeight)}px` : this.options.fixedHeight === !0 && this.$window.classList.add(\"is-fixed-height\"), e && e.addEventListener(\"pointerdown\", (m) => {\n this.options.outSideClose && m.target === e && this.close();\n }), this.options.draggable && n.addEventListener(\"pointerdown\", (m) => {\n m.target && n.contains(m.target) && this.bringToFront();\n }), this.onKeyDown = this.onKeyDown.bind(this), this.emit(\n \"modal.init\"\n /* Init */\n ), this;\n }\n show() {\n if (this.$modal || this.init(), !this.$modal) throw new Error(\"Failed to initialize modal\");\n if (this.isOpen) return this;\n {\n const i = this.emit(\"modal.beforeShow\", !0), n = this.options.beforeShow ? this.options.beforeShow(this) !== !1 : !0;\n if (!i || !n) return this;\n }\n this.lastFocused = document.activeElement ?? null, this.$backdrop && document.body.appendChild(this.$backdrop), document.body.appendChild(this.$modal), this.shouldLockBodyOnOpen() && d.lockBodyScroll(), requestAnimationFrame(() => {\n this.$backdrop?.classList.add(\"is-open\"), this.$modal.classList.add(\"is-open\"), this.applyAnimation(!0), this.focusFirst();\n }), document.addEventListener(\"keydown\", this.onKeyDown), d.push(this), this.isOpen = !0, this.options.onShow?.(this), this.emit(\n \"modal.show\"\n /* Show */\n );\n const t = typeof this.options.closeAfter == \"number\" ? this.options.closeAfter : this.options.closeAfter?.time, e = typeof this.options.closeAfter == \"number\" ? !0 : this.options.closeAfter?.resetOnHover;\n return t && (this.startCloseTimer(t), e && (this.$window?.addEventListener(\"mouseenter\", this.stopCloseTimer), this.$window?.addEventListener(\"mouseleave\", () => this.startCloseTimer(t)))), this;\n }\n close() {\n if (!this.isOpen) return this;\n {\n const o = this.emit(\"modal.beforeClose\", !0), l = this.options.beforeClose ? this.options.beforeClose(this) !== !1 : !0;\n if (!o || !l) return this;\n }\n if (this.isToast) {\n this.applyAnimation(!1), this.emit(\n \"modal.close\"\n /* Close */\n ), this.emit(\n \"toast.close\"\n /* ToastClose */\n );\n const o = this.isAnimationDisabled() ? 0 : this.options.animationSpeed ?? 200;\n let l = !1;\n const r = () => {\n l || (l = !0, this.destroy(), this.options.onClose?.(this));\n }, a = (u, f) => {\n const y = () => {\n u.removeEventListener(f, y), r();\n };\n u.addEventListener(f, y, { once: !0 });\n };\n return o > 0 && this.$window ? (a(this.$window, \"transitionend\"), a(this.$window, \"animationend\"), window.setTimeout(r, o + 20)) : window.setTimeout(r, o), this;\n }\n this.applyAnimation(!1), this.$backdrop?.classList.remove(\"is-open\"), this.$modal?.classList.remove(\"is-open\"), this.emit(\n \"modal.close\"\n /* Close */\n );\n const t = this.isAnimationDisabled() ? 0 : this.options.animationSpeed ?? 200;\n let e = !1;\n const i = () => {\n e || (e = !0, this.destroy(), this.options.onClose?.(this));\n }, n = (o, l) => {\n const r = () => {\n o.removeEventListener(l, r), i();\n };\n o.addEventListener(l, r, { once: !0 });\n };\n return t > 0 && this.$window ? (n(this.$window, \"transitionend\"), n(this.$window, \"animationend\"), window.setTimeout(i, t + 20)) : window.setTimeout(i, t), this;\n }\n /** Immediately removes DOM and listeners */\n destroy() {\n if (this._isDestroyed) return this;\n if (this.stopCloseTimer(), document.removeEventListener(\"keydown\", this.onKeyDown), this.isDragging && this.onDragEnd(), this.$window?.removeEventListener(\"mouseenter\", this.stopCloseTimer), this.isToast) {\n this.$window?.parentElement && this.$window.parentElement.removeChild(this.$window);\n const t = g.indexOf(this);\n t !== -1 && g.splice(t, 1);\n } else\n this.$backdrop?.parentElement && this.$backdrop.parentElement.removeChild(this.$backdrop), this.$modal?.parentElement && this.$modal.parentElement.removeChild(this.$modal), d.remove(this), this.shouldUnlockBodyOnClose() && d.unlockBodyScroll();\n return this.isOpen = !1, this.lastFocused?.focus?.(), this.emit(\n \"modal.destroy\"\n /* Destroy */\n ), this._isDestroyed = !0, this;\n }\n // ------------------------------ getters ------------------------------- //\n get$backdrop() {\n return this.$backdrop;\n }\n get$modal() {\n return p(this.$modal, \"modal\");\n }\n get$window() {\n return p(this.$window, \"window\");\n }\n get$header() {\n return p(this.$header, \"header\");\n }\n get$title() {\n return p(this.$title, \"title\");\n }\n get$content() {\n return p(this.$content, \"content\");\n }\n get$icons() {\n return p(this.$icons, \"icons\");\n }\n get$buttons(t) {\n return t === \"leftButtons\" ? p(this.$buttonsLeft, \"leftButtons\") : t === \"rightButtons\" ? p(this.$buttonsRight, \"rightButtons\") : p(this.$footer, \"buttons\");\n }\n // ------------------------------ content ------------------------------- //\n setTitle(t) {\n const e = this.get$title();\n return e.innerHTML = \"\", e.append(k(t)), this;\n }\n setContent(t, e = \"replace\") {\n const i = this.get$content();\n return e === \"replace\" ? (i.innerHTML = \"\", i.append(k(t))) : e === \"append\" ? i.append(k(t)) : i.prepend(k(t)), this;\n }\n setIcons(t) {\n const e = this.get$icons();\n e.innerHTML = \"\";\n for (const i of t) {\n const n = h(\"button\", {\n className: `ipe-modal-modal__icon ${i.className}`,\n attrs: { type: \"button\" }\n });\n n.addEventListener(\"click\", i.method), e.appendChild(n);\n }\n return this;\n }\n setButtons(t, e) {\n const i = this.$buttonsLeft, n = this.$buttonsRight;\n [i, n].forEach((l) => l.innerHTML = \"\"), this.buttonElsLeft = [], this.buttonElsRight = [], this.keyMap.clear();\n const o = e ?? this.$footer;\n if (o === this.$footer)\n t.forEach((l) => this.addButton(l)), t.length === 0 && (this.$footer.style.display = \"none\");\n else {\n o.innerHTML = \"\";\n for (const l of t) {\n const r = this.generateButton(l);\n o.appendChild(r);\n }\n }\n return this;\n }\n generateButton(t) {\n const e = t.type ?? \"button\", i = e === \"link\" ? h(\"a\") : h(\"button\", { attrs: { type: \"button\" } });\n t.id && (i.id = t.id), i.className = `ipe-modal-btn ${t.className ?? \"\"}`.trim();\n const n = k(t.label ?? \"OK\");\n if (i.append(n), e === \"link\" && t.href && (i.href = t.href), t.method && i.addEventListener(\"click\", (o) => {\n if (i._ipe_tmpDisabled) {\n o.preventDefault(), o.stopPropagation();\n return;\n }\n t.method.call(i, o, this);\n }), typeof t.closeAfter == \"number\" && t.closeAfter >= 0 && i.addEventListener(\"click\", () => {\n window.setTimeout(() => this.close(), t.closeAfter);\n }), typeof t.enableAfter == \"number\" && t.enableAfter > 0) {\n e === \"button\" && i.setAttribute(\"disabled\", \"true\"), i._ipe_tmpDisabled = !0, i.setAttribute(\"aria-disabled\", \"true\");\n const o = () => {\n e === \"button\" && i.removeAttribute(\"disabled\"), delete i._ipe_tmpDisabled, i.removeAttribute(\"aria-disabled\");\n };\n window.setTimeout(o, t.enableAfter);\n }\n if (t.keyPress) {\n const l = String(t.keyPress).split(/[\\,\\|]+/g).map((r) => r.trim()).filter(Boolean);\n for (const r of l) {\n const a = dt(r);\n a && this.keyMap.set(a, i);\n }\n }\n return i;\n }\n /** Dynamically add button(s) into footer. Supports insertion index per side. */\n addButton(t, e) {\n this.$footer && (this.$footer.style.display = \"\");\n const i = t.side ?? \"right\", n = i === \"left\" ? this.$buttonsLeft : this.$buttonsRight, o = i === \"left\" ? this.buttonElsLeft : this.buttonElsRight, l = this.generateButton(t), r = Math.max(0, Math.min(e ?? o.length, o.length));\n return r >= n.children.length ? n.appendChild(l) : n.insertBefore(l, n.children[r]), o.splice(r, 0, l), this;\n }\n /** Remove button by element / id / global index (left first, then right). */\n removeButton(t) {\n const e = this.buttonElsLeft, i = this.buttonElsRight, n = [...e, ...i];\n let o = null;\n if (t === \"*\")\n return n.forEach((r) => {\n this.keyMap.delete(r.id), r.parentElement?.removeChild(r);\n }), this.$footer && (this.$footer.style.display = \"none\"), this;\n if (typeof t == \"number\" ? o = n[t] ?? null : typeof t == \"string\" ? o = n.find((r) => r.id === t) ?? null : t instanceof HTMLElement && (o = n.find((r) => r === t) ?? null), !o) return this;\n for (const [r, a] of this.keyMap.entries()) a === o && this.keyMap.delete(r);\n let l = e.indexOf(o);\n return l !== -1 ? (e.splice(l, 1), o.parentElement?.removeChild(o)) : (l = i.indexOf(o), l !== -1 && (i.splice(l, 1), o.parentElement?.removeChild(o))), e.length === 0 && i.length === 0 && this.$footer && (this.$footer.style.display = \"none\"), this;\n }\n changePreviewState() {\n return this.get$modal().classList.toggle(\"is-fullscreen\"), this;\n }\n setModalHeight(t, e = \"height\") {\n const i = this.get$window(), n = Math.max(0, window.innerHeight - t);\n return i.style[e] = `${n}px`, n;\n }\n setOptions(t, e) {\n return typeof t == \"string\" ? this.options[t] = e : Object.assign(this.options, t), this;\n }\n setPluginName(t) {\n return this.$window && (this.$window.className = this.$window.className.replace(\n `plugin--${this.pluginName}`,\n `plugin--${t}`\n )), this.pluginName = t, this;\n }\n // ------------------------------ helpers ------------------------------- //\n applyAnimation(t) {\n const e = this.get$modal(), i = this.get$window(), n = this.$backdrop, o = this.options.modalAnimation ?? this.options.animation, l = typeof o == \"string\" ? o : o && (t ? o.show : o.hide), r = this.options.backdropAnimation ?? this.options.animation, a = typeof r == \"string\" ? r : r && (t ? r.show : r.hide);\n !l || l === !1 ? (e.style.transition = \"none\", i.style.animation = \"none\", i.style.removeProperty(\"--ipe-modal-anim\")) : (e.style.removeProperty(\"transition\"), i.style.setProperty(\"--ipe-modal-anim\", l)), n && (!a || a === !1 ? n.style.transition = \"none\" : n.style.removeProperty(\"transition\"));\n }\n on(t, e) {\n return this._hooks.push({ type: t, listener: e }), () => this.off(t, e);\n }\n off(t, e) {\n return this._hooks = this._hooks.filter(\n (i) => i.type !== t && (e ? i.listener !== e : !0)\n ), this;\n }\n once(t, e) {\n const i = this.on(t, (n) => (i(), e(n)));\n return i;\n }\n emit(t, e) {\n const i = this._hooks.filter((a) => a.type === t);\n let n = !0;\n for (const a of i) {\n const u = new CustomEvent(t, { detail: this, cancelable: e }), f = a.listener(u);\n if (u.defaultPrevented && (n = !1), f === !1 && (n = !1), !n) break;\n }\n const o = this.$modal ?? document.body, l = new CustomEvent(t, { detail: this, cancelable: e });\n return (!o.dispatchEvent(l) || l.defaultPrevented) && (n = !1), n;\n }\n focusFirst() {\n const t = this.get$modal(), e = H(t);\n e.length ? e[0].focus() : t.focus({ preventScroll: !0 });\n }\n onKeyDown(t) {\n if (d.top() !== this) return;\n if (t.key === \"Escape\") {\n t.preventDefault(), this.close();\n return;\n }\n const e = this.get$modal();\n if (!e.contains(document.activeElement)) return;\n if (t.key === \"Tab\") {\n const r = H(e);\n if (!r.length) return;\n const a = r[0], u = r[r.length - 1], f = document.activeElement;\n t.shiftKey && f === a ? (t.preventDefault(), u.focus()) : !t.shiftKey && f === u && (t.preventDefault(), a.focus());\n }\n const i = t.ctrlKey || t.altKey || t.metaKey, n = t.target;\n if (!i && (n && [\"INPUT\", \"TEXTAREA\"].includes(n.tagName) || n.contentEditable === \"true\"))\n return;\n const o = ft(t), l = this.keyMap.get(o);\n if (l) {\n t.preventDefault(), l.click();\n return;\n }\n }\n setZIndex(t) {\n this.$backdrop && (this.$backdrop.style.zIndex = String(t)), this.$modal && (this.$modal.style.zIndex = String(t + 1));\n }\n /** Bring this modal to the top of the stack. */\n bringToFront() {\n return d.remove(this), d.push(this), this;\n }\n isAnimationDisabled() {\n const t = this.options.modalAnimation ?? this.options.animation;\n return t === !1 || t == null;\n }\n shouldLockBodyOnOpen() {\n return this.options.backdrop === !1 || this.options.bodyScroll !== !1 ? !1 : !d.stack.some(\n (e) => e !== this && e.options.backdrop !== !1 && e.options.bodyScroll === !1\n );\n }\n shouldUnlockBodyOnClose() {\n return this.options.backdrop === !1 || this.options.bodyScroll !== !1 ? !1 : !d.stack.some(\n (e) => e !== this && e.options.backdrop !== !1 && e.options.bodyScroll === !1\n );\n }\n // ------------------------------ drag handlers ------------------------------- //\n onDragStart(t) {\n if (this.options.backdrop !== !1 || !this.options.draggable) return;\n t.preventDefault(), this.isDragging = !0, this.bringToFront(), this.dragStartX = t.clientX, this.dragStartY = t.clientY;\n const e = this.get$modal(), i = e.getBoundingClientRect();\n this.modalStartX = i.left + window.pageXOffset, this.modalStartY = i.top + window.pageYOffset, e.style.transform = \"none\", e.style.left = `${this.modalStartX}px`, e.style.top = `${this.modalStartY}px`, document.addEventListener(\"pointermove\", this.onDragMove), document.addEventListener(\"pointerup\", this.onDragEnd), e.classList.add(\"is-dragging\");\n }\n // ------------------------------ toast ------------------------------- //\n /** Show as toast (no backdrop, container stack). */\n showToast(t) {\n this.$window || this.init();\n const e = mt(t.position ?? \"top right\"), i = this.get$window();\n this.isToast = !0, i.style.pointerEvents = \"auto\", this.applyAnimation(!0), e.appendChild(i);\n const n = (typeof this.options.closeAfter == \"number\" ? this.options.closeAfter : this.options.closeAfter?.time) ?? 3e3, o = (typeof this.options.closeAfter == \"number\" ? !0 : this.options.closeAfter?.resetOnHover) ?? !0;\n return n > 0 && (this.startCloseTimer(n), o && (i.addEventListener(\"mouseenter\", this.stopCloseTimer), i.addEventListener(\"mouseleave\", () => this.startCloseTimer(n)))), this.isOpen = !0, this.options.onShow?.(this), g.push(this), this.emit(\n \"toast.show\"\n /* ToastShow */\n ), this.emit(\n \"modal.show\"\n /* Show */\n ), this;\n }\n // ------------------------------ static helpers --------------------------- //\n static show(t, e) {\n return new this(t).init().show();\n }\n static createObject(t, e) {\n return new this(t);\n }\n static close(t) {\n if (!t) {\n const o = d.top();\n return o?.close(), o;\n }\n const e = typeof t == \"string\" ? t : t.id, i = d.stack.find((o) => o.modalId === e);\n if (i)\n return i.close(), i;\n const n = g.find((o) => o.modalId === e);\n return n?.close(), n;\n }\n static closeAll(t, e) {\n const i = new Set((Array.isArray(e) ? e : e ? [e] : []).map(String)), n = new Set((Array.isArray(t) ? t : t ? [t] : []).map(String));\n return d.closeAll(t, e), [...g].forEach((o) => {\n const l = o.modalId, r = n.size ? n.has(o.pluginName) : !0, a = i.has(l);\n r && !a && o.close();\n }), d.top() ?? new N();\n }\n static removeAll() {\n d.removeAll(), [...g].forEach((t) => t.destroy());\n }\n static dialog(t, e) {\n const i = new this({\n sizeClass: \"dialog\",\n buttons: [\n {\n label: \"OK\",\n className: \"is-primary is-ghost\",\n method: (n, o) => {\n e?.(n, o), n.defaultPrevented || i.close();\n },\n keyPress: \"Enter\"\n }\n ],\n ...t\n });\n return i.init().show();\n }\n static confirm(t, e) {\n t.title ??= \"Confirm\", t.content ??= \"Are you sure you want to perform this action?\";\n const i = t.okBtn ?? { label: \"OK\", className: \"is-primary is-ghost\" }, n = t.cancelBtn ?? { label: \"Cancel\", className: \"is-danger is-ghost\" };\n return new this({\n sizeClass: \"dialog\",\n ...t,\n buttons: [\n {\n label: n.label,\n className: n.className,\n keyPress: \"n\",\n method: (l, r) => {\n e?.(!1, r, l), r.close();\n }\n },\n {\n label: i.label,\n className: i.className,\n keyPress: \"y\",\n method: (l, r) => {\n e?.(!0, r, l), l.defaultPrevented || r.close();\n }\n }\n ]\n }).init().show();\n }\n static getDefaultNotifyIcon(t) {\n switch (t) {\n case \"success\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-circle-check\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\" })\n ]\n }\n );\n case \"error\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-alert-triangle\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\" })\n ]\n }\n );\n case \"warning\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-alert-circle\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm.01 13l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -8a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\" })\n ]\n }\n );\n case \"info\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-info-circle\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm0 9h-1l-.117 .007a1 1 0 0 0 0 1.986l.117 .007v3l.007 .117a1 1 0 0 0 .876 .876l.117 .007h1l.117 -.007a1 1 0 0 0 .876 -.876l.007 -.117l-.007 -.117a1 1 0 0 0 -.764 -.857l-.112 -.02l-.117 -.006v-3l-.007 -.117a1 1 0 0 0 -.876 -.876l-.117 -.007zm.01 -3l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007z\" })\n ]\n }\n );\n case \"dialog\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n class: \"icon icon-tabler icons-tabler-outline icon-tabler-message-dots\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M12 11v.01\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M8 11v.01\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M16 11v.01\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3z\" })\n ]\n }\n );\n case \"confirm\":\n return /* @__PURE__ */ c(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n class: \"icon icon-tabler icons-tabler-filled icon-tabler-copy-check\",\n children: [\n /* @__PURE__ */ c(\"path\", { stroke: \"none\", d: \"M0 0h24v24H0z\", fill: \"none\" }),\n /* @__PURE__ */ c(\"path\", { d: \"M18.333 6a3.667 3.667 0 0 1 3.667 3.667v8.666a3.667 3.667 0 0 1 -3.667 3.667h-8.666a3.667 3.667 0 0 1 -3.667 -3.667v-8.666a3.667 3.667 0 0 1 3.667 -3.667zm-3.333 -4c1.094 0 1.828 .533 2.374 1.514a1 1 0 1 1 -1.748 .972c-.221 -.398 -.342 -.486 -.626 -.486h-10c-.548 0 -1 .452 -1 1v9.998c0 .32 .154 .618 .407 .805l.1 .065a1 1 0 1 1 -.99 1.738a3 3 0 0 1 -1.517 -2.606v-10c0 -1.652 1.348 -3 3 -3zm1.293 9.293l-3.293 3.292l-1.293 -1.292a1 1 0 0 0 -1.414 1.414l2 2a1 1 0 0 0 1.414 0l4 -4a1 1 0 0 0 -1.414 -1.414\" })\n ]\n }\n );\n default:\n return null;\n }\n }\n static notify(t, e, i) {\n if (e?.overrideOther && [...g].forEach((r) => r.close()), typeof e.title > \"u\") {\n const r = t || \"Notification\";\n e.title = r[0].toUpperCase() + r.slice(1).toLowerCase();\n }\n const n = e.icon ?? this.getDefaultNotifyIcon(t);\n n && (n instanceof Element && n.classList.add(\"ipe-modal-notify-icon\"), e.title = /* @__PURE__ */ c(nt, { children: [\n n,\n e.title\n ] })), t === \"confirm\" && (typeof e.closeAfter > \"u\" && (e.closeAfter = 0), e.okBtn || (e.okBtn = { label: \"OK\" })), e.okBtn && (typeof e.okBtn != \"object\" && (e.okBtn = { label: \"OK\" }), e.okBtn.label ??= \"OK\", e.okBtn.className ??= \"is-primary is-text ok-btn\", e.okBtn.method = (r, a) => {\n i?.(!0, a, r), a.close();\n }), e.cancelBtn && (typeof e.cancelBtn != \"object\" && (e.cancelBtn = { label: \"Cancel\" }), e.cancelBtn.label ??= \"Cancel\", e.cancelBtn.className ??= \"is-danger is-text cancel-btn\", e.cancelBtn.method = (r, a) => {\n i?.(!1, a, r), a.close();\n }), e.buttons = [e.cancelBtn, e.okBtn, ...e.buttons ?? []].filter(\n Boolean\n );\n const o = `is-notify type-${t || \"default\"} ${e.className ?? \"\"}`, l = new this({\n ...e,\n className: o,\n sizeClass: \"auto\",\n center: !1,\n fitScreen: !1,\n closeIcon: !0,\n outSideClose: !1,\n bodyScroll: !0,\n buttons: e.buttons ?? []\n });\n return l.setPluginName(\"toast\"), l.showToast({\n position: e.position ?? \"top right\"\n });\n }\n}\nconst g = [];\nfunction mt(s = \"top right\") {\n const t = \"ipe-modal-toast-container\", e = `${t}-${s.replace(/[\\s-\\.|\\/]+/g, \"-\")}`;\n let i = document.getElementById(e);\n return i || (i = h(\"div\", {\n className: `${t} ${s}`,\n attrs: { id: e, \"data-position\": s }\n }), document.body.appendChild(i)), i;\n}\nexport {\n N as IPEModal,\n P as IPEModalEvent\n};\n//# sourceMappingURL=index.js.map\n","import { InPageEdit } from '@/InPageEdit'\nimport { IPEModal, IPEModalEvent, IPEModalOptions } from '@inpageedit/modal'\nimport '@inpageedit/modal/style.css'\n\nexport * from '@inpageedit/modal'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n modal: ModalService\n }\n}\n\n// Custom plugins\nexport class CustomIPEModal extends IPEModal {\n constructor(options: Partial<IPEModalOptions> = {}) {\n options.className ||= ''\n options.className += ' theme-ipe'\n options.modalAnimation ||= {\n show: 'ipe-modal-fade-in',\n hide: 'ipe-modal-fade-out',\n }\n super(options)\n }\n\n private _tmpDisabledActiveInputs?: NodeListOf<HTMLInputElement | HTMLButtonElement>\n setLoadingState(state: boolean) {\n this.get$window().classList.toggle('loading', state)\n // start loading\n if (state) {\n const activeInputs = this.get$window().querySelectorAll<HTMLInputElement | HTMLButtonElement>(\n 'input:not([disabled]),button:not([disabled])'\n )\n this._tmpDisabledActiveInputs = activeInputs\n activeInputs.forEach((el) => {\n el.disabled = true\n })\n this.get$content().append(\n <div\n id=\"ipe-modalLoadingWrapper\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.5)',\n zIndex: 2000,\n }}\n >\n <ProgressBar style={{ width: '80%', maxWidth: '800px' }} />\n </div>\n )\n } else {\n // stop loading\n this.get$window().querySelector('#ipe-modalLoadingWrapper')?.remove()\n const activeInputs = this._tmpDisabledActiveInputs\n if (activeInputs) {\n activeInputs.forEach((el) => {\n el.disabled = false\n })\n }\n }\n }\n}\n\nexport class ModalService {\n constructor(public ctx: InPageEdit) {\n ctx.set('modal', this)\n ctx.on('dispose', () => {\n CustomIPEModal.closeAll()\n })\n }\n IPEModal = CustomIPEModal\n IPEModalEvent = IPEModalEvent\n show = CustomIPEModal.show.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.show>\n ) => CustomIPEModal\n createObject = CustomIPEModal.createObject.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.createObject>\n ) => CustomIPEModal\n close = CustomIPEModal.close.bind(CustomIPEModal)\n closeAll = CustomIPEModal.closeAll.bind(CustomIPEModal)\n removeAll = CustomIPEModal.removeAll.bind(CustomIPEModal)\n dialog = CustomIPEModal.dialog.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.dialog>\n ) => CustomIPEModal\n confirm = CustomIPEModal.confirm.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.confirm>\n ) => CustomIPEModal\n notify = CustomIPEModal.notify.bind(CustomIPEModal) as (\n ...args: Parameters<typeof CustomIPEModal.notify>\n ) => CustomIPEModal\n}\n","/**\n * Transform a plain object into a URL search params string.\n *\n * @example\n * ```\n * makeURLSearchParams({ str: '123' }) // str=123\n * makeURLSearchParams({ num: 123 }) // num=123\n * makeURLSearchParams({ bool: true }) // bool=true\n * makeURLSearchParams({ arr: [1, 2, 3] }) // arr=1&arr=2&arr=3\n * makeURLSearchParams({ plainObj: { a: 1, b: 2 } }) // plainObj[a]=1&plainObj[b]=2\n * makeURLSearchParams({ obj: <object> }) // obj=<object>.toString() (if object is not a primitive type)\n * makeURLSearchParams({ empty: '' }) // empty=\n * makeURLSearchParams({ null: null, undefined: undefined }) // (ignored)\n * ```\n */\nexport const makeSearchParams = (params?: Record<string, any>): URLSearchParams => {\n if (!params) {\n return new URLSearchParams()\n }\n if (params instanceof URLSearchParams) {\n return params\n }\n if (typeof params !== 'object' || params?.constructor !== Object) {\n throw new TypeError('only plain object is supported')\n }\n\n const sp = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === void 0 || value === null) {\n continue\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n sp.append(key, item?.toString())\n }\n continue\n }\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n for (const [objKey, objValue] of Object.entries(value)) {\n if (objValue !== void 0 && objValue !== null) {\n sp.set(`${key}[${objKey}]`, objValue?.toString())\n }\n }\n continue\n }\n sp.set(key, value?.toString())\n }\n return sp\n}\n\n/**\n * Create a URL object with the given parameters.\n *\n * @example\n * ```\n * makeURL('https://example.com?existing=1', { foo: 'bar' }, 'baz') // https://example.com?existing=1&foo=bar#baz\n */\nexport const makeURL = (url: string | URL, params?: Record<string, any>, hash?: string): URL => {\n const u = typeof url === 'string' ? new URL(url, window?.location?.origin) : new URL(url)\n\n const existingParams = new URLSearchParams(u.search)\n const newParams = makeSearchParams(params)\n for (const [key, value] of newParams.entries()) {\n existingParams.set(key, value)\n }\n\n u.search = existingParams.toString()\n u.hash = hash || ''\n return u\n}\n","import { Inject, InPageEdit, Schema, Service } from '@/InPageEdit'\nimport { WikiSiteInfo, WikiUserBlockInfo, WikiUserInfo } from '@/types/WikiMetadata'\nimport { AbstractIPEStorageManager } from './storage'\nimport { MwApiParams } from 'wiki-saikou'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n wiki: WikiMetadataService\n getUrl: WikiMetadataService['getUrl']\n getSciprtUrl: WikiMetadataService['getSciprtUrl']\n getMainpageUrl: WikiMetadataService['getMainpageUrl']\n }\n interface Events {\n /**\n * Application requires to clear caches and reload the page\n * If returns true, the page will not be reloaded\n */\n 'clear-cache'(): AwaitAble<boolean | void>\n }\n}\n\ninterface WikiMetadataKindMap {\n siteinfo: WikiSiteInfo\n userinfo: WikiUserInfo\n}\n\n@Inject(['api', 'storage'])\nexport class WikiMetadataService extends Service {\n private readonly _data: WikiMetadataKindMap = {} as any\n private readonly CACHE_VERSION = 3\n private readonly CACHE_TTL: Readonly<Record<keyof WikiMetadataKindMap, number>> = {\n siteinfo: 1000 * 60 * 60 * 24 * 3, // 3 days\n userinfo: 1000 * 60 * 30, // 30 minutes\n }\n private readonly QUERY_DATA: Readonly<Record<keyof WikiMetadataKindMap, MwApiParams>> = {\n siteinfo: {\n meta: 'siteinfo',\n siprop: 'general|specialpagealiases|namespacealiases|namespaces|magicwords',\n },\n userinfo: { meta: 'userinfo', uiprop: 'groups|rights|blockinfo|options' },\n }\n private readonly CACHE_DB: AbstractIPEStorageManager<\n WikiMetadataKindMap[keyof WikiMetadataKindMap]\n >\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'wiki', false)\n this.CACHE_DB = ctx.storage.createDatabase<WikiMetadataKindMap[keyof WikiMetadataKindMap]>(\n 'wiki-metadata',\n Infinity,\n this.CACHE_VERSION\n )\n }\n\n private get logger() {\n return this.ctx.logger('WIKI_METADATA')\n }\n\n private get api() {\n return this.ctx.api\n }\n\n readonly mwConfig = {\n get: ((key: string, fallback?: any) => {\n return window?.mw?.config?.get?.(key, fallback) ?? fallback\n }) as typeof mw.config.get,\n has: ((key: string) => {\n return window?.mw?.config?.exists?.(key) ?? false\n }) as typeof mw.config.exists,\n get values() {\n return ((window?.mw?.config as any)?.values || {}) as ReturnType<typeof mw.config.get>\n },\n }\n\n protected async start(): Promise<void> {\n await Promise.all(\n Object.keys(this.QUERY_DATA).map((key) => this.initData(key as keyof WikiMetadataKindMap))\n )\n this.ctx.on('clear-cache', this.onClearCache.bind(this))\n\n this.ctx.set('getUrl', this.getUrl.bind(this))\n this.ctx.set('getSciprtUrl', this.getSciprtUrl.bind(this))\n this.ctx.set('getMainpageUrl', this.getMainpageUrl.bind(this))\n\n this.ctx.inject(['preferences', '$'], (ctx) => {\n const $ = ctx.$\n ctx.preferences.registerCustomConfig(\n 'WikiMetadataService',\n Schema.object({\n WikiMetadataService: Schema.const(\n <div>\n <h3>{$`Wiki Informations`}</h3>\n <ul>\n <li>\n <strong>{$`Site`}:</strong> {this.general.sitename} ({this.landingPageUrl})\n </li>\n <li>\n <strong>{$`User`}</strong>: {this.userInfo.name} (ID: {this.userInfo.id})\n </li>\n <li>\n <strong>{$`Groups`}</strong>: {this.userGroups.join(', ') || 'None'}\n </li>\n </ul>\n <div>\n <p style={{ fontStyle: 'italic' }}>\n {$`If the information shown above is incorrect (for example, the user is not you), click the button below.`}\n </p>\n <button\n className=\"btn danger\"\n onClick={async (e) => {\n e.preventDefault()\n const prevent = await ctx.serial('clear-cache')\n if (!prevent) {\n window.location.reload()\n }\n }}\n >\n 🧹 {$`Clear caches & Reload`}\n </button>\n </div>\n </div>\n ).role('raw-html'),\n }).description('WikiMetadataService'),\n 'about'\n )\n })\n\n this.logger.info('All initialized', this._data)\n }\n\n async initData<T extends keyof WikiMetadataKindMap>(kind: T, noCache = false) {\n const cached = noCache ? null : await this.fetchFromCache(kind)\n if (cached) {\n this._data[kind] = cached\n this.logger.debug('Using cached', kind, cached)\n return cached\n } else {\n const data = await this.fetchFromApi(kind)\n this.saveToCache(kind, data)\n this._data[kind] = data\n this.logger.debug('Fetched from API', kind, data)\n return data\n }\n }\n\n private getCacheKey<T extends keyof WikiMetadataKindMap>(kind: T): string {\n return `${kind}:${new URL(this.ctx.api.config.baseURL).pathname.replace(/^\\//, '')}`\n }\n\n async fetchFromApi<T extends keyof WikiMetadataKindMap>(\n kind: T\n ): Promise<WikiMetadataKindMap[T]> {\n return this.api\n .get({\n action: 'query',\n ...this.QUERY_DATA[kind],\n })\n .then(({ data }) => {\n if (typeof data?.query !== 'object' || data.query === null) {\n throw new Error('Invalid query data', { cause: data })\n }\n if (kind === 'siteinfo') {\n return data.query as WikiMetadataKindMap[T]\n } else {\n return (data.query?.[kind] || data.query) as WikiMetadataKindMap[T]\n }\n })\n .catch((e) => {\n this.logger.error('Failed to fetch', e)\n return Promise.reject(e)\n })\n }\n\n async fetchFromCache<T extends keyof WikiMetadataKindMap>(\n kind: T\n ): Promise<WikiMetadataKindMap[T] | null> {\n const key = this.getCacheKey(kind)\n const data = await this.CACHE_DB.get(key, this.CACHE_TTL[kind])\n return data as WikiMetadataKindMap[T] | null\n }\n async saveToCache<T extends keyof WikiMetadataKindMap>(kind: T, data: WikiMetadataKindMap[T]) {\n const key = this.getCacheKey(kind)\n return this.CACHE_DB.set(key, data)\n }\n async invalidateCache<T extends keyof WikiMetadataKindMap>(kind: T) {\n const key = this.getCacheKey(kind)\n return this.CACHE_DB.delete(key)\n }\n private async onClearCache() {\n await this.CACHE_DB.clear()\n }\n\n // ====== shortcuts ======\n get _raw() {\n return this._data\n }\n\n // siteInfo\n get siteInfo() {\n return this._data.siteinfo\n }\n get general() {\n return this.siteInfo.general\n }\n get specialPageAliases() {\n return this.siteInfo.specialpagealiases\n }\n get namespaceAliases() {\n return this.siteInfo.namespacealiases\n }\n get namespaces() {\n return this.siteInfo.namespaces\n }\n get namespaceMap() {\n const map = Object.values(this.namespaces)\n .map((ns) => ({\n id: ns.id,\n canonical: ns.canonical,\n aliases: this.namespaceAliases\n .filter((alias) => alias.id === ns.id)\n .map((alias) => alias.alias),\n }))\n .sort((a, b) => a.id - b.id)\n Reflect.defineProperty(this, 'namespaceMap', {\n get: () => map,\n })\n return map\n }\n get magicWords() {\n return this.siteInfo.magicwords\n }\n\n // userInfo\n get userInfo() {\n return this._data.userinfo\n }\n get userOptions() {\n return this.userInfo.options\n }\n get isUserBlocked() {\n return (\n this.userInfo.blockedbyid &&\n this.userInfo.blockexpiry &&\n new Date(this.userInfo.blockexpiry).getTime() > Date.now()\n )\n }\n get userGroups() {\n return this.userInfo.groups\n }\n get userRights() {\n return this.userInfo.rights\n }\n /**\n * Base URL, without trailing slash\n * @example \"https://mediawiki.org\"\n */\n get baseUrl() {\n const server = this.general.server\n if (server.startsWith('//')) {\n return `${window?.location?.protocol || 'https:'}//${server.slice(2)}`\n } else {\n return server\n }\n }\n /**\n * Home page URL of this wiki\n * @description Generally same as the Mainpage URL,\n * but after MediaWiki 1.34,\n * it can be set to the website root directory.\n * @example \"https://mediawiki.org/wiki/Main_Page\" (In most cases)\n * @example \"https://mediawiki.org/\" ($wgMainPageIsDomainRoot = true)\n */\n get landingPageUrl() {\n return this.general.base\n }\n get mainPageName() {\n return this.general.mainpage\n }\n /**\n * Exact Mainpage URL of this wiki\n * @example \"https://mediawiki.org/wiki/Main_Page\"\n */\n get mainPageUrl() {\n return this.getUrl(this.mainPageName)\n }\n /**\n * Article path, with the $1 placeholder\n * @example \"/wiki/$1\"\n */\n get articlePath() {\n return this.general.articlepath\n }\n /**\n * Script path, without trailing slash\n * @example \"/w\"\n */\n get scriptPath() {\n return this.general.scriptpath\n }\n /**\n * Article base URL, with the $1 placeholder\n * @example \"https://mediawiki.org/wiki/$1\"\n */\n get articleBaseUrl() {\n return `${this.baseUrl}${this.articlePath}`\n }\n /**\n * Script base URL, without trailing slash\n * @example \"https://mediawiki.org/w\"\n */\n get scriptBaseUrl() {\n return `${this.baseUrl}${this.scriptPath}`\n }\n\n // utils\n getSciprtUrl(name = 'index') {\n return `${this.scriptBaseUrl}/${name.replace(/\\.php$/, '')}.php`\n }\n\n /** Get mainpage URL */\n getMainpageUrl(params?: Record<string, any>): string {\n return makeURL(this.siteInfo.general.base, params).toString()\n }\n /** Get page URL by title */\n getUrl(title: string, params?: Record<string, any>): string\n /** Get page URL by page ID */\n getUrl(pageId: number, params?: Record<string, any>): string\n getUrl(titleOrPageId: string | number, params?: Record<string, any>): string {\n const searchParams = makeSearchParams(params)\n let url: URL\n if (typeof titleOrPageId === 'string' && titleOrPageId !== '') {\n url = new URL(`${this.articleBaseUrl.replace('$1', titleOrPageId)}`)\n } else if (typeof titleOrPageId === 'number') {\n searchParams.set('curid', titleOrPageId.toString())\n url = new URL(this.getSciprtUrl('index'))\n } else {\n url = new URL(this.getSciprtUrl('index'))\n }\n url.search = searchParams.toString()\n return url.toString()\n }\n\n hasRight(right: string) {\n return this.userRights.includes(right)\n }\n hasAnyRight(...rights: string[]) {\n return rights.some((right) => this.hasRight(right))\n }\n hasEveryRights(...rights: string[]) {\n return rights.every((right) => this.hasRight(right))\n }\n inGroup(name: string) {\n return this.userGroups.includes(name)\n }\n inAnyGroup(...names: string[]) {\n return this.userGroups.some((group) => names.includes(group))\n }\n getBlockInfo() {\n if (!this.isUserBlocked) return null\n return {\n blockid: this.userInfo.blockid!,\n blockedby: this.userInfo.blockedbyid!,\n blockedbyid: this.userInfo.blockedbyid!,\n blockreason: this.userInfo.blockreason!,\n blockedtimestamp: this.userInfo.blockedtimestamp!,\n blockexpiry: this.userInfo.blockexpiry!,\n } as WikiUserBlockInfo\n }\n}\n","import { AbstractIPEStorageManager, TypedStorageEntry } from '../index.js'\nimport { MemoryStorage, useMemoryStorage } from '@/models/MemoryStorage.js'\n\nconst _memoryStorage = (() => {\n const sym = Symbol.for('IPE.GlobalMemoryStorage')\n if (!(sym in globalThis)) {\n ;(globalThis as any)[sym] = useMemoryStorage()\n }\n return (globalThis as any)[sym] as MemoryStorage\n})()\n\nexport class LocalStorageManager<T = unknown> implements AbstractIPEStorageManager<T> {\n private db: Storage\n constructor(\n public dbName?: string,\n readonly storeName?: string,\n public ttl: number = Infinity,\n public version?: number | string,\n public engine: 'localStorage' | 'sessionStorage' | 'memory' = 'localStorage'\n ) {\n // Normalize ttl\n if (typeof ttl !== 'number') this.ttl = Number(ttl)\n if (isNaN(this.ttl) || this.ttl <= 0) this.ttl = Infinity\n\n // Initialize storage engine\n if (this.engine === 'localStorage' && 'localStorage' in window) {\n this.db = window.localStorage\n } else if (this.engine === 'sessionStorage' && 'sessionStorage' in window) {\n this.db = window.sessionStorage\n } else {\n this.db = _memoryStorage\n }\n }\n\n // Key builder\n private makeKey(key: string) {\n return `${this.dbName ? this.dbName + ':' : ''}${this.storeName ? this.storeName + '/' : ''}${key}`\n }\n\n // Internal load & validation\n private load(key: string): TypedStorageEntry<T> | null {\n const raw = this.getRaw(key)\n if (raw === null) return null\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch (_) {\n this.deleteSync(key)\n return null\n }\n const rec = parsed as Partial<TypedStorageEntry<T>>\n // Structural checks\n if (typeof rec.time !== 'number' || !('value' in rec)) {\n this.deleteSync(key)\n return null\n }\n // Version check\n if (\n typeof this.version !== 'undefined' &&\n typeof this.version !== 'undefined' &&\n rec.version !== this.version\n ) {\n this.deleteSync(key)\n return null\n }\n return rec as TypedStorageEntry<T>\n }\n\n private getRaw(key: string): string | null {\n const fullKey = this.makeKey(key)\n return this.db.getItem(fullKey)\n }\n\n private setRaw(key: string, value: string) {\n const fullKey = this.makeKey(key)\n try {\n this.db.setItem(fullKey, value)\n } catch (_) {\n // Quota exceeded or write error — silently ignore for now.\n }\n }\n\n private deleteSync(key: string) {\n const fullKey = this.makeKey(key)\n this.db.removeItem(fullKey)\n }\n\n private isExpired(rec: TypedStorageEntry<T> | null, ttl = this.ttl) {\n if (!rec) return false\n return Date.now() - rec.time > ttl\n }\n\n async get(key: string, ttl = this.ttl, setter?: () => Promise<T> | T): Promise<T | null> {\n const rec = this.load(key)\n const expired = this.isExpired(rec, ttl)\n if (!rec || expired) {\n if (typeof setter === 'function') {\n const newValue = await setter()\n await this.set(key, newValue as T)\n return newValue as T\n }\n return null\n }\n return rec.value\n }\n\n // Overloads\n async set(key: string, value: null | undefined): Promise<void>\n async set(key: string, value: T): Promise<TypedStorageEntry<T>>\n async set(\n record: Record<string, T | null | undefined>\n ): Promise<Record<string, TypedStorageEntry<T> | void>>\n async set(\n keyOrRecord: string | Record<string, T | null | undefined>,\n maybeValue?: T | null | undefined\n ): Promise<TypedStorageEntry<T> | void | Record<string, TypedStorageEntry<T> | void>> {\n const now = Date.now()\n\n if (typeof keyOrRecord === 'string') {\n const key = keyOrRecord\n const value = maybeValue as T | null | undefined\n if (value === null || typeof value === 'undefined') {\n await this.delete(key)\n return\n }\n const rec: TypedStorageEntry<T> = { time: now, value, version: this.version }\n this.setRaw(key, JSON.stringify(rec))\n return rec\n }\n\n const recordObj = keyOrRecord as Record<string, T | null | undefined>\n const results: Record<string, TypedStorageEntry<T> | void> = {}\n for (const [k, v] of Object.entries(recordObj)) {\n if (v === null || typeof v === 'undefined') {\n this.deleteSync(k)\n continue\n }\n const rec: TypedStorageEntry<T> = { time: now, value: v as T, version: this.version }\n this.setRaw(k, JSON.stringify(rec))\n results[k] = rec\n }\n return results\n }\n\n async has(key: string, ttl = this.ttl): Promise<boolean> {\n const rec = this.load(key)\n return rec !== null && !this.isExpired(rec, ttl)\n }\n\n async delete(key: string): Promise<void> {\n this.deleteSync(key)\n }\n\n async updatedAt(key: string): Promise<number> {\n const rec = this.load(key)\n return rec ? rec.time : 0\n }\n\n async clear(): Promise<this> {\n // Remove only keys with our prefix+storeName\n const prefix = this.makeKey('')\n // Collect first to avoid index shifting issues\n const toRemove: string[] = []\n for (let i = 0; i < this.db.length; i++) {\n const k = this.db.key(i)\n if (k && k.startsWith(prefix)) toRemove.push(k)\n }\n for (const k of toRemove) this.db.removeItem(k)\n return this\n }\n\n // Async generators\n async *keys(): AsyncIterable<string> {\n const prefix = this.makeKey('')\n for (let i = 0; i < this.db.length; i++) {\n const k = this.db.key(i)\n if (k && k.startsWith(prefix)) yield k.slice(prefix.length)\n }\n }\n\n async *values(): AsyncIterable<TypedStorageEntry<T>> {\n for await (const k of this.keys()) {\n const rec = this.load(k)\n if (!rec) continue\n if (this.isExpired(rec)) {\n this.deleteSync(k)\n continue\n }\n yield rec\n }\n }\n\n async *entries(): AsyncIterable<[string, TypedStorageEntry<T>]> {\n for await (const k of this.keys()) {\n const rec = this.load(k)\n if (!rec) continue\n if (this.isExpired(rec)) {\n this.deleteSync(k)\n continue\n }\n yield [k, rec]\n }\n }\n}\n","var s;\n((i) => {\n i.cache = /* @__PURE__ */ new Map(), i.defaults = Object.freeze({ iterBatch: 100, retry: { attempts: 3, baseDelayMs: 16 } }), i.sleep = (e) => new Promise((n) => setTimeout(n, e));\n function t(e) {\n const n = e?.name ?? \"\";\n return n === \"AbortError\" || n === \"InvalidStateError\" || n === \"TransactionInactiveError\" || n === \"UnknownError\";\n }\n i.shouldReconnect = t;\n async function a(e, n, r) {\n const w = Math.max(1, e.attempts);\n for (let y = 0; y < w; y++)\n try {\n return await n(y);\n } catch (d) {\n if (y === w - 1) throw d;\n await r?.(d, y);\n const u = e.baseDelayMs * Math.pow(2, y) + Math.floor(Math.random() * 10);\n await (0, i.sleep)(u);\n }\n throw new Error(\"withRetry exhausted unexpectedly\");\n }\n i.withRetry = a;\n function o(e, n, r) {\n return new Promise((w, y) => {\n const d = indexedDB.open(e, n);\n d.onupgradeneeded = () => {\n try {\n const u = d.result, l = d.transaction;\n r?.(u, l);\n } catch (u) {\n y(u);\n }\n }, d.onerror = () => y(d.error), d.onblocked = () => {\n }, d.onsuccess = () => {\n const u = d.result;\n u.onversionchange = () => {\n try {\n u.close();\n } finally {\n i.cache.delete(e);\n }\n }, w(u);\n };\n });\n }\n async function h(e, n, r) {\n let w = !e.objectStoreNames.contains(n), y = [];\n if (!w && r?.indexes?.length) {\n const l = e.transaction(n, \"readonly\"), p = l.objectStore(n), g = new Set(Array.from(p.indexNames));\n y = (r.indexes || []).filter((m) => !g.has(m.name)), await new Promise((m, R) => {\n l.oncomplete = () => m(), l.onabort = () => R(l.error), l.onerror = () => R(l.error);\n });\n }\n if (!w && y.length === 0) return e;\n const d = e.version + 1;\n e.close();\n const u = await o(e.name, d, (l, p) => {\n let g;\n l.objectStoreNames.contains(n) ? g = p.objectStore(n) : g = l.createObjectStore(n, {\n keyPath: r?.keyPath ?? void 0,\n autoIncrement: !!r?.autoIncrement\n });\n for (const m of y)\n g.indexNames.contains(m.name) || g.createIndex(m.name, m.keyPath, m.options);\n });\n return u.onversionchange = () => {\n try {\n u.close();\n } finally {\n i.cache.delete(u.name);\n }\n }, u;\n }\n async function c(e, n, r) {\n let w = i.cache.get(e);\n return w ? (w = w.then((y) => h(y, n, r)), i.cache.set(e, w)) : (w = (async () => {\n const y = await o(e);\n return h(y, n, r);\n })(), i.cache.set(e, w)), w;\n }\n i.getDB = c;\n async function f(e) {\n const n = i.cache.get(e);\n if (i.cache.delete(e), n)\n try {\n (await n).close();\n } catch {\n }\n }\n i.closeConnection = f;\n function v(e) {\n return new Promise((n, r) => {\n e.onsuccess = () => n(e.result), e.onerror = () => r(e.error);\n });\n }\n i.asyncRequest = v;\n function S(e) {\n return new Promise((n, r) => {\n e.oncomplete = () => n(), e.onabort = () => r(e.error ?? new DOMException(\"Aborted\", \"AbortError\")), e.onerror = () => r(e.error ?? new DOMException(\"TransactionError\", \"UnknownError\"));\n });\n }\n i.waitTx = S;\n})(s || (s = {}));\n/**\n * IDB Plus\n *\n * 🗄️ Minimal Promise based IndexedDB Wrapper with Map-like API\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n */\nclass x {\n constructor(t, a, o = {}) {\n this.dbName = t, this.storeName = a, this.options = o;\n }\n get _iterBatch() {\n return this.options.iterBatch ?? s.defaults.iterBatch;\n }\n get _retryCfg() {\n const t = this.options.retry ?? s.defaults.retry;\n return { attempts: t.attempts ?? 3, baseDelayMs: t.baseDelayMs ?? 16 };\n }\n async _withStore(t, a) {\n const o = this._retryCfg;\n return s.withRetry(\n o,\n async () => {\n const h = await s.getDB(this.dbName, this.storeName, this.options.ensure);\n try {\n const c = h.transaction(this.storeName, t), f = c.objectStore(this.storeName), v = await a(f);\n return await s.waitTx(c), v;\n } catch (c) {\n throw c;\n }\n },\n async (h) => {\n s.shouldReconnect(h) && await s.closeConnection(this.dbName);\n }\n );\n }\n async get(t) {\n return this._withStore(\"readonly\", async (a) => {\n const o = await s.asyncRequest(a.get(t));\n return o === void 0 ? void 0 : o;\n });\n }\n async set(t, a) {\n return await this._withStore(\"readwrite\", async (o) => {\n const c = this.options.ensure?.keyPath != null ? o.put(a) : o.put(a, t);\n await s.asyncRequest(c);\n }), this;\n }\n async delete(t) {\n return this._withStore(\"readwrite\", async (a) => {\n const o = await s.asyncRequest(a.get(t)) !== void 0;\n return await s.asyncRequest(a.delete(t)), o;\n });\n }\n async clear() {\n await this._withStore(\"readwrite\", async (t) => {\n await s.asyncRequest(t.clear());\n });\n }\n async has(t) {\n return await this.get(t) !== void 0;\n }\n async count() {\n return this._withStore(\"readonly\", async (t) => await s.asyncRequest(t.count()) ?? 0);\n }\n async *_iterateEntries() {\n let t = null, a = !1;\n const o = Math.max(1, this._iterBatch);\n for (; !a; ) {\n const h = await this._withStore(\"readonly\", async (c) => {\n const f = [], v = t === null ? void 0 : IDBKeyRange.lowerBound(t, !0);\n return await new Promise((S, e) => {\n const n = c.openCursor(v);\n n.onerror = () => e(n.error), n.onsuccess = () => {\n const r = n.result;\n if (!r) {\n a = !0, S();\n return;\n }\n f.push([r.key, r.value]), t = r.key, f.length >= o ? S() : r.continue();\n };\n }), f;\n });\n for (const c of h) yield c;\n if (h.length === 0) break;\n }\n }\n entries() {\n return this._iterateEntries();\n }\n async *keys() {\n for await (const [t] of this.entries()) yield t;\n }\n async *values() {\n for await (const [, t] of this.entries()) yield t;\n }\n [Symbol.asyncIterator]() {\n return this.entries()[Symbol.asyncIterator]();\n }\n async forEach(t) {\n for await (const [a, o] of this.entries())\n await t(o, a, this);\n }\n async getMany(t) {\n const a = /* @__PURE__ */ new Map();\n for await (const o of t) a.set(o, void 0);\n return await this._withStore(\"readonly\", async (o) => {\n await Promise.all(\n a.keys().map(async (h) => {\n const c = await s.asyncRequest(o.get(h));\n a.set(h, c === void 0 ? void 0 : c);\n })\n );\n }), a;\n }\n async setMany(t) {\n const a = this.options.ensure?.keyPath != null;\n return await this._withStore(\"readwrite\", async (o) => {\n for await (const [h, c] of t) {\n const f = a ? o.put(c) : o.put(c, h);\n await s.asyncRequest(f);\n }\n }), this;\n }\n async deleteMany(t) {\n let a = 0;\n return await this._withStore(\"readwrite\", async (o) => {\n for await (const h of t)\n await s.asyncRequest(o.get(h)) !== void 0 && a++, await s.asyncRequest(o.delete(h));\n }), a;\n }\n async disconnect() {\n await s.closeConnection(this.dbName);\n }\n}\nexport {\n x as IDBPlus,\n s as IDBPlusHelper\n};\n//# sourceMappingURL=index.js.map\n","import { IDBPlus } from 'idb-plus'\nimport { AbstractIPEStorageManager, TypedStorageEntry } from '../index.js'\n\nexport class IDBStorageManager<T = unknown> implements AbstractIPEStorageManager<T> {\n readonly db: IDBPlus<string, TypedStorageEntry<T>>\n keys: () => AsyncIterable<string>\n values: () => AsyncIterable<TypedStorageEntry<T>>\n entries: () => AsyncIterable<[string, TypedStorageEntry<T>]>\n\n constructor(\n readonly dbName: string,\n readonly storeName: string,\n public ttl: number = Infinity,\n public version?: number | string\n ) {\n this.db = new IDBPlus<string, TypedStorageEntry<T>>(dbName, storeName)\n this.keys = this.db.keys.bind(this.db)\n this.values = this.db.values.bind(this.db)\n this.entries = this.db.entries.bind(this.db)\n if (typeof this.ttl !== 'number') {\n this.ttl = Number(this.ttl)\n }\n if (isNaN(this.ttl) || this.ttl <= 0) {\n this.ttl = Infinity\n }\n this._clearExpiredEntries().catch(() => {})\n }\n\n private async _clearExpiredEntries() {\n if (this.ttl === Infinity) return\n const now = Date.now()\n const toDelete: string[] = []\n for await (const [key, entry] of this.db.entries()) {\n if (typeof entry.time === 'number' && now - entry.time > this.ttl) {\n toDelete.push(key)\n }\n }\n if (toDelete.length > 0) {\n await this.db.deleteMany(toDelete)\n }\n }\n\n async get(key: string, ttl = this.ttl, setter?: () => Promise<T> | T): Promise<T | null> {\n const data = await this.loadFromDB(key)\n const isExpired = this.checkIfExpired(data, ttl)\n if (!data || isExpired) {\n if (typeof setter === 'function') {\n const newData = await setter()\n await this.set(key, newData as T)\n return newData as T\n }\n return null\n }\n return data.value\n }\n\n set(key: string, value: null | undefined): Promise<void>\n set(key: string, value: T): Promise<TypedStorageEntry<T>>\n set(\n record: Record<string, T | null | undefined>\n ): Promise<Record<string, TypedStorageEntry<T> | void>>\n async set(\n keyOrRecord: string | Record<string, T | null | undefined>,\n maybeValue?: T | null | undefined\n ): Promise<TypedStorageEntry<T> | void | Record<string, TypedStorageEntry<T> | void>> {\n const now = Date.now()\n\n // Overload 1: set(key, value)\n if (typeof keyOrRecord === 'string') {\n const key = keyOrRecord\n const value = maybeValue as T | null | undefined\n if (value === null || typeof value === 'undefined') {\n return this.delete(key)\n }\n const record: TypedStorageEntry<T> = {\n time: now,\n value,\n version: this.version,\n }\n await this.db.set(key, record)\n return record\n }\n\n // Overload 2: set(record)\n const recordObject = keyOrRecord as Record<string, T | null | undefined>\n const toSet: Array<[string, TypedStorageEntry<T>]> = []\n const toDelete: Array<string> = []\n const results: Record<string, TypedStorageEntry<T> | void> = {}\n\n for (const [key, value] of Object.entries(recordObject)) {\n if (value === null || typeof value === 'undefined') {\n toDelete.push(key)\n } else {\n const rec: TypedStorageEntry<T> = { time: now, value: value as T, version: this.version }\n toSet.push([key, rec])\n results[key] = rec\n }\n }\n\n if (toSet.length > 0) {\n await this.db.setMany(toSet)\n }\n if (toDelete.length > 0) {\n await this.db.deleteMany(toDelete)\n }\n return results\n }\n\n async has(key: string, ttl = this.ttl): Promise<boolean> {\n const data = await this.loadFromDB(key)\n const isExpired = this.checkIfExpired(data, ttl)\n return data !== null && !isExpired\n }\n\n async delete(key: string): Promise<void> {\n await this.db.delete(key)\n }\n\n async updatedAt(key: string): Promise<number> {\n const data = await this.loadFromDB(key)\n return data ? data.time : 0\n }\n\n private async loadFromDB(key: string) {\n const data = await this.db.get(key)\n // Not exist\n if (data === void 0) {\n return null\n }\n // Bad data\n if (typeof data.time !== 'number' || typeof data.value === 'undefined') {\n try {\n await this.delete(key)\n } catch (_) {}\n return null\n }\n // Version mismatch\n if (\n typeof this.version !== 'undefined' &&\n typeof this.version !== 'undefined' &&\n data.version !== this.version\n ) {\n try {\n await this.delete(key)\n } catch (_) {}\n return null\n }\n return data\n }\n\n private checkIfExpired(data: TypedStorageEntry<T> | null, ttl = this.ttl) {\n if (!data) return false\n return Date.now() - data.time > ttl\n }\n\n /**\n * [DANGER] Use with caution!\n * Delete all data from the database.\n */\n async clear() {\n await this.db.clear()\n return this\n }\n}\n","import { InPageEdit, Service } from '@/InPageEdit.js'\nimport { LocalStorageManager } from './managers/LocalStorageManager.js'\nimport { IDBStorageManager } from './managers/IDBStorageManager.js'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n storage: StorageService\n }\n}\n\nexport interface StorageServiceConfig {\n dbName: string\n}\n\nexport class StorageService extends Service<StorageServiceConfig> {\n readonly kv: IDBStorageManager<any>\n readonly simpleKV: LocalStorageManager<any>\n readonly memoryKV: LocalStorageManager<any>\n constructor(\n ctx: InPageEdit,\n public config: StorageServiceConfig\n ) {\n super(ctx, 'storage', false)\n this.kv = this.createDatabase<any>('key-val', 0, 1, 'indexedDB') as IDBStorageManager<any>\n this.simpleKV = this.createDatabase<any>('~', 0, 1, 'localStorage') as LocalStorageManager<any>\n this.memoryKV = this.createDatabase<any>('~', 0, 1, 'memory') as LocalStorageManager<any>\n }\n\n createDatabase<T = any>(\n storeName: string,\n ttl?: number,\n version?: number | string,\n engine: 'indexedDB' | 'localStorage' | 'sessionStorage' | 'memory' = 'indexedDB'\n ): AbstractIPEStorageManager<T> {\n const canUseIDB = 'indexedDB' in window && window.indexedDB !== null\n if (engine === 'indexedDB' && !canUseIDB) {\n engine = 'localStorage'\n }\n switch (engine) {\n case 'indexedDB':\n return new IDBStorageManager<T>(this.config.dbName, storeName, ttl, version)\n case 'localStorage':\n case 'sessionStorage':\n case 'memory':\n return new LocalStorageManager<T>(this.config.dbName, storeName, ttl, version, engine)\n default:\n throw new Error(`Unsupported storage engine: ${engine}`)\n }\n }\n}\n\nexport interface TypedStorageEntry<T = any> {\n /** last update time */\n time: number\n /** stored value */\n value: T\n /** version */\n version?: number | string\n}\n\nexport interface AbstractIPEStorageManager<T = unknown> {\n get(key: string, ttl?: number, setter?: () => Promise<any> | any): Promise<T | null>\n set(key: string, value: null | undefined): Promise<void>\n set(\n record: Record<string, T | null | undefined>\n ): Promise<Record<string, TypedStorageEntry<T> | void>>\n set(key: string, value: T): Promise<TypedStorageEntry<T>>\n has(key: string, ttl?: number): Promise<boolean>\n delete(key: string): Promise<void>\n keys(): AsyncIterable<string>\n values(): AsyncIterable<TypedStorageEntry<T>>\n entries(): AsyncIterable<[string, TypedStorageEntry<T>]>\n updatedAt(key: string): Promise<number>\n clear(): Promise<this>\n}\n","import { Inject, InPageEdit, Service } from '@/InPageEdit'\nimport { createWikiPageModel, IWikiPage, WikiPageConstructor } from '@/models/WikiPage'\nimport { PageInfo } from '@/models/WikiPage/types/PageInfo'\nimport { IWikiTitle } from '@/models/WikiTitle/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n wikiPage: WikiPageService\n }\n}\n\nexport class WikiPageService extends Service {\n static readonly inject: Inject = ['api']\n WikiPage: WikiPageConstructor\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'wikiPage', true)\n this.WikiPage = createWikiPageModel(this.ctx.api)\n }\n\n async createInstance(payload: Record<string, any>, noCache = false) {\n const page = await this.WikiPage.newFromApi(payload)\n return page\n }\n async newFromTitle(\n title: string | IWikiTitle,\n converttitles = false,\n rvsection?: number | string,\n noCache = false\n ) {\n return this.createInstance({ titles: title.toString(), converttitles, rvsection }, noCache)\n }\n async newFromPageId(pageid: number, rvsection?: number | string, noCache = false) {\n return this.createInstance({ pageids: pageid, rvsection }, noCache)\n }\n async newFromRevision(revid: number, rvsection?: number | string, noCache = false) {\n return await this.createInstance({ revids: revid, rvsection }, noCache)\n }\n newBlankPage(init: Partial<PageInfo> = {}) {\n return this.WikiPage.newBlankPage(init)\n }\n}\n\n// TODO: Currently not used\nclass WikiPageCache {\n private _cachedPages = new Map<string, IWikiPage>()\n getCacheByPayload(payload: Record<string, any>) {\n const title = payload.titles || ''\n const pageId = payload.pageids ? String(payload.pageids) : ''\n const revId = payload.revids ? String(payload.revids) : ''\n const section = payload.rvsection ? String(payload.rvsection) : 'full'\n let cacheKey = ''\n\n if (revId) {\n cacheKey = `rev:${revId}#${section}`\n } else if (pageId) {\n cacheKey = `pageid:${pageId}#section:${section}`\n } else if (title) {\n cacheKey = `title:${title}#section:${section}`\n }\n return this._cachedPages.get(cacheKey) || null\n }\n setCacheByPage(page: IWikiPage, section?: number | string) {\n const title = page.title || ''\n const pageId = page.pageid ? String(page.pageid) : ''\n const revId = page.revisions?.[0]?.revid ? String(page.revisions[0].revid) : ''\n const sectionStr = section !== void 0 ? String(section) : 'full'\n if (!pageId) {\n return page\n }\n const keys = [\n `rev:${revId}#section:${sectionStr}`,\n `pageid:${pageId}#section:${sectionStr}`,\n `title:${title}#section:${sectionStr}`,\n ]\n keys.forEach((cacheKey) => {\n this._cachedPages.set(cacheKey, page)\n })\n return page\n }\n removeCacheByPage(page: IWikiPage) {\n this._cachedPages.entries().forEach(([key, cachedPage]) => {\n if (cachedPage.pageid === page.pageid) {\n this._cachedPages.delete(key)\n }\n })\n return this\n }\n}\n","import { Inject, InPageEdit, Service } from '@/InPageEdit'\nimport { IWikiPage } from '@/models/WikiPage/index.js'\nimport { createWikiTitleModel, IWikiTitle, WikiTitleConstructor } from '@/models/WikiTitle/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n wikiTitle: WikiTitleService\n }\n}\n\nexport interface WikiLinkMetadata {\n title?: IWikiTitle\n pageId?: number\n revId?: number\n url: URL\n params: URLSearchParams\n hash: string\n action: 'view' | 'edit' | 'create' | 'diff' | string\n}\n\nexport class WikiTitleService extends Service {\n static readonly inject: Inject = ['wiki', 'wikiPage']\n\n readonly Title: WikiTitleConstructor\n constructor(public ctx: InPageEdit) {\n super(ctx, 'wikiTitle', true)\n this.Title = createWikiTitleModel(this.ctx.wiki.siteInfo)\n }\n private readonly logger = this.ctx.logger('WikiTitleService')\n\n newTitle(title: string, namespace?: number) {\n return new this.Title(title, namespace)\n }\n newMainPageTitle() {\n return this.newTitle(this.ctx.wiki.mainPageName)\n }\n async newTitleFromUrl(url: string | URL) {\n const linkInfo = this.parseWikiLink(url)\n if (linkInfo?.title) {\n return linkInfo.title\n } else if (linkInfo?.pageId) {\n return this.newTitleFromPageId(linkInfo.pageId)\n } else {\n return null\n }\n }\n private _cachedTitles = new Map<string, Promise<IWikiTitle | null>>()\n private async newTitleFromAnyId(\n payload: { title?: string; pageId?: number; revId?: number },\n noCache = false\n ) {\n const { title, pageId, revId } = payload ?? {}\n if (typeof title === 'string') {\n return this.newTitle(title)\n }\n let id: number | undefined = undefined\n let kind: 'pageid' | 'revid' | undefined = undefined\n if (revId) {\n id = parseInt(revId.toString(), 10)\n kind = 'revid'\n } else if (pageId) {\n id = parseInt(pageId.toString(), 10)\n kind = 'pageid'\n }\n if (!id || !kind || isNaN(id) || id <= 0) {\n throw new Error('Invalid id or kind', { cause: payload })\n }\n\n if (!noCache && this._cachedTitles.has(`${kind}:${id}`)) {\n return await this._cachedTitles.get(`${kind}:${id}`)!\n }\n const { promise, resolve, reject } = promiseWithResolvers<IWikiTitle | null>()\n this._cachedTitles.set(`${kind}:${id}`, promise)\n try {\n const { wikiPage } = this.ctx\n let page: IWikiPage | null = null\n if (kind === 'pageid') {\n page = await wikiPage.newFromPageId(id)\n } else if (kind === 'revid') {\n page = await wikiPage.newFromRevision(id)\n } else {\n throw new Error(`Invalid kind: ${kind}`)\n }\n resolve(this.newTitle(page.title))\n } catch (e) {\n this._cachedTitles.delete(`${kind}:${id}`)\n reject(e)\n }\n return promise\n }\n async newTitleFromPageId(pageId: number) {\n return this.newTitleFromAnyId({ pageId: pageId })\n }\n async newTitleFromRevision(revId: number) {\n return this.newTitleFromAnyId({ revId: revId })\n }\n\n /**\n * Resolve **special** special pages to it's real target\n *\n * If target is self or cannot be resolved, return null\n * @example\n * ```\n * Special:MyPage -> User:<username>\n * Special:Edit/Page_Title -> Page_Title\n * Special:NewSection/Page_Title -> Page_Title (section=new)\n * ```\n */\n resolveSpecialPageTarget(input: IWikiTitle | string): {\n title: IWikiTitle\n action?: string | undefined\n section?: number | 'new' | undefined\n } | null {\n const title = typeof input === 'string' ? this.newTitle(input) : input\n if (!title) {\n return null\n }\n if (title.getNamespaceId() !== -1) {\n return null\n }\n let titleText: string | undefined\n let section: number | 'new' | undefined = undefined\n let action = 'view'\n const sub = title.getMainDBKey().split('/').slice(1).join('/') || ''\n if (title.isSpecial('edit') && sub) {\n titleText = sub\n action = 'edit'\n } else if (title.isSpecial('talkpage') && sub) {\n const talkPage = title.newTitle(sub).getTalkPage()\n if (!talkPage) {\n return null\n }\n titleText = talkPage.getPrefixedDBKey()\n } else if (title.isSpecial('mypage')) {\n const userPage = title.newTitle(this.ctx.wiki.userInfo.name, 2)\n titleText = userPage.getPrefixedDBKey() + (sub ? `/${sub}` : '')\n } else if (title.isSpecial('mytalk')) {\n const userTalkPage = title.newTitle(this.ctx.wiki.userInfo.name, 3)\n titleText = userTalkPage.getPrefixedDBKey() + (sub ? `/${sub}` : '')\n } else if (title.isSpecial('newsection') && sub) {\n titleText = sub\n section = 'new'\n action = 'edit'\n } else {\n return null\n }\n\n return {\n title: new this.Title(titleText),\n section,\n action,\n }\n }\n\n // shortcuts\n private readonly wiki = this.ctx.wiki\n /**\n * @example \"https://example.com\"\n */\n private readonly wikiBaseUrl = this.wiki.baseUrl\n /**\n * Article path, with trailing slash\n * @example \"/wiki/\" (if wgArticlePath is \"/wiki/$1\")\n */\n private readonly wikiArticlePath = this.wiki.articlePath.replace('$1', '')\n /**\n * Article base URL, with trailing slash\n * @example \"https://example.com/wiki/\" (if wgArticlePath is \"/wiki/$1\")\n */\n private readonly wikiArticleBaseUrl = this.wiki.articleBaseUrl.replace('$1', '')\n /**\n * Script base URL, **without** trailing slash\n * @example \"https://example.com/w\" (if wgScriptPath is \"/w\")\n */\n private readonly wikiIndexPhpUrl = this.wiki.getSciprtUrl('index.php')\n\n isWikiLink(url: string): boolean {\n return (\n url.startsWith(this.wikiArticleBaseUrl) ||\n url.startsWith(this.wikiIndexPhpUrl) ||\n // Some servers allow index.php to be omitted\n url.startsWith(`${this.wikiBaseUrl}/?`) ||\n // It's the landing page\n url === this.ctx.wiki.landingPageUrl\n )\n }\n\n static readonly REG_SKIPPED_HREF = /^(#|javascript:|vbscript:|file:)/i\n validateHrefAttr(href: string | null): boolean {\n if (typeof href !== 'string') {\n return false\n }\n return !WikiTitleService.REG_SKIPPED_HREF.test(href)\n }\n\n parseWikiLink(link: string | URL): WikiLinkMetadata | null {\n if (!link) {\n return null\n }\n\n if (typeof link === 'string' && !this.validateHrefAttr(link)) {\n return null\n }\n\n const url = makeURL(link)\n if (!this.isWikiLink(url.toString())) {\n return null\n }\n const params = url.searchParams\n const hash = url.hash.replace('#', '')\n const action = params.get('action') || 'view'\n const titleParam = params.get('title') || ''\n const curid = parseInt(params.get('curid') || '0', 10)\n const oldid = parseInt(params.get('oldid') || '0', 10)\n let titleText =\n titleParam ||\n (() => {\n try {\n return decodeURIComponent(url.pathname.substring(this.wikiArticlePath.length))\n } catch (e) {\n this.logger.error('parseLink', url, e)\n return ''\n }\n })()\n if (titleText.endsWith('index.php')) {\n titleText = ''\n }\n\n let title: IWikiTitle | undefined = undefined\n let pageId: number | undefined = undefined\n let revId: number | undefined = undefined\n // 此处的优先级遵循 MediaWiki 对 url 参数处理的优先级\n if (oldid) {\n revId = oldid\n } else if (curid) {\n pageId = curid\n } else if (titleText) {\n title = this.newTitle(titleText)\n } else {\n // 无任何有效参数\n if (url.origin + url.pathname === this.ctx.wiki.landingPageUrl) {\n // 但 url 是 landingPageUrl,则认为是主页\n title = this.newMainPageTitle()\n } else {\n return null\n }\n }\n\n return {\n title,\n pageId,\n revId,\n url,\n params,\n hash,\n action,\n }\n }\n}\n","import { Inject, InPageEdit, Schema, Service, type PreferencesMap } from '@/InPageEdit.js'\nimport { AbstractIPEStorageManager } from '@/services/storage/index.js'\nimport { computeFallback, ComputeAble } from '@/utils/computeable.js'\nimport { IDBStorageManager } from './storage/managers/IDBStorageManager'\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n preferences: PreferencesService\n // Alias\n prefs: PreferencesService\n }\n export interface Events {\n 'preferences/changed'(payload: {\n ctx: InPageEdit\n /** original input */\n input: Record<string, unknown>\n /** changed settings */\n changes: Record<string, unknown>\n }): void\n }\n}\n\nexport interface InPageEditPreferenceUICategory {\n name: string\n label: string\n description?: string\n index?: number\n /**\n * 自定义渲染函数\n * @param ctx - InPageEdit 上下文\n * @param onUnmount - 卸载回调,当偏好设置 UI 被卸载时会被调用\n */\n customRenderer?: (payload: {\n ctx: InPageEdit\n onMounted: (callback: (container: HTMLElement) => void) => void\n onUnmount: (callback: () => void) => void\n }) => Promise<Node> | Node\n /**\n * 是否自动生成该分类下的表单\n * @default true\n */\n autoGenerateForm?: boolean\n}\n\nexport interface InPageEditPreferenceUIRegistryItem {\n name: string\n schema: Schema\n category: string\n}\n\n@Inject(['storage', 'wiki'])\nexport class PreferencesService extends Service {\n private db: AbstractIPEStorageManager<any>\n public customRegistries: InPageEditPreferenceUIRegistryItem[] = []\n public categoryDefinitions: InPageEditPreferenceUICategory[] = []\n private _defaultPreferences: Record<string, any> = {}\n\n constructor(public ctx: InPageEdit) {\n super(ctx, 'preferences', true)\n ctx.set('prefs', this)\n this.db = ctx.storage.createDatabase<any>(`preferences:${ctx.wiki.userInfo.id}`, Infinity)\n try {\n this._migrageFromLegacyMasterDB()\n } catch (e) {}\n }\n\n get logger() {\n return this.ctx.logger('PREFERENCES')\n }\n\n async start() {}\n\n // 重载魔术:一些类型体操……\n /**\n * 获取配置项的值\n * @param key 配置项的键名\n * @param fallback 当配置项不存在时的回退值\n * @returns\n * - 未提供 key 时,返回所有配置项的键值对\n * - 提供 key 时,返回对应配置项的值,若不存在则返回回退值或 null\n * @tips 你可以通过重载 PreferencesMap 来定义你的配置项类型,以自动获得类型推导\n */\n get(): Promise<PreferencesMap>\n get<K extends keyof PreferencesMap>(\n key: K,\n fallback?: ComputeAble<PreferencesMap[K]>\n ): Promise<PreferencesMap[K] | null>\n get<U = unknown>(key: string, fallback?: ComputeAble<U>): Promise<U | null>\n async get(key?: string, fallback?: ComputeAble<unknown>): Promise<unknown | null> {\n if (!key) {\n return this.getAll()\n }\n fallback ??= () => {\n const defaultValue = this.defaultOf(key as keyof PreferencesMap)\n this.logger.debug(key, `(fallback value: ${defaultValue})`)\n return defaultValue as unknown\n }\n const value = await this.db.get(key, undefined)\n return value !== null ? value : await computeFallback(fallback)\n }\n /**\n * 获取全部注册的配置项以及最终生效的值\n * 未保存的配置项将使用默认值\n */\n async getAll() {\n const data = this.loadDefaultConfigs()\n for await (const [key, record] of this.db.entries()) {\n // 旧版本埋的坑\n if (key === '_touched') continue\n if (key in data) {\n ;(data as any)[key] = record.value\n }\n }\n return data\n }\n\n set<K extends keyof PreferencesMap>(\n key: K,\n value: PreferencesMap[K] | undefined | null\n ): Promise<PreferencesMap[K] | void>\n set<U = unknown>(key: string, value: U | undefined | null): Promise<U | void>\n async set(key: string, value: unknown): Promise<unknown | void> {\n const result = await this.setMany({ [key]: value } as any)\n return (result as any)[key]\n }\n\n setMany(input: {\n [K in keyof PreferencesMap]?: PreferencesMap[K] | undefined | null\n }): Promise<{\n [K in keyof PreferencesMap]?: PreferencesMap[K] | undefined | null\n }>\n setMany<U = unknown>(\n input: Record<string, U | undefined | null>\n ): Promise<Record<string, U | undefined | null>>\n async setMany(input: Record<string, unknown>) {\n const defaults = this.loadDefaultConfigs()\n const changes: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(input)) {\n if (value === (defaults as any)[key] || value === void 0) {\n changes[key] = void 0\n } else {\n changes[key] = value\n }\n }\n await this.db.set(changes)\n this.ctx.emit('preferences/changed', { ctx: this.ctx, input, changes })\n return changes\n }\n\n defaultOf<T extends keyof PreferencesMap>(key: T): PreferencesMap[T] | undefined\n defaultOf<U = unknown>(key: string): U | undefined\n defaultOf(key: string) {\n return (this._defaultPreferences[key] ??=\n this.loadDefaultConfigs()[key as keyof PreferencesMap])\n }\n\n /**\n * Get exportable configurations\n * - exclude values that are the same as the default value\n * - exclude invalid or undefined values\n * - sort by keys\n */\n async getExportableRecord(configs?: Record<string, unknown>) {\n configs ??= (await this.getAll()) as any\n const defaults = this.loadDefaultConfigs()\n\n const out: Record<string, any> = {}\n Object.entries(defaults)\n .sort(([a], [b]) => a.localeCompare(b))\n .forEach(([key, value]) => {\n const pref = configs![key]\n if (pref !== void 0 && pref !== value) {\n out[key] = pref\n }\n })\n return out\n }\n\n private loadDefaultConfigs() {\n const data = {} as any\n this.getConfigRegistries().forEach((item) => {\n // 首先读取 schema 上的默认值\n try {\n const defaultValues = item.schema({}) as any\n Object.entries(defaultValues).forEach(([key, val]) => {\n data[key] = val\n })\n } catch {}\n })\n\n Object.entries(data).forEach(([key, val]) => {\n this._defaultPreferences[key] = val\n })\n\n return data as PreferencesMap\n }\n\n registerCustomConfig(id: string, schema: Schema, category?: string) {\n const config = {\n name: id,\n schema,\n category: category || 'general',\n }\n const index = this.customRegistries.findIndex((item) => item.name === id)\n if (index >= 0) {\n this.customRegistries[index] = config\n } else {\n this.customRegistries.push(config)\n }\n return this\n }\n\n getConfigRegistries(category?: string): InPageEditPreferenceUIRegistryItem[] {\n return Array.from(this.ctx.registry.entries())\n .map<{\n name: string\n schema: Schema\n }>(([plugin]) => {\n if (plugin === null) {\n return {\n name: '@root',\n schema: (InPageEdit as any)?.PreferencesSchema || null,\n }\n } else {\n return {\n name: plugin.name,\n schema: (plugin as any)?.PreferencesSchema || null,\n }\n }\n })\n .filter((item) => item.schema !== null)\n .map((item) => {\n return {\n ...item,\n category: item.schema.meta.category || 'general',\n }\n })\n .concat(this.customRegistries)\n .filter((item) => !category || item.category === category)\n }\n getAllSchema() {\n return new Schema<PreferencesMap>(\n Schema.intersect(this.getConfigRegistries().map((item) => item.schema))\n )\n }\n\n defineCategory(category: InPageEditPreferenceUICategory) {\n const index = this.categoryDefinitions.findIndex((tab) => tab.name === category.name)\n if (index < 0) {\n this.categoryDefinitions.push(category)\n } else {\n this.categoryDefinitions[index] = category\n }\n this.categoryDefinitions.sort((a, b) => {\n return (a.index ?? 0) - (b.index ?? 0)\n })\n return this\n }\n\n getConfigCategories() {\n return this.categoryDefinitions\n }\n\n private async _migrageFromLegacyMasterDB() {\n const legacyDB = this.ctx.storage.createDatabase<any>('preferences', Infinity)\n let count = 0\n for await (const [key, record] of legacyDB.entries()) {\n if (key === '_touched') continue\n await this.db.set(key, record.value)\n count++\n }\n count && this.logger.info(`Migrated ${count} preferences from master DB`)\n await legacyDB.clear()\n await (legacyDB as IDBStorageManager)?.db?.disconnect?.()\n return count\n }\n}\n","// keyword & RegExp caches\nconst ESCAPE_ARG_L = '\\uF114'\nconst ESCAPE_ARG_R = '\\uF514'\nconst REG_ESCAPE_ARG_L = /\\\\\\{/g\nconst REG_ESCAPE_ARG_R = /\\\\\\}/g\nconst REG_RESTORE_ARG_L = new RegExp(ESCAPE_ARG_L, 'g')\nconst REG_RESTORE_ARG_R = new RegExp(ESCAPE_ARG_R, 'g')\n\n/**\n * interpolate\n * - 具名插值:`{{expr}}`,其中 expr 可为标识符或简单表达式(如 `{{ name || \"world\" }}`、`{{ name ? 'hi ' + name : '' }}`)。\n * - 匿名插值:使用 `{{ $1 }}`、`{{ $2 }}`...,可用可变参数或数组提供位置参数。\n * - 具名与匿名可混用;若缺失值,替换为空字符串。\n *\n * 示例:\n * ```ts\n * interpolate('hello, {{ name }}') // 'hello, '\n * interpolate('hello, {{ name || \"world\" }}') // 'hello, world'\n * interpolate('hello, {{ name || \"world\" }}', { name: 'dragon' }) // 'hello, dragon'\n * interpolate('hello, {{ $1 }}. {{ $2 }}', 'dragon', 'yeah') // 'hello, dragon. yeah'\n * interpolate('hello, {{ $1 }}. {{ $2 }}', ['dragon', 'yeah']) // 'hello, dragon. yeah'\n * interpolate('hello, {{ $1 }}. {{ greeting || \"\" }}', { $1: 'dragon', greeting: 'yeah' }) // 'hello, dragon. yeah'\n * ```\n */\nexport function interpolate(template: string): string\nexport function interpolate(template: string, context: Record<string, unknown>): string\nexport function interpolate(template: string, ...numricContext: string[]): string\nexport function interpolate(template: string, numricContext: string[]): string\nexport function interpolate(template: string, ...args: Array<unknown>): string {\n return baseInterpolate(undefined, template, ...args)\n}\n\n/**\n * 创建带有“全局可用函数/变量”的插值函数。\n * - 传入的 globals 会作为模板可用的全局,只在上下文未提供同名键时生效(上下文优先)。\n * - 返回的函数与 interpolate 具有相同签名。\n *\n * 示例:\n * ```ts\n * const interpolate = createInterpolate({ getUrl })\n * interpolate('url is: {{ getUrl(title) }}', { title: 'foo' })\n * ```\n */\nexport type Interpolator = {\n (template: string): string\n (template: string, context: Record<string, unknown>): string\n (template: string, ...numricContext: string[]): string\n (template: string, numricContext: string[]): string\n}\nexport function createInterpolate(globals?: Record<string, unknown>): Interpolator {\n const g = globals ? { ...globals } : undefined\n const fn = (template: string, ...args: Array<unknown>) => {\n return baseInterpolate(g, template, ...args)\n }\n return fn as Interpolator\n}\n\nfunction baseInterpolate(\n globals: Record<string, unknown> | undefined,\n template: string,\n ...args: Array<unknown>\n): string {\n if (!template) return ''\n\n let out = String(template)\n .replace(REG_ESCAPE_ARG_L, ESCAPE_ARG_L)\n .replace(REG_ESCAPE_ARG_R, ESCAPE_ARG_R)\n\n let named: Record<string, unknown> = {}\n let numrics: unknown[] = []\n\n if (args.length === 1 && Array.isArray(args[0])) {\n numrics = args[0] as unknown[]\n } else if (args.length === 1 && isPlainObject(args[0])) {\n named = args[0] as Record<string, unknown>\n } else if (args.length > 0) {\n numrics = args\n }\n\n const ctx: Record<string, unknown> = Object.create(null)\n if (numrics && numrics.length) {\n for (let i = 0; i < numrics.length; i++) {\n ctx[`$${i + 1}`] = numrics[i]\n }\n }\n if (named && Object.keys(named).length) {\n for (const k of Object.keys(named)) ctx[k] = (named as any)[k]\n }\n // 合入全局(不覆盖上下文已提供的同名键)\n if (globals && Object.keys(globals).length) {\n for (const k of Object.keys(globals)) {\n if (typeof ctx[k] === 'undefined') {\n ctx[k] = (globals as any)[k]\n }\n }\n }\n\n out = out.replace(/\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g, (_m, exprRaw: string) => {\n const expr = String(exprRaw).trim()\n if (!expr) return ''\n try {\n const value = safeEval(expr, ctx)\n if (value == null) return ''\n return String(value)\n } catch {\n return ''\n }\n })\n\n return out.replace(REG_RESTORE_ARG_L, '{').replace(REG_RESTORE_ARG_R, '}')\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && (v as object).constructor === Object\n}\n\nconst safeEval = createEvaluator()\nfunction createEvaluator() {\n const globalNames = new Set([\n 'eval',\n 'Object',\n 'Array',\n 'String',\n 'Number',\n 'Boolean',\n 'Date',\n 'Math',\n 'JSON',\n 'undefined',\n 'null',\n 'true',\n 'false',\n 'NaN',\n 'Infinity',\n 'isNaN',\n 'isFinite',\n 'parseInt',\n 'parseFloat',\n ])\n\n const fn = new Function(\n '__expr__',\n 'ctx',\n `\n try {\n with (ctx) {\n return (eval(__expr__));\n }\n } catch (e) {\n throw e;\n }\n `\n ) as (expr: string, ctx: Record<string, unknown>) => unknown\n return (expr: string, ctx: Record<string, unknown>) => {\n /**\n * 创建 ctx 的代理,避免模板字符串调用了未传递的参数\n * 例如:interpolate('hello, {{ name || \"world\" }}')\n * 我们没有传递任何参数,引用 name 会出现 ReferenceError\n */\n const proxiedCtx = new Proxy(ctx, {\n has: (target, prop) => {\n if (typeof prop === 'symbol') {\n return prop in target\n }\n if (typeof prop === 'string' && (globalNames.has(prop) || prop === '__expr__')) {\n return false\n }\n return true\n },\n get: (target, prop) => {\n if (prop in target) {\n return target[prop as string]\n }\n return undefined\n },\n })\n return fn(expr, proxiedCtx)\n }\n}\n","import { createInterpolate } from './interpolate.js'\nimport type { Interpolator } from './interpolate.js'\n\nfunction joinTemplateStrings(strings: TemplateStringsArray, values: Array<unknown>) {\n let out = strings[0] ?? ''\n for (let i = 0; i < values.length; i++) {\n out += String(values[i]) + (strings[i + 1] ?? '')\n }\n return out\n}\n\nexport class I18nManager {\n private languages = new Map<string, Map<string, string>>()\n private currentLanguage = 'en'\n // 记录某个键在哪些语言中缺失了\n private missingKeys = new Map<string, string[]>()\n // 记录已使用的所有键\n private usedKeys = new Set<string>()\n interpolate: Interpolator\n constructor(\n init?: Record<string, any>,\n options?: {\n language?: string\n globals?: Record<string, unknown>\n }\n ) {\n const lang = options?.language || 'en'\n this.currentLanguage = lang\n this.interpolate = createInterpolate(options?.globals)\n if (init && Object.keys(init).length) {\n this.setLanguageData(lang, init)\n }\n }\n\n setGlobals(globals: Record<string, unknown>) {\n this.interpolate = createInterpolate(globals)\n return this\n }\n\n /**\n * ```\n * { foo: 'foo', bar: { baz: 'qux' } }\n * ```\n * will be merged into\n * ```\n * { foo: 'foo', 'bar.baz': 'qux' }\n * ```\n */\n set(key: string, value: string): this\n set(data: Record<string, any>): this\n set(arg1: string | Record<string, any>, arg2?: string): this {\n const lang = this.currentLanguage\n const dict = this.ensureLanguageMap(lang)\n if (typeof arg1 === 'string' && typeof arg2 === 'string') {\n dict.set(arg1, arg2)\n } else if (typeof arg1 === 'object') {\n const flat = this.toStringRecord(arg1)\n for (const [k, v] of Object.entries(flat)) {\n dict.set(k, v)\n }\n }\n return this\n }\n\n setLanguageData(language: string, data: Record<string, any>): this {\n language = paramCase(language).toLowerCase()\n const dict = this.ensureLanguageMap(language)\n const flat = this.toStringRecord(data)\n for (const [k, v] of Object.entries(flat)) {\n dict.set(k, v)\n }\n return this\n }\n\n setLanguage(language: string) {\n language = paramCase(language).toLowerCase()\n this.currentLanguage = language\n return this\n }\n\n getLanguage() {\n return this.currentLanguage\n }\n\n hasLanguage(language: string) {\n language = paramCase(language).toLowerCase()\n const data = this.languages.get(language)\n return data && Object.keys(data).length > 0\n }\n\n private toStringRecord(data: Record<string, any>, prefix?: string): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(data)) {\n const nextKey = prefix ? `${prefix}.${key}` : key\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const nested = this.toStringRecord(value as Record<string, any>, nextKey)\n for (const [nk, nv] of Object.entries(nested)) {\n result[nk] = String(nv)\n }\n } else {\n result[nextKey] = String(value)\n }\n }\n return result\n }\n\n has(key: string) {\n const langs = this.resolveLanguageOrder(this.currentLanguage)\n for (const lg of langs) {\n const dict = this.languages.get(lg)\n if (dict?.has(key)) return true\n }\n return false\n }\n\n get(key: string) {\n this.recordUsedKey(key)\n const langs = this.resolveLanguageOrder(this.currentLanguage)\n const missing: string[] = []\n for (const lg of langs) {\n const dict = this.languages.get(lg)\n const val = dict?.get(key)\n if (typeof val !== 'undefined') {\n if (missing.length) this.recordMissing(key, missing)\n return val\n }\n missing.push(lg)\n }\n // 全链均未命中,记录整条链\n if (missing.length) this.recordMissing(key, missing)\n return undefined\n }\n\n /**\n * [payload as template] Interpolate a message with optional arguments\n * @example\n * ```\n * i18n.msg('Hello, {{ name }}', 'dragon')\n * // good: \"你好,dragon\"\n * // missing: \"Hello, dragon\"\n * ```\n */\n translate(msg: string): string\n translate(msg: string, context: Record<string, unknown>): string\n translate(msg: string, ...numricContext: string[]): string\n translate(msg: string, numricContext: string[]): string\n translate(msg: string, ...args: Array<unknown>): string {\n if (!msg) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${msg}⧽`\n }\n const template = this.get(msg)\n if (typeof template === 'undefined') {\n return this.interpolate(msg, ...(args as any))\n }\n return this.interpolate(template, ...(args as any))\n }\n /**\n * $ => translate\n * @example\n * ```\n * $`hello, world` // \"你好,世界\"\n * $('dragon')`hello, {{ $1 }}` // \"你好,dragon\"\n */\n $(\n context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $(...numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $(strings: TemplateStringsArray, ...values: unknown[]): string\n $(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any)?.raw\n if (isTagCall) {\n // 直接作为模板标签使用:$`...`\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const msg = joinTemplateStrings(strings, values)\n return this.translate(msg)\n }\n // 先传上下文/位置参数,返回模板标签函数:$({...})`...` / $('a','b')`...`\n const capturedArgs = args\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const msg = joinTemplateStrings(strings, values)\n return this.translate(msg, ...(capturedArgs as any))\n }\n }\n\n /**\n * [payload as template] Return the raw message without interpolation\n * @example\n * ```\n * i18n.rawMsg('Hello, {{ name }}')\n * // good: \"你好,{{ name }}\"\n * // missing: \"Hello, {{ name }}\"\n * ```\n */\n translateRaw(msg: string): string {\n if (!msg) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${msg}⧽`\n }\n const template = this.get(msg)\n return template ?? msg\n }\n /**\n * $raw => translateRaw\n * @example\n * ```\n * $raw`hello, {{ $1 }}`\n * // good: \"你好,{{ $1 }}\"\n * // missing: \"hello, {{ $1 }}\"\n * ```\n */\n $raw(\n _context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $raw(..._numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $raw(strings: TemplateStringsArray, ...values: unknown[]): string\n $raw(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any)?.raw\n if (isTagCall) {\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const msg = joinTemplateStrings(strings, values)\n return this.translateRaw(msg)\n }\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const msg = joinTemplateStrings(strings, values)\n return this.translateRaw(msg)\n }\n }\n\n /**\n * [payload as key] Interpolate a message by key with optional arguments\n * @example\n * ```\n * i18n.strictMsg('greeting', 'dragon')\n * // good: \"你好,dragon\"\n * // missing: \"(greeting)\"\n * ```\n */\n message(key: string): string\n message(key: string, context: Record<string, unknown>): string\n message(key: string, ...numricContext: string[]): string\n message(key: string, numricContext: string[]): string\n message(key: string, ...args: Array<unknown>): string {\n if (!key) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${key}⧽`\n }\n const template = this.get(key)\n if (typeof template === 'undefined') {\n return `(${key})`\n }\n return this.interpolate(template, ...(args as any))\n }\n /**\n * $$ => message\n * @example\n * ```\n * $$`hello`\n * // good: \"你好\"\n * // missing: \"(hello)\"\n * $$('dragon')`greeting`\n * // good: \"你好,dragon\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$(\n context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$(...numricContext: string[]): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$(strings: TemplateStringsArray, ...values: unknown[]): string\n $$(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any)?.raw\n if (isTagCall) {\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const key = joinTemplateStrings(strings, values)\n return this.message(key)\n }\n const capturedArgs = args\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const key = joinTemplateStrings(strings, values)\n return this.message(key, ...(capturedArgs as any))\n }\n }\n\n /**\n * [payload as key] Return the raw message without interpolation\n * @example\n * ```\n * i18n.rawMsg('greeting')\n * // good: \"你好,{{ name }}\"\n * // missing: \"(greeting)\"\n * ```\n */\n messageRaw(key: string): string {\n if (!key) {\n return ''\n }\n if (this.currentLanguage === 'qqx') {\n return `⧼${key}⧽`\n }\n const template = this.get(key)\n return template ?? `(${key})`\n }\n /**\n * $$raw => messageRaw\n * @example\n * ```\n * $$raw`greeting`\n * // good: \"你好,{{ name }}\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$raw(\n _context: Record<string, unknown>\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$raw(\n ..._numricContext: string[]\n ): (strings: TemplateStringsArray, ...values: unknown[]) => string\n $$raw(strings: TemplateStringsArray, ...values: unknown[]): string\n $$raw(...args: any[]): any {\n const isTagCall = Array.isArray(args[0]) && (args[0] as any).raw\n if (isTagCall) {\n const strings = args[0] as TemplateStringsArray\n const values = args.slice(1)\n const key = joinTemplateStrings(strings, values)\n return this.messageRaw(key)\n }\n return (strings: TemplateStringsArray, ...values: unknown[]) => {\n const key = joinTemplateStrings(strings, values)\n return this.messageRaw(key)\n }\n }\n\n getAvailableLanguages() {\n return Array.from(this.languages.keys())\n }\n\n private ensureLanguageMap(language: string) {\n let dict = this.languages.get(language)\n if (!dict) {\n dict = new Map<string, string>()\n this.languages.set(language, dict)\n }\n return dict\n }\n\n private resolveLanguageOrder(language: string) {\n // 简化回退逻辑:仅当前语言 -> en\n const cur = language\n return cur === 'en' ? ['en'] : [cur, 'en']\n }\n\n /**\n * 获取缺失键报告:\n * { foo: ['zh', 'zh-hans', 'en'] }\n */\n getMissingReport() {\n return Object.fromEntries(this.missingKeys.entries())\n }\n\n /**\n * 清空缺失键记录\n */\n clearMissingReport() {\n this.missingKeys.clear()\n }\n\n private recordMissing(key: string, langs: string[]) {\n if (!langs.length) return\n const list = this.missingKeys.get(key) || []\n for (const lg of langs) {\n if (!list.includes(lg)) list.push(lg)\n }\n this.missingKeys.set(key, list)\n }\n\n private recordUsedKey(key: string) {\n this.usedKeys.add(key)\n }\n\n private getUsedKeys() {\n return Array.from(this.usedKeys)\n }\n private generateBlankKeyRecord() {\n const record: Record<string, string> = {}\n for (const key of this.getUsedKeys()) {\n record[key] = ''\n }\n return record\n }\n}\n","import { Inject, InPageEdit, Logger, Schema, Service } from '@/InPageEdit'\nimport { I18nManager as I18nManager } from './I18nManager.js'\nimport { Endpoints } from '@/constants/endpoints.js'\nimport { AbstractIPEStorageManager } from '../storage/index.js'\n\nexport interface I18nIndexV1 {\n manifest_version: 1\n base_language: string\n last_modified: string\n languages: Record<string, I18nIndexLanguage>\n}\n\nexport interface I18nIndexLanguage {\n file: string\n iso_name?: string\n endonym?: string\n fallback?: string\n data?: I18nStringRecord\n}\n\ninterface I18nStringRecord {\n [key: string]: string | I18nStringRecord\n}\n\nexport const I18nIndexV1Schema = new Schema<I18nIndexV1>(\n Schema.object({\n manifest_version: Schema.const(1).required(),\n base_language: Schema.string().required(),\n last_modified: Schema.string().required(),\n languages: Schema.dict(\n Schema.object({\n file: Schema.string().required(),\n fallback: Schema.string(),\n iso_name: Schema.string(),\n endonym: Schema.string(),\n data: Schema.transform(Schema.dict(Schema.any()).default({}), (v) =>\n Object.keys(v).length > 0 ? v : undefined\n ),\n })\n ).required(),\n })\n)\n\ndeclare module '@/InPageEdit' {\n export interface InPageEdit {\n i18n: I18nService\n\n /**\n * $ => translate [payload as template]\n * @example\n * ```\n * $`hello, world`\n * // good: \"你好,世界\"\n * // missing: \"hello, world\"\n * $('dragon')`hello, {{ $1 }}`\n * // good: \"你好,dragon\"\n * // missing: \"hello, dragon\"\n * ```\n */\n $: I18nManager['$']\n /**\n * $raw => translateRaw [payload as template]\n * @example\n * ```\n * $raw`hello, {{ $1 }}`\n * // good: \"你好,{{ $1 }}\"\n * // missing: \"hello, {{ $1 }}\"\n * ```\n */\n $raw: I18nManager['$raw']\n /**\n * $$ => message [payload as key]\n * @example\n * ```\n * $$`hello`\n * // good: \"你好\"\n * // missing: \"(hello)\"\n * $$('dragon')`greeting`\n * // good: \"你好,dragon\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$: I18nManager['$$']\n /**\n * $$raw => messageRaw [payload as key]\n * @example\n * ```\n * $$raw`greeting`\n * // good: \"你好,{{ name }}\"\n * // missing: \"(greeting)\"\n * ```\n */\n $$raw: I18nManager['$$raw']\n }\n export interface PreferencesMap {\n language: string\n 'i18n.index_url': string\n }\n export interface Events {\n 'i18n/changed'(payload: { ctx: InPageEdit; language: string }): void\n }\n}\n\n@Inject(['wiki', 'preferences'])\n@RegisterPreferences(\n Schema.object({\n 'i18n.index_url': Schema.string()\n .description('I18n index URL (DO NOT CHANGE THIS) ')\n .default(\n import.meta.env.PROD\n ? Endpoints.I18N_INDEX_URL\n : import.meta.resolve('/src/__mock__/i18n/index.json')\n ),\n })\n .description('')\n .extra('category', 'general')\n)\nexport class I18nService extends Service {\n private readonly logger: Logger\n private _indexUrl!: string\n private _indexCache: I18nIndexV1 | null = null\n public readonly manager: I18nManager\n\n private i18nIndexDB: AbstractIPEStorageManager<I18nIndexV1>\n private i18nDataDB: AbstractIPEStorageManager<Record<string, string>>\n\n $!: I18nManager['$']\n $raw!: I18nManager['$raw']\n $$!: I18nManager['$$']\n $$raw!: I18nManager['$$raw']\n\n constructor(readonly ctx: InPageEdit) {\n super(ctx, 'i18n', false)\n this.logger = this.ctx.logger('I18nService')\n this.manager = new I18nManager(\n {},\n {\n language: '',\n globals: {\n getUrl: (...args: Parameters<InPageEdit['wiki']['getUrl']>) => ctx.wiki.getUrl(...args),\n },\n }\n )\n this.i18nIndexDB = ctx.storage.createDatabase<I18nIndexV1>(\n 'i18n-index',\n 1000 * 60 * 60 * 24 * 3, // 3 days\n this.ctx.version,\n 'indexedDB'\n )\n this.i18nDataDB = ctx.storage.createDatabase<Record<string, string>>(\n 'i18n-data',\n 1000 * 60 * 60 * 24 * 3, // 3 days\n this.ctx.version,\n 'indexedDB'\n )\n this.$ = this.manager.$.bind(this.manager)\n this.$raw = this.manager.$raw.bind(this.manager)\n this.$$ = this.manager.$$.bind(this.manager)\n this.$$raw = this.manager.$$raw.bind(this.manager)\n }\n\n protected async start(): Promise<void> {\n // pre-register\n this.ctx.preferences.registerCustomConfig(\n 'language',\n Schema.object({\n language: Schema.union([\n '@user',\n '@site',\n Schema.string().description('Custom language code'),\n ])\n .description('UI language')\n .default('@user'),\n }).description('UI language')\n )\n\n this.ctx.on('clear-cache', this.onClearCache.bind(this))\n\n const indexUrl = (this._indexUrl = (await this.ctx.preferences.get('i18n.index_url')) || '')\n if (!indexUrl) {\n this.logger.error('I18n index URL is not set')\n this.setupShortcuts()\n return\n }\n\n let index: I18nIndexV1 | null = null\n try {\n index = await this.getI18nIndex(indexUrl)\n } catch (e) {\n this.logger.error('Failed to fetch i18n index', e)\n this.setupShortcuts()\n return\n }\n this._indexCache = index\n Object.entries(index.languages).forEach(([code, meta]) => {\n if (meta.data && Object.keys(meta.data).length > 0) {\n this.manager.setLanguageData(code, meta.data)\n }\n })\n\n const prefer = await this.ctx.preferences.get('language')\n const normalized = this.normalizeLanguageCode(prefer)\n\n this.logger.debug('Settings', { prefer, normalized })\n\n try {\n await this.switchLanguage(normalized)\n this.logger.info(`Initialized for language: ${this.language}`)\n } catch (e) {\n this.logger.error('Failed to fetch i18n index', e)\n this.manager.setLanguage('en')\n }\n\n // rewrite-schema\n this.ctx.preferences.registerCustomConfig(\n 'language',\n Schema.object({\n language: Schema.union([\n Schema.const('@user').description(this.$`Same as your personal language`),\n Schema.const('@site').description(this.$`Same as the site language`),\n ...this.getAvailableLanguageCodes().map(({ code, endonym, iso_name }) =>\n Schema.const(code).description(endonym || iso_name || code)\n ),\n ]).default('@user'),\n }).description(this.$`InPageEdit UI language`)\n )\n\n this.setupShortcuts()\n\n // 当偏好设置中的 language 发生变化时,自动热切换\n this.ctx.on('preferences/changed', async ({ changes }) => {\n if (!('language' in changes)) return\n const next = this.normalizeLanguageCode(await this.ctx.preferences.get('language'))\n if (next && next !== this.language) {\n await this.switchLanguage(next)\n }\n })\n }\n\n private setupShortcuts() {\n if (!this.manager) throw new Error('I18nManager is not initialized')\n this.ctx.set('$', this.manager.$.bind(this.manager))\n this.ctx.set('$raw', this.manager.$raw.bind(this.manager))\n this.ctx.set('$$', this.manager.$$.bind(this.manager))\n this.ctx.set('$$raw', this.manager.$$raw.bind(this.manager))\n }\n\n private normalizeLanguageCode(code: any) {\n if (!code || typeof code !== 'string') return 'en'\n if (code === '@user') code = this.ctx.wiki.userInfo.options.language || 'en'\n if (code === '@site') code = this.ctx.wiki.siteInfo.general.lang || 'en'\n return paramCase(String(code)).toLowerCase()\n }\n\n get language() {\n return this.manager.getLanguage()\n }\n\n /**\n * 主动设置偏好值(会触发 preferences/changed,从而热切换)\n */\n async setLanguagePreference(value: '@user' | '@site' | string) {\n await this.ctx.preferences.set('language', value as any)\n }\n\n /**\n * 直接切换到具体语言(不修改偏好值)\n */\n async switchLanguage(language: string) {\n const lang = this.normalizeLanguageCode(language)\n await this.ensureLanguageLoaded(lang)\n this.manager.setLanguage(lang)\n this.ctx.emit('i18n/changed', { ctx: this.ctx, language: lang })\n }\n\n /**\n * 为指定语言注册(或合并)消息。\n * - 推荐加命名空间避免冲突:{ myPlugin: { key: 'value' } }\n * - 若 language 为当前语言,将立即可用;必要时你可以手动触发 UI 刷新或监听 i18n/changed。\n */\n async registerMessages(\n language: string,\n data: Record<string, any>,\n options?: { namespace?: string }\n ) {\n const payload = options?.namespace ? { [options.namespace]: data } : data\n this.manager.setLanguageData(language, payload)\n if (language === this.language) {\n // 不更改语言,仅提示有新消息注入;由调用方决定是否刷新 UI\n this.ctx.emit('i18n/changed', { ctx: this.ctx, language: this.language })\n }\n }\n\n /**\n * 列出可用语言与文件(来源于 index.json)\n */\n getAvailableLanguageCodes(): (I18nIndexLanguage & { code: string })[] {\n if (!this._indexCache) throw new Error('I18n index is not loaded')\n return Object.entries(this._indexCache.languages)\n .filter(([_, meta]) => !meta.fallback)\n .reduce(\n (acc, [code, meta]) => {\n acc.push({ code, ...meta })\n return acc\n },\n [] as (I18nIndexLanguage & { code: string })[]\n )\n }\n\n private findLanguageMeta(\n index: I18nIndexV1,\n language: string\n ): (I18nIndexLanguage & { code: string }) | undefined {\n const normalized = paramCase(String(language)).toLowerCase()\n const found = index.languages[normalized]\n if (found) {\n return {\n code: normalized,\n ...found,\n }\n } else {\n const en = index.languages['en']\n if (en) {\n return {\n code: 'en',\n ...en,\n }\n }\n }\n }\n\n public async getI18nIndex(url: string, noCache = false): Promise<I18nIndexV1> {\n if (!noCache) {\n const cached = await this.i18nIndexDB.get(url)\n if (cached) {\n try {\n return I18nIndexV1Schema(cached)\n } catch (e) {\n this.logger.error('Failed to parse cached i18n index', e)\n this.i18nIndexDB.delete(url)\n }\n }\n }\n const index = await this.fetchI18nIndex(url)\n this.i18nIndexDB.set(url, index)\n return index\n }\n private async fetchI18nIndex(url: string): Promise<I18nIndexV1> {\n const index = (await fetch(url).then((res) => res.json())) as I18nIndexV1\n return I18nIndexV1Schema(index)\n }\n\n private async ensureLanguageLoaded(language: string) {\n if (!this.manager || !this._indexCache) throw new Error('I18nManager is not initialized')\n if (this.manager.hasLanguage(language)) {\n return this.logger.debug('Language already loaded', language)\n }\n const data = await this.getLanguageData(language)\n this.manager.setLanguageData(language, data)\n this.logger.debug('Language data ensured', language, data)\n }\n\n public async getLanguageData(language: string, noCache = false): Promise<Record<string, string>> {\n if (!this._indexCache) throw new Error('I18n index is not loaded')\n const meta = this.findLanguageMeta(this._indexCache, language)\n if (!meta) return {}\n\n const key = `${this._indexUrl}#${meta.file}`\n if (!noCache) {\n const cached = await this.i18nDataDB.get(key)\n if (cached && Object.keys(cached).length > 0) {\n this.logger.debug('Using cached language data', language, cached)\n return cached\n }\n }\n\n const data =\n meta.data ||\n (await fetch(new URL(meta.file, this._indexUrl).toString()).then((res) => res.json()))\n\n this.i18nDataDB.set(key, data)\n this.logger.debug('Language data fetched', language, meta.file, data)\n\n return data\n }\n\n /**\n * 获取缺失键报告,形如:\n * { foo: ['zh', 'zh-hans', 'en'] }\n */\n getMissingReport() {\n return this.manager.getMissingReport()\n }\n\n /**\n * 清空缺失键记录\n */\n clearMissingReport() {\n this.manager.clearMissingReport()\n }\n\n private async onClearCache() {\n await this.i18nIndexDB.clear()\n await this.i18nDataDB.clear()\n }\n}\n","import { Context, Inject } from '@cordisjs/core'\nimport Schema from 'schemastery'\nimport { LoggerLevel, createLogger, type Logger } from '@inpageedit/logger'\nimport { deepMerge, FexiosConfigs } from 'wiki-saikou'\nimport { ApiService } from '@/services/ApiService.js'\nimport { CurrentPageService } from '@/services/CurrentPageService'\nimport { ResourceLoaderService } from '@/services/ResourceLoaderService.js'\nimport { ModalService } from '@/services/ModalService.js'\nimport { WikiMetadataService } from '@/services/WikiMetadataService.js'\nimport { StorageService } from '@/services/storage/index.js'\nimport { WikiPageService } from '@/services/WikiPageService.js'\nimport { WikiTitleService } from '@/services/WikiTitleService.js'\nimport '@/styles/index.scss'\nimport { PreferencesService } from './services/PreferencesService'\n\nexport interface InPageEditCoreConfig {\n apiConfigs: Partial<FexiosConfigs>\n legacyPreferences: Record<string, any>\n logLevel: number\n storageNamespace: string\n autoloadStyles: boolean\n autoInstallCorePlugins: boolean\n}\n\n/**\n * ✏️ InPageEdit NEXT\n *\n * 🚀 Modular, Extensible Supercharged Plugin for MediaWiki\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n * @see https://github.com/inpageedit/inpageedit-next\n * @see https://www.ipe.wiki/\n */\nexport class InPageEdit extends Context {\n readonly version: string = import.meta.env.__VERSION__ || '0.0.0'\n\n public config: InPageEditCoreConfig\n static DEFAULT_CONFIG: InPageEditCoreConfig = {\n apiConfigs: {},\n legacyPreferences: {},\n logLevel: import.meta.env.DEV ? LoggerLevel.debug : LoggerLevel.info,\n storageNamespace: 'InPageEdit',\n autoloadStyles: true,\n autoInstallCorePlugins: true,\n }\n Endpoints = Endpoints\n readonly schema = Schema\n readonly logger: Logger\n\n constructor(config?: Partial<InPageEditCoreConfig>) {\n super({\n name: 'InPageEdit',\n })\n this.config = deepMerge(InPageEdit.DEFAULT_CONFIG, config)\n this.logger = createLogger({\n name: 'IPE',\n color: '#33aaff',\n level: this.config.logLevel,\n })\n this.#init()\n }\n\n async #init() {\n await this.#initCoreServices()\n if (this.config.autoInstallCorePlugins) {\n this.#initCorePlugins()\n }\n this.#initCoreAssets()\n }\n\n async #initCoreServices() {\n this.plugin(I18nService)\n this.plugin(ApiService, this.config.apiConfigs)\n this.plugin(CurrentPageService)\n this.plugin(ResourceLoaderService)\n this.plugin(ModalService)\n this.plugin(PreferencesService)\n this.plugin(StorageService, { dbName: this.config.storageNamespace })\n this.plugin(WikiMetadataService)\n this.plugin(WikiPageService)\n this.plugin(WikiTitleService)\n\n // 标记内置服务,所以用户即使忘记 inject 也能使用\n this.#markServiceAsBuiltIn([\n 'i18n',\n '$',\n '$$',\n 'api',\n 'currentPage',\n 'resourceLoader',\n 'modal',\n 'preferences',\n 'storage',\n 'wikiPage',\n 'wikiTitle',\n // WikiMetadataService\n 'wiki',\n 'getUrl',\n 'getSciprtUrl',\n 'getMainpageUrl',\n ])\n }\n\n #markServiceAsBuiltIn(services: string[]) {\n if (!Array.isArray(services) || services.length === 0) return this\n for (const name of services) {\n const internal = this[InPageEdit.internal][name]\n if (internal?.type === 'service') {\n internal.builtin = true\n }\n }\n return this\n }\n\n // TODO: 这里不应该硬编码,暂时先这样\n async #initCorePlugins() {\n const plugins = [\n import('@/plugins/analytics/index.js').then(({ PluginAnalytics }) => PluginAnalytics),\n import('@/plugins/in-article-links/index.js').then(\n ({ PluginInArticleLinks }) => PluginInArticleLinks\n ),\n import('@/plugins/plugin-store/index.js').then(({ PluginPluginStore }) => PluginPluginStore),\n import('@/plugins/preferences-ui/index.js').then(\n ({ PluginPreferencesUI }) => PluginPreferencesUI\n ),\n import('@/plugins/quick-edit/index.js').then(({ PluginQuickEdit }) => PluginQuickEdit),\n import('@/plugins/quick-move/index.js').then(({ PluginQuickMove }) => PluginQuickMove),\n import('@/plugins/quick-preview/index.js').then(\n ({ PluginQuickPreview }) => PluginQuickPreview\n ),\n import('@/plugins/quick-diff/index.js').then(({ PluginQuickDiff }) => PluginQuickDiff),\n import('@/plugins/quick-redirect/index.js').then(\n ({ PluginQuickRedirect }) => PluginQuickRedirect\n ),\n import('@/plugins/toolbox/index.js').then(({ PluginToolbox }) => PluginToolbox),\n ]\n plugins.forEach(async (plugin) => {\n this.plugin(await plugin)\n })\n\n if (import.meta.env.DEV) {\n this.plugin((await import('@/plugins/_debug/index.js')).default)\n }\n }\n\n // TODO: 应该抽象到 PluginTheme 中去,暂时先硬编码\n async #initCoreAssets() {\n this.inject(['resourceLoader'], (ctx) => {\n if (\n import.meta.env.PROD &&\n import.meta.env.VITE_BUILD_FORMAT === 'import' &&\n this.config.autoloadStyles\n ) {\n ctx.resourceLoader.loadStyle(import.meta.resolve('./style.css'))\n }\n })\n }\n\n async withInject(inject: Inject) {\n const { promise, resolve } = promiseWithResolvers<this>()\n this.inject(inject, (ctx) => {\n resolve(ctx)\n })\n return promise\n }\n}\n\n// 导出依赖包以便用户使用\nexport { default as Schema } from 'schemastery'\nexport * from '@inpageedit/logger'\nexport interface PreferencesMap {}\n\n// 类型体操\nexport {\n Inject,\n EffectScope,\n ForkScope,\n MainScope,\n ScopeStatus,\n symbols as CordisSymbols,\n Service,\n CordisError,\n Lifecycle,\n} from '@cordisjs/core'\nimport {\n Events as CordisEvents,\n Plugin as CordisPlugin,\n Registry as CordisRegistry,\n} from '@cordisjs/core'\nimport { I18nService } from './services/i18n/index.js'\nexport interface Events<C extends InPageEdit = InPageEdit> extends CordisEvents<C> {}\nexport type IPEPlugin<C = any> = CordisPlugin<InPageEdit, C>\nexport type IPERegistry = CordisRegistry<InPageEdit>\nexport interface InPageEdit {\n [InPageEdit.events]: Events<this>\n}\n"],"names":["$","n","f","d","_","c","t","e","g","E","l","r","w","x","C","s","b","a","i","h","P","R","u","o","m","v","y","O","p","S","ApiService","ctx","options","api","MwApi","_CurrentPageService_decorators","_init","_a","Inject","CurrentPageService","Service","#init","#injectHistoryPopState","#onPopState","#initCurrentTitle","#initIsMainPage","injectKey","_pushState","_replaceState","data","title","url","oldURL","newURL","href","qs","isMainPage","__decoratorStart","__decorateElement","__runInitializers","ResourceLoaderService","src","attrs","key","existed","resolve","reject","script","value","link","meta","el","path","j","U","B","I","Y","W","G","A","Z","q","V","J","Q","tt","et","F","T","st","it","nt","ot","M","at","rt","L","K","lt","ct","z","k","H","ht","X","dt","ft","ut","N","D","mt","CustomIPEModal","IPEModal","state","activeInputs","jsx","ProgressBar","ModalService","IPEModalEvent","makeSearchParams","params","sp","item","objKey","objValue","makeURL","hash","existingParams","newParams","_WikiMetadataService_decorators","WikiMetadataService","fallback","Schema","jsxs","kind","noCache","cached","map","ns","alias","server","name","titleOrPageId","searchParams","right","rights","names","group","_memoryStorage","sym","useMemoryStorage","LocalStorageManager","dbName","storeName","ttl","version","engine","raw","parsed","rec","fullKey","setter","expired","newValue","keyOrRecord","maybeValue","now","recordObj","results","prefix","toRemove","IDBStorageManager","IDBPlus","toDelete","entry","isExpired","newData","record","recordObject","toSet","StorageService","config","canUseIDB","WikiPageService","createWikiPageModel","payload","converttitles","rvsection","pageid","revid","init","WikiTitleService","createWikiTitleModel","namespace","linkInfo","pageId","revId","id","promise","promiseWithResolvers","wikiPage","page","input","titleText","section","action","sub","talkPage","titleParam","curid","oldid","_PreferencesService_decorators","PreferencesService","defaultValue","computeFallback","defaults","changes","configs","out","pref","defaultValues","val","schema","category","index","plugin","InPageEdit","tab","legacyDB","count","ESCAPE_ARG_L","ESCAPE_ARG_R","REG_ESCAPE_ARG_L","REG_ESCAPE_ARG_R","REG_RESTORE_ARG_L","REG_RESTORE_ARG_R","createInterpolate","globals","template","args","baseInterpolate","named","numrics","isPlainObject","_m","exprRaw","expr","safeEval","createEvaluator","globalNames","fn","proxiedCtx","target","prop","joinTemplateStrings","strings","values","I18nManager","lang","arg1","arg2","dict","flat","language","paramCase","result","nextKey","nested","nk","nv","langs","lg","missing","msg","capturedArgs","cur","list","_I18nService_decorators","I18nIndexV1Schema","RegisterPreferences","Endpoints","I18nService","indexUrl","code","prefer","normalized","endonym","iso_name","next","acc","found","en","res","Context","deepMerge","createLogger","LoggerLevel","#initCoreServices","#initCorePlugins","#initCoreAssets","#markServiceAsBuiltIn","services","internal","PluginAnalytics","PluginInArticleLinks","PluginPluginStore","PluginPreferencesUI","PluginQuickEdit","PluginQuickMove","PluginQuickPreview","PluginQuickDiff","PluginQuickRedirect","PluginToolbox","inject"],"mappings":"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","x_google_ignoreList":[0,9]}
|