wikiplus-highlight 3.2.3 → 3.2.4
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 +12 -0
- package/dist/main.min.js +7 -0
- package/dist/main.min.js.map +7 -0
- package/package.json +28 -9
- package/dist/main.js +0 -176
package/README.md
CHANGED
|
@@ -63,6 +63,10 @@ mw.loader.load('//unpkg.com/wikiplus-highlight');
|
|
|
63
63
|
|
|
64
64
|
使用这一插件时,每一行的尾随空格将添加橙红色背景。
|
|
65
65
|
|
|
66
|
+
### 高亮与选中文字相同的内容
|
|
67
|
+
|
|
68
|
+
使用这一插件时,与当前选中文字相同的内容将添加浅绿色背景。
|
|
69
|
+
|
|
66
70
|
### 匹配括号
|
|
67
71
|
|
|
68
72
|
匹配的括号对会添加青色背景,未匹配的单个括号会添加暗红色背景。
|
|
@@ -99,6 +103,14 @@ MediaWiki 模式下可自动填充魔术字(包括状态开关和解析器函
|
|
|
99
103
|
|
|
100
104
|
仅用于 MediaWiki 模式,按住 `Ctrl`/`Cmd` 并点击被高亮标记为内部链接、模板标题或外部链接的文字时,会在新标签页打开对应页面。
|
|
101
105
|
|
|
106
|
+
### 颜色选择器
|
|
107
|
+
|
|
108
|
+
仅用于 CSS 和 MediaWiki 模式,表示颜色的文字左侧会出现一个方块提供颜色预览,点击后会弹出一个颜色选择器,选择颜色后会自动修改对应的文字内容。
|
|
109
|
+
|
|
110
|
+
### 预览 `<ref>` 定义
|
|
111
|
+
|
|
112
|
+
仅用于 MediaWiki 模式,将鼠标悬停在带有 `name` 属性的 `<ref>` 标签上时会显示对应的内容。
|
|
113
|
+
|
|
102
114
|
### 语法检查
|
|
103
115
|
|
|
104
116
|
开启后将在编辑框内提示可能存在的语法错误。
|
package/dist/main.min.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
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")}})();})();
|
|
2
|
+
/**
|
|
3
|
+
* @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展
|
|
4
|
+
* @author Bhsd <https://github.com/bhsd-harry>
|
|
5
|
+
* @license GPL-3.0
|
|
6
|
+
*/
|
|
7
|
+
//# sourceMappingURL=main.min.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
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"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wikiplus-highlight",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.4",
|
|
4
4
|
"description": "A plugin for the MediaWiki front-end add-on \"Wikiplus\"",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mediawiki",
|
|
7
7
|
"codemirror",
|
|
8
|
-
"
|
|
8
|
+
"monaco"
|
|
9
9
|
],
|
|
10
10
|
"homepage": "https://github.com/bhsd-harry/Wikiplus-highlight#readme",
|
|
11
11
|
"bugs": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"/dist/",
|
|
18
18
|
"/*.css"
|
|
19
19
|
],
|
|
20
|
-
"browser": "/dist/main.js",
|
|
20
|
+
"browser": "/dist/main.min.js",
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
23
|
"url": "git+https://github.com/bhsd-harry/Wikiplus-highlight.git"
|
|
@@ -26,14 +26,33 @@
|
|
|
26
26
|
"lint:ts": "tsc --noEmit && eslint --cache .",
|
|
27
27
|
"lint:css": "stylelint *.css",
|
|
28
28
|
"lint": "npm run lint:ts && npm run lint:css",
|
|
29
|
-
"build": "
|
|
29
|
+
"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
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@bhsd/codemirror-mediawiki": "^2.
|
|
33
|
-
"@bhsd/common": "^0.
|
|
34
|
-
"@
|
|
32
|
+
"@bhsd/codemirror-mediawiki": "^2.18.9",
|
|
33
|
+
"@bhsd/common": "^0.4.6",
|
|
34
|
+
"@stylistic/eslint-plugin": "^2.11.0",
|
|
35
|
+
"@stylistic/stylelint-plugin": "^3.1.1",
|
|
36
|
+
"@types/jquery": "^3.5.32",
|
|
35
37
|
"@types/oojs-ui": "^0.49.0",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
+
"@typescript-eslint/eslint-plugin": "^8.16.0",
|
|
39
|
+
"@typescript-eslint/parser": "^8.16.0",
|
|
40
|
+
"esbuild": "^0.24.0",
|
|
41
|
+
"eslint": "^8.57.1",
|
|
42
|
+
"eslint-plugin-es-x": "^8.4.1",
|
|
43
|
+
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
44
|
+
"eslint-plugin-jsdoc": "^50.6.0",
|
|
45
|
+
"eslint-plugin-json-es": "^1.6.0",
|
|
46
|
+
"eslint-plugin-markdown": "4.0.1",
|
|
47
|
+
"eslint-plugin-n": "^17.14.0",
|
|
48
|
+
"eslint-plugin-promise": "^7.2.1",
|
|
49
|
+
"eslint-plugin-regexp": "^2.6.0",
|
|
50
|
+
"eslint-plugin-unicorn": "^56.0.1",
|
|
51
|
+
"http-server": "^14.1.0",
|
|
52
|
+
"monaco-editor": "^0.52.0",
|
|
53
|
+
"stylelint": "^16.11.0",
|
|
54
|
+
"stylelint-config-recommended": "^14.0.0",
|
|
55
|
+
"types-mediawiki": "^1.9.0",
|
|
56
|
+
"typescript": "^5.7.2"
|
|
38
57
|
}
|
|
39
58
|
}
|
package/dist/main.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展
|
|
4
|
-
* @author Bhsd <https://github.com/bhsd-harry>
|
|
5
|
-
* @license GPL-3.0
|
|
6
|
-
*/
|
|
7
|
-
(() => {
|
|
8
|
-
const { libs } = mw, { wphl } = libs;
|
|
9
|
-
if (wphl === null || wphl === void 0 ? void 0 : wphl.version) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
const version = '3.2.3';
|
|
13
|
-
libs.wphl = { version, ...wphl }; // 开始加载
|
|
14
|
-
// 路径
|
|
15
|
-
const CDN = '//testingcf.jsdelivr.net', MW_CDN = `npm/@bhsd/codemirror-mediawiki@${libs.wphl.cmVersion || 'latest'}/dist/mw.min.js`, REPO_CDN = 'npm/wikiplus-highlight';
|
|
16
|
-
window.CodeMirror6 || (window.CodeMirror6 = new Promise(resolve => {
|
|
17
|
-
const script = document.createElement('script');
|
|
18
|
-
script.addEventListener('load', () => {
|
|
19
|
-
resolve(CodeMirror6);
|
|
20
|
-
});
|
|
21
|
-
script.type = 'module';
|
|
22
|
-
script.src = `${CDN}/${MW_CDN}`;
|
|
23
|
-
document.head.append(script);
|
|
24
|
-
}));
|
|
25
|
-
const { wgPageName: page, wgNamespaceNumber: ns, wgPageContentModel: contentmodel, } = mw.config.get();
|
|
26
|
-
const CONTENTMODELS = {
|
|
27
|
-
'sanitized-css': 'css',
|
|
28
|
-
wikitext: 'mediawiki',
|
|
29
|
-
}, EXTS = {
|
|
30
|
-
css: 'css',
|
|
31
|
-
js: 'javascript',
|
|
32
|
-
json: 'json',
|
|
33
|
-
}, NAMESPACES = {
|
|
34
|
-
828: 'lua',
|
|
35
|
-
274: 'html',
|
|
36
|
-
};
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
-
const getObject = (key) => JSON.parse(String(localStorage.getItem(key)));
|
|
39
|
-
/**
|
|
40
|
-
* 检查页面语言类型
|
|
41
|
-
* @param value 页面内容
|
|
42
|
-
*/
|
|
43
|
-
const getPageMode = async (value) => {
|
|
44
|
-
let WikiplusPages;
|
|
45
|
-
if (typeof _WikiplusPages === 'object') {
|
|
46
|
-
WikiplusPages = _WikiplusPages;
|
|
47
|
-
}
|
|
48
|
-
else if (typeof Pages === 'object') {
|
|
49
|
-
WikiplusPages = Pages;
|
|
50
|
-
}
|
|
51
|
-
if (WikiplusPages) {
|
|
52
|
-
const pages = Object.values(WikiplusPages)
|
|
53
|
-
.filter(({ sectionCache }) => Object.values(sectionCache).includes(value));
|
|
54
|
-
if (pages.some(({ title }) => !title.endsWith('/doc'))) {
|
|
55
|
-
await mw.loader.using('mediawiki.Title');
|
|
56
|
-
}
|
|
57
|
-
const modes = new Set(pages.map(({ title }) => {
|
|
58
|
-
var _a;
|
|
59
|
-
if (title.endsWith('/doc')) {
|
|
60
|
-
return 'template';
|
|
61
|
-
}
|
|
62
|
-
const t = new mw.Title(title), namespace = t.getNamespaceId();
|
|
63
|
-
if (namespace % 2) {
|
|
64
|
-
return 'mediawiki';
|
|
65
|
-
}
|
|
66
|
-
const mode = EXTS[((_a = t.getExtension()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || ''] || NAMESPACES[namespace];
|
|
67
|
-
if (mode) {
|
|
68
|
-
return mode === 'javascript' && (namespace === 8 || namespace === 2300) ? 'gadget' : mode;
|
|
69
|
-
}
|
|
70
|
-
return namespace === 10 || namespace === 2 ? 'template' : 'mediawiki';
|
|
71
|
-
}));
|
|
72
|
-
if (modes.size === 1) {
|
|
73
|
-
const [mode] = modes, title = pages.length === 1 ? pages[0].title : undefined;
|
|
74
|
-
if (mode === 'gadget') {
|
|
75
|
-
return ['javascript', 8];
|
|
76
|
-
}
|
|
77
|
-
return mode === 'template' ? ['mediawiki', 10, title] : [mode, undefined, title];
|
|
78
|
-
}
|
|
79
|
-
else if (modes.size === 2) {
|
|
80
|
-
if (modes.has('javascript') && modes.has('gadget')) {
|
|
81
|
-
return ['javascript'];
|
|
82
|
-
}
|
|
83
|
-
else if (modes.has('mediawiki') && modes.has('template')) {
|
|
84
|
-
return ['mediawiki'];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (ns !== 274 && contentmodel !== 'Scribunto' || page.endsWith('/doc')) {
|
|
89
|
-
return [CONTENTMODELS[contentmodel] || contentmodel, contentmodel === 'javascript' ? ns : undefined];
|
|
90
|
-
}
|
|
91
|
-
await mw.loader.using('oojs-ui-windows');
|
|
92
|
-
if (await OO.ui.confirm(mw.msg('cm-mw-contentmodel'), {
|
|
93
|
-
actions: [{ label: ns === 274 ? 'Widget' : 'Lua' }, { label: 'Wikitext', action: 'accept' }],
|
|
94
|
-
})) {
|
|
95
|
-
return ['mediawiki'];
|
|
96
|
-
}
|
|
97
|
-
return [ns === 274 ? 'html' : 'lua'];
|
|
98
|
-
};
|
|
99
|
-
const submit = /** 提交编辑 */ () => {
|
|
100
|
-
document.getElementById('Wikiplus-Quickedit-Submit').dispatchEvent(new MouseEvent('click'));
|
|
101
|
-
return true;
|
|
102
|
-
}, submitMinor = /** 提交小编辑 */ () => {
|
|
103
|
-
document.querySelector('#Wikiplus-Quickedit-MinorEdit').checked = true;
|
|
104
|
-
return submit();
|
|
105
|
-
}, escapeEdit = /** 按下Esc键退出编辑 */ () => {
|
|
106
|
-
const settings = getObject('Wikiplus_Settings'), escToExitQuickEdit = settings && (settings['esc_to_exit_quickedit'] || settings['escToExitQuickEdit']);
|
|
107
|
-
if (escToExitQuickEdit === true || escToExitQuickEdit === 'true') {
|
|
108
|
-
document.getElementById('Wikiplus-Quickedit-Back').dispatchEvent(new MouseEvent('click'));
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
return false;
|
|
112
|
-
};
|
|
113
|
-
/**
|
|
114
|
-
* 渲染编辑器
|
|
115
|
-
* @param $target 目标编辑框
|
|
116
|
-
* @param setting 是否是Wikiplus设置(使用json语法)
|
|
117
|
-
*/
|
|
118
|
-
const renderEditor = async ($target, setting) => {
|
|
119
|
-
var _a;
|
|
120
|
-
const cm = await (await CodeMirror6).fromTextArea($target[0], ...setting ? ['json'] : await getPageMode($target.val()));
|
|
121
|
-
(((_a = cm.view) === null || _a === void 0 ? void 0 : _a.dom) || cm.editor.getDomNode()).id = 'Wikiplus-CodeMirror';
|
|
122
|
-
if (!setting) { // 普通Wikiplus编辑区
|
|
123
|
-
if (cm.editor) {
|
|
124
|
-
/* eslint-disable no-bitwise */
|
|
125
|
-
cm.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, submit);
|
|
126
|
-
cm.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KeyS, submitMinor);
|
|
127
|
-
/* eslint-enable no-bitwise */
|
|
128
|
-
cm.editor.addCommand(monaco.KeyCode.Escape, escapeEdit);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
cm.extraKeys([
|
|
132
|
-
{ key: 'Mod-S', run: submit },
|
|
133
|
-
{ key: 'Shift-Mod-S', run: submitMinor },
|
|
134
|
-
{ key: 'Esc', run: escapeEdit },
|
|
135
|
-
]);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/** @todo 以下过渡代码添加于2024-02-07,将于一段时间后弃用 */
|
|
139
|
-
const oldKey = 'Wikiplus-highlight-addons', oldPrefs = getObject(oldKey), mapping = {
|
|
140
|
-
activeLine: 'highlightActiveLine',
|
|
141
|
-
trailingspace: 'highlightTrailingWhitespace',
|
|
142
|
-
matchBrackets: 'bracketMatching',
|
|
143
|
-
closeBrackets: 'closeBrackets',
|
|
144
|
-
matchTags: 'tagMatching',
|
|
145
|
-
fold: 'codeFolding',
|
|
146
|
-
wikiEditor: 'wikiEditor',
|
|
147
|
-
escape: 'escape',
|
|
148
|
-
contextmenu: 'openLinks',
|
|
149
|
-
lint: 'lint',
|
|
150
|
-
};
|
|
151
|
-
localStorage.removeItem(oldKey);
|
|
152
|
-
if (oldPrefs) {
|
|
153
|
-
const obj = {};
|
|
154
|
-
for (const k of oldPrefs) {
|
|
155
|
-
if (k in mapping) {
|
|
156
|
-
obj[mapping[k]] = true;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
cm.prefer(obj);
|
|
160
|
-
}
|
|
161
|
-
const jump = document.querySelector('#Wikiplus-Quickedit-Jump > a');
|
|
162
|
-
if (jump) {
|
|
163
|
-
jump.href = '#Wikiplus-CodeMirror';
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
// 监视 Wikiplus 编辑框
|
|
167
|
-
const observer = new MutationObserver(records => {
|
|
168
|
-
const $editArea = $(records.flatMap(({ addedNodes }) => [...addedNodes]))
|
|
169
|
-
.find('#Wikiplus-Quickedit, #Wikiplus-Setting-Input');
|
|
170
|
-
if ($editArea.length > 0) {
|
|
171
|
-
void renderEditor($editArea, $editArea.attr('id') === 'Wikiplus-Setting-Input');
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
observer.observe(document.body, { childList: true });
|
|
175
|
-
mw.loader.load(`${CDN}/${REPO_CDN}@${version}/styles.min.css`, 'text/css');
|
|
176
|
-
})();
|