@bhsd/codemirror-mediawiki 2.22.0 → 2.22.1

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/dist/mw.min.js CHANGED
@@ -31,7 +31,7 @@ var Lw=Object.create;var ro=Object.defineProperty;var qw=Object.getOwnPropertyDe
31
31
  ${m}`,g=1),/[\n\r]/u.test(h.sliceDoc(d,d+1))||(m+=`
32
32
  `,y=1)),[m,g,y]};if(l!==void 0)$u.setSelection.call(this,{start:l,end:a});else if(i&&r&&!n&&!t&&/^\s*=.*=\s*$/u.test(e)){let{selection:{main:{from:u,to:d}}}=h,[m]=f(u,d,e);return c.dispatch({changes:{from:u,to:d,insert:m},selection:{anchor:u+m.length}}),this}return ln.replaceSelections(c,(u,{from:d,to:m})=>{let g=s&&d===m,y=r||d===m?e:h.sliceDoc(d,m),[S,v,Q]=f(d,m,Ly(y,n,t,o)),C=d+S.length;return g?[S,d+n.length+v,C-t.length-Q]:[S,C]}),this},getCaretPosition(n){let{state:{selection:{main:{from:e,to:t,head:i}}}}=nt(this).view;return n!=null&&n.startAndEnd?[e,t]:i},scrollToCaretPosition(){return nt(this).scrollTo(),this}},va={getContents(){return nt(this).model.getValue()},setContents(n){return nt(this).model.setValue(n),this},getSelection(){let{model:n,editor:e}=nt(this);return n.getValueInRange(e.getSelection())},setSelection({start:n,end:e=n}){let{model:t,editor:i}=nt(this);return i.setSelection(Y$(monaco,t,[n,e])),this},replaceSelection(n){let{editor:e}=nt(this);return e.executeEdits("replaceSelection",[{range:e.getSelection(),text:n,forceMoveMarkers:!0}]),this},encapsulateSelection({pre:n="",peri:e="",post:t="",ownline:i,replace:r,splitlines:s,selectionStart:o,selectionEnd:l}){let{model:a,editor:c}=nt(this),h=({startColumn:u,endColumn:d,endLineNumber:m},g)=>(i&&u>1?`
33
33
  `:"")+g+(i&&d<=a.getLineLength(m)?`
34
- `:"");if(o!==void 0)va.setSelection.call(this,{start:o,end:l});else if(i&&r&&!n&&!t&&/^\s*=.*=\s*$/u.test(e)){let u=c.getSelection();return c.executeEdits("encapsulateSelection",[{range:u,text:h(u,e),forceMoveMarkers:!0}]),this}let f=c.getSelections().map(u=>{let d=r||u.isEmpty()?e:a.getValueInRange(u),m=h(u,Ly(d,n,t,s));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=nt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=nt(this);return n.revealPosition(n.getPosition()),this}};var qy=(()=>{let n=["bold-header","format-leakage","fostered-content","h1","illegal-attr","insecure-style","invalid-gallery","invalid-imagemap","invalid-invoke","invalid-isbn","lonely-apos","lonely-bracket","lonely-http","nested-link","no-arg","no-duplicate","no-ignored","obsolete-attr","obsolete-tag","parsing-order","pipe-like","table-layout","tag-like","unbalanced-header","unclosed-comment","unclosed-quote","unclosed-table","unescaped","unknown-page","unmatched-tag","unterminated-url","url-encoding","var-anchor","void-ext"];return Object.freeze(n),n})();var Is="npm/@bhsd/codemirror-mediawiki@2.22.0",Vs=Is.slice(Is.lastIndexOf("@")+1),Zu={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"},zy="codemirror-mediawiki-i18n",jy,Tu=(jy=Zu[mw.config.get("wgUserLanguage")])!=null?jy:"en",Yy,an=(Yy=_t(zy))!=null?Yy:{},{version:Cu}=an,Iy=async n=>{if(an.lang!==Tu||Cu!==Vs)try{Object.assign(an,await(await fetch(`${n}/${Is}/i18n/${Tu}.json`)).json()),Ut(zy,an)}catch(e){mw.notify(Ee("i18n-failed",Tu),{type:"error"}),console.error(e)}for(let[e,t]of Object.entries(an))e.endsWith("-mac")?ka&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Ee=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Vy=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Qa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Vy(t.parseDom())}var Ny=async(n,...e)=>{let t=Vy($("<p>",{html:Ee(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},By=async(n,e)=>{let t;Cu?e.length>0&&!so(Cu,n)&&(t=await Ny("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Vs.replace(/\./gu,"")}" target="_blank">${Vs}</a>`,String(e.length),e.map(i=>`<li>${Qa(`addon-${i}`,!0)}</li>`).join(""))):t=await Ny("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},_y=n=>{n.localize(Object.fromEntries(Object.entries(an).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Jy="codemirror-mediawiki-addons",ew="codemirror-mediawiki-monaco",Ru=["wiki","javascript","css","lua","json"],z$=["Wikitext","JavaScript","CSS","Lua","JSON"],tw="codemirror-mediawiki-wikilint",Ca=["ESLint","Stylelint"],Gy,Pr=((Gy=mw.config.get("wgUserGroups"))==null?void 0:Gy.includes("user"))&&mw.config.get("wgUserName"),iw=Pr?`User:${Pr}/codemirror-mediawiki.json`:void 0;var _s="codemirror-mediawiki-indent",Ne=new Set(_t(Jy)),Fy,Xt=new Set((Fy=_t(ew))!=null?Fy:Ne.has("useMonaco")?Ru:[]),Hy,It=(Hy=_t(tw))!=null?Hy:{},Ci=new Map(Ca.map(n=>[n,_t(`codemirror-mediawiki-${n}`)])),Bs,Au,Pa,$a,Ta,Ky,Ti=(Ky=localStorage.getItem(_s))!=null?Ky:"",Eu={},Uy=new Map,nw=(n,e)=>{let t=n==="http"||n==="okay-but-empty"?`MediaWiki API request failed: ${n}`:$("<ul>",{html:e.errors.map(({html:i})=>$("<li>",{html:i}))});mw.notify(t,{type:"error",autoHideSeconds:"long"})},rw=(async()=>{if(Pr)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Mu=(async()=>{if(!Pr)return;let n={action:"query",prop:"revisions",titles:iw,rvprop:"content",rvlimit:1};(await rw).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let s=JSON.parse(t.revisions[0].content);if(!((i=s.addons)!=null&&i.includes("save")))return;Ne.clear();for(let o of s.addons)Ne.add(o);Xt.clear();for(let o of(r=s.useMonaco)!=null?r:Ne.has("useMonaco")?Ru:[])Xt.add(o);s.indent&&localStorage.setItem(_s,s.indent);for(let o of Ca)s[o]&&Ci.set(o,s[o]);s.wikilint&&Object.assign(It,s.wikilint)}},nw)})(),sw=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Mu,Bs)Pa.setValue([...Ne]),$a.setValue([...Xt]),Ta.setValue(Ti);else{Bs=new OO.ui.MessageDialog({id:"cm-preference"}),Bs.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Bs]),Au=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Ee("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),s={};for(let c of Ca){let h=Ci.get(c);Eu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ti||" "):""});let f=new OO.ui.FieldLayout(Eu[c],{label:Ee(`${c}-config`),align:"top"}),u=new OO.ui.TabPanelLayout(c,{label:c,$content:f.$element});u.on("active",d=>{let[m]=u.$element.find("textarea");d&&!hi.has(m)&&(async()=>{let{editor:g}=await ln.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),s[c]=u}Au.addTabPanels([i,r,...Object.values(s)],0),Pa=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(an).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Qa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Pr}))],value:[...Ne]}),$a=new OO.ui.CheckboxMultiselectInputWidget({options:Ru.map((c,h)=>({data:c,label:z$[h]})),value:[...Xt]}),Ta=new OO.ui.TextInputWidget({value:Ti,placeholder:String.raw`\t`});let o=new OO.ui.FieldLayout(Pa,{label:Ee("label"),align:"top"}),l=new OO.ui.FieldLayout($a,{label:Ee("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Ta,{label:Ee("addon-indent")});i.$element.append(o.$element,l.$element,a.$element,$("<p>",{html:Ee("feedback","codemirror-mediawiki")})),r.$element.append(...qy.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Ee("wikilint-off")},{data:"1",label:Ee("wikilint-error")},{data:"2",label:Ee("wikilint-on")}],value:(d=It[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Uy.set(c,f),(m=It[c])!=null||(It[c]=h),u.$element}),$("<p>",{html:Ee("feedback","wikiparser-node")}))}let e=await Bs.open({message:Au.$element,actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"medium"}).closing;if(typeof e=="object"&&e.action==="accept"){let t=Ti,i=Ne.has("save");Ti=Ta.getValue();let r=Ti!==t;if(r){for(let l of n)l==null||l.setIndent(Ti||" ");localStorage.setItem(_s,Ti)}for(let[l,a]of Uy){let c=a.getValue();r||(r=c!==It[l]),It[l]=c}Ut(tw,It);let s=[];for(let l of Ca)try{let a=JSON.parse(Eu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ci.get(l))),Ci.set(l,a),Ut(`codemirror-mediawiki-${l}`,a)}catch{s.push(l)}s.length>0&&OO.ui.alert(Ee("json-error",s.join(Ee("and"))));let o=$a.getValue();if(o.length!==Xt.size||!o.every(l=>Xt.has(l))){r=!0,Xt.clear();for(let l of o)Xt.add(l);Ut(ew,o)}if(Ne.delete("useMonaco"),o=Pa.getValue(),o.length!==Ne.size||!o.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of o)Ne.add(l);for(let l of n)l==null||l.prefer(o)}if(Xt.size>0&&Ne.add("useMonaco"),o=[...Ne],Ut(Jy,o),r&&Pr&&(i||Ne.has("save"))){let l={action:"edit",title:iw,text:JSON.stringify({addons:o,useMonaco:[...Xt],indent:Ti,wikilint:It,ESLint:Ci.get("ESLint"),Stylelint:Ci.get("Stylelint")}),summary:Ee("save-summary")};(await rw).postWithToken("csrf",l).then(()=>{mw.notify(Qa("save-success"),{type:"success"})},nw)}}};var ow=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(s){let o=s.getModel(),l=s.getSelections().filter(a=>!a.isEmpty());if(l.length===0)s.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(o.getValueInRange(c))}));s.executeEdits(n,a)}}}),I$=()=>[ow("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",fu),ow("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",uu)],Us=new WeakMap,Za,lw=(n,e)=>{if(e&&!Us.has(n))Za!=null||(Za=I$()),Us.set(n,Za.map(t=>n.addAction(t)));else if(e===!1&&Us.has(n)){for(let t of Us.get(n))t.dispose();Us.delete(n)}};var aw=(n,e)=>{let t=n.modules.toolbar.$toolbar.find(".group-codemirror6");t.children("[rel=toggle]").children().addBack().toggleClass("tool-active",e),t.children("[rel=preferences]").toggle(e)},cw=async n=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");let e=new Promise(t=>{n.on("wikiEditor-toolbar-doneInitialSections",()=>{n.wikiEditor("addToToolbar",{section:"main",groups:{codemirror6:{tools:{toggle:{type:"button",oouiIcon:"highlight",label:"CodeMirror 6",action:{type:"callback",execute(i){var r;(r=n.data("CodeMirror6"))==null||r.toggle(),aw(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Ee("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),aw(n.data("wikiEditorContext"),!0),t()})});if(await mw.loader.using(["ext.wikiEditor","oojs-ui.styles.icons-interactions"]),!n.data("wikiEditorContext")){if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(n);else{let{wikiEditor:{modules:{dialogs:{config:t}}}}=$;n.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...t.getDefaultConfig()}),t.replaceIcons(n)}await e}};var V$="2.22",B$=["inlayHints"];mw.loader.load(`${mi}/${Is}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=hi.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=hi.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var Gs={},_$=new Set(["javascript","css","lua","json"]),hw={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},U$={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},G$=[["allowMultipleSelections","multiCursorLimit",1,void 0],["autocompletion","quickSuggestions",!1,!0],["bracketMatching","matchBrackets","never","always"],["closeBrackets",["autoClosingBrackets","autoClosingQuotes"],"never","always"],["codeFolding","folding",!1,!0],["colorPicker","colorDecorators",!1,!0],["highlightActiveLine","renderLineHighlight","gutter","all"],["highlightSelectionMatches","occurrencesHighlight","off","singleFile"],["highlightSpecialChars","renderControlCharacters",!1,!0],["highlightWhitespace","renderWhitespace","selection","all"],["openLinks","links",!1,!0],["scrollPastEnd","scrollBeyondLastLine",!1,!0],["hover","hover",{enabled:!1},void 0],["signatureHelp","parameterHints",{enabled:!1},void 0],["inlayHints","inlayHints",{enabled:"offUnlessPressed"},{enabled:"onUnlessPressed"}]],fw=n=>!n.closest("#cm-preference"),F$=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,s]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:o}=e;return s.map(l=>[l.slice(o)])}return i===0?s.map(o=>[o]):s.map(o=>[new mw.Title(o).getMainText()])}catch{return[]}},H$=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:s}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),o=Object.entries((r=(i=Object.values(s)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of o){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},K$=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:F$(e,n),paramSuggest:H$(e,n)}},Zi,Vt,Be,fi,Fs,$r,qn,uw,Wu,Aa=class Aa extends vr{constructor(t,i,r,s,o=!0,l=mw.config.get("wgPageName")){var a,c;if((a=hi.get(t))!=null&&a.visible)throw new RangeError("The textarea has already been replaced by CodeMirror.");super(t,i,s,!1);$e(this,qn);$e(this,Zi,!0);$e(this,Vt);$e(this,Be);$e(this,fi);$e(this,Fs);$e(this,$r," ");this.ns=r,this.page=l,hi.set(t,this),o?this.initialize(s):(Ue(this,Fs,Ae(this,qn,uw).call(this)),$(t).data("jquery.textSelection",va)),fw(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((c=t.form)==null||c.addEventListener("submit",()=>{let h=document.querySelector("#wpScrolltop");h&&this.view&&M(this,Zi)&&(h.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Zi)}get model(){return M(this,Be)}get editor(){return M(this,fi)}initialize(t){if(M(this,Be))throw new Error("A Monaco editor is already initialized!");super.initialize(t),this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},t));let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Zi)){let{textarea:i}=this;M(this,Be)?t&&!M(this,Zi)?(M(this,Be).setValue(i.value),Ae(this,qn,Wu).call(this),M(this,Vt).style.display="",i.style.display="none",$(i).data("jquery.textSelection",va)):!t&&M(this,Zi)&&(M(this,Vt).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&$u)),Ue(this,Zi,t)}async setLanguage(t,i){if(M(this,Be))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await K$(this.page)),super.setLanguage(t,i),t==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},i))}setContent(t){M(this,Be)?M(this,Be).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Be).getValue()}setIndent(t){if(M(this,fi)){Ue(this,$r,t);let i=t.includes(" ");M(this,fi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return Gs[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,s=Ci.get("ESLint"),o=Ci.get("Stylelint"),l;if(typeof i=="number"?r==="mediawiki"&&(i===10||i===828||i===2)?l={include:!0}:r==="javascript"?l={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{},...s}:r==="css"&&o&&(l=o):l=i,r in Gs)l&&await this.getLinter(l);else if(r==="mediawiki"&&(l={...l,i18n:Zu[mw.config.get("wgUserLanguage")]}),await this.getLinter(l),r==="mediawiki"){let[a,c]=await Promise.all([vu(Ms),wikiparse.getConfig()]);wikiparse.setConfig(Dy(c,a))}Gs[r]&&(r==="mediawiki"?this.lint(async a=>(await Gs[r](a)).filter(({rule:c,severity:h})=>Number(It[c])>+(h==="warning"))):this.lint(Gs[r]))}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),s=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,fi)||!M(this,Be))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Be).lint&&M(this,Be).lint(r)}s&&lw(M(this,fi),i("escape"));let o={};for(let[l,a,c,h]of G$){let f=i(l);if(f!==void 0)if(typeof a=="string")o[a]=f?h:c;else for(let u of a)o[u]=f?h:c}M(this,fi).updateOptions(o)}static async fromTextArea(t,i,r,s){var f;let o=$(t);if(Ne.has("wikiEditor")&&fw(t))try{await cw(o)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Ee(u.message),{type:"error"}),Ne.delete("wikiEditor")}if(!i&&r===void 0){let{wgAction:u,wgNamespaceNumber:d,wgPageContentModel:m,wgCanonicalSpecialPageName:g}=mw.config.get();u==="edit"||u==="submit"?(r=d,i=d===274?"html":m.toLowerCase()):g==="Upload"?(r=6,i="wikitext"):(await mw.loader.using("oojs-ui-windows"),i=(f=await OO.ui.prompt(Ee("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in hw&&(i=hw[i]);let l=!Xt.has(_$.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Aa(t,a?void 0:i,r,void 0,l,s);o.data("CodeMirror6",c),a&&await c.setLanguage(i,await vu(Ms)),await Promise.all([Mu,M(c,Fs)]),c.prefer([...Ne]);let h=localStorage.getItem(_s);return h&&c.setIndent(h),c}};Zi=new WeakMap,Vt=new WeakMap,Be=new WeakMap,fi=new WeakMap,Fs=new WeakMap,$r=new WeakMap,qn=new WeakSet,uw=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mi}/npm/monaco-wiki@${(c=(a=mw.libs.wphl)==null?void 0:a.monacoVersion)!=null?c:"latest"}/dist/all.min.js`,{dataType:"script",cache:!0});let{textarea:t,lang:i}=this,r=(h=U$[i])!=null?h:i,s=r==="wikitext",o=M(this,$r).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();Ue(this,Be,monaco.editor.createModel(t.value,r)),Ue(this,Vt,document.createElement("div")),M(this,Vt).className="monaco-container",Ae(this,qn,Wu).call(this),M(this,Vt).style.minHeight="2em",t.before(M(this,Vt)),t.style.display="none",Ue(this,fi,monaco.editor.create(M(this,Vt),{model:M(this,Be),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:s||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:o?4:Number(M(this,$r)),insertSpaces:!o,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!s&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Be).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Be).getValue()},400)})},Wu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Vt).style.height=t?`${t}px`:i},Aa.version=Vs;var ln=Aa;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!hi.has(n.target)&&(n.preventDefault(),ln.fromTextArea(n.target))});(async()=>{var e;let n={minerva:"page-actions-overflow",moeskin:"moe-global-toolbar:visible #p-tb,#moe-mobile-toolbar:visible",citizen:"p-tb"};await Promise.all([mw.loader.using("mediawiki.util"),Iy(mi)]),mw.hook("wiki-codemirror6").add(_y),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Ee("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];sw(r.map(s=>hi.get(s)))}),By(V$,B$)})();Object.assign(globalThis,{CodeMirror6:ln});export{ln as CodeMirror};
34
+ `:"");if(o!==void 0)va.setSelection.call(this,{start:o,end:l});else if(i&&r&&!n&&!t&&/^\s*=.*=\s*$/u.test(e)){let u=c.getSelection();return c.executeEdits("encapsulateSelection",[{range:u,text:h(u,e),forceMoveMarkers:!0}]),this}let f=c.getSelections().map(u=>{let d=r||u.isEmpty()?e:a.getValueInRange(u),m=h(u,Ly(d,n,t,s));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=nt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=nt(this);return n.revealPosition(n.getPosition()),this}};var qy=(()=>{let n=["bold-header","format-leakage","fostered-content","h1","illegal-attr","insecure-style","invalid-gallery","invalid-imagemap","invalid-invoke","invalid-isbn","lonely-apos","lonely-bracket","lonely-http","nested-link","no-arg","no-duplicate","no-ignored","obsolete-attr","obsolete-tag","parsing-order","pipe-like","table-layout","tag-like","unbalanced-header","unclosed-comment","unclosed-quote","unclosed-table","unescaped","unknown-page","unmatched-tag","unterminated-url","url-encoding","var-anchor","void-ext"];return Object.freeze(n),n})();var Is="npm/@bhsd/codemirror-mediawiki@2.22.1",Vs=Is.slice(Is.lastIndexOf("@")+1),Zu={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"},zy="codemirror-mediawiki-i18n",jy,Tu=(jy=Zu[mw.config.get("wgUserLanguage")])!=null?jy:"en",Yy,an=(Yy=_t(zy))!=null?Yy:{},{version:Cu}=an,Iy=async n=>{if(an.lang!==Tu||Cu!==Vs)try{Object.assign(an,await(await fetch(`${n}/${Is}/i18n/${Tu}.json`)).json()),Ut(zy,an)}catch(e){mw.notify(Ee("i18n-failed",Tu),{type:"error"}),console.error(e)}for(let[e,t]of Object.entries(an))e.endsWith("-mac")?ka&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Ee=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Vy=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Qa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Vy(t.parseDom())}var Ny=async(n,...e)=>{let t=Vy($("<p>",{html:Ee(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},By=async(n,e)=>{let t;Cu?e.length>0&&!so(Cu,n)&&(t=await Ny("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Vs.replace(/\./gu,"")}" target="_blank">${Vs}</a>`,String(e.length),e.map(i=>`<li>${Qa(`addon-${i}`,!0)}</li>`).join(""))):t=await Ny("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},_y=n=>{n.localize(Object.fromEntries(Object.entries(an).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Jy="codemirror-mediawiki-addons",ew="codemirror-mediawiki-monaco",Ru=["wiki","javascript","css","lua","json"],z$=["Wikitext","JavaScript","CSS","Lua","JSON"],tw="codemirror-mediawiki-wikilint",Ca=["ESLint","Stylelint"],Gy,Pr=((Gy=mw.config.get("wgUserGroups"))==null?void 0:Gy.includes("user"))&&mw.config.get("wgUserName"),iw=Pr?`User:${Pr}/codemirror-mediawiki.json`:void 0;var _s="codemirror-mediawiki-indent",Ne=new Set(_t(Jy)),Fy,Xt=new Set((Fy=_t(ew))!=null?Fy:Ne.has("useMonaco")?Ru:[]),Hy,It=(Hy=_t(tw))!=null?Hy:{},Ci=new Map(Ca.map(n=>[n,_t(`codemirror-mediawiki-${n}`)])),Bs,Au,Pa,$a,Ta,Ky,Ti=(Ky=localStorage.getItem(_s))!=null?Ky:"",Eu={},Uy=new Map,nw=(n,e)=>{let t=n==="http"||n==="okay-but-empty"?`MediaWiki API request failed: ${n}`:$("<ul>",{html:e.errors.map(({html:i})=>$("<li>",{html:i}))});mw.notify(t,{type:"error",autoHideSeconds:"long"})},rw=(async()=>{if(Pr)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Mu=(async()=>{if(!Pr)return;let n={action:"query",prop:"revisions",titles:iw,rvprop:"content",rvlimit:1};(await rw).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let s=JSON.parse(t.revisions[0].content);if(!((i=s.addons)!=null&&i.includes("save")))return;Ne.clear();for(let o of s.addons)Ne.add(o);Xt.clear();for(let o of(r=s.useMonaco)!=null?r:Ne.has("useMonaco")?Ru:[])Xt.add(o);s.indent&&localStorage.setItem(_s,s.indent);for(let o of Ca)s[o]&&Ci.set(o,s[o]);s.wikilint&&Object.assign(It,s.wikilint)}},nw)})(),sw=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Mu,Bs)Pa.setValue([...Ne]),$a.setValue([...Xt]),Ta.setValue(Ti);else{Bs=new OO.ui.MessageDialog({id:"cm-preference"}),Bs.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Bs]),Au=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Ee("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),s={};for(let c of Ca){let h=Ci.get(c);Eu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ti||" "):""});let f=new OO.ui.FieldLayout(Eu[c],{label:Ee(`${c}-config`),align:"top"}),u=new OO.ui.TabPanelLayout(c,{label:c,$content:f.$element});u.on("active",d=>{let[m]=u.$element.find("textarea");d&&!hi.has(m)&&(async()=>{let{editor:g}=await ln.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),s[c]=u}Au.addTabPanels([i,r,...Object.values(s)],0),Pa=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(an).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Qa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Pr}))],value:[...Ne]}),$a=new OO.ui.CheckboxMultiselectInputWidget({options:Ru.map((c,h)=>({data:c,label:z$[h]})),value:[...Xt]}),Ta=new OO.ui.TextInputWidget({value:Ti,placeholder:String.raw`\t`});let o=new OO.ui.FieldLayout(Pa,{label:Ee("label"),align:"top"}),l=new OO.ui.FieldLayout($a,{label:Ee("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Ta,{label:Ee("addon-indent")});i.$element.append(o.$element,l.$element,a.$element,$("<p>",{html:Ee("feedback","codemirror-mediawiki")})),r.$element.append(...qy.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Ee("wikilint-off")},{data:"1",label:Ee("wikilint-error")},{data:"2",label:Ee("wikilint-on")}],value:(d=It[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Uy.set(c,f),(m=It[c])!=null||(It[c]=h),u.$element}),$("<p>",{html:Ee("feedback","wikiparser-node")}))}let e=await Bs.open({message:Au.$element,actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"medium"}).closing;if(typeof e=="object"&&e.action==="accept"){let t=Ti,i=Ne.has("save");Ti=Ta.getValue();let r=Ti!==t;if(r){for(let l of n)l==null||l.setIndent(Ti||" ");localStorage.setItem(_s,Ti)}for(let[l,a]of Uy){let c=a.getValue();r||(r=c!==It[l]),It[l]=c}Ut(tw,It);let s=[];for(let l of Ca)try{let a=JSON.parse(Eu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ci.get(l))),Ci.set(l,a),Ut(`codemirror-mediawiki-${l}`,a)}catch{s.push(l)}s.length>0&&OO.ui.alert(Ee("json-error",s.join(Ee("and"))));let o=$a.getValue();if(o.length!==Xt.size||!o.every(l=>Xt.has(l))){r=!0,Xt.clear();for(let l of o)Xt.add(l);Ut(ew,o)}if(Ne.delete("useMonaco"),o=Pa.getValue(),o.length!==Ne.size||!o.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of o)Ne.add(l);for(let l of n)l==null||l.prefer(o)}if(Xt.size>0&&Ne.add("useMonaco"),o=[...Ne],Ut(Jy,o),r&&Pr&&(i||Ne.has("save"))){let l={action:"edit",title:iw,text:JSON.stringify({addons:o,useMonaco:[...Xt],indent:Ti,wikilint:It,ESLint:Ci.get("ESLint"),Stylelint:Ci.get("Stylelint")}),summary:Ee("save-summary")};(await rw).postWithToken("csrf",l).then(()=>{mw.notify(Qa("save-success"),{type:"success"})},nw)}}};var ow=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(s){let o=s.getModel(),l=s.getSelections().filter(a=>!a.isEmpty());if(l.length===0)s.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(o.getValueInRange(c))}));s.executeEdits(n,a)}}}),I$=()=>[ow("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",fu),ow("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",uu)],Us=new WeakMap,Za,lw=(n,e)=>{if(e&&!Us.has(n))Za!=null||(Za=I$()),Us.set(n,Za.map(t=>n.addAction(t)));else if(e===!1&&Us.has(n)){for(let t of Us.get(n))t.dispose();Us.delete(n)}};var aw=(n,e)=>{let t=n.modules.toolbar.$toolbar.find(".group-codemirror6");t.children("[rel=toggle]").children().addBack().toggleClass("tool-active",e),t.children("[rel=preferences]").toggle(e)},cw=async n=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");let e=new Promise(t=>{n.on("wikiEditor-toolbar-doneInitialSections",()=>{n.wikiEditor("addToToolbar",{section:"main",groups:{codemirror6:{tools:{toggle:{type:"button",oouiIcon:"highlight",label:"CodeMirror 6",action:{type:"callback",execute(i){var r;(r=n.data("CodeMirror6"))==null||r.toggle(),aw(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Ee("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),aw(n.data("wikiEditorContext"),!0),t()})});if(await mw.loader.using(["ext.wikiEditor","oojs-ui.styles.icons-interactions"]),!n.data("wikiEditorContext")){if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(n);else{let{wikiEditor:{modules:{dialogs:{config:t}}}}=$;n.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...t.getDefaultConfig()}),t.replaceIcons(n)}await e}};var V$="2.22",B$=["inlayHints"];mw.loader.load(`${mi}/${Is}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=hi.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=hi.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var Gs={},_$=new Set(["javascript","css","lua","json"]),hw={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},U$={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},G$=[["allowMultipleSelections","multiCursorLimit",1,void 0],["autocompletion","quickSuggestions",!1,!0],["bracketMatching","matchBrackets","never","always"],["closeBrackets",["autoClosingBrackets","autoClosingQuotes"],"never","always"],["codeFolding","folding",!1,!0],["colorPicker","colorDecorators",!1,!0],["highlightActiveLine","renderLineHighlight","gutter","all"],["highlightSelectionMatches","occurrencesHighlight","off","singleFile"],["highlightSpecialChars","renderControlCharacters",!1,!0],["highlightWhitespace","renderWhitespace","selection","all"],["openLinks","links",!1,!0],["scrollPastEnd","scrollBeyondLastLine",!1,!0],["hover","hover",{enabled:!1},void 0],["signatureHelp","parameterHints",{enabled:!1},void 0],["inlayHints","inlayHints",{enabled:"offUnlessPressed"},{enabled:"onUnlessPressed"}]],fw=n=>!n.closest("#cm-preference"),F$=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,s]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:o}=e;return s.map(l=>[l.slice(o)])}return i===0?s.map(o=>[o]):s.map(o=>[new mw.Title(o).getMainText()])}catch{return[]}},H$=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:s}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),o=Object.entries((r=(i=Object.values(s)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of o){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},K$=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:F$(e,n),paramSuggest:H$(e,n)}},Zi,Vt,Be,fi,Fs,$r,qn,uw,Wu,Aa=class Aa extends vr{constructor(t,i,r,s,o=!0,l=mw.config.get("wgPageName")){var a,c;if((a=hi.get(t))!=null&&a.visible)throw new RangeError("The textarea has already been replaced by CodeMirror.");super(t,i,s,!1);$e(this,qn);$e(this,Zi,!0);$e(this,Vt);$e(this,Be);$e(this,fi);$e(this,Fs);$e(this,$r," ");this.ns=r,this.page=l,hi.set(t,this),o?this.initialize(s):(Ue(this,Fs,Ae(this,qn,uw).call(this)),$(t).data("jquery.textSelection",va)),fw(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((c=t.form)==null||c.addEventListener("submit",()=>{let h=document.querySelector("#wpScrolltop");h&&this.view&&M(this,Zi)&&(h.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Zi)}get model(){return M(this,Be)}get editor(){return M(this,fi)}initialize(t){if(M(this,Be))throw new Error("A Monaco editor is already initialized!");super.initialize(t),this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},t));let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Zi)){let{textarea:i}=this;M(this,Be)?t&&!M(this,Zi)?(M(this,Be).setValue(i.value),Ae(this,qn,Wu).call(this),M(this,Vt).style.display="",i.style.display="none",$(i).data("jquery.textSelection",va)):!t&&M(this,Zi)&&(M(this,Vt).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&$u)),Ue(this,Zi,t)}async setLanguage(t,i){if(M(this,Be))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await K$(this.page)),super.setLanguage(t,i),t==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},i))}setContent(t){M(this,Be)?M(this,Be).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Be).getValue()}setIndent(t){if(M(this,fi)){Ue(this,$r,t);let i=t.includes(" ");M(this,fi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return Gs[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,s=Ci.get("ESLint"),o=Ci.get("Stylelint"),l;if(typeof i=="number"?r==="mediawiki"&&(i===10||i===828||i===2)?l={include:!0}:r==="javascript"?l={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{},...s}:r==="css"&&o&&(l=o):l=i,r in Gs)l&&await this.getLinter(l);else if(r==="mediawiki"&&(l={...l,i18n:Zu[mw.config.get("wgUserLanguage")]}),await this.getLinter(l),r==="mediawiki"){let[a,c]=await Promise.all([vu(Ms),wikiparse.getConfig()]);wikiparse.setConfig(Dy(c,a))}Gs[r]&&(r==="mediawiki"?this.lint(async a=>(await Gs[r](a)).filter(({message:c,severity:h})=>{let f=c.slice(c.lastIndexOf("(")+1,-1);return Number(It[f])>+(h==="warning")})):this.lint(Gs[r]))}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),s=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,fi)||!M(this,Be))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Be).lint&&M(this,Be).lint(r)}s&&lw(M(this,fi),i("escape"));let o={};for(let[l,a,c,h]of G$){let f=i(l);if(f!==void 0)if(typeof a=="string")o[a]=f?h:c;else for(let u of a)o[u]=f?h:c}M(this,fi).updateOptions(o)}static async fromTextArea(t,i,r,s){var f;let o=$(t);if(Ne.has("wikiEditor")&&fw(t))try{await cw(o)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Ee(u.message),{type:"error"}),Ne.delete("wikiEditor")}if(!i&&r===void 0){let{wgAction:u,wgNamespaceNumber:d,wgPageContentModel:m,wgCanonicalSpecialPageName:g}=mw.config.get();u==="edit"||u==="submit"?(r=d,i=d===274?"html":m.toLowerCase()):g==="Upload"?(r=6,i="wikitext"):(await mw.loader.using("oojs-ui-windows"),i=(f=await OO.ui.prompt(Ee("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in hw&&(i=hw[i]);let l=!Xt.has(_$.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Aa(t,a?void 0:i,r,void 0,l,s);o.data("CodeMirror6",c),a&&await c.setLanguage(i,await vu(Ms)),await Promise.all([Mu,M(c,Fs)]),c.prefer([...Ne]);let h=localStorage.getItem(_s);return h&&c.setIndent(h),c}};Zi=new WeakMap,Vt=new WeakMap,Be=new WeakMap,fi=new WeakMap,Fs=new WeakMap,$r=new WeakMap,qn=new WeakSet,uw=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mi}/npm/monaco-wiki@${(c=(a=mw.libs.wphl)==null?void 0:a.monacoVersion)!=null?c:"latest"}/dist/all.min.js`,{dataType:"script",cache:!0});let{textarea:t,lang:i}=this,r=(h=U$[i])!=null?h:i,s=r==="wikitext",o=M(this,$r).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();Ue(this,Be,monaco.editor.createModel(t.value,r)),Ue(this,Vt,document.createElement("div")),M(this,Vt).className="monaco-container",Ae(this,qn,Wu).call(this),M(this,Vt).style.minHeight="2em",t.before(M(this,Vt)),t.style.display="none",Ue(this,fi,monaco.editor.create(M(this,Vt),{model:M(this,Be),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:s||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:o?4:Number(M(this,$r)),insertSpaces:!o,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!s&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Be).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Be).getValue()},400)})},Wu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Vt).style.height=t?`${t}px`:i},Aa.version=Vs;var ln=Aa;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!hi.has(n.target)&&(n.preventDefault(),ln.fromTextArea(n.target))});(async()=>{var e;let n={minerva:"page-actions-overflow",moeskin:"moe-global-toolbar:visible #p-tb,#moe-mobile-toolbar:visible",citizen:"p-tb"};await Promise.all([mw.loader.using("mediawiki.util"),Iy(mi)]),mw.hook("wiki-codemirror6").add(_y),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Ee("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];sw(r.map(s=>hi.get(s)))}),By(V$,B$)})();Object.assign(globalThis,{CodeMirror6:ln});export{ln as CodeMirror};
35
35
  /**
36
36
  * @file Configuration for the MediaWiki highlighting mode for CodeMirror.
37
37
  * @author MusikAnimal and others
package/dist/wiki.min.js CHANGED
@@ -31,7 +31,7 @@
31
31
  ${m}`,g=1),/[\n\r]/u.test(h.sliceDoc(d,d+1))||(m+=`
32
32
  `,y=1)),[m,g,y]};if(l!==void 0)$u.setSelection.call(this,{start:l,end:a});else if(i&&r&&!n&&!t&&/^\s*=.*=\s*$/u.test(e)){let{selection:{main:{from:u,to:d}}}=h,[m]=f(u,d,e);return c.dispatch({changes:{from:u,to:d,insert:m},selection:{anchor:u+m.length}}),this}return ln.replaceSelections(c,(u,{from:d,to:m})=>{let g=s&&d===m,y=r||d===m?e:h.sliceDoc(d,m),[S,v,Q]=f(d,m,Ly(y,n,t,o)),C=d+S.length;return g?[S,d+n.length+v,C-t.length-Q]:[S,C]}),this},getCaretPosition(n){let{state:{selection:{main:{from:e,to:t,head:i}}}}=nt(this).view;return n!=null&&n.startAndEnd?[e,t]:i},scrollToCaretPosition(){return nt(this).scrollTo(),this}},va={getContents(){return nt(this).model.getValue()},setContents(n){return nt(this).model.setValue(n),this},getSelection(){let{model:n,editor:e}=nt(this);return n.getValueInRange(e.getSelection())},setSelection({start:n,end:e=n}){let{model:t,editor:i}=nt(this);return i.setSelection(Y$(monaco,t,[n,e])),this},replaceSelection(n){let{editor:e}=nt(this);return e.executeEdits("replaceSelection",[{range:e.getSelection(),text:n,forceMoveMarkers:!0}]),this},encapsulateSelection({pre:n="",peri:e="",post:t="",ownline:i,replace:r,splitlines:s,selectionStart:o,selectionEnd:l}){let{model:a,editor:c}=nt(this),h=({startColumn:u,endColumn:d,endLineNumber:m},g)=>(i&&u>1?`
33
33
  `:"")+g+(i&&d<=a.getLineLength(m)?`
34
- `:"");if(o!==void 0)va.setSelection.call(this,{start:o,end:l});else if(i&&r&&!n&&!t&&/^\s*=.*=\s*$/u.test(e)){let u=c.getSelection();return c.executeEdits("encapsulateSelection",[{range:u,text:h(u,e),forceMoveMarkers:!0}]),this}let f=c.getSelections().map(u=>{let d=r||u.isEmpty()?e:a.getValueInRange(u),m=h(u,Ly(d,n,t,s));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=nt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=nt(this);return n.revealPosition(n.getPosition()),this}};var qy=(()=>{let n=["bold-header","format-leakage","fostered-content","h1","illegal-attr","insecure-style","invalid-gallery","invalid-imagemap","invalid-invoke","invalid-isbn","lonely-apos","lonely-bracket","lonely-http","nested-link","no-arg","no-duplicate","no-ignored","obsolete-attr","obsolete-tag","parsing-order","pipe-like","table-layout","tag-like","unbalanced-header","unclosed-comment","unclosed-quote","unclosed-table","unescaped","unknown-page","unmatched-tag","unterminated-url","url-encoding","var-anchor","void-ext"];return Object.freeze(n),n})();var Is="npm/@bhsd/codemirror-mediawiki@2.22.0",Vs=Is.slice(Is.lastIndexOf("@")+1),Zu={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"},zy="codemirror-mediawiki-i18n",jy,Tu=(jy=Zu[mw.config.get("wgUserLanguage")])!=null?jy:"en",Yy,an=(Yy=_t(zy))!=null?Yy:{},{version:Cu}=an,Iy=async n=>{if(an.lang!==Tu||Cu!==Vs)try{Object.assign(an,await(await fetch(`${n}/${Is}/i18n/${Tu}.json`)).json()),Ut(zy,an)}catch(e){mw.notify(Ee("i18n-failed",Tu),{type:"error"}),console.error(e)}for(let[e,t]of Object.entries(an))e.endsWith("-mac")?ka&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Ee=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Vy=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Qa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Vy(t.parseDom())}var Ny=async(n,...e)=>{let t=Vy($("<p>",{html:Ee(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},By=async(n,e)=>{let t;Cu?e.length>0&&!so(Cu,n)&&(t=await Ny("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Vs.replace(/\./gu,"")}" target="_blank">${Vs}</a>`,String(e.length),e.map(i=>`<li>${Qa(`addon-${i}`,!0)}</li>`).join(""))):t=await Ny("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},_y=n=>{n.localize(Object.fromEntries(Object.entries(an).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Jy="codemirror-mediawiki-addons",ew="codemirror-mediawiki-monaco",Ru=["wiki","javascript","css","lua","json"],z$=["Wikitext","JavaScript","CSS","Lua","JSON"],tw="codemirror-mediawiki-wikilint",Ca=["ESLint","Stylelint"],Gy,Pr=((Gy=mw.config.get("wgUserGroups"))==null?void 0:Gy.includes("user"))&&mw.config.get("wgUserName"),iw=Pr?`User:${Pr}/codemirror-mediawiki.json`:void 0;var _s="codemirror-mediawiki-indent",Ne=new Set(_t(Jy)),Fy,Xt=new Set((Fy=_t(ew))!=null?Fy:Ne.has("useMonaco")?Ru:[]),Hy,It=(Hy=_t(tw))!=null?Hy:{},Ci=new Map(Ca.map(n=>[n,_t(`codemirror-mediawiki-${n}`)])),Bs,Au,Pa,$a,Ta,Ky,Ti=(Ky=localStorage.getItem(_s))!=null?Ky:"",Eu={},Uy=new Map,nw=(n,e)=>{let t=n==="http"||n==="okay-but-empty"?`MediaWiki API request failed: ${n}`:$("<ul>",{html:e.errors.map(({html:i})=>$("<li>",{html:i}))});mw.notify(t,{type:"error",autoHideSeconds:"long"})},rw=(async()=>{if(Pr)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Mu=(async()=>{if(!Pr)return;let n={action:"query",prop:"revisions",titles:iw,rvprop:"content",rvlimit:1};(await rw).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let s=JSON.parse(t.revisions[0].content);if(!((i=s.addons)!=null&&i.includes("save")))return;Ne.clear();for(let o of s.addons)Ne.add(o);Xt.clear();for(let o of(r=s.useMonaco)!=null?r:Ne.has("useMonaco")?Ru:[])Xt.add(o);s.indent&&localStorage.setItem(_s,s.indent);for(let o of Ca)s[o]&&Ci.set(o,s[o]);s.wikilint&&Object.assign(It,s.wikilint)}},nw)})(),sw=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Mu,Bs)Pa.setValue([...Ne]),$a.setValue([...Xt]),Ta.setValue(Ti);else{Bs=new OO.ui.MessageDialog({id:"cm-preference"}),Bs.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Bs]),Au=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Ee("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),s={};for(let c of Ca){let h=Ci.get(c);Eu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ti||" "):""});let f=new OO.ui.FieldLayout(Eu[c],{label:Ee(`${c}-config`),align:"top"}),u=new OO.ui.TabPanelLayout(c,{label:c,$content:f.$element});u.on("active",d=>{let[m]=u.$element.find("textarea");d&&!hi.has(m)&&(async()=>{let{editor:g}=await ln.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),s[c]=u}Au.addTabPanels([i,r,...Object.values(s)],0),Pa=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(an).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Qa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Pr}))],value:[...Ne]}),$a=new OO.ui.CheckboxMultiselectInputWidget({options:Ru.map((c,h)=>({data:c,label:z$[h]})),value:[...Xt]}),Ta=new OO.ui.TextInputWidget({value:Ti,placeholder:String.raw`\t`});let o=new OO.ui.FieldLayout(Pa,{label:Ee("label"),align:"top"}),l=new OO.ui.FieldLayout($a,{label:Ee("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Ta,{label:Ee("addon-indent")});i.$element.append(o.$element,l.$element,a.$element,$("<p>",{html:Ee("feedback","codemirror-mediawiki")})),r.$element.append(...qy.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Ee("wikilint-off")},{data:"1",label:Ee("wikilint-error")},{data:"2",label:Ee("wikilint-on")}],value:(d=It[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Uy.set(c,f),(m=It[c])!=null||(It[c]=h),u.$element}),$("<p>",{html:Ee("feedback","wikiparser-node")}))}let e=await Bs.open({message:Au.$element,actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"medium"}).closing;if(typeof e=="object"&&e.action==="accept"){let t=Ti,i=Ne.has("save");Ti=Ta.getValue();let r=Ti!==t;if(r){for(let l of n)l==null||l.setIndent(Ti||" ");localStorage.setItem(_s,Ti)}for(let[l,a]of Uy){let c=a.getValue();r||(r=c!==It[l]),It[l]=c}Ut(tw,It);let s=[];for(let l of Ca)try{let a=JSON.parse(Eu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ci.get(l))),Ci.set(l,a),Ut(`codemirror-mediawiki-${l}`,a)}catch{s.push(l)}s.length>0&&OO.ui.alert(Ee("json-error",s.join(Ee("and"))));let o=$a.getValue();if(o.length!==Xt.size||!o.every(l=>Xt.has(l))){r=!0,Xt.clear();for(let l of o)Xt.add(l);Ut(ew,o)}if(Ne.delete("useMonaco"),o=Pa.getValue(),o.length!==Ne.size||!o.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of o)Ne.add(l);for(let l of n)l==null||l.prefer(o)}if(Xt.size>0&&Ne.add("useMonaco"),o=[...Ne],Ut(Jy,o),r&&Pr&&(i||Ne.has("save"))){let l={action:"edit",title:iw,text:JSON.stringify({addons:o,useMonaco:[...Xt],indent:Ti,wikilint:It,ESLint:Ci.get("ESLint"),Stylelint:Ci.get("Stylelint")}),summary:Ee("save-summary")};(await rw).postWithToken("csrf",l).then(()=>{mw.notify(Qa("save-success"),{type:"success"})},nw)}}};var ow=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(s){let o=s.getModel(),l=s.getSelections().filter(a=>!a.isEmpty());if(l.length===0)s.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(o.getValueInRange(c))}));s.executeEdits(n,a)}}}),I$=()=>[ow("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",fu),ow("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",uu)],Us=new WeakMap,Za,lw=(n,e)=>{if(e&&!Us.has(n))Za!=null||(Za=I$()),Us.set(n,Za.map(t=>n.addAction(t)));else if(e===!1&&Us.has(n)){for(let t of Us.get(n))t.dispose();Us.delete(n)}};var aw=(n,e)=>{let t=n.modules.toolbar.$toolbar.find(".group-codemirror6");t.children("[rel=toggle]").children().addBack().toggleClass("tool-active",e),t.children("[rel=preferences]").toggle(e)},cw=async n=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");let e=new Promise(t=>{n.on("wikiEditor-toolbar-doneInitialSections",()=>{n.wikiEditor("addToToolbar",{section:"main",groups:{codemirror6:{tools:{toggle:{type:"button",oouiIcon:"highlight",label:"CodeMirror 6",action:{type:"callback",execute(i){var r;(r=n.data("CodeMirror6"))==null||r.toggle(),aw(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Ee("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),aw(n.data("wikiEditorContext"),!0),t()})});if(await mw.loader.using(["ext.wikiEditor","oojs-ui.styles.icons-interactions"]),!n.data("wikiEditorContext")){if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(n);else{let{wikiEditor:{modules:{dialogs:{config:t}}}}=$;n.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...t.getDefaultConfig()}),t.replaceIcons(n)}await e}};var V$="2.22",B$=["inlayHints"];mw.loader.load(`${mi}/${Is}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=hi.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=hi.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var Gs={},_$=new Set(["javascript","css","lua","json"]),hw={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},U$={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},G$=[["allowMultipleSelections","multiCursorLimit",1,void 0],["autocompletion","quickSuggestions",!1,!0],["bracketMatching","matchBrackets","never","always"],["closeBrackets",["autoClosingBrackets","autoClosingQuotes"],"never","always"],["codeFolding","folding",!1,!0],["colorPicker","colorDecorators",!1,!0],["highlightActiveLine","renderLineHighlight","gutter","all"],["highlightSelectionMatches","occurrencesHighlight","off","singleFile"],["highlightSpecialChars","renderControlCharacters",!1,!0],["highlightWhitespace","renderWhitespace","selection","all"],["openLinks","links",!1,!0],["scrollPastEnd","scrollBeyondLastLine",!1,!0],["hover","hover",{enabled:!1},void 0],["signatureHelp","parameterHints",{enabled:!1},void 0],["inlayHints","inlayHints",{enabled:"offUnlessPressed"},{enabled:"onUnlessPressed"}]],fw=n=>!n.closest("#cm-preference"),F$=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,s]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:o}=e;return s.map(l=>[l.slice(o)])}return i===0?s.map(o=>[o]):s.map(o=>[new mw.Title(o).getMainText()])}catch{return[]}},H$=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:s}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),o=Object.entries((r=(i=Object.values(s)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of o){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},K$=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:F$(e,n),paramSuggest:H$(e,n)}},Zi,Vt,Be,fi,Fs,$r,qn,uw,Wu,Aa=class Aa extends vr{constructor(t,i,r,s,o=!0,l=mw.config.get("wgPageName")){var a,c;if((a=hi.get(t))!=null&&a.visible)throw new RangeError("The textarea has already been replaced by CodeMirror.");super(t,i,s,!1);$e(this,qn);$e(this,Zi,!0);$e(this,Vt);$e(this,Be);$e(this,fi);$e(this,Fs);$e(this,$r," ");this.ns=r,this.page=l,hi.set(t,this),o?this.initialize(s):(Ue(this,Fs,Ae(this,qn,uw).call(this)),$(t).data("jquery.textSelection",va)),fw(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((c=t.form)==null||c.addEventListener("submit",()=>{let h=document.querySelector("#wpScrolltop");h&&this.view&&M(this,Zi)&&(h.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Zi)}get model(){return M(this,Be)}get editor(){return M(this,fi)}initialize(t){if(M(this,Be))throw new Error("A Monaco editor is already initialized!");super.initialize(t),this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},t));let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Zi)){let{textarea:i}=this;M(this,Be)?t&&!M(this,Zi)?(M(this,Be).setValue(i.value),Ae(this,qn,Wu).call(this),M(this,Vt).style.display="",i.style.display="none",$(i).data("jquery.textSelection",va)):!t&&M(this,Zi)&&(M(this,Vt).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&$u)),Ue(this,Zi,t)}async setLanguage(t,i){if(M(this,Be))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await K$(this.page)),super.setLanguage(t,i),t==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},i))}setContent(t){M(this,Be)?M(this,Be).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Be).getValue()}setIndent(t){if(M(this,fi)){Ue(this,$r,t);let i=t.includes(" ");M(this,fi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return Gs[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,s=Ci.get("ESLint"),o=Ci.get("Stylelint"),l;if(typeof i=="number"?r==="mediawiki"&&(i===10||i===828||i===2)?l={include:!0}:r==="javascript"?l={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{},...s}:r==="css"&&o&&(l=o):l=i,r in Gs)l&&await this.getLinter(l);else if(r==="mediawiki"&&(l={...l,i18n:Zu[mw.config.get("wgUserLanguage")]}),await this.getLinter(l),r==="mediawiki"){let[a,c]=await Promise.all([vu(Ms),wikiparse.getConfig()]);wikiparse.setConfig(Dy(c,a))}Gs[r]&&(r==="mediawiki"?this.lint(async a=>(await Gs[r](a)).filter(({rule:c,severity:h})=>Number(It[c])>+(h==="warning"))):this.lint(Gs[r]))}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),s=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,fi)||!M(this,Be))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Be).lint&&M(this,Be).lint(r)}s&&lw(M(this,fi),i("escape"));let o={};for(let[l,a,c,h]of G$){let f=i(l);if(f!==void 0)if(typeof a=="string")o[a]=f?h:c;else for(let u of a)o[u]=f?h:c}M(this,fi).updateOptions(o)}static async fromTextArea(t,i,r,s){var f;let o=$(t);if(Ne.has("wikiEditor")&&fw(t))try{await cw(o)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Ee(u.message),{type:"error"}),Ne.delete("wikiEditor")}if(!i&&r===void 0){let{wgAction:u,wgNamespaceNumber:d,wgPageContentModel:m,wgCanonicalSpecialPageName:g}=mw.config.get();u==="edit"||u==="submit"?(r=d,i=d===274?"html":m.toLowerCase()):g==="Upload"?(r=6,i="wikitext"):(await mw.loader.using("oojs-ui-windows"),i=(f=await OO.ui.prompt(Ee("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in hw&&(i=hw[i]);let l=!Xt.has(_$.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Aa(t,a?void 0:i,r,void 0,l,s);o.data("CodeMirror6",c),a&&await c.setLanguage(i,await vu(Ms)),await Promise.all([Mu,M(c,Fs)]),c.prefer([...Ne]);let h=localStorage.getItem(_s);return h&&c.setIndent(h),c}};Zi=new WeakMap,Vt=new WeakMap,Be=new WeakMap,fi=new WeakMap,Fs=new WeakMap,$r=new WeakMap,qn=new WeakSet,uw=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mi}/npm/monaco-wiki@${(c=(a=mw.libs.wphl)==null?void 0:a.monacoVersion)!=null?c:"latest"}/dist/all.min.js`,{dataType:"script",cache:!0});let{textarea:t,lang:i}=this,r=(h=U$[i])!=null?h:i,s=r==="wikitext",o=M(this,$r).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();Ue(this,Be,monaco.editor.createModel(t.value,r)),Ue(this,Vt,document.createElement("div")),M(this,Vt).className="monaco-container",Ae(this,qn,Wu).call(this),M(this,Vt).style.minHeight="2em",t.before(M(this,Vt)),t.style.display="none",Ue(this,fi,monaco.editor.create(M(this,Vt),{model:M(this,Be),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:s||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:o?4:Number(M(this,$r)),insertSpaces:!o,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!s&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Be).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Be).getValue()},400)})},Wu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Vt).style.height=t?`${t}px`:i},Aa.version=Vs;var ln=Aa;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!hi.has(n.target)&&(n.preventDefault(),ln.fromTextArea(n.target))});(async()=>{var e;let n={minerva:"page-actions-overflow",moeskin:"moe-global-toolbar:visible #p-tb,#moe-mobile-toolbar:visible",citizen:"p-tb"};await Promise.all([mw.loader.using("mediawiki.util"),Iy(mi)]),mw.hook("wiki-codemirror6").add(_y),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Ee("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];sw(r.map(s=>hi.get(s)))}),By(V$,B$)})();Object.assign(globalThis,{CodeMirror6:ln});})();
34
+ `:"");if(o!==void 0)va.setSelection.call(this,{start:o,end:l});else if(i&&r&&!n&&!t&&/^\s*=.*=\s*$/u.test(e)){let u=c.getSelection();return c.executeEdits("encapsulateSelection",[{range:u,text:h(u,e),forceMoveMarkers:!0}]),this}let f=c.getSelections().map(u=>{let d=r||u.isEmpty()?e:a.getValueInRange(u),m=h(u,Ly(d,n,t,s));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=nt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=nt(this);return n.revealPosition(n.getPosition()),this}};var qy=(()=>{let n=["bold-header","format-leakage","fostered-content","h1","illegal-attr","insecure-style","invalid-gallery","invalid-imagemap","invalid-invoke","invalid-isbn","lonely-apos","lonely-bracket","lonely-http","nested-link","no-arg","no-duplicate","no-ignored","obsolete-attr","obsolete-tag","parsing-order","pipe-like","table-layout","tag-like","unbalanced-header","unclosed-comment","unclosed-quote","unclosed-table","unescaped","unknown-page","unmatched-tag","unterminated-url","url-encoding","var-anchor","void-ext"];return Object.freeze(n),n})();var Is="npm/@bhsd/codemirror-mediawiki@2.22.1",Vs=Is.slice(Is.lastIndexOf("@")+1),Zu={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"},zy="codemirror-mediawiki-i18n",jy,Tu=(jy=Zu[mw.config.get("wgUserLanguage")])!=null?jy:"en",Yy,an=(Yy=_t(zy))!=null?Yy:{},{version:Cu}=an,Iy=async n=>{if(an.lang!==Tu||Cu!==Vs)try{Object.assign(an,await(await fetch(`${n}/${Is}/i18n/${Tu}.json`)).json()),Ut(zy,an)}catch(e){mw.notify(Ee("i18n-failed",Tu),{type:"error"}),console.error(e)}for(let[e,t]of Object.entries(an))e.endsWith("-mac")?ka&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Ee=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Vy=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Qa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Vy(t.parseDom())}var Ny=async(n,...e)=>{let t=Vy($("<p>",{html:Ee(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},By=async(n,e)=>{let t;Cu?e.length>0&&!so(Cu,n)&&(t=await Ny("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Vs.replace(/\./gu,"")}" target="_blank">${Vs}</a>`,String(e.length),e.map(i=>`<li>${Qa(`addon-${i}`,!0)}</li>`).join(""))):t=await Ny("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},_y=n=>{n.localize(Object.fromEntries(Object.entries(an).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Jy="codemirror-mediawiki-addons",ew="codemirror-mediawiki-monaco",Ru=["wiki","javascript","css","lua","json"],z$=["Wikitext","JavaScript","CSS","Lua","JSON"],tw="codemirror-mediawiki-wikilint",Ca=["ESLint","Stylelint"],Gy,Pr=((Gy=mw.config.get("wgUserGroups"))==null?void 0:Gy.includes("user"))&&mw.config.get("wgUserName"),iw=Pr?`User:${Pr}/codemirror-mediawiki.json`:void 0;var _s="codemirror-mediawiki-indent",Ne=new Set(_t(Jy)),Fy,Xt=new Set((Fy=_t(ew))!=null?Fy:Ne.has("useMonaco")?Ru:[]),Hy,It=(Hy=_t(tw))!=null?Hy:{},Ci=new Map(Ca.map(n=>[n,_t(`codemirror-mediawiki-${n}`)])),Bs,Au,Pa,$a,Ta,Ky,Ti=(Ky=localStorage.getItem(_s))!=null?Ky:"",Eu={},Uy=new Map,nw=(n,e)=>{let t=n==="http"||n==="okay-but-empty"?`MediaWiki API request failed: ${n}`:$("<ul>",{html:e.errors.map(({html:i})=>$("<li>",{html:i}))});mw.notify(t,{type:"error",autoHideSeconds:"long"})},rw=(async()=>{if(Pr)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Mu=(async()=>{if(!Pr)return;let n={action:"query",prop:"revisions",titles:iw,rvprop:"content",rvlimit:1};(await rw).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let s=JSON.parse(t.revisions[0].content);if(!((i=s.addons)!=null&&i.includes("save")))return;Ne.clear();for(let o of s.addons)Ne.add(o);Xt.clear();for(let o of(r=s.useMonaco)!=null?r:Ne.has("useMonaco")?Ru:[])Xt.add(o);s.indent&&localStorage.setItem(_s,s.indent);for(let o of Ca)s[o]&&Ci.set(o,s[o]);s.wikilint&&Object.assign(It,s.wikilint)}},nw)})(),sw=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Mu,Bs)Pa.setValue([...Ne]),$a.setValue([...Xt]),Ta.setValue(Ti);else{Bs=new OO.ui.MessageDialog({id:"cm-preference"}),Bs.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Bs]),Au=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Ee("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),s={};for(let c of Ca){let h=Ci.get(c);Eu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ti||" "):""});let f=new OO.ui.FieldLayout(Eu[c],{label:Ee(`${c}-config`),align:"top"}),u=new OO.ui.TabPanelLayout(c,{label:c,$content:f.$element});u.on("active",d=>{let[m]=u.$element.find("textarea");d&&!hi.has(m)&&(async()=>{let{editor:g}=await ln.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),s[c]=u}Au.addTabPanels([i,r,...Object.values(s)],0),Pa=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(an).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Qa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Pr}))],value:[...Ne]}),$a=new OO.ui.CheckboxMultiselectInputWidget({options:Ru.map((c,h)=>({data:c,label:z$[h]})),value:[...Xt]}),Ta=new OO.ui.TextInputWidget({value:Ti,placeholder:String.raw`\t`});let o=new OO.ui.FieldLayout(Pa,{label:Ee("label"),align:"top"}),l=new OO.ui.FieldLayout($a,{label:Ee("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Ta,{label:Ee("addon-indent")});i.$element.append(o.$element,l.$element,a.$element,$("<p>",{html:Ee("feedback","codemirror-mediawiki")})),r.$element.append(...qy.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Ee("wikilint-off")},{data:"1",label:Ee("wikilint-error")},{data:"2",label:Ee("wikilint-on")}],value:(d=It[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Uy.set(c,f),(m=It[c])!=null||(It[c]=h),u.$element}),$("<p>",{html:Ee("feedback","wikiparser-node")}))}let e=await Bs.open({message:Au.$element,actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"medium"}).closing;if(typeof e=="object"&&e.action==="accept"){let t=Ti,i=Ne.has("save");Ti=Ta.getValue();let r=Ti!==t;if(r){for(let l of n)l==null||l.setIndent(Ti||" ");localStorage.setItem(_s,Ti)}for(let[l,a]of Uy){let c=a.getValue();r||(r=c!==It[l]),It[l]=c}Ut(tw,It);let s=[];for(let l of Ca)try{let a=JSON.parse(Eu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ci.get(l))),Ci.set(l,a),Ut(`codemirror-mediawiki-${l}`,a)}catch{s.push(l)}s.length>0&&OO.ui.alert(Ee("json-error",s.join(Ee("and"))));let o=$a.getValue();if(o.length!==Xt.size||!o.every(l=>Xt.has(l))){r=!0,Xt.clear();for(let l of o)Xt.add(l);Ut(ew,o)}if(Ne.delete("useMonaco"),o=Pa.getValue(),o.length!==Ne.size||!o.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of o)Ne.add(l);for(let l of n)l==null||l.prefer(o)}if(Xt.size>0&&Ne.add("useMonaco"),o=[...Ne],Ut(Jy,o),r&&Pr&&(i||Ne.has("save"))){let l={action:"edit",title:iw,text:JSON.stringify({addons:o,useMonaco:[...Xt],indent:Ti,wikilint:It,ESLint:Ci.get("ESLint"),Stylelint:Ci.get("Stylelint")}),summary:Ee("save-summary")};(await rw).postWithToken("csrf",l).then(()=>{mw.notify(Qa("save-success"),{type:"success"})},nw)}}};var ow=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(s){let o=s.getModel(),l=s.getSelections().filter(a=>!a.isEmpty());if(l.length===0)s.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(o.getValueInRange(c))}));s.executeEdits(n,a)}}}),I$=()=>[ow("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",fu),ow("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",uu)],Us=new WeakMap,Za,lw=(n,e)=>{if(e&&!Us.has(n))Za!=null||(Za=I$()),Us.set(n,Za.map(t=>n.addAction(t)));else if(e===!1&&Us.has(n)){for(let t of Us.get(n))t.dispose();Us.delete(n)}};var aw=(n,e)=>{let t=n.modules.toolbar.$toolbar.find(".group-codemirror6");t.children("[rel=toggle]").children().addBack().toggleClass("tool-active",e),t.children("[rel=preferences]").toggle(e)},cw=async n=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");let e=new Promise(t=>{n.on("wikiEditor-toolbar-doneInitialSections",()=>{n.wikiEditor("addToToolbar",{section:"main",groups:{codemirror6:{tools:{toggle:{type:"button",oouiIcon:"highlight",label:"CodeMirror 6",action:{type:"callback",execute(i){var r;(r=n.data("CodeMirror6"))==null||r.toggle(),aw(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Ee("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),aw(n.data("wikiEditorContext"),!0),t()})});if(await mw.loader.using(["ext.wikiEditor","oojs-ui.styles.icons-interactions"]),!n.data("wikiEditorContext")){if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(n);else{let{wikiEditor:{modules:{dialogs:{config:t}}}}=$;n.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...t.getDefaultConfig()}),t.replaceIcons(n)}await e}};var V$="2.22",B$=["inlayHints"];mw.loader.load(`${mi}/${Is}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=hi.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=hi.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var Gs={},_$=new Set(["javascript","css","lua","json"]),hw={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},U$={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},G$=[["allowMultipleSelections","multiCursorLimit",1,void 0],["autocompletion","quickSuggestions",!1,!0],["bracketMatching","matchBrackets","never","always"],["closeBrackets",["autoClosingBrackets","autoClosingQuotes"],"never","always"],["codeFolding","folding",!1,!0],["colorPicker","colorDecorators",!1,!0],["highlightActiveLine","renderLineHighlight","gutter","all"],["highlightSelectionMatches","occurrencesHighlight","off","singleFile"],["highlightSpecialChars","renderControlCharacters",!1,!0],["highlightWhitespace","renderWhitespace","selection","all"],["openLinks","links",!1,!0],["scrollPastEnd","scrollBeyondLastLine",!1,!0],["hover","hover",{enabled:!1},void 0],["signatureHelp","parameterHints",{enabled:!1},void 0],["inlayHints","inlayHints",{enabled:"offUnlessPressed"},{enabled:"onUnlessPressed"}]],fw=n=>!n.closest("#cm-preference"),F$=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,s]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:o}=e;return s.map(l=>[l.slice(o)])}return i===0?s.map(o=>[o]):s.map(o=>[new mw.Title(o).getMainText()])}catch{return[]}},H$=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:s}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),o=Object.entries((r=(i=Object.values(s)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of o){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},K$=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:F$(e,n),paramSuggest:H$(e,n)}},Zi,Vt,Be,fi,Fs,$r,qn,uw,Wu,Aa=class Aa extends vr{constructor(t,i,r,s,o=!0,l=mw.config.get("wgPageName")){var a,c;if((a=hi.get(t))!=null&&a.visible)throw new RangeError("The textarea has already been replaced by CodeMirror.");super(t,i,s,!1);$e(this,qn);$e(this,Zi,!0);$e(this,Vt);$e(this,Be);$e(this,fi);$e(this,Fs);$e(this,$r," ");this.ns=r,this.page=l,hi.set(t,this),o?this.initialize(s):(Ue(this,Fs,Ae(this,qn,uw).call(this)),$(t).data("jquery.textSelection",va)),fw(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((c=t.form)==null||c.addEventListener("submit",()=>{let h=document.querySelector("#wpScrolltop");h&&this.view&&M(this,Zi)&&(h.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Zi)}get model(){return M(this,Be)}get editor(){return M(this,fi)}initialize(t){if(M(this,Be))throw new Error("A Monaco editor is already initialized!");super.initialize(t),this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},t));let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Zi)){let{textarea:i}=this;M(this,Be)?t&&!M(this,Zi)?(M(this,Be).setValue(i.value),Ae(this,qn,Wu).call(this),M(this,Vt).style.display="",i.style.display="none",$(i).data("jquery.textSelection",va)):!t&&M(this,Zi)&&(M(this,Vt).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&$u)),Ue(this,Zi,t)}async setLanguage(t,i){if(M(this,Be))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await K$(this.page)),super.setLanguage(t,i),t==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:Qu,isbnParser:Pu},i))}setContent(t){M(this,Be)?M(this,Be).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Be).getValue()}setIndent(t){if(M(this,fi)){Ue(this,$r,t);let i=t.includes(" ");M(this,fi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return Gs[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,s=Ci.get("ESLint"),o=Ci.get("Stylelint"),l;if(typeof i=="number"?r==="mediawiki"&&(i===10||i===828||i===2)?l={include:!0}:r==="javascript"?l={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{},...s}:r==="css"&&o&&(l=o):l=i,r in Gs)l&&await this.getLinter(l);else if(r==="mediawiki"&&(l={...l,i18n:Zu[mw.config.get("wgUserLanguage")]}),await this.getLinter(l),r==="mediawiki"){let[a,c]=await Promise.all([vu(Ms),wikiparse.getConfig()]);wikiparse.setConfig(Dy(c,a))}Gs[r]&&(r==="mediawiki"?this.lint(async a=>(await Gs[r](a)).filter(({message:c,severity:h})=>{let f=c.slice(c.lastIndexOf("(")+1,-1);return Number(It[f])>+(h==="warning")})):this.lint(Gs[r]))}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),s=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,fi)||!M(this,Be))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Be).lint&&M(this,Be).lint(r)}s&&lw(M(this,fi),i("escape"));let o={};for(let[l,a,c,h]of G$){let f=i(l);if(f!==void 0)if(typeof a=="string")o[a]=f?h:c;else for(let u of a)o[u]=f?h:c}M(this,fi).updateOptions(o)}static async fromTextArea(t,i,r,s){var f;let o=$(t);if(Ne.has("wikiEditor")&&fw(t))try{await cw(o)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Ee(u.message),{type:"error"}),Ne.delete("wikiEditor")}if(!i&&r===void 0){let{wgAction:u,wgNamespaceNumber:d,wgPageContentModel:m,wgCanonicalSpecialPageName:g}=mw.config.get();u==="edit"||u==="submit"?(r=d,i=d===274?"html":m.toLowerCase()):g==="Upload"?(r=6,i="wikitext"):(await mw.loader.using("oojs-ui-windows"),i=(f=await OO.ui.prompt(Ee("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in hw&&(i=hw[i]);let l=!Xt.has(_$.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Aa(t,a?void 0:i,r,void 0,l,s);o.data("CodeMirror6",c),a&&await c.setLanguage(i,await vu(Ms)),await Promise.all([Mu,M(c,Fs)]),c.prefer([...Ne]);let h=localStorage.getItem(_s);return h&&c.setIndent(h),c}};Zi=new WeakMap,Vt=new WeakMap,Be=new WeakMap,fi=new WeakMap,Fs=new WeakMap,$r=new WeakMap,qn=new WeakSet,uw=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mi}/npm/monaco-wiki@${(c=(a=mw.libs.wphl)==null?void 0:a.monacoVersion)!=null?c:"latest"}/dist/all.min.js`,{dataType:"script",cache:!0});let{textarea:t,lang:i}=this,r=(h=U$[i])!=null?h:i,s=r==="wikitext",o=M(this,$r).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();Ue(this,Be,monaco.editor.createModel(t.value,r)),Ue(this,Vt,document.createElement("div")),M(this,Vt).className="monaco-container",Ae(this,qn,Wu).call(this),M(this,Vt).style.minHeight="2em",t.before(M(this,Vt)),t.style.display="none",Ue(this,fi,monaco.editor.create(M(this,Vt),{model:M(this,Be),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:s||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:o?4:Number(M(this,$r)),insertSpaces:!o,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!s&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Be).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Be).getValue()},400)})},Wu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Vt).style.height=t?`${t}px`:i},Aa.version=Vs;var ln=Aa;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!hi.has(n.target)&&(n.preventDefault(),ln.fromTextArea(n.target))});(async()=>{var e;let n={minerva:"page-actions-overflow",moeskin:"moe-global-toolbar:visible #p-tb,#moe-mobile-toolbar:visible",citizen:"p-tb"};await Promise.all([mw.loader.using("mediawiki.util"),Iy(mi)]),mw.hook("wiki-codemirror6").add(_y),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Ee("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];sw(r.map(s=>hi.get(s)))}),By(V$,B$)})();Object.assign(globalThis,{CodeMirror6:ln});})();
35
35
  /**
36
36
  * @file Configuration for the MediaWiki highlighting mode for CodeMirror.
37
37
  * @author MusikAnimal and others
package/i18n/en.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.22.0",
2
+ "version": "2.22.1",
3
3
  "lang": "en",
4
4
  "i18n-failed": "Failed to fetch the translation file in $1.",
5
5
  "title": "CodeMirror Addons",
package/i18n/zh-hans.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.22.0",
2
+ "version": "2.22.1",
3
3
  "lang": "zh-hans",
4
4
  "i18n-failed": "获取 $1 的语言文件失败。",
5
5
  "title": "CodeMirror插件",
package/i18n/zh-hant.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.22.0",
2
+ "version": "2.22.1",
3
3
  "lang": "zh-hant",
4
4
  "i18n-failed": "取得 $1 的語言檔案失敗。",
5
5
  "title": "CodeMirror外掛程式",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bhsd/codemirror-mediawiki",
3
- "version": "2.22.0",
3
+ "version": "2.22.1",
4
4
  "description": "Modified CodeMirror mode based on wikimedia/mediawiki-extensions-CodeMirror",
5
5
  "keywords": [
6
6
  "mediawiki",
@@ -53,7 +53,7 @@
53
53
  "@codemirror/state": "^6.5.1",
54
54
  "@codemirror/view": "^6.36.2",
55
55
  "@lezer/highlight": "^1.2.1",
56
- "wikiparser-node": "^1.16.5"
56
+ "wikiparser-node": "^1.17.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@bhsd/codemirror-css-color-picker": "^6.3.0",