@bhsd/codemirror-mediawiki 2.25.4 → 2.25.5

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
@@ -34,7 +34,7 @@ ${wd(a[1].childNodes[0].data).replace(/\n/gu," ")}
34
34
  ${m}`,g=1),/[\n\r]/u.test(h.sliceDoc(d,d+1))||(m+=`
35
35
  `,b=1)),[m,g,b]};if(l!==void 0)ju.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 hn.replaceSelections(c,(u,{from:d,to:m})=>{let g=o&&d===m,b=r||d===m?e:h.sliceDoc(d,m),[x,v,Q]=f(d,m,bk(b,n,t,s)),T=d+x.length;return g?[x,d+n.length+v,T-t.length-Q]:[x,T]}),this},getCaretPosition(n){let{state:{selection:{main:{from:e,to:t,head:i}}}}=rt(this).view;return n!=null&&n.startAndEnd?[e,t]:i},scrollToCaretPosition(){return rt(this).scrollTo(),this}},Za={getContents(){return rt(this).model.getValue()},setContents(n){return rt(this).model.setValue(n),this},getSelection(){let{model:n,editor:e}=rt(this);return n.getValueInRange(e.getSelection())},setSelection({start:n,end:e=n}){let{model:t,editor:i}=rt(this);return i.setSelection(KT(monaco,t,[n,e])),this},replaceSelection(n){let{editor:e}=rt(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:o,selectionStart:s,selectionEnd:l}){let{model:a,editor:c}=rt(this),h=({startColumn:u,endColumn:d,endLineNumber:m},g)=>(i&&u>1?`
36
36
  `:"")+g+(i&&d<=a.getLineLength(m)?`
37
- `:"");if(s!==void 0)Za.setSelection.call(this,{start:s,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,bk(d,n,t,o));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=rt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=rt(this);return n.revealPosition(n.getPosition()),this}};var yk=(()=>{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","invalid-css"];return Object.freeze(n),n})();var Ho="npm/@bhsd/codemirror-mediawiki@2.25.4",Ko=Ho.slice(Ho.lastIndexOf("@")+1),Ea,wk,xk,Yn=(xk=(wk=(Ea=mw.language)==null?void 0:Ea.getFallbackLanguageChain)==null?void 0:wk.call(Ea))!=null?xk:[mw.config.get("wgUserLanguage")],vk="codemirror-mediawiki-i18n",Sk,fn=(Sk=Gt(vk))!=null?Sk:{},{version:Yu}=fn,Qk=async n=>{if(Yu!==Ko||!Yn.includes(fn.lang))for(let e=0;e<Yn.length;e++){let t=Yn[e];try{Object.assign(fn,await(await fetch(`${n}/${Ho}/i18n/${t}.json`)).json()),Ft(vk,fn);break}catch(i){e===Yn.length-1&&(mw.notify(Re("i18n-failed",Yn[0]),{type:"error"}),console.error(i))}}for(let[e,t]of Object.entries(fn))e.endsWith("-mac")?Pa&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Re=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Pk=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Aa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Pk(t.parseDom())}var kk=async(n,...e)=>{let t=Pk($("<p>",{html:Re(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},$k=async(n,e)=>{let t;Yu?e.length>0&&!hs(Yu,n)&&(t=await kk("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Ko.replace(/\./gu,"")}" target="_blank">${Ko}</a>`,String(e.length),e.map(i=>`<li>${Aa(`addon-${i}`,!0)}</li>`).join(""))):t=await kk("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Tk=n=>{n.localize(Object.fromEntries(Object.entries(fn).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Mk="codemirror-mediawiki-addons",Wk="codemirror-mediawiki-monaco",Vu=["wiki","javascript","css","lua","json"],JT=["Wikitext","JavaScript","CSS","Lua","JSON"],Dk="codemirror-mediawiki-wikilint",Da=["ESLint","Stylelint"],Zk,Er=((Zk=mw.config.get("wgUserGroups"))==null?void 0:Zk.includes("user"))&&mw.config.get("wgUserName"),Xk=Er?`User:${Er}/codemirror-mediawiki.json`:void 0;var es="codemirror-mediawiki-indent",Ne=new Set(Gt(Mk)),Ek,Lt=new Set((Ek=Gt(Wk))!=null?Ek:Ne.has("useMonaco")?Vu:[]),Ak,_t=(Ak=Gt(Dk))!=null?Ak:{},Ri=new Map(Da.map(n=>[n,Gt(`codemirror-mediawiki-${n}`)])),Jo,zu,Ra,Ma,Wa,Rk,Ai=(Rk=localStorage.getItem(es))!=null?Rk:"",Iu={},Ck=new Map,Lk=(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"})},Nk=(async()=>{if(Er)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Bu=(async()=>{if(!Er)return;let n={action:"query",prop:"revisions",titles:Xk,rvprop:"content",rvlimit:1};(await Nk).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let o=JSON.parse(t.revisions[0].content);if(!((i=o.addons)!=null&&i.includes("save")))return;Ne.clear();for(let s of o.addons)Ne.add(s);Lt.clear();for(let s of(r=o.useMonaco)!=null?r:Ne.has("useMonaco")?Vu:[])Lt.add(s);o.indent&&localStorage.setItem(es,o.indent);for(let s of Da)o[s]&&Ri.set(s,o[s]);o.wikilint&&Object.assign(_t,o.wikilint)}},Lk)})(),qk=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Bu,Jo)Ra.setValue([...Ne]),Ma.setValue([...Lt]),Wa.setValue(Ai);else{Jo=new OO.ui.MessageDialog({id:"cm-preference"}),Jo.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Jo]),zu=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Re("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),o={};for(let c of Da){let h=Ri.get(c);Iu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ai||" "):""});let f=new OO.ui.FieldLayout(Iu[c],{label:Re(`${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&&!di.has(m)&&(async()=>{let{editor:g}=await hn.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),o[c]=u}zu.addTabPanels([i,r,...Object.values(o)],0),Ra=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(fn).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Aa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Er}))],value:[...Ne]}),Ma=new OO.ui.CheckboxMultiselectInputWidget({options:Vu.map((c,h)=>({data:c,label:JT[h]})),value:[...Lt]}),Wa=new OO.ui.TextInputWidget({value:Ai,placeholder:String.raw`\t`});let s=new OO.ui.FieldLayout(Ra,{label:Re("label"),align:"top"}),l=new OO.ui.FieldLayout(Ma,{label:Re("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Wa,{label:Re("addon-indent")});i.$element.append(s.$element,l.$element,a.$element,$("<p>",{html:Re("feedback","codemirror-mediawiki")})),r.$element.append(...yk.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Re("wikilint-off")},{data:"1",label:Re("wikilint-error")},{data:"2",label:Re("wikilint-on")}],value:(d=_t[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Ck.set(c,f),(m=_t[c])!=null||(_t[c]=h),u.$element}),$("<p>",{html:Re("feedback","wikiparser-node")}))}let e=await Jo.open({message:zu.$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=Ai,i=Ne.has("save");Ai=Wa.getValue();let r=Ai!==t;if(r){for(let l of n)l==null||l.setIndent(Ai||" ");localStorage.setItem(es,Ai)}for(let[l,a]of Ck){let c=a.getValue();r||(r=c!==_t[l]),_t[l]=c}Ft(Dk,_t);let o=[];for(let l of Da)try{let a=JSON.parse(Iu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ri.get(l))),Ri.set(l,a),Ft(`codemirror-mediawiki-${l}`,a)}catch{o.push(l)}o.length>0&&OO.ui.alert(Re("json-error",o.join(Re("and"))));let s=Ma.getValue();if(s.length!==Lt.size||!s.every(l=>Lt.has(l))){r=!0,Lt.clear();for(let l of s)Lt.add(l);Ft(Wk,s)}if(Ne.delete("useMonaco"),s=Ra.getValue(),s.length!==Ne.size||!s.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of s)Ne.add(l);for(let l of n)l==null||l.prefer(s)}if(Lt.size>0&&Ne.add("useMonaco"),s=[...Ne],Ft(Mk,s),r&&Er&&(i||Ne.has("save"))){let l={action:"edit",title:Xk,text:JSON.stringify({addons:s,useMonaco:[...Lt],indent:Ai,wikilint:_t,ESLint:Ri.get("ESLint"),Stylelint:Ri.get("Stylelint")}),summary:Re("save-summary")};(await Nk).postWithToken("csrf",l).then(()=>{mw.notify(Aa("save-success"),{type:"success"})},Lk)}}};var jk=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(o){let s=o.getModel(),l=o.getSelections().filter(a=>!a.isEmpty());if(l.length===0)o.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(s.getValueInRange(c))}));o.executeEdits(n,a)}}}),eC=()=>[jk("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",Pu),jk("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",$u)],ts=new WeakMap,Xa,Yk=(n,e)=>{if(e&&!ts.has(n))Xa!=null||(Xa=eC()),ts.set(n,Xa.map(t=>n.addAction(t)));else if(e===!1&&ts.has(n)){for(let t of ts.get(n))t.dispose();ts.delete(n)}};var zk=(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)},Ik=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(),zk(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Re("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),zk(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 tC="2.25",iC=["lint"];mw.loader.load(`${mn}/${Ho}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=di.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=di.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var La={},nC=new Set(["javascript","css","lua","json"]),Vk={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},rC={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},oC=[["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"}]],Bk=n=>!n.closest("#cm-preference"),sC=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,o]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:s}=e;return o.map(l=>[l.slice(s)])}return i===0?o.map(s=>[s]):o.map(s=>[new mw.Title(s).getMainText()])}catch{return[]}},lC=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:o}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),s=Object.entries((r=(i=Object.values(o)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of s){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},aC=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:sC(e,n),paramSuggest:lC(e,n)}},Mi,Ut,Ve,pi,is,Ar,mi,_u,_k,Uu,Na=class Na extends Cr{constructor(t,i,r,o,s=!0,l=mw.config.get("wgPageName")){var a;if(di.has(t))throw new RangeError("The textarea has already been replaced by CodeMirror.");t.id==="wpTextbox1"&&mw.hook("ext.CodeMirror.ready").add(c=>{c.destroy()});super(t,i,o,!1);$e(this,mi);$e(this,Mi,!0);$e(this,Ut);$e(this,Ve);$e(this,pi);$e(this,is);$e(this,Ar," ");this.ns=r,this.page=l,di.set(t,this),s?this.initialize(o):(_e(this,is,Ee(this,mi,_k).call(this)),$(t).data("jquery.textSelection",Za)),Bk(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((a=t.form)==null||a.addEventListener("submit",()=>{let c=document.querySelector("#wpScrolltop");c&&this.view&&M(this,Mi)&&(c.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Mi)}get model(){return M(this,Ve)}get editor(){return M(this,pi)}initialize(t){if(M(this,Ve))throw new Error("A Monaco editor is already initialized!");super.initialize(t),Ee(this,mi,_u).call(this,t);let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Mi)){let{textarea:i}=this;M(this,Ve)?t&&!M(this,Mi)?(M(this,Ve).setValue(i.value),Ee(this,mi,Uu).call(this),M(this,Ut).style.display="",i.style.display="none",$(i).data("jquery.textSelection",Za)):!t&&M(this,Mi)&&(M(this,Ut).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&ju)),_e(this,Mi,t)}async setLanguage(t,i){if(M(this,Ve))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await aC(this.page)),super.setLanguage(t,i),Ee(this,mi,_u).call(this,i)}setContent(t){M(this,Ve)?M(this,Ve).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Ve).getValue()}setIndent(t){if(M(this,pi)){_e(this,Ar,t);let i=t.includes(" ");M(this,pi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return La[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,o=r in La,s=r==="mediawiki",l,a;if(typeof i=="number"?s&&i!==10&&i!==828&&i!==2?a={include:!1}:r==="javascript"&&(a={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{}}):l=i,l||!o){if(s){let c={getConfig:this.getWikiConfig,i18n:Yn};l=l?{...c,...l}:h=>({...c,...h?_t:a})}else r==="javascript"?l!=null||(l=()=>({...a,...Ri.get("ESLint")})):r==="css"&&(l!=null||(l=()=>Ri.get("Stylelint")));await this.getLinter(l)}La[r]&&this.lint(La[r])}async getWikiConfig(){let[t,i]=await Promise.all([qu(jo),wikiparse.getConfig()]);return mk(i,t)}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),o=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,pi)||!M(this,Ve))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Ve).lint&&M(this,Ve).lint(r)}o&&Yk(M(this,pi),i("escape"));let s={};for(let[l,a,c,h]of oC){let f=i(l);if(f!==void 0)if(typeof a=="string")s[a]=f?h:c;else for(let u of a)s[u]=f?h:c}M(this,pi).updateOptions(s)}static async fromTextArea(t,i,r,o){var f;let s=$(t);if(Ne.has("wikiEditor")&&Bk(t))try{await Ik(s)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Re(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(Re("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in Vk&&(i=Vk[i]);let l=!Lt.has(nC.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Na(t,a?void 0:i,r,void 0,l,o);s.data("CodeMirror6",c),a&&await c.setLanguage(i,await qu(jo)),await Promise.all([Bu,M(c,is)]),c.prefer([...Ne]);let h=localStorage.getItem(es);return h&&c.setIndent(h),c}};Mi=new WeakMap,Ut=new WeakMap,Ve=new WeakMap,pi=new WeakMap,is=new WeakMap,Ar=new WeakMap,mi=new WeakSet,_u=function(t){this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:gk(t),isbnParser:Ok},t))},_k=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mn}/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=rC[i])!=null?h:i,o=r==="wikitext",s=M(this,Ar).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();_e(this,Ve,monaco.editor.createModel(t.value,r)),_e(this,Ut,document.createElement("div")),M(this,Ut).className="monaco-container",Ee(this,mi,Uu).call(this),M(this,Ut).style.minHeight="2em",t.before(M(this,Ut)),t.style.display="none",_e(this,pi,monaco.editor.create(M(this,Ut),{model:M(this,Ve),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:o||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:s?4:Number(M(this,Ar)),insertSpaces:!s,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!o&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Ve).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Ve).getValue()},400)})},Uu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Ut).style.height=t?`${t}px`:i},Na.version=Ko;var hn=Na;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!di.has(n.target)&&(n.preventDefault(),hn.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"),Qk(mn)]),mw.hook("wiki-codemirror6").add(Tk),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Re("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];qk(r.map(o=>di.get(o)))}),$k(tC,iC)})();Object.assign(globalThis,{CodeMirror6:hn});export{hn as CodeMirror};
37
+ `:"");if(s!==void 0)Za.setSelection.call(this,{start:s,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,bk(d,n,t,o));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=rt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=rt(this);return n.revealPosition(n.getPosition()),this}};var yk=(()=>{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","invalid-css"];return Object.freeze(n),n})();var Ho="npm/@bhsd/codemirror-mediawiki@2.25.5",Ko=Ho.slice(Ho.lastIndexOf("@")+1),Ea,wk,xk,Yn=(xk=(wk=(Ea=mw.language)==null?void 0:Ea.getFallbackLanguageChain)==null?void 0:wk.call(Ea))!=null?xk:[mw.config.get("wgUserLanguage")],vk="codemirror-mediawiki-i18n",Sk,fn=(Sk=Gt(vk))!=null?Sk:{},{version:Yu}=fn,Qk=async n=>{if(Yu!==Ko||!Yn.includes(fn.lang))for(let e=0;e<Yn.length;e++){let t=Yn[e];try{Object.assign(fn,await(await fetch(`${n}/${Ho}/i18n/${t}.json`)).json()),Ft(vk,fn);break}catch(i){e===Yn.length-1&&(mw.notify(Re("i18n-failed",Yn[0]),{type:"error"}),console.error(i))}}for(let[e,t]of Object.entries(fn))e.endsWith("-mac")?Pa&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Re=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Pk=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Aa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Pk(t.parseDom())}var kk=async(n,...e)=>{let t=Pk($("<p>",{html:Re(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},$k=async(n,e)=>{let t;Yu?e.length>0&&!hs(Yu,n)&&(t=await kk("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Ko.replace(/\./gu,"")}" target="_blank">${Ko}</a>`,String(e.length),e.map(i=>`<li>${Aa(`addon-${i}`,!0)}</li>`).join(""))):t=await kk("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Tk=n=>{n.localize(Object.fromEntries(Object.entries(fn).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Mk="codemirror-mediawiki-addons",Wk="codemirror-mediawiki-monaco",Vu=["wiki","javascript","css","lua","json"],JT=["Wikitext","JavaScript","CSS","Lua","JSON"],Dk="codemirror-mediawiki-wikilint",Da=["ESLint","Stylelint"],Zk,Er=((Zk=mw.config.get("wgUserGroups"))==null?void 0:Zk.includes("user"))&&mw.config.get("wgUserName"),Xk=Er?`User:${Er}/codemirror-mediawiki.json`:void 0;var es="codemirror-mediawiki-indent",Ne=new Set(Gt(Mk)),Ek,Lt=new Set((Ek=Gt(Wk))!=null?Ek:Ne.has("useMonaco")?Vu:[]),Ak,_t=(Ak=Gt(Dk))!=null?Ak:{},Ri=new Map(Da.map(n=>[n,Gt(`codemirror-mediawiki-${n}`)])),Jo,zu,Ra,Ma,Wa,Rk,Ai=(Rk=localStorage.getItem(es))!=null?Rk:"",Iu={},Ck=new Map,Lk=(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"})},Nk=(async()=>{if(Er)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Bu=(async()=>{if(!Er)return;let n={action:"query",prop:"revisions",titles:Xk,rvprop:"content",rvlimit:1};(await Nk).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let o=JSON.parse(t.revisions[0].content);if(!((i=o.addons)!=null&&i.includes("save")))return;Ne.clear();for(let s of o.addons)Ne.add(s);Lt.clear();for(let s of(r=o.useMonaco)!=null?r:Ne.has("useMonaco")?Vu:[])Lt.add(s);o.indent&&localStorage.setItem(es,o.indent);for(let s of Da)o[s]&&Ri.set(s,o[s]);o.wikilint&&Object.assign(_t,o.wikilint)}},Lk)})(),qk=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Bu,Jo)Ra.setValue([...Ne]),Ma.setValue([...Lt]),Wa.setValue(Ai);else{Jo=new OO.ui.MessageDialog({id:"cm-preference"}),Jo.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Jo]),zu=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Re("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),o={};for(let c of Da){let h=Ri.get(c);Iu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ai||" "):""});let f=new OO.ui.FieldLayout(Iu[c],{label:Re(`${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&&!di.has(m)&&(async()=>{let{editor:g}=await hn.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),o[c]=u}zu.addTabPanels([i,r,...Object.values(o)],0),Ra=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(fn).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Aa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Er}))],value:[...Ne]}),Ma=new OO.ui.CheckboxMultiselectInputWidget({options:Vu.map((c,h)=>({data:c,label:JT[h]})),value:[...Lt]}),Wa=new OO.ui.TextInputWidget({value:Ai,placeholder:String.raw`\t`});let s=new OO.ui.FieldLayout(Ra,{label:Re("label"),align:"top"}),l=new OO.ui.FieldLayout(Ma,{label:Re("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Wa,{label:Re("addon-indent")});i.$element.append(s.$element,l.$element,a.$element,$("<p>",{html:Re("feedback","codemirror-mediawiki")})),r.$element.append(...yk.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Re("wikilint-off")},{data:"1",label:Re("wikilint-error")},{data:"2",label:Re("wikilint-on")}],value:(d=_t[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Ck.set(c,f),(m=_t[c])!=null||(_t[c]=h),u.$element}),$("<p>",{html:Re("feedback","wikiparser-node")}))}let e=await Jo.open({message:zu.$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=Ai,i=Ne.has("save");Ai=Wa.getValue();let r=Ai!==t;if(r){for(let l of n)l==null||l.setIndent(Ai||" ");localStorage.setItem(es,Ai)}for(let[l,a]of Ck){let c=a.getValue();r||(r=c!==_t[l]),_t[l]=c}Ft(Dk,_t);let o=[];for(let l of Da)try{let a=JSON.parse(Iu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ri.get(l))),Ri.set(l,a),Ft(`codemirror-mediawiki-${l}`,a)}catch{o.push(l)}o.length>0&&OO.ui.alert(Re("json-error",o.join(Re("and"))));let s=Ma.getValue();if(s.length!==Lt.size||!s.every(l=>Lt.has(l))){r=!0,Lt.clear();for(let l of s)Lt.add(l);Ft(Wk,s)}if(Ne.delete("useMonaco"),s=Ra.getValue(),s.length!==Ne.size||!s.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of s)Ne.add(l);for(let l of n)l==null||l.prefer(s)}if(Lt.size>0&&Ne.add("useMonaco"),s=[...Ne],Ft(Mk,s),r&&Er&&(i||Ne.has("save"))){let l={action:"edit",title:Xk,text:JSON.stringify({addons:s,useMonaco:[...Lt],indent:Ai,wikilint:_t,ESLint:Ri.get("ESLint"),Stylelint:Ri.get("Stylelint")}),summary:Re("save-summary")};(await Nk).postWithToken("csrf",l).then(()=>{mw.notify(Aa("save-success"),{type:"success"})},Lk)}}};var jk=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(o){let s=o.getModel(),l=o.getSelections().filter(a=>!a.isEmpty());if(l.length===0)o.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(s.getValueInRange(c))}));o.executeEdits(n,a)}}}),eC=()=>[jk("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",Pu),jk("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",$u)],ts=new WeakMap,Xa,Yk=(n,e)=>{if(e&&!ts.has(n))Xa!=null||(Xa=eC()),ts.set(n,Xa.map(t=>n.addAction(t)));else if(e===!1&&ts.has(n)){for(let t of ts.get(n))t.dispose();ts.delete(n)}};var zk=(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)},Ik=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(),zk(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Re("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),zk(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 tC="2.25",iC=["lint"];mw.loader.load(`${mn}/${Ho}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=di.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=di.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var La={},nC=new Set(["javascript","css","lua","json"]),Vk={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},rC={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},oC=[["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"}]],Bk=n=>!n.closest("#cm-preference"),sC=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,o]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:s}=e;return o.map(l=>[l.slice(s)])}return i===0?o.map(s=>[s]):o.map(s=>[new mw.Title(s).getMainText()])}catch{return[]}},lC=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:o}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),s=Object.entries((r=(i=Object.values(o)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of s){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},aC=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:sC(e,n),paramSuggest:lC(e,n)}},Mi,Ut,Ve,pi,is,Ar,mi,_u,_k,Uu,Na=class Na extends Cr{constructor(t,i,r,o,s=!0,l=mw.config.get("wgPageName")){var a;if(di.has(t))throw new RangeError("The textarea has already been replaced by CodeMirror.");t.id==="wpTextbox1"&&mw.hook("ext.CodeMirror.ready").add(c=>{c.destroy()});super(t,i,o,!1);$e(this,mi);$e(this,Mi,!0);$e(this,Ut);$e(this,Ve);$e(this,pi);$e(this,is);$e(this,Ar," ");this.ns=r,this.page=l,di.set(t,this),s?this.initialize(o):(_e(this,is,Ee(this,mi,_k).call(this)),$(t).data("jquery.textSelection",Za)),Bk(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((a=t.form)==null||a.addEventListener("submit",()=>{let c=document.querySelector("#wpScrolltop");c&&this.view&&M(this,Mi)&&(c.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Mi)}get model(){return M(this,Ve)}get editor(){return M(this,pi)}initialize(t){if(M(this,Ve))throw new Error("A Monaco editor is already initialized!");super.initialize(t),Ee(this,mi,_u).call(this,t);let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Mi)){let{textarea:i}=this;M(this,Ve)?t&&!M(this,Mi)?(M(this,Ve).setValue(i.value),Ee(this,mi,Uu).call(this),M(this,Ut).style.display="",i.style.display="none",$(i).data("jquery.textSelection",Za)):!t&&M(this,Mi)&&(M(this,Ut).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&ju)),_e(this,Mi,t)}async setLanguage(t,i){if(M(this,Ve))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await aC(this.page)),super.setLanguage(t,i),Ee(this,mi,_u).call(this,i)}setContent(t){M(this,Ve)?M(this,Ve).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Ve).getValue()}setIndent(t){if(M(this,pi)){_e(this,Ar,t);let i=t.includes(" ");M(this,pi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return La[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,o=r in La,s=r==="mediawiki",l,a;if(typeof i=="number"?s&&i!==10&&i!==828&&i!==2?a={include:!1}:r==="javascript"&&(a={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{}}):l=i,l||!o){if(s){let c={getConfig:this.getWikiConfig,i18n:Yn};l=l?{...c,...l}:h=>({...c,...h?_t:a})}else r==="javascript"?l!=null||(l=()=>({...a,...Ri.get("ESLint")})):r==="css"&&(l!=null||(l=()=>Ri.get("Stylelint")));await this.getLinter(l)}La[r]&&this.lint(La[r])}async getWikiConfig(){let[t,i]=await Promise.all([qu(jo),wikiparse.getConfig()]);return mk(i,t)}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),o=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,pi)||!M(this,Ve))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Ve).lint&&M(this,Ve).lint(r)}o&&Yk(M(this,pi),i("escape"));let s={};for(let[l,a,c,h]of oC){let f=i(l);if(f!==void 0)if(typeof a=="string")s[a]=f?h:c;else for(let u of a)s[u]=f?h:c}M(this,pi).updateOptions(s)}static async fromTextArea(t,i,r,o){var f;let s=$(t);if(Ne.has("wikiEditor")&&Bk(t))try{await Ik(s)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Re(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(Re("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in Vk&&(i=Vk[i]);let l=!Lt.has(nC.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Na(t,a?void 0:i,r,void 0,l,o);s.data("CodeMirror6",c),a&&await c.setLanguage(i,await qu(jo)),await Promise.all([Bu,M(c,is)]),c.prefer([...Ne]);let h=localStorage.getItem(es);return h&&c.setIndent(h),c}};Mi=new WeakMap,Ut=new WeakMap,Ve=new WeakMap,pi=new WeakMap,is=new WeakMap,Ar=new WeakMap,mi=new WeakSet,_u=function(t){this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:gk(t),isbnParser:Ok},t))},_k=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mn}/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=rC[i])!=null?h:i,o=r==="wikitext",s=M(this,Ar).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();_e(this,Ve,monaco.editor.createModel(t.value,r)),_e(this,Ut,document.createElement("div")),M(this,Ut).className="monaco-container",Ee(this,mi,Uu).call(this),M(this,Ut).style.minHeight="2em",t.before(M(this,Ut)),t.style.display="none",_e(this,pi,monaco.editor.create(M(this,Ut),{model:M(this,Ve),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:o||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:s?4:Number(M(this,Ar)),insertSpaces:!s,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!o&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Ve).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Ve).getValue()},400)})},Uu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Ut).style.height=t?`${t}px`:i},Na.version=Ko;var hn=Na;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!di.has(n.target)&&(n.preventDefault(),hn.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"),Qk(mn)]),mw.hook("wiki-codemirror6").add(Tk),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Re("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];qk(r.map(o=>di.get(o)))}),$k(tC,iC)})();Object.assign(globalThis,{CodeMirror6:hn});export{hn as CodeMirror};
38
38
  /**
39
39
  * @file Configuration for the MediaWiki highlighting mode for CodeMirror.
40
40
  * @author MusikAnimal and others
package/dist/wiki.min.js CHANGED
@@ -34,7 +34,7 @@ ${wd(a[1].childNodes[0].data).replace(/\n/gu," ")}
34
34
  ${m}`,g=1),/[\n\r]/u.test(h.sliceDoc(d,d+1))||(m+=`
35
35
  `,b=1)),[m,g,b]};if(l!==void 0)ju.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 hn.replaceSelections(c,(u,{from:d,to:m})=>{let g=o&&d===m,b=r||d===m?e:h.sliceDoc(d,m),[x,v,Q]=f(d,m,bk(b,n,t,s)),T=d+x.length;return g?[x,d+n.length+v,T-t.length-Q]:[x,T]}),this},getCaretPosition(n){let{state:{selection:{main:{from:e,to:t,head:i}}}}=rt(this).view;return n!=null&&n.startAndEnd?[e,t]:i},scrollToCaretPosition(){return rt(this).scrollTo(),this}},Za={getContents(){return rt(this).model.getValue()},setContents(n){return rt(this).model.setValue(n),this},getSelection(){let{model:n,editor:e}=rt(this);return n.getValueInRange(e.getSelection())},setSelection({start:n,end:e=n}){let{model:t,editor:i}=rt(this);return i.setSelection(KT(monaco,t,[n,e])),this},replaceSelection(n){let{editor:e}=rt(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:o,selectionStart:s,selectionEnd:l}){let{model:a,editor:c}=rt(this),h=({startColumn:u,endColumn:d,endLineNumber:m},g)=>(i&&u>1?`
36
36
  `:"")+g+(i&&d<=a.getLineLength(m)?`
37
- `:"");if(s!==void 0)Za.setSelection.call(this,{start:s,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,bk(d,n,t,o));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=rt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=rt(this);return n.revealPosition(n.getPosition()),this}};var yk=(()=>{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","invalid-css"];return Object.freeze(n),n})();var Ho="npm/@bhsd/codemirror-mediawiki@2.25.4",Ko=Ho.slice(Ho.lastIndexOf("@")+1),Ea,wk,xk,Yn=(xk=(wk=(Ea=mw.language)==null?void 0:Ea.getFallbackLanguageChain)==null?void 0:wk.call(Ea))!=null?xk:[mw.config.get("wgUserLanguage")],vk="codemirror-mediawiki-i18n",Sk,fn=(Sk=Gt(vk))!=null?Sk:{},{version:Yu}=fn,Qk=async n=>{if(Yu!==Ko||!Yn.includes(fn.lang))for(let e=0;e<Yn.length;e++){let t=Yn[e];try{Object.assign(fn,await(await fetch(`${n}/${Ho}/i18n/${t}.json`)).json()),Ft(vk,fn);break}catch(i){e===Yn.length-1&&(mw.notify(Re("i18n-failed",Yn[0]),{type:"error"}),console.error(i))}}for(let[e,t]of Object.entries(fn))e.endsWith("-mac")?Pa&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Re=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Pk=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Aa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Pk(t.parseDom())}var kk=async(n,...e)=>{let t=Pk($("<p>",{html:Re(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},$k=async(n,e)=>{let t;Yu?e.length>0&&!hs(Yu,n)&&(t=await kk("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Ko.replace(/\./gu,"")}" target="_blank">${Ko}</a>`,String(e.length),e.map(i=>`<li>${Aa(`addon-${i}`,!0)}</li>`).join(""))):t=await kk("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Tk=n=>{n.localize(Object.fromEntries(Object.entries(fn).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Mk="codemirror-mediawiki-addons",Wk="codemirror-mediawiki-monaco",Vu=["wiki","javascript","css","lua","json"],JT=["Wikitext","JavaScript","CSS","Lua","JSON"],Dk="codemirror-mediawiki-wikilint",Da=["ESLint","Stylelint"],Zk,Er=((Zk=mw.config.get("wgUserGroups"))==null?void 0:Zk.includes("user"))&&mw.config.get("wgUserName"),Xk=Er?`User:${Er}/codemirror-mediawiki.json`:void 0;var es="codemirror-mediawiki-indent",Ne=new Set(Gt(Mk)),Ek,Lt=new Set((Ek=Gt(Wk))!=null?Ek:Ne.has("useMonaco")?Vu:[]),Ak,_t=(Ak=Gt(Dk))!=null?Ak:{},Ri=new Map(Da.map(n=>[n,Gt(`codemirror-mediawiki-${n}`)])),Jo,zu,Ra,Ma,Wa,Rk,Ai=(Rk=localStorage.getItem(es))!=null?Rk:"",Iu={},Ck=new Map,Lk=(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"})},Nk=(async()=>{if(Er)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Bu=(async()=>{if(!Er)return;let n={action:"query",prop:"revisions",titles:Xk,rvprop:"content",rvlimit:1};(await Nk).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let o=JSON.parse(t.revisions[0].content);if(!((i=o.addons)!=null&&i.includes("save")))return;Ne.clear();for(let s of o.addons)Ne.add(s);Lt.clear();for(let s of(r=o.useMonaco)!=null?r:Ne.has("useMonaco")?Vu:[])Lt.add(s);o.indent&&localStorage.setItem(es,o.indent);for(let s of Da)o[s]&&Ri.set(s,o[s]);o.wikilint&&Object.assign(_t,o.wikilint)}},Lk)})(),qk=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Bu,Jo)Ra.setValue([...Ne]),Ma.setValue([...Lt]),Wa.setValue(Ai);else{Jo=new OO.ui.MessageDialog({id:"cm-preference"}),Jo.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Jo]),zu=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Re("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),o={};for(let c of Da){let h=Ri.get(c);Iu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ai||" "):""});let f=new OO.ui.FieldLayout(Iu[c],{label:Re(`${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&&!di.has(m)&&(async()=>{let{editor:g}=await hn.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),o[c]=u}zu.addTabPanels([i,r,...Object.values(o)],0),Ra=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(fn).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Aa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Er}))],value:[...Ne]}),Ma=new OO.ui.CheckboxMultiselectInputWidget({options:Vu.map((c,h)=>({data:c,label:JT[h]})),value:[...Lt]}),Wa=new OO.ui.TextInputWidget({value:Ai,placeholder:String.raw`\t`});let s=new OO.ui.FieldLayout(Ra,{label:Re("label"),align:"top"}),l=new OO.ui.FieldLayout(Ma,{label:Re("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Wa,{label:Re("addon-indent")});i.$element.append(s.$element,l.$element,a.$element,$("<p>",{html:Re("feedback","codemirror-mediawiki")})),r.$element.append(...yk.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Re("wikilint-off")},{data:"1",label:Re("wikilint-error")},{data:"2",label:Re("wikilint-on")}],value:(d=_t[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Ck.set(c,f),(m=_t[c])!=null||(_t[c]=h),u.$element}),$("<p>",{html:Re("feedback","wikiparser-node")}))}let e=await Jo.open({message:zu.$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=Ai,i=Ne.has("save");Ai=Wa.getValue();let r=Ai!==t;if(r){for(let l of n)l==null||l.setIndent(Ai||" ");localStorage.setItem(es,Ai)}for(let[l,a]of Ck){let c=a.getValue();r||(r=c!==_t[l]),_t[l]=c}Ft(Dk,_t);let o=[];for(let l of Da)try{let a=JSON.parse(Iu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ri.get(l))),Ri.set(l,a),Ft(`codemirror-mediawiki-${l}`,a)}catch{o.push(l)}o.length>0&&OO.ui.alert(Re("json-error",o.join(Re("and"))));let s=Ma.getValue();if(s.length!==Lt.size||!s.every(l=>Lt.has(l))){r=!0,Lt.clear();for(let l of s)Lt.add(l);Ft(Wk,s)}if(Ne.delete("useMonaco"),s=Ra.getValue(),s.length!==Ne.size||!s.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of s)Ne.add(l);for(let l of n)l==null||l.prefer(s)}if(Lt.size>0&&Ne.add("useMonaco"),s=[...Ne],Ft(Mk,s),r&&Er&&(i||Ne.has("save"))){let l={action:"edit",title:Xk,text:JSON.stringify({addons:s,useMonaco:[...Lt],indent:Ai,wikilint:_t,ESLint:Ri.get("ESLint"),Stylelint:Ri.get("Stylelint")}),summary:Re("save-summary")};(await Nk).postWithToken("csrf",l).then(()=>{mw.notify(Aa("save-success"),{type:"success"})},Lk)}}};var jk=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(o){let s=o.getModel(),l=o.getSelections().filter(a=>!a.isEmpty());if(l.length===0)o.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(s.getValueInRange(c))}));o.executeEdits(n,a)}}}),eC=()=>[jk("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",Pu),jk("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",$u)],ts=new WeakMap,Xa,Yk=(n,e)=>{if(e&&!ts.has(n))Xa!=null||(Xa=eC()),ts.set(n,Xa.map(t=>n.addAction(t)));else if(e===!1&&ts.has(n)){for(let t of ts.get(n))t.dispose();ts.delete(n)}};var zk=(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)},Ik=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(),zk(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Re("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),zk(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 tC="2.25",iC=["lint"];mw.loader.load(`${mn}/${Ho}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=di.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=di.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var La={},nC=new Set(["javascript","css","lua","json"]),Vk={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},rC={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},oC=[["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"}]],Bk=n=>!n.closest("#cm-preference"),sC=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,o]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:s}=e;return o.map(l=>[l.slice(s)])}return i===0?o.map(s=>[s]):o.map(s=>[new mw.Title(s).getMainText()])}catch{return[]}},lC=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:o}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),s=Object.entries((r=(i=Object.values(o)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of s){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},aC=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:sC(e,n),paramSuggest:lC(e,n)}},Mi,Ut,Ve,pi,is,Ar,mi,_u,_k,Uu,Na=class Na extends Cr{constructor(t,i,r,o,s=!0,l=mw.config.get("wgPageName")){var a;if(di.has(t))throw new RangeError("The textarea has already been replaced by CodeMirror.");t.id==="wpTextbox1"&&mw.hook("ext.CodeMirror.ready").add(c=>{c.destroy()});super(t,i,o,!1);$e(this,mi);$e(this,Mi,!0);$e(this,Ut);$e(this,Ve);$e(this,pi);$e(this,is);$e(this,Ar," ");this.ns=r,this.page=l,di.set(t,this),s?this.initialize(o):(_e(this,is,Ee(this,mi,_k).call(this)),$(t).data("jquery.textSelection",Za)),Bk(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((a=t.form)==null||a.addEventListener("submit",()=>{let c=document.querySelector("#wpScrolltop");c&&this.view&&M(this,Mi)&&(c.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Mi)}get model(){return M(this,Ve)}get editor(){return M(this,pi)}initialize(t){if(M(this,Ve))throw new Error("A Monaco editor is already initialized!");super.initialize(t),Ee(this,mi,_u).call(this,t);let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Mi)){let{textarea:i}=this;M(this,Ve)?t&&!M(this,Mi)?(M(this,Ve).setValue(i.value),Ee(this,mi,Uu).call(this),M(this,Ut).style.display="",i.style.display="none",$(i).data("jquery.textSelection",Za)):!t&&M(this,Mi)&&(M(this,Ut).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&ju)),_e(this,Mi,t)}async setLanguage(t,i){if(M(this,Ve))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await aC(this.page)),super.setLanguage(t,i),Ee(this,mi,_u).call(this,i)}setContent(t){M(this,Ve)?M(this,Ve).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Ve).getValue()}setIndent(t){if(M(this,pi)){_e(this,Ar,t);let i=t.includes(" ");M(this,pi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return La[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,o=r in La,s=r==="mediawiki",l,a;if(typeof i=="number"?s&&i!==10&&i!==828&&i!==2?a={include:!1}:r==="javascript"&&(a={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{}}):l=i,l||!o){if(s){let c={getConfig:this.getWikiConfig,i18n:Yn};l=l?{...c,...l}:h=>({...c,...h?_t:a})}else r==="javascript"?l!=null||(l=()=>({...a,...Ri.get("ESLint")})):r==="css"&&(l!=null||(l=()=>Ri.get("Stylelint")));await this.getLinter(l)}La[r]&&this.lint(La[r])}async getWikiConfig(){let[t,i]=await Promise.all([qu(jo),wikiparse.getConfig()]);return mk(i,t)}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),o=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,pi)||!M(this,Ve))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Ve).lint&&M(this,Ve).lint(r)}o&&Yk(M(this,pi),i("escape"));let s={};for(let[l,a,c,h]of oC){let f=i(l);if(f!==void 0)if(typeof a=="string")s[a]=f?h:c;else for(let u of a)s[u]=f?h:c}M(this,pi).updateOptions(s)}static async fromTextArea(t,i,r,o){var f;let s=$(t);if(Ne.has("wikiEditor")&&Bk(t))try{await Ik(s)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Re(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(Re("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in Vk&&(i=Vk[i]);let l=!Lt.has(nC.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Na(t,a?void 0:i,r,void 0,l,o);s.data("CodeMirror6",c),a&&await c.setLanguage(i,await qu(jo)),await Promise.all([Bu,M(c,is)]),c.prefer([...Ne]);let h=localStorage.getItem(es);return h&&c.setIndent(h),c}};Mi=new WeakMap,Ut=new WeakMap,Ve=new WeakMap,pi=new WeakMap,is=new WeakMap,Ar=new WeakMap,mi=new WeakSet,_u=function(t){this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:gk(t),isbnParser:Ok},t))},_k=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mn}/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=rC[i])!=null?h:i,o=r==="wikitext",s=M(this,Ar).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();_e(this,Ve,monaco.editor.createModel(t.value,r)),_e(this,Ut,document.createElement("div")),M(this,Ut).className="monaco-container",Ee(this,mi,Uu).call(this),M(this,Ut).style.minHeight="2em",t.before(M(this,Ut)),t.style.display="none",_e(this,pi,monaco.editor.create(M(this,Ut),{model:M(this,Ve),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:o||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:s?4:Number(M(this,Ar)),insertSpaces:!s,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!o&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Ve).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Ve).getValue()},400)})},Uu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Ut).style.height=t?`${t}px`:i},Na.version=Ko;var hn=Na;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!di.has(n.target)&&(n.preventDefault(),hn.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"),Qk(mn)]),mw.hook("wiki-codemirror6").add(Tk),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Re("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];qk(r.map(o=>di.get(o)))}),$k(tC,iC)})();Object.assign(globalThis,{CodeMirror6:hn});})();
37
+ `:"");if(s!==void 0)Za.setSelection.call(this,{start:s,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,bk(d,n,t,o));return{range:u,text:m,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(n){let{editor:e,model:t}=rt(this),i=e.getSelection(),r=t.getOffsetAt(i.getEndPosition());return n!=null&&n.startAndEnd?[t.getOffsetAt(i.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:n}=rt(this);return n.revealPosition(n.getPosition()),this}};var yk=(()=>{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","invalid-css"];return Object.freeze(n),n})();var Ho="npm/@bhsd/codemirror-mediawiki@2.25.5",Ko=Ho.slice(Ho.lastIndexOf("@")+1),Ea,wk,xk,Yn=(xk=(wk=(Ea=mw.language)==null?void 0:Ea.getFallbackLanguageChain)==null?void 0:wk.call(Ea))!=null?xk:[mw.config.get("wgUserLanguage")],vk="codemirror-mediawiki-i18n",Sk,fn=(Sk=Gt(vk))!=null?Sk:{},{version:Yu}=fn,Qk=async n=>{if(Yu!==Ko||!Yn.includes(fn.lang))for(let e=0;e<Yn.length;e++){let t=Yn[e];try{Object.assign(fn,await(await fetch(`${n}/${Ho}/i18n/${t}.json`)).json()),Ft(vk,fn);break}catch(i){e===Yn.length-1&&(mw.notify(Re("i18n-failed",Yn[0]),{type:"error"}),console.error(i))}}for(let[e,t]of Object.entries(fn))e.endsWith("-mac")?Pa&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${e}`,t)},Re=(n,...e)=>mw.msg(`cm-mw-${n}`,...e),Pk=n=>(n.find("a").add(n.filter("a")).attr("target","_blank"),n);function Aa(n,e){let t=mw.message(`cm-mw-${n}`);return e?t.parse():Pk(t.parseDom())}var kk=async(n,...e)=>{let t=Pk($("<p>",{html:Re(n,...e)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},$k=async(n,e)=>{let t;Yu?e.length>0&&!hs(Yu,n)&&(t=await kk("welcome-addons",`<a href="https://github.com/bhsd-harry/codemirror-mediawiki/blob/npm/CHANGELOG.md#${Ko.replace(/\./gu,"")}" target="_blank">${Ko}</a>`,String(e.length),e.map(i=>`<li>${Aa(`addon-${i}`,!0)}</li>`).join(""))):t=await kk("welcome"),t==null||t.find("#settings").click(i=>{i.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Tk=n=>{n.localize(Object.fromEntries(Object.entries(fn).filter(([e])=>e.startsWith("phrase-")).map(([e,t])=>[e.slice(7).replace(/-/gu," "),t])))};var Mk="codemirror-mediawiki-addons",Wk="codemirror-mediawiki-monaco",Vu=["wiki","javascript","css","lua","json"],JT=["Wikitext","JavaScript","CSS","Lua","JSON"],Dk="codemirror-mediawiki-wikilint",Da=["ESLint","Stylelint"],Zk,Er=((Zk=mw.config.get("wgUserGroups"))==null?void 0:Zk.includes("user"))&&mw.config.get("wgUserName"),Xk=Er?`User:${Er}/codemirror-mediawiki.json`:void 0;var es="codemirror-mediawiki-indent",Ne=new Set(Gt(Mk)),Ek,Lt=new Set((Ek=Gt(Wk))!=null?Ek:Ne.has("useMonaco")?Vu:[]),Ak,_t=(Ak=Gt(Dk))!=null?Ak:{},Ri=new Map(Da.map(n=>[n,Gt(`codemirror-mediawiki-${n}`)])),Jo,zu,Ra,Ma,Wa,Rk,Ai=(Rk=localStorage.getItem(es))!=null?Rk:"",Iu={},Ck=new Map,Lk=(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"})},Nk=(async()=>{if(Er)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),Bu=(async()=>{if(!Er)return;let n={action:"query",prop:"revisions",titles:Xk,rvprop:"content",rvlimit:1};(await Nk).get(n).then(e=>{var i,r;let{query:{pages:[t]}}=e;if(t!=null&&t.revisions){let o=JSON.parse(t.revisions[0].content);if(!((i=o.addons)!=null&&i.includes("save")))return;Ne.clear();for(let s of o.addons)Ne.add(s);Lt.clear();for(let s of(r=o.useMonaco)!=null?r:Ne.has("useMonaco")?Vu:[])Lt.add(s);o.indent&&localStorage.setItem(es,o.indent);for(let s of Da)o[s]&&Ri.set(s,o[s]);o.wikilint&&Object.assign(_t,o.wikilint)}},Lk)})(),qk=async n=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await Bu,Jo)Ra.setValue([...Ne]),Ma.setValue([...Lt]),Wa.setValue(Ai);else{Jo=new OO.ui.MessageDialog({id:"cm-preference"}),Jo.$element.css("z-index","801");let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([Jo]),zu=new OO.ui.IndexLayout;let i=new OO.ui.TabPanelLayout("main",{label:Re("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),o={};for(let c of Da){let h=Ri.get(c);Iu[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,Ai||" "):""});let f=new OO.ui.FieldLayout(Iu[c],{label:Re(`${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&&!di.has(m)&&(async()=>{let{editor:g}=await hn.fromTextArea(m,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),o[c]=u}zu.addTabPanels([i,r,...Object.values(o)],0),Ra=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(fn).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:Aa(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Er}))],value:[...Ne]}),Ma=new OO.ui.CheckboxMultiselectInputWidget({options:Vu.map((c,h)=>({data:c,label:JT[h]})),value:[...Lt]}),Wa=new OO.ui.TextInputWidget({value:Ai,placeholder:String.raw`\t`});let s=new OO.ui.FieldLayout(Ra,{label:Re("label"),align:"top"}),l=new OO.ui.FieldLayout(Ma,{label:Re("addon-useMonaco"),align:"top"}),a=new OO.ui.FieldLayout(Wa,{label:Re("addon-indent")});i.$element.append(s.$element,l.$element,a.$element,$("<p>",{html:Re("feedback","codemirror-mediawiki")})),r.$element.append(...yk.map(c=>{var d,m;let h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Re("wikilint-off")},{data:"1",label:Re("wikilint-error")},{data:"2",label:Re("wikilint-on")}],value:(d=_t[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Ck.set(c,f),(m=_t[c])!=null||(_t[c]=h),u.$element}),$("<p>",{html:Re("feedback","wikiparser-node")}))}let e=await Jo.open({message:zu.$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=Ai,i=Ne.has("save");Ai=Wa.getValue();let r=Ai!==t;if(r){for(let l of n)l==null||l.setIndent(Ai||" ");localStorage.setItem(es,Ai)}for(let[l,a]of Ck){let c=a.getValue();r||(r=c!==_t[l]),_t[l]=c}Ft(Dk,_t);let o=[];for(let l of Da)try{let a=JSON.parse(Iu[l].getValue().trim()||"null");r||(r=JSON.stringify(a)!==JSON.stringify(Ri.get(l))),Ri.set(l,a),Ft(`codemirror-mediawiki-${l}`,a)}catch{o.push(l)}o.length>0&&OO.ui.alert(Re("json-error",o.join(Re("and"))));let s=Ma.getValue();if(s.length!==Lt.size||!s.every(l=>Lt.has(l))){r=!0,Lt.clear();for(let l of s)Lt.add(l);Ft(Wk,s)}if(Ne.delete("useMonaco"),s=Ra.getValue(),s.length!==Ne.size||!s.every(l=>Ne.has(l))){r=!0,Ne.clear();for(let l of s)Ne.add(l);for(let l of n)l==null||l.prefer(s)}if(Lt.size>0&&Ne.add("useMonaco"),s=[...Ne],Ft(Mk,s),r&&Er&&(i||Ne.has("save"))){let l={action:"edit",title:Xk,text:JSON.stringify({addons:s,useMonaco:[...Lt],indent:Ai,wikilint:_t,ESLint:Ri.get("ESLint"),Stylelint:Ri.get("Stylelint")}),summary:Re("save-summary")};(await Nk).postWithToken("csrf",l).then(()=>{mw.notify(Aa("save-success"),{type:"success"})},Lk)}}};var jk=(n,e,t,i,r)=>({id:n,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[t]],contextMenuGroupId:"1_modification",run(o){let s=o.getModel(),l=o.getSelections().filter(a=>!a.isEmpty());if(l.length===0)o.trigger(n,i,void 0);else{let a=l.map(c=>({range:c,text:r(s.getValueInRange(c))}));o.executeEdits(n,a)}}}),eC=()=>[jk("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",Pu),jk("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",$u)],ts=new WeakMap,Xa,Yk=(n,e)=>{if(e&&!ts.has(n))Xa!=null||(Xa=eC()),ts.set(n,Xa.map(t=>n.addAction(t)));else if(e===!1&&ts.has(n)){for(let t of ts.get(n))t.dispose();ts.delete(n)}};var zk=(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)},Ik=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(),zk(i)}}},preferences:{type:"button",oouiIcon:"settings",label:Re("title"),action:{type:"callback",execute(){document.getElementById("cm-settings").click()}}}}}}}),zk(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 tC="2.25",iC=["lint"];mw.loader.load(`${mn}/${Ho}/mediawiki.css`,"text/css");$.valHooks.textarea={get(n){let e=di.get(n);return e!=null&&e.visible?e.getContent():n.value},set(n,e){let t=di.get(n);t!=null&&t.visible?t.setContent(e):n.value=e}};var La={},nC=new Set(["javascript","css","lua","json"]),Vk={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},rC={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},oC=[["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"}]],Bk=n=>!n.closest("#cm-preference"),sC=(n,e)=>async(t,i=0,r)=>{r&&(t=e+t);try{let[,o]=await n.get({action:"opensearch",search:t,namespace:i,limit:"max"});if(r){let{length:s}=e;return o.map(l=>[l.slice(s)])}return i===0?o.map(s=>[s]):o.map(s=>[new mw.Title(s).getMainText()])}catch{return[]}},lC=(n,e)=>async t=>{var i,r;t.startsWith("/")&&(t=e+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:o}=await n.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),s=Object.entries((r=(i=Object.values(o)[0])==null?void 0:i.params)!=null?r:{}),l=[];for(let[a,{aliases:c,label:h}]of s){let f=h!=null?h:"";l.push([a,f],...c.map(u=>[u,f]))}return l}catch{return[]}},aC=async n=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:sC(e,n),paramSuggest:lC(e,n)}},Mi,Ut,Ve,pi,is,Ar,mi,_u,_k,Uu,Na=class Na extends Cr{constructor(t,i,r,o,s=!0,l=mw.config.get("wgPageName")){var a;if(di.has(t))throw new RangeError("The textarea has already been replaced by CodeMirror.");t.id==="wpTextbox1"&&mw.hook("ext.CodeMirror.ready").add(c=>{c.destroy()});super(t,i,o,!1);$e(this,mi);$e(this,Mi,!0);$e(this,Ut);$e(this,Ve);$e(this,pi);$e(this,is);$e(this,Ar," ");this.ns=r,this.page=l,di.set(t,this),s?this.initialize(o):(_e(this,is,Ee(this,mi,_k).call(this)),$(t).data("jquery.textSelection",Za)),Bk(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((a=t.form)==null||a.addEventListener("submit",()=>{let c=document.querySelector("#wpScrolltop");c&&this.view&&M(this,Mi)&&(c.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return M(this,Mi)}get model(){return M(this,Ve)}get editor(){return M(this,pi)}initialize(t){if(M(this,Ve))throw new Error("A Monaco editor is already initialized!");super.initialize(t),Ee(this,mi,_u).call(this,t);let i=[...this.textarea.classList].find(r=>r.startsWith("mw-editfont-"));i&&this.view.contentDOM.classList.add(i)}toggle(t=!M(this,Mi)){let{textarea:i}=this;M(this,Ve)?t&&!M(this,Mi)?(M(this,Ve).setValue(i.value),Ee(this,mi,Uu).call(this),M(this,Ut).style.display="",i.style.display="none",$(i).data("jquery.textSelection",Za)):!t&&M(this,Mi)&&(M(this,Ut).style.display="none",i.style.display="",$(i).removeData("jquery.textSelection")):(super.toggle(t),$(i).data("jquery.textSelection",t&&ju)),_e(this,Mi,t)}async setLanguage(t,i){if(M(this,Ve))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&Object.assign(i,await aC(this.page)),super.setLanguage(t,i),Ee(this,mi,_u).call(this,i)}setContent(t){M(this,Ve)?M(this,Ve).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():M(this,Ve).getValue()}setIndent(t){if(M(this,pi)){_e(this,Ar,t);let i=t.includes(" ");M(this,pi).updateOptions({tabSize:i?4:Number(t),insertSpaces:!i})}else super.setIndent(t)}async getLinter(t){let i=await super.getLinter(t);return La[this.lang]=i,i}async defaultLint(t,i=this.ns){if(!t){this.lint();return}let{lang:r}=this,o=r in La,s=r==="mediawiki",l,a;if(typeof i=="number"?s&&i!==10&&i!==828&&i!==2?a={include:!1}:r==="javascript"&&(a={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...i===8||i===2300?{parserOptions:{ecmaVersion:8}}:{}}):l=i,l||!o){if(s){let c={getConfig:this.getWikiConfig,i18n:Yn};l=l?{...c,...l}:h=>({...c,...h?_t:a})}else r==="javascript"?l!=null||(l=()=>({...a,...Ri.get("ESLint")})):r==="css"&&(l!=null||(l=()=>Ri.get("Stylelint")));await this.getLinter(l)}La[r]&&this.lint(La[r])}async getWikiConfig(){let[t,i]=await Promise.all([qu(jo),wikiparse.getConfig()]);return mk(i,t)}prefer(t){let i=Array.isArray(t)?l=>t.includes(l):l=>t[l],r=i("lint"),o=this.lang==="mediawiki";if(this.view){super.prefer(t),r!==void 0&&this.defaultLint(r);return}else{if(!M(this,pi)||!M(this,Ve))throw new Error("The editor is not initialized!");r!==void 0&&M(this,Ve).lint&&M(this,Ve).lint(r)}o&&Yk(M(this,pi),i("escape"));let s={};for(let[l,a,c,h]of oC){let f=i(l);if(f!==void 0)if(typeof a=="string")s[a]=f?h:c;else for(let u of a)s[u]=f?h:c}M(this,pi).updateOptions(s)}static async fromTextArea(t,i,r,o){var f;let s=$(t);if(Ne.has("wikiEditor")&&Bk(t))try{await Ik(s)}catch(u){u instanceof Error&&u.message==="no-wikiEditor"&&mw.notify(Re(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(Re("contentmodel"))||void 0)==null?void 0:f.toLowerCase())}i&&i in Vk&&(i=Vk[i]);let l=!Lt.has(nC.has(i)?i:"wiki"),a=l&&(i==="mediawiki"||i==="html"),c=new Na(t,a?void 0:i,r,void 0,l,o);s.data("CodeMirror6",c),a&&await c.setLanguage(i,await qu(jo)),await Promise.all([Bu,M(c,is)]),c.prefer([...Ne]);let h=localStorage.getItem(es);return h&&c.setIndent(h),c}};Mi=new WeakMap,Ut=new WeakMap,Ve=new WeakMap,pi=new WeakMap,is=new WeakMap,Ar=new WeakMap,mi=new WeakSet,_u=function(t){this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:gk(t),isbnParser:Ok},t))},_k=async function(){var a,c,h,f;typeof monaco!="object"&&await $.ajax(`${mn}/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=rC[i])!=null?h:i,o=r==="wikitext",s=M(this,Ar).includes(" ");await monaco;for(let u of monaco.editor.getEditors())(f=u.getDomNode())!=null&&f.isConnected||u.dispose();_e(this,Ve,monaco.editor.createModel(t.value,r)),_e(this,Ut,document.createElement("div")),M(this,Ut).className="monaco-container",Ee(this,mi,Uu).call(this),M(this,Ut).style.minHeight="2em",t.before(M(this,Ut)),t.style.display="none",_e(this,pi,monaco.editor.create(M(this,Ut),{model:M(this,Ve),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:o||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:s?4:Number(M(this,Ar)),insertSpaces:!s,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:!o&&r!=="html"&&r!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let l;M(this,Ve).onDidChangeContent(()=>{clearTimeout(l),l=setTimeout(()=>{t.value=M(this,Ve).getValue()},400)})},Uu=function(){let{textarea:{offsetHeight:t,style:{height:i}}}=this;M(this,Ut).style.height=t?`${t}px`:i},Na.version=Ko;var hn=Na;document.body.addEventListener("click",n=>{n.target instanceof HTMLTextAreaElement&&n.shiftKey&&!di.has(n.target)&&(n.preventDefault(),hn.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"),Qk(mn)]),mw.hook("wiki-codemirror6").add(Tk),mw.util.addPortletLink((e=n[mw.config.get("skin")])!=null?e:"p-cactions","#",Re("title"),"cm-settings").addEventListener("click",t=>{t.preventDefault();let i=".cm-editor + textarea, .monaco-container + textarea",r=[...document.querySelectorAll(i)];qk(r.map(o=>di.get(o)))}),$k(tC,iC)})();Object.assign(globalThis,{CodeMirror6:hn});})();
38
38
  /**
39
39
  * @file Configuration for the MediaWiki highlighting mode for CodeMirror.
40
40
  * @author MusikAnimal and others
package/i18n/en.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.25.4",
2
+ "version": "2.25.5",
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.25.4",
2
+ "version": "2.25.5",
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.25.4",
2
+ "version": "2.25.5",
3
3
  "lang": "zh-hant",
4
4
  "i18n-failed": "取得 $1 的語言檔案失敗。",
5
5
  "title": "CodeMirror外掛程式",
package/mediawiki.css CHANGED
@@ -1,4 +1,4 @@
1
- .cm-editor{background-color:#fff}.cm-editor .cm-lineNumbers .cm-gutterElement{text-align:end}.cm-panel .cm-textfield,.cm-panel .cm-button,.cm-panels>.cm-search.cm-panel label,.cm-panels>.cm-gotoLine.cm-panel label{font-size:inherit}.cm-tooltip-fold{cursor:pointer;line-height:1.2;padding:0 1px;opacity:.6}.cm-tooltip-fold:hover{opacity:1}.cm-tooltip-ref,.cm-tooltip-hover{padding:2px 5px;width:max-content;max-width:60vw}.cm-tooltip-ref{cursor:pointer;white-space:pre-wrap}.cm-tooltip-hover *{margin-top:0!important;margin-bottom:0!important}.cm-tooltip-hover>div{font-size:90%;line-height:1.4}.cm-tooltip-hover code{background-color:#e0e6eb;padding:.1em .4em;border-radius:.4em}#cm-preference>.oo-ui-window-frame{height:100%!important}#cm-preference .oo-ui-panelLayout{overflow:visible}#cm-preference .cm-editor{border:1.5px solid #dedede;border-radius:.3em}#cm-preference .oo-ui-checkboxMultioptionWidget.oo-ui-widget-disabled{display:none}.wikiEditor-ui-toolbar{z-index:7}.cm-mw-section--1,.cm-mw-section--1~*{font-size:1.8em;line-height:1.2em}.cm-mw-section--2,.cm-mw-section--2~*{font-size:1.5em;line-height:1.2em}.cm-mw-section--3~*,.cm-mw-section--4~*,.cm-mw-section--5~*,.cm-mw-section--6~*{font-weight:700}.cm-mw-section-header{color:#0076dd;font-weight:400}.cm-mw-error{color:#d73333}.cm-mw-pagename,.cm-mw-link-tosection,.cm-mw-extlink-protocol,.cm-mw-extlink,.cm-mw-free-extlink-protocol,.cm-mw-free-extlink,.cm-mw-magic-link{text-decoration:underline}.cm-mw-skipformatting{background-color:#86ceff4d}.cm-mw-redirect,.cm-mw-list{color:#0076dd;font-weight:700}.cm-mw-double-underscore,.cm-mw-signature,.cm-mw-hr{color:#0076dd;font-weight:700;background-color:#00000012}.cm-mw-comment{color:#7b8c8f;font-weight:400}.cm-mw-apostrophes{color:#0076dd}.cm-mw-template{font-weight:400}.cm-mw-template-name,.cm-mw-template-delimiter,.cm-mw-template-bracket{color:#80c;font-weight:700}.cm-mw-template-argument-name{color:#b0c;font-weight:400}.cm-mw-templatevariable{color:#ad9300;font-weight:400}.cm-mw-templatevariable-name,.cm-mw-templatevariable-bracket,.cm-mw-templatevariable-delimiter{color:#ac6600;font-weight:700}.cm-mw-parserfunction{font-weight:400}.cm-mw-parserfunction-name,.cm-mw-parserfunction-bracket,.cm-mw-parserfunction-delimiter{color:#a11;font-weight:700}.cm-mw-link-pagename,.cm-mw-link-bracket,.cm-mw-link-delimiter,.cm-mw-extlink,.cm-mw-free-extlink,.cm-mw-magic-link{color:#000aaa;font-weight:400}.cm-mw-image-parameter,.cm-mw-link-tosection{color:#006fe6;font-weight:400}.cm-mw-extlink-protocol,.cm-mw-free-extlink-protocol,.cm-mw-extlink-bracket{color:#000aaa;font-weight:700}.cm-mw-strong{font-weight:700}.cm-mw-em{font-style:italic}.cm-mw-exttag-name,.cm-mw-htmltag-name{color:#14866d;font-weight:700}.cm-mw-exttag-bracket,.cm-mw-exttag-attribute,.cm-mw-htmltag-bracket,.cm-mw-htmltag-attribute{color:#14866d;font-weight:400}.cm-mw-exttag-attribute-value,.cm-mw-htmltag-attribute-value{color:#179b1c;font-weight:400}.cm-mw-table-bracket,.cm-mw-table-delimiter{color:#d08;font-weight:700}.cm-mw-table-delimiter2,.cm-mw-table-definition{color:#d08;font-weight:400}.cm-mw-table-definition-value{color:#f500d4;font-weight:400}.cm-mw-table-th,.cm-mw-table-caption{font-weight:700}.cm-mw-convert-bracket,.cm-mw-convert-delimiter{color:#b68;font-weight:700}.cm-mw-convert-flag,.cm-mw-convert-lang{color:#b68}.cm-mw-entity{color:#00a1a1}.cm-mw-template-ground{background-color:#aa11110a}.cm-mw-template2-ground{background-color:#aa111114}.cm-mw-template3-ground{background-color:#aa11111f}.cm-mw-template-ext-ground,.cm-mw-ext-ground,.cm-mw-exttag{background-color:#7700aa0a}.cm-mw-template-ext2-ground,.cm-mw-ext2-ground{background-color:#7700aa14}.cm-mw-template-ext3-ground,.cm-mw-ext3-ground{background-color:#7700aa1f}.cm-mw-template-link-ground,.cm-mw-ext-link-ground,.cm-mw-link-ground{background-color:#2211990a}.cm-mw-template-ext-link-ground,.cm-mw-ext2-link-ground{background-color:#4d09a214}.cm-mw-template-ext2-link-ground,.cm-mw-ext3-link-ground{background-color:#5b06a41f}.cm-mw-template-ext3-link-ground{background-color:#6204a629}.cm-mw-template2-ext-ground{background-color:#91095e14}.cm-mw-template2-ext2-ground{background-color:#8806771f}.cm-mw-template2-ext3-ground{background-color:#84048429}.cm-mw-template2-link-ground{background-color:#66115514}.cm-mw-template2-ext-link-ground{background-color:#6c0b711f}.cm-mw-template2-ext2-link-ground{background-color:#6f098029}.cm-mw-template2-ext3-link-ground{background-color:#70078833}.cm-mw-template3-ext-ground{background-color:#990b441f}.cm-mw-template3-ext2-ground{background-color:#91095e29}.cm-mw-template3-ext3-ground{background-color:#8b076d33}.cm-mw-template3-link-ground{background-color:#7d113e1f}.cm-mw-template3-ext-link-ground{background-color:#7b0d5929}.cm-mw-template3-ext2-link-ground{background-color:#7a0a6933}.cm-mw-template3-ext3-link-ground{background-color:#7a09743d}.cm-mw-tag-pre,.cm-mw-tag-nowiki{background-color:#0000000a}.cm-bidi-isolate,.cm-editor[dir=rtl] .cm-mw-template-name{unicode-bidi:isolate}.cm-bidi-ltr{direction:ltr;display:inline-block}.cm-focused .cm-matchingTag{background-color:#328c8252}.cm-focused .cm-nonmatchingTag{background-color:#bb555545}.cm-inlay-hint{color:#969696;font-style:italic;-webkit-user-select:none;user-select:none}.cm-panel-status>div{padding:0 .3em;display:table-cell}.cm-status-worker{user-select:none}.cm-status-worker>*{display:table-cell;white-space:nowrap}.cm-status-error,.cm-status-warning{padding-right:8px}.cm-status-worker-enabled .cm-status-error,.cm-status-worker-enabled .cm-status-warning{cursor:pointer}.cm-status-worker>*>div{display:inline-block;vertical-align:middle}.cm-status-worker>*>div:first-child{margin-right:4px;width:1em;height:1em}.cm-status-fix-disabled,.cm-status-fix-enabled{mask-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><g><path d="M8 19a1 1 0 001 1h2a1 1 0 001-1v-1H8zm9-12a7 7 0 10-12 4.9S7 14 7 15v1a1 1 0 001 1h4a1 1 0 001-1v-1c0-1 2-3.1 2-3.1A7 7 0 0017 7"></path></g></svg>');mask-size:100%;mask-repeat:no-repeat;mask-position:center}.cm-status-fix-disabled{background-color:#dadde3}.cm-status-fix-enabled{background-color:#ffce31;cursor:pointer}.cm-status-fix-menu{display:none;position:absolute;z-index:301;background-color:#f5f5f5;border:1px solid #ddd;border-radius:2px;box-shadow:0 2px 2px #00000040;outline:none;white-space:nowrap}.cm-status-fix-menu>div{padding:1px 5px;cursor:pointer}.cm-status-fix-menu>div:hover{background-color:#e2f2ff}.cm-status-message{border-left:1px solid #c8ccd1;border-right:1px solid #c8ccd1;width:100%}.cm-status-message .cm-diagnosticAction{padding-top:0;padding-bottom:0}.cm-status-line{white-space:nowrap}span.mtku{text-decoration:none}
1
+ .cm-editor{background-color:#fff}.cm-editor .cm-lineNumbers .cm-gutterElement{text-align:end}.cm-panel .cm-textfield,.cm-panel .cm-button,.cm-panels>.cm-search.cm-panel label,.cm-panels>.cm-gotoLine.cm-panel label{font-size:inherit}.cm-tooltip-fold{cursor:pointer;line-height:1.2;padding:0 1px;opacity:.6}.cm-tooltip-fold:hover{opacity:1}.cm-tooltip-ref,.cm-tooltip-hover{padding:2px 5px;width:max-content;max-width:60vw}.cm-tooltip-ref{cursor:pointer;white-space:pre-wrap}.cm-tooltip-hover *{margin-top:0!important;margin-bottom:0!important}.cm-tooltip-hover>div{font-size:90%;line-height:1.4}.cm-tooltip-hover code{background-color:#e0e6eb;padding:.1em .4em;border-radius:.4em}#cm-preference>.oo-ui-window-frame{height:100%!important}#cm-preference .oo-ui-panelLayout{overflow:visible}#cm-preference .cm-editor{border:1.5px solid #dedede;border-radius:.3em}#cm-preference .oo-ui-checkboxMultioptionWidget.oo-ui-widget-disabled{display:none}.wikiEditor-ui-toolbar{z-index:7}.cm-mw-section--1,.cm-mw-section--1~*{font-size:1.8em;line-height:1.2em}.cm-mw-section--2,.cm-mw-section--2~*{font-size:1.5em;line-height:1.2em}.cm-mw-section--3~*,.cm-mw-section--4~*,.cm-mw-section--5~*,.cm-mw-section--6~*{font-weight:700}.cm-mw-section-header{color:#0076dd;font-weight:400}.cm-mw-error{color:#d73333}.cm-mw-pagename,.cm-mw-link-tosection,.cm-mw-extlink-protocol,.cm-mw-extlink,.cm-mw-free-extlink-protocol,.cm-mw-free-extlink,.cm-mw-magic-link{text-decoration:underline}.cm-mw-skipformatting{background-color:#86ceff4d}.cm-mw-redirect,.cm-mw-list{color:#0076dd;font-weight:700}.cm-mw-double-underscore,.cm-mw-signature,.cm-mw-hr{color:#0076dd;font-weight:700;background-color:#00000012}.cm-mw-comment{color:#7b8c8f;font-weight:400}.cm-mw-apostrophes{color:#0076dd}.cm-mw-template{font-weight:400}.cm-mw-template-name,.cm-mw-template-delimiter,.cm-mw-template-bracket{color:#80c;font-weight:700}.cm-mw-template-argument-name{color:#b0c;font-weight:400}.cm-mw-templatevariable{color:#ad9300;font-weight:400}.cm-mw-templatevariable-name,.cm-mw-templatevariable-bracket,.cm-mw-templatevariable-delimiter{color:#ac6600;font-weight:700}.cm-mw-parserfunction{font-weight:400}.cm-mw-parserfunction-name,.cm-mw-parserfunction-bracket,.cm-mw-parserfunction-delimiter{color:#a11;font-weight:700}.cm-mw-link-pagename,.cm-mw-link-bracket,.cm-mw-link-delimiter,.cm-mw-extlink,.cm-mw-free-extlink,.cm-mw-magic-link{color:#000aaa;font-weight:400}.cm-mw-image-parameter,.cm-mw-link-tosection{color:#006fe6;font-weight:400}.cm-mw-extlink-protocol,.cm-mw-free-extlink-protocol,.cm-mw-extlink-bracket{color:#000aaa;font-weight:700}.cm-mw-strong{font-weight:700}.cm-mw-em{font-style:italic}.cm-mw-exttag-name,.cm-mw-htmltag-name{color:#14866d;font-weight:700}.cm-mw-exttag-bracket,.cm-mw-exttag-attribute,.cm-mw-htmltag-bracket,.cm-mw-htmltag-attribute{color:#14866d;font-weight:400}.cm-mw-exttag-attribute-value,.cm-mw-htmltag-attribute-value{color:#179b1c;font-weight:400}.cm-mw-table-bracket,.cm-mw-table-delimiter{color:#d08;font-weight:700}.cm-mw-table-delimiter2,.cm-mw-table-definition{color:#d08;font-weight:400}.cm-mw-table-definition-value{color:#f500d4;font-weight:400}.cm-mw-table-th,.cm-mw-table-caption{font-weight:700}.cm-mw-convert-bracket,.cm-mw-convert-delimiter{color:#b68;font-weight:700}.cm-mw-convert-flag,.cm-mw-convert-lang{color:#b68}.cm-mw-entity{color:#00a1a1}.cm-mw-template-ground{background-color:#aa11110a}.cm-mw-template2-ground{background-color:#aa111114}.cm-mw-template3-ground{background-color:#aa11111f}.cm-mw-template-ext-ground,.cm-mw-ext-ground,.cm-mw-exttag{background-color:#7700aa0a}.cm-mw-template-ext2-ground,.cm-mw-ext2-ground{background-color:#7700aa14}.cm-mw-template-ext3-ground,.cm-mw-ext3-ground{background-color:#7700aa1f}.cm-mw-template-link-ground,.cm-mw-ext-link-ground,.cm-mw-link-ground{background-color:#2211990a}.cm-mw-template-ext-link-ground,.cm-mw-ext2-link-ground{background-color:#4d09a214}.cm-mw-template-ext2-link-ground,.cm-mw-ext3-link-ground{background-color:#5b06a41f}.cm-mw-template-ext3-link-ground{background-color:#6204a629}.cm-mw-template2-ext-ground{background-color:#91095e14}.cm-mw-template2-ext2-ground{background-color:#8806771f}.cm-mw-template2-ext3-ground{background-color:#84048429}.cm-mw-template2-link-ground{background-color:#66115514}.cm-mw-template2-ext-link-ground{background-color:#6c0b711f}.cm-mw-template2-ext2-link-ground{background-color:#6f098029}.cm-mw-template2-ext3-link-ground{background-color:#70078833}.cm-mw-template3-ext-ground{background-color:#990b441f}.cm-mw-template3-ext2-ground{background-color:#91095e29}.cm-mw-template3-ext3-ground{background-color:#8b076d33}.cm-mw-template3-link-ground{background-color:#7d113e1f}.cm-mw-template3-ext-link-ground{background-color:#7b0d5929}.cm-mw-template3-ext2-link-ground{background-color:#7a0a6933}.cm-mw-template3-ext3-link-ground{background-color:#7a09743d}.cm-mw-tag-pre,.cm-mw-tag-nowiki{background-color:#0000000a}.cm-bidi-isolate,.cm-editor[dir=rtl] .cm-mw-template-name{unicode-bidi:isolate}.cm-bidi-ltr{direction:ltr;display:inline-block}.cm-focused .cm-matchingTag{background-color:#328c8252}.cm-focused .cm-nonmatchingTag{background-color:#bb555545}.cm-inlay-hint{color:#969696;font-style:italic;-webkit-user-select:none;user-select:none}.cm-panel-status{line-height:1.4}.cm-panel-status>div{padding:0 .3em;display:table-cell}.cm-status-worker{user-select:none}.cm-status-worker>*{display:table-cell;white-space:nowrap}.cm-status-error,.cm-status-warning{padding-right:8px}.cm-status-worker-enabled .cm-status-error,.cm-status-worker-enabled .cm-status-warning{cursor:pointer}.cm-status-worker>*>div{display:inline-block;vertical-align:middle}.cm-status-worker>*>div:first-child{margin-right:4px;width:1em;height:1em}.cm-status-fix-disabled,.cm-status-fix-enabled{mask-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><g><path d="M8 19a1 1 0 001 1h2a1 1 0 001-1v-1H8zm9-12a7 7 0 10-12 4.9S7 14 7 15v1a1 1 0 001 1h4a1 1 0 001-1v-1c0-1 2-3.1 2-3.1A7 7 0 0017 7"></path></g></svg>');mask-size:100%;mask-repeat:no-repeat;mask-position:center}.cm-status-fix-disabled{background-color:#dadde3}.cm-status-fix-enabled{background-color:#ffce31;cursor:pointer}.cm-status-fix-menu{display:none;position:absolute;z-index:301;background-color:#f5f5f5;border:1px solid #ddd;border-radius:2px;box-shadow:0 2px 2px #00000040;outline:none;white-space:nowrap}.cm-status-fix-menu>div{padding:1px 5px;cursor:pointer}.cm-status-fix-menu>div:hover{background-color:#e2f2ff}.cm-status-message{border-left:1px solid #c8ccd1;border-right:1px solid #c8ccd1;width:100%}.cm-status-message .cm-diagnosticAction{padding-top:0;padding-bottom:0}.cm-status-line{white-space:nowrap}span.mtku{text-decoration:none}
2
2
  /**
3
3
  * @author pastakhov and others
4
4
  * @license GPL-2.0-or-later
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bhsd/codemirror-mediawiki",
3
- "version": "2.25.4",
3
+ "version": "2.25.5",
4
4
  "description": "Modified CodeMirror mode based on wikimedia/mediawiki-extensions-CodeMirror",
5
5
  "keywords": [
6
6
  "mediawiki",
@@ -88,10 +88,10 @@
88
88
  "eslint-plugin-regexp": "^2.7.0",
89
89
  "eslint-plugin-unicorn": "^56.0.1",
90
90
  "http-server": "^14.1.1",
91
- "luacheck-browserify": "^0.4.0",
91
+ "luacheck-browserify": "^0.5.0",
92
92
  "mocha": "^11.1.0",
93
93
  "monaco-editor": "^0.52.2",
94
- "stylelint": "^16.19.1",
94
+ "stylelint": "^16.20.0",
95
95
  "stylelint-config-recommended": "^16.0.0",
96
96
  "types-mediawiki": "^1.9.1",
97
97
  "typescript": "^5.8.2"