wikiplus-highlight 2.38.0 → 2.40.0
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 +18 -5
- package/dist/main.min.js +1 -1
- package/i18n/en.json +1 -1
- package/i18n/ka.json +1 -1
- package/i18n/zh-hans.json +1 -1
- package/i18n/zh-hant.json +1 -1
- package/lint.js +53 -12
- package/main.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
在*个人 JS 页*添加以下代码:
|
|
12
12
|
|
|
13
13
|
```javascript
|
|
14
|
-
mw.loader.load('//cdn.jsdelivr.net/npm/wikiplus-highlight@2.
|
|
14
|
+
mw.loader.load('//cdn.jsdelivr.net/npm/wikiplus-highlight@2.40.0');
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
或
|
|
18
18
|
|
|
19
19
|
```javascript
|
|
20
|
-
mw.loader.load('//unpkg.com/wikiplus-highlight@2.
|
|
20
|
+
mw.loader.load('//unpkg.com/wikiplus-highlight@2.40.0/dist/main.min.js');
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
### 稳定版本
|
|
@@ -42,13 +42,15 @@ mw.loader.load('//unpkg.com/wikiplus-highlight/dist/main.min.js');
|
|
|
42
42
|
|
|
43
43
|
### 搜索
|
|
44
44
|
|
|
45
|
-
这个插件会向 Wikiplus
|
|
45
|
+
这个插件会向 Wikiplus 编辑区添加一个【搜索】按钮和一个【全文替换】按钮及以下快捷键:
|
|
46
46
|
|
|
47
47
|
- `Ctrl`/`Cmd` + `F`: 打开搜索框
|
|
48
48
|
- `Ctrl`/`Cmd` + `G`: 搜索下一处
|
|
49
49
|
- `Shift` + `Ctrl`/`Cmd` + `G`: 搜索上一处
|
|
50
|
+
- `Shift` + `Ctrl` + `F` (Windows) / `Cmd` + `Alt` + `F` (Mac): 打开全文替换
|
|
51
|
+
- `Shift` + `Ctrl` + `R` (Windows) / `Shift` + `Cmd` + `Alt` + `F` (Mac): 开始全文替换
|
|
50
52
|
|
|
51
|
-
除了使用以上快捷键,也可以通过在搜索框中按下 `Enter` 键或点击搜索框右侧的 `▼` 按钮来执行搜索下一处的命令,点击 `▲`
|
|
53
|
+
除了使用以上快捷键,也可以通过在搜索框中按下 `Enter` 键或点击搜索框右侧的 `▼` 按钮来执行搜索下一处的命令,点击 `▲` 按钮将执行搜索上一处的命令,在全文替换文本框中按下 `Enter` 键将执行全文替换命令。搜索可以使用字符串,也可以使用形如 `/re/` 或 `/re/i` 的正则表达式。正则表达式仅接受可选的 `i` 修饰符,并默认添加 `m` 修饰符,暂不接受其他修饰符。全文中匹配的字符都会添加淡粉色背景。如果没有匹配的结果,搜索框会添加粉色背景。
|
|
52
54
|
|
|
53
55
|
### 高亮当前行
|
|
54
56
|
|
|
@@ -80,6 +82,10 @@ MediaWiki 模式下自动闭合生效的字符包括 `(`、`[`、`{` 和 `"`,
|
|
|
80
82
|
|
|
81
83
|
光标移动至模板参数或扩展/HTML 标签内部时会在该行代码上方出现一个淡黄色背景的 `-` 标记,点击即可折叠模板参数或标签内部文本。折叠后使用一个带有虚线边框的 `⋯` 标记占位,点击该标记将重新展开折叠的代码部分。
|
|
82
84
|
|
|
85
|
+
### 添加 WikiEditor 工具条
|
|
86
|
+
|
|
87
|
+
工具条具备的功能遵从当前网站安装的 [WikiEditor](https://www.mediawiki.org/wiki/Extension:WikiEditor) 扩展的版本。
|
|
88
|
+
|
|
83
89
|
### HTML/URL编码快捷键
|
|
84
90
|
|
|
85
91
|
添加以下快捷键:
|
|
@@ -91,13 +97,20 @@ MediaWiki 模式下自动闭合生效的字符包括 `(`、`[`、`{` 和 `"`,
|
|
|
91
97
|
|
|
92
98
|
右键点击被高亮标记为模板标题或 `#invoke` 魔术字的第一个参数(即模块标题)时,会在新标签页打开对应页面。如果当前站点安装了 [Widget](https://www.mediawiki.org/wiki/Extension:Widget) 扩展,则当右键点击 `#widget` 魔术字的第一个参数(即小部件标题)时会在新标签页打开对应小部件的编辑界面(即 `action=edit`)。
|
|
93
99
|
|
|
100
|
+
### 维基语法检查
|
|
101
|
+
|
|
102
|
+
这个功能基于 [wikiparser-node](https://github.com/bhsd-harry/wikiparser-node)。开启后将在编辑框内提示可能存在的维基语法错误,同时在右侧的滚动条上也会以红黄条纹粗略地指示错误在文中出现的位置。这个插件还将添加以下快捷键:
|
|
103
|
+
|
|
104
|
+
- `Ctrl`/`Cmd` + `L`: 随时开启或关闭错误提示
|
|
105
|
+
- `Ctrl`/`Cmd` + `K`: 文本修改后立即刷新语法错误
|
|
106
|
+
|
|
94
107
|
### 调整缩进
|
|
95
108
|
|
|
96
109
|
这不是一个真正意义上的插件,而是一个设置选项。默认设置下使用 Tab 进行缩进。勾选这一选项时,会出现一个新的文本框以设置缩进对应的空格个数,初始值为 `4`。
|
|
97
110
|
|
|
98
111
|
### 用于其他编辑器
|
|
99
112
|
|
|
100
|
-
勾选这一选项时,除[【搜索】](#搜索)插件以外的当前正在使用的插件也将作用于其他开启了 CodeMirror 高亮的编辑器。目前支持的编辑器包括 [InPageEdit-v2](https://github.com/inpageedit/inpageedit-v2) 和 [Inspector](https://zh.moegirl.org.cn/User:Bhsd/Inspector),不包括 MediaWiki 默认的编辑器。
|
|
113
|
+
勾选这一选项时,除[【搜索】](#搜索)、[【添加 WikiEditor 工具条】](#添加-wikieditor-工具条)和[【维基语法检查】](#维基语法检查)插件以外的当前正在使用的插件也将作用于其他开启了 CodeMirror 高亮的编辑器。目前支持的编辑器包括 [InPageEdit-v2](https://github.com/inpageedit/inpageedit-v2) 和 [Inspector](https://zh.moegirl.org.cn/User:Bhsd/Inspector),不包括 MediaWiki 默认的编辑器。
|
|
101
114
|
|
|
102
115
|
## Supported languages
|
|
103
116
|
|
package/dist/main.min.js
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* @author 机智的小鱼君 <https://github.com/Dragon-Fish>
|
|
5
5
|
* @license GPL-3.0
|
|
6
6
|
*/
|
|
7
|
-
(async()=>{"use strict";if(mw.libs.wphl)return;mw.libs.wphl={};const i="2.38",w="object"==typeof mw.storage&&"function"==typeof mw.storage.getObject?mw.storage:{getObject(e){var i=localStorage.getItem(e);if(!1===i)return!1;try{return JSON.parse(i)}catch(e){return null}},setObject(e,i){try{return localStorage.setItem(e,JSON.stringify(i))}catch(e){return!1}}},r=(Object.fromEntries=Object.fromEntries||(e=>{const i={};for(var[t,o]of e)i[t]=o;return i}),(e=i)=>e.split(".").map(Number));const h=(e,...i)=>mw.msg("wphl-"+e,...i),n=(...e)=>$($.parseHTML(h(...e)));var e=(...i)=>()=>{var e=$("<p>",{html:h(...i)});return mw.notify(e,{type:"success",autoHideSeconds:"long",tag:"wikiplus-highlight"}),e},t=r().slice(0,2).join(".");const s="//fastly.jsdelivr.net",l="npm/codemirror@5.65.3",L="gh/bhsd-harry/codemirror-mediawiki@1.1.6",o="npm/wikiplus-highlight@"+t,{wgPageName:D,wgNamespaceNumber:k,wgPageContentModel:N,wgServerName:F,wgScriptPath:H,wgUserLanguage:U,skin:d}=mw["config"]["values"],u=null!==mw.loader.getState("ext.CodeMirror"),a=w.getObject("InPageEditMwConfig")||{},V=""+F+H,f=a[V]||{},b=!(f.time>Date.now()-2592e6),B={css:"css","sanitized-css":"css",javascript:"javascript",json:"javascript",wikitext:"mediawiki"},c=u?{lib:"ext.CodeMirror.lib",css:"ext.CodeMirror.lib.mode.css",javascript:"ext.CodeMirror.lib.mode.javascript",lua:l+"/mode/lua/lua.min.js",mediawiki:b?"ext.CodeMirror.data":[],htmlmixed:"ext.CodeMirror.lib.mode.htmlmixed",xml:[]}:{lib:l+"/lib/codemirror.min.js",css:l+"/mode/css/css.min.js",javascript:l+"/mode/javascript/javascript.min.js",lua:l+"/mode/lua/lua.min.js",mediawiki:[],htmlmixed:l+"/mode/htmlmixed/htmlmixed.min.js",xml:l+"/mode/xml/xml.min.js"},m={searchcursor:l+"/addon/search/searchcursor.min.js",search:o+"/search.min.js",markSelection:l+"/addon/selection/mark-selection.min.js",activeLine:l+"/addon/selection/active-line.min.js",trailingspace:l+"/addon/edit/trailingspace.min.js",matchBrackets:l+"/addon/edit/matchbrackets.min.js",closeBrackets:l+"/addon/edit/closebrackets.min.js",matchTags:o+"/matchtags.min.js",fold:o+"/fold.min.js",wikiEditor:"ext.wikiEditor",contextmenu:"mediawiki.Title",lint:l+"/addon/lint/lint.min.js",annotateScrollbar:l+"/addon/scroll/annotatescrollbar.min.js",parser:"gh/bhsd-harry/wikiparser-node@0.6.19-b/bundle/bundle.min.js",lintWikitext:o+"/lint.min.js"},x=[{option:"styleSelectedText",addon:"search",download:"markSelection",only:!0,complex:()=>!y.has("wikiEditor")},{option:"styleActiveLine",addon:"activeLine"},{option:"showTrailingSpace",addon:"trailingspace"},{option:"matchBrackets",complex:(e,i)=>"mediawiki"!==e&&!i||{bracketRegex:/[{}[\]]/}},{option:"autoCloseBrackets",addon:"closeBrackets",complex:(e,i)=>"mediawiki"!==e&&!i||'()[]{}""'},{option:"matchTags",addon:["matchTags","fold"],modes:new Set(["mediawiki","widget"])},{option:"fold",modes:new Set(["mediawiki","widget"])}],y=new Set(w.getObject("Wikiplus-highlight-addons")||["search"]);let v=w.getObject("Wikiplus-highlight-indent")||4;const Q={'"':"quot","'":"apos","<":"lt",">":"gt","&":"amp"," ":"nbsp"},g=i=>e=>{e.replaceSelection(e.getSelection().split("\n").map(i).join("\n"),"around")},p=g(e=>[...e].map(e=>{if(e in Q)return`&${Q[e]};`;const i=e.codePointAt();return i<256?`&#${i};`:`&#x${i.toString(16)};`}).join("")),C=({keyMap:e})=>e.default===e.pcDefault,q={"Ctrl-/":p,"Ctrl-\\":g(encodeURIComponent)},K={"Cmd-/":p,"Cmd-\\":g(encodeURIComponent)},j=(u,e)=>{if(("mediawiki"===e||"widget"===e)&&y.has("contextmenu")){const t=$(u.getWrapperElement()).addClass("CodeMirror-contextmenu"),[o]=(mw.config.get("extCodeMirrorConfig")||{functionSynonyms:[{invoke:"invoke","调用":"invoke",widget:"widget","小工具":"widget"}]})["functionSynonyms"];var i=i=>new Set(Object.keys(o).filter(e=>o[e]===i).map(e=>e.startsWith("#")?e:"#"+e));const w=i("invoke"),h=i("widget");t.contextmenu(({pageX:e,pageY:i})=>{const t=u.coordsChar({left:e,top:i}),{line:o,ch:a}=t,n=u.getTokenTypeAt(t);if(/\bmw-(?:template-name|parserfunction)\b/.test(n)){const c=u.getLineTokens(o);for(let e=c.length-1;0<e;e--){var{type:r,end:s,string:l}=c[e];c[e-1].type===r&&(c[e-1].end=s,c[e-1].string+=l,c.splice(e,1))}const m=c.findIndex(({start:e,end:i})=>e<a&&i>=a),g=c[m].string.replace(/\u200E/g,"").replace(/_/g," ").trim();if(/\bmw-template-name\b/.test(n)){const p=new mw.Title(g);return 0!==p.namespace||g.startsWith(":")?open(p.getUrl(),"_blank"):open(mw.util.getUrl("Template:"+g),"_blank"),!1}if(!(m<2)&&/\bmw-parserfunction-delimiter\b/.test(c[m-1].type)&&/\bmw-parserfunction-name\b/.test(c[m-2].type)){var d=c[m-2].string.trim().toLowerCase();if(w.has(d))open(mw.util.getUrl("Module:"+g),"_blank");else{if(!h.has(d))return;open(mw.util.getUrl("Widget:"+g,{action:"edit"}),"_blank")}return!1}}})}},S=w.getObject("Wikiplus-highlight-i18n")||{};let M;S["wphl-version"]?((e,i)=>{var[t,o]=r(e),[a,n]=r(i);return t<a||t===a&&o<n})(S["wphl-version"],i)&&(M=e("welcome-upgrade",i,0)):M=e("welcome");const W={zh:"zh-hans","zh-hans":"zh-hans","zh-cn":"zh-hans","zh-my":"zh-hans","zh-sg":"zh-hans","zh-hant":"zh-hant","zh-tw":"zh-hant","zh-hk":"zh-hant","zh-mo":"zh-hant",ka:"ka"}[U]||"en",J=`${s}/${o}/i18n/${W}.json`,R=S["wphl-version"]===t;e=async()=>{R&&S["wphl-lang"]===W||(Object.assign(S,await $.ajax(J,{dataType:"json",cache:!0})),w.setObject("Wikiplus-highlight-i18n",S)),mw.messages.set(S)},t=Promise.all([mw.loader.using("mediawiki.util"),e()]);const G=e=>0<e.length?mw.loader.using(e):Promise.resolve(),X=e=>0<e.length?$.ajax(s+"/"+(1<e.length?"combine/":"")+e.join(),{dataType:"script",cache:!0}):Promise.resolve(),Y=async(e,i)=>{var t=e.filter(e=>!e.includes("/")),o=e.filter(e=>e.includes("/"));return!0===i?(await G(t),X(o)):!1===i?(await X(o),G(t)):Promise.all([G(t),X(o)])};let O;const Z=(e,i=!1)=>{const t=[];for(var{option:o,addon:a=o,download:n=Array.isArray(a)?o:a,only:r}of x)r&&i||o in e.optionHandlers||!ee(a,y)||t.push(m[n]);return t},ee=(e,i)=>Array.isArray(e)?e.some(e=>i.has(e)):i.has(e),ie=e=>{let i=[];var t,o="function"==typeof window.CodeMirror,a=o?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{},helpers:{}};if(o||(i.push(c.lib),u||mw.loader.load(`${s}/${l}/lib/codemirror.min.css`,"text/css")),"mediawiki"!==(e="mediawiki"===e&&f.config&&f.config.tags.html?"html":e)&&"widget"!==e||a.modes.mediawiki||(mw.loader.load(`${s}/${L}/mediawiki.min.css`,"text/css"),i.push(L+"/mediawiki.min.js")),"widget"===e||"html"===e)for(const n of["css","javascript","mediawiki","htmlmixed","xml"])a.modes[n]||(i=i.concat(c[n]));else i=i.concat(c[e]);return a.prototype.getSearchCursor||!y.has("search")||y.has("wikiEditor")||i.push(m.searchcursor),!a.prototype.annotateScrollbar&&"mediawiki"===e&&y.has("lint")&&i.push(m.annotateScrollbar),a.commands.findForward||!y.has("search")||y.has("wikiEditor")||i.push(m.search),!window.Parser&&"mediawiki"===e&&y.has("lint")&&i.push(m.parser),!a.optionHandlers.lint&&"mediawiki"===e&&y.has("lint")&&(mw.loader.load(`${s}/${l}/addon/lint/lint.min.css`,"text/css"),i.push(m.lint)),a.helpers.lint&&a.helpers.lint.mediawiki||"mediawiki"!==e||!y.has("lint")||i.push(m.lintWikitext),y.has("wikiEditor")&&((t=mw.loader.getState("ext.wikiEditor"))?"ready"!==t&&i.push(m.wikiEditor):y.delete("wikiEditor")),"ready"!==mw.loader.getState("mediawiki.Title")&&y.has("contextmenu")&&i.push(m.contextmenu),i.push(...Z(a)),Y(i,o?void 0:u)},te=e=>{a[V]={config:e,time:Date.now()},w.setObject("InPageEditMwConfig",a)},E=e=>e.flatMap(({aliases:e,name:i})=>e.map(e=>({alias:e,name:i}))),_=e=>Object.fromEntries(e.map(({alias:e,name:i})=>[e.replace(/:$/,""),i])),oe=e=>{for(const i of["indicator","poem","ref","tabs","tab","poll"])e.tags[i]&&(e.tagModes[i]="text/mediawiki")},ae=async(e,i)=>{if("mediawiki"===e||"widget"===e){u&&b&&await i;let e=mw.config.get("extCodeMirrorConfig");if(e||b||!R||({config:e}=f,oe(e),mw.config.set("extCodeMirrorConfig",e)),e&&e.redirect&&e.img)return e;const{magicwords:a,extensiontags:n,functionhooks:r,variables:s}=(await(new mw.Api).get({meta:"siteinfo",siprop:e?"magicwords":"magicwords|extensiontags|functionhooks|variables",formatversion:2}))["query"],l=new Set(["msg","raw","msgnw","subst","safesubst"]);if(e){const[d]=e["functionSynonyms"];var t,o;if(!d.subst)for({alias:t,name:o}of E(a.filter(({name:e})=>l.has(e))))d[t.replace(/:$/,"")]=o}else{e={tagModes:{pre:"mw-tag-pre",nowiki:"mw-tag-nowiki",ref:"text/mediawiki"},tags:Object.fromEntries(n.map(e=>[e.slice(1,-1),!0])),urlProtocols:mw.config.get("wgUrlProtocols")};const c=new Set([...r,...s,...l]),m=a.filter(({name:e,aliases:i})=>i.some(e=>/^__.+__$/.test(e))||c.has(e)),g=E(m.filter(e=>e["case-sensitive"])),p=E(m.filter(e=>!e["case-sensitive"])).map(({alias:e,name:i})=>({alias:e.toLowerCase(),name:i}));e.doubleUnderscore=[_(p.filter(({alias:e})=>/^__.+__$/.test(e))),_(g.filter(({alias:e})=>/^__.+__$/.test(e)))],e.functionSynonyms=[_(p.filter(({alias:e})=>!/^__.+__|^#$/.test(e))),_(g.filter(({alias:e})=>!/^__.+__|^#$/.test(e)))]}return e.redirect=a.find(({name:e})=>"redirect"===e).aliases,e.img=_(E(a.filter(({name:e})=>e.startsWith("img_")))),oe(e),mw.config.set("extCodeMirrorConfig",e),te(e),e}},ne={getContents(){return O.getValue()},setContents(e){return O.setValue(e),this},getSelection(){return O.getSelection()},setSelection(e){return O.setSelection(O.posFromIndex(e.start),"end"in e?O.posFromIndex(e.end):void 0),O.focus(),this},replaceSelection(e){return O.replaceSelection(e),this},getCaretPosition(e){var i=O.indexFromPos(O.getCursor("from")),t=O.indexFromPos(O.getCursor("to"));return e.startAndEnd?[i,t]:i},scrollToCaretPosition(){return O.scrollIntoView(),this}},re=async(e,i)=>{const n=i?"javascript":await(async()=>{if(D.endsWith("/doc"))return"mediawiki";if(274!==k&&828!==k)return B[N];const e=274===k?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(h("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()})(),t=ie(n),[o]=await Promise.all([ae(n,t),t]);if(!i&&y.has("wikiEditor"))try{if("function"==typeof mw.addWikiEditor)mw.addWikiEditor(e);else{const{modules:{dialogs:{config:s}}}=$["wikiEditor"];e.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...s.getDefaultConfig()}),s.replaceIcons(e)}}catch(e){y.delete("wikiEditor"),mw.notify("WikiEditor工具栏加载失败。",{type:"error"}),console.error(e)}"mediawiki"===n&&o.tags.html?(o.tagModes.html="htmlmixed",await ie("html")):"widget"!==n||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});var a=e.height();O&&O.toTextArea();const r=i||"json"===N;if((O=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"contenteditable",lineNumbers:!/Android\b/.test(navigator.userAgent),lineWrapping:!0,mode:n,mwConfig:o,json:r},Object.fromEntries(x.map(({option:e,addon:i=e,modes:t,complex:o=e=>!t||t.has(e)})=>{var a=Array.isArray(i)?i[0]:i;return[e,y.has(a)&&o(n,r)]})),"mediawiki"===n?{extraKeys:y.has("escape")&&(C(CodeMirror)?q:K)}:{indentUnit:y.has("indentWithSpace")?v:4,indentWithTabs:!y.has("indentWithSpace")}))).setSize(null,a),O.getWrapperElement().id="Wikiplus-CodeMirror",$.fn.textSelection&&e.textSelection("register",ne),y.has("wikiEditor")){const l=e.data("wikiEditorContext"),d=CodeMirror["keyMap"],c=()=>{$.wikiEditor.modules.dialogs.api.openDialog(l,"search-and-replace")};O.addKeyMap(d.default===d.pcDefault?{"Ctrl-F":c}:{"Cmd-F":c})}if(j(O,n),$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),!i){const m="object"==typeof window.Wikiplus?window.Wikiplus:{getSetting(e){var i=w.getObject("Wikiplus_Settings");return i&&i[e]}},g=m.getSetting("esc_to_exit_quickedit"),p=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},u=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")};O.addKeyMap($.extend(C(CodeMirror)?{"Ctrl-S":p,"Shift-Ctrl-S":u}:{"Cmd-S":p,"Shift-Cmd-S":u},!0===g||"true"===g?{Esc(){$("#Wikiplus-Quickedit-Back").triggerHandler("click")}}:{}))}O.refresh(),mw.hook("wiki-codemirror").fire(O)},se=document["body"],le=new MutationObserver(e=>{const i=$(e.flatMap(({addedNodes:e})=>[...e])).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");0<i.length&&re(i,"Wikiplus-Setting-Input"===i.attr("id"))}),de=(le.observe(se,{childList:!0}),$(se).on("keydown.wphl",".ui-dialog",function(e){if("Escape"===e.key){const i=$(this).children(".ui-dialog-content").data("context");i&&i.$textarea&&"Wikiplus-Quickedit"===i.$textarea.attr("id")&&e.stopPropagation()}}),document.querySelector("#wphl-style")||mw.loader.addStyleTag("#Wikiplus-CodeMirror{border:1px solid #c8ccd1;line-height:1.3;clear:both;-moz-user-select:auto;-webkit-user-select:auto;user-select:auto}#Wikiplus-CodeMirror .CodeMirror-gutter-wrapper{-moz-user-select:none;-webkit-user-select:none;user-select:none}div.Wikiplus-InterBox{font-size:14px;z-index:100}.skin-minerva .Wikiplus-InterBox{font-size:16px}.cm-trailingspace{text-decoration:underline wavy red}div.CodeMirror span.CodeMirror-matchingbracket{box-shadow:0 0 0 2px #9aef98}div.CodeMirror span.CodeMirror-nonmatchingbracket{box-shadow:0 0 0 2px #eace64}#Wikiplus-highlight-dialog .oo-ui-messageDialog-title{margin-bottom:0.28571429em}#Wikiplus-highlight-dialog .oo-ui-flaggedElement-notice{font-weight:normal;margin:0}.CodeMirror-contextmenu .cm-mw-template-name{cursor:pointer}.skin-moeskin #ca-more-actions li>a{display:inline-block;padding:0.4rem 0.8rem;line-height:1.5}.skin-moeskin .oo-ui-windowManager-modal>.oo-ui-dialog{z-index:101}")),{get:ce=e=>e.value,set:me=(e,i)=>{e.value=i}}=(de.id="wphl-style",$.valHooks.textarea||{}),ge=e=>"Wikiplus-Quickedit"===e.id||"Wikiplus-Setting-Input"===e.id;$.valHooks.textarea={get(e){return ge(e)&&O?O.getValue():ce(e)},set(e,i){ge(e)&&O?O.setValue(i):me(e,i)}},await t;let z,I,pe,ue,we,T,he,A;const ke=(e=[...y])=>{A.toggle(e.includes("indentWithSpace"))};const fe=$(mw.util.addPortletLink({minerva:"page-actions-overflow",citizen:"p-actions",moeskin:"ca-more-actions"}[d]||"p-cactions","#",h("portlet"),"wphl-settings")).click(async e=>{if(e.preventDefault(),z)I.setValue([...y]),T.setValue(v);else{await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),z=new OO.ui.MessageDialog({id:"Wikiplus-highlight-dialog"});const t=new OO.ui.WindowManager,o=(t.$element.appendTo(se),t.addWindows([z]),I=new OO.ui.CheckboxMultiselectInputWidget({options:[...x.map(({option:e,addon:i=e})=>{const t=Array.isArray(i)?i[0]:i;return{data:t,label:n("addon-"+t.toLowerCase())}}),...["wikiEditor","escape","contextmenu","lint","indentWithSpace","otherEditors"].map(e=>({data:e,label:n("addon-"+e.toLowerCase())}))],value:[...y]}).on("change",ke))["checkboxMultiselectWidget"];pe=o.findItemFromData("search"),ue=o.findItemFromData("wikiEditor"),we=o.findItemFromData("lint"),T=new OO.ui.NumberInputWidget({min:0,value:v}),he=new OO.ui.FieldLayout(I,{label:h("addon-label"),notices:[h("addon-notice")],align:"top"}),A=new OO.ui.FieldLayout(T,{label:h("addon-indent")}),ke(),Object.assign(mw.libs.wphl,{widget:I,indentWidget:T})}var i="object"==typeof window.Wikiplus||"object"==typeof window.Pages,i=(pe.setDisabled(!i),ue.setDisabled(!i||!mw.loader.getState("ext.wikiEditor")),we.setDisabled(!i),await z.open({title:h("addon-title"),message:he.$element.add(A.$element).add($("<p>",{html:h("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===W||"minerva"===d?"medium":"small"}).closing);if(he.$element.detach(),A.$element.detach(),"object"==typeof i&&"accept"===i.action){i=I.getValue();y.clear();for(const a of i)y.add(a);v=Number(T.getValue()),w.setObject("Wikiplus-highlight-addons",i),w.setObject("Wikiplus-highlight-indent",v)}}),P=("minerva"===d&&fe.find(".mw-ui-icon").addClass("mw-ui-icon-minerva-settings"),"function"==typeof M&&M().find("#wphl-settings-notify").click(e=>{e.preventDefault(),$("#wphl-settings").triggerHandler("click")}),async i=>{if(y.has("otherEditors")){let e=i.getOption("mode");e="text/mediawiki"===e?"mediawiki":e;var t=Z(CodeMirror,!0),o=i.getOption("json");await Y(t);for(const{option:n,addon:r=n,modes:s,complex:l=e=>!s||s.has(e)}of x.filter(({only:e})=>!e)){var a=Array.isArray(r)?r[0]:r;void 0===i.getOption(n)&&y.has(a)&&i.setOption(n,l(e,o))}"mediawiki"===e&&y.has("escape")?i.addKeyMap(C(CodeMirror)?q:K,!0):"mediawiki"!==e&&y.has("indentWithSpace")&&(i.setOption("indentUnit",v),i.setOption("indentWithTabs",!1)),j(i,e)}});mw.hook("InPageEdit.quickEdit.codemirror").add(({cm:e})=>P(e)),mw.hook("inspector").add(e=>P(e)),mw.hook("wiki-codemirror").add(e=>{e.getTextArea&&ge(e.getTextArea())||P(e)}),mw.libs.wphl={version:i,options:x,addons:y,i18n:S,i18nLang:W,wphlStyle:de,$portlet:fe,USING_LOCAL:u,MODE_LIST:c,ADDON_LIST:m,msg:h,htmlMsg:n,escapeHTML:p,handleContextMenu:j,setI18N:e,getAddonScript:Z,updateCachedConfig:te,getMwConfig:ae,renderEditor:re,handleOtherEditors:P,isPc:C}})();
|
|
7
|
+
(async()=>{"use strict";if(mw.libs.wphl)return;mw.libs.wphl={};const i="2.40",w="object"==typeof mw.storage&&"function"==typeof mw.storage.getObject?mw.storage:{getObject(e){var i=localStorage.getItem(e);if(!1===i)return!1;try{return JSON.parse(i)}catch(e){return null}},setObject(e,i){try{return localStorage.setItem(e,JSON.stringify(i))}catch(e){return!1}}},r=(Object.fromEntries=Object.fromEntries||(e=>{const i={};for(var[t,o]of e)i[t]=o;return i}),(e=i)=>e.split(".").map(Number));const h=(e,...i)=>mw.msg("wphl-"+e,...i),n=(...e)=>$($.parseHTML(h(...e)));var e=(...i)=>()=>{var e=$("<p>",{html:h(...i)});return mw.notify(e,{type:"success",autoHideSeconds:"long",tag:"wikiplus-highlight"}),e},t=r().slice(0,2).join(".");const s="//fastly.jsdelivr.net",l="npm/codemirror@5.65.3",L="gh/bhsd-harry/codemirror-mediawiki@1.1.6",o="npm/wikiplus-highlight@"+t,{wgPageName:D,wgNamespaceNumber:k,wgPageContentModel:N,wgServerName:F,wgScriptPath:H,wgUserLanguage:U,skin:d}=mw["config"]["values"],u=null!==mw.loader.getState("ext.CodeMirror"),a=w.getObject("InPageEditMwConfig")||{},V=""+F+H,f=a[V]||{},b=!(f.time>Date.now()-2592e6),B={css:"css","sanitized-css":"css",javascript:"javascript",json:"javascript",wikitext:"mediawiki"},c=u?{lib:"ext.CodeMirror.lib",css:"ext.CodeMirror.lib.mode.css",javascript:"ext.CodeMirror.lib.mode.javascript",lua:l+"/mode/lua/lua.min.js",mediawiki:b?"ext.CodeMirror.data":[],htmlmixed:"ext.CodeMirror.lib.mode.htmlmixed",xml:[]}:{lib:l+"/lib/codemirror.min.js",css:l+"/mode/css/css.min.js",javascript:l+"/mode/javascript/javascript.min.js",lua:l+"/mode/lua/lua.min.js",mediawiki:[],htmlmixed:l+"/mode/htmlmixed/htmlmixed.min.js",xml:l+"/mode/xml/xml.min.js"},m={searchcursor:l+"/addon/search/searchcursor.min.js",search:o+"/search.min.js",markSelection:l+"/addon/selection/mark-selection.min.js",activeLine:l+"/addon/selection/active-line.min.js",trailingspace:l+"/addon/edit/trailingspace.min.js",matchBrackets:l+"/addon/edit/matchbrackets.min.js",closeBrackets:l+"/addon/edit/closebrackets.min.js",matchTags:o+"/matchtags.min.js",fold:o+"/fold.min.js",wikiEditor:"ext.wikiEditor",contextmenu:"mediawiki.Title",lint:l+"/addon/lint/lint.min.js",annotateScrollbar:l+"/addon/scroll/annotatescrollbar.min.js",parser:"gh/bhsd-harry/wikiparser-node@0.6.21-b/bundle/bundle.min.js",lintWikitext:o+"/lint.min.js"},x=[{option:"styleSelectedText",addon:"search",download:"markSelection",only:!0,complex:()=>!y.has("wikiEditor")},{option:"styleActiveLine",addon:"activeLine"},{option:"showTrailingSpace",addon:"trailingspace"},{option:"matchBrackets",complex:(e,i)=>"mediawiki"!==e&&!i||{bracketRegex:/[{}[\]]/}},{option:"autoCloseBrackets",addon:"closeBrackets",complex:(e,i)=>"mediawiki"!==e&&!i||'()[]{}""'},{option:"matchTags",addon:["matchTags","fold"],modes:new Set(["mediawiki","widget"])},{option:"fold",modes:new Set(["mediawiki","widget"])}],y=new Set(w.getObject("Wikiplus-highlight-addons")||["search"]);let v=w.getObject("Wikiplus-highlight-indent")||4;const Q={'"':"quot","'":"apos","<":"lt",">":"gt","&":"amp"," ":"nbsp"},g=i=>e=>{e.replaceSelection(e.getSelection().split("\n").map(i).join("\n"),"around")},p=g(e=>[...e].map(e=>{if(e in Q)return`&${Q[e]};`;const i=e.codePointAt();return i<256?`&#${i};`:`&#x${i.toString(16)};`}).join("")),C=({keyMap:e})=>e.default===e.pcDefault,q={"Ctrl-/":p,"Ctrl-\\":g(encodeURIComponent)},K={"Cmd-/":p,"Cmd-\\":g(encodeURIComponent)},j=(u,e)=>{if(("mediawiki"===e||"widget"===e)&&y.has("contextmenu")){const t=$(u.getWrapperElement()).addClass("CodeMirror-contextmenu"),[o]=(mw.config.get("extCodeMirrorConfig")||{functionSynonyms:[{invoke:"invoke","调用":"invoke",widget:"widget","小工具":"widget"}]})["functionSynonyms"];var i=i=>new Set(Object.keys(o).filter(e=>o[e]===i).map(e=>e.startsWith("#")?e:"#"+e));const w=i("invoke"),h=i("widget");t.contextmenu(({pageX:e,pageY:i})=>{const t=u.coordsChar({left:e,top:i}),{line:o,ch:a}=t,n=u.getTokenTypeAt(t);if(/\bmw-(?:template-name|parserfunction)\b/.test(n)){const c=u.getLineTokens(o);for(let e=c.length-1;0<e;e--){var{type:r,end:s,string:l}=c[e];c[e-1].type===r&&(c[e-1].end=s,c[e-1].string+=l,c.splice(e,1))}const m=c.findIndex(({start:e,end:i})=>e<a&&i>=a),g=c[m].string.replace(/\u200E/g,"").replace(/_/g," ").trim();if(/\bmw-template-name\b/.test(n)){const p=new mw.Title(g);return 0!==p.namespace||g.startsWith(":")?open(p.getUrl(),"_blank"):open(mw.util.getUrl("Template:"+g),"_blank"),!1}if(!(m<2)&&/\bmw-parserfunction-delimiter\b/.test(c[m-1].type)&&/\bmw-parserfunction-name\b/.test(c[m-2].type)){var d=c[m-2].string.trim().toLowerCase();if(w.has(d))open(mw.util.getUrl("Module:"+g),"_blank");else{if(!h.has(d))return;open(mw.util.getUrl("Widget:"+g,{action:"edit"}),"_blank")}return!1}}})}},S=w.getObject("Wikiplus-highlight-i18n")||{};let M;S["wphl-version"]?((e,i)=>{var[t,o]=r(e),[a,n]=r(i);return t<a||t===a&&o<n})(S["wphl-version"],i)&&(M=e("welcome-upgrade",i,0)):M=e("welcome");const W={zh:"zh-hans","zh-hans":"zh-hans","zh-cn":"zh-hans","zh-my":"zh-hans","zh-sg":"zh-hans","zh-hant":"zh-hant","zh-tw":"zh-hant","zh-hk":"zh-hant","zh-mo":"zh-hant",ka:"ka"}[U]||"en",J=`${s}/${o}/i18n/${W}.json`,R=S["wphl-version"]===t;e=async()=>{R&&S["wphl-lang"]===W||(Object.assign(S,await $.ajax(J,{dataType:"json",cache:!0})),w.setObject("Wikiplus-highlight-i18n",S)),mw.messages.set(S)},t=Promise.all([mw.loader.using("mediawiki.util"),e()]);const G=e=>0<e.length?mw.loader.using(e):Promise.resolve(),X=e=>0<e.length?$.ajax(s+"/"+(1<e.length?"combine/":"")+e.join(),{dataType:"script",cache:!0}):Promise.resolve(),Y=async(e,i)=>{var t=e.filter(e=>!e.includes("/")),o=e.filter(e=>e.includes("/"));return!0===i?(await G(t),X(o)):!1===i?(await X(o),G(t)):Promise.all([G(t),X(o)])};let O;const Z=(e,i=!1)=>{const t=[];for(var{option:o,addon:a=o,download:n=Array.isArray(a)?o:a,only:r}of x)r&&i||o in e.optionHandlers||!ee(a,y)||t.push(m[n]);return t},ee=(e,i)=>Array.isArray(e)?e.some(e=>i.has(e)):i.has(e),ie=e=>{let i=[];var t,o="function"==typeof window.CodeMirror,a=o?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{},helpers:{}};if(o||(i.push(c.lib),u||mw.loader.load(`${s}/${l}/lib/codemirror.min.css`,"text/css")),"mediawiki"!==(e="mediawiki"===e&&f.config&&f.config.tags.html?"html":e)&&"widget"!==e||a.modes.mediawiki||(mw.loader.load(`${s}/${L}/mediawiki.min.css`,"text/css"),i.push(L+"/mediawiki.min.js")),"widget"===e||"html"===e)for(const n of["css","javascript","mediawiki","htmlmixed","xml"])a.modes[n]||(i=i.concat(c[n]));else i=i.concat(c[e]);return a.prototype.getSearchCursor||!y.has("search")||y.has("wikiEditor")||i.push(m.searchcursor),!a.prototype.annotateScrollbar&&"mediawiki"===e&&y.has("lint")&&i.push(m.annotateScrollbar),a.commands.findForward||!y.has("search")||y.has("wikiEditor")||i.push(m.search),!window.Parser&&"mediawiki"===e&&y.has("lint")&&i.push(m.parser),!a.optionHandlers.lint&&"mediawiki"===e&&y.has("lint")&&(mw.loader.load(`${s}/${l}/addon/lint/lint.min.css`,"text/css"),i.push(m.lint)),a.helpers.lint&&a.helpers.lint.mediawiki||"mediawiki"!==e||!y.has("lint")||i.push(m.lintWikitext),y.has("wikiEditor")&&((t=mw.loader.getState("ext.wikiEditor"))?"ready"!==t&&i.push(m.wikiEditor):y.delete("wikiEditor")),"ready"!==mw.loader.getState("mediawiki.Title")&&y.has("contextmenu")&&i.push(m.contextmenu),i.push(...Z(a)),Y(i,o?void 0:u)},te=e=>{a[V]={config:e,time:Date.now()},w.setObject("InPageEditMwConfig",a)},E=e=>e.flatMap(({aliases:e,name:i})=>e.map(e=>({alias:e,name:i}))),_=e=>Object.fromEntries(e.map(({alias:e,name:i})=>[e.replace(/:$/,""),i])),oe=e=>{for(const i of["indicator","poem","ref","tabs","tab","poll"])e.tags[i]&&(e.tagModes[i]="text/mediawiki")},ae=async(e,i)=>{if("mediawiki"===e||"widget"===e){u&&b&&await i;let e=mw.config.get("extCodeMirrorConfig");if(e||b||!R||({config:e}=f,oe(e),mw.config.set("extCodeMirrorConfig",e)),e&&e.redirect&&e.img)return e;const{magicwords:a,extensiontags:n,functionhooks:r,variables:s}=(await(new mw.Api).get({meta:"siteinfo",siprop:e?"magicwords":"magicwords|extensiontags|functionhooks|variables",formatversion:2}))["query"],l=new Set(["msg","raw","msgnw","subst","safesubst"]);if(e){const[d]=e["functionSynonyms"];var t,o;if(!d.subst)for({alias:t,name:o}of E(a.filter(({name:e})=>l.has(e))))d[t.replace(/:$/,"")]=o}else{e={tagModes:{pre:"mw-tag-pre",nowiki:"mw-tag-nowiki",ref:"text/mediawiki"},tags:Object.fromEntries(n.map(e=>[e.slice(1,-1),!0])),urlProtocols:mw.config.get("wgUrlProtocols")};const c=new Set([...r,...s,...l]),m=a.filter(({name:e,aliases:i})=>i.some(e=>/^__.+__$/.test(e))||c.has(e)),g=E(m.filter(e=>e["case-sensitive"])),p=E(m.filter(e=>!e["case-sensitive"])).map(({alias:e,name:i})=>({alias:e.toLowerCase(),name:i}));e.doubleUnderscore=[_(p.filter(({alias:e})=>/^__.+__$/.test(e))),_(g.filter(({alias:e})=>/^__.+__$/.test(e)))],e.functionSynonyms=[_(p.filter(({alias:e})=>!/^__.+__|^#$/.test(e))),_(g.filter(({alias:e})=>!/^__.+__|^#$/.test(e)))]}return e.redirect=a.find(({name:e})=>"redirect"===e).aliases,e.img=_(E(a.filter(({name:e})=>e.startsWith("img_")))),oe(e),mw.config.set("extCodeMirrorConfig",e),te(e),e}},ne={getContents(){return O.getValue()},setContents(e){return O.setValue(e),this},getSelection(){return O.getSelection()},setSelection(e){return O.setSelection(O.posFromIndex(e.start),"end"in e?O.posFromIndex(e.end):void 0),O.focus(),this},replaceSelection(e){return O.replaceSelection(e),this},getCaretPosition(e){var i=O.indexFromPos(O.getCursor("from")),t=O.indexFromPos(O.getCursor("to"));return e.startAndEnd?[i,t]:i},scrollToCaretPosition(){return O.scrollIntoView(),this}},re=async(e,i)=>{const n=i?"javascript":await(async()=>{if(D.endsWith("/doc"))return"mediawiki";if(274!==k&&828!==k)return B[N];const e=274===k?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(h("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()})(),t=ie(n),[o]=await Promise.all([ae(n,t),t]);if(!i&&y.has("wikiEditor"))try{if("function"==typeof mw.addWikiEditor)mw.addWikiEditor(e);else{const{modules:{dialogs:{config:s}}}=$["wikiEditor"];e.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...s.getDefaultConfig()}),s.replaceIcons(e)}}catch(e){y.delete("wikiEditor"),mw.notify("WikiEditor工具栏加载失败。",{type:"error"}),console.error(e)}"mediawiki"===n&&o.tags.html?(o.tagModes.html="htmlmixed",await ie("html")):"widget"!==n||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});var a=e.height();O&&O.toTextArea();const r=i||"json"===N;if((O=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"contenteditable",lineNumbers:!/Android\b/.test(navigator.userAgent),lineWrapping:!0,mode:n,mwConfig:o,json:r},Object.fromEntries(x.map(({option:e,addon:i=e,modes:t,complex:o=e=>!t||t.has(e)})=>{var a=Array.isArray(i)?i[0]:i;return[e,y.has(a)&&o(n,r)]})),"mediawiki"===n?{extraKeys:y.has("escape")&&(C(CodeMirror)?q:K)}:{indentUnit:y.has("indentWithSpace")?v:4,indentWithTabs:!y.has("indentWithSpace")}))).setSize(null,a),O.getWrapperElement().id="Wikiplus-CodeMirror",$.fn.textSelection&&e.textSelection("register",ne),y.has("wikiEditor")){const l=e.data("wikiEditorContext"),d=CodeMirror["keyMap"],c=()=>{$.wikiEditor.modules.dialogs.api.openDialog(l,"search-and-replace")};O.addKeyMap(d.default===d.pcDefault?{"Ctrl-F":c}:{"Cmd-F":c})}if(j(O,n),$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),!i){const m="object"==typeof window.Wikiplus?window.Wikiplus:{getSetting(e){var i=w.getObject("Wikiplus_Settings");return i&&i[e]}},g=m.getSetting("esc_to_exit_quickedit"),p=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},u=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")};O.addKeyMap($.extend(C(CodeMirror)?{"Ctrl-S":p,"Shift-Ctrl-S":u}:{"Cmd-S":p,"Shift-Cmd-S":u},!0===g||"true"===g?{Esc(){$("#Wikiplus-Quickedit-Back").triggerHandler("click")}}:{}))}O.refresh(),mw.hook("wiki-codemirror").fire(O)},se=document["body"],le=new MutationObserver(e=>{const i=$(e.flatMap(({addedNodes:e})=>[...e])).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");0<i.length&&re(i,"Wikiplus-Setting-Input"===i.attr("id"))}),de=(le.observe(se,{childList:!0}),$(se).on("keydown.wphl",".ui-dialog",function(e){if("Escape"===e.key){const i=$(this).children(".ui-dialog-content").data("context");i&&i.$textarea&&"Wikiplus-Quickedit"===i.$textarea.attr("id")&&e.stopPropagation()}}),document.querySelector("#wphl-style")||mw.loader.addStyleTag("#Wikiplus-CodeMirror{border:1px solid #c8ccd1;line-height:1.3;clear:both;-moz-user-select:auto;-webkit-user-select:auto;user-select:auto}#Wikiplus-CodeMirror .CodeMirror-gutter-wrapper{-moz-user-select:none;-webkit-user-select:none;user-select:none}div.Wikiplus-InterBox{font-size:14px;z-index:100}.skin-minerva .Wikiplus-InterBox{font-size:16px}.cm-trailingspace{text-decoration:underline wavy red}div.CodeMirror span.CodeMirror-matchingbracket{box-shadow:0 0 0 2px #9aef98}div.CodeMirror span.CodeMirror-nonmatchingbracket{box-shadow:0 0 0 2px #eace64}#Wikiplus-highlight-dialog .oo-ui-messageDialog-title{margin-bottom:0.28571429em}#Wikiplus-highlight-dialog .oo-ui-flaggedElement-notice{font-weight:normal;margin:0}.CodeMirror-contextmenu .cm-mw-template-name{cursor:pointer}.skin-moeskin #ca-more-actions li>a{display:inline-block;padding:0.4rem 0.8rem;line-height:1.5}.skin-moeskin .oo-ui-windowManager-modal>.oo-ui-dialog{z-index:101}")),{get:ce=e=>e.value,set:me=(e,i)=>{e.value=i}}=(de.id="wphl-style",$.valHooks.textarea||{}),ge=e=>"Wikiplus-Quickedit"===e.id||"Wikiplus-Setting-Input"===e.id;$.valHooks.textarea={get(e){return ge(e)&&O?O.getValue():ce(e)},set(e,i){ge(e)&&O?O.setValue(i):me(e,i)}},await t;let z,I,pe,ue,we,T,he,A;const ke=(e=[...y])=>{A.toggle(e.includes("indentWithSpace"))};const fe=$(mw.util.addPortletLink({minerva:"page-actions-overflow",citizen:"p-actions",moeskin:"ca-more-actions"}[d]||"p-cactions","#",h("portlet"),"wphl-settings")).click(async e=>{if(e.preventDefault(),z)I.setValue([...y]),T.setValue(v);else{await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),z=new OO.ui.MessageDialog({id:"Wikiplus-highlight-dialog"});const t=new OO.ui.WindowManager,o=(t.$element.appendTo(se),t.addWindows([z]),I=new OO.ui.CheckboxMultiselectInputWidget({options:[...x.map(({option:e,addon:i=e})=>{const t=Array.isArray(i)?i[0]:i;return{data:t,label:n("addon-"+t.toLowerCase())}}),...["wikiEditor","escape","contextmenu","lint","indentWithSpace","otherEditors"].map(e=>({data:e,label:n("addon-"+e.toLowerCase())}))],value:[...y]}).on("change",ke))["checkboxMultiselectWidget"];pe=o.findItemFromData("search"),ue=o.findItemFromData("wikiEditor"),we=o.findItemFromData("lint"),T=new OO.ui.NumberInputWidget({min:0,value:v}),he=new OO.ui.FieldLayout(I,{label:h("addon-label"),notices:[h("addon-notice")],align:"top"}),A=new OO.ui.FieldLayout(T,{label:h("addon-indent")}),ke(),Object.assign(mw.libs.wphl,{widget:I,indentWidget:T})}var i="object"==typeof window.Wikiplus||"object"==typeof window.Pages,i=(pe.setDisabled(!i),ue.setDisabled(!i||!mw.loader.getState("ext.wikiEditor")),we.setDisabled(!i),await z.open({title:h("addon-title"),message:he.$element.add(A.$element).add($("<p>",{html:h("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===W||"minerva"===d?"medium":"small"}).closing);if(he.$element.detach(),A.$element.detach(),"object"==typeof i&&"accept"===i.action){i=I.getValue();y.clear();for(const a of i)y.add(a);v=Number(T.getValue()),w.setObject("Wikiplus-highlight-addons",i),w.setObject("Wikiplus-highlight-indent",v)}}),P=("minerva"===d&&fe.find(".mw-ui-icon").addClass("mw-ui-icon-minerva-settings"),"function"==typeof M&&M().find("#wphl-settings-notify").click(e=>{e.preventDefault(),$("#wphl-settings").triggerHandler("click")}),async i=>{if(y.has("otherEditors")){let e=i.getOption("mode");e="text/mediawiki"===e?"mediawiki":e;var t=Z(CodeMirror,!0),o=i.getOption("json");await Y(t);for(const{option:n,addon:r=n,modes:s,complex:l=e=>!s||s.has(e)}of x.filter(({only:e})=>!e)){var a=Array.isArray(r)?r[0]:r;void 0===i.getOption(n)&&y.has(a)&&i.setOption(n,l(e,o))}"mediawiki"===e&&y.has("escape")?i.addKeyMap(C(CodeMirror)?q:K,!0):"mediawiki"!==e&&y.has("indentWithSpace")&&(i.setOption("indentUnit",v),i.setOption("indentWithTabs",!1)),j(i,e)}});mw.hook("InPageEdit.quickEdit.codemirror").add(({cm:e})=>P(e)),mw.hook("inspector").add(e=>P(e)),mw.hook("wiki-codemirror").add(e=>{e.getTextArea&&ge(e.getTextArea())||P(e)}),mw.libs.wphl={version:i,options:x,addons:y,i18n:S,i18nLang:W,wphlStyle:de,$portlet:fe,USING_LOCAL:u,MODE_LIST:c,ADDON_LIST:m,msg:h,htmlMsg:n,escapeHTML:p,handleContextMenu:j,setI18N:e,getAddonScript:Z,updateCachedConfig:te,getMwConfig:ae,renderEditor:re,handleOtherEditors:P,isPc:C}})();
|
|
8
8
|
//# sourceMappingURL=main.min.js.map
|
package/i18n/en.json
CHANGED
package/i18n/ka.json
CHANGED
package/i18n/zh-hans.json
CHANGED
package/i18n/zh-hant.json
CHANGED
package/lint.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
10
|
const include = mw.config.get('wgNamespaceNumber') === 10 && !mw.config.get('wgPageName').endsWith('/doc'),
|
|
11
|
-
lintOptions = {delay: 5000, selfContain: true}
|
|
11
|
+
lintOptions = {delay: 5000, selfContain: true},
|
|
12
|
+
{cmpPos, Pos} = CodeMirror;
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* annotationSource
|
|
@@ -23,8 +24,8 @@
|
|
|
23
24
|
return {
|
|
24
25
|
message: message + '\u200B'.repeat(lineErrors.indexOf(error)),
|
|
25
26
|
severity,
|
|
26
|
-
from:
|
|
27
|
-
to:
|
|
27
|
+
from: Pos(startLine, startCol),
|
|
28
|
+
to: Pos(endLine, endCol),
|
|
28
29
|
};
|
|
29
30
|
});
|
|
30
31
|
};
|
|
@@ -37,7 +38,10 @@
|
|
|
37
38
|
+ '}'
|
|
38
39
|
+ '.CodeMirror-lint-scroll-error{'
|
|
39
40
|
+ 'background:#d33;border-top:1px solid #d33;border-bottom:1px solid #d33;box-sizing:border-box'
|
|
40
|
-
+ '}'
|
|
41
|
+
+ '}'
|
|
42
|
+
+ '#wphl-lint-panel{background:#f7f7f7;border:1px solid #c8ccd1}'
|
|
43
|
+
+ '.wphl-lint-subpanel{margin-left:1ch;cursor:pointer}'
|
|
44
|
+
+ '.wphl-lint-count{display:inline-block;width:5ch;padding:1px 0 1px 1ch;vertical-align:text-bottom}',
|
|
41
45
|
);
|
|
42
46
|
CodeMirror.registerHelper('lint', 'mediawiki', annotate);
|
|
43
47
|
|
|
@@ -74,16 +78,51 @@
|
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
80
|
cm.setOption('scrollButtonHeight', 0);
|
|
81
|
+
let /** @type {CodeMirror.LintAnnotation[]} */ errors, /** @type {CodeMirror.LintAnnotation[]} */ warnings;
|
|
82
|
+
const /** @type {Map<CodeMirror.LintAnnotation[], number>} */ positionMap = new Map();
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* jump to next mark
|
|
86
|
+
* @param {CodeMirror.LintAnnotation[]} annotations 错误标记
|
|
87
|
+
*/
|
|
88
|
+
const nextMark = annotations => {
|
|
89
|
+
const {length} = annotations;
|
|
90
|
+
if (length > 0) {
|
|
91
|
+
const iNext = annotations.findIndex(({from}) => cmpPos(from, cm.getCursor()) >= 0),
|
|
92
|
+
offset = positionMap.get(annotations) || 0;
|
|
93
|
+
cm.scrollIntoView(annotations[(iNext + offset) % length].from);
|
|
94
|
+
positionMap.set(annotations, offset + 1);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
77
97
|
const annotateScrollWarn = cm.annotateScrollbar('CodeMirror-lint-scroll-warn'),
|
|
78
|
-
annotateScrollError = cm.annotateScrollbar('CodeMirror-lint-scroll-error')
|
|
98
|
+
annotateScrollError = cm.annotateScrollbar('CodeMirror-lint-scroll-error'),
|
|
99
|
+
$panelErrorCount = $('<span>', {class: 'wphl-lint-count'}),
|
|
100
|
+
$panelWarnCount = $('<span>', {class: 'wphl-lint-count'}),
|
|
101
|
+
$panelError = $('<span>', {
|
|
102
|
+
class: 'wphl-lint-subpanel',
|
|
103
|
+
html: [$('<span>', {class: 'CodeMirror-lint-marker CodeMirror-lint-marker-error'}), $panelErrorCount],
|
|
104
|
+
}).click(() => {
|
|
105
|
+
nextMark(errors);
|
|
106
|
+
}),
|
|
107
|
+
$panelWarn = $('<span>', {
|
|
108
|
+
class: 'wphl-lint-subpanel',
|
|
109
|
+
html: [$('<span>', {class: 'CodeMirror-lint-marker CodeMirror-lint-marker-warning'}), $panelWarnCount],
|
|
110
|
+
}).click(() => {
|
|
111
|
+
nextMark(warnings);
|
|
112
|
+
}),
|
|
113
|
+
$panelElement = $('<div>', {id: 'wphl-lint-panel', html: [$panelError, $panelWarn]});
|
|
79
114
|
|
|
80
115
|
/**
|
|
81
116
|
* update linting
|
|
82
117
|
* @param {CodeMirror.LintAnnotation[]} annotations all annotations
|
|
83
118
|
*/
|
|
84
119
|
const onUpdateLinting = annotations => {
|
|
85
|
-
|
|
86
|
-
|
|
120
|
+
errors = annotations.filter(({severity}) => severity !== 'warning');
|
|
121
|
+
warnings = annotations.filter(({severity}) => severity === 'warning');
|
|
122
|
+
annotateScrollWarn.update(warnings);
|
|
123
|
+
annotateScrollError.update(errors);
|
|
124
|
+
$panelErrorCount.text(errors.length);
|
|
125
|
+
$panelWarnCount.text(warnings.length);
|
|
87
126
|
},
|
|
88
127
|
performLint = () => {
|
|
89
128
|
cm.performLint();
|
|
@@ -93,13 +132,14 @@
|
|
|
93
132
|
cm.setOption('lint', false);
|
|
94
133
|
annotateScrollWarn.update([]);
|
|
95
134
|
annotateScrollError.update([]);
|
|
135
|
+
$panelElement.detach();
|
|
96
136
|
} else {
|
|
97
|
-
cm.setOption('lint', {...lintOptions, onUpdateLinting});
|
|
98
|
-
|
|
137
|
+
cm.setOption('lint', {...lintOptions, ...mw.libs.wphl.lintOptions, onUpdateLinting});
|
|
138
|
+
$panelElement.insertAfter(cm.getWrapperElement());
|
|
99
139
|
}
|
|
100
140
|
};
|
|
101
141
|
cm.setOption('gutters', ['CodeMirror-lint-markers']);
|
|
102
|
-
|
|
142
|
+
switchOption();
|
|
103
143
|
cm.addKeyMap(mw.libs.wphl.isPc(CodeMirror)
|
|
104
144
|
? {'Ctrl-K': performLint, 'Ctrl-L': switchOption}
|
|
105
145
|
: {'Cmd-K': performLint, 'Cmd-L': switchOption});
|
|
@@ -109,6 +149,9 @@
|
|
|
109
149
|
cm.state.lint.timeout = setTimeout(performLint, cm.state.lint.options.delay);
|
|
110
150
|
}
|
|
111
151
|
});
|
|
152
|
+
cm.on('cursorActivity', () => {
|
|
153
|
+
positionMap.clear();
|
|
154
|
+
});
|
|
112
155
|
};
|
|
113
156
|
|
|
114
157
|
mw.hook('wiki-codemirror').add(/** @param {CodeMirror.Editor} cm */ cm => {
|
|
@@ -116,6 +159,4 @@
|
|
|
116
159
|
lint(cm);
|
|
117
160
|
}
|
|
118
161
|
});
|
|
119
|
-
|
|
120
|
-
mw.libs.wphl.lintOptions = lintOptions;
|
|
121
162
|
})();
|
package/main.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
}
|
|
15
15
|
mw.libs.wphl = {}; // 开始加载
|
|
16
16
|
|
|
17
|
-
const version = '2.
|
|
17
|
+
const version = '2.40',
|
|
18
18
|
newAddon = 0;
|
|
19
19
|
|
|
20
20
|
/** @type {typeof mw.storage} */
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
const CDN = '//fastly.jsdelivr.net',
|
|
100
100
|
CM_CDN = 'npm/codemirror@5.65.3',
|
|
101
101
|
MW_CDN = 'gh/bhsd-harry/codemirror-mediawiki@1.1.6',
|
|
102
|
-
PARSER_CDN = 'gh/bhsd-harry/wikiparser-node@0.6.
|
|
102
|
+
PARSER_CDN = 'gh/bhsd-harry/wikiparser-node@0.6.21-b',
|
|
103
103
|
REPO_CDN = `npm/wikiplus-highlight@${majorVersion}`;
|
|
104
104
|
|
|
105
105
|
const {config: {values: {
|