@bhsd/codemirror-mediawiki 2.29.0 → 2.29.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/config.js +171 -112
- package/dist/mw.min.js +1 -1
- package/dist/token.js +1529 -1432
- package/dist/wiki.min.js +1 -1
- package/i18n/en.json +1 -1
- package/i18n/zh-hans.json +1 -1
- package/i18n/zh-hant.json +1 -1
- package/package.json +4 -3
package/dist/wiki.min.js
CHANGED
|
@@ -39,7 +39,7 @@ end`,{label:"if",detail:"/ else block",type:"keyword"}),Ae("while ${condition} d
|
|
|
39
39
|
${p}`,g=1),/[\n\r]/u.test(h.sliceDoc(d,d+1))||(p+=`
|
|
40
40
|
`,b=1)),[p,g,b]};if(a!==void 0)z0.setSelection.call(this,{start:a,end:l});else if(r&&n&&!t&&!i&&/^\s*=.*=\s*$/u.test(e)){const{selection:{main:{from:u,to:d}}}=h,[p]=f(u,d,e);return c.dispatch({changes:{from:u,to:d,insert:p},selection:{anchor:u+p.length}}),this}return Ca.replaceSelections(c,(u,{from:d,to:p})=>{const g=s&&d===p,b=n||d===p?e:h.sliceDoc(d,p),[x,S,C]=f(d,p,L0(b,t,i,o)),A=d+x.length;return g?[x,d+t.length+S,A-i.length-C]:[x,A]}),this},getCaretPosition(t){const{state:{selection:{main:{from:e,to:i,head:r}}}}=Be(this).view;return t!=null&&t.startAndEnd?[e,i]:r},scrollToCaretPosition(){return Be(this).scrollTo(),this}},mh={getContents(){return Be(this).model.getValue()},setContents(t){return Be(this).model.setValue(t),this},getSelection(){const{model:t,editor:e}=Be(this);return t.getValueInRange(e.getSelection())},setSelection({start:t,end:e=t}){const{model:i,editor:r}=Be(this);return r.setSelection(zZ(monaco,i,[t,e])),this},replaceSelection(t){const{editor:e}=Be(this);return e.executeEdits("replaceSelection",[{range:e.getSelection(),text:t,forceMoveMarkers:!0}]),this},encapsulateSelection({pre:t="",peri:e="",post:i="",ownline:r,replace:n,splitlines:s,selectionStart:o,selectionEnd:a}){const{model:l,editor:c}=Be(this),h=({startColumn:u,endColumn:d,endLineNumber:p},g)=>(r&&u>1?`
|
|
41
41
|
`:"")+g+(r&&d<=l.getLineLength(p)?`
|
|
42
|
-
`:"");if(o!==void 0)mh.setSelection.call(this,{start:o,end:a});else if(r&&n&&!t&&!i&&/^\s*=.*=\s*$/u.test(e)){const u=c.getSelection();return c.executeEdits("encapsulateSelection",[{range:u,text:h(u,e),forceMoveMarkers:!0}]),this}const f=c.getSelections().map(u=>{const d=n||u.isEmpty()?e:l.getValueInRange(u),p=h(u,L0(d,t,i,s));return{range:u,text:p,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(t){const{editor:e,model:i}=Be(this),r=e.getSelection(),n=i.getOffsetAt(r.getEndPosition());return t!=null&&t.startAndEnd?[i.getOffsetAt(r.getStartPosition()),n]:n},scrollToCaretPosition(){const{editor:t}=Be(this);return t.revealPosition(t.getPosition()),this}},BZ=(()=>{const t=["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(t),t})(),B0="codemirror-mediawiki-i18n",Ho="npm/@bhsd/codemirror-mediawiki@2.29.0",Ko=Ho.slice(Ho.lastIndexOf("@")+1),Rm,Wm,V0=(Wm=(Rm=mw.language)==null?void 0:Rm.getFallbackLanguageChain())!=null?Wm:[mw.config.get("wgUserLanguage")],Em,Hn=(Em=_i(B0))!=null?Em:{},{version:Np}=Hn,VZ=async t=>{try{await zm(`${t}/${Ho}/i18n`,Ko,V0,B0,Hn)}catch(e){e instanceof Error&&(mw.notify(e.message,{type:"error"}),console.error(e))}for(const[e,i]of Object.entries(Hn))e.endsWith("-mac")?vf&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,i):mw.messages.set(`cm-mw-${e}`,i)},Ye=(t,...e)=>mw.msg(`cm-mw-${t}`,...e),N0=t=>(t.find("a").add(t.filter("a")).attr("target","_blank"),t);function gh(t,e){const i=mw.message(`cm-mw-${t}`);return e?i.parse():N0(i.parseDom())}var Ip=async(t,...e)=>{const i=N0($("<p>",{html:Ye(t,...e)}));return await mw.notify(i,{type:"success",autoHideSeconds:"long"}),i},NZ=async(t,e)=>{let i;Np?e.length>0&&!Lm(Np,t)&&(i=await Ip("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(r=>`<li>${gh(`addon-${r}`,!0)}</li>`).join(""))):i=await Ip("welcome"),i==null||i.find("#settings").click(r=>{r.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Gp=t=>{t.localize(Object.fromEntries(Object.entries(Hn).filter(([e])=>e.startsWith("phrase-")).map(([e,i])=>[e.slice(7).replace(/-/gu," "),i])))},I0="codemirror-mediawiki-addons",G0="codemirror-mediawiki-monaco",kf=["wiki","javascript","css","lua","json"],IZ=["Wikitext","JavaScript","CSS","Lua","JSON"],U0="codemirror-mediawiki-wikilint",Jo=["ESLint","Stylelint"],Mm,Nr=((Mm=mw.config.get("wgUserGroups"))==null?void 0:Mm.includes("user"))&&mw.config.get("wgUserName"),F0=Nr?`User:${Nr}/codemirror-mediawiki.json`:void 0,Pa="codemirror-mediawiki-indent",je=new Set(_i(I0)),Xm,St=new Set((Xm=_i(G0))!=null?Xm:je.has("useMonaco")?kf:[]),Dm,Vt=(Dm=_i(U0))!=null?Dm:{},Pi=new Map(Jo.map(t=>[t,_i(`codemirror-mediawiki-${t}`)])),un,Ml,Fs,Hs,Ks,qm,ni=(qm=localStorage.getItem(Pa))!=null?qm:"",Xl={},Up=new Map,H0=(t,e)=>{const i=t==="http"||t==="okay-but-empty"?`MediaWiki API request failed: ${t}`:$("<ul>",{html:e.errors.map(({html:r})=>$("<li>",{html:r}))});mw.notify(i,{type:"error",autoHideSeconds:"long"})},K0=(async()=>{if(Nr)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),J0=(async()=>{if(!Nr)return;const t={action:"query",prop:"revisions",titles:F0,rvprop:"content",rvlimit:1};(await K0).get(t).then(e=>{var r,n;const{query:{pages:[i]}}=e;if(i!=null&&i.revisions){const s=JSON.parse(i.revisions[0].content);if(!((r=s.addons)!=null&&r.includes("save")))return;je.clear();for(const o of s.addons)je.add(o);St.clear();for(const o of(n=s.useMonaco)!=null?n:je.has("useMonaco")?kf:[])St.add(o);s.indent&&localStorage.setItem(Pa,s.indent);for(const o of Jo)s[o]&&Pi.set(o,s[o]);s.wikilint&&Object.assign(Vt,s.wikilint)}},H0)})(),GZ=async t=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await J0,un)Fs.setValue([...je]),Hs.setValue([...St]),Ks.setValue(ni);else{un=new OO.ui.MessageDialog({id:"cm-preference"}),un.$element.css("z-index","801");const i=new OO.ui.WindowManager;i.$element.appendTo(document.body),i.addWindows([un]),Ml=new OO.ui.IndexLayout;const r=new OO.ui.TabPanelLayout("main",{label:Ye("title")}),n=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),s={};for(const c of Jo){const h=Pi.get(c);Xl[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,ni||" "):""});const f=new OO.ui.FieldLayout(Xl[c],{label:Ye(`${c}-config`),align:"top"}),u=new OO.ui.TabPanelLayout(c,{label:c,$content:f.$element});u.on("active",d=>{const[p]=u.$element.find("textarea");d&&!di.has(p)&&(async()=>{const{editor:g}=await Ca.fromTextArea(p,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),s[c]=u}Ml.addTabPanels([r,n,...Object.values(s)],0),Fs=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(Hn).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:gh(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Nr}))],value:[...je]}),Hs=new OO.ui.CheckboxMultiselectInputWidget({options:kf.map((c,h)=>({data:c,label:IZ[h]})),value:[...St]}),Ks=new OO.ui.TextInputWidget({value:ni,placeholder:String.raw`\t`});const o=new OO.ui.FieldLayout(Fs,{label:Ye("label"),align:"top"}),a=new OO.ui.FieldLayout(Hs,{label:Ye("addon-useMonaco"),align:"top"}),l=new OO.ui.FieldLayout(Ks,{label:Ye("addon-indent")});r.$element.append(o.$element,a.$element,l.$element,$("<p>",{html:Ye("feedback","codemirror-mediawiki")})),n.$element.append(...BZ.map(c=>{var d,p;const h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Ye("wikilint-off")},{data:"1",label:Ye("wikilint-error")},{data:"2",label:Ye("wikilint-on")}],value:(d=Vt[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Up.set(c,f),(p=Vt[c])!=null||(Vt[c]=h),u.$element}),$("<p>",{html:Ye("feedback","wikiparser-node")}))}const e=await un.open({message:Ml.$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"){const i=ni,r=je.has("save");ni=Ks.getValue();let n=ni!==i;if(n){for(const a of t)a==null||a.setIndent(ni||" ");localStorage.setItem(Pa,ni)}for(const[a,l]of Up){const c=l.getValue();n||(n=c!==Vt[a]),Vt[a]=c}Zi(U0,Vt);const s=[];for(const a of Jo)try{const l=JSON.parse(Xl[a].getValue().trim()||"null");n||(n=JSON.stringify(l)!==JSON.stringify(Pi.get(a))),Pi.set(a,l),Zi(`codemirror-mediawiki-${a}`,l)}catch{s.push(a)}s.length>0&&OO.ui.alert(Ye("json-error",s.join(Ye("and"))));let o=Hs.getValue();if(o.length!==St.size||!o.every(a=>St.has(a))){n=!0,St.clear();for(const a of o)St.add(a);Zi(G0,o)}if(je.delete("useMonaco"),o=Fs.getValue(),o.length!==je.size||!o.every(a=>je.has(a))){n=!0,je.clear();for(const a of o)je.add(a);for(const a of t)a==null||a.prefer(o)}if(St.size>0&&je.add("useMonaco"),o=[...je],Zi(I0,o),n&&Nr&&(r||je.has("save"))){const a={action:"edit",title:F0,text:JSON.stringify({addons:o,useMonaco:[...St],indent:ni,wikilint:Vt,ESLint:Pi.get("ESLint"),Stylelint:Pi.get("Stylelint")}),summary:Ye("save-summary")};(await K0).postWithToken("csrf",a).then(()=>{mw.notify(gh("save-success"),{type:"success"})},H0)}}},Dl=new Map,UZ=(t,e)=>async(i,r=0,n)=>{n&&(i=e+i);try{const[,s]=await t.get({action:"opensearch",search:i,namespace:r,limit:"max"});if(n){const{length:o}=e;return s.map(a=>[a.slice(o)])}return r===0?s.map(o=>[o]):s.map(o=>[new mw.Title(o).getMainText()])}catch{return[]}},FZ=(t,e)=>async i=>{var r,n;i.startsWith("/")&&(i=e+i);try{if(i=new mw.Title(i,10).getPrefixedDb(),Dl.has(i))return Dl.get(i);const{pages:s}=await t.get({action:"templatedata",titles:i,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),o=Object.entries((n=(r=Object.values(s)[0])==null?void 0:r.params)!=null?n:{}),a=[];for(const[l,{aliases:c,label:h}]of o){const f=h!=null?h:"";a.push([l,f],...c.map(u=>[u,f]))}return Dl.set(i,a),a}catch{return[]}},HZ=async t=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);const e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:UZ(e,t),paramSuggest:FZ(e,t)}},Fp=(t,e,i,r,n)=>({id:t,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[i]],contextMenuGroupId:"1_modification",run(s){const o=s.getModel(),a=s.getSelections().filter(l=>!l.isEmpty());if(a.length===0)s.trigger(t,r,void 0);else{const l=a.map(c=>({range:c,text:n(o.getValueInRange(c))}));s.executeEdits(t,l)}}}),KZ=()=>[Fp("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",O0),Fp("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",b0)],dn=new WeakMap,Js,JZ=(t,e)=>{if(e&&!dn.has(t))Js!=null||(Js=KZ()),dn.set(t,Js.map(i=>t.addAction(i)));else if(e===!1&&dn.has(t)){for(const i of dn.get(t))i.dispose();dn.delete(t)}};function ey(t,e,i){const r=t==null?void 0:t.find(`${Ta(e==="toggle"?"":"more")}>[rel=${e}]`);return i?r==null?void 0:r.children().addBack():r}var Hp=(t,e)=>ey(t,e).hasClass("tool-active"),Ta=t=>Array.isArray(t)?t.map(e=>Ta(e)).join():`.group-codemirror6${t&&`-${t}`}`,Mn=(t,e,i)=>{var r;(r=ey(t,e,!0))==null||r.toggleClass("tool-active",i)},ty=(t,e)=>{t&&(Mn(t,"toggle",e),t.find(Ta(["format","more"])).toggle(e),t.find(".group-codeeditor-main").toggle(e===void 0?void 0:!e))},wi=(t,e,i)=>({type:"button",oouiIcon:t,label:i,action:{type:"callback",execute(r){const n=Be(r.$textarea);if(typeof e=="function"){e(r,n);return}const[s,o,a]=e;a&&!n.visible?a(r):n.view?s(n.view):n.editor&&n.editor.trigger("wikiEditor",o,void 0)}}}),eA=async(t,e,i)=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");let r=t.data("wikiEditorContext");const n=new Promise(o=>{if(r){o();return}t.on("wikiEditor-toolbar-doneInitialSections",()=>{o()})});if(await mw.loader.using(["ext.wikiEditor","oojs-ui.styles.icons-interactions","ext.codeEditor.icons"]),r)r.modules.toolbar.$toolbar.find(".group-insert>.tool:not([rel])").hide();else if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(t);else{const{wikiEditor:{modules:{dialogs:{config:o}}}}=$;t.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...o.getDefaultConfig()}),o.replaceIcons(t)}await n,r!=null||(r=t.data("wikiEditorContext"));const{$toolbar:s}=r.modules.toolbar;t.wikiEditor("addToToolbar",{section:"main",groups:{codemirror6:{tools:{toggle:wi("highlight",(o,a)=>{a.toggle()},"CodeMirror 6")}},"codemirror6-format":{tools:{indent:wi("indent",[fa,"editor.action.indentLines"]),outdent:wi("outdent",[ua,"editor.action.outdentLines"])}},"codemirror6-more":{tools:{invisibleChars:wi("pilcrow",(o,a)=>{const l=!Hp(s,"invisibleChars");a.prefer({highlightSpecialChars:l,highlightWhitespace:l})}),lineWrapping:wi("wrapping",(o,a)=>{const l=!Hp(s,"lineWrapping");a.setLineWrapping(l),Mn(s,"lineWrapping",l)}),gotoLine:wi("gotoLine",[iv,"editor.action.gotoLine"]),preferences:wi("settings",()=>{document.getElementById("cm-settings").click()},Ye("title"))}},"codemirror6-search":{tools:{cmSearch:wi("articleSearch",[rf,"editor.action.startFindReplaceAction",o=>{$.wikiEditor.modules.dialogs.api.openDialog(o,"search-and-replace")}],mw.msg("wikieditor-toolbar-tool-replace"))}}}}),ty(s,!0),s.toggleClass("codemirror-readonly",e).toggleClass("codemirror-wiki",i).toggleClass("codemirror-coding",!i)},eo={},tA=new Set(["javascript","css","lua","json"]),Kp={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},iA={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},rA=[["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"}]],ql=t=>!t.closest("#cm-preference"),Ci,li,Qt,De,tt,ss,Wr,os,Ht,Oh,iy,bh,Ca=(Ci=class extends j0{constructor(i,r,n,s,o=!0,a=mw.config.get("wgPageName")){var c;if(di.has(i))throw new RangeError("The textarea has already been replaced by CodeMirror.");const l=h=>{h.textarea===i&&h.destroy()};mw.hook("ext.CodeMirror.ready").add(l);super(i,r,s,!1);we(this,Ht);we(this,li,!0);we(this,Qt);we(this,De);we(this,tt);we(this,ss);we(this,Wr," ");we(this,os);this.ns=n,this.page=a,this.$textarea=$(i),ze(this,os,l),di.set(i,this),this.initialize(s,!o),ql(i)?(mw.hook("wiki-codemirror6").fire(this),i.id==="wpTextbox1"&&((c=i.form)==null||c.addEventListener("submit",()=>{const h=document.querySelector("#wpScrolltop");h&&this.view&&Z(this,li)&&(h.value=String(this.view.scrollDOM.scrollTop))}))):mw.hook("wiki-codemirror6.setting").fire(this)}get visible(){return Z(this,li)&&this.textarea.isConnected}get model(){return Z(this,De)}get editor(){return Z(this,tt)}get $toolbar(){var i;return(i=this.$textarea.data("wikiEditorContext"))==null?void 0:i.modules.toolbar.$toolbar}initialize(i,r){if(Z(this,De))throw new Error("A Monaco editor is already initialized!");if(r){ze(this,ss,Ze(this,Ht,iy).call(this)),this.$textarea.data("jquery.textSelection",mh);return}super.initialize(i),Ze(this,Ht,Oh).call(this,i);const n=[...this.textarea.classList].find(s=>s.startsWith("mw-editfont-"));n&&this.view.contentDOM.classList.add(n),Mn(this.$toolbar,"lineWrapping",!0)}toggle(i=!Z(this,li)){const{textarea:r,$textarea:n}=this;Z(this,De)?i&&!Z(this,li)?(Z(this,De).setValue(r.value),Ze(this,Ht,bh).call(this),Z(this,Qt).style.display="",r.style.display="none",n.data("jquery.textSelection",mh)):!i&&Z(this,li)&&(Z(this,Qt).style.display="none",r.style.display="",n.removeData("jquery.textSelection")):(super.toggle(i),n.data("jquery.textSelection",i&&z0)),ze(this,li,i),ty(this.$toolbar,i)}destroy(){var i;this.visible&&this.toggle(!1),Z(this,tt)&&(Z(this,tt).dispose(),Z(this,De).dispose(),Z(this,Qt).remove()),this.$textarea.data("CodeMirror6",null),(i=this.$toolbar)==null||i.removeClass(["readonly","wiki","coding"].map(r=>`codemirror-${r}`).join(" ")).find(Ta(["","format","more","search"])).remove(),mw.hook("ext.CodeMirror.ready").remove(Z(this,os)),super.destroy()}async setLanguage(i,r){var s;if(Z(this,De))throw new Error("Cannot change the language of a Monaco editor!");const n=i==="mediawiki"||i==="html";n&&Object.assign(r,await HZ(this.page)),super.setLanguage(i,r),Ze(this,Ht,Oh).call(this,r),(s=this.$toolbar)==null||s.toggleClass("codemirror-coding",!n)}setContent(i){Z(this,De)?Z(this,De).setValue(i):super.setContent(i)}getContent(){return this.view?this.view.state.doc.toString():Z(this,De).getValue()}setIndent(i){if(Z(this,tt)){ze(this,Wr,i);const r=i.includes(" ");Z(this,tt).updateOptions({tabSize:r?4:Number(i),insertSpaces:!r})}else super.setIndent(i)}setLineWrapping(i){Z(this,tt)?Z(this,tt).updateOptions({wordWrap:i?"on":"off"}):super.setLineWrapping(i)}async getLinter(i){const r=await super.getLinter(i);return eo[this.lang]=r,r}async defaultLint(i,r=this.ns){if(!i){this.lint();return}const{lang:n}=this,s=n in eo,o=n==="mediawiki";let a,l;if(typeof r=="number"?o&&r!==10&&r!==828&&r!==2?l={include:!1}:n==="javascript"&&(l={...VT,...r===8||r===2300?{parserOptions:{ecmaVersion:8}}:{}}):a=r,a||!s){if(o){const c={getConfig:this.getWikiConfig,i18n:V0};a=a?{...c,...a}:h=>h?Vt:{...c,...l}}else n==="javascript"?a!=null||(a=()=>({...l,...Pi.get("ESLint")})):n==="css"&&(a!=null||(a=()=>Pi.get("Stylelint")));await this.getLinter(a)}eo[n]&&this.lint(eo[n])}async getWikiConfig(){const[i,r]=await Promise.all([Vp(fh),wikiparse.getConfig()]);return jZ(r,i)}prefer(i){!ql(this.textarea)&&Array.isArray(i)&&(i=i.filter(l=>l!=="scrollPastEnd"));const r=Array.isArray(i)?l=>i.includes(l):l=>i[l],n=r("lint"),s=r("highlightSpecialChars")&&r("highlightWhitespace"),o=this.lang==="mediawiki";if(s!==void 0&&Mn(this.$toolbar,"invisibleChars",s),this.view){super.prefer(i),n!==void 0&&this.defaultLint(n);return}else{if(!Z(this,tt)||!Z(this,De))throw new Error("The editor is not initialized!");n!==void 0&&Z(this,De).lint&&Z(this,De).lint(n)}o&&JZ(Z(this,tt),r("escape"));const a={};for(const[l,c,h,f]of rA){const u=r(l);if(u!==void 0)if(typeof c=="string")a[c]=u?f:h;else for(const d of c)a[d]=u?f:h}Z(this,tt).updateOptions(a)}static async fromTextArea(i,r,n,s){var d;if(!r&&n===void 0){const{wgAction:p,wgNamespaceNumber:g,wgPageContentModel:b,wgCanonicalSpecialPageName:x}=mw.config.get();p==="edit"||p==="submit"?(n=g,r=g===274?"html":b.toLowerCase()):x==="Upload"?(n=6,r="wikitext"):x==="ExpandTemplates"&&i.name==="wpInput"?(n=0,r="wikitext"):(await mw.loader.using("oojs-ui-windows"),r=(d=await OO.ui.prompt(Ye("contentmodel"))||void 0)==null?void 0:d.toLowerCase())}let o;r&&r in Kp&&(r==="sanitized-css"&&(o=r),r=Kp[r]);const a=$(i),l=r==="mediawiki"||r==="html";if(je.has("wikiEditor")&&ql(i))try{await eA(a,i.readOnly,l)}catch(p){p instanceof Error&&p.message==="no-wikiEditor"&&mw.notify(Ye(p.message),{type:"error"}),je.delete("wikiEditor")}const c=!St.has(tA.has(r)?r:"wiki"),h=c&&l,f=new Ci(i,h?void 0:r,n,o,c,s);f.dialect=o,a.data("CodeMirror6",f),h&&await f.setLanguage(r,await Vp(fh)),await Promise.all([J0,Z(f,ss)]),f.prefer([...je]);const u=localStorage.getItem(Pa);return u&&f.setIndent(u),f}},li=new WeakMap,Qt=new WeakMap,De=new WeakMap,tt=new WeakMap,ss=new WeakMap,Wr=new WeakMap,os=new WeakMap,Ht=new WeakSet,Oh=function(i){this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:_Z(i),isbnParser:LZ},i))},iy=async function(){var h,f,u,d,p;typeof monaco!="object"&&await $.ajax(`${as}/npm/monaco-wiki@${(f=(h=mw.libs.wphl)==null?void 0:h.monacoVersion)!=null?f:"latest"}/dist/all.min.js`,{dataType:"script",cache:!0});const{textarea:i,lang:r}=this,n=(u=iA[r])!=null?u:r,s=n==="wikitext",o=s||n==="html"||n==="plaintext",a=Z(this,Wr).includes(" "),l="monaco-container";await monaco;for(const g of monaco.editor.getEditors())g.getContainerDomNode().classList.contains(l)&&!((d=g.getDomNode())!=null&&d.isConnected)&&((p=g.getModel())==null||p.dispose(),g.dispose());ze(this,De,monaco.editor.createModel(i.value,n)),ze(this,Qt,document.createElement("div")),Z(this,Qt).className=l,Ze(this,Ht,bh).call(this),i.before(Z(this,Qt)),i.style.display="none",ze(this,tt,monaco.editor.create(Z(this,Qt),{model:Z(this,De),automaticLayout:!0,theme:"monokai",readOnly:i.readOnly,wordWrap:o?"on":"off",wordBreak:"keepAll",tabSize:a?4:Number(Z(this,Wr)),insertSpaces:!a,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(i).fontSize),unicodeHighlight:{ambiguousCharacters:!s&&n!=="html"&&n!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let c;Z(this,De).onDidChangeContent(()=>{clearTimeout(c),c=setTimeout(()=>{i.value=Z(this,De).getValue()},400)}),Mn(this.$toolbar,"lineWrapping",o)},bh=function(){const{textarea:{offsetHeight:i,style:{height:r}}}=this;Z(this,Qt).style.height=i?`${i}px`:r},Da(Ci,"version",Ko),Da(Ci,"instances",di),Ci),nA="2.29",sA=["bracketMatching"];mw.loader.load(`${as}/${Ho}/mediawiki.css`,"text/css");$.valHooks.textarea={get(t){const e=di.get(t);return e!=null&&e.visible?e.getContent():t.value},set(t,e){const i=di.get(t);i!=null&&i.visible?i.setContent(e):t.value=e}};document.body.addEventListener("click",t=>{t.target instanceof HTMLTextAreaElement&&t.shiftKey&&!di.has(t.target)&&(t.preventDefault(),Ca.fromTextArea(t.target))});(async()=>{var e;const t={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"),VZ(as)]),mw.hook("wiki-codemirror6").add(Gp),mw.hook("wiki-codemirror6.setting").add(Gp),mw.util.addPortletLink((e=t[mw.config.get("skin")])!=null?e:"p-cactions","#",Ye("title"),"cm-settings").addEventListener("click",i=>{i.preventDefault();const r=".cm-editor+textarea,.monaco-container+textarea",n=[...document.querySelectorAll(r)];GZ(n.map(s=>di.get(s)))}),NZ(nA,sA)})();Object.assign(globalThis,{CodeMirror6:Ca});/**
|
|
42
|
+
`:"");if(o!==void 0)mh.setSelection.call(this,{start:o,end:a});else if(r&&n&&!t&&!i&&/^\s*=.*=\s*$/u.test(e)){const u=c.getSelection();return c.executeEdits("encapsulateSelection",[{range:u,text:h(u,e),forceMoveMarkers:!0}]),this}const f=c.getSelections().map(u=>{const d=n||u.isEmpty()?e:l.getValueInRange(u),p=h(u,L0(d,t,i,s));return{range:u,text:p,forceMoveMarkers:!0}});return c.executeEdits("encapsulateSelection",f),this},getCaretPosition(t){const{editor:e,model:i}=Be(this),r=e.getSelection(),n=i.getOffsetAt(r.getEndPosition());return t!=null&&t.startAndEnd?[i.getOffsetAt(r.getStartPosition()),n]:n},scrollToCaretPosition(){const{editor:t}=Be(this);return t.revealPosition(t.getPosition()),this}},BZ=(()=>{const t=["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(t),t})(),B0="codemirror-mediawiki-i18n",Ho="npm/@bhsd/codemirror-mediawiki@2.29.2",Ko=Ho.slice(Ho.lastIndexOf("@")+1),Rm,Wm,V0=(Wm=(Rm=mw.language)==null?void 0:Rm.getFallbackLanguageChain())!=null?Wm:[mw.config.get("wgUserLanguage")],Em,Hn=(Em=_i(B0))!=null?Em:{},{version:Np}=Hn,VZ=async t=>{try{await zm(`${t}/${Ho}/i18n`,Ko,V0,B0,Hn)}catch(e){e instanceof Error&&(mw.notify(e.message,{type:"error"}),console.error(e))}for(const[e,i]of Object.entries(Hn))e.endsWith("-mac")?vf&&mw.messages.set(`cm-mw-${e.slice(0,-4)}`,i):mw.messages.set(`cm-mw-${e}`,i)},Ye=(t,...e)=>mw.msg(`cm-mw-${t}`,...e),N0=t=>(t.find("a").add(t.filter("a")).attr("target","_blank"),t);function gh(t,e){const i=mw.message(`cm-mw-${t}`);return e?i.parse():N0(i.parseDom())}var Ip=async(t,...e)=>{const i=N0($("<p>",{html:Ye(t,...e)}));return await mw.notify(i,{type:"success",autoHideSeconds:"long"}),i},NZ=async(t,e)=>{let i;Np?e.length>0&&!Lm(Np,t)&&(i=await Ip("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(r=>`<li>${gh(`addon-${r}`,!0)}</li>`).join(""))):i=await Ip("welcome"),i==null||i.find("#settings").click(r=>{r.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Gp=t=>{t.localize(Object.fromEntries(Object.entries(Hn).filter(([e])=>e.startsWith("phrase-")).map(([e,i])=>[e.slice(7).replace(/-/gu," "),i])))},I0="codemirror-mediawiki-addons",G0="codemirror-mediawiki-monaco",kf=["wiki","javascript","css","lua","json"],IZ=["Wikitext","JavaScript","CSS","Lua","JSON"],U0="codemirror-mediawiki-wikilint",Jo=["ESLint","Stylelint"],Mm,Nr=((Mm=mw.config.get("wgUserGroups"))==null?void 0:Mm.includes("user"))&&mw.config.get("wgUserName"),F0=Nr?`User:${Nr}/codemirror-mediawiki.json`:void 0,Pa="codemirror-mediawiki-indent",je=new Set(_i(I0)),Xm,St=new Set((Xm=_i(G0))!=null?Xm:je.has("useMonaco")?kf:[]),Dm,Vt=(Dm=_i(U0))!=null?Dm:{},Pi=new Map(Jo.map(t=>[t,_i(`codemirror-mediawiki-${t}`)])),un,Ml,Fs,Hs,Ks,qm,ni=(qm=localStorage.getItem(Pa))!=null?qm:"",Xl={},Up=new Map,H0=(t,e)=>{const i=t==="http"||t==="okay-but-empty"?`MediaWiki API request failed: ${t}`:$("<ul>",{html:e.errors.map(({html:r})=>$("<li>",{html:r}))});mw.notify(i,{type:"error",autoHideSeconds:"long"})},K0=(async()=>{if(Nr)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),J0=(async()=>{if(!Nr)return;const t={action:"query",prop:"revisions",titles:F0,rvprop:"content",rvlimit:1};(await K0).get(t).then(e=>{var r,n;const{query:{pages:[i]}}=e;if(i!=null&&i.revisions){const s=JSON.parse(i.revisions[0].content);if(!((r=s.addons)!=null&&r.includes("save")))return;je.clear();for(const o of s.addons)je.add(o);St.clear();for(const o of(n=s.useMonaco)!=null?n:je.has("useMonaco")?kf:[])St.add(o);s.indent&&localStorage.setItem(Pa,s.indent);for(const o of Jo)s[o]&&Pi.set(o,s[o]);s.wikilint&&Object.assign(Vt,s.wikilint)}},H0)})(),GZ=async t=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await J0,un)Fs.setValue([...je]),Hs.setValue([...St]),Ks.setValue(ni);else{un=new OO.ui.MessageDialog({id:"cm-preference"}),un.$element.css("z-index","801");const i=new OO.ui.WindowManager;i.$element.appendTo(document.body),i.addWindows([un]),Ml=new OO.ui.IndexLayout;const r=new OO.ui.TabPanelLayout("main",{label:Ye("title")}),n=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),s={};for(const c of Jo){const h=Pi.get(c);Xl[c]=new OO.ui.MultilineTextInputWidget({value:h?JSON.stringify(h,null,ni||" "):""});const f=new OO.ui.FieldLayout(Xl[c],{label:Ye(`${c}-config`),align:"top"}),u=new OO.ui.TabPanelLayout(c,{label:c,$content:f.$element});u.on("active",d=>{const[p]=u.$element.find("textarea");d&&!di.has(p)&&(async()=>{const{editor:g}=await Ca.fromTextArea(p,"json");g&&(g.getContainerDomNode().style.height=`${Math.max(g.getContentHeight(),400)}px`)})()}),s[c]=u}Ml.addTabPanels([r,n,...Object.values(s)],0),Fs=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(Hn).filter(c=>c!=="addon-indent"&&c!=="addon-useMonaco"&&c.startsWith("addon-")&&!c.endsWith("-mac")).map(c=>({data:c.slice(6),label:gh(c),disabled:c==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||c==="addon-save"&&!Nr}))],value:[...je]}),Hs=new OO.ui.CheckboxMultiselectInputWidget({options:kf.map((c,h)=>({data:c,label:IZ[h]})),value:[...St]}),Ks=new OO.ui.TextInputWidget({value:ni,placeholder:String.raw`\t`});const o=new OO.ui.FieldLayout(Fs,{label:Ye("label"),align:"top"}),a=new OO.ui.FieldLayout(Hs,{label:Ye("addon-useMonaco"),align:"top"}),l=new OO.ui.FieldLayout(Ks,{label:Ye("addon-indent")});r.$element.append(o.$element,a.$element,l.$element,$("<p>",{html:Ye("feedback","codemirror-mediawiki")})),n.$element.append(...BZ.map(c=>{var d,p;const h=c==="no-arg"?"0":"1",f=new OO.ui.DropdownInputWidget({options:[{data:"0",label:Ye("wikilint-off")},{data:"1",label:Ye("wikilint-error")},{data:"2",label:Ye("wikilint-on")}],value:(d=Vt[c])!=null?d:h}),u=new OO.ui.FieldLayout(f,{label:c});return Up.set(c,f),(p=Vt[c])!=null||(Vt[c]=h),u.$element}),$("<p>",{html:Ye("feedback","wikiparser-node")}))}const e=await un.open({message:Ml.$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"){const i=ni,r=je.has("save");ni=Ks.getValue();let n=ni!==i;if(n){for(const a of t)a==null||a.setIndent(ni||" ");localStorage.setItem(Pa,ni)}for(const[a,l]of Up){const c=l.getValue();n||(n=c!==Vt[a]),Vt[a]=c}Zi(U0,Vt);const s=[];for(const a of Jo)try{const l=JSON.parse(Xl[a].getValue().trim()||"null");n||(n=JSON.stringify(l)!==JSON.stringify(Pi.get(a))),Pi.set(a,l),Zi(`codemirror-mediawiki-${a}`,l)}catch{s.push(a)}s.length>0&&OO.ui.alert(Ye("json-error",s.join(Ye("and"))));let o=Hs.getValue();if(o.length!==St.size||!o.every(a=>St.has(a))){n=!0,St.clear();for(const a of o)St.add(a);Zi(G0,o)}if(je.delete("useMonaco"),o=Fs.getValue(),o.length!==je.size||!o.every(a=>je.has(a))){n=!0,je.clear();for(const a of o)je.add(a);for(const a of t)a==null||a.prefer(o)}if(St.size>0&&je.add("useMonaco"),o=[...je],Zi(I0,o),n&&Nr&&(r||je.has("save"))){const a={action:"edit",title:F0,text:JSON.stringify({addons:o,useMonaco:[...St],indent:ni,wikilint:Vt,ESLint:Pi.get("ESLint"),Stylelint:Pi.get("Stylelint")}),summary:Ye("save-summary")};(await K0).postWithToken("csrf",a).then(()=>{mw.notify(gh("save-success"),{type:"success"})},H0)}}},Dl=new Map,UZ=(t,e)=>async(i,r=0,n)=>{n&&(i=e+i);try{const[,s]=await t.get({action:"opensearch",search:i,namespace:r,limit:"max"});if(n){const{length:o}=e;return s.map(a=>[a.slice(o)])}return r===0?s.map(o=>[o]):s.map(o=>[new mw.Title(o).getMainText()])}catch{return[]}},FZ=(t,e)=>async i=>{var r,n;i.startsWith("/")&&(i=e+i);try{if(i=new mw.Title(i,10).getPrefixedDb(),Dl.has(i))return Dl.get(i);const{pages:s}=await t.get({action:"templatedata",titles:i,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),o=Object.entries((n=(r=Object.values(s)[0])==null?void 0:r.params)!=null?n:{}),a=[];for(const[l,{aliases:c,label:h}]of o){const f=h!=null?h:"";a.push([l,f],...c.map(u=>[u,f]))}return Dl.set(i,a),a}catch{return[]}},HZ=async t=>{await mw.loader.using(["mediawiki.api","mediawiki.Title"]);const e=new mw.Api({parameters:{formatversion:2}});return{linkSuggest:UZ(e,t),paramSuggest:FZ(e,t)}},Fp=(t,e,i,r,n)=>({id:t,label:e,keybindings:[monaco.KeyMod.CtrlCmd|monaco.KeyCode[i]],contextMenuGroupId:"1_modification",run(s){const o=s.getModel(),a=s.getSelections().filter(l=>!l.isEmpty());if(a.length===0)s.trigger(t,r,void 0);else{const l=a.map(c=>({range:c,text:n(o.getValueInRange(c))}));s.executeEdits(t,l)}}}),KZ=()=>[Fp("escape.html","Escape HTML Entity","BracketLeft","editor.action.indentLines",O0),Fp("escape.uri","URI Encode/Decode","BracketRight","editor.action.outdentLines",b0)],dn=new WeakMap,Js,JZ=(t,e)=>{if(e&&!dn.has(t))Js!=null||(Js=KZ()),dn.set(t,Js.map(i=>t.addAction(i)));else if(e===!1&&dn.has(t)){for(const i of dn.get(t))i.dispose();dn.delete(t)}};function ey(t,e,i){const r=t==null?void 0:t.find(`${Ta(e==="toggle"?"":"more")}>[rel=${e}]`);return i?r==null?void 0:r.children().addBack():r}var Hp=(t,e)=>ey(t,e).hasClass("tool-active"),Ta=t=>Array.isArray(t)?t.map(e=>Ta(e)).join():`.group-codemirror6${t&&`-${t}`}`,Mn=(t,e,i)=>{var r;(r=ey(t,e,!0))==null||r.toggleClass("tool-active",i)},ty=(t,e)=>{t&&(Mn(t,"toggle",e),t.find(Ta(["format","more"])).toggle(e),t.find(".group-codeeditor-main").toggle(e===void 0?void 0:!e))},wi=(t,e,i)=>({type:"button",oouiIcon:t,label:i,action:{type:"callback",execute(r){const n=Be(r.$textarea);if(typeof e=="function"){e(r,n);return}const[s,o,a]=e;a&&!n.visible?a(r):n.view?s(n.view):n.editor&&n.editor.trigger("wikiEditor",o,void 0)}}}),eA=async(t,e,i)=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");let r=t.data("wikiEditorContext");const n=new Promise(a=>{if(r){a();return}t.on("wikiEditor-toolbar-doneInitialSections",()=>{a()})}),s=mw.loader.getState("ext.codeEditor")!==null;if(await Promise.all([mw.loader.using(["ext.wikiEditor","oojs-ui.styles.icons-interactions",...s?["ext.codeEditor.icons"]:[]]),s?new mw.Api().loadMessagesIfMissing(["codeeditor-indent","codeeditor-outdent","codeeditor-invisibleChars-toggle","codeeditor-lineWrapping-toggle","codeeditor-gotoline"]):!1]),r)r.modules.toolbar.$toolbar.find(".group-insert>.tool:not([rel])").hide();else if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(t);else{const{wikiEditor:{modules:{dialogs:{config:a}}}}=$;t.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...a.getDefaultConfig()}),a.replaceIcons(t)}await n,r!=null||(r=t.data("wikiEditorContext"));const{$toolbar:o}=r.modules.toolbar;t.wikiEditor("addToToolbar",{section:"main",groups:{codemirror6:{tools:{toggle:wi("highlight",(a,l)=>{l.toggle()},"CodeMirror 6")}},...s?{"codemirror6-format":{tools:{indent:wi("indent",[fa,"editor.action.indentLines"],mw.msg("codeeditor-indent")),outdent:wi("outdent",[ua,"editor.action.outdentLines"],mw.msg("codeeditor-outdent"))}}}:{},"codemirror6-more":{tools:{...s?{invisibleChars:wi("pilcrow",(a,l)=>{const c=!Hp(o,"invisibleChars");l.prefer({highlightSpecialChars:c,highlightWhitespace:c})},mw.msg("codeeditor-invisibleChars-toggle")),lineWrapping:wi("wrapping",(a,l)=>{const c=!Hp(o,"lineWrapping");l.setLineWrapping(c),Mn(o,"lineWrapping",c)},mw.msg("codeeditor-lineWrapping-toggle")),gotoLine:wi("gotoLine",[iv,"editor.action.gotoLine"],mw.msg("codeeditor-gotoline"))}:{},preferences:wi("settings",()=>{document.getElementById("cm-settings").click()},Ye("title"))}},"codemirror6-search":{tools:{cmSearch:wi("articleSearch",[rf,"editor.action.startFindReplaceAction",a=>{$.wikiEditor.modules.dialogs.api.openDialog(a,"search-and-replace")}],mw.msg("wikieditor-toolbar-tool-replace"))}}}}),ty(o,!0),o.toggleClass("codemirror-readonly",e).toggleClass("codemirror-wiki",i).toggleClass("codemirror-coding",!i)},eo={},tA=new Set(["javascript","css","lua","json"]),Kp={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki","proofread-page":"mediawiki"},iA={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},rA=[["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"}]],ql=t=>!t.closest("#cm-preference"),Ci,li,Qt,De,tt,ss,Wr,os,Ht,Oh,iy,bh,Ca=(Ci=class extends j0{constructor(i,r,n,s,o=!0,a=mw.config.get("wgPageName")){var c;if(di.has(i))throw new RangeError("The textarea has already been replaced by CodeMirror.");const l=h=>{h.textarea===i&&h.destroy()};mw.hook("ext.CodeMirror.ready").add(l);super(i,r,s,!1);we(this,Ht);we(this,li,!0);we(this,Qt);we(this,De);we(this,tt);we(this,ss);we(this,Wr," ");we(this,os);this.ns=n,this.page=a,this.$textarea=$(i),ze(this,os,l),di.set(i,this),this.initialize(s,!o),ql(i)?(mw.hook("wiki-codemirror6").fire(this),i.id==="wpTextbox1"&&((c=i.form)==null||c.addEventListener("submit",()=>{const h=document.querySelector("#wpScrolltop");h&&this.view&&Z(this,li)&&(h.value=String(this.view.scrollDOM.scrollTop))}))):mw.hook("wiki-codemirror6.setting").fire(this)}get visible(){return Z(this,li)&&this.textarea.isConnected}get model(){return Z(this,De)}get editor(){return Z(this,tt)}get $toolbar(){var i;return(i=this.$textarea.data("wikiEditorContext"))==null?void 0:i.modules.toolbar.$toolbar}initialize(i,r){if(Z(this,De))throw new Error("A Monaco editor is already initialized!");if(r){ze(this,ss,Ze(this,Ht,iy).call(this)),this.$textarea.data("jquery.textSelection",mh);return}super.initialize(i),Ze(this,Ht,Oh).call(this,i);const n=[...this.textarea.classList].find(s=>s.startsWith("mw-editfont-"));n&&this.view.contentDOM.classList.add(n),Mn(this.$toolbar,"lineWrapping",!0)}toggle(i=!Z(this,li)){const{textarea:r,$textarea:n}=this;Z(this,De)?i&&!Z(this,li)?(Z(this,De).setValue(r.value),Ze(this,Ht,bh).call(this),Z(this,Qt).style.display="",r.style.display="none",n.data("jquery.textSelection",mh)):!i&&Z(this,li)&&(Z(this,Qt).style.display="none",r.style.display="",n.removeData("jquery.textSelection")):(super.toggle(i),n.data("jquery.textSelection",i&&z0)),ze(this,li,i),ty(this.$toolbar,i)}destroy(){var i;this.visible&&this.toggle(!1),Z(this,tt)&&(Z(this,tt).dispose(),Z(this,De).dispose(),Z(this,Qt).remove()),this.$textarea.data("CodeMirror6",null),(i=this.$toolbar)==null||i.removeClass(["readonly","wiki","coding"].map(r=>`codemirror-${r}`).join(" ")).find(Ta(["","format","more","search"])).remove(),mw.hook("ext.CodeMirror.ready").remove(Z(this,os)),super.destroy()}async setLanguage(i,r){var s;if(Z(this,De))throw new Error("Cannot change the language of a Monaco editor!");const n=i==="mediawiki"||i==="html";n&&Object.assign(r,await HZ(this.page)),super.setLanguage(i,r),Ze(this,Ht,Oh).call(this,r),(s=this.$toolbar)==null||s.toggleClass("codemirror-coding",!n)}setContent(i){Z(this,De)?Z(this,De).setValue(i):super.setContent(i)}getContent(){return this.view?this.view.state.doc.toString():Z(this,De).getValue()}setIndent(i){if(Z(this,tt)){ze(this,Wr,i);const r=i.includes(" ");Z(this,tt).updateOptions({tabSize:r?4:Number(i),insertSpaces:!r})}else super.setIndent(i)}setLineWrapping(i){Z(this,tt)?Z(this,tt).updateOptions({wordWrap:i?"on":"off"}):super.setLineWrapping(i)}async getLinter(i){const r=await super.getLinter(i);return eo[this.lang]=r,r}async defaultLint(i,r=this.ns){if(!i){this.lint();return}const{lang:n}=this,s=n in eo,o=n==="mediawiki";let a,l;if(typeof r=="number"?o&&r!==10&&r!==828&&r!==2?l={include:!1}:n==="javascript"&&(l={...VT,...r===8||r===2300?{parserOptions:{ecmaVersion:8}}:{}}):a=r,a||!s){if(o){const c={getConfig:this.getWikiConfig,i18n:V0};a=a?{...c,...a}:h=>h?Vt:{...c,...l}}else n==="javascript"?a!=null||(a=()=>({...l,...Pi.get("ESLint")})):n==="css"&&(a!=null||(a=()=>Pi.get("Stylelint")));await this.getLinter(a)}eo[n]&&this.lint(eo[n])}async getWikiConfig(){const[i,r]=await Promise.all([Vp(fh),wikiparse.getConfig()]);return jZ(r,i)}prefer(i){!ql(this.textarea)&&Array.isArray(i)&&(i=i.filter(l=>l!=="scrollPastEnd"));const r=Array.isArray(i)?l=>i.includes(l):l=>i[l],n=r("lint"),s=r("highlightSpecialChars")&&r("highlightWhitespace"),o=this.lang==="mediawiki";if(s!==void 0&&Mn(this.$toolbar,"invisibleChars",s),this.view){super.prefer(i),n!==void 0&&this.defaultLint(n);return}else{if(!Z(this,tt)||!Z(this,De))throw new Error("The editor is not initialized!");n!==void 0&&Z(this,De).lint&&Z(this,De).lint(n)}o&&JZ(Z(this,tt),r("escape"));const a={};for(const[l,c,h,f]of rA){const u=r(l);if(u!==void 0)if(typeof c=="string")a[c]=u?f:h;else for(const d of c)a[d]=u?f:h}Z(this,tt).updateOptions(a)}static async fromTextArea(i,r,n,s){var d;if(!r&&n===void 0){const{wgAction:p,wgNamespaceNumber:g,wgPageContentModel:b,wgCanonicalSpecialPageName:x}=mw.config.get();p==="edit"||p==="submit"?(n=g,r=g===274?"html":b.toLowerCase()):x==="Upload"?(n=6,r="wikitext"):x==="ExpandTemplates"&&i.name==="wpInput"?(n=0,r="wikitext"):(await mw.loader.using("oojs-ui-windows"),r=(d=await OO.ui.prompt(Ye("contentmodel"))||void 0)==null?void 0:d.toLowerCase())}let o;r&&r in Kp&&(r==="sanitized-css"&&(o=r),r=Kp[r]);const a=$(i),l=r==="mediawiki"||r==="html";if(je.has("wikiEditor")&&ql(i))try{await eA(a,i.readOnly,l)}catch(p){p instanceof Error&&p.message==="no-wikiEditor"&&mw.notify(Ye(p.message),{type:"error"}),je.delete("wikiEditor")}const c=!St.has(tA.has(r)?r:"wiki"),h=c&&l,f=new Ci(i,h?void 0:r,n,o,c,s);f.dialect=o,a.data("CodeMirror6",f),h&&await f.setLanguage(r,await Vp(fh)),await Promise.all([J0,Z(f,ss)]),f.prefer([...je]);const u=localStorage.getItem(Pa);return u&&f.setIndent(u),f}},li=new WeakMap,Qt=new WeakMap,De=new WeakMap,tt=new WeakMap,ss=new WeakMap,Wr=new WeakMap,os=new WeakMap,Ht=new WeakSet,Oh=function(i){this.lang==="mediawiki"&&(this.langConfig=$.extend(!0,{titleParser:_Z(i),isbnParser:LZ},i))},iy=async function(){var h,f,u,d,p;typeof monaco!="object"&&await $.ajax(`${as}/npm/monaco-wiki@${(f=(h=mw.libs.wphl)==null?void 0:h.monacoVersion)!=null?f:"latest"}/dist/all.min.js`,{dataType:"script",cache:!0});const{textarea:i,lang:r}=this,n=(u=iA[r])!=null?u:r,s=n==="wikitext",o=s||n==="html"||n==="plaintext",a=Z(this,Wr).includes(" "),l="monaco-container";await monaco;for(const g of monaco.editor.getEditors())g.getContainerDomNode().classList.contains(l)&&!((d=g.getDomNode())!=null&&d.isConnected)&&((p=g.getModel())==null||p.dispose(),g.dispose());ze(this,De,monaco.editor.createModel(i.value,n)),ze(this,Qt,document.createElement("div")),Z(this,Qt).className=l,Ze(this,Ht,bh).call(this),i.before(Z(this,Qt)),i.style.display="none",ze(this,tt,monaco.editor.create(Z(this,Qt),{model:Z(this,De),automaticLayout:!0,theme:"monokai",readOnly:i.readOnly,wordWrap:o?"on":"off",wordBreak:"keepAll",tabSize:a?4:Number(Z(this,Wr)),insertSpaces:!a,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(i).fontSize),unicodeHighlight:{ambiguousCharacters:!s&&n!=="html"&&n!=="plaintext"},multiCursorModifier:"ctrlCmd"}));let c;Z(this,De).onDidChangeContent(()=>{clearTimeout(c),c=setTimeout(()=>{i.value=Z(this,De).getValue()},400)}),Mn(this.$toolbar,"lineWrapping",o)},bh=function(){const{textarea:{offsetHeight:i,style:{height:r}}}=this;Z(this,Qt).style.height=i?`${i}px`:r},Da(Ci,"version",Ko),Da(Ci,"instances",di),Ci),nA="2.29",sA=["bracketMatching"];mw.loader.load(`${as}/${Ho}/mediawiki.css`,"text/css");$.valHooks.textarea={get(t){const e=di.get(t);return e!=null&&e.visible?e.getContent():t.value},set(t,e){const i=di.get(t);i!=null&&i.visible?i.setContent(e):t.value=e}};document.body.addEventListener("click",t=>{t.target instanceof HTMLTextAreaElement&&t.shiftKey&&!di.has(t.target)&&(t.preventDefault(),Ca.fromTextArea(t.target))});(async()=>{var e;const t={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"),VZ(as)]),mw.hook("wiki-codemirror6").add(Gp),mw.hook("wiki-codemirror6.setting").add(Gp),mw.util.addPortletLink((e=t[mw.config.get("skin")])!=null?e:"p-cactions","#",Ye("title"),"cm-settings").addEventListener("click",i=>{i.preventDefault();const r=".cm-editor+textarea,.monaco-container+textarea",n=[...document.querySelectorAll(r)];GZ(n.map(s=>di.get(s)))}),NZ(nA,sA)})();Object.assign(globalThis,{CodeMirror6:Ca});/**
|
|
43
43
|
* @file Configuration for the MediaWiki highlighting mode for CodeMirror.
|
|
44
44
|
* @author MusikAnimal and others
|
|
45
45
|
* @license GPL-2.0-or-later
|
package/i18n/en.json
CHANGED
package/i18n/zh-hans.json
CHANGED
package/i18n/zh-hant.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bhsd/codemirror-mediawiki",
|
|
3
|
-
"version": "2.29.
|
|
3
|
+
"version": "2.29.2",
|
|
4
4
|
"description": "Modified CodeMirror mode based on wikimedia/mediawiki-extensions-CodeMirror",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mediawiki",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"browser": "dist/main.min.js",
|
|
22
22
|
"main": "./dist/codemirror.js",
|
|
23
|
+
"module": "./dist/codemirror.js",
|
|
23
24
|
"types": "./dist/codemirror.d.ts",
|
|
24
25
|
"type": "module",
|
|
25
26
|
"sideEffects": false,
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
"bundle:core": "esbuild ./src/codemirror.ts --charset=utf8 --bundle --format=esm --outfile=build/main.js",
|
|
33
34
|
"bundle:wiki": "esbuild ./mw/index.ts --charset=utf8 --bundle --format=esm --outfile=build/wiki.js",
|
|
34
35
|
"build:css": "esbuild ./css/index.css --bundle --minify --outfile=mediawiki.css",
|
|
35
|
-
"build:core": "npm run bundle:core && esbuild ./build/main.js --charset=utf8 --minify --target=es2019 --format=esm --sourcemap --outfile=dist/main.min.js && tsc && rm dist/*-page.{js,d.ts}",
|
|
36
|
+
"build:core": "npm run bundle:core && esbuild ./build/main.js --charset=utf8 --minify --target=es2019 --format=esm --sourcemap --outfile=dist/main.min.js && tsc && esbuild src/config.ts --bundle --format=esm --external:@lezer/highlight --outfile=dist/config.js --legal-comments=inline && rm dist/*-page.{js,d.ts}",
|
|
36
37
|
"build:mw": "esbuild ./build/wiki.js --charset=utf8 --minify --target=es2019 --format=esm --outfile=dist/mw.min.js && esbuild ./mw/config.ts --charset=utf8 --bundle --target=es2019 --format=esm --outfile=dist/mwConfig.js",
|
|
37
38
|
"build:wiki": "npm run bundle:wiki && esbuild ./build/wiki.js --charset=utf8 --minify --target=es2019 --format=iife --sourcemap --outfile=dist/wiki.min.js",
|
|
38
39
|
"build:gh-page": "bash build.sh",
|
|
@@ -89,7 +90,7 @@
|
|
|
89
90
|
"luacheck-browserify": "^0.7.0",
|
|
90
91
|
"mocha": "^11.1.0",
|
|
91
92
|
"monaco-editor": "^0.52.2",
|
|
92
|
-
"stylelint": "^16.
|
|
93
|
+
"stylelint": "^16.21.0",
|
|
93
94
|
"stylelint-config-recommended": "^16.0.0",
|
|
94
95
|
"types-mediawiki": "^1.9.1",
|
|
95
96
|
"typescript": "^5.8.2"
|