wikiplus-highlight 3.2.4 → 3.2.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/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/wikiplus-highlight.svg)](https://www.npmjs.com/package/wikiplus-highlight)
4
4
  [![CodeQL](https://github.com/bhsd-harry/Wikiplus-highlight/actions/workflows/codeql.yml/badge.svg)](https://github.com/bhsd-harry/Wikiplus-highlight/actions/workflows/codeql.yml)
5
+ [![jsDelivr hits (npm)](https://img.shields.io/jsdelivr/npm/hm/wikiplus-highlight)](https://www.npmjs.com/package/wikiplus-highlight)
6
+ [![codebeat badge](https://codebeat.co/badges/6dba86ca-1474-4a72-8d08-9cb1b828496a)](https://codebeat.co/projects/github-com-bhsd-harry-wikiplus-highlight-main)
5
7
 
6
8
  **Wikiplus-highlight** 是由 Bhsd 编写的一款 [Wikiplus](https://github.com/Wikiplus/Wikiplus) 语法高亮插件,它主要基于 MediaWiki 内置的 [JavaScript 模块](https://www.mediawiki.org/wiki/ResourceLoader/Core_modules)和 [CodeMirror](https://codemirror.net/) 编写。
7
9
 
package/dist/main.min.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var N=Object.create;var y=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var D=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of I(t))!K.call(e,i)&&i!==r&&y(e,i,{get:()=>t[i],enumerable:!(s=L(t,i))||s.enumerable});return e};var v=(e,t,r)=>(r=e!=null?N(A(e)):{},D(t||!e||!e.__esModule?y(r,"default",{value:e,enumerable:!0}):r,e));var f=R((de,O)=>{"use strict";var g=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,B=Object.getOwnPropertyNames,H=Object.prototype.hasOwnProperty,q=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},z=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of B(t))!H.call(e,i)&&i!==r&&g(e,i,{get:()=>t[i],enumerable:!(s=Q(t,i))||s.enumerable});return e},J=e=>z(g({},"__esModule",{value:!0}),e),E={};q(E,{CDN:()=>x,getObject:()=>ee,loadScript:()=>Z,normalizeTitle:()=>U,numToHex:()=>X,parseVersion:()=>ie,rawurldecode:()=>_,setObject:()=>te,splitColors:()=>Y});O.exports=J(E);var x="https://testingcf.jsdelivr.net",M=String.raw`#(?:[\da-f]{3,4}|(?:[\da-f]{2}){3,4})(?![\p{L}\d_])`,d=String.raw`(?:\d*\.)?\d+%?`,j=String.raw`(?:\d*\.)?\d+(?:deg|grad|rad|turn)?`,C=String.raw`rgba?\(\s*(?:${String.raw`${new Array(3).fill(d).join(String.raw`\s+`)}(?:\s*\/\s*${d})?`}|${String.raw`${new Array(3).fill(d).join(String.raw`\s*,\s*`)}(?:\s*,\s*${d})?`})\s*\)`,V=String.raw`hsla?\(\s*(?:${String.raw`${j}\s+${d}\s+${d}(?:\s*\/\s*${d})?`}|${String.raw`${j}${String.raw`\s*,\s*(?:\d*\.)?\d+%`.repeat(2)}(?:\s*,\s*${d})?`})\s*\)`,F=new RegExp(String.raw`(^|[^\p{L}\d_])(${M}|${C}|${V})`,"giu"),G=new RegExp(String.raw`(^|[^\p{L}\d_])(${M}|${C})`,"giu"),p;typeof document=="object"&&(p=document.createElement("span"));var _=e=>decodeURIComponent(e.replace(/%(?![\da-f]{2})/giu,"%25")),U=e=>{let t=_(e);return/[<>[\]|{}]/u.test(t)?t:(p.innerHTML=t,p.textContent)},X=e=>Math.round(e*255).toString(16).padStart(2,"0"),Y=(e,t=!0)=>{let r=[],s=t?F:G;s.lastIndex=0;let i=s.exec(e),n=0;for(;i;){let o=i.index+i[1].length;o>n&&r.push([e.slice(n,o),n,o,!1]),{lastIndex:n}=s,r.push([i[2],o,n,!0]),i=s.exec(e)}return e.length>n&&r.push([e.slice(n),n,e.length,!1]),r},Z=(e,t,r)=>new Promise(s=>{let i=`${x}/${e}`,n=globalThis;for(let o of t.split("."))n=n==null?void 0:n[o];if(n)s();else if(r&&typeof define=="function"&&"amd"in define){let o=globalThis.require;o.config({paths:{[t]:i}}),o([t],a=>{Object.assign(globalThis,{[t]:a}),s()})}else{let o=document.createElement("script");o.src=i,o.onload=()=>{s()},document.head.append(o)}}),ee=e=>JSON.parse(String(localStorage.getItem(e))),te=(e,t)=>{localStorage.setItem(e,JSON.stringify(t))},ie=e=>e.split(".",3).map(Number)});var k=v(f());var h=v(f()),{wgPageName:re,wgNamespaceNumber:u,wgPageContentModel:m}=mw.config.get(),ne={"sanitized-css":"css",wikitext:"mediawiki"},se={css:"css",js:"javascript",json:"json"},oe={828:"lua",274:"html"},ae=async e=>{var r;let t;if(typeof _WikiplusPages=="object"?t=_WikiplusPages:typeof Pages=="object"&&(t=Pages),t){let s=Object.values(t).filter(({sectionCache:n})=>Object.values(n).includes(e));s.some(({title:n})=>!n.endsWith("/doc"))&&await mw.loader.using("mediawiki.Title");let i=new Set(s.map(({title:n})=>{var l,b,S;if(n.endsWith("/doc"))return"template";let o=new mw.Title(n),a=o.getNamespaceId();if(a%2)return"mediawiki";let c=(S=se[(b=(l=o.getExtension())==null?void 0:l.toLowerCase())!=null?b:""])!=null?S:oe[a];return c?c==="javascript"&&(a===8||a===2300)?"gadget":c:a===10||a===2?"template":"mediawiki"}));if(i.size===1){let[n]=i,o=s.length===1?s[0].title:void 0;return n==="gadget"?["javascript",8]:n==="template"?["mediawiki",10,o]:[n,void 0,o]}else if(i.size===2){if(i.has("javascript")&&i.has("gadget"))return["javascript"];if(i.has("mediawiki")&&i.has("template"))return["mediawiki"]}}return u!==274&&m!=="Scribunto"||re.endsWith("/doc")?[(r=ne[m])!=null?r:m,m==="javascript"?u:void 0]:(await mw.loader.using("oojs-ui-windows"),await OO.ui.confirm(mw.msg("cm-mw-contentmodel"),{actions:[{label:u===274?"Widget":"Lua"},{label:"Wikitext",action:"accept"}]})?["mediawiki"]:[u===274?"html":"lua"])},w=()=>(document.getElementById("Wikiplus-Quickedit-Submit").dispatchEvent(new MouseEvent("click")),!0),T=()=>(document.querySelector("#Wikiplus-Quickedit-MinorEdit").checked=!0,w()),P=()=>{let e=(0,h.getObject)("Wikiplus_Settings"),t=e&&(e.esc_to_exit_quickedit||e.escToExitQuickEdit);return t===!0||t==="true"?(document.getElementById("Wikiplus-Quickedit-Back").dispatchEvent(new MouseEvent("click")),!0):!1},W=async(e,t)=>{var a,c;let r=await CodeMirror6.fromTextArea(e[0],...t?["json"]:await ae(e.val()));((c=(a=r.view)==null?void 0:a.dom)!=null?c:r.editor.getDomNode()).id="Wikiplus-CodeMirror",t||(r.editor?(r.editor.addCommand(monaco.KeyMod.CtrlCmd|monaco.KeyCode.KeyS,w),r.editor.addCommand(monaco.KeyMod.CtrlCmd|monaco.KeyMod.Shift|monaco.KeyCode.KeyS,T),r.editor.addCommand(monaco.KeyCode.Escape,P)):r.extraKeys([{key:"Mod-S",run:w},{key:"Shift-Mod-S",run:T},{key:"Esc",run:P}]));let s="Wikiplus-highlight-addons",i=(0,h.getObject)(s),n={activeLine:"highlightActiveLine",trailingspace:"highlightTrailingWhitespace",matchBrackets:"bracketMatching",closeBrackets:"closeBrackets",matchTags:"tagMatching",fold:"codeFolding",wikiEditor:"wikiEditor",escape:"escape",contextmenu:"openLinks",lint:"lint"};localStorage.removeItem(s),i&&r.prefer(Object.fromEntries(i.filter(l=>l in n).map(l=>[n[l],!0])));let o=document.querySelector("#Wikiplus-Quickedit-Jump > a");o&&(o.href="#Wikiplus-CodeMirror")};(async()=>{let{libs:e}=mw,{wphl:t}=e;if(!(t!=null&&t.version)){let r="3.2.4";e.wphl={version:r,...t};let s=`npm/@bhsd/codemirror-mediawiki@${e.wphl.cmVersion||"latest"}/dist/wiki.min.js`,i="npm/wikiplus-highlight";"CodeMirror6"in globalThis||await $.ajax(`${k.CDN}/${s}`,{dataType:"script"}),new MutationObserver(o=>{let a=$(o.flatMap(({addedNodes:c})=>[...c])).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");a.length>0&&W(a,a.attr("id")==="Wikiplus-Setting-Input")}).observe(document.body,{childList:!0}),mediaWiki.loader.load(`${k.CDN}/${i}@${r}/styles.min.css`,"text/css")}})();})();
1
+ "use strict";(()=>{var u="https://testingcf.jsdelivr.net",b;typeof document=="object"&&(b=document.createElement("span"));var w=t=>JSON.parse(String(localStorage.getItem(t)));var{wgPageName:E,wgNamespaceNumber:c,wgPageContentModel:l}=mw.config.get(),y={"sanitized-css":"css",wikitext:"mediawiki"},j={css:"css",js:"javascript",json:"json"},M={828:"lua",274:"html"},x=async t=>{var n;let e;if(typeof _WikiplusPages=="object"?e=_WikiplusPages:typeof Pages=="object"&&(e=Pages),e){let o=Object.values(e).filter(({sectionCache:i})=>Object.values(i).includes(t));o.some(({title:i})=>!i.endsWith("/doc"))&&await mw.loader.using("mediawiki.Title");let r=new Set(o.map(({title:i})=>{var p,g,f;if(i.endsWith("/doc"))return"template";let a=new mw.Title(i),s=a.getNamespaceId();if(s%2)return"mediawiki";let d=(f=j[(g=(p=a.getExtension())==null?void 0:p.toLowerCase())!=null?g:""])!=null?f:M[s];return d?d==="javascript"&&(s===8||s===2300)?"gadget":d:s===10||s===2?"template":"mediawiki"}));if(r.size===1){let[i]=r,a=o.length===1?o[0].title:void 0;return i==="gadget"?["javascript",8]:i==="template"?["mediawiki",10,a]:[i,void 0,a]}else if(r.size===2){if(r.has("javascript")&&r.has("gadget"))return["javascript"];if(r.has("mediawiki")&&r.has("template"))return["mediawiki"]}}return c!==274&&l!=="Scribunto"||E.endsWith("/doc")?[(n=y[l])!=null?n:l,l==="javascript"?c:void 0]:(await mw.loader.using("oojs-ui-windows"),await OO.ui.confirm(mw.msg("cm-mw-contentmodel"),{actions:[{label:c===274?"Widget":"Lua"},{label:"Wikitext",action:"accept"}]})?["mediawiki"]:[c===274?"html":"lua"])},m=()=>(document.getElementById("Wikiplus-Quickedit-Submit").dispatchEvent(new MouseEvent("click")),!0),h=()=>(document.querySelector("#Wikiplus-Quickedit-MinorEdit").checked=!0,m()),k=()=>{let t=w("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 r,i;let n=await CodeMirror6.fromTextArea(t[0],...e?["json"]:await x(t.val()));((i=(r=n.view)==null?void 0:r.dom)!=null?i:n.editor.getDomNode()).id="Wikiplus-CodeMirror",e||(n.editor?(n.editor.addCommand(monaco.KeyMod.CtrlCmd|monaco.KeyCode.KeyS,m),n.editor.addCommand(monaco.KeyMod.CtrlCmd|monaco.KeyMod.Shift|monaco.KeyCode.KeyS,h),n.editor.addCommand(monaco.KeyCode.Escape,k)):n.extraKeys([{key:"Mod-S",run:m},{key:"Shift-Mod-S",run:h},{key:"Esc",run:k}]));let o=document.querySelector("#Wikiplus-Quickedit-Jump > a");o&&(o.href="#Wikiplus-CodeMirror")};(async()=>{let{libs:t}=mw,{wphl:e}=t;if(!(e!=null&&e.version)){let n="3.2.5";t.wphl={version:n,...e};let o=`npm/@bhsd/codemirror-mediawiki@${t.wphl.cmVersion||"latest"}/dist/wiki.min.js`,r="npm/wikiplus-highlight";"CodeMirror6"in globalThis||await $.ajax(`${u}/${o}`,{dataType:"script"}),new MutationObserver(a=>{let s=$(a.flatMap(({addedNodes:d})=>[...d])).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");s.length>0&&S(s,s.attr("id")==="Wikiplus-Setting-Input")}).observe(document.body,{childList:!0}),mediaWiki.loader.load(`${u}/${r}@${n}/styles.min.css`,"text/css")}})();})();
2
2
  /**
3
3
  * @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展
4
4
  * @author Bhsd <https://github.com/bhsd-harry>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../code-standard/dist/index.js", "../src/main.ts", "../src/core.ts"],
4
- "sourcesContent": ["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n CDN: () => CDN,\n getObject: () => getObject,\n loadScript: () => loadScript,\n normalizeTitle: () => normalizeTitle,\n numToHex: () => numToHex,\n parseVersion: () => parseVersion,\n rawurldecode: () => rawurldecode,\n setObject: () => setObject,\n splitColors: () => splitColors\n});\nmodule.exports = __toCommonJS(src_exports);\nconst CDN = \"https://testingcf.jsdelivr.net\";\nconst hexColor = String.raw`#(?:[\\da-f]{3,4}|(?:[\\da-f]{2}){3,4})(?![\\p{L}\\d_])`, 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*\\)`, reFull = new RegExp(String.raw`(^|[^\\p{L}\\d_])(${hexColor}|${rgbColor}|${hslColor})`, \"giu\"), reRGB = new RegExp(String.raw`(^|[^\\p{L}\\d_])(${hexColor}|${rgbColor})`, \"giu\");\nlet span;\nif (typeof document === \"object\") {\n span = document.createElement(\"span\");\n}\nconst rawurldecode = (str) => decodeURIComponent(str.replace(/%(?![\\da-f]{2})/giu, \"%25\"));\nconst normalizeTitle = (title) => {\n const decoded = rawurldecode(title);\n if (/[<>[\\]|{}]/u.test(decoded)) {\n return decoded;\n }\n span.innerHTML = decoded;\n return span.textContent;\n};\nconst numToHex = (d) => Math.round(d * 255).toString(16).padStart(2, \"0\");\nconst splitColors = (str, hsl = true) => {\n const pieces = [], re = hsl ? reFull : reRGB;\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, true]);\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 loadScript = (src, globalConst, amd) => new Promise((resolve) => {\n const path = `${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});\nconst getObject = (key) => JSON.parse(String(localStorage.getItem(key)));\nconst setObject = (key, value) => {\n localStorage.setItem(key, JSON.stringify(value));\n};\nconst parseVersion = (v) => v.split(\".\", 3).map(Number);\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 mw.libs {\n\tlet wphl: {version?: string, cmVersion?: string} | undefined;\n}\n\n(async () => {\n\tconst {libs} = mw,\n\t\t{wphl} = libs;\n\tif (!wphl?.version) {\n\t\tconst version = '3.2.4';\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 (!('CodeMirror6' in globalThis)) {\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 $editArea = $(records.flatMap(({addedNodes}) => [...addedNodes]))\n\t\t\t\t.find<HTMLTextAreaElement>('#Wikiplus-Quickedit, #Wikiplus-Setting-Input');\n\t\t\tif ($editArea.length > 0) {\n\t\t\t\tvoid renderEditor($editArea, $editArea.attr('id') === 'Wikiplus-Setting-Input');\n\t\t\t}\n\t\t});\n\t\tobserver.observe(document.body, {childList: true});\n\n\t\tmediaWiki.loader.load(`${CDN}/${REPO_CDN}@${version}/styles.min.css`, 'text/css');\n\t}\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\t'sanitized-css': 'css',\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\tif (mode) {\n\t\t\t\treturn mode === 'javascript' && (namespace === 8 || namespace === 2300) ? 'gadget' : mode;\n\t\t\t}\n\t\t\treturn namespace === 10 || namespace === 2 ? 'template' : 'mediawiki';\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: JQuery<HTMLTextAreaElement>, setting: boolean): Promise<void> => {\n\tconst cm = await CodeMirror6.fromTextArea(\n\t\t$target[0]!,\n\t\t...setting ? ['json'] as [string] : await getPageMode($target.val()!),\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\t/** @todo 以下过渡代码添加于2024-02-07,将于一段时间后弃用 */\n\tconst oldKey = 'Wikiplus-highlight-addons',\n\t\toldPrefs: string[] | null = getObject(oldKey),\n\t\tmapping: Record<string, string> = {\n\t\t\tactiveLine: 'highlightActiveLine',\n\t\t\ttrailingspace: 'highlightTrailingWhitespace',\n\t\t\tmatchBrackets: 'bracketMatching',\n\t\t\tcloseBrackets: 'closeBrackets',\n\t\t\tmatchTags: 'tagMatching',\n\t\t\tfold: 'codeFolding',\n\t\t\twikiEditor: 'wikiEditor',\n\t\t\tescape: 'escape',\n\t\t\tcontextmenu: 'openLinks',\n\t\t\tlint: 'lint',\n\t\t};\n\tlocalStorage.removeItem(oldKey);\n\tif (oldPrefs) {\n\t\tcm.prefer(Object.fromEntries(oldPrefs.filter(k => k in mapping).map(k => [mapping[k]!, true])));\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"],
5
- "mappings": "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",
6
- "names": ["require_dist", "__commonJSMin", "exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "target", "all", "name", "__copyProps", "to", "from", "except", "desc", "key", "__toCommonJS", "mod", "src_exports", "CDN", "getObject", "loadScript", "normalizeTitle", "numToHex", "parseVersion", "rawurldecode", "setObject", "splitColors", "hexColor", "rgbValue", "hue", "rgbColor", "hslColor", "reFull", "reRGB", "span", "str", "title", "decoded", "d", "hsl", "pieces", "re", "mt", "lastIndex", "index", "src", "globalConst", "amd", "resolve", "path", "obj", "prop", "requirejs", "script", "value", "v", "import_common", "import_common", "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", "oldKey", "oldPrefs", "mapping", "k", "jump", "libs", "wphl", "version", "MW_CDN", "REPO_CDN", "records", "$editArea", "addedNodes", "renderEditor"]
3
+ "sources": ["../../code-standard/dist/index.mjs", "../src/core.ts", "../src/main.ts"],
4
+ "sourcesContent": ["const CDN = \"https://testingcf.jsdelivr.net\";\nlet span;\nif (typeof document === \"object\") {\n span = document.createElement(\"span\");\n}\nconst rawurldecode = (str) => decodeURIComponent(str.replace(/%(?![\\da-f]{2})/giu, \"%25\"));\nconst normalizeTitle = (title) => {\n const decoded = rawurldecode(title);\n if (/[<>[\\]|{}]/u.test(decoded)) {\n return decoded;\n }\n span.innerHTML = decoded;\n return span.textContent;\n};\nconst numToHex = (d) => Math.round(d * 255).toString(16).padStart(2, \"0\");\nconst splitColors = (str, hsl = true) => {\n const hexColor = String.raw`#(?:[\\da-f]{3,4}|(?:[\\da-f]{2}){3,4})(?![\\p{L}\\d_])`, 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*\\)`, reFull = new RegExp(String.raw`(^|[^\\p{L}\\d_])(${hexColor}|${rgbColor}|${hslColor})`, \"giu\"), reRGB = new RegExp(String.raw`(^|[^\\p{L}\\d_])(${hexColor}|${rgbColor})`, \"giu\"), pieces = [], re = hsl ? reFull : reRGB;\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, true]);\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 loadScript = (src, globalConst, amd) => new Promise((resolve) => {\n const path = `${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});\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};\nexport {\n CDN,\n compareVersion,\n getObject,\n loadScript,\n normalizeTitle,\n numToHex,\n rawurldecode,\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\t'sanitized-css': 'css',\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\tif (mode) {\n\t\t\t\treturn mode === 'javascript' && (namespace === 8 || namespace === 2300) ? 'gadget' : mode;\n\t\t\t}\n\t\t\treturn namespace === 10 || namespace === 2 ? 'template' : 'mediawiki';\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: JQuery<HTMLTextAreaElement>, setting: boolean): Promise<void> => {\n\tconst cm = await CodeMirror6.fromTextArea(\n\t\t$target[0]!,\n\t\t...setting ? ['json'] satisfies [string] : await getPageMode($target.val()!),\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 mw.libs {\n\tlet wphl: {version?: string, cmVersion?: string} | undefined;\n}\n\n(async () => {\n\tconst {libs} = mw,\n\t\t{wphl} = libs;\n\tif (!wphl?.version) {\n\t\tconst version = '3.2.5';\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 (!('CodeMirror6' in globalThis)) {\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 $editArea = $(records.flatMap(({addedNodes}) => [...addedNodes]))\n\t\t\t\t.find<HTMLTextAreaElement>('#Wikiplus-Quickedit, #Wikiplus-Setting-Input');\n\t\t\tif ($editArea.length > 0) {\n\t\t\t\tvoid renderEditor($editArea, $editArea.attr('id') === 'Wikiplus-Setting-Input');\n\t\t\t}\n\t\t});\n\t\tobserver.observe(document.body, {childList: true});\n\n\t\tmediaWiki.loader.load(`${CDN}/${REPO_CDN}@${version}/styles.min.css`, 'text/css');\n\t}\n})();\n"],
5
+ "mappings": "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",
6
+ "names": ["CDN", "span", "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", "getObject", "escToExitQuickEdit", "renderEditor", "$target", "setting", "cm", "jump", "libs", "wphl", "version", "MW_CDN", "REPO_CDN", "CDN", "records", "$editArea", "addedNodes", "renderEditor"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wikiplus-highlight",
3
- "version": "3.2.4",
3
+ "version": "3.2.5",
4
4
  "description": "A plugin for the MediaWiki front-end add-on \"Wikiplus\"",
5
5
  "keywords": [
6
6
  "mediawiki",
@@ -23,17 +23,19 @@
23
23
  "url": "git+https://github.com/bhsd-harry/Wikiplus-highlight.git"
24
24
  },
25
25
  "scripts": {
26
+ "prepublishOnly": "npm run build",
26
27
  "lint:ts": "tsc --noEmit && eslint --cache .",
27
28
  "lint:css": "stylelint *.css",
28
29
  "lint": "npm run lint:ts && npm run lint:css",
29
30
  "build": "esbuild ./src/main.ts --charset=utf8 --bundle --minify --target=es2019 --format=iife --sourcemap --outfile=dist/main.min.js && eslint --no-eslintrc -c .eslintrc.dist.cjs dist/*.js"
30
31
  },
31
32
  "devDependencies": {
32
- "@bhsd/codemirror-mediawiki": "^2.18.9",
33
- "@bhsd/common": "^0.4.6",
33
+ "@bhsd/codemirror-mediawiki": "^2.20.1",
34
+ "@bhsd/common": "^0.6.0",
34
35
  "@stylistic/eslint-plugin": "^2.11.0",
35
36
  "@stylistic/stylelint-plugin": "^3.1.1",
36
37
  "@types/jquery": "^3.5.32",
38
+ "@types/mocha": "^10.0.10",
37
39
  "@types/oojs-ui": "^0.49.0",
38
40
  "@typescript-eslint/eslint-plugin": "^8.16.0",
39
41
  "@typescript-eslint/parser": "^8.16.0",
@@ -49,6 +51,7 @@
49
51
  "eslint-plugin-regexp": "^2.6.0",
50
52
  "eslint-plugin-unicorn": "^56.0.1",
51
53
  "http-server": "^14.1.0",
54
+ "mocha": "^10.8.2",
52
55
  "monaco-editor": "^0.52.0",
53
56
  "stylelint": "^16.11.0",
54
57
  "stylelint-config-recommended": "^14.0.0",