wikiplus-highlight 3.2.7 → 3.2.8
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/main.min.js +2 -3
- package/dist/main.min.js.map +4 -4
- package/package.json +8 -7
package/dist/main.min.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
1
|
+
(()=>{var w="https://testingcf.jsdelivr.net",h=t=>JSON.parse(String(localStorage.getItem(t))),{wgPageName:C,wgNamespaceNumber:l,wgPageContentModel:p}=mw.config.get(),E={wikitext:"mediawiki"},M={css:"css",js:"javascript",json:"json"},b={828:"lua",274:"html"},j=async t=>{var a;let e;if(typeof _WikiplusPages=="object"?e=_WikiplusPages:typeof Pages=="object"&&(e=Pages),e){const r=Object.values(e).filter(({sectionCache:i})=>Object.values(i).includes(t));r.some(({title:i})=>!i.endsWith("/doc"))&&await mw.loader.using("mediawiki.Title");const o=new Set(r.map(({title:i})=>{var u,m,d;if(i.endsWith("/doc"))return"template";const c=new mw.Title(i),s=c.getNamespaceId();if(s%2)return"mediawiki";const n=(d=M[(m=(u=c.getExtension())==null?void 0:u.toLowerCase())!=null?m:""])!=null?d:b[s];switch(n){case"javascript":return s===8||s===2300?"gadget":n;case"css":return s===2||s===8||s===2300?n:"sanitized-css";case void 0:return s===10||s===2?"template":"mediawiki";default:return n}}));if(o.size===1){const[i]=o,c=r.length===1?r[0].title:void 0;return i==="gadget"?["javascript",8]:i==="template"?["mediawiki",10,c]:[i,void 0,c]}else if(o.size===2){if(o.has("javascript")&&o.has("gadget"))return["javascript"];if(o.has("mediawiki")&&o.has("template"))return["mediawiki"]}}return l!==274&&p!=="Scribunto"||C.endsWith("/doc")?[(a=E[p])!=null?a:p,p==="javascript"?l:void 0]:(await mw.loader.using("oojs-ui-windows"),await OO.ui.confirm(mw.msg("cm-mw-contentmodel"),{actions:[{label:l===274?"Widget":"Lua"},{label:"Wikitext",action:"accept"}]})?["mediawiki"]:[l===274?"html":"lua"])},k=()=>(document.getElementById("Wikiplus-Quickedit-Submit").dispatchEvent(new MouseEvent("click")),!0),v=()=>(document.querySelector("#Wikiplus-Quickedit-MinorEdit").checked=!0,k()),y=()=>{const t=h("Wikiplus_Settings"),e=t&&(t.esc_to_exit_quickedit||t.escToExitQuickEdit);return e===!0||e==="true"?(document.getElementById("Wikiplus-Quickedit-Back").dispatchEvent(new MouseEvent("click")),!0):!1},S=async(t,e)=>{var o,i;const a=await CodeMirror6.fromTextArea(t,...e?["json"]:await j(t.value));((i=(o=a.view)==null?void 0:o.dom)!=null?i:a.editor.getDomNode()).id="Wikiplus-CodeMirror",e||(a.editor?(a.editor.addCommand(monaco.KeyMod.CtrlCmd|monaco.KeyCode.KeyS,k),a.editor.addCommand(monaco.KeyMod.CtrlCmd|monaco.KeyMod.Shift|monaco.KeyCode.KeyS,v),a.editor.addCommand(monaco.KeyCode.Escape,y)):a.extraKeys([{key:"Mod-S",run:k},{key:"Shift-Mod-S",run:v},{key:"Esc",run:y}]));const r=document.querySelector("#Wikiplus-Quickedit-Jump > a");r&&(r.href="#Wikiplus-CodeMirror")};(async()=>{var a;const{libs:t}=mediaWiki,{wphl:e}=t;if(!(e!=null&&e.version)){const r="3.2.8";t.wphl={version:r,...e};const o=`npm/@bhsd/codemirror-mediawiki@${(a=t.wphl.cmVersion)!=null?a:"latest"}/dist/wiki.min.js`,i="npm/wikiplus-highlight";typeof CodeMirror6!="function"&&await $.ajax(`${w}/${o}`,{dataType:"script",cache:!0}),new MutationObserver(s=>{var f;const n="#Wikiplus-Quickedit, #Wikiplus-Setting-Input",[u]=$(s.flatMap(({addedNodes:g})=>[...g])).find(n);u&&S(u,u.id==="Wikiplus-Setting-Input");const[m]=$(s.flatMap(({removedNodes:g})=>[...g])).find(n),d=(f=CodeMirror6.instances)==null?void 0:f.get(m);typeof(d==null?void 0:d.destroy)=="function"&&d.destroy(),Object.assign(globalThis,{records:s})}).observe(document.body,{childList:!0}),mw.loader.load(`${w}/${i}@${r}/styles.min.css`,"text/css")}})();/**
|
|
3
2
|
* @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展
|
|
4
3
|
* @author Bhsd <https://github.com/bhsd-harry>
|
|
5
4
|
* @license GPL-3.0
|
|
6
|
-
*/
|
|
5
|
+
*/})();
|
|
7
6
|
//# sourceMappingURL=main.min.js.map
|
package/dist/main.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../
|
|
4
|
-
"sourcesContent": ["const CDN = \"https://testingcf.jsdelivr.net\";\nconst textarea = /* @__PURE__ */ (() => typeof document === \"object\" ? document.createElement(\"textarea\") : void 0)();\nconst decodeHTML = (str) => {\n textarea.innerHTML = str;\n return textarea.value;\n};\nconst rawurldecode = (str) => decodeURIComponent(str.replace(/%(?![\\da-f]{2})/giu, \"%25\"));\nconst normalizeTitle = (title) => {\n const decoded = rawurldecode(title);\n return /[<>[\\]|{}]/u.test(decoded) ? decoded : decodeHTML(decoded);\n};\nconst numToHex = (d) => Math.round(d * 255).toString(16).padStart(2, \"0\");\nconst regex = /* @__PURE__ */ (() => {\n const hexColor = String.raw`#(?:[\\da-f]{3,4}|(?:[\\da-f]{2}){3,4})(?![\\p{L}\\p{N}_])`, rgbValue = String.raw`(?:\\d*\\.)?\\d+%?`, hue = String.raw`(?:\\d*\\.)?\\d+(?:deg|grad|rad|turn)?`, rgbColor = String.raw`rgba?\\(\\s*(?:${String.raw`${new Array(3).fill(rgbValue).join(String.raw`\\s+`)}(?:\\s*\\/\\s*${rgbValue})?`}|${String.raw`${new Array(3).fill(rgbValue).join(String.raw`\\s*,\\s*`)}(?:\\s*,\\s*${rgbValue})?`})\\s*\\)`, hslColor = String.raw`hsla?\\(\\s*(?:${String.raw`${hue}\\s+${rgbValue}\\s+${rgbValue}(?:\\s*\\/\\s*${rgbValue})?`}|${String.raw`${hue}${String.raw`\\s*,\\s*(?:\\d*\\.)?\\d+%`.repeat(2)}(?:\\s*,\\s*${rgbValue})?`})\\s*\\)`;\n return {\n full: new RegExp(String.raw`(^|[^\\p{L}\\p{N}_])(${hexColor}|${rgbColor}|${hslColor})`, \"giu\"),\n rgb: new RegExp(String.raw`(^|[^\\p{L}\\p{N}_])(${hexColor}|${rgbColor})`, \"giu\")\n };\n})();\nconst splitColors = (str, hsl = true) => {\n const pieces = [], re = regex[hsl ? \"full\" : \"rgb\"];\n re.lastIndex = 0;\n let mt = re.exec(str), lastIndex = 0;\n while (mt) {\n const index = mt.index + mt[1].length;\n if (index > lastIndex) {\n pieces.push([str.slice(lastIndex, index), lastIndex, index, false]);\n }\n ({ lastIndex } = re);\n pieces.push([mt[2], index, lastIndex, str[index - 1] !== \"&\" || !/^#\\d+$/u.test(mt[2])]);\n mt = re.exec(str);\n }\n if (str.length > lastIndex) {\n pieces.push([str.slice(lastIndex), lastIndex, str.length, false]);\n }\n return pieces;\n};\nconst loading = /* @__PURE__ */ new Map();\nconst loadScript = (src, globalConst, amd) => {\n if (loading.has(src)) {\n return loading.get(src);\n }\n const promise = new Promise((resolve) => {\n const path = /^https?:\\/\\//iu.test(src) ? src : `${CDN}/${src}`;\n let obj = globalThis;\n for (const prop of globalConst.split(\".\")) {\n obj = obj?.[prop];\n }\n if (obj) {\n resolve();\n } else if (amd && typeof define === \"function\" && \"amd\" in define) {\n const requirejs = globalThis.require;\n requirejs.config({ paths: { [globalConst]: path } });\n requirejs([globalConst], (exports) => {\n Object.assign(globalThis, { [globalConst]: exports });\n resolve();\n });\n } else {\n const script = document.createElement(\"script\");\n script.src = path;\n script.onload = () => {\n resolve();\n };\n document.head.append(script);\n }\n });\n loading.set(src, promise);\n return promise;\n};\nconst getObject = (key) => JSON.parse(String(localStorage.getItem(key)));\nconst setObject = (key, value) => {\n localStorage.setItem(key, JSON.stringify(value));\n};\nconst parseVersion = (version) => version.split(\".\", 3).map(Number);\nconst compareVersion = (version, baseVersion) => {\n const [major, minor] = parseVersion(version), [baseMajor, baseMinor] = parseVersion(baseVersion);\n return major > baseMajor || major === baseMajor && minor >= baseMinor;\n};\nconst setI18N = async (url, cur, languages, key, i18n = getObject(key) ?? {}) => {\n const { version, lang } = i18n, langs = Array.isArray(languages) ? languages : [languages];\n if (version === cur && langs.includes(lang)) {\n return i18n;\n }\n for (const language of langs) {\n try {\n const res = await fetch(`${url}/${language.toLowerCase()}.json`);\n Object.assign(i18n, await res.json(), { version: cur, lang: language });\n setObject(key, i18n);\n return i18n;\n } catch {\n }\n }\n throw new Error(`Failed to fetch the localization for ${langs[0]}.`);\n};\nlet configLoaded = false, i18nLoaded = false;\nconst getWikiparse = async (getConfig, langs) => {\n const dir = \"extensions/dist\";\n await loadScript(`npm/wikiparser-node/${dir}/base.min.js`, \"wikiparse\");\n await loadScript(`${wikiparse.CDN}/${dir}/lsp.min.js`, \"wikiparse.LanguageService\");\n if (!configLoaded && typeof getConfig === \"function\") {\n configLoaded = true;\n try {\n wikiparse.setConfig(await getConfig());\n } catch {\n }\n }\n if (!i18nLoaded && langs) {\n i18nLoaded = true;\n const key = \"wikiparse-i18n\", { version } = wikiparse;\n try {\n wikiparse.setI18N(await setI18N(`${wikiparse.CDN}/i18n`, version, langs, key));\n } catch {\n setObject(key, { version, lang: \"en\" });\n }\n }\n};\nconst lsps = /* @__PURE__ */ new WeakMap();\nconst getLSP = (obj, include, getConfig, lang) => {\n void getWikiparse(getConfig, lang);\n if (typeof wikiparse !== \"object\" || !wikiparse.LanguageService || lsps.has(obj)) {\n return lsps.get(obj);\n }\n const lsp = new wikiparse.LanguageService(include);\n lsps.set(obj, lsp);\n return lsp;\n};\nconst sanitizeInlineStyle = (style) => style.replace(/[{}]/gu, (p) => p === \"{\" ? \"{\" : \"}\");\nconst refreshStdout = (str) => {\n process.stdout.write(`\\x1B[K\\x1B[?7l${str}\\x1B[?7h\\r`);\n};\nfunction getRegex(f) {\n return (s) => {\n const regexp = new (typeof s === \"string\" ? Map : WeakMap)();\n if (regexp.has(s)) {\n const re2 = regexp.get(s);\n re2.lastIndex = 0;\n return re2;\n }\n const re = f(s);\n regexp.set(s, re);\n return re;\n };\n}\nconst getObjRegex = getRegex;\nexport {\n CDN,\n compareVersion,\n decodeHTML,\n getLSP,\n getObjRegex,\n getObject,\n getRegex,\n getWikiparse,\n loadScript,\n normalizeTitle,\n numToHex,\n rawurldecode,\n refreshStdout,\n sanitizeInlineStyle,\n setI18N,\n setObject,\n splitColors\n};\n", "import {getObject} from '@bhsd/common';\n\nconst {\n\twgPageName: page,\n\twgNamespaceNumber: ns,\n\twgPageContentModel: contentmodel,\n} = mw.config.get();\n\nconst CONTENTMODELS: Record<string, string> = {\n\t\twikitext: 'mediawiki',\n\t},\n\tEXTS: Record<string, string> = {\n\t\tcss: 'css',\n\t\tjs: 'javascript',\n\t\tjson: 'json',\n\t},\n\tNAMESPACES: Record<number, string> = {\n\t\t828: 'lua',\n\t\t274: 'html',\n\t};\n\n/**\n * 检查页面语言类型\n * @param value 页面内容\n */\nconst getPageMode = async (value: string): Promise<[string, (number | undefined)?, (string | undefined)?]> => {\n\tlet WikiplusPages;\n\tif (typeof _WikiplusPages === 'object') {\n\t\tWikiplusPages = _WikiplusPages;\n\t} else if (typeof Pages === 'object') {\n\t\tWikiplusPages = Pages;\n\t}\n\tif (WikiplusPages) {\n\t\tconst pages = Object.values(WikiplusPages)\n\t\t\t.filter(({sectionCache}) => Object.values(sectionCache).includes(value));\n\t\tif (pages.some(({title}) => !title.endsWith('/doc'))) {\n\t\t\tawait mw.loader.using('mediawiki.Title');\n\t\t}\n\t\tconst modes = new Set(pages.map(({title}) => {\n\t\t\tif (title.endsWith('/doc')) {\n\t\t\t\treturn 'template';\n\t\t\t}\n\t\t\tconst t = new mw.Title(title),\n\t\t\t\tnamespace = t.getNamespaceId();\n\t\t\tif (namespace % 2) {\n\t\t\t\treturn 'mediawiki';\n\t\t\t}\n\t\t\tconst mode = EXTS[t.getExtension()?.toLowerCase() ?? ''] ?? NAMESPACES[namespace];\n\t\t\tswitch (mode) {\n\t\t\t\tcase 'javascript':\n\t\t\t\t\treturn namespace === 8 || namespace === 2300 ? 'gadget' : mode;\n\t\t\t\tcase 'css':\n\t\t\t\t\treturn namespace === 2 || namespace === 8 || namespace === 2300 ? mode : 'sanitized-css';\n\t\t\t\tcase undefined:\n\t\t\t\t\treturn namespace === 10 || namespace === 2 ? 'template' : 'mediawiki';\n\t\t\t\tdefault:\n\t\t\t\t\treturn mode;\n\t\t\t}\n\t\t}));\n\t\tif (modes.size === 1) {\n\t\t\tconst [mode] = modes,\n\t\t\t\ttitle = pages.length === 1 ? pages[0]!.title : undefined;\n\t\t\tif (mode === 'gadget') {\n\t\t\t\treturn ['javascript', 8];\n\t\t\t}\n\t\t\treturn mode === 'template' ? ['mediawiki', 10, title] : [mode!, undefined, title];\n\t\t} else if (modes.size === 2) {\n\t\t\tif (modes.has('javascript') && modes.has('gadget')) {\n\t\t\t\treturn ['javascript'];\n\t\t\t} else if (modes.has('mediawiki') && modes.has('template')) {\n\t\t\t\treturn ['mediawiki'];\n\t\t\t}\n\t\t}\n\t}\n\tif (ns !== 274 && contentmodel !== 'Scribunto' || page.endsWith('/doc')) {\n\t\treturn [CONTENTMODELS[contentmodel] ?? contentmodel, contentmodel === 'javascript' ? ns : undefined];\n\t}\n\tawait mw.loader.using('oojs-ui-windows');\n\tif (\n\t\tawait OO.ui.confirm(mw.msg('cm-mw-contentmodel'), {\n\t\t\tactions: [{label: ns === 274 ? 'Widget' : 'Lua'}, {label: 'Wikitext', action: 'accept'}],\n\t\t})\n\t) {\n\t\treturn ['mediawiki'];\n\t}\n\treturn [ns === 274 ? 'html' : 'lua'];\n};\n\nconst submit = /** 提交编辑 */ (): true => {\n\t\tdocument.getElementById('Wikiplus-Quickedit-Submit')!.dispatchEvent(new MouseEvent('click'));\n\t\treturn true;\n\t},\n\tsubmitMinor = /** 提交小编辑 */ (): true => {\n\t\tdocument.querySelector<HTMLInputElement>('#Wikiplus-Quickedit-MinorEdit')!.checked = true;\n\t\treturn submit();\n\t},\n\tescapeEdit = /** 按下Esc键退出编辑 */ (): boolean => {\n\t\tconst settings: Record<string, unknown> | null = getObject('Wikiplus_Settings'),\n\t\t\tescToExitQuickEdit = settings && (settings['esc_to_exit_quickedit'] || settings['escToExitQuickEdit']);\n\t\tif (escToExitQuickEdit === true || escToExitQuickEdit === 'true') {\n\t\t\tdocument.getElementById('Wikiplus-Quickedit-Back')!.dispatchEvent(new MouseEvent('click'));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n/**\n * 渲染编辑器\n * @param target 目标编辑框\n * @param setting 是否是Wikiplus设置(使用json语法)\n */\nexport const renderEditor = async (target: HTMLTextAreaElement, setting: boolean): Promise<void> => {\n\tconst cm = await CodeMirror6.fromTextArea(\n\t\ttarget,\n\t\t...setting ? ['json'] satisfies [string] : await getPageMode(target.value),\n\t);\n\t(cm.view?.dom ?? cm.editor!.getDomNode()!).id = 'Wikiplus-CodeMirror';\n\n\tif (!setting) { // 普通Wikiplus编辑区\n\t\tif (cm.editor) {\n\t\t\t/* eslint-disable no-bitwise */\n\t\t\tcm.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, submit);\n\t\t\tcm.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KeyS, submitMinor);\n\t\t\t/* eslint-enable no-bitwise */\n\t\t\tcm.editor.addCommand(monaco.KeyCode.Escape, escapeEdit);\n\t\t} else {\n\t\t\tcm.extraKeys([\n\t\t\t\t{key: 'Mod-S', run: submit},\n\t\t\t\t{key: 'Shift-Mod-S', run: submitMinor},\n\t\t\t\t{key: 'Esc', run: escapeEdit},\n\t\t\t]);\n\t\t}\n\t}\n\n\tconst jump = document.querySelector<HTMLAnchorElement>('#Wikiplus-Quickedit-Jump > a');\n\tif (jump) {\n\t\tjump.href = '#Wikiplus-CodeMirror';\n\t}\n};\n", "/**\n * @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展\n * @author Bhsd <https://github.com/bhsd-harry>\n * @license GPL-3.0\n */\nimport {CDN} from '@bhsd/common';\nimport {renderEditor} from './core';\n\ndeclare namespace mediaWiki.libs {\n\tlet wphl: {version?: string, cmVersion?: string} | undefined;\n}\n\n(async () => {\n\tconst {libs} = mediaWiki,\n\t\t{wphl} = libs;\n\tif (!wphl?.version) {\n\t\tconst version = '3.2.7';\n\t\tlibs.wphl = {version, ...wphl}; // 开始加载\n\n\t\t// 路径\n\t\tconst MW_CDN = `npm/@bhsd/codemirror-mediawiki@${libs.wphl.cmVersion ?? 'latest'}/dist/wiki.min.js`,\n\t\t\tREPO_CDN = 'npm/wikiplus-highlight';\n\n\t\tif (typeof CodeMirror6 !== 'function') {\n\t\t\tawait $.ajax(`${CDN}/${MW_CDN}`, {dataType: 'script'});\n\t\t}\n\n\t\t// 监视 Wikiplus 编辑框\n\t\tconst observer = new MutationObserver(records => {\n\t\t\tconst selector = '#Wikiplus-Quickedit, #Wikiplus-Setting-Input',\n\t\t\t\t[added] = $(records.flatMap(({addedNodes}) => [...addedNodes])).find<HTMLTextAreaElement>(selector);\n\t\t\tif (added) {\n\t\t\t\tvoid renderEditor(added, added.id === 'Wikiplus-Setting-Input');\n\t\t\t}\n\t\t\tconst [removed] = $(records.flatMap(({removedNodes}) => [...removedNodes]))\n\t\t\t\t\t.find<HTMLTextAreaElement>(selector),\n\t\t\t\tcm = CodeMirror6.instances?.get(removed!);\n\t\t\tif (typeof cm?.destroy === 'function') {\n\t\t\t\tcm.destroy();\n\t\t\t}\n\t\t\tObject.assign(globalThis, {records});\n\t\t});\n\t\tobserver.observe(document.body, {childList: true});\n\n\t\tmw.loader.load(`${CDN}/${REPO_CDN}@${version}/styles.min.css`, 'text/css');\n\t}\n})();\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["CDN", "getObject", "key", "page", "ns", "contentmodel", "CONTENTMODELS", "EXTS", "NAMESPACES", "getPageMode", "value", "_a", "WikiplusPages", "pages", "sectionCache", "title", "modes", "_b", "_c", "t", "namespace", "mode", "submit", "submitMinor", "escapeEdit", "settings", "
|
|
3
|
+
"sources": ["../../build/Wikiplus-highlight/main.js"],
|
|
4
|
+
"sourcesContent": ["// ../code-standard/dist/index.mjs\nvar CDN = \"https://testingcf.jsdelivr.net\";\nvar getObject = (key) => JSON.parse(String(localStorage.getItem(key)));\n\n// src/core.ts\nvar {\n wgPageName: page,\n wgNamespaceNumber: ns,\n wgPageContentModel: contentmodel\n} = mw.config.get();\nvar CONTENTMODELS = {\n wikitext: \"mediawiki\"\n};\nvar EXTS = {\n css: \"css\",\n js: \"javascript\",\n json: \"json\"\n};\nvar NAMESPACES = {\n 828: \"lua\",\n 274: \"html\"\n};\nvar getPageMode = async (value) => {\n let WikiplusPages;\n if (typeof _WikiplusPages === \"object\") {\n WikiplusPages = _WikiplusPages;\n } else if (typeof Pages === \"object\") {\n WikiplusPages = Pages;\n }\n if (WikiplusPages) {\n const pages = Object.values(WikiplusPages).filter(({ sectionCache }) => Object.values(sectionCache).includes(value));\n if (pages.some(({ title }) => !title.endsWith(\"/doc\"))) {\n await mw.loader.using(\"mediawiki.Title\");\n }\n const modes = new Set(pages.map(({ title }) => {\n if (title.endsWith(\"/doc\")) {\n return \"template\";\n }\n const t = new mw.Title(title), namespace = t.getNamespaceId();\n if (namespace % 2) {\n return \"mediawiki\";\n }\n const mode = EXTS[t.getExtension()?.toLowerCase() ?? \"\"] ?? NAMESPACES[namespace];\n switch (mode) {\n case \"javascript\":\n return namespace === 8 || namespace === 2300 ? \"gadget\" : mode;\n case \"css\":\n return namespace === 2 || namespace === 8 || namespace === 2300 ? mode : \"sanitized-css\";\n case void 0:\n return namespace === 10 || namespace === 2 ? \"template\" : \"mediawiki\";\n default:\n return mode;\n }\n }));\n if (modes.size === 1) {\n const [mode] = modes, title = pages.length === 1 ? pages[0].title : void 0;\n if (mode === \"gadget\") {\n return [\"javascript\", 8];\n }\n return mode === \"template\" ? [\"mediawiki\", 10, title] : [mode, void 0, title];\n } else if (modes.size === 2) {\n if (modes.has(\"javascript\") && modes.has(\"gadget\")) {\n return [\"javascript\"];\n } else if (modes.has(\"mediawiki\") && modes.has(\"template\")) {\n return [\"mediawiki\"];\n }\n }\n }\n if (ns !== 274 && contentmodel !== \"Scribunto\" || page.endsWith(\"/doc\")) {\n return [CONTENTMODELS[contentmodel] ?? contentmodel, contentmodel === \"javascript\" ? ns : void 0];\n }\n await mw.loader.using(\"oojs-ui-windows\");\n if (await OO.ui.confirm(mw.msg(\"cm-mw-contentmodel\"), {\n actions: [{ label: ns === 274 ? \"Widget\" : \"Lua\" }, { label: \"Wikitext\", action: \"accept\" }]\n })) {\n return [\"mediawiki\"];\n }\n return [ns === 274 ? \"html\" : \"lua\"];\n};\nvar submit = (\n /** 提交编辑 */\n () => {\n document.getElementById(\"Wikiplus-Quickedit-Submit\").dispatchEvent(new MouseEvent(\"click\"));\n return true;\n }\n);\nvar submitMinor = (\n /** 提交小编辑 */\n () => {\n document.querySelector(\"#Wikiplus-Quickedit-MinorEdit\").checked = true;\n return submit();\n }\n);\nvar escapeEdit = (\n /** 按下Esc键退出编辑 */\n () => {\n const settings = getObject(\"Wikiplus_Settings\"), escToExitQuickEdit = settings && (settings[\"esc_to_exit_quickedit\"] || settings[\"escToExitQuickEdit\"]);\n if (escToExitQuickEdit === true || escToExitQuickEdit === \"true\") {\n document.getElementById(\"Wikiplus-Quickedit-Back\").dispatchEvent(new MouseEvent(\"click\"));\n return true;\n }\n return false;\n }\n);\nvar renderEditor = async (target, setting) => {\n const cm = await CodeMirror6.fromTextArea(\n target,\n ...setting ? [\"json\"] : await getPageMode(target.value)\n );\n (cm.view?.dom ?? cm.editor.getDomNode()).id = \"Wikiplus-CodeMirror\";\n if (!setting) {\n if (cm.editor) {\n cm.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, submit);\n cm.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KeyS, submitMinor);\n cm.editor.addCommand(monaco.KeyCode.Escape, escapeEdit);\n } else {\n cm.extraKeys([\n { key: \"Mod-S\", run: submit },\n { key: \"Shift-Mod-S\", run: submitMinor },\n { key: \"Esc\", run: escapeEdit }\n ]);\n }\n }\n const jump = document.querySelector(\"#Wikiplus-Quickedit-Jump > a\");\n if (jump) {\n jump.href = \"#Wikiplus-CodeMirror\";\n }\n};\n\n// src/main.ts\n(async () => {\n const { libs } = mediaWiki, { wphl } = libs;\n if (!wphl?.version) {\n const version = \"3.2.8\";\n libs.wphl = { version, ...wphl };\n const MW_CDN = `npm/@bhsd/codemirror-mediawiki@${libs.wphl.cmVersion ?? \"latest\"}/dist/wiki.min.js`, REPO_CDN = \"npm/wikiplus-highlight\";\n if (typeof CodeMirror6 !== \"function\") {\n await $.ajax(`${CDN}/${MW_CDN}`, { dataType: \"script\", cache: true });\n }\n const observer = new MutationObserver((records) => {\n const selector = \"#Wikiplus-Quickedit, #Wikiplus-Setting-Input\", [added] = $(records.flatMap(({ addedNodes }) => [...addedNodes])).find(selector);\n if (added) {\n void renderEditor(added, added.id === \"Wikiplus-Setting-Input\");\n }\n const [removed] = $(records.flatMap(({ removedNodes }) => [...removedNodes])).find(selector), cm = CodeMirror6.instances?.get(removed);\n if (typeof cm?.destroy === \"function\") {\n cm.destroy();\n }\n Object.assign(globalThis, { records });\n });\n observer.observe(document.body, { childList: true });\n mw.loader.load(`${CDN}/${REPO_CDN}@${version}/styles.min.css`, \"text/css\");\n }\n})();\n/**\n * @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展\n * @author Bhsd <https://github.com/bhsd-harry>\n * @license GPL-3.0\n */\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CDN", "getObject", "key", "page", "ns", "contentmodel", "CONTENTMODELS", "EXTS", "NAMESPACES", "getPageMode", "value", "_a", "WikiplusPages", "pages", "sectionCache", "title", "modes", "_b", "_c", "t", "namespace", "mode", "submit", "submitMinor", "escapeEdit", "settings", "escToExitQuickEdit", "renderEditor", "target", "setting", "cm", "jump", "libs", "wphl", "version", "MW_CDN", "REPO_CDN", "records", "selector", "added", "addedNodes", "removed", "removedNodes"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wikiplus-highlight",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.8",
|
|
4
4
|
"description": "A plugin for the MediaWiki front-end add-on \"Wikiplus\"",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mediawiki",
|
|
@@ -27,15 +27,16 @@
|
|
|
27
27
|
"lint:ts": "tsc --noEmit && eslint --cache .",
|
|
28
28
|
"lint:css": "stylelint *.css",
|
|
29
29
|
"lint": "npm run lint:ts && npm run lint:css",
|
|
30
|
-
"
|
|
30
|
+
"bundle": "esbuild ./src/main.ts --charset=utf8 --bundle --format=esm --outfile=build/main.js",
|
|
31
|
+
"build": "npm run bundle && esbuild ./build/main.js --charset=utf8 --minify --target=es2019 --format=iife --sourcemap --outfile=dist/main.min.js && eslint --no-eslintrc -c .eslintrc.dist.cjs dist/*.js"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
|
-
"@bhsd/codemirror-mediawiki": "^2.
|
|
34
|
-
"@bhsd/common": "^0.
|
|
34
|
+
"@bhsd/codemirror-mediawiki": "^2.30.0",
|
|
35
|
+
"@bhsd/common": "^0.14.1",
|
|
35
36
|
"@stylistic/eslint-plugin": "^3.1.0",
|
|
36
37
|
"@stylistic/stylelint-plugin": "^3.1.2",
|
|
37
38
|
"@types/jquery": "^3.5.32",
|
|
38
|
-
"@types/node": "^
|
|
39
|
+
"@types/node": "^24.0.8",
|
|
39
40
|
"@types/oojs-ui": "^0.49.4",
|
|
40
41
|
"@typescript-eslint/eslint-plugin": "^8.29.0",
|
|
41
42
|
"@typescript-eslint/parser": "^8.29.0",
|
|
@@ -43,13 +44,13 @@
|
|
|
43
44
|
"eslint": "^8.57.1",
|
|
44
45
|
"eslint-plugin-es-x": "^8.4.1",
|
|
45
46
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
46
|
-
"eslint-plugin-jsdoc": "^
|
|
47
|
+
"eslint-plugin-jsdoc": "^51.3.1",
|
|
47
48
|
"eslint-plugin-json-es": "^1.6.0",
|
|
48
49
|
"eslint-plugin-promise": "^7.2.1",
|
|
49
50
|
"eslint-plugin-regexp": "^2.7.0",
|
|
50
51
|
"eslint-plugin-unicorn": "^56.0.1",
|
|
51
52
|
"monaco-editor": "^0.52.2",
|
|
52
|
-
"stylelint": "^16.
|
|
53
|
+
"stylelint": "^16.21.1",
|
|
53
54
|
"stylelint-config-recommended": "^16.0.0",
|
|
54
55
|
"types-mediawiki": "^1.9.1",
|
|
55
56
|
"typescript": "^5.8.2"
|