wikiplus-highlight 3.2.2 → 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 +14 -2
- package/dist/main.min.js +7 -0
- package/dist/main.min.js.map +7 -0
- package/package.json +26 -21
- 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
|
匹配的括号对会添加青色背景,未匹配的单个括号会添加暗红色背景。
|
|
@@ -73,7 +77,7 @@ MediaWiki 模式下自动闭合生效的字符包括 `(`、`[`、`{` 和 `"`,
|
|
|
73
77
|
|
|
74
78
|
### 代码折叠
|
|
75
79
|
|
|
76
|
-
MediaWiki 模式下,光标移动至模板、解析器函数或扩展标签内部时会在光标上方出现一个 `-` 标记,点击即可折叠模板和解析器函数的参数或扩展标签内部的文本。折叠后使用一个带有虚线边框的 `⋯`
|
|
80
|
+
MediaWiki 模式下,光标移动至模板、解析器函数或扩展标签内部时会在光标上方出现一个 `-` 标记,点击即可折叠模板和解析器函数的参数或扩展标签内部的文本。折叠后使用一个带有虚线边框的 `⋯` 标记占位,点击该标记将重新展开折叠的代码部分。除此以外,可折叠的代码行行号左侧会出现箭头 `⌄` 作为折叠按钮。同时添加以下快捷键:
|
|
77
81
|
|
|
78
82
|
- `Ctrl` + `Shift` + `[`/`Cmd` + `Alt` + `[`: 折叠选中的文字(如果可行)
|
|
79
83
|
- `Ctrl` + `Shift` + `]`/`Cmd` + `Alt` + `]`: 展开选中的文字
|
|
@@ -82,7 +86,7 @@ MediaWiki 模式下,光标移动至模板、解析器函数或扩展标签内
|
|
|
82
86
|
|
|
83
87
|
### 自动填充
|
|
84
88
|
|
|
85
|
-
MediaWiki 模式下可自动填充魔术字(包括状态开关和解析器函数)、标签名、标签属性名、URL 协议和图片参数。此外按下 `
|
|
89
|
+
MediaWiki 模式下可自动填充魔术字(包括状态开关和解析器函数)、标签名、标签属性名、URL 协议和图片参数。此外按下 `Shift` + `Enter` 还可触发页面名称和模板参数(需要 [TemplateData](https://www.mediawiki.org/wiki/Extension:TemplateData) 扩展)的自动填充。JavaScript 和 CSS 模式下可自动填充关键字和常数。
|
|
86
90
|
|
|
87
91
|
### 匹配标签
|
|
88
92
|
|
|
@@ -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,28 +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
|
-
"@
|
|
34
|
-
"@stylistic/
|
|
35
|
-
"@
|
|
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",
|
|
36
37
|
"@types/oojs-ui": "^0.49.0",
|
|
37
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
38
|
-
"@typescript-eslint/parser": "^
|
|
39
|
-
"
|
|
40
|
-
"eslint
|
|
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",
|
|
41
43
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
|
42
|
-
"eslint-plugin-jsdoc": "^
|
|
43
|
-
"eslint-plugin-json-es": "^1.
|
|
44
|
-
"eslint-plugin-
|
|
45
|
-
"eslint-plugin-
|
|
46
|
-
"eslint-plugin-
|
|
47
|
-
"
|
|
48
|
-
"
|
|
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",
|
|
49
54
|
"stylelint-config-recommended": "^14.0.0",
|
|
50
|
-
"types-mediawiki": "^1.
|
|
51
|
-
"typescript": "^5.
|
|
55
|
+
"types-mediawiki": "^1.9.0",
|
|
56
|
+
"typescript": "^5.7.2"
|
|
52
57
|
}
|
|
53
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.2';
|
|
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
|
-
if (typeof _WikiplusPages === 'object') {
|
|
45
|
-
const pages = Object.values(_WikiplusPages)
|
|
46
|
-
.filter(({ sectionCache }) => Object.values(sectionCache).includes(value));
|
|
47
|
-
if (pages.some(({ title }) => !title.endsWith('/doc'))) {
|
|
48
|
-
await mw.loader.using('mediawiki.Title');
|
|
49
|
-
}
|
|
50
|
-
const modes = new Set(pages.map(({ title }) => {
|
|
51
|
-
var _a;
|
|
52
|
-
if (title.endsWith('/doc')) {
|
|
53
|
-
return 'template';
|
|
54
|
-
}
|
|
55
|
-
const t = new mw.Title(title), namespace = t.getNamespaceId();
|
|
56
|
-
if (namespace % 2) {
|
|
57
|
-
return 'mediawiki';
|
|
58
|
-
}
|
|
59
|
-
const mode = EXTS[((_a = t.getExtension()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || ''] || NAMESPACES[namespace];
|
|
60
|
-
if (mode) {
|
|
61
|
-
return mode === 'javascript' && (namespace === 8 || namespace === 2300) ? 'gadget' : mode;
|
|
62
|
-
}
|
|
63
|
-
return namespace === 10 || namespace === 2 ? 'template' : 'mediawiki';
|
|
64
|
-
}));
|
|
65
|
-
if (modes.size === 1) {
|
|
66
|
-
const [mode] = modes;
|
|
67
|
-
if (mode === 'gadget') {
|
|
68
|
-
return ['javascript', 8];
|
|
69
|
-
}
|
|
70
|
-
return mode === 'template' ? ['mediawiki', 10] : [mode];
|
|
71
|
-
}
|
|
72
|
-
else if (modes.size === 2) {
|
|
73
|
-
if (modes.has('javascript') && modes.has('gadget')) {
|
|
74
|
-
return ['javascript'];
|
|
75
|
-
}
|
|
76
|
-
else if (modes.has('mediawiki') && modes.has('template')) {
|
|
77
|
-
return ['mediawiki'];
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (ns !== 274 && contentmodel !== 'Scribunto' || page.endsWith('/doc')) {
|
|
82
|
-
return [CONTENTMODELS[contentmodel] || contentmodel, contentmodel === 'javascript' ? ns : undefined];
|
|
83
|
-
}
|
|
84
|
-
await mw.loader.using('oojs-ui-windows');
|
|
85
|
-
if (await OO.ui.confirm(mw.msg('cm-mw-contentmodel'), {
|
|
86
|
-
actions: [{ label: ns === 274 ? 'Widget' : 'Lua' }, { label: 'Wikitext', action: 'accept' }],
|
|
87
|
-
})) {
|
|
88
|
-
return ['mediawiki'];
|
|
89
|
-
}
|
|
90
|
-
return [ns === 274 ? 'html' : 'lua'];
|
|
91
|
-
};
|
|
92
|
-
const submit = /** 提交编辑 */ () => {
|
|
93
|
-
document.getElementById('Wikiplus-Quickedit-Submit').dispatchEvent(new MouseEvent('click'));
|
|
94
|
-
return true;
|
|
95
|
-
}, submitMinor = /** 提交小编辑 */ () => {
|
|
96
|
-
document.querySelector('#Wikiplus-Quickedit-MinorEdit').checked = true;
|
|
97
|
-
return submit();
|
|
98
|
-
}, escapeEdit = /** 按下Esc键退出编辑 */ () => {
|
|
99
|
-
document.getElementById('Wikiplus-Quickedit-Back').dispatchEvent(new MouseEvent('click'));
|
|
100
|
-
return true;
|
|
101
|
-
};
|
|
102
|
-
/**
|
|
103
|
-
* 渲染编辑器
|
|
104
|
-
* @param $target 目标编辑框
|
|
105
|
-
* @param setting 是否是Wikiplus设置(使用json语法)
|
|
106
|
-
*/
|
|
107
|
-
const renderEditor = async ($target, setting) => {
|
|
108
|
-
var _a;
|
|
109
|
-
const settings = getObject('Wikiplus_Settings'), escToExitQuickEdit = settings && (settings['esc_to_exit_quickedit'] || settings['escToExitQuickEdit']), esc = escToExitQuickEdit === true || escToExitQuickEdit === 'true';
|
|
110
|
-
const cm = await (await CodeMirror6).fromTextArea($target[0], ...setting ? ['json'] : await getPageMode($target.val()));
|
|
111
|
-
(((_a = cm.view) === null || _a === void 0 ? void 0 : _a.dom) || cm.editor.getDomNode()).id = 'Wikiplus-CodeMirror';
|
|
112
|
-
if (!setting) { // 普通Wikiplus编辑区
|
|
113
|
-
if (cm.editor) {
|
|
114
|
-
cm.editor.onKeyDown(e => {
|
|
115
|
-
if (e.keyCode === monaco.KeyCode.KeyS && (e.ctrlKey || e.metaKey)) {
|
|
116
|
-
e.preventDefault();
|
|
117
|
-
if (e.shiftKey) {
|
|
118
|
-
submitMinor();
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
submit();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else if (e.keyCode === monaco.KeyCode.Escape && esc) {
|
|
125
|
-
e.preventDefault();
|
|
126
|
-
escapeEdit();
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
cm.extraKeys([
|
|
132
|
-
{ key: 'Mod-S', run: submit },
|
|
133
|
-
{ key: 'Shift-Mod-S', run: submitMinor },
|
|
134
|
-
...esc ? [{ 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
|
-
})();
|