wikiplus-highlight 2.12.1 → 2.15.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 +16 -5
- package/dist/main.min.js +1 -1
- package/dist/main.min.js.map +1 -1
- package/fold.js +22 -21
- package/i18n/en.json +6 -4
- package/i18n/zh-hans.json +6 -4
- package/i18n/zh-hant.json +7 -5
- package/main.js +144 -106
- package/matchtags.js +10 -17
- package/package.json +4 -2
- package/search.js +11 -19
package/README.md
CHANGED
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
在*个人 JS 页*添加以下代码:
|
|
13
13
|
|
|
14
14
|
```javascript
|
|
15
|
-
mw.loader.load('//cdn.jsdelivr.net/npm/wikiplus-highlight@2.
|
|
15
|
+
mw.loader.load('//cdn.jsdelivr.net/npm/wikiplus-highlight@2.15.0');
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
或
|
|
19
19
|
|
|
20
20
|
```javascript
|
|
21
|
-
mw.loader.load('//unpkg.com/wikiplus-highlight@2.
|
|
21
|
+
mw.loader.load('//unpkg.com/wikiplus-highlight@2.15.0/dist/main.min.js');
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
### 稳定版本
|
|
@@ -45,9 +45,9 @@ mw.loader.load('//unpkg.com/wikiplus-highlight/dist/main.min.js');
|
|
|
45
45
|
|
|
46
46
|
这个插件会向 Wikiplus 编辑区添加一个【搜索】按钮及以下快捷键:
|
|
47
47
|
|
|
48
|
-
- Ctrl
|
|
49
|
-
- Ctrl
|
|
50
|
-
- Shift
|
|
48
|
+
- `Ctrl`/`Cmd` + `F`: 打开搜索框
|
|
49
|
+
- `Ctrl`/`Cmd` + `G`: 搜索下一处
|
|
50
|
+
- `Shift` + `Ctrl`/`Cmd` + `G`: 搜索上一处
|
|
51
51
|
|
|
52
52
|
除了使用以上快捷键,也可以通过在搜索框中按下 `Enter` 键或点击搜索框右侧的 `▼` 按钮来执行搜索下一处的命令,点击 `▲` 按钮将执行搜索上一处的命令。搜索可以使用字符串,也可以使用形如 `/re/` 或 `/re/i` 的正则表达式。正则表达式仅接受可选的 `i` 修饰符,暂不接受其他修饰符。全文中匹配的字符都会添加淡粉色背景。如果没有匹配的结果,搜索框会添加粉色背景。
|
|
53
53
|
|
|
@@ -69,6 +69,10 @@ mw.loader.load('//unpkg.com/wikiplus-highlight/dist/main.min.js');
|
|
|
69
69
|
|
|
70
70
|
CodeMirror 扩展会错误地匹配 `<!-- -->` 注释内外的括号,而这个插件不会。匹配的括号对会添加绿色边框,未匹配的单个括号会添加黄色边框。
|
|
71
71
|
|
|
72
|
+
### 自动闭合括号和引号
|
|
73
|
+
|
|
74
|
+
MediaWiki 模式下自动闭合生效的字符包括 `(`、`[`、`{` 和 `"`,不包括有特殊含义的 `'`。如果在选中部分文字的情况下键入这些字符,选中的文字会被成对的括号或引号包裹。
|
|
75
|
+
|
|
72
76
|
### 匹配标签
|
|
73
77
|
|
|
74
78
|
匹配的标签对或自封闭标签会添加浅绿色背景,未匹配的标签会添加浅黄色背景。注意被高亮标记为错误的标签不会进行匹配。
|
|
@@ -77,6 +81,13 @@ CodeMirror 扩展会错误地匹配 `<!-- -->` 注释内外的括号,而这个
|
|
|
77
81
|
|
|
78
82
|
光标移动至模板参数或扩展/HTML 标签内部时会在该行代码上方出现一个淡黄色背景的 `-` 标记,点击即可折叠模板参数或标签内部文本。折叠后使用一个带有虚线边框的 `⋯` 标记占位,点击该标记将重新展开折叠的代码部分。
|
|
79
83
|
|
|
84
|
+
### HTML/URL编码快捷键
|
|
85
|
+
|
|
86
|
+
添加以下快捷键:
|
|
87
|
+
|
|
88
|
+
- `Ctrl`/`Cmd` + `/`: 将选中的文字转换为HTML实体
|
|
89
|
+
- `Ctrl`/`Cmd` + `\`: 将选中的文字转换为URL编码
|
|
90
|
+
|
|
80
91
|
### 快速打开模板
|
|
81
92
|
|
|
82
93
|
右键点击被高亮标记为模板标题或 `#invoke` 魔术字的第一个参数(即模块标题)时,会在新标签页打开对应页面。如果当前站点安装了 [Widget](https://www.mediawiki.org/wiki/Extension:Widget) 扩展,则当右键点击 `#widget` 魔术字的第一个参数(即小部件标题)时会在新标签页打开对应小部件的编辑界面(即 `action=edit`)。
|
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.12.1";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}}},u=Object.fromEntries||(e=>{const i={};for(var[t,a]of e)i[t]=a;return i}),p=Array.prototype.flat||function(){return this.reduce((e,i)=>e.concat(i),[])},n=e=>e.split(".").map(e=>Number(e));const r=(e,...i)=>mw.msg("wphl-"+e,...i);var i=(...i)=>()=>{var e=$("<p>",{html:r(...i)});return mw.notify(e,{type:"success",autoHideSeconds:"long",tag:"wikiplus-highlight"}),e},a=n(e).slice(0,2).join(".");const s="//fastly.jsdelivr.net",d="npm/codemirror@5.65.3",l="gh/bhsd-harry/codemirror-mediawiki@1.1.5",o="npm/wikiplus-highlight@"+a,{wgPageName:c,wgNamespaceNumber:m,wgPageContentModel:g,wgServerName:P,wgScriptPath:B,wgUserLanguage:N,skin:h}=mw.config.values,w=null!==mw.loader.getState("ext.CodeMirror"),k=t.getObject("InPageEditMwConfig")||{},f=""+P+B,b=k[f]||{},y=b.time<Date.now()-2592e6,H={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:d+"/mode/lua/lua.min.js",mediawiki:y?"ext.CodeMirror.data":[],htmlmixed:"ext.CodeMirror.lib.mode.htmlmixed",xml:[]}:{lib:d+"/lib/codemirror.min.js",css:d+"/mode/css/css.min.js",javascript:d+"/mode/javascript/javascript.min.js",lua:d+"/mode/lua/lua.min.js",mediawiki:[],htmlmixed:d+"/mode/htmlmixed/htmlmixed.min.js",xml:d+"/mode/xml/xml.min.js"},v={searchcursor:d+"/addon/search/searchcursor.min.js",search:o+"/search.min.js",activeLine:d+"/addon/selection/active-line.min.js",markSelection:d+"/addon/selection/mark-selection.min.js",trailingspace:d+"/addon/edit/trailingspace.min.js",matchBrackets:d+"/addon/edit/matchbrackets.min.js",matchTags:o+"/matchtags.min.js",fold:o+"/fold.min.js"};let j=t.getObject("Wikiplus-highlight-addons")||["search"],W=t.getObject("Wikiplus-highlight-indent")||"4";const U=async(c,e)=>{if(["mediawiki","widget"].includes(e)&&j.includes("contextmenu")){const i=$(c.getWrapperElement()).addClass("CodeMirror-contextmenu"),[t]=(mw.config.get("extCodeMirrorConfig")||{functionSynonyms:[{invoke:"invoke","调用":"invoke",widget:"widget","小工具":"widget"}]})["functionSynonyms"];e=i=>Object.keys(t).filter(e=>t[e]===i).map(e=>e.startsWith("#")?e:"#"+e);const m=e("invoke"),g=e("widget");await mw.loader.using("mediawiki.Title"),i.contextmenu(({pageX:e,pageY:i})=>{const t=c.coordsChar({left:e,top:i}),{line:a,ch:n}=t,o=c.getTokenTypeAt(t);if(/\bmw-(?:template-name|parserfunction)\b/.test(o)){const s=c.getLineTokens(a),r=s.findIndex(({start:e,end:i})=>e<n&&i>=n),d=s[r].string.replace(/\u200e/g,"").replace(/_/g," ").trim();if(/\bmw-template-name\b/.test(o)){const l=new mw.Title(d);return 0!==l.namespace||d.startsWith(":")?open(l.getUrl(),"_blank"):open(mw.util.getUrl("Template:"+d),"_blank"),!1}if(!(r<2)&&/\bmw-parserfunction-delimiter\b/.test(s[r-1].type)&&/\bmw-parserfunction-name\b/.test(s[r-2].type)){e=s[r-2].string.trim().toLocaleLowerCase();if(m.includes(e))open(mw.util.getUrl("Module:"+d),"_blank");else{if(!g.includes(e))return;open(mw.util.getUrl("Widget:"+d,{action:"edit"}),"_blank")}return!1}}})}};let C=t.getObject("Wikiplus-highlight-i18n"),M;C?((e,i)=>{var[e,t]=n(e),[i,a]=n(i);return e<i||e===i&&t<a})(C["wphl-version"],e)&&(M=i("welcome-new-addon",e,1)):(C={},M=i("welcome"));const S={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",Q=`${s}/${o}/i18n/${S}.json`,D=C["wphl-version"]===a;e=Promise.all([mw.loader.using("mediawiki.util"),(async()=>{D&&C["wphl-lang"]===S||(C=await $.ajax(Q,{dataType:"json",cache:!0}),t.setObject("Wikiplus-highlight-i18n",C)),mw.messages.set(C)})()]);const O=(e,i)=>0===e.length?Promise.resolve():i?mw.loader.using(e):$.ajax(s+"/"+(1<e.length?"combine/":"")+e.join(),{dataType:"script",cache:!0});let _;const z=[{option:"styleActiveLine",addon:"activeLine"},{option:"styleSelectedText",addon:"search",download:"markSelection",only:!0},{option:"showTrailingSpace",addon:"trailingspace"},{option:"matchBrackets",complex:!0},{option:"matchTags",addon:["matchTags","fold"],modes:["mediawiki","widget"]},{option:"fold",modes:["mediawiki","widget"]}],V=(e,i=!1)=>{const t=[];for(var{option:a,addon:n=a,download:o=Array.isArray(n)?a:n,only:s}of z)s&&i||e.optionHandlers[a]||!q(n,j)||t.push(v[o]);return t},q=(e,i)=>Array.isArray(e)?e.some(e=>i.includes(e)):i.includes(e),F=async e=>{let i=[];const t=[],a=[],n="function"==typeof window.CodeMirror,o=n?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{}};["mediawiki","widget"].includes(e)&&!o.modes.mediawiki&&(mw.loader.load(`${s}/${l}/mediawiki.min.css`,"text/css"),(w?t:i).push(l+"/mediawiki.min.js")),"mediawiki"===e&&b.config&&b.config.tags.html&&(e="html"),n||((w?i:a).push(x.lib),w||mw.loader.load(`${s}/${d}/lib/codemirror.min.css`,"text/css")),!o.prototype.getSearchCursor&&j.includes("search")&&a.push(v.searchcursor),!o.commands.findForward&&j.includes("search")&&a.push(v.search),a.push(...V(o)),["widget","html"].includes(e)?["css","javascript","mediawiki","htmlmixed","xml"].forEach(e=>{o.modes[e]||(i=i.concat(x[e]))}):o.modes[e]||("lua"===e?(w?t:i).push(x.lua):i=i.concat(x[e])),n?await Promise.all([O(i,w),O(t),O(a)]):w?(await O(i,!0),await Promise.all([O(t),O(a)])):(await O(a),await O(i))},J=e=>{k[f]={config:e,time:Date.now()},t.setObject("InPageEditMwConfig",k)},R=async(e,i)=>{const a=i?"javascript":await(async()=>{if(![274,828].includes(m)||c.endsWith("/doc"))return c.endsWith("/doc")?"mediawiki":H[g];{const e=274===m?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(r("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()}})();var t=F(a);const[n]=await Promise.all([(async(i,t)=>{if(["mediawiki","widget"].includes(i)){w&&y&&await t;let e=mw.config.get("extCodeMirrorConfig");if(e||y||!D||({config:e}=b,e.tags.ref&&(e.tagModes.ref="text/mediawiki"),mw.config.set("extCodeMirrorConfig",e)),e&&e.redirect&&e.img)return e;if(e)return e;const{magicwords:a,extensiontags:n,functionhooks:o,variables:s}=(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=>p.call(e.map(({aliases:e,name:i})=>e.map(e=>({alias:e,name:i})))),t=e=>u(e.map(({alias:e,name:i})=>[e.replace(/:$/,""),i]));if(e){const[d]=e["functionSynonyms"];d.subst||i(a.filter(({name:e})=>r.includes(e))).forEach(({alias:e,name:i})=>{d[e.replace(/:$/,"")]=i})}else{e={tagModes:{pre:"mw-tag-pre",nowiki:"mw-tag-nowiki",ref:"text/mediawiki"},tags:u(n.map(e=>[e.slice(1,-1),!0])),urlProtocols:mw.config.get("wgUrlProtocols")};const l=new Set([...o,...s,...r]),c=a.filter(({name:e,aliases:i})=>i.some(e=>/^__.+__$/.test(e))||l.has(e)),m=i(c.filter(e=>e["case-sensitive"])),g=i(c.filter(e=>!e["case-sensitive"])).map(({alias:e,name:i})=>({alias:e.toLowerCase(),name:i}));e.doubleUnderscore=[t(g.filter(({alias:e})=>/^__.+__$/.test(e))),t(m.filter(({alias:e})=>/^__.+__$/.test(e)))],e.functionSynonyms=[t(g.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),J(e),e}})(a,t),t]);"mediawiki"===a&&n.tags.html?(n.tagModes.html="htmlmixed",await F("html")):"widget"!==a||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});var t=e.height(),o=(_&&_.toTextArea(),i||"json"===g),s=$.client.profile()["name"];(_=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"safari"===s?"textarea":"contenteditable",lineNumbers:!0,lineWrapping:!0,mode:a,mwConfig:n,json:o},u(z.filter(({complex:e})=>!e).map(({option:e,addon:i=e,modes:t})=>{i=Array.isArray(i)?i[0]:i;return[e,j.includes(i)&&(!t||t.includes(a))]})),{matchBrackets:j.includes("matchBrackets")&&("mediawiki"!==a&&!o||{bracketRegex:/[{}[\]]/})},"mediawiki"===a?{}:{indentUnit:j.includes("indentWithSpace")?W:"4",indentWithTabs:!j.includes("indentWithSpace")}))).setSize(null,t),_.refresh(),U(_,a),$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),i||(e=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},s=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},_.addKeyMap($.extend({"Ctrl-S":e,"Cmd-S":e,"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(_)},K=new MutationObserver(e=>{const i=$(p.call(e.map(({addedNodes:e})=>[...e]))).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");0!==i.length&&R(i,"Wikiplus-Setting-Input"===i.attr("id"))}),X=(K.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}.CodeMirror-contextmenu .cm-mw-template-name{cursor:pointer}")),{get:Y=function(e){return e.value},set:G=function(e,i){e.value=i}}=(X.id="wphl-style",$.valHooks.textarea||{}),Z=e=>["Wikiplus-Quickedit","Wikiplus-Setting-Input"].includes(e.id);$.valHooks.textarea={get(e){return Z(e)&&_?_.getValue():Y(e)},set(e,i){Z(e)&&_?_.setValue(i):G(e,i)}},await e;let T,I,E,L,A;const ee=(e=j)=>{A.toggle(e.includes("indentWithSpace"))};const ie=$(mw.util.addPortletLink({minerva:"page-actions-overflow",citizen:"p-actions"}[h]||"p-cactions","#",r("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]),I=new OO.ui.CheckboxMultiselectInputWidget({options:[{data:"search",label:r("addon-search")},{data:"activeLine",label:r("addon-active-line")},{data:"trailingspace",label:r("addon-trailingspace")},{data:"matchBrackets",label:r("addon-matchbrackets")},{data:"matchTags",label:r("addon-matchtags")},{data:"fold",label:r("addon-fold")},{data:"contextmenu",label:r("addon-contextmenu")},{data:"indentWithSpace",label:r("addon-indentwithspace")},{data:"otherEditors",label:r("2.12"===r("version")?"addon-othereditos":"addon-othereditors")}],value:j}).on("change",ee),E=new OO.ui.NumberInputWidget({min:0,value:W}),L=new OO.ui.FieldLayout(I,{label:r("addon-label"),notices:[r("addon-notice")],align:"top"}),A=new OO.ui.FieldLayout(E,{label:r("addon-indent")}),ee()}e="object"==typeof window.Wikiplus;I.$element.find(".oo-ui-checkboxInputWidget").first().toggleClass("oo-ui-widget-enabled",e).children("input").prop("disabled",!e),T.open({title:r("addon-title"),message:L.$element.add(A.$element).add($("<p>",{html:r("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===S?"medium":"small"}).closing.then(e=>{L.$element.detach(),A.$element.detach(),"object"==typeof e&&"accept"===e.action&&(j=I.getValue(),W=E.getValue(),t.setObject("Wikiplus-highlight-addons",j),t.setObject("Wikiplus-highlight-indent",W))})}),te=("minerva"===h&&ie.find("a").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(j.includes("otherEditors")){let e=i.getOption("mode");e="text/mediawiki"===e?"mediawiki":e;var t,a,n,o=V(CodeMirror,!0);await O(o);for({option:t,addon:a=t,modes:n}of z.filter(({only:e,complex:i})=>!(e||i))){var s=Array.isArray(a)?a[0]:a;void 0!==i.getOption(t)||!j.includes(s)||n&&!n.includes(e)||i.setOption(t,!0)}void 0===i.getOption("matchBrackets")&&j.includes("matchBrackets")&&i.setOption("matchBrackets","mediawiki"!==e&&!i.getOption("json")||{bracketRegex:/[{}[\]]/}),"mediawiki"!==e&&j.includes("indentWithSpace")&&(i.setOption("indentUnit",W),i.setOption("indentWithTabs",!1)),U(i,e)}});mw.hook("InPageEdit.quickEdit.codemirror").add(({cm:e})=>te(e)),mw.hook("inspector").add(e=>te(e))})();
|
|
7
|
+
(async()=>{"use strict";if(mw.libs.wphl)return;mw.libs.wphl=!0;const i="2.15",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){try{var t=JSON.stringify(i);return localStorage.setItem(e,t)}catch(e){return!1}}},p=Object.fromEntries||(e=>{const i={};for(var[t,n]of e)i[t]=n;return i}),E=e=>"function"==typeof e.flat?e.flat():e.reduce((e,i)=>e.concat(i),[]),a=(e=i)=>e.split(".").map(e=>Number(e));var P=(e,i)=>{var[e,t]=a(e),[i,n]=a(i);return e<i||e===i&&t<n};const n=(e,...i)=>mw.msg("wphl-"+e,...i),o=(...e)=>$($.parseHTML(n(...e)));var e=(...i)=>()=>{var e=$("<p>",{html:n(...i)});return mw.notify(e,{type:"success",autoHideSeconds:"long",tag:"wikiplus-highlight"}),e},s=a().slice(0,2).join(".");const r="//fastly.jsdelivr.net",l="npm/codemirror@5.65.3",d="gh/bhsd-harry/codemirror-mediawiki@1.1.5",c="npm/wikiplus-highlight@"+s,{wgPageName:D,wgNamespaceNumber:U,wgPageContentModel:H,wgServerName:B,wgScriptPath:V,wgUserLanguage:Q,skin:q}=mw.config.values,u=null!==mw.loader.getState("ext.CodeMirror"),m=t.getObject("InPageEditMwConfig")||{},R=""+B+V,h=m[R]||{},w=h.time<Date.now()-2592e6,F={css:"css","sanitized-css":"css",javascript:"javascript",json:"javascript",wikitext:"mediawiki"},g=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:w?"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"},f={searchcursor:l+"/addon/search/searchcursor.min.js",search:c+"/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:c+"/matchtags.min.js",fold:c+"/fold.min.js"},k=[{option:"styleSelectedText",addon:"search",download:"markSelection",only:!0},{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:["mediawiki","widget"]},{option:"fold",modes:["mediawiki","widget"]}];let b=t.getObject("Wikiplus-highlight-addons")||["search"],y=t.getObject("Wikiplus-highlight-indent")||"4";const J={'"':"quot","'":"apos","<":"lt",">":"gt","&":"amp"," ":"nbsp"},x=i=>e=>{e.replaceSelection(e.getSelection().split("\n").map(i).join("\n"),"around")},C=x(e=>e.split("").map(e=>{if(e in J)return`&${J[e]};`;const i=e.charCodeAt();return i<256?`&#${i};`:`&#x${i.toString(16)};`}).join("")),v=({keyMap:e})=>e.default===e.pcDefault,K={"Ctrl-/":C,"Ctrl-\\":x(encodeURIComponent)},G={"Cmd-/":C,"Cmd-\\":x(encodeURIComponent)},j=async(u,e)=>{if(["mediawiki","widget"].includes(e)&&b.includes("contextmenu")){const i=$(u.getWrapperElement()).addClass("CodeMirror-contextmenu"),[t]=(mw.config.get("extCodeMirrorConfig")||{functionSynonyms:[{invoke:"invoke","调用":"invoke",widget:"widget","小工具":"widget"}]})["functionSynonyms"];e=i=>Object.keys(t).filter(e=>t[e]===i).map(e=>e.startsWith("#")?e:"#"+e);const h=e("invoke"),w=e("widget");await mw.loader.using("mediawiki.Title"),i.contextmenu(({pageX:e,pageY:i})=>{const t=u.coordsChar({left:e,top:i}),{line:n,ch:a}=t,o=u.getTokenTypeAt(t);if(/\bmw-(?:template-name|parserfunction)\b/.test(o)){const c=u.getLineTokens(n);for(var[s,{type:r,end:l,string:d}]of[...c.entries()].reverse())0<s&&c[s-1].type===r&&(c[s-1].end=l,c[s-1].string+=d,c.splice(s,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(o)){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)){e=c[m-2].string.trim().toLowerCase();if(h.includes(e))open(mw.util.getUrl("Module:"+g),"_blank");else{if(!w.includes(e))return;open(mw.util.getUrl("Widget:"+g,{action:"edit"}),"_blank")}return!1}}})}};let M=t.getObject("Wikiplus-highlight-i18n"),W;M?P(M["wphl-version"],i)&&(W=e("welcome-upgrade",i,0)):(M={},W=e("welcome"));const S={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"}[Q]||"en",X=`${r}/${c}/i18n/${S}.json`,Y=M["wphl-version"]===s;var e=async()=>{Y&&M["wphl-lang"]===S||(M=await $.ajax(X,{dataType:"json",cache:!0}),t.setObject("Wikiplus-highlight-i18n",M)),mw.messages.set(M)},Z=Promise.all([mw.loader.using("mediawiki.util"),e()]);const O=(e,i)=>0===e.length?Promise.resolve():i?mw.loader.using(e):$.ajax(r+"/"+(1<e.length?"combine/":"")+e.join(),{dataType:"script",cache:!0});let _;const z=(e,i=!1)=>{const t=[];for(var{option:n,addon:a=n,download:o=Array.isArray(a)?n:a,only:s}of k)s&&i||n in e.optionHandlers||!ee(a,b)||t.push(f[o]);return t},ee=(e,i)=>Array.isArray(e)?e.some(e=>i.includes(e)):i.includes(e),I=async e=>{let i=[];const t=[],n=[],a="function"==typeof window.CodeMirror;var o=a?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{}};if(["mediawiki","widget"].includes(e)&&!o.modes.mediawiki&&(mw.loader.load(`${r}/${d}/mediawiki.min.css`,"text/css"),(u?t:i).push(d+"/mediawiki.min.js")),"mediawiki"===e&&h.config&&h.config.tags.html&&(e="html"),a||((u?i:n).push(g.lib),u||mw.loader.load(`${r}/${l}/lib/codemirror.min.css`,"text/css")),!o.prototype.getSearchCursor&&b.includes("search")&&n.push(f.searchcursor),!o.commands.findForward&&b.includes("search")&&n.push(f.search),n.push(...z(o)),["widget","html"].includes(e))for(const s of["css","javascript","mediawiki","htmlmixed","xml"])o.modes[s]||(i=i.concat(g[s]));else o.modes[e]||("lua"===e?(u?t:i).push(g.lua):i=i.concat(g[e]));a?await Promise.all([O(i,u),O(t),O(n)]):u?(await O(i,!0),await Promise.all([O(t),O(n)])):(await O(n),await O(i))},ie=e=>{m[R]={config:e,time:Date.now()},t.setObject("InPageEditMwConfig",m)},te=async(i,t)=>{if(["mediawiki","widget"].includes(i)){u&&w&&await t;let e=mw.config.get("extCodeMirrorConfig");if(e||w||!Y||({config:e}=h,e.tags.ref&&(e.tagModes.ref="text/mediawiki"),mw.config.set("extCodeMirrorConfig",e)),e&&e.redirect&&e.img)return e;if(e)return e;const{magicwords:n,extensiontags:a,functionhooks:o,variables:s}=(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(e.map(({aliases:e,name:i})=>e.map(e=>({alias:e,name:i})))),t=e=>p(e.map(({alias:e,name:i})=>[e.replace(/:$/,""),i]));if(e){const[l]=e["functionSynonyms"];l.subst||i(n.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:p(a.map(e=>[e.slice(1,-1),!0])),urlProtocols:mw.config.get("wgUrlProtocols")};const d=new Set([...o,...s,...r]),c=n.filter(({name:e,aliases:i})=>i.some(e=>/^__.+__$/.test(e))||d.has(e)),m=i(c.filter(e=>e["case-sensitive"])),g=i(c.filter(e=>!e["case-sensitive"])).map(({alias:e,name:i})=>({alias:e.toLowerCase(),name:i}));e.doubleUnderscore=[t(g.filter(({alias:e})=>/^__.+__$/.test(e))),t(m.filter(({alias:e})=>/^__.+__$/.test(e)))],e.functionSynonyms=[t(g.filter(({alias:e})=>!/^__.+__|^#$/.test(e))),t(m.filter(({alias:e})=>!/^__.+__|^#$/.test(e)))]}return e.redirect=n.find(({name:e})=>"redirect"===e).aliases,e.img=t(i(n.filter(({name:e})=>e.startsWith("img_")))),mw.config.set("extCodeMirrorConfig",e),ie(e),e}},ne=async()=>{if(![274,828].includes(U)||D.endsWith("/doc"))return D.endsWith("/doc")?"mediawiki":F[H];{const e=274===U?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(n("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()}},ae=async(e,i)=>{const a=i?"javascript":await ne();var t=I(a);const[n]=await Promise.all([te(a,t),t]);"mediawiki"===a&&n.tags.html?(n.tagModes.html="htmlmixed",await I("html")):"widget"!==a||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});var t=e.height();_&&_.toTextArea();const o=i||"json"===H,s=$.client.profile()["name"];(_=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"safari"===s?"textarea":"contenteditable",lineNumbers:!0,lineWrapping:!0,mode:a,mwConfig:n,json:o},p(k.map(({option:e,addon:i=e,modes:t,complex:n=e=>!t||t.includes(e)})=>{i=Array.isArray(i)?i[0]:i;return[e,b.includes(i)&&n(a,o)]})),"mediawiki"===a?{extraKeys:b.includes("escape")&&(v(CodeMirror)?K:G)}:{indentUnit:b.includes("indentWithSpace")?y:"4",indentWithTabs:!b.includes("indentWithSpace")}))).setSize(null,t),_.refresh(),j(_,a),$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),i||(e=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},t=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},_.addKeyMap($.extend(v(CodeMirror)?{"Ctrl-S":e,"Shift-Ctrl-S":t}:{"Cmd-S":e,"Shift-Cmd-S":t},Wikiplus.getSetting("esc_to_exit_quickedit")?{Esc(){$("#Wikiplus-Quickedit-Back").triggerHandler("click")}}:{}))),mw.hook("wiki-codemirror").fire(_)},oe=new MutationObserver(e=>{const i=$(E(e.map(({addedNodes:e})=>[...e]))).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");0!==i.length&&ae(i,"Wikiplus-Setting-Input"===i.attr("id"))}),se=(oe.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}.CodeMirror-contextmenu .cm-mw-template-name{cursor:pointer}")),{get:re=function(e){return e.value},set:le=function(e,i){e.value=i}}=(se.id="wphl-style",$.valHooks.textarea||{}),de=e=>["Wikiplus-Quickedit","Wikiplus-Setting-Input"].includes(e.id);$.valHooks.textarea={get(e){return de(e)&&_?_.getValue():re(e)},set(e,i){de(e)&&_?_.setValue(i):le(e,i)}},await Z;let T,L,A,ce,N;const me=(e=b)=>{N.toggle(e.includes("indentWithSpace"))};const ge=$(mw.util.addPortletLink({minerva:"page-actions-overflow",citizen:"p-actions"}[q]||"p-cactions","#",n("portlet"),"wphl-settings")).click(async e=>{if(e.preventDefault(),T)L.setValue(b),A.setValue(y);else{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:[...k.map(({option:e,addon:i=e})=>{const t=Array.isArray(i)?i[0]:i;return{data:t,label:o("addon-"+t.toLowerCase())}}),...["escape","contextmenu","indentWithSpace","otherEditors"].map(e=>({data:e,label:o("addon-"+e.toLowerCase())}))],value:b}).on("change",me),A=new OO.ui.NumberInputWidget({min:0,value:y}),ce=new OO.ui.FieldLayout(L,{label:n("addon-label"),notices:[n("addon-notice")],align:"top"}),N=new OO.ui.FieldLayout(A,{label:n("addon-indent")}),me()}e="object"==typeof window.Wikiplus;L.$element.find(".oo-ui-checkboxInputWidget").first().toggleClass("oo-ui-widget-enabled",e).children("input").prop("disabled",!e),T.open({title:n("addon-title"),message:ce.$element.add(N.$element).add($("<p>",{html:n("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===S?"medium":"small"}).closing.then(e=>{ce.$element.detach(),N.$element.detach(),"object"==typeof e&&"accept"===e.action&&(b=L.getValue(),y=A.getValue(),t.setObject("Wikiplus-highlight-addons",b),t.setObject("Wikiplus-highlight-indent",y))})}),pe=("minerva"===q&&ge.find("a").addClass("mw-ui-icon-minerva-settings"),"function"==typeof W&&W().find("#wphl-settings-notify").click(e=>{e.preventDefault(),$("#wphl-settings").triggerHandler("click")}),async i=>{if(b.includes("otherEditors")){let e=i.getOption("mode");e="text/mediawiki"===e?"mediawiki":e;var t=z(CodeMirror,!0),n=i.getOption("json");await O(t);for(const{option:o,addon:s=o,modes:r,complex:l=e=>!r||r.includes(e)}of k.filter(({only:e})=>!e)){var a=Array.isArray(s)?s[0]:s;void 0===i.getOption(o)&&b.includes(a)&&i.setOption(o,l(e,n))}"mediawiki"!==e&&b.includes("indentWithSpace")?(i.setOption("indentUnit",y),i.setOption("indentWithTabs",!1)):"mediawiki"===e&&b.includes("escape")&&i.addKeyMap(v(CodeMirror)?K:G,!0),j(i,e)}});mw.hook("InPageEdit.quickEdit.codemirror").add(({cm:e})=>pe(e)),mw.hook("inspector").add(e=>pe(e)),mw.libs.wphl={version:i,majorVersion:s,options:k,addons:b,indent:y,i18n:M,i18nLang:S,wphlStyle:se,$portlet:ge,CDN:r,CM_CDN:l,MW_CDN:d,REPO_CDN:c,USING_LOCAL:u,MODE_LIST:g,ADDON_LIST:f,I18N_CDN:X,getVersion:a,cmpVersion:P,msg:n,htmlMsg:o,escapeHTML:C,handleContextMenu:j,setI18N:e,getScript:O,getAddonScript:z,intersect:ee,initMode:I,updateCachedConfig:ie,getMwConfig:te,getPageMode:ne,renderEditor:ae,handleOtherEditors:pe},Object.freeze(mw.libs.wphl)})();
|
|
8
8
|
//# sourceMappingURL=main.min.js.map
|
package/dist/main.min.js.map
CHANGED
|
@@ -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","flat","Array","prototype","this","reduce","acc","cur","concat","getVersion","str","split","map","s","Number","msg","args","notify","$p","$","html","type","autoHideSeconds","tag","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","fold","addons","indent","handleContextMenu","async","doc","mode","includes","$wrapper","getWrapperElement","addClass","synonyms","get","functionSynonyms","invoke","调用","widget","小工具","getSysnonyms","keys","filter","startsWith","using","contextmenu","pageX","pageY","pos","coordsChar","left","top","line","ch","getTokenTypeAt","test","tokens","getLineTokens","index","findIndex","start","end","text","string","replace","trim","title","Title","namespace","open","getUrl","util","parserFunction","toLocaleLowerCase","action","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","ajax","dataType","cache","messages","set","setI18N","getScript","urls","local","length","resolve","cm","options","option","addon","download","only","complex","modes","getAddonScript","CM","other","addonScript","isArray","optionHandlers","intersect","push","arr1","arr2","some","ele","initMode","scripts","externalScript","loaded","window","CodeMirror","commands","load","tags","getSearchCursor","findForward","forEach","lang","updateCachedConfig","renderEditor","$target","setting","endsWith","pageMode","OO","ui","confirm","actions","label","toLowerCase","getPageMode","initModePromise","mwConfig","ref","tagModes","redirect","img","magicwords","extensiontags","functionhooks","variables","Api","meta","siprop","formatversion","query","otherMagicwords","getAliases","words","call","aliases","name","alias","getConfig","insensitive","subst","pre","nowiki","urlProtocols","realMagicwords","Set","allMagicwords","has","sensitive","word","doubleUnderscore","find","getMwConfig","mimeModes","defineMIME","noinclude","height","toTextArea","client","profile","fromTextArea","extend","inputStyle","lineNumbers","lineWrapping","mainAddon","bracketRegex","indentUnit","indentWithTabs","setSize","refresh","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","document","body","childList","getElementById","addStyleTag","elem","id","valHooks","textarea","isWikiplus","getValue","setValue","dialog","indentWidget","field","indentField","toggleIndent","toggle","$portlet","addPortletLink","minerva","citizen","preventDefault","MessageDialog","windowManager","WindowManager","$element","appendTo","addWindows","CheckboxMultiselectInputWidget","data","on","NumberInputWidget","min","FieldLayout","notices","align","wikiplusLoaded","first","toggleClass","prop","message","add","flags","size","closing","then","detach","handleOtherEditors","getOption","undefined","setOption"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sourceRoot":"../","sources":["main.js"],"names":["mw","libs","wphl","version","storage","getObject","key","json","localStorage","getItem","JSON","parse","e","setObject","value","stringify","setItem","fromEntries","Object","entries","obj","flatten","arr","flat","reduce","acc","cur","concat","getVersion","str","split","map","s","Number","cmpVersion","a","b","a0","a1","b0","b1","msg","args","htmlMsg","$","parseHTML","notify","$p","html","type","autoHideSeconds","tag","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","markSelection","activeLine","trailingspace","matchBrackets","closeBrackets","matchTags","fold","options","option","addon","download","only","complex","mode","bracketRegex","modes","let","addons","indent","entity","\"","'","<",">","&"," ","convert","func","doc","replaceSelection","getSelection","escapeHTML","c","code","charCodeAt","toString","isPc","keyMap","default","pcDefault","extraKeysPc","Ctrl-/","Ctrl-\\","encodeURIComponent","extraKeysMac","Cmd-/","Cmd-\\","handleContextMenu","async","includes","$wrapper","getWrapperElement","addClass","synonyms","get","functionSynonyms","invoke","调用","widget","小工具","getSysnonyms","keys","filter","startsWith","using","contextmenu","pageX","pageY","pos","coordsChar","left","top","line","ch","curType","getTokenTypeAt","test","tokens","getLineTokens","i","end","string","reverse","splice","index","findIndex","start","text","replace","trim","title","Title","namespace","open","getUrl","util","parserFunction","toLowerCase","action","i18n","welcome","i18nLang","zh","zh-hans","zh-cn","zh-my","zh-sg","zh-hant","zh-tw","zh-hk","zh-mo","I18N_CDN","isLatest","setI18N","ajax","dataType","cache","messages","set","i18nPromise","Promise","all","getScript","urls","local","length","resolve","cm","getAddonScript","CM","other","addonScript","Array","isArray","optionHandlers","intersect","push","arr1","arr2","some","ele","initMode","scripts","externalScript","loaded","window","CodeMirror","prototype","commands","load","tags","getSearchCursor","findForward","lang","updateCachedConfig","getMwConfig","initModePromise","ref","tagModes","redirect","img","magicwords","extensiontags","functionhooks","variables","Api","meta","siprop","formatversion","query","otherMagicwords","getAliases","words","aliases","name","alias","getConfig","insensitive","subst","forEach","pre","nowiki","urlProtocols","realMagicwords","Set","allMagicwords","has","sensitive","word","doubleUnderscore","find","getPageMode","endsWith","pageMode","OO","ui","confirm","actions","label","renderEditor","$target","setting","mwConfig","mimeModes","defineMIME","noinclude","height","toTextArea","client","profile","fromTextArea","extend","inputStyle","lineNumbers","lineWrapping","mod","mainAddon","extraKeys","indentUnit","indentWithTabs","setSize","refresh","children","attr","submit","triggerHandler","submitMinor","click","addKeyMap","Ctrl-S","Shift-Ctrl-S","Cmd-S","Shift-Cmd-S","Wikiplus","getSetting","Esc","hook","fire","observer","MutationObserver","records","$editArea","addedNodes","wphlStyle","observe","document","body","childList","getElementById","addStyleTag","elem","id","valHooks","textarea","isWikiplus","getValue","setValue","dialog","indentWidget","field","indentField","toggleIndent","toggle","$portlet","addPortletLink","minerva","citizen","preventDefault","MessageDialog","windowManager","WindowManager","$element","appendTo","addWindows","CheckboxMultiselectInputWidget","data","on","NumberInputWidget","min","FieldLayout","notices","align","wikiplusLoaded","first","toggleClass","prop","message","add","flags","size","closing","then","detach","handleOtherEditors","getOption","undefined","setOption","freeze"],"mappings":"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"}
|
package/fold.js
CHANGED
|
@@ -44,14 +44,14 @@
|
|
|
44
44
|
|
|
45
45
|
/** @param {JQuery<HTMLElement>} $tooltip */
|
|
46
46
|
function hideTooltip($tooltip) {
|
|
47
|
-
let
|
|
47
|
+
let timeout = -1,
|
|
48
48
|
executeTime = 0;
|
|
49
49
|
return /** @param {number} wait */ (wait, update = true) => {
|
|
50
50
|
if (update || executeTime - Date.now() > wait) {
|
|
51
51
|
clearTimeout(timeout);
|
|
52
52
|
timeout = setTimeout(() => {
|
|
53
53
|
$tooltip.fadeOut('fast');
|
|
54
|
-
timeout =
|
|
54
|
+
timeout = -1;
|
|
55
55
|
}, wait);
|
|
56
56
|
executeTime = Date.now() + wait;
|
|
57
57
|
}
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
return {from: cm.posFromIndex(fromIndex + 4), to: cm.posFromIndex(toIndex)};
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
/** @param {CodeMirror.
|
|
157
|
+
/** @param {CodeMirror.EditorFoldable} cm */
|
|
158
158
|
function showTooltip(cm) {
|
|
159
159
|
const {$tooltip, hide} = cm.state.fold;
|
|
160
160
|
cm.operation(() => {
|
|
@@ -162,14 +162,10 @@
|
|
|
162
162
|
hide(500, false);
|
|
163
163
|
return;
|
|
164
164
|
}
|
|
165
|
-
const cursor = cm.getCursor()
|
|
166
|
-
|
|
167
|
-
let /** @type {CodeMirror.MarkerRange} */ range,
|
|
168
|
-
/** @type {string} */ type;
|
|
169
|
-
if (comment) {
|
|
170
|
-
range = comment;
|
|
165
|
+
const cursor = cm.getCursor();
|
|
166
|
+
let range = findEnclosingComment(cm, cursor),
|
|
171
167
|
type = 'comment';
|
|
172
|
-
|
|
168
|
+
if (!range) {
|
|
173
169
|
const template = findEnclosingTemplate(cm, cursor);
|
|
174
170
|
let tags = cm.findEnclosingTag(cursor);
|
|
175
171
|
if (tags && cmpPos(tags.open.to, tags.close.from) === 0) {
|
|
@@ -202,24 +198,29 @@
|
|
|
202
198
|
|
|
203
199
|
CodeMirror.defineExtension(
|
|
204
200
|
'scanForDelimiterAndBracket',
|
|
205
|
-
/**
|
|
206
|
-
* @param {CodeMirror.Position} where
|
|
207
|
-
* @param {1|-1} dir
|
|
208
|
-
*/
|
|
201
|
+
/** @type {function(this: CodeMirror.Editor, CodeMirror.Position, 1|-1): CodeMirror.MarkerRange} */
|
|
209
202
|
function(where, dir) {
|
|
210
203
|
return scanForDelimiterAndBracket(this, where || this.getCursor(), dir || 1);
|
|
211
204
|
},
|
|
212
205
|
);
|
|
213
206
|
|
|
214
|
-
CodeMirror.defineExtension(
|
|
215
|
-
|
|
216
|
-
|
|
207
|
+
CodeMirror.defineExtension(
|
|
208
|
+
'findEnclosingTemplate',
|
|
209
|
+
/** @type {function(this: CodeMirror.Editor, CodeMirror.Position): CodeMirror.MarkerRange} */
|
|
210
|
+
function(pos) {
|
|
211
|
+
return findEnclosingTemplate(this, pos || this.getCursor());
|
|
212
|
+
},
|
|
213
|
+
);
|
|
217
214
|
|
|
218
|
-
CodeMirror.defineExtension(
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
CodeMirror.defineExtension(
|
|
216
|
+
'findEnclosingComment',
|
|
217
|
+
/** @type {function(this: CodeMirror.Editor, CodeMirror.Position): CodeMirror.MarkerRange} */
|
|
218
|
+
function(pos) {
|
|
219
|
+
return findEnclosingComment(this, pos || this.getCursor());
|
|
220
|
+
},
|
|
221
|
+
);
|
|
221
222
|
|
|
222
|
-
CodeMirror.defineOption('fold', false, (cm, val, old) => {
|
|
223
|
+
CodeMirror.defineOption('fold', false, (/** @type {CodeMirror.EditorFoldable} */ cm, val, old) => {
|
|
223
224
|
if (old && old !== CodeMirror.Init) {
|
|
224
225
|
cm.off('cursorActivity', showTooltip);
|
|
225
226
|
if (cm.state.fold) {
|
package/i18n/en.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"wphl-version": "2.
|
|
2
|
+
"wphl-version": "2.15",
|
|
3
3
|
"wphl-lang": "en",
|
|
4
|
-
"wphl-addon-search": "Search",
|
|
5
|
-
"wphl-addon-
|
|
4
|
+
"wphl-addon-search": "<span title=\"Search with a string or a regular expression\">Search</span>",
|
|
5
|
+
"wphl-addon-activeline": "Show the active line",
|
|
6
6
|
"wphl-addon-trailingspace": "Show trailing spaces",
|
|
7
7
|
"wphl-addon-matchbrackets": "Highlight matching/nonmatching brackets",
|
|
8
|
+
"wphl-addon-closebrackets": "Auto-close brackets and quotes",
|
|
8
9
|
"wphl-addon-matchtags": "Highlight matching/nonmatching tags",
|
|
9
10
|
"wphl-addon-fold": "Fold template arguments and tags' innerHTML",
|
|
11
|
+
"wphl-addon-escape": "<span title=\"Ctrl/Cmd + / : HTML encoding\nCtrl/Cmd + \\ : URL encoding\">Keyboard shortcuts for HTML/URL encoding</span>",
|
|
10
12
|
"wphl-addon-contextmenu": "Open the template or module page when right clicking",
|
|
11
13
|
"wphl-addon-indentwithspace": "Indent JavaScript/CSS/Lua codes with spaces instead of tabs",
|
|
12
14
|
"wphl-addon-indent": "Indent",
|
|
13
|
-
"wphl-addon-othereditors": "Apply selected addons to other editors
|
|
15
|
+
"wphl-addon-othereditors": "Apply selected addons to other editors",
|
|
14
16
|
"wphl-addon-label": "Please select the addons you wish to load",
|
|
15
17
|
"wphl-addon-notice": "Changes will apply when opening a new Wikiplus dialog.",
|
|
16
18
|
"wphl-addon-title": "Wikiplus Highlight Addons",
|
package/i18n/zh-hans.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"wphl-version": "2.
|
|
2
|
+
"wphl-version": "2.15",
|
|
3
3
|
"wphl-lang": "zh-hans",
|
|
4
|
-
"wphl-addon-search": "
|
|
5
|
-
"wphl-addon-
|
|
4
|
+
"wphl-addon-search": "<span title=\"搜索字符串或正则表达式\">搜索</span>",
|
|
5
|
+
"wphl-addon-activeline": "高亮显示光标所在行",
|
|
6
6
|
"wphl-addon-trailingspace": "显示尾随空格",
|
|
7
7
|
"wphl-addon-matchbrackets": "高亮显示匹配和未匹配的括号",
|
|
8
|
+
"wphl-addon-closebrackets": "自动闭合括号和引号",
|
|
8
9
|
"wphl-addon-matchtags": "高亮显示匹配和未匹配的标签",
|
|
9
10
|
"wphl-addon-fold": "折叠模板参数和标签内部文本",
|
|
11
|
+
"wphl-addon-escape": "<span title=\"Ctrl/Cmd + / : HTML编码\nCtrl/Cmd + \\ : URL编码\">添加HTML和URL编码快捷键</span>",
|
|
10
12
|
"wphl-addon-contextmenu": "右键点击可打开模板或模块页面",
|
|
11
13
|
"wphl-addon-indentwithspace": "代码缩进使用空格而非Tab",
|
|
12
14
|
"wphl-addon-indent": "缩进",
|
|
13
|
-
"wphl-addon-othereditors": "
|
|
15
|
+
"wphl-addon-othereditors": "将选中的插件用于其他编辑器",
|
|
14
16
|
"wphl-addon-label": "请选择您希望加载的插件",
|
|
15
17
|
"wphl-addon-notice": "更改将于打开新的Wikiplus编辑区时生效。",
|
|
16
18
|
"wphl-addon-title": "Wikiplus高亮插件",
|
package/i18n/zh-hant.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"wphl-version": "2.
|
|
2
|
+
"wphl-version": "2.15",
|
|
3
3
|
"wphl-lang": "zh-hant",
|
|
4
|
-
"wphl-addon-search": "
|
|
5
|
-
"wphl-addon-
|
|
4
|
+
"wphl-addon-search": "<span title=\"搜尋字串或正規表示式\">搜尋</span>",
|
|
5
|
+
"wphl-addon-activeline": "突出顯示游標所在行",
|
|
6
6
|
"wphl-addon-trailingspace": "顯示尾隨空格",
|
|
7
|
-
"wphl-addon-matchbrackets": "
|
|
7
|
+
"wphl-addon-matchbrackets": "突出顯示匹配和未匹配的括號",
|
|
8
|
+
"wphl-addon-closebrackets": "自動閉合括號和引號 ",
|
|
8
9
|
"wphl-addon-matchtags": "突出顯示匹配和未匹配的標籤",
|
|
9
10
|
"wphl-addon-fold": "摺疊模板參數和標籤內部文字",
|
|
11
|
+
"wphl-addon-escape": "<span title=\"Ctrl/Cmd + / : HTML編碼\nCtrl/Cmd + \\ : URL編碼\">添加HTML和URL編碼快速鍵</span>",
|
|
10
12
|
"wphl-addon-contextmenu": "右鍵點擊可打開模板或模組頁面",
|
|
11
13
|
"wphl-addon-indentwithspace": "代碼縮排使用空格而非Tab",
|
|
12
14
|
"wphl-addon-indent": "縮排",
|
|
13
|
-
"wphl-addon-othereditors": "
|
|
15
|
+
"wphl-addon-othereditors": "將選中的外掛程式用於其他編輯器",
|
|
14
16
|
"wphl-addon-label": "請選擇您希望載入的外掛程式",
|
|
15
17
|
"wphl-addon-notice": "更改將於打開新的Wikiplus編輯區時生效。",
|
|
16
18
|
"wphl-addon-title": "Wikiplus突顯外掛程式",
|
package/main.js
CHANGED
|
@@ -8,10 +8,15 @@
|
|
|
8
8
|
(async () => {
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
if (mw.libs.wphl) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
mw.libs.wphl = true; // 开始加载
|
|
15
|
+
|
|
16
|
+
const version = '2.15',
|
|
17
|
+
newAddon = 0;
|
|
13
18
|
|
|
14
|
-
/** @type {mw.storage} */
|
|
19
|
+
/** @type {typeof mw.storage} */
|
|
15
20
|
const storage = typeof mw.storage === 'object' && typeof mw.storage.getObject === 'function'
|
|
16
21
|
? mw.storage
|
|
17
22
|
: {
|
|
@@ -27,9 +32,8 @@
|
|
|
27
32
|
}
|
|
28
33
|
},
|
|
29
34
|
setObject(key, value) {
|
|
30
|
-
let /** @type {string} */ json;
|
|
31
35
|
try {
|
|
32
|
-
json = JSON.stringify(value);
|
|
36
|
+
const json = JSON.stringify(value);
|
|
33
37
|
return localStorage.setItem(key, json);
|
|
34
38
|
} catch (e) {
|
|
35
39
|
return false;
|
|
@@ -38,10 +42,11 @@
|
|
|
38
42
|
};
|
|
39
43
|
/**
|
|
40
44
|
* polyfill for Object.fromEntries
|
|
41
|
-
* @type {(entries: Iterable<[string,
|
|
45
|
+
* @type {(entries: Iterable<[string, T]>) => Record<string, T>}
|
|
46
|
+
* @template T
|
|
42
47
|
*/
|
|
43
48
|
const fromEntries = Object.fromEntries || (entries => {
|
|
44
|
-
const /** @type {Record<string,
|
|
49
|
+
const /** @type {Record<string, T>} */ obj = {};
|
|
45
50
|
for (const [key, value] of entries) {
|
|
46
51
|
obj[key] = value;
|
|
47
52
|
}
|
|
@@ -49,17 +54,21 @@
|
|
|
49
54
|
});
|
|
50
55
|
/**
|
|
51
56
|
* polyfill for Array.prototype.flat
|
|
52
|
-
* @type {
|
|
57
|
+
* @type {(arr: T[][]) => T[]}
|
|
58
|
+
* @template T
|
|
53
59
|
*/
|
|
54
|
-
const
|
|
55
|
-
|
|
60
|
+
const flatten = arr => {
|
|
61
|
+
if (typeof arr.flat === 'function') {
|
|
62
|
+
return arr.flat();
|
|
63
|
+
}
|
|
64
|
+
return arr.reduce((acc, cur) => acc.concat(cur), []);
|
|
56
65
|
};
|
|
57
66
|
|
|
58
67
|
/**
|
|
59
68
|
* 解析版本号
|
|
60
69
|
* @param {string} str 版本字符串
|
|
61
70
|
*/
|
|
62
|
-
const getVersion = str => str.split('.').map(s => Number(s));
|
|
71
|
+
const getVersion = (str = version) => str.split('.').map(s => Number(s));
|
|
63
72
|
/**
|
|
64
73
|
* 比较版本号
|
|
65
74
|
* @param {string} a
|
|
@@ -77,6 +86,8 @@
|
|
|
77
86
|
* @param {string[]} args
|
|
78
87
|
*/
|
|
79
88
|
const msg = (key, ...args) => mw.msg(`wphl-${key}`, ...args);
|
|
89
|
+
/** @param {string[]} args */
|
|
90
|
+
const htmlMsg = (...args) => $($.parseHTML(msg(...args)));
|
|
80
91
|
/**
|
|
81
92
|
* 提示消息
|
|
82
93
|
* @param {string[]} args
|
|
@@ -88,7 +99,7 @@
|
|
|
88
99
|
};
|
|
89
100
|
|
|
90
101
|
// 插件和I18N依主版本号
|
|
91
|
-
const majorVersion = getVersion(
|
|
102
|
+
const majorVersion = getVersion().slice(0, 2).join('.');
|
|
92
103
|
|
|
93
104
|
// 路径
|
|
94
105
|
const CDN = '//fastly.jsdelivr.net',
|
|
@@ -145,19 +156,67 @@
|
|
|
145
156
|
const ADDON_LIST = {
|
|
146
157
|
searchcursor: `${CM_CDN}/addon/search/searchcursor.min.js`,
|
|
147
158
|
search: `${REPO_CDN}/search.min.js`,
|
|
148
|
-
activeLine: `${CM_CDN}/addon/selection/active-line.min.js`,
|
|
149
159
|
markSelection: `${CM_CDN}/addon/selection/mark-selection.min.js`,
|
|
160
|
+
activeLine: `${CM_CDN}/addon/selection/active-line.min.js`,
|
|
150
161
|
trailingspace: `${CM_CDN}/addon/edit/trailingspace.min.js`,
|
|
151
162
|
matchBrackets: `${CM_CDN}/addon/edit/matchbrackets.min.js`,
|
|
163
|
+
closeBrackets: `${CM_CDN}/addon/edit/closebrackets.min.js`,
|
|
152
164
|
matchTags: `${REPO_CDN}/matchtags.min.js`,
|
|
153
165
|
fold: `${REPO_CDN}/fold.min.js`,
|
|
154
166
|
};
|
|
155
167
|
|
|
168
|
+
/**
|
|
169
|
+
* @typedef {object} addon
|
|
170
|
+
* @property {string} option
|
|
171
|
+
* @property {string|string[]} addon
|
|
172
|
+
* @property {string} download
|
|
173
|
+
* @property {(mode: string, json: boolean) => any} complex
|
|
174
|
+
* @property {string[]} modes
|
|
175
|
+
* @property {boolean} only
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
const /** @type {addon[]} */ options = [
|
|
179
|
+
{option: 'styleSelectedText', addon: 'search', download: 'markSelection', only: true},
|
|
180
|
+
{option: 'styleActiveLine', addon: 'activeLine'},
|
|
181
|
+
{option: 'showTrailingSpace', addon: 'trailingspace'},
|
|
182
|
+
{
|
|
183
|
+
option: 'matchBrackets',
|
|
184
|
+
complex: (mode, json) => mode === 'mediawiki' || json
|
|
185
|
+
? {bracketRegex: /[{}[\]]/}
|
|
186
|
+
: true,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
option: 'autoCloseBrackets', addon: 'closeBrackets',
|
|
190
|
+
complex: (mode, json) => mode === 'mediawiki' || json
|
|
191
|
+
? '()[]{}""'
|
|
192
|
+
: true,
|
|
193
|
+
},
|
|
194
|
+
{option: 'matchTags', addon: ['matchTags', 'fold'], modes: ['mediawiki', 'widget']},
|
|
195
|
+
{option: 'fold', modes: ['mediawiki', 'widget']},
|
|
196
|
+
];
|
|
197
|
+
|
|
156
198
|
const defaultAddons = ['search'],
|
|
157
199
|
defaultIndent = '4';
|
|
158
200
|
let /** @type {string[]} */ addons = storage.getObject('Wikiplus-highlight-addons') || defaultAddons,
|
|
159
201
|
/** @type {string} */ indent = storage.getObject('Wikiplus-highlight-indent') || defaultIndent;
|
|
160
202
|
|
|
203
|
+
/** @type {Record<string, string>} */
|
|
204
|
+
const entity = {'"': 'quot', "'": 'apos', '<': 'lt', '>': 'gt', '&': 'amp', ' ': 'nbsp'},
|
|
205
|
+
/** @type {(func: (str: string) => string) => (doc: CodeMirror.Editor) => void} */
|
|
206
|
+
convert = func => doc => {
|
|
207
|
+
doc.replaceSelection(doc.getSelection().split('\n').map(func).join('\n'), 'around');
|
|
208
|
+
},
|
|
209
|
+
escapeHTML = convert(str => str.split('').map(c => {
|
|
210
|
+
if (c in entity) {
|
|
211
|
+
return `&${entity[c]};`;
|
|
212
|
+
}
|
|
213
|
+
const code = c.charCodeAt();
|
|
214
|
+
return code < 256 ? `&#${code};` : `&#x${code.toString(16)};`;
|
|
215
|
+
}).join('')),
|
|
216
|
+
/** @type {function(typeof CodeMirror): boolean} */ isPc = ({keyMap}) => keyMap.default === keyMap.pcDefault,
|
|
217
|
+
extraKeysPc = {'Ctrl-/': escapeHTML, 'Ctrl-\\': convert(encodeURIComponent)},
|
|
218
|
+
extraKeysMac = {'Cmd-/': escapeHTML, 'Cmd-\\': convert(encodeURIComponent)};
|
|
219
|
+
|
|
161
220
|
/**
|
|
162
221
|
* contextMenu插件
|
|
163
222
|
* @param {CodeMirror.Editor} doc
|
|
@@ -186,14 +245,21 @@
|
|
|
186
245
|
$wrapper.contextmenu(({pageX, pageY}) => {
|
|
187
246
|
const pos = doc.coordsChar({left: pageX, top: pageY}),
|
|
188
247
|
{line, ch} = pos,
|
|
189
|
-
|
|
190
|
-
if (!/\bmw-(?:template-name|parserfunction)\b/.test(
|
|
248
|
+
curType = doc.getTokenTypeAt(pos);
|
|
249
|
+
if (!/\bmw-(?:template-name|parserfunction)\b/.test(curType)) {
|
|
191
250
|
return;
|
|
192
251
|
}
|
|
193
|
-
const tokens = doc.getLineTokens(line)
|
|
194
|
-
|
|
252
|
+
const tokens = doc.getLineTokens(line);
|
|
253
|
+
for (const [i, {type, end, string}] of [...tokens.entries()].reverse()) {
|
|
254
|
+
if (i > 0 && tokens[i - 1].type === type) {
|
|
255
|
+
tokens[i - 1].end = end;
|
|
256
|
+
tokens[i - 1].string += string;
|
|
257
|
+
tokens.splice(i, 1);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const index = tokens.findIndex(({start, end}) => start < ch && end >= ch),
|
|
195
261
|
text = tokens[index].string.replace(/\u200e/g, '').replace(/_/g, ' ').trim();
|
|
196
|
-
if (/\bmw-template-name\b/.test(
|
|
262
|
+
if (/\bmw-template-name\b/.test(curType)) {
|
|
197
263
|
const title = new mw.Title(text);
|
|
198
264
|
if (title.namespace !== 0 || text.startsWith(':')) {
|
|
199
265
|
open(title.getUrl(), '_blank');
|
|
@@ -206,7 +272,7 @@
|
|
|
206
272
|
) {
|
|
207
273
|
return;
|
|
208
274
|
}
|
|
209
|
-
const parserFunction = tokens[index - 2].string.trim().
|
|
275
|
+
const parserFunction = tokens[index - 2].string.trim().toLowerCase();
|
|
210
276
|
if (invoke.includes(parserFunction)) {
|
|
211
277
|
open(mw.util.getUrl(`Module:${text}`), '_blank');
|
|
212
278
|
} else if (widget.includes(parserFunction)) {
|
|
@@ -272,30 +338,11 @@
|
|
|
272
338
|
// 以下进入CodeMirror相关内容
|
|
273
339
|
let /** @type {CodeMirror.EditorFromTextArea} */ cm;
|
|
274
340
|
|
|
275
|
-
/**
|
|
276
|
-
* @typedef {object} addon
|
|
277
|
-
* @property {string} option
|
|
278
|
-
* @property {string|string[]} addon
|
|
279
|
-
* @property {string} download
|
|
280
|
-
* @property {boolean} complex
|
|
281
|
-
* @property {string[]} modes
|
|
282
|
-
* @property {boolean} only
|
|
283
|
-
*/
|
|
284
|
-
|
|
285
|
-
const /** @type {addon[]} */ options = [
|
|
286
|
-
{option: 'styleActiveLine', addon: 'activeLine'},
|
|
287
|
-
{option: 'styleSelectedText', addon: 'search', download: 'markSelection', only: true},
|
|
288
|
-
{option: 'showTrailingSpace', addon: 'trailingspace'},
|
|
289
|
-
{option: 'matchBrackets', complex: true},
|
|
290
|
-
{option: 'matchTags', addon: ['matchTags', 'fold'], modes: ['mediawiki', 'widget']},
|
|
291
|
-
{option: 'fold', modes: ['mediawiki', 'widget']},
|
|
292
|
-
];
|
|
293
|
-
|
|
294
|
-
/** @param {CodeMirror} CM */
|
|
341
|
+
/** @param {typeof CodeMirror} CM */
|
|
295
342
|
const getAddonScript = (CM, other = false) => {
|
|
296
343
|
const /** @type {string[]} */ addonScript = [];
|
|
297
344
|
for (const {option, addon = option, download = Array.isArray(addon) ? option : addon, only} of options) {
|
|
298
|
-
if (!(only && other) && !CM.optionHandlers
|
|
345
|
+
if (!(only && other) && !(option in CM.optionHandlers) && intersect(addon, addons)) {
|
|
299
346
|
addonScript.push(ADDON_LIST[download]);
|
|
300
347
|
}
|
|
301
348
|
}
|
|
@@ -303,8 +350,9 @@
|
|
|
303
350
|
};
|
|
304
351
|
|
|
305
352
|
/**
|
|
306
|
-
* @param {
|
|
307
|
-
* @param {
|
|
353
|
+
* @param {T[]|T} arr1
|
|
354
|
+
* @param {T[]} arr2
|
|
355
|
+
* @template T
|
|
308
356
|
*/
|
|
309
357
|
const intersect = (arr1, arr2) => Array.isArray(arr1)
|
|
310
358
|
? arr1.some(ele => arr2.includes(ele))
|
|
@@ -322,7 +370,7 @@
|
|
|
322
370
|
|
|
323
371
|
/**
|
|
324
372
|
* 代替CodeMirror的局部变量
|
|
325
|
-
* @type {CodeMirror}
|
|
373
|
+
* @type {typeof CodeMirror}
|
|
326
374
|
*/
|
|
327
375
|
const CM = loaded
|
|
328
376
|
? window.CodeMirror
|
|
@@ -356,11 +404,11 @@
|
|
|
356
404
|
}
|
|
357
405
|
addonScript.push(...getAddonScript(CM));
|
|
358
406
|
if (['widget', 'html'].includes(type)) {
|
|
359
|
-
['css', 'javascript', 'mediawiki', 'htmlmixed', 'xml']
|
|
407
|
+
for (const lang of ['css', 'javascript', 'mediawiki', 'htmlmixed', 'xml']) {
|
|
360
408
|
if (!CM.modes[lang]) {
|
|
361
409
|
scripts = scripts.concat(MODE_LIST[lang]);
|
|
362
410
|
}
|
|
363
|
-
}
|
|
411
|
+
}
|
|
364
412
|
} else if (!CM.modes[type]) {
|
|
365
413
|
if (type === 'lua') { // CodeMirror扩展没有提供Lua模式,必须从外部下载
|
|
366
414
|
(USING_LOCAL ? externalScript : scripts).push(MODE_LIST.lua);
|
|
@@ -427,23 +475,13 @@
|
|
|
427
475
|
return config;
|
|
428
476
|
}
|
|
429
477
|
|
|
430
|
-
/**
|
|
431
|
-
* @typedef {object} siteInfoQuery
|
|
432
|
-
* @property {{name: string, aliases: string[], 'case-sensitive': boolean}[]} magicwords
|
|
433
|
-
* @property {string[]} extensiontags
|
|
434
|
-
* @property {string[]} functionhooks
|
|
435
|
-
* @property {string[]} variables
|
|
436
|
-
*/
|
|
437
|
-
|
|
438
478
|
/*
|
|
439
479
|
* 以下情形均需要发送API请求
|
|
440
480
|
* 情形2:localStorage未过期但不包含新设置
|
|
441
481
|
* 情形3:新加载的 ext.CodeMirror.data
|
|
442
482
|
* 情形4:config === null
|
|
443
483
|
*/
|
|
444
|
-
const
|
|
445
|
-
query: {magicwords, extensiontags, functionhooks, variables},
|
|
446
|
-
} = await new mw.Api().get({
|
|
484
|
+
const {query: {magicwords, extensiontags, functionhooks, variables}} = await new mw.Api().get({
|
|
447
485
|
meta: 'siteinfo',
|
|
448
486
|
siprop: config ? 'magicwords' : 'magicwords|extensiontags|functionhooks|variables',
|
|
449
487
|
formatversion: 2,
|
|
@@ -454,7 +492,7 @@
|
|
|
454
492
|
* @param {{aliases: string[], name: string}[]} words
|
|
455
493
|
* @returns {{alias: string, name: string}[]}
|
|
456
494
|
*/
|
|
457
|
-
const getAliases = words =>
|
|
495
|
+
const getAliases = words => flatten(
|
|
458
496
|
words.map(({aliases, name}) => aliases.map(alias => ({alias, name}))),
|
|
459
497
|
);
|
|
460
498
|
/**
|
|
@@ -574,17 +612,14 @@
|
|
|
574
612
|
mwConfig,
|
|
575
613
|
json,
|
|
576
614
|
}, fromEntries(
|
|
577
|
-
options.
|
|
615
|
+
options.map(({option, addon = option, modes, complex = mod => !modes || modes.includes(mod)}) => {
|
|
578
616
|
const mainAddon = Array.isArray(addon) ? addon[0] : addon;
|
|
579
|
-
return [option, addons.includes(mainAddon) && (
|
|
617
|
+
return [option, addons.includes(mainAddon) && complex(mode, json)];
|
|
580
618
|
}),
|
|
581
|
-
),
|
|
582
|
-
|
|
583
|
-
?
|
|
584
|
-
|
|
585
|
-
),
|
|
586
|
-
}, mode === 'mediawiki'
|
|
587
|
-
? {}
|
|
619
|
+
), mode === 'mediawiki'
|
|
620
|
+
? {
|
|
621
|
+
extraKeys: addons.includes('escape') && (isPc(CodeMirror) ? extraKeysPc : extraKeysMac),
|
|
622
|
+
}
|
|
588
623
|
: {
|
|
589
624
|
indentUnit: addons.includes('indentWithSpace') ? indent : defaultIndent,
|
|
590
625
|
indentWithTabs: !addons.includes('indentWithSpace'),
|
|
@@ -605,18 +640,17 @@
|
|
|
605
640
|
$('#Wikiplus-Quickedit-MinorEdit').click();
|
|
606
641
|
$('#Wikiplus-Quickedit-Submit').triggerHandler('click');
|
|
607
642
|
};
|
|
608
|
-
cm.addKeyMap($.extend(
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
'
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
: {},
|
|
643
|
+
cm.addKeyMap($.extend(
|
|
644
|
+
isPc(CodeMirror)
|
|
645
|
+
? {'Ctrl-S': submit, 'Shift-Ctrl-S': submitMinor}
|
|
646
|
+
: {'Cmd-S': submit, 'Shift-Cmd-S': submitMinor},
|
|
647
|
+
Wikiplus.getSetting('esc_to_exit_quickedit')
|
|
648
|
+
? {
|
|
649
|
+
Esc() {
|
|
650
|
+
$('#Wikiplus-Quickedit-Back').triggerHandler('click');
|
|
651
|
+
},
|
|
652
|
+
}
|
|
653
|
+
: {},
|
|
620
654
|
));
|
|
621
655
|
}
|
|
622
656
|
|
|
@@ -625,7 +659,7 @@
|
|
|
625
659
|
|
|
626
660
|
// 监视 Wikiplus 编辑框
|
|
627
661
|
const observer = new MutationObserver(records => {
|
|
628
|
-
const $editArea = $(
|
|
662
|
+
const $editArea = $(flatten(
|
|
629
663
|
records.map(({addedNodes}) => [...addedNodes]),
|
|
630
664
|
)).find('#Wikiplus-Quickedit, #Wikiplus-Setting-Input');
|
|
631
665
|
if ($editArea.length === 0) {
|
|
@@ -680,11 +714,11 @@
|
|
|
680
714
|
await i18nPromise; // 以下内容依赖I18N
|
|
681
715
|
|
|
682
716
|
// 设置对话框
|
|
683
|
-
let /** @type {OOUI.
|
|
684
|
-
/** @type {OOUI.
|
|
685
|
-
/** @type {OOUI.
|
|
686
|
-
/** @type {OOUI.
|
|
687
|
-
/** @type {OOUI.
|
|
717
|
+
let /** @type {OOUI.MessageDialog} */ dialog,
|
|
718
|
+
/** @type {OOUI.CheckboxMultiselectInputWidget} */ widget,
|
|
719
|
+
/** @type {OOUI.NumberInputWidget} */ indentWidget,
|
|
720
|
+
/** @type {OOUI.FieldLayout} */ field,
|
|
721
|
+
/** @type {OOUI.FieldLayout} */ indentField;
|
|
688
722
|
const toggleIndent = (value = addons) => {
|
|
689
723
|
indentField.toggle(value.includes('indentWithSpace'));
|
|
690
724
|
};
|
|
@@ -705,18 +739,12 @@
|
|
|
705
739
|
windowManager.addWindows([dialog]);
|
|
706
740
|
widget = new OO.ui.CheckboxMultiselectInputWidget({
|
|
707
741
|
options: [
|
|
708
|
-
{
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
{data: 'contextmenu', label: msg('addon-contextmenu')},
|
|
715
|
-
{data: 'indentWithSpace', label: msg('addon-indentwithspace')},
|
|
716
|
-
{
|
|
717
|
-
data: 'otherEditors',
|
|
718
|
-
label: msg(msg('version') === '2.12' ? 'addon-othereditos' : 'addon-othereditors'),
|
|
719
|
-
},
|
|
742
|
+
...options.map(({option, addon = option}) => {
|
|
743
|
+
const mainAddon = Array.isArray(addon) ? addon[0] : addon;
|
|
744
|
+
return {data: mainAddon, label: htmlMsg(`addon-${mainAddon.toLowerCase()}`)};
|
|
745
|
+
}),
|
|
746
|
+
...['escape', 'contextmenu', 'indentWithSpace', 'otherEditors']
|
|
747
|
+
.map(addon => ({data: addon, label: htmlMsg(`addon-${addon.toLowerCase()}`)})),
|
|
720
748
|
],
|
|
721
749
|
value: addons,
|
|
722
750
|
}).on('change', toggleIndent);
|
|
@@ -728,6 +756,9 @@
|
|
|
728
756
|
});
|
|
729
757
|
indentField = new OO.ui.FieldLayout(indentWidget, {label: msg('addon-indent')});
|
|
730
758
|
toggleIndent();
|
|
759
|
+
} else {
|
|
760
|
+
widget.setValue(addons);
|
|
761
|
+
indentWidget.setValue(indent);
|
|
731
762
|
}
|
|
732
763
|
const wikiplusLoaded = typeof window.Wikiplus === 'object';
|
|
733
764
|
widget.$element.find('.oo-ui-checkboxInputWidget').first().toggleClass('oo-ui-widget-enabled', wikiplusLoaded)
|
|
@@ -772,23 +803,22 @@
|
|
|
772
803
|
}
|
|
773
804
|
let mode = doc.getOption('mode');
|
|
774
805
|
mode = mode === 'text/mediawiki' ? 'mediawiki' : mode;
|
|
775
|
-
const addonScript = getAddonScript(CodeMirror, true)
|
|
806
|
+
const addonScript = getAddonScript(CodeMirror, true),
|
|
807
|
+
json = doc.getOption('json');
|
|
776
808
|
await getScript(addonScript);
|
|
777
|
-
for (const {
|
|
809
|
+
for (const {
|
|
810
|
+
option, addon = option, modes, complex = (/** @type {string} */ mod) => !modes || modes.includes(mod),
|
|
811
|
+
} of options.filter(({only}) => !only)) {
|
|
778
812
|
const mainAddon = Array.isArray(addon) ? addon[0] : addon;
|
|
779
|
-
if (doc.getOption(option) === undefined && addons.includes(mainAddon)
|
|
780
|
-
doc.setOption(option,
|
|
813
|
+
if (doc.getOption(option) === undefined && addons.includes(mainAddon)) {
|
|
814
|
+
doc.setOption(option, complex(mode, json));
|
|
781
815
|
}
|
|
782
816
|
}
|
|
783
|
-
if (doc.getOption('matchBrackets') === undefined && addons.includes('matchBrackets')) {
|
|
784
|
-
doc.setOption('matchBrackets', mode === 'mediawiki' || doc.getOption('json')
|
|
785
|
-
? {bracketRegex: /[{}[\]]/}
|
|
786
|
-
: true,
|
|
787
|
-
);
|
|
788
|
-
}
|
|
789
817
|
if (mode !== 'mediawiki' && addons.includes('indentWithSpace')) {
|
|
790
818
|
doc.setOption('indentUnit', indent);
|
|
791
819
|
doc.setOption('indentWithTabs', false);
|
|
820
|
+
} else if (mode === 'mediawiki' && addons.includes('escape')) {
|
|
821
|
+
doc.addKeyMap(isPc(CodeMirror) ? extraKeysPc : extraKeysMac, true);
|
|
792
822
|
}
|
|
793
823
|
handleContextMenu(doc, mode);
|
|
794
824
|
};
|
|
@@ -797,4 +827,12 @@
|
|
|
797
827
|
/** @param {{cm: CodeMirror.Editor}} */ ({cm: doc}) => handleOtherEditors(doc),
|
|
798
828
|
);
|
|
799
829
|
mw.hook('inspector').add(/** @param {CodeMirror.Editor} doc */ doc => handleOtherEditors(doc));
|
|
830
|
+
|
|
831
|
+
mw.libs.wphl = {
|
|
832
|
+
version, majorVersion, options, addons, indent, i18n, i18nLang, wphlStyle, $portlet,
|
|
833
|
+
CDN, CM_CDN, MW_CDN, REPO_CDN, USING_LOCAL, MODE_LIST, ADDON_LIST, I18N_CDN,
|
|
834
|
+
getVersion, cmpVersion, msg, htmlMsg, escapeHTML, handleContextMenu, setI18N, getScript, getAddonScript,
|
|
835
|
+
intersect, initMode, updateCachedConfig, getMwConfig, getPageMode, renderEditor, handleOtherEditors,
|
|
836
|
+
}; // 加载完毕
|
|
837
|
+
Object.freeze(mw.libs.wphl);
|
|
800
838
|
})();
|
package/matchtags.js
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
return /\b(?:mw-(?:html|ext)tag-)?bracket\b/.test(type);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
/** Jump to the start of the next line */
|
|
43
43
|
nextLine() {
|
|
44
44
|
if (this.line >= this.max) {
|
|
45
45
|
return;
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
return true;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
/** Jump to the end of the previous line */
|
|
53
53
|
prevLine() {
|
|
54
54
|
if (this.line <= this.min) {
|
|
55
55
|
return;
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
/** Jump to the letter after a '>' towards the line end */
|
|
63
63
|
toTagEnd() {
|
|
64
64
|
for (;;) {
|
|
65
65
|
const gt = this.text.indexOf('>', this.ch);
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
/** Jump to a '<' towards the line start */
|
|
78
78
|
toTagStart() {
|
|
79
79
|
for (;;) {
|
|
80
80
|
const lt = this.ch ? this.text.lastIndexOf('<', this.ch - 1) : -1;
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
/** Jump to the start of the last line, or the letter after a ${tagStart} */
|
|
98
98
|
toNextTag() {
|
|
99
99
|
for (;;) {
|
|
100
100
|
tagStart.lastIndex = this.ch;
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
/** Jump to the end of the first line, or a non-bracket '>', or the letter after a tag bracket '>' */
|
|
119
119
|
toPrevTag() {
|
|
120
120
|
for (;;) {
|
|
121
121
|
const gt = this.ch ? this.text.lastIndexOf('>', this.ch - 1) : -1;
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
|
|
140
140
|
/**
|
|
141
141
|
* @param {string} tag
|
|
142
|
-
* @returns {CodeMirror.
|
|
142
|
+
* @returns {CodeMirror.MatchingTag}
|
|
143
143
|
*/
|
|
144
144
|
findMatchingClose(tag) {
|
|
145
145
|
const /** @type {string[]} */ stack = [];
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
|
|
181
181
|
/**
|
|
182
182
|
* @param {string|undefined} tag
|
|
183
|
-
* @returns {CodeMirror.
|
|
183
|
+
* @returns {CodeMirror.MatchingTag}
|
|
184
184
|
*/
|
|
185
185
|
findMatchingOpen(tag) {
|
|
186
186
|
const /** @type {string[]} */ stack = [];
|
|
@@ -222,10 +222,7 @@
|
|
|
222
222
|
|
|
223
223
|
CodeMirror.defineExtension(
|
|
224
224
|
'findMatchingTag',
|
|
225
|
-
/**
|
|
226
|
-
* @param {CodeMirror.Position} pos
|
|
227
|
-
* @returns {CodeMirror.matchingTags}
|
|
228
|
-
*/
|
|
225
|
+
/** @type {function(this: CodeMirror.Editor, CodeMirror.Position): CodeMirror.MatchingTagPair} */
|
|
229
226
|
function(pos) {
|
|
230
227
|
let iter = new Iter(this, pos);
|
|
231
228
|
if (!iter.isTag()) {
|
|
@@ -253,11 +250,7 @@
|
|
|
253
250
|
|
|
254
251
|
CodeMirror.defineExtension(
|
|
255
252
|
'findEnclosingTag',
|
|
256
|
-
/**
|
|
257
|
-
* @param {CodeMirror.Position} pos
|
|
258
|
-
* @param {string} tag
|
|
259
|
-
* @returns {CodeMirror.matchingTags}
|
|
260
|
-
*/
|
|
253
|
+
/** @type {function(this: CodeMirror.Editor, CodeMirror.Position, string): CodeMirror.MatchingTagPair} */
|
|
261
254
|
function(pos, tag) {
|
|
262
255
|
const iter = new Iter(this, pos);
|
|
263
256
|
const open = iter.findMatchingOpen(tag);
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wikiplus-highlight",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"description": "A plugin for the MediaWiki front-end add-on \"Wikiplus\"",
|
|
5
5
|
"main": "main.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"test": "
|
|
7
|
+
"test": "http-server -c-1 --cors",
|
|
8
|
+
"ssl": "http-server -c-1 -S -C cert.pem"
|
|
8
9
|
},
|
|
9
10
|
"repository": {
|
|
10
11
|
"type": "git",
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
"homepage": "https://github.com/bhsd-harry/Wikiplus-highlight#readme",
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"eslint": "^8.8.0",
|
|
27
|
+
"http-server": "^14.1.0",
|
|
26
28
|
"types-mediawiki": "^1.2.0",
|
|
27
29
|
"uglify-js": "^3.15.5"
|
|
28
30
|
}
|
package/search.js
CHANGED
|
@@ -40,27 +40,24 @@
|
|
|
40
40
|
}),
|
|
41
41
|
$searchBtn = $('<span>', {
|
|
42
42
|
class: 'Wikiplus-Btn',
|
|
43
|
-
|
|
43
|
+
html: msg('addon-search'),
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
const escapeRegExp = mw.util.escapeRegExp || mw.RegExp.escape;
|
|
47
|
-
const /** @type {
|
|
47
|
+
const /** @type {CodeMirror.Mode<undefined>} */ overlay = {token: () => {}};
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* 根据搜索字符串生成高亮
|
|
51
51
|
* @param {string|RegExp} str
|
|
52
52
|
*/
|
|
53
53
|
const token = str => {
|
|
54
|
-
|
|
55
|
-
if (typeof str === 'string') {
|
|
56
|
-
initial = RegExp(`[^${escapeRegExp(str[0])}]`, 'i');
|
|
57
|
-
}
|
|
54
|
+
const initial = typeof str === 'string' ? RegExp(`[^${escapeRegExp(str[0])}]`, 'i') : null;
|
|
58
55
|
return /** @param {CodeMirror.StringStream} stream */ stream => {
|
|
59
56
|
if (stream.match(str, true, true)) {
|
|
60
57
|
return 'search';
|
|
61
58
|
}
|
|
62
59
|
stream.next();
|
|
63
|
-
if (
|
|
60
|
+
if (initial) {
|
|
64
61
|
stream.eatWhile(initial);
|
|
65
62
|
}
|
|
66
63
|
};
|
|
@@ -84,7 +81,7 @@
|
|
|
84
81
|
return;
|
|
85
82
|
}
|
|
86
83
|
|
|
87
|
-
if (/^\/.+\/i?$/.test(ptn)) {
|
|
84
|
+
if (typeof ptn === 'string' && /^\/.+\/i?$/.test(ptn)) {
|
|
88
85
|
ptn = ptn.endsWith('i')
|
|
89
86
|
? RegExp(ptn.slice(1, -2), 'i')
|
|
90
87
|
: RegExp(ptn.slice(1, -1));
|
|
@@ -96,8 +93,7 @@
|
|
|
96
93
|
lastPtn = ptn;
|
|
97
94
|
cursor = cm.getSearchCursor(ptn, cm.getCursor(), {caseFold: true});
|
|
98
95
|
}
|
|
99
|
-
|
|
100
|
-
let /** @type {boolean} */ result = cursor[method]();
|
|
96
|
+
let result = dir ? cursor.findNext() : cursor.findPreviouse();
|
|
101
97
|
if (!result) {
|
|
102
98
|
if (dir) {
|
|
103
99
|
cursor = cm.getSearchCursor(ptn, {line: 0, ch: 0}, {caseFold: true});
|
|
@@ -106,7 +102,7 @@
|
|
|
106
102
|
lastCh = cm.getLine(lastLine).length;
|
|
107
103
|
cursor = cm.getSearchCursor(ptn, {line: lastLine, ch: lastCh}, {caseFold: true});
|
|
108
104
|
}
|
|
109
|
-
result = cursor
|
|
105
|
+
result = dir ? cursor.findNext() : cursor.findPreviouse();
|
|
110
106
|
}
|
|
111
107
|
if (result) {
|
|
112
108
|
const from = cursor.from(),
|
|
@@ -180,14 +176,10 @@
|
|
|
180
176
|
reset(cm);
|
|
181
177
|
}
|
|
182
178
|
});
|
|
183
|
-
cm.addKeyMap(
|
|
184
|
-
'Ctrl-F': findNew,
|
|
185
|
-
'Cmd-F': findNew,
|
|
186
|
-
|
|
187
|
-
'Cmd-G': 'findForward',
|
|
188
|
-
'Shift-Ctrl-G': 'findBackward',
|
|
189
|
-
'Shift-Cmd-G': 'findBackward',
|
|
190
|
-
});
|
|
179
|
+
cm.addKeyMap(CodeMirror.keyMap.default === CodeMirror.keyMap.pcDefault
|
|
180
|
+
? {'Ctrl-F': findNew, 'Ctrl-G': 'findForward', 'Shift-Ctrl-G': 'findBackward'}
|
|
181
|
+
: {'Cmd-F': findNew, 'Cmd-G': 'findForward', 'Shift-Cmd-G': 'findBackward'},
|
|
182
|
+
);
|
|
191
183
|
});
|
|
192
184
|
|
|
193
185
|
mw.loader.addStyleTag(
|