wikiplus-highlight 2.7.6 → 2.8.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 CHANGED
@@ -1,8 +1,7 @@
1
1
  # Wikiplus-highlight
2
- [![jsdelivr hits](https://img.shields.io/jsdelivr/gh/hd/bhsd-harry/Wikiplus-highlight.svg)](https://github.com/bhsd-harry/Wikiplus-highlight)
3
- [![jsdelivr hits](https://img.shields.io/jsdelivr/npm/hd/wikiplus-highlight.svg)](https://www.npmjs.com/package/wikiplus-highlight)
4
2
  [![npm version](https://badge.fury.io/js/wikiplus-highlight.svg)](https://www.npmjs.com/package/wikiplus-highlight)
5
3
  [![npm downloads](https://img.shields.io/npm/dw/wikiplus-highlight.svg)](https://www.npmjs.com/package/wikiplus-highlight)
4
+ [![jsdelivr hits](https://img.shields.io/jsdelivr/npm/hd/wikiplus-highlight.svg)](https://www.npmjs.com/package/wikiplus-highlight)
6
5
 
7
6
  **Wikiplus-highlight** 是由 Bhsd 编写的一款 [Wikiplus](https://github.com/Wikiplus/Wikiplus) 语法高亮插件,它主要基于 MediaWiki 内置的 [JavaScript 模块](https://www.mediawiki.org/wiki/ResourceLoader/Core_modules)和 [CodeMirror](https://codemirror.net/) 编写。
8
7
 
@@ -13,13 +12,13 @@
13
12
  在*个人 JS 页*添加以下代码:
14
13
 
15
14
  ```javascript
16
- mw.loader.load('//cdn.jsdelivr.net/npm/wikiplus-highlight@2.7.6');
15
+ mw.loader.load('//cdn.jsdelivr.net/npm/wikiplus-highlight@2.8.0');
17
16
  ```
18
17
 
19
18
 
20
19
 
21
20
  ```javascript
22
- mw.loader.load('//unpkg.com/wikiplus-highlight@2.7.6/dist/main.min.js');
21
+ mw.loader.load('//unpkg.com/wikiplus-highlight@2.8.0/dist/main.min.js');
23
22
  ```
24
23
 
25
24
  ### 稳定版本
@@ -52,15 +51,15 @@ mw.loader.load('//unpkg.com/wikiplus-highlight/dist/main.min.js');
52
51
 
53
52
  除了使用以上快捷键,也可以通过在搜索框中按下 `Enter` 键或点击搜索框右侧的 `▼` 按钮来执行搜索下一处的命令,点击 `▲` 按钮将执行搜索上一处的命令。搜索可以使用字符串,也可以使用形如 `/re/` 或 `/re/i` 的正则表达式。正则表达式仅接受可选的 `i` 修饰符,暂不接受其他修饰符。全文中匹配的字符都会添加淡粉色背景。如果没有匹配的结果,搜索框会添加粉色背景。
54
53
 
55
- ### 高亮显示光标所在行
54
+ ### 高亮当前行
56
55
 
57
56
  使用这一插件时,如果当前没有选中的文字,光标所在行将添加浅蓝色背景。
58
57
 
59
- ### 显示尾随空格
58
+ ### 尾随空格
60
59
 
61
60
  使用这一插件时,每一行的尾随空格将添加红色波浪下划线。
62
61
 
63
- ### 高亮显示匹配和未匹配的括号
62
+ ### 匹配括号
64
63
 
65
64
  与 MediaWiki 官方提供的 [CodeMirror](https://www.mediawiki.org/wiki/Extension:CodeMirror) 扩展不同,这一插件只会在光标位于括号(包括 `{}`、`[]`,JavaScript、CSS 和 Lua 模式下还包括 `()`)处时才会生效,但括号匹配时会考虑其语法含义。以下是一个简单的例子:
66
65
 
@@ -70,15 +69,15 @@ mw.loader.load('//unpkg.com/wikiplus-highlight/dist/main.min.js');
70
69
 
71
70
  CodeMirror 扩展会错误地匹配 `<!-- -->` 注释内外的括号,而这个插件不会。匹配的括号对会添加绿色边框,未匹配的单个括号会添加黄色边框。
72
71
 
73
- ### 高亮显示匹配和未匹配的标签
72
+ ### 匹配标签
74
73
 
75
74
  匹配的标签对或自封闭标签会添加浅绿色背景,未匹配的标签会添加浅黄色背景。注意被高亮标记为错误的标签不会进行匹配。
76
75
 
77
- ### 右键点击可打开模板或模块页面
76
+ ### 快速打开模板
78
77
 
79
78
  右键点击被高亮标记为模板标题或 `#invoke` 魔术字的第一个参数(即模块标题)时,会在新标签页打开对应页面。如果当前站点安装了 [Widget](https://www.mediawiki.org/wiki/Extension:Widget) 扩展,则当右键点击 `#widget` 魔术字的第一个参数(即小部件标题)时会在新标签页打开对应小部件的编辑界面(即 `action=edit`)。
80
79
 
81
- ### 代码缩进使用空格而非 Tab
80
+ ### 调整缩进
82
81
 
83
82
  这不是一个真正意义上的插件,而是一个设置选项。默认设置下使用 Tab 进行缩进。勾选这一选项时,会出现一个新的文本框以设置缩进对应的空格个数,初始值为 `4`。
84
83
 
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";var e="2.7.6";const t="object"==typeof mw.storage&&"function"==typeof mw.storage.getObject?mw.storage:{getObject(e){e=localStorage.getItem(e);if(!1===e)return!1;try{return JSON.parse(e)}catch(e){return null}},setObject(e,i){var t;try{return t=JSON.stringify(i),localStorage.setItem(e,t)}catch(e){return!1}}},g=Object.fromEntries||(e=>{const i={};for(var[t,a]of e)i[t]=a;return i}),n=e=>e.split(".").map(e=>Number(e));const m=(e,...i)=>mw.msg("wphl-"+e,...i);var i=(...i)=>()=>{var e=$("<p>",{html:m(...i)});return mw.notify(e,{type:"success",autoHideSeconds:"long"}),e},a=n(e).slice(0,2).join(".");const o="//fastly.jsdelivr.net",r="npm/codemirror@5.65.3",l="gh/bhsd-harry/codemirror-mediawiki@1.1.1",s="npm/wikiplus-highlight@"+a,{wgPageName:u,wgNamespaceNumber:h,wgPageContentModel:p,wgServerName:P,wgScriptPath:E,wgUserLanguage:N,skin:c}=mw.config.values,w=null!==mw.loader.getState("ext.CodeMirror"),d=t.getObject("InPageEditMwConfig")||{},k=""+P+E,f=d[k]||{},b=f.time<Date.now()-2592e6,Q={css:"css","sanitized-css":"css",javascript:"javascript",json:"javascript",wikitext:"mediawiki"},x=w?{lib:"ext.CodeMirror.lib",css:"ext.CodeMirror.lib.mode.css",javascript:"ext.CodeMirror.lib.mode.javascript",lua:r+"/mode/lua/lua.min.js",mediawiki:b?"ext.CodeMirror.data":[],htmlmixed:"ext.CodeMirror.lib.mode.htmlmixed",xml:[]}:{lib:r+"/lib/codemirror.min.js",css:r+"/mode/css/css.min.js",javascript:r+"/mode/javascript/javascript.min.js",lua:r+"/mode/lua/lua.min.js",mediawiki:[],htmlmixed:r+"/mode/htmlmixed/htmlmixed.min.js",xml:r+"/mode/xml/xml.min.js"},v={searchcursor:r+"/addon/search/searchcursor.min.js",search:s+"/search.min.js",activeLine:r+"/addon/selection/active-line.min.js",markSelection:r+"/addon/selection/mark-selection.min.js",trailingspace:r+"/addon/edit/trailingspace.min.js",matchBrackets:r+"/addon/edit/matchbrackets.min.js",matchTags:s+"/matchtags.min.js"};let j=t.getObject("Wikiplus-highlight-addons")||["search"],y=t.getObject("Wikiplus-highlight-indent")||"4";const C=document.getElementById("wphl-contextmenu")||mw.loader.addStyleTag("#Wikiplus-CodeMirror .cm-mw-template-name{cursor:pointer}");C.id="wphl-contextmenu",C.disabled=!0;let W=t.getObject("Wikiplus-highlight-i18n"),S;W?((e,i)=>{var[e,t]=n(e),[i,a]=n(i);return e<i||e===i&&t<a})(W["wphl-version"],e)&&(S=i("welcome-upgrade",e)):(W={},S=i("welcome"));const M={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"}[N]||"en",U=`${o}/${s}/i18n/${M}.json`,O=W["wphl-version"]===a;e=Promise.all([mw.loader.using("mediawiki.util"),(async()=>{O&&W["wphl-lang"]===M||(W=await $.ajax(U,{dataType:"json",cache:!0}),t.setObject("Wikiplus-highlight-i18n",W)),mw.messages.set(W)})()]);const _=(e,i)=>0===e.length?Promise.resolve():i?mw.loader.using(e):$.ajax(o+"/"+(1<e.length?"combine/":"")+e.join(),{dataType:"script",cache:!0});let z;const D=async e=>{let i=[];const t=[],a=[],n="function"==typeof window.CodeMirror,s=n?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{}};["mediawiki","widget"].includes(e)&&!s.modes.mediawiki&&(mw.loader.load(`${o}/${l}/mediawiki.min.css`,"text/css"),(w?t:i).push(l+"/mediawiki.min.js")),"mediawiki"===e&&"object"==typeof f.config&&f.config.tags.html&&(e="html"),n||((w?i:a).push(x.lib),w||mw.loader.load(`${o}/${r}/lib/codemirror.min.css`,"text/css")),!s.prototype.getSearchCursor&&j.includes("search")&&a.push(v.searchcursor),!s.commands.findForward&&j.includes("search")&&a.push(v.search),!s.optionHandlers.styleActiveLine&&j.includes("activeLine")&&a.push(v.activeLine),!s.optionHandlers.styleSelectedText&&j.includes("search")&&a.push(v.markSelection),!s.optionHandlers.showTrailingSpace&&j.includes("trailingspace")&&a.push(v.trailingspace),!s.optionHandlers.matchBrackets&&j.includes("matchBrackets")&&a.push(v.matchBrackets),!s.optionHandlers.matchTags&&j.includes("matchTags")&&a.push(v.matchTags),["widget","html"].includes(e)?["css","javascript","mediawiki","htmlmixed","xml"].forEach(e=>{s.modes[e]||(i=i.concat(x[e]))}):s.modes[e]||("lua"===e?(w?t:i).push(x.lua):i=i.concat(x[e])),n?await Promise.all([_(i,w),_(t),_(a)]):w?(await _(i,!0),await Promise.all([_(t),_(a)])):(await _(a),await _(i))},A=e=>{d[k]={config:e,time:Date.now()},t.setObject("InPageEditMwConfig",d)},V=async(e,i)=>{var t=i?"javascript":await(async()=>{if(![274,828].includes(h)||u.endsWith("/doc"))return u.endsWith("/doc")?"mediawiki":Q[p];{const e=274===h?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(m("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()}})(),a=D(t);const[n]=await Promise.all([(async(i,t)=>{if(["mediawiki","widget"].includes(i)){w&&b&&await t;let e=mw.config.get("extCodeMirrorConfig");if(e||b||!O||({config:e}=f,mw.config.set("extCodeMirrorConfig",e)),e&&e.redirect&&e.img)return e;if(e)return e;const{magicwords:a,extensiontags:n,functionhooks:s,variables:o}=(await(new mw.Api).get({meta:"siteinfo",siprop:e?"magicwords":"magicwords|extensiontags|functionhooks|variables",formatversion:2}))["query"],r=["msg","raw","msgnw","subst","safesubst"];i=e=>e.flatMap(({aliases:e,name:i})=>e.map(e=>({alias:e,name:i}))),t=e=>g(e.map(({alias:e,name:i})=>[e.replace(/:$/,""),i]));if(e){const[l]=e["functionSynonyms"];l.subst||i(a.filter(({name:e})=>r.includes(e))).forEach(({alias:e,name:i})=>{l[e.replace(/:$/,"")]=i})}else{e={tagModes:{pre:"mw-tag-pre",nowiki:"mw-tag-nowiki",ref:"text/mediawiki"},tags:g(n.map(e=>[e.slice(1,-1),!0])),urlProtocols:mw.config.get("wgUrlProtocols")};const c=new Set([...s,...o,...r]),d=a.filter(({name:e,aliases:i})=>i.some(e=>/^__.+__$/.test(e))||c.has(e)),m=i(d.filter(e=>e["case-sensitive"])),u=i(d.filter(e=>!e["case-sensitive"])).map(({alias:e,name:i})=>({alias:e.toLowerCase(),name:i}));e.doubleUnderscore=[t(u.filter(({alias:e})=>/^__.+__$/.test(e))),t(m.filter(({alias:e})=>/^__.+__$/.test(e)))],e.functionSynonyms=[t(u.filter(({alias:e})=>!/^__.+__|^#$/.test(e))),t(m.filter(({alias:e})=>!/^__.+__|^#$/.test(e)))]}return e.redirect=a.find(({name:e})=>"redirect"===e).aliases,e.img=t(i(a.filter(({name:e})=>e.startsWith("img_")))),mw.config.set("extCodeMirrorConfig",e),A(e),e}})(t,a),a]);"mediawiki"===t&&n.tags.html?(n.tagModes.html="htmlmixed",await D("html")):"widget"!==t||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});var a=e.height(),s=(z&&z.toTextArea(),i||"json"===p),o=$.client.profile()["name"];(z=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"safari"===o?"textarea":"contenteditable",lineNumbers:!0,lineWrapping:!0,mode:t,mwConfig:n,json:s,styleActiveLine:j.includes("activeLine"),styleSelectedText:j.includes("search"),showTrailingSpace:j.includes("trailingspace"),matchBrackets:j.includes("matchBrackets")&&("mediawiki"!==t&&!s||{bracketRegex:/[{}[\]]/}),matchTags:j.includes("matchBrackets")&&["mediawiki","widget"].includes(t)},"mediawiki"===t?{}:{indentUnit:j.includes("indentWithSpace")?y:"4",indentWithTabs:!j.includes("indentWithSpace")}))).setSize(null,a),z.refresh();const r=z.getWrapperElement();if(r.id="Wikiplus-CodeMirror",["mediawiki","widget"].includes(t)&&j.includes("contextmenu")){C.disabled=!1;const[l]=mw.config.get("extCodeMirrorConfig")["functionSynonyms"];e=i=>Object.keys(l).filter(e=>l[e]===i).map(e=>e.startsWith("#")?e:"#"+e);const c=e("invoke"),d=e("widget");await mw.loader.using("mediawiki.Title"),$(r).on("contextmenu",".cm-mw-template-name",function(){const e=this.textContent.replace(/\u200e/g,"").trim(),i=new mw.Title(e);return 0!==i.namespace||e.startsWith(":")?open(i.getUrl(),"_blank"):open(mw.util.getUrl("Template:"+e),"_blank"),!1}).on("contextmenu",".cm-mw-parserfunction-name + .cm-mw-parserfunction-delimiter + .cm-mw-parserfunction",function(){var e=this.previousSibling.previousSibling.textContent.trim().toLowerCase();return c.includes(e)?open(mw.util.getUrl("Module:"+this.textContent),"_blank"):d.includes(e)&&open(mw.util.getUrl("Widget:"+this.textContent,{action:"edit"}),"_blank"),!1})}else C.disabled=!0;$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),i||(o=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},s=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},z.addKeyMap($.extend({"Ctrl-S":o,"Cmd-S":o,"Shift-Ctrl-S":s,"Shift-Cmd-S":s},Wikiplus.getSetting("esc_to_exit_quickedit")?{Esc(){$("#Wikiplus-Quickedit-Back").triggerHandler("click")}}:{}))),mw.hook("wiki-codemirror").fire(z)},F=new MutationObserver(e=>{const i=$(e.flatMap(({addedNodes:e})=>[...e])).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");0!==i.length&&V(i,"Wikiplus-Setting-Input"===i.attr("id"))}),J=(F.observe(document.body,{childList:!0}),document.getElementById("wphl-style")||mw.loader.addStyleTag("#Wikiplus-Quickedit+.CodeMirror,#Wikiplus-Setting-Input+.CodeMirror{border:1px solid #c8ccd1;line-height:1.3;clear:both}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}")),{get:q=function(e){return e.value},set:K=function(e,i){e.value=i}}=(J.id="wphl-style",$.valHooks.textarea||{}),R=e=>["Wikiplus-Quickedit","Wikiplus-Setting-Input"].includes(e.id);$.valHooks.textarea={get(e){return R(e)&&z?z.getValue():q(e)},set(e,i){R(e)&&z?z.setValue(i):K(e,i)}},await e;let T,L,I,B,H;const G=(e=j)=>{H.toggle(e.includes("indentWithSpace"))};const X=$(mw.util.addPortletLink({minerva:"page-actions-overflow",citizen:"p-actions"}[c]||"p-cactions","#",m("portlet"),"wphl-settings")).click(async e=>{if(e.preventDefault(),!T){await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),T=new OO.ui.MessageDialog({id:"Wikiplus-highlight-dialog"});const i=new OO.ui.WindowManager;i.$element.appendTo(document.body),i.addWindows([T]),L=new OO.ui.CheckboxMultiselectInputWidget({options:[{data:"search",label:m("addon-search")},{data:"activeLine",label:m("addon-active-line")},{data:"trailingspace",label:m("addon-trailingspace")},{data:"matchBrackets",label:m("addon-matchbrackets")},{data:"matchTags",label:m("addon-matchtags")},{data:"contextmenu",label:m("addon-contextmenu")},{data:"indentWithSpace",label:m("addon-indentwithspace")}],value:j}).on("change",G),I=new OO.ui.NumberInputWidget({min:0,value:y}),B=new OO.ui.FieldLayout(L,{label:m("addon-label"),notices:[m("addon-notice")],align:"top"}),H=new OO.ui.FieldLayout(I,{label:m("addon-indent")}),G()}T.open({title:m("addon-title"),message:B.$element.add(H.$element).add($("<p>",{html:m("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===M?"medium":"small"}).closing.then(e=>{B.$element.detach(),H.$element.detach(),"object"==typeof e&&"accept"===e.action&&(j=L.getValue(),y=I.getValue(),t.setObject("Wikiplus-highlight-addons",j),t.setObject("Wikiplus-highlight-indent",y))})});"minerva"===c&&X.find("a").addClass("mw-ui-icon-minerva-settings"),"function"==typeof S&&S().find("#wphl-settings-notify").click(e=>{e.preventDefault(),$("#wphl-settings").triggerHandler("click")})})();
7
+ (async()=>{"use strict";var e="2.8";const t="object"==typeof mw.storage&&"function"==typeof mw.storage.getObject?mw.storage:{getObject(e){e=localStorage.getItem(e);if(!1===e)return!1;try{return JSON.parse(e)}catch(e){return null}},setObject(e,i){var t;try{return t=JSON.stringify(i),localStorage.setItem(e,t)}catch(e){return!1}}},g=Object.fromEntries||(e=>{const i={};for(var[t,a]of e)i[t]=a;return i}),n=e=>e.split(".").map(e=>Number(e));const m=(e,...i)=>mw.msg("wphl-"+e,...i);var i=(...i)=>()=>{var e=$("<p>",{html:m(...i)});return mw.notify(e,{type:"success",autoHideSeconds:"long"}),e},a=n(e).slice(0,2).join(".");const o="//fastly.jsdelivr.net",l="npm/codemirror@5.65.3",r="gh/bhsd-harry/codemirror-mediawiki@1.1.3",s="npm/wikiplus-highlight@"+a,{wgPageName:u,wgNamespaceNumber:h,wgPageContentModel:p,wgServerName:P,wgScriptPath:E,wgUserLanguage:N,skin:c}=mw.config.values,w=null!==mw.loader.getState("ext.CodeMirror"),d=t.getObject("InPageEditMwConfig")||{},f=""+P+E,k=d[f]||{},b=k.time<Date.now()-2592e6,Q={css:"css","sanitized-css":"css",javascript:"javascript",json:"javascript",wikitext:"mediawiki"},x=w?{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"},v={searchcursor:l+"/addon/search/searchcursor.min.js",search:s+"/search.min.js",activeLine:l+"/addon/selection/active-line.min.js",markSelection:l+"/addon/selection/mark-selection.min.js",trailingspace:l+"/addon/edit/trailingspace.min.js",matchBrackets:l+"/addon/edit/matchbrackets.min.js",matchTags:s+"/matchtags.min.js",foldCode:l+"/addon/fold/foldcode.min.js",fold:s+"/fold.min.js"};let j=t.getObject("Wikiplus-highlight-addons")||["search"],y=t.getObject("Wikiplus-highlight-indent")||"4";const C=document.getElementById("wphl-contextmenu")||mw.loader.addStyleTag("#Wikiplus-CodeMirror .cm-mw-template-name{cursor:pointer}");C.id="wphl-contextmenu",C.disabled=!0;let W=t.getObject("Wikiplus-highlight-i18n"),S;W?((e,i)=>{var[e,t]=n(e),[i,a]=n(i);return e<i||e===i&&t<a})(W["wphl-version"],e)&&(S=i("welcome-upgrade",e)):(W={},S=i("welcome"));const M={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"}[N]||"en",U=`${o}/${s}/i18n/${M}.json`,O=W["wphl-version"]===a;e=Promise.all([mw.loader.using("mediawiki.util"),(async()=>{O&&W["wphl-lang"]===M||(W=await $.ajax(U,{dataType:"json",cache:!0}),t.setObject("Wikiplus-highlight-i18n",W)),mw.messages.set(W)})()]);const _=(e,i)=>0===e.length?Promise.resolve():i?mw.loader.using(e):$.ajax(o+"/"+(1<e.length?"combine/":"")+e.join(),{dataType:"script",cache:!0});let z;const D=async e=>{let i=[];const t=[],a=[],n="function"==typeof window.CodeMirror,s=n?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{}};["mediawiki","widget"].includes(e)&&!s.modes.mediawiki&&(mw.loader.load(`${o}/${r}/mediawiki.min.css`,"text/css"),(w?t:i).push(r+"/mediawiki.min.js")),"mediawiki"===e&&"object"==typeof k.config&&k.config.tags.html&&(e="html"),n||((w?i:a).push(x.lib),w||mw.loader.load(`${o}/${l}/lib/codemirror.min.css`,"text/css")),!s.prototype.getSearchCursor&&j.includes("search")&&a.push(v.searchcursor),!s.commands.findForward&&j.includes("search")&&a.push(v.search),!s.optionHandlers.styleActiveLine&&j.includes("activeLine")&&a.push(v.activeLine),!s.optionHandlers.styleSelectedText&&j.includes("search")&&a.push(v.markSelection),!s.optionHandlers.showTrailingSpace&&j.includes("trailingspace")&&a.push(v.trailingspace),!s.optionHandlers.matchBrackets&&j.includes("matchBrackets")&&a.push(v.matchBrackets),!s.optionHandlers.matchTags&&j.includes("matchTags")&&a.push(v.matchTags),!s.prototype.foldCode&&j.includes("fold")&&a.push(v.foldCode),!s.optionHandlers.fold&&j.includes("fold")&&a.push(v.fold),["widget","html"].includes(e)?["css","javascript","mediawiki","htmlmixed","xml"].forEach(e=>{s.modes[e]||(i=i.concat(x[e]))}):s.modes[e]||("lua"===e?(w?t:i).push(x.lua):i=i.concat(x[e])),n?await Promise.all([_(i,w),_(t),_(a)]):w?(await _(i,!0),await Promise.all([_(t),_(a)])):(await _(a),await _(i))},A=e=>{d[f]={config:e,time:Date.now()},t.setObject("InPageEditMwConfig",d)},V=async(e,i)=>{var t=i?"javascript":await(async()=>{if(![274,828].includes(h)||u.endsWith("/doc"))return u.endsWith("/doc")?"mediawiki":Q[p];{const e=274===h?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(m("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()}})(),a=D(t);const[n]=await Promise.all([(async(i,t)=>{if(["mediawiki","widget"].includes(i)){w&&b&&await t;let e=mw.config.get("extCodeMirrorConfig");if(e||b||!O||({config:e}=k,mw.config.set("extCodeMirrorConfig",e)),e&&e.redirect&&e.img)return e;if(e)return e;const{magicwords:a,extensiontags:n,functionhooks:s,variables:o}=(await(new mw.Api).get({meta:"siteinfo",siprop:e?"magicwords":"magicwords|extensiontags|functionhooks|variables",formatversion:2}))["query"],l=["msg","raw","msgnw","subst","safesubst"];i=e=>e.flatMap(({aliases:e,name:i})=>e.map(e=>({alias:e,name:i}))),t=e=>g(e.map(({alias:e,name:i})=>[e.replace(/:$/,""),i]));if(e){const[r]=e["functionSynonyms"];r.subst||i(a.filter(({name:e})=>l.includes(e))).forEach(({alias:e,name:i})=>{r[e.replace(/:$/,"")]=i})}else{e={tagModes:{pre:"mw-tag-pre",nowiki:"mw-tag-nowiki",ref:"text/mediawiki"},tags:g(n.map(e=>[e.slice(1,-1),!0])),urlProtocols:mw.config.get("wgUrlProtocols")};const c=new Set([...s,...o,...l]),d=a.filter(({name:e,aliases:i})=>i.some(e=>/^__.+__$/.test(e))||c.has(e)),m=i(d.filter(e=>e["case-sensitive"])),u=i(d.filter(e=>!e["case-sensitive"])).map(({alias:e,name:i})=>({alias:e.toLowerCase(),name:i}));e.doubleUnderscore=[t(u.filter(({alias:e})=>/^__.+__$/.test(e))),t(m.filter(({alias:e})=>/^__.+__$/.test(e)))],e.functionSynonyms=[t(u.filter(({alias:e})=>!/^__.+__|^#$/.test(e))),t(m.filter(({alias:e})=>!/^__.+__|^#$/.test(e)))]}return e.redirect=a.find(({name:e})=>"redirect"===e).aliases,e.img=t(i(a.filter(({name:e})=>e.startsWith("img_")))),mw.config.set("extCodeMirrorConfig",e),A(e),e}})(t,a),a]);"mediawiki"===t&&n.tags.html?(n.tagModes.html="htmlmixed",await D("html")):"widget"!==t||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});var a=e.height(),s=(z&&z.toTextArea(),i||"json"===p),o=$.client.profile()["name"];(z=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"safari"===o?"textarea":"contenteditable",lineNumbers:!0,lineWrapping:!0,mode:t,mwConfig:n,json:s,styleActiveLine:j.includes("activeLine"),styleSelectedText:j.includes("search"),showTrailingSpace:j.includes("trailingspace"),matchBrackets:j.includes("matchBrackets")&&("mediawiki"!==t&&!s||{bracketRegex:/[{}[\]]/}),matchTags:j.includes("matchBrackets")&&["mediawiki","widget"].includes(t)},"mediawiki"===t?{}:{indentUnit:j.includes("indentWithSpace")?y:"4",indentWithTabs:!j.includes("indentWithSpace")}))).setSize(null,a),z.refresh();const l=z.getWrapperElement();if(l.id="Wikiplus-CodeMirror",["mediawiki","widget"].includes(t)&&j.includes("contextmenu")){C.disabled=!1;const[r]=mw.config.get("extCodeMirrorConfig")["functionSynonyms"];e=i=>Object.keys(r).filter(e=>r[e]===i).map(e=>e.startsWith("#")?e:"#"+e);const c=e("invoke"),d=e("widget");await mw.loader.using("mediawiki.Title"),$(l).on("contextmenu",".cm-mw-template-name",function(){const e=this.textContent.replace(/\u200e/g,"").trim(),i=new mw.Title(e);return 0!==i.namespace||e.startsWith(":")?open(i.getUrl(),"_blank"):open(mw.util.getUrl("Template:"+e),"_blank"),!1}).on("contextmenu",".cm-mw-parserfunction-name + .cm-mw-parserfunction-delimiter + .cm-mw-parserfunction",function(){var e=this.previousSibling.previousSibling.textContent.trim().toLowerCase();return c.includes(e)?open(mw.util.getUrl("Module:"+this.textContent),"_blank"):d.includes(e)&&open(mw.util.getUrl("Widget:"+this.textContent,{action:"edit"}),"_blank"),!1})}else C.disabled=!0;$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),i||(o=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},s=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},z.addKeyMap($.extend({"Ctrl-S":o,"Cmd-S":o,"Shift-Ctrl-S":s,"Shift-Cmd-S":s},Wikiplus.getSetting("esc_to_exit_quickedit")?{Esc(){$("#Wikiplus-Quickedit-Back").triggerHandler("click")}}:{}))),mw.hook("wiki-codemirror").fire(z)},F=new MutationObserver(e=>{const i=$(e.flatMap(({addedNodes:e})=>[...e])).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");0!==i.length&&V(i,"Wikiplus-Setting-Input"===i.attr("id"))}),J=(F.observe(document.body,{childList:!0}),document.getElementById("wphl-style")||mw.loader.addStyleTag("#Wikiplus-Quickedit+.CodeMirror,#Wikiplus-Setting-Input+.CodeMirror{border:1px solid #c8ccd1;line-height:1.3;clear:both}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}")),{get:q=function(e){return e.value},set:K=function(e,i){e.value=i}}=(J.id="wphl-style",$.valHooks.textarea||{}),R=e=>["Wikiplus-Quickedit","Wikiplus-Setting-Input"].includes(e.id);$.valHooks.textarea={get(e){return R(e)&&z?z.getValue():q(e)},set(e,i){R(e)&&z?z.setValue(i):K(e,i)}},await e;let T,L,I,H,B;const G=(e=j)=>{B.toggle(e.includes("indentWithSpace"))};const X=$(mw.util.addPortletLink({minerva:"page-actions-overflow",citizen:"p-actions"}[c]||"p-cactions","#",m("portlet"),"wphl-settings")).click(async e=>{if(e.preventDefault(),!T){await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),T=new OO.ui.MessageDialog({id:"Wikiplus-highlight-dialog"});const i=new OO.ui.WindowManager;i.$element.appendTo(document.body),i.addWindows([T]),L=new OO.ui.CheckboxMultiselectInputWidget({options:[{data:"search",label:m("addon-search")},{data:"activeLine",label:m("addon-active-line")},{data:"trailingspace",label:m("addon-trailingspace")},{data:"matchBrackets",label:m("addon-matchbrackets")},{data:"matchTags",label:m("addon-matchtags")},{data:"contextmenu",label:m("addon-contextmenu")},{data:"indentWithSpace",label:m("addon-indentwithspace")}],value:j}).on("change",G),I=new OO.ui.NumberInputWidget({min:0,value:y}),H=new OO.ui.FieldLayout(L,{label:m("addon-label"),notices:[m("addon-notice")],align:"top"}),B=new OO.ui.FieldLayout(I,{label:m("addon-indent")}),G()}T.open({title:m("addon-title"),message:H.$element.add(B.$element).add($("<p>",{html:m("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===M?"medium":"small"}).closing.then(e=>{H.$element.detach(),B.$element.detach(),"object"==typeof e&&"accept"===e.action&&(j=L.getValue(),y=I.getValue(),t.setObject("Wikiplus-highlight-addons",j),t.setObject("Wikiplus-highlight-indent",y))})});"minerva"===c&&X.find("a").addClass("mw-ui-icon-minerva-settings"),"function"==typeof S&&S().find("#wphl-settings-notify").click(e=>{e.preventDefault(),$("#wphl-settings").triggerHandler("click")})})();
8
8
  //# sourceMappingURL=main.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"../","sources":["main.js"],"names":["version","storage","mw","getObject","key","json","localStorage","getItem","JSON","parse","e","setObject","value","let","stringify","setItem","fromEntries","Object","entries","obj","getVersion","str","split","map","s","Number","msg","args","notify","$p","$","html","type","autoHideSeconds","majorVersion","slice","join","CDN","CM_CDN","MW_CDN","REPO_CDN","wgPageName","page","wgNamespaceNumber","ns","wgPageContentModel","contentmodel","wgServerName","server","wgScriptPath","scriptPath","wgUserLanguage","userLang","skin","config","values","USING_LOCAL","loader","getState","ALL_SETTINGS_CACHE","SITE_ID","SITE_SETTINGS","EXPIRED","time","Date","now","CONTENTMODEL","css","sanitized-css","javascript","wikitext","MODE_LIST","lib","lua","mediawiki","htmlmixed","xml","ADDON_LIST","searchcursor","search","activeLine","markSelection","trailingspace","matchBrackets","matchTags","addons","indent","contextmenuStyle","document","getElementById","addStyleTag","id","disabled","i18n","welcome","a","b","a0","a1","b0","b1","cmpVersion","i18nLang","zh","zh-hans","zh-cn","zh-my","zh-sg","zh-hant","zh-tw","zh-hk","zh-mo","I18N_CDN","isLatest","i18nPromise","Promise","all","using","async","ajax","dataType","cache","messages","set","setI18N","getScript","urls","local","length","resolve","cm","initMode","scripts","externalScript","addonScript","loaded","window","CodeMirror","CM","modes","prototype","commands","optionHandlers","includes","load","push","tags","getSearchCursor","findForward","styleActiveLine","styleSelectedText","showTrailingSpace","forEach","lang","concat","updateCachedConfig","renderEditor","$target","setting","mode","endsWith","pageMode","OO","ui","confirm","actions","label","action","toLowerCase","getPageMode","initModePromise","mwConfig","get","redirect","img","magicwords","extensiontags","functionhooks","variables","Api","meta","siprop","formatversion","query","otherMagicwords","getAliases","words","flatMap","aliases","name","alias","getConfig","replace","insensitive","functionSynonyms","subst","filter","tagModes","pre","nowiki","ref","tag","urlProtocols","realMagicwords","Set","allMagicwords","some","test","has","sensitive","word","doubleUnderscore","find","startsWith","getMwConfig","mimeModes","widget","defineMIME","noinclude","height","toTextArea","client","profile","fromTextArea","extend","inputStyle","lineNumbers","lineWrapping","bracketRegex","indentUnit","indentWithTabs","setSize","refresh","wrapper","getWrapperElement","synonyms","getSysnonyms","keys","invoke","on","text","this","textContent","trim","title","Title","namespace","open","getUrl","util","parserFunction","previousSibling","children","attr","submit","triggerHandler","submitMinor","click","addKeyMap","Ctrl-S","Cmd-S","Shift-Ctrl-S","Shift-Cmd-S","Wikiplus","getSetting","Esc","hook","fire","observer","MutationObserver","records","$editArea","addedNodes","wphlStyle","observe","body","childList","elem","valHooks","textarea","isWikiplus","getValue","setValue","dialog","indentWidget","field","indentField","toggleIndent","toggle","$portlet","addPortletLink","minerva","citizen","preventDefault","MessageDialog","windowManager","WindowManager","$element","appendTo","addWindows","CheckboxMultiselectInputWidget","options","data","NumberInputWidget","min","FieldLayout","notices","align","message","add","flags","size","closing","then","detach","addClass"],"mappings":";;;;;;CAOA,uBAGC,IAAMA,EAAU,QAMhB,MAAMC,EAAgC,iBAAfC,GAAGD,SAAwD,mBAAzBC,GAAGD,QAAQE,UACjED,GAAGD,QACH,CACDE,UAAUC,GACHC,EAAOC,aAAaC,QAAQH,GAClC,IAAa,IAATC,EACH,OAAO,EAER,IACC,OAAOG,KAAKC,MAAMJ,GACjB,MAAOK,GACR,OAAO,OAGTC,UAAUP,EAAKQ,GACdC,IAA0BR,EAC1B,IAEC,OADAA,EAAOG,KAAKM,UAAUF,GACfN,aAAaS,QAAQX,EAAKC,GAChC,MAAOK,GACR,OAAO,KAQLM,EAAcC,OAAOD,cAAgBE,IAC1C,MAAyBC,EAAM,GAC/B,IAAK,GAAM,CAACf,EAAKQ,KAAUM,EAC1BC,EAAIf,GAAOQ,EAEZ,OAAOO,IAOFC,EAAaC,GAAOA,EAAIC,MAAM,KAAKC,IAAIC,GAAKC,OAAOD,IAkBzD,MAAME,EAAM,CAACtB,KAAQuB,IAASzB,GAAGwB,IAAI,QAAQtB,KAAUuB,GAKvD,IAAMC,EAAS,IAAID,IAAS,KAC3B,IAAkDE,EAAKC,EAAE,MAAO,CAACC,KAAML,KAAOC,KAE9E,OADAzB,GAAG0B,OAAOC,EAAI,CAACG,KAAM,UAAWC,gBAAiB,SAC1CJ,GAIFK,EAAed,EAAWpB,GAASmC,MAAM,EAAG,GAAGC,KAAK,KAG1D,MAAMC,EAAM,wBACXC,EAAS,wBACTC,EAAS,2CACTC,EAAW,0BAA0BN,EAMhC,CACLO,WAAYC,EACZC,kBAAmBC,EACnBC,mBAAoBC,EACpBC,aAAcC,EACdC,aAAcC,EACdC,eAAgBC,EAChBC,KAAAA,GACGnD,GAAGoD,OAAOC,OAGRC,EAAuD,OAAzCtD,GAAGuD,OAAOC,SAAS,kBACtCC,EAAqB1D,EAAQE,UAAU,uBAAyB,GAChEyD,EAAU,GAAGZ,EAASE,EACtBW,EAAgBF,EAAmBC,IAAY,GAC/CE,EAAUD,EAAcE,KAAOC,KAAKC,MAAQ,OAEDC,EAAe,CAC1DC,IAAK,MACLC,gBAAiB,MACjBC,WAAY,aACZhE,KAAM,aACNiE,SAAU,aAILC,EAAYf,EACf,CACDgB,IAAK,qBACLL,IAAK,8BACLE,WAAY,qCACZI,IAAQnC,EAAH,uBACLoC,UAAWZ,EAAU,sBAAwB,GAC7Ca,UAAW,oCACXC,IAAK,IAEJ,CACDJ,IAAQlC,EAAH,yBACL6B,IAAQ7B,EAAH,uBACL+B,WAAe/B,EAAH,qCACZmC,IAAQnC,EAAH,uBACLoC,UAAW,GACXC,UAAcrC,EAAH,mCACXsC,IAAQtC,EAAH,wBAGDuC,EAAa,CAClBC,aAAiBxC,EAAH,oCACdyC,OAAWvC,EAAH,iBACRwC,WAAe1C,EAAH,sCACZ2C,cAAkB3C,EAAH,yCACf4C,cAAkB5C,EAAH,mCACf6C,cAAkB7C,EAAH,mCACf8C,UAAc5C,EAAH,qBAKZ3B,IAA4BwE,EAASpF,EAAQE,UAAU,8BAFjC,CAAC,UAGAmF,EAASrF,EAAQE,UAAU,8BAFjC,IAKjB,MAAsCoF,EAAmBC,SAASC,eAAe,qBAC7EvF,GAAGuD,OAAOiC,YAAY,6DAC1BH,EAAiBI,GAAK,mBACtBJ,EAAiBK,UAAW,EAE5B/E,IAA0CgF,EAAO5F,EAAQE,UAAU,2BACV2F,EACpDD,GAxGc,CAACE,EAAGC,KACtB,GAAM,CAACC,EAAIC,GAAM9E,EAAW2E,GAC3B,CAACI,EAAIC,GAAMhF,EAAW4E,GACvB,OAAOC,EAAKE,GAAMF,IAAOE,GAAMD,EAAKE,GAwG1BC,CAAWR,EAAK,gBAAiB7F,KAC3C8F,EAAUlE,EAAO,kBAAmB5B,KAHpC6F,EAAO,GACPC,EAAUlE,EAAO,YAKlB,MAIuB0E,EAJD,CACpBC,GAAI,UAAWC,UAAW,UAAWC,QAAS,UAAWC,QAAS,UAAWC,QAAS,UACtFC,UAAW,UAAWC,QAAS,UAAWC,QAAS,UAAWC,QAAS,WAEzB3D,IAAa,KAC5D4D,KAAc3E,KAAOG,UAAiB8D,SACtCW,EAAWpB,EAAK,kBAAoB3D,EAc/BgF,EAAcC,QAAQC,IAAI,CAC/BlH,GAAGuD,OAAO4D,MAAM,mBAZDC,UACVL,GAAYpB,EAAK,eAAiBS,IACtCT,QAAa/D,EAAEyF,KAAQP,EAAY,CAClCQ,SAAU,OACVC,OAAO,IAERxH,EAAQU,UAAU,0BAA2BkF,IAE9C3F,GAAGwH,SAASC,IAAI9B,IAKhB+B,KASD,MAAMC,EAAY,CAACC,EAAMC,IACJ,IAAhBD,EAAKE,OACDb,QAAQc,UAETF,EACJ7H,GAAGuD,OAAO4D,MAAMS,GAChBhG,EAAEyF,KAAQlF,EAAH,KAAwB,EAAdyF,EAAKE,OAAa,WAAa,IAAKF,EAAK1F,OAAU,CACrEoF,SAAU,SACVC,OAAO,IAKV5G,IAAqCqH,EAMrC,MAAMC,EAAiBnG,MAAAA,IACtBnB,IAA4BuH,EAAU,GACtC,MAA8BC,EAAiB,GACtBC,EAAc,GACtCC,EAAsC,mBAAtBC,OAAOC,WAGQC,EAAKH,EAClCC,OAAOC,WACP,CACDE,MAAO,GACPC,UAAW,GACXC,SAAU,GACVC,eAAgB,IAGd,CAAC,YAAa,UAAUC,SAAS/G,KAAU0G,EAAGC,MAAMjE,YAEvDxE,GAAGuD,OAAOuF,QAAQ3G,KAAOE,sBAA4B,aACpDiB,EAAc6E,EAAiBD,GAASa,KAAQ1G,EAAH,sBAElC,cAATP,GAAwD,iBAAzB6B,EAAcP,QAAuBO,EAAcP,OAAO4F,KAAKnH,OAEjGC,EAAO,QAEHuG,KACH/E,EAAc4E,EAAUE,GAAaW,KAAK1E,EAAUC,KAChDhB,GACJtD,GAAGuD,OAAOuF,QAAQ3G,KAAOC,2BAAiC,cAGvDoG,EAAGE,UAAUO,iBAAmB9D,EAAO0D,SAAS,WACpDT,EAAYW,KAAKpE,EAAWC,eAExB4D,EAAGG,SAASO,aAAe/D,EAAO0D,SAAS,WAC/CT,EAAYW,KAAKpE,EAAWE,SAExB2D,EAAGI,eAAeO,iBAAmBhE,EAAO0D,SAAS,eACzDT,EAAYW,KAAKpE,EAAWG,aAExB0D,EAAGI,eAAeQ,mBAAqBjE,EAAO0D,SAAS,WAC3DT,EAAYW,KAAKpE,EAAWI,gBAExByD,EAAGI,eAAeS,mBAAqBlE,EAAO0D,SAAS,kBAC3DT,EAAYW,KAAKpE,EAAWK,gBAExBwD,EAAGI,eAAe3D,eAAiBE,EAAO0D,SAAS,kBACvDT,EAAYW,KAAKpE,EAAWM,gBAExBuD,EAAGI,eAAe1D,WAAaC,EAAO0D,SAAS,cACnDT,EAAYW,KAAKpE,EAAWO,WAEzB,CAAC,SAAU,QAAQ2D,SAAS/G,GAC/B,CAAC,MAAO,aAAc,YAAa,YAAa,OAAOwH,QAAQC,IACzDf,EAAGC,MAAMc,KACbrB,EAAUA,EAAQsB,OAAOnF,EAAUkF,OAG1Bf,EAAGC,MAAM3G,KACP,QAATA,GACFwB,EAAc6E,EAAiBD,GAASa,KAAK1E,EAAUE,KAExD2D,EAAUA,EAAQsB,OAAOnF,EAAUvC,KAIjCuG,QACGpB,QAAQC,IAAI,CACjBS,EAAUO,EAAS5E,GACnBqE,EAAUQ,GACVR,EAAUS,KAED9E,SACJqE,EAAUO,GAAS,SACnBjB,QAAQC,IAAI,CACjBS,EAAUQ,GACVR,EAAUS,aAGLT,EAAUS,SACVT,EAAUO,KAmBZuB,EAAqBrG,IAC1BK,EAAmBC,GAAW,CAC7BN,OAAAA,EACAS,KAAMC,KAAKC,OAEZhE,EAAQU,UAAU,qBAAsBgD,IA4InCiG,EAAetC,MAAOuC,EAASC,KACpC,IAAMC,EAAOD,EAAU,mBAvBJxC,UACnB,IAAI,CAAC,IAAK,KAAKyB,SAASnG,IAAQF,EAAKsH,SAAS,QAUvC,OAAItH,EAAKsH,SAAS,QACjB,YAED9F,EAAapB,GAbmC,CACtD,MAAMmH,EAAkB,MAAPrH,EAAa,SAAW,MAQzC,aAPM1C,GAAGuD,OAAO4D,MAAM,CAAC,kBAAmB,uCACA6C,GAAGC,GAAGC,QAAQ1I,EAAI,gBAAiB,CAC5E2I,QAAS,CACR,CAACC,MAAOL,GACR,CAACK,MAAO,WAAYC,OAAQ,aAGhB,YAAcN,EAASO,gBAaMC,GACtCC,EAAkBvC,EAAS4B,GACjC,KAAM,CAACY,SAAkBxD,QAAQC,IAAI,EAvIlBE,MAAOtF,EAAM0I,KAChC,GAAK,CAAC,YAAa,UAAU3B,SAAS/G,GAAtC,CAIIwB,GAAeM,SACZ4G,EAGP7J,IAA0ByC,EAASpD,GAAGoD,OAAOsH,IAAI,uBAKjD,GAJKtH,GAAWQ,IAAWmD,IACzB,CAAC3D,OAAAA,GAAUO,EACZ3D,GAAGoD,OAAOqE,IAAI,sBAAuBrE,IAElCA,GAAUA,EAAOuH,UAAYvH,EAAOwH,IACvC,OAAOxH,EACD,GAAIA,EACV,OAAOA,EAiBR,KACQ,CAACyH,WAAAA,EAAYC,cAAAA,EAAeC,cAAAA,EAAeC,UAAAA,UACzC,IAAIhL,GAAGiL,KAAMP,IAAI,CAC1BQ,KAAM,WACNC,OAAQ/H,EAAS,aAAe,mDAChCgI,cAAe,KAJfC,SAMKC,EAAkB,CAAC,MAAO,MAAO,QAAS,QAAS,aAMnDC,EAAaC,GAASA,EAAMC,QAEjC,CAAA,CAAEC,QAAAA,EAASC,KAAAA,KAAUD,EAAQrK,IAAIuK,IAAS,CAAEA,MAAAA,EAAOD,KAAAA,MAM9CE,EAAYH,GAAW5K,EAC5B4K,EAAQrK,IAAI,CAAA,CAAEuK,MAAAA,EAAOD,KAAAA,KAAU,CAACC,EAAME,QAAQ,KAAM,IAAKH,KAG1D,GAAKvI,EA+BE,CACN,KAAyB,CAAC2I,GAAgB3I,EAAnC4I,oBACFD,EAAYE,OAChBV,EACCV,EAAWqB,OAAgC,CAAA,CAAEP,KAAAA,KAAUL,EAAgBzC,SAAS8C,KAC/ErC,QAAQ,CAAA,CAAEsC,MAAAA,EAAOD,KAAAA,MAClBI,EAAYH,EAAME,QAAQ,KAAM,KAAOH,QArC7B,CACZvI,EAAS,CACR+I,SAAU,CACTC,IAAK,aACLC,OAAQ,gBACRC,IAAK,kBAENtD,KAAMlI,EACLgK,EAAczJ,IAAIkL,GAAO,CAACA,EAAItK,MAAM,GAAI,IAAI,KAE7CuK,aAAcxM,GAAGoD,OAAOsH,IAAI,mBAE7B,MAAM+B,EAAiB,IAAIC,IAAI,IAAI3B,KAAkBC,KAAcM,IAClEqB,EAAgB9B,EAAWqB,OAE1B,CAAA,CAAEP,KAAAA,EAAMD,QAAAA,KAAaA,EAAQkB,KAAKhB,GAAS,WAAWiB,KAAKjB,KAAWa,EAAeK,IAAInB,IAE1FoB,EAAYxB,EACXoB,EAAcT,OAAOc,GAAQA,EAAK,oBAEnCjB,EAAcR,EACboB,EAAcT,OAAOc,IAASA,EAAK,oBAClC3L,IAAI,CAAA,CAAEuK,MAAAA,EAAOD,KAAAA,MAAU,CAAEC,MAAOA,EAAMtB,cAAeqB,KAAAA,KACxDvI,EAAO6J,iBAAmB,CACzBpB,EAAUE,EAAYG,OAAO,CAAA,CAAEN,MAAAA,KAAW,WAAWiB,KAAKjB,KAC1DC,EAAUkB,EAAUb,OAAO,CAAA,CAAEN,MAAAA,KAAW,WAAWiB,KAAKjB,MAEzDxI,EAAO4I,iBAAmB,CACzBH,EAAUE,EAAYG,OAAO,CAAA,CAAEN,MAAAA,MAAY,cAAciB,KAAKjB,KAC9DC,EAAUkB,EAAUb,OAAO,CAAA,CAAEN,MAAAA,MAAY,cAAciB,KAAKjB,MAkB9D,OANAxI,EAAOuH,SAAWE,EAAWqC,KAAoC,CAAA,CAAEvB,KAAAA,KAAmB,aAATA,GAAqBD,QAClGtI,EAAOwH,IAAMiB,EACZN,EAAWV,EAAWqB,OAAiC,CAAA,CAAEP,KAAAA,KAAUA,EAAKwB,WAAW,WAEpFnN,GAAGoD,OAAOqE,IAAI,sBAAuBrE,GACrCqG,EAAmBrG,GACZA,IA8BNgK,CAAYvD,EAAMW,GAClBA,IAGY,cAATX,GAAwBY,EAASzB,KAAKnH,MACzC4I,EAAS0B,SAAStK,KAAO,kBACnBoG,EAAS,SACI,WAAT4B,GAAsBtB,WAAW8E,UAAUC,QACrD/E,WAAWgF,WAAW,SAAU,CAC/B5B,KAAM,YACN3C,KAAM,CACLwE,UAAW,CAAC,CAAC,KAAM,KAAM,iBAM5B,IAAMC,EAAS9D,EAAQ8D,SAMjBtN,GAJF6H,GACHA,EAAG0F,aAGS9D,GAA4B,SAAjBhH,GACQ+I,EAAQ/J,EAAE+L,OAAOC,UAAjBjC,SAChC3D,EAAKO,WAAWsF,aAAalE,EAAQ,GAAI/H,EAAEkM,OAAO,CACjDC,WAAqB,WAATpC,EAAoB,WAAa,kBAC7CqC,aAAa,EACbC,cAAc,EACdpE,KAAAA,EACAY,SAAAA,EACAtK,KAAAA,EACAgJ,gBAAiBhE,EAAO0D,SAAS,cACjCO,kBAAmBjE,EAAO0D,SAAS,UACnCQ,kBAAmBlE,EAAO0D,SAAS,iBACnC5D,cAAeE,EAAO0D,SAAS,mBAA8B,cAATgB,IAAwB1J,GACzE,CAAC+N,aAAc,YAGlBhJ,UAAWC,EAAO0D,SAAS,kBAAoB,CAAC,YAAa,UAAUA,SAASgB,IACrE,cAATA,EACA,GACA,CACDsE,WAAYhJ,EAAO0D,SAAS,mBAAqBzD,EAxWnC,IAyWdgJ,gBAAiBjJ,EAAO0D,SAAS,uBAGhCwF,QAAQ,KAAMZ,GACjBzF,EAAGsG,UAEH,MAAMC,EAAUvG,EAAGwG,oBAEnB,GADAD,EAAQ9I,GAAK,sBACT,CAAC,YAAa,UAAUoD,SAASgB,IAAS1E,EAAO0D,SAAS,eAAgB,CAC7ExD,EAAiBK,UAAW,EAC5B,KAA+C,CAAC+I,GAAazO,GAAGoD,OAAOsH,IAAI,uBAA9CsB,oBAEvB0C,EAAevN,GAAOJ,OAAO4N,KAAKF,GAAUvC,OAAOhM,GAAOuO,EAASvO,KAASiB,GAChFE,IAAInB,GAAOA,EAAIiN,WAAW,KAAOjN,EAAM,IAAIA,GAC7C,MAAM0O,EAASF,EAAa,UAC3BpB,EAASoB,EAAa,gBAEjB1O,GAAGuD,OAAO4D,MAAM,mBACtBvF,EAAE2M,GAASM,GAAG,cAAe,uBAAwB,WACpD,MAA4BC,EAAOC,KAAKC,YAAYlD,QAAQ,UAAW,IAAImD,OACXC,EAAQ,IAAIlP,GAAGmP,MAAML,GAMrF,OALwB,IAApBI,EAAME,WAAmBN,EAAK3B,WAAW,KAC5CkC,KAAKH,EAAMI,SAAU,UAErBD,KAAKrP,GAAGuP,KAAKD,OAAO,YAAYR,GAAS,WAEnC,IACLD,GACF,cACA,uFACA,WAEC,IAAMW,EAAiBT,KAAKU,gBAAgBA,gBAAgBT,YAAYC,OAAO3E,cAM/E,OALIsE,EAAO/F,SAAS2G,GACnBH,KAAKrP,GAAGuP,KAAKD,OAAO,UAAUP,KAAKC,aAAgB,UACzC1B,EAAOzE,SAAS2G,IAC1BH,KAAKrP,GAAGuP,KAAKD,OAAO,UAAUP,KAAKC,YAAe,CAAC3E,OAAQ,SAAU,WAE/D,SAIThF,EAAiBK,UAAW,EAG7B9D,EAAE,4BAA4B8N,SAAS,KAAKC,KAAK,OAAQ,wBAEpD/F,IACEgG,EAAS,KACbhO,EAAE,8BAA8BiO,eAAe,UAEhDC,EAAc,KACblO,EAAE,iCAAiCmO,QACnCnO,EAAE,8BAA8BiO,eAAe,UAEjD7H,EAAGgI,UAAUpO,EAAEkM,OAAO,CACrBmC,SAAUL,EACVM,QAASN,EACTO,eAAgBL,EAChBM,cAAeN,GACbO,SAASC,WAAW,yBACpB,CACDC,MACC3O,EAAE,4BAA4BiO,eAAe,WAG7C,MAIJ7P,GAAGwQ,KAAK,mBAAmBC,KAAKzI,IAI3B0I,EAAW,IAAIC,iBAAiBC,IACrC,MAAMC,EAAYjP,EAAEgP,EAAQnF,QAK3B,CAAA,CAAEqF,WAAAA,KAAgB,IAAIA,KACpB5D,KAAK,gDACiB,IAArB2D,EAAU/I,QAGd4B,EAAamH,EAAoC,2BAAzBA,EAAUlB,KAAK,SAKFoB,GAHtCL,EAASM,QAAQ1L,SAAS2L,KAAM,CAACC,WAAW,IAGM5L,SAASC,eAAe,eAAiBvF,GAAGuD,OAAOiC,YACpG,mlBAeK,CACLkF,IAAAA,EAAM,SAASyG,GACd,OAAOA,EAAKzQ,OAEb+G,IAAAA,EAAM,SAAS0J,EAAMzQ,GACpByQ,EAAKzQ,MAAQA,KAXfqQ,EAAUtL,GAAK,aAaX7D,EAAEwP,SAASC,UAAY,IAErBC,EAAaH,GAAQ,CAAC,qBAAsB,0BAA0BtI,SAASsI,EAAK1L,IAC1F7D,EAAEwP,SAASC,SAAW,CACrB3G,IAAIyG,GACH,OAAOG,EAAWH,IAASnJ,EAAKA,EAAGuJ,WAAa7G,EAAIyG,IAErD1J,IAAI0J,EAAMzQ,GACL4Q,EAAWH,IAASnJ,EACvBA,EAAGwJ,SAAS9Q,GAEZ+G,EAAI0J,EAAMzQ,WAKPsG,EAGNrG,IAA8E8Q,EACzCnE,EACFoE,EACgBC,EACiCC,EACpF,MAAMC,EAAe,CAACnR,EAAQyE,KAC7ByM,EAAYE,OAAOpR,EAAMmI,SAAS,qBAMnC,MAA0CkJ,EAAWnQ,EAAE5B,GAAGuP,KAAKyC,eAJtC,CACxBC,QAAS,wBACTC,QAAS,aAGQ/O,IAAS,aAAc,IAAK3B,EAAI,WAAY,kBAC3DuO,MAAYvP,MAAAA,IAEd,GADAA,EAAE2R,kBACGV,EAAQ,OACNzR,GAAGuD,OAAO4D,MAAM,CAAC,kBAAmB,iCAE1CsK,EAAS,IAAIzH,GAAGC,GAAGmI,cAAc,CAAC3M,GAAI,8BAEtC,MAAM4M,EAAgB,IAAIrI,GAAGC,GAAGqI,cAChCD,EAAcE,SAASC,SAASlN,SAAS2L,MACzCoB,EAAcI,WAAW,CAAChB,IAC1BnE,EAAS,IAAItD,GAAGC,GAAGyI,+BAA+B,CACjDC,QAAS,CACR,CAACC,KAAM,SAAUxI,MAAO5I,EAAI,iBAC5B,CAACoR,KAAM,aAAcxI,MAAO5I,EAAI,sBAChC,CAACoR,KAAM,gBAAiBxI,MAAO5I,EAAI,wBACnC,CAACoR,KAAM,gBAAiBxI,MAAO5I,EAAI,wBACnC,CAACoR,KAAM,YAAaxI,MAAO5I,EAAI,oBAC/B,CAACoR,KAAM,cAAexI,MAAO5I,EAAI,sBACjC,CAACoR,KAAM,kBAAmBxI,MAAO5I,EAAI,2BAEtCd,MAAOyE,IACL0J,GAAG,SAAUgD,GAChBH,EAAe,IAAI1H,GAAGC,GAAG4I,kBAAkB,CAACC,IAAK,EAAGpS,MAAO0E,IAC3DuM,EAAQ,IAAI3H,GAAGC,GAAG8I,YAAYzF,EAAQ,CACrClD,MAAO5I,EAAI,eACXwR,QAAS,CAACxR,EAAI,iBACdyR,MAAO,QAERrB,EAAc,IAAI5H,GAAGC,GAAG8I,YAAYrB,EAAc,CAACtH,MAAO5I,EAAI,kBAC9DqQ,IAEDJ,EAAOpC,KAAK,CACXH,MAAO1N,EAAI,eACX0R,QAASvB,EAAMY,SAASY,IAAIvB,EAAYW,UAAUY,IACjDvR,EAAE,MAAO,CAACC,KAAML,EAAI,eAErB2I,QAAS,CACR,CAACE,OAAQ,SAAUD,MAAOpK,GAAGwB,IAAI,+BACjC,CAAC6I,OAAQ,SAAUD,MAAOpK,GAAGwB,IAAI,8BAA+B4R,MAAO,gBAExEC,KAAmB,OAAbjN,EAAoB,SAAW,UACnCkN,QAAQC,KAAKX,IACfjB,EAAMY,SAASiB,SACf5B,EAAYW,SAASiB,SACD,iBAATZ,GAAqC,WAAhBA,EAAKvI,SACpClF,EAASmI,EAAOiE,WAChBnM,EAASsM,EAAaH,WACtBxR,EAAQU,UAAU,4BAA6B0E,GAC/CpF,EAAQU,UAAU,4BAA6B2E,QAIrC,YAATjC,GACH4O,EAAS7E,KAAK,KAAKuG,SAAS,+BAIN,mBAAZ7N,GACVA,IAAUsH,KAAK,yBAAyB6C,MAAMvP,IAC7CA,EAAE2R,iBACFvQ,EAAE,kBAAkBiO,eAAe,YA3sBtC"}
1
+ {"version":3,"sourceRoot":"../","sources":["main.js"],"names":["version","storage","mw","getObject","key","json","localStorage","getItem","JSON","parse","e","setObject","value","let","stringify","setItem","fromEntries","Object","entries","obj","getVersion","str","split","map","s","Number","msg","args","notify","$p","$","html","type","autoHideSeconds","majorVersion","slice","join","CDN","CM_CDN","MW_CDN","REPO_CDN","wgPageName","page","wgNamespaceNumber","ns","wgPageContentModel","contentmodel","wgServerName","server","wgScriptPath","scriptPath","wgUserLanguage","userLang","skin","config","values","USING_LOCAL","loader","getState","ALL_SETTINGS_CACHE","SITE_ID","SITE_SETTINGS","EXPIRED","time","Date","now","CONTENTMODEL","css","sanitized-css","javascript","wikitext","MODE_LIST","lib","lua","mediawiki","htmlmixed","xml","ADDON_LIST","searchcursor","search","activeLine","markSelection","trailingspace","matchBrackets","matchTags","foldCode","fold","addons","indent","contextmenuStyle","document","getElementById","addStyleTag","id","disabled","i18n","welcome","a","b","a0","a1","b0","b1","cmpVersion","i18nLang","zh","zh-hans","zh-cn","zh-my","zh-sg","zh-hant","zh-tw","zh-hk","zh-mo","I18N_CDN","isLatest","i18nPromise","Promise","all","using","async","ajax","dataType","cache","messages","set","setI18N","getScript","urls","local","length","resolve","cm","initMode","scripts","externalScript","addonScript","loaded","window","CodeMirror","CM","modes","prototype","commands","optionHandlers","includes","load","push","tags","getSearchCursor","findForward","styleActiveLine","styleSelectedText","showTrailingSpace","forEach","lang","concat","updateCachedConfig","renderEditor","$target","setting","mode","endsWith","pageMode","OO","ui","confirm","actions","label","action","toLowerCase","getPageMode","initModePromise","mwConfig","get","redirect","img","magicwords","extensiontags","functionhooks","variables","Api","meta","siprop","formatversion","query","otherMagicwords","getAliases","words","flatMap","aliases","name","alias","getConfig","replace","insensitive","functionSynonyms","subst","filter","tagModes","pre","nowiki","ref","tag","urlProtocols","realMagicwords","Set","allMagicwords","some","test","has","sensitive","word","doubleUnderscore","find","startsWith","getMwConfig","mimeModes","widget","defineMIME","noinclude","height","toTextArea","client","profile","fromTextArea","extend","inputStyle","lineNumbers","lineWrapping","bracketRegex","indentUnit","indentWithTabs","setSize","refresh","wrapper","getWrapperElement","synonyms","getSysnonyms","keys","invoke","on","text","this","textContent","trim","title","Title","namespace","open","getUrl","util","parserFunction","previousSibling","children","attr","submit","triggerHandler","submitMinor","click","addKeyMap","Ctrl-S","Cmd-S","Shift-Ctrl-S","Shift-Cmd-S","Wikiplus","getSetting","Esc","hook","fire","observer","MutationObserver","records","$editArea","addedNodes","wphlStyle","observe","body","childList","elem","valHooks","textarea","isWikiplus","getValue","setValue","dialog","indentWidget","field","indentField","toggleIndent","toggle","$portlet","addPortletLink","minerva","citizen","preventDefault","MessageDialog","windowManager","WindowManager","$element","appendTo","addWindows","CheckboxMultiselectInputWidget","options","data","NumberInputWidget","min","FieldLayout","notices","align","message","add","flags","size","closing","then","detach","addClass"],"mappings":"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"}
package/i18n/en.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "wphl-version": "2.7.6",
2
+ "wphl-version": "2.8",
3
3
  "wphl-lang": "en",
4
4
  "wphl-addon-search": "Search",
5
5
  "wphl-addon-active-line": "Show active line",
package/i18n/zh-hans.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "wphl-version": "2.7.6",
2
+ "wphl-version": "2.8",
3
3
  "wphl-lang": "zh-hans",
4
4
  "wphl-addon-search": "搜索",
5
5
  "wphl-addon-active-line": "高亮显示光标所在行",
package/i18n/zh-hant.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "wphl-version": "2.7.6",
2
+ "wphl-version": "2.8",
3
3
  "wphl-lang": "zh-hant",
4
4
  "wphl-addon-search": "搜尋",
5
5
  "wphl-addon-active-line": "突出顯示游標所在行",
package/main.js CHANGED
@@ -8,11 +8,11 @@
8
8
  (async () => {
9
9
  'use strict';
10
10
 
11
- const version = '2.7.6';
11
+ const version = '2.8';
12
12
 
13
13
  /**
14
14
  * polyfill for mw.storage
15
- * @type {{getObject: function(string): ?any, setObject: function(string, any): boolean}}
15
+ * @type {{getObject: (key: string) => ?any, setObject: (key: string, value: any) => boolean}}
16
16
  */
17
17
  const storage = typeof mw.storage === 'object' && typeof mw.storage.getObject === 'function'
18
18
  ? mw.storage
@@ -40,10 +40,10 @@
40
40
  };
41
41
  /**
42
42
  * polyfill for Object.fromEntries
43
- * @type {function(Iterable<[string, any]>): object}
43
+ * @type {(entries: Iterable<[string, any]>) => Object<string, any>}
44
44
  */
45
45
  const fromEntries = Object.fromEntries || (entries => {
46
- const /** @type {any} */ obj = {};
46
+ const /** @type {Object<string, any>} */ obj = {};
47
47
  for (const [key, value] of entries) {
48
48
  obj[key] = value;
49
49
  }
@@ -89,7 +89,7 @@
89
89
  // 路径
90
90
  const CDN = '//fastly.jsdelivr.net',
91
91
  CM_CDN = 'npm/codemirror@5.65.3',
92
- MW_CDN = 'gh/bhsd-harry/codemirror-mediawiki@1.1.1',
92
+ MW_CDN = 'gh/bhsd-harry/codemirror-mediawiki@1.1.3',
93
93
  REPO_CDN = `npm/wikiplus-highlight@${majorVersion}`;
94
94
 
95
95
  /**
@@ -106,11 +106,23 @@
106
106
  skin,
107
107
  } = mw.config.values;
108
108
 
109
+ /**
110
+ * @typedef {object} mwConfig
111
+ * @property {Object<string, string>} tagModes
112
+ * @property {Object<string, boolean>} tags
113
+ * @property {string} urlProtocols
114
+ * @property {[Object<string, string>, Object<string, string>]} doubleUnderscore
115
+ * @property {[Object<string, string>, Object<string, string>]} functionSynonyms
116
+ * @property {string[]} redirect
117
+ * @property {Object<string, string>} img
118
+ */
119
+
109
120
  // 和本地缓存有关的常数
110
121
  const USING_LOCAL = mw.loader.getState('ext.CodeMirror') !== null,
122
+ /** @type {Object<string, {time: number, config: mwConfig}>} */
111
123
  ALL_SETTINGS_CACHE = storage.getObject('InPageEditMwConfig') || {},
112
124
  SITE_ID = `${server}${scriptPath}`,
113
- SITE_SETTINGS = ALL_SETTINGS_CACHE[SITE_ID] || {},
125
+ /** @type {{time: number, config: mwConfig}} */ SITE_SETTINGS = ALL_SETTINGS_CACHE[SITE_ID] || {},
114
126
  EXPIRED = SITE_SETTINGS.time < Date.now() - 86400 * 1000 * 30;
115
127
 
116
128
  const /** @type {Object<string, string>} */ CONTENTMODEL = {
@@ -121,8 +133,7 @@
121
133
  wikitext: 'mediawiki',
122
134
  };
123
135
 
124
- /** @type {Object<string, string|[]>} */
125
- const MODE_LIST = USING_LOCAL
136
+ const /** @type {Object<string, string|[]>} */ MODE_LIST = USING_LOCAL
126
137
  ? {
127
138
  lib: 'ext.CodeMirror.lib',
128
139
  css: 'ext.CodeMirror.lib.mode.css',
@@ -150,6 +161,8 @@
150
161
  trailingspace: `${CM_CDN}/addon/edit/trailingspace.min.js`,
151
162
  matchBrackets: `${CM_CDN}/addon/edit/matchbrackets.min.js`,
152
163
  matchTags: `${REPO_CDN}/matchtags.min.js`,
164
+ foldCode: `${CM_CDN}/addon/fold/foldcode.min.js`,
165
+ fold: `${REPO_CDN}/fold.min.js`,
153
166
  };
154
167
 
155
168
  const defaultAddons = ['search'],
@@ -164,7 +177,7 @@
164
177
  contextmenuStyle.disabled = true;
165
178
 
166
179
  let /** @type {Object<string, string>} */ i18n = storage.getObject('Wikiplus-highlight-i18n'),
167
- /** @type {function(): JQuery<HTMLParagraphElement>} */ welcome;
180
+ /** @type {() => JQuery<HTMLParagraphElement>} */ welcome;
168
181
  if (!i18n) { // 首次安装
169
182
  i18n = {};
170
183
  welcome = notify('welcome');
@@ -172,11 +185,11 @@
172
185
  welcome = notify('welcome-upgrade', version);
173
186
  }
174
187
 
175
- const i18nLanguages = {
188
+ const /** @type {Object<string, string>} */ i18nLanguages = {
176
189
  zh: 'zh-hans', 'zh-hans': 'zh-hans', 'zh-cn': 'zh-hans', 'zh-my': 'zh-hans', 'zh-sg': 'zh-hans',
177
190
  'zh-hant': 'zh-hant', 'zh-tw': 'zh-hant', 'zh-hk': 'zh-hant', 'zh-mo': 'zh-hant',
178
191
  },
179
- /** @type {string} */ i18nLang = i18nLanguages[userLang] || 'en',
192
+ i18nLang = i18nLanguages[userLang] || 'en',
180
193
  I18N_CDN = `${CDN}/${REPO_CDN}/i18n/${i18nLang}.json`,
181
194
  isLatest = i18n['wphl-version'] === majorVersion;
182
195
 
@@ -192,7 +205,7 @@
192
205
  mw.messages.set(i18n);
193
206
  };
194
207
 
195
- const i18nPromise = Promise.all([ // 提前加载I18N
208
+ const /** @type {Promise<[void, void]>} */ i18nPromise = Promise.all([ // 提前加载I18N
196
209
  mw.loader.using('mediawiki.util'),
197
210
  setI18N(),
198
211
  ]);
@@ -228,8 +241,11 @@
228
241
  /** @type {string[]} */ addonScript = [],
229
242
  loaded = typeof window.CodeMirror === 'function';
230
243
 
231
- /** 代替CodeMirror的局部变量 */
232
- const /** @type {CodeMirror} */ CM = loaded
244
+ /**
245
+ * 代替CodeMirror的局部变量
246
+ * @type {CodeMirror}
247
+ */
248
+ const CM = loaded
233
249
  ? window.CodeMirror
234
250
  : {
235
251
  modes: {},
@@ -274,6 +290,12 @@
274
290
  if (!CM.optionHandlers.matchTags && addons.includes('matchTags')) {
275
291
  addonScript.push(ADDON_LIST.matchTags);
276
292
  }
293
+ if (!CM.prototype.foldCode && addons.includes('fold')) {
294
+ addonScript.push(ADDON_LIST.foldCode);
295
+ }
296
+ if (!CM.optionHandlers.fold && addons.includes('fold')) {
297
+ addonScript.push(ADDON_LIST.fold);
298
+ }
277
299
  if (['widget', 'html'].includes(type)) {
278
300
  ['css', 'javascript', 'mediawiki', 'htmlmixed', 'xml'].forEach(lang => {
279
301
  if (!CM.modes[lang]) {
@@ -306,20 +328,9 @@
306
328
  }
307
329
  };
308
330
 
309
- /**
310
- * @typedef {object} config
311
- * @property {Object<string, string>} tagModes
312
- * @property {Object<string, boolean>} tags
313
- * @property {string} urlProtocols
314
- * @property {[Object<string, string>, Object<string, string>]} doubleUnderscore
315
- * @property {[Object<string, string>, Object<string, string>]} functionSynonyms
316
- * @property {string[]} redirect
317
- * @property {Object<string, string>} img
318
- */
319
-
320
331
  /**
321
332
  * 更新缓存的设置数据
322
- * @param {config} config
333
+ * @param {mwConfig} config
323
334
  */
324
335
  const updateCachedConfig = config => {
325
336
  ALL_SETTINGS_CACHE[SITE_ID] = {
@@ -343,7 +354,7 @@
343
354
  await initModePromise;
344
355
  }
345
356
 
346
- let /** @type {config} */ config = mw.config.get('extCodeMirrorConfig');
357
+ let /** @type {mwConfig} */ config = mw.config.get('extCodeMirrorConfig');
347
358
  if (!config && !EXPIRED && isLatest) {
348
359
  ({config} = SITE_SETTINGS);
349
360
  mw.config.set('extCodeMirrorConfig', config);
@@ -355,7 +366,7 @@
355
366
  }
356
367
 
357
368
  /**
358
- * @typedef {object} query
369
+ * @typedef {object} siteInfoQuery
359
370
  * @property {{name: string, aliases: string[], 'case-sensitive': boolean}[]} magicwords
360
371
  * @property {string[]} extensiontags
361
372
  * @property {string[]} functionhooks
@@ -368,7 +379,7 @@
368
379
  * 情形3:新加载的 ext.CodeMirror.data
369
380
  * 情形4:config === null
370
381
  */
371
- const /** @type {{query: query}} */ {
382
+ const /** @type {{query: siteInfoQuery}} */ {
372
383
  query: {magicwords, extensiontags, functionhooks, variables},
373
384
  } = await new mw.Api().get({
374
385
  meta: 'siteinfo',
@@ -405,6 +416,7 @@
405
416
  ),
406
417
  urlProtocols: mw.config.get('wgUrlProtocols'),
407
418
  };
419
+ /** @type {Set<string>} */
408
420
  const realMagicwords = new Set([...functionhooks, ...variables, ...otherMagicwords]),
409
421
  allMagicwords = magicwords.filter(
410
422
  /** @returns {boolean} */
@@ -469,7 +481,7 @@
469
481
  const renderEditor = async ($target, setting) => {
470
482
  const mode = setting ? 'javascript' : await getPageMode();
471
483
  const initModePromise = initMode(mode);
472
- const [mwConfig] = await Promise.all([
484
+ const /** @type {[mwConfig]} */ [mwConfig] = await Promise.all([
473
485
  getMwConfig(mode, initModePromise),
474
486
  initModePromise,
475
487
  ]);
@@ -524,7 +536,7 @@
524
536
  wrapper.id = 'Wikiplus-CodeMirror';
525
537
  if (['mediawiki', 'widget'].includes(mode) && addons.includes('contextmenu')) {
526
538
  contextmenuStyle.disabled = false;
527
- const /** @type {config} */ {functionSynonyms: [synonyms]} = mw.config.get('extCodeMirrorConfig');
539
+ const /** @type {mwConfig} */ {functionSynonyms: [synonyms]} = mw.config.get('extCodeMirrorConfig');
528
540
  /** @param {string} str */
529
541
  const getSysnonyms = str => Object.keys(synonyms).filter(key => synonyms[key] === str)
530
542
  .map(key => key.startsWith('#') ? key : `#${key}`);
@@ -534,7 +546,7 @@
534
546
  await mw.loader.using('mediawiki.Title');
535
547
  $(wrapper).on('contextmenu', '.cm-mw-template-name', function() {
536
548
  const /** @type {string} */ text = this.textContent.replace(/\u200e/g, '').trim(),
537
- /** @type {{namespace: number, getUrl: function(): string}} */ title = new mw.Title(text);
549
+ /** @type {{namespace: number, getUrl: () => string}} */ title = new mw.Title(text);
538
550
  if (title.namespace !== 0 || text.startsWith(':')) {
539
551
  open(title.getUrl(), '_blank');
540
552
  } else {
@@ -605,7 +617,8 @@
605
617
 
606
618
  // 添加样式
607
619
  const /** @type {HTMLStyleElement} */ wphlStyle = document.getElementById('wphl-style') || mw.loader.addStyleTag(
608
- '#Wikiplus-Quickedit+.CodeMirror,#Wikiplus-Setting-Input+.CodeMirror{border:1px solid #c8ccd1;line-height:1.3;clear:both}'
620
+ '#Wikiplus-Quickedit+.CodeMirror,#Wikiplus-Setting-Input+.CodeMirror'
621
+ + '{border:1px solid #c8ccd1;line-height:1.3;clear:both}'
609
622
  + 'div.Wikiplus-InterBox{font-size:14px;z-index:100}'
610
623
  + '.skin-minerva .Wikiplus-InterBox{font-size:16px}'
611
624
  + '.cm-trailingspace{text-decoration:underline wavy red}'
@@ -618,7 +631,7 @@
618
631
 
619
632
  /**
620
633
  * 对编辑框调用jQuery.val方法时从CodeMirror获取文本
621
- * @type {{get: function(HTMLTextAreaElement): string, set: function(HTMLTextAreaElement, string): void}}
634
+ * @type {{get: (elem: HTMLTextAreaElement) => string, set: (elem: HTMLTextAreaElement, value: string) => void}}
622
635
  */
623
636
  const {
624
637
  get = function(elem) {
@@ -628,7 +641,10 @@
628
641
  elem.value = value;
629
642
  },
630
643
  } = $.valHooks.textarea || {};
631
- /** @param {HTMLTextAreaElement} elem */
644
+ /**
645
+ * @param {HTMLTextAreaElement} elem
646
+ * @returns {boolean}
647
+ */
632
648
  const isWikiplus = elem => ['Wikiplus-Quickedit', 'Wikiplus-Setting-Input'].includes(elem.id);
633
649
  $.valHooks.textarea = {
634
650
  get(elem) {
@@ -645,12 +661,21 @@
645
661
 
646
662
  await i18nPromise; // 以下内容依赖I18N
647
663
 
664
+ /**
665
+ * @typedef {object} OOUI.widget
666
+ * @property {(data: any) => {closing: Promise<{action: string}>}} open
667
+ * @property {() => string|string[]} getValue
668
+ * @property {JQuery<HTMLDivElement>} $element
669
+ * @property {(show: boolean) => OOUI.widget} toggle
670
+ * @property {(windows: OOUI.widget[]) => void} addWindows
671
+ */
672
+
648
673
  // 设置对话框
649
- let /** @type {{open: function(any): {closing: Promise<{action: string}>}} */ dialog,
650
- /** @type {{getValue: string[]}} */ widget,
651
- /** @type {{getValue: string}} */ indentWidget,
652
- /** @type {{$element: JQuery<HTMLDivElement>}} */ field,
653
- /** @type {{$element: JQuery<HTMLDivElement>, toggle: function(boolean): void}} */ indentField;
674
+ let /** @type {OOUI.widget} */ dialog,
675
+ /** @type {OOUI.widget} */ widget,
676
+ /** @type {OOUI.widget} */ indentWidget,
677
+ /** @type {OOUI.widget} */ field,
678
+ /** @type {OOUI.widget} */ indentField;
654
679
  const toggleIndent = (value = addons) => {
655
680
  indentField.toggle(value.includes('indentWithSpace'));
656
681
  };
@@ -666,8 +691,7 @@
666
691
  await mw.loader.using(['oojs-ui-windows', 'oojs-ui.styles.icons-content']);
667
692
  // eslint-disable-next-line require-atomic-updates
668
693
  dialog = new OO.ui.MessageDialog({id: 'Wikiplus-highlight-dialog'});
669
- /** @type {{$element: JQuery<HTMLDivElement>, addWindows: function(array): void}} */
670
- const windowManager = new OO.ui.WindowManager();
694
+ const /** @type {OOUI.widget} */ windowManager = new OO.ui.WindowManager();
671
695
  windowManager.$element.appendTo(document.body);
672
696
  windowManager.addWindows([dialog]);
673
697
  widget = new OO.ui.CheckboxMultiselectInputWidget({
package/matchtags.js CHANGED
@@ -67,14 +67,11 @@
67
67
  if (gt === -1) {
68
68
  return;
69
69
  }
70
+ this.ch = gt + 1;
70
71
  if (!this.bracketAt(gt)) {
71
- this.ch = gt + 1;
72
72
  continue;
73
73
  }
74
- const lastSlash = this.text.lastIndexOf('/', gt);
75
- const selfClose = lastSlash > -1 && !/\S/.test(this.text.slice(lastSlash + 1, gt));
76
- this.ch = gt + 1;
77
- return selfClose ? 'selfClose' : 'regular';
74
+ return this.text[gt - 1] === '/' ? 'selfClose' : 'regular';
78
75
  }
79
76
  }
80
77
 
@@ -304,14 +301,15 @@
304
301
  if (cm.somethingSelected()) {
305
302
  return;
306
303
  }
304
+
307
305
  /**
308
- * @typedef {object} match
306
+ * @typedef {object} matchingTag
309
307
  * @property {string} at
310
308
  * @property {{from: CodeMirror.Position, to: CodeMirror.Position}} open
311
309
  * @property {{from: CodeMirror.Position, to: CodeMirror.Position}} close
312
310
  */
313
- /** @type {match}} */
314
- const match = cm.findMatchingTag(cm.getCursor());
311
+
312
+ const /** @type {matchingTag}} */ match = cm.findMatchingTag(cm.getCursor());
315
313
  if (!match) {
316
314
  return;
317
315
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wikiplus-highlight",
3
- "version": "2.7.6",
3
+ "version": "2.8.0",
4
4
  "description": "A plugin for the MediaWiki front-end add-on \"Wikiplus\"",
5
5
  "main": "main.js",
6
6
  "scripts": {
package/search.js CHANGED
@@ -46,8 +46,8 @@
46
46
  text: msg('addon-search'),
47
47
  });
48
48
 
49
- const /** @type {function(string): string} */ escapeRegExp = mw.util.escapeRegExp || mw.RegExp.escape;
50
- const overlay = {token: () => {}};
49
+ const /** @type {(str: string) => string} */ escapeRegExp = mw.util.escapeRegExp || mw.RegExp.escape;
50
+ const /** @type {{token: (stream: CodeMirror.StringStream) => string}} */ overlay = {token: () => {}};
51
51
 
52
52
  /**
53
53
  * 根据搜索字符串生成高亮
@@ -58,7 +58,7 @@
58
58
  if (typeof str === 'string') {
59
59
  initial = RegExp(`[^${escapeRegExp(str[0])}]`, 'i');
60
60
  }
61
- return stream => {
61
+ return /** @param {CodeMirror.StringStream} stream */ stream => {
62
62
  if (stream.match(str, true, true)) {
63
63
  return 'search';
64
64
  }
@@ -74,9 +74,17 @@
74
74
  $search.css('background-color', '').off('input', onInput);
75
75
  };
76
76
 
77
+ /**
78
+ * @typedef {object} SearchCursor
79
+ * @property {() => boolean} findNext
80
+ * @property {() => boolean} findPrevious
81
+ * @property {() => CodeMirror.Position} from
82
+ * @property {() => CodeMirror.Position} to
83
+ */
84
+
77
85
  // keyboard event handler of $search
78
86
  let /** @type {string|RegExp} */ lastPtn,
79
- /** @type {Object<string, function(): number>} */ cursor;
87
+ /** @type {SearchCursor} */ cursor;
80
88
  /**
81
89
  * @param {CodeMirror.Editor} cm
82
90
  * @param {boolean} dir