@bhsd/codemirror-mediawiki 2.12.0 → 2.12.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.
@@ -1,3 +1,29 @@
1
1
  import { StateField } from '@codemirror/state';
2
2
  import type { DecorationSet } from '@codemirror/view';
3
+ import type { EditorState } from '@codemirror/state';
4
+ import type { MatchResult } from '@codemirror/language';
5
+ import type { SyntaxNode } from '@lezer/common';
6
+ declare type TagType = 'ext' | 'html';
7
+ declare interface TagMatchResult extends MatchResult {
8
+ start: Tag;
9
+ end?: Tag;
10
+ }
11
+ declare class Tag {
12
+ type: TagType;
13
+ name: string;
14
+ first: SyntaxNode;
15
+ last: SyntaxNode;
16
+ get closing(): boolean;
17
+ get selfClosing(): boolean;
18
+ get from(): number;
19
+ get to(): number;
20
+ constructor(type: TagType, name: string, first: SyntaxNode, last: SyntaxNode);
21
+ }
22
+ /**
23
+ * 匹配标签
24
+ * @param state
25
+ * @param pos 位置
26
+ */
27
+ export declare const matchTag: (state: EditorState, pos: number) => TagMatchResult | null;
3
28
  export declare const tagMatchingState: StateField<DecorationSet>;
29
+ export {};
@@ -4,24 +4,27 @@
4
4
  * @see https://gerrit.wikimedia.org/g/mediawiki/extensions/CodeMirror
5
5
  */
6
6
  import { LanguageSupport } from '@codemirror/language';
7
+ export type ApiSuggestions = [string, string?][];
7
8
  /**
8
9
  * 获取维基链接建议
9
10
  * @param search 搜索字符串
10
11
  * @param namespace 命名空间
11
12
  */
12
- export type LinkSuggest = (search: string, namespace?: number) => string[] | Promise<string[]>;
13
+ export type ApiSuggest = (search: string, namespace?: number) => ApiSuggestions | Promise<ApiSuggestions>;
13
14
  export interface MwConfig {
14
15
  readonly tags: Record<string, true>;
15
16
  readonly tagModes: Record<string, string>;
16
17
  urlProtocols: string;
17
18
  functionSynonyms: [Record<string, string>, Record<string, unknown>];
18
19
  doubleUnderscore: [Record<string, unknown>, Record<string, unknown>];
20
+ nsid: Record<string, number>;
19
21
  variants?: string[];
20
22
  img?: Record<string, string>;
21
- nsid: Record<string, number>;
23
+ redirection?: string[];
22
24
  permittedHtmlTags?: string[];
23
25
  implicitlyClosedHtmlTags?: string[];
24
- linkSuggest?: LinkSuggest;
26
+ linkSuggest?: ApiSuggest;
27
+ paramSuggest?: ApiSuggest;
25
28
  }
26
29
  /**
27
30
  * Gets a LanguageSupport instance for the MediaWiki mode.
package/dist/mw.min.js CHANGED
@@ -1,10 +1,10 @@
1
- var ne=(e,i,t)=>{if(!i.has(e))throw TypeError("Cannot "+t)};var g=(e,i,t)=>(ne(e,i,"read from private field"),t?t.call(e):i.get(e)),M=(e,i,t)=>{if(i.has(e))throw TypeError("Cannot add the same private member more than once");i instanceof WeakSet?i.add(e):i.set(e,t)},P=(e,i,t,n)=>(ne(e,i,"write to private field"),n?n.call(e,t):i.set(e,t),t);var F=(e,i,t)=>(ne(e,i,"access private method"),t);import{CodeMirror6 as We,CDN as ee}from"https://testingcf.jsdelivr.net/npm/@bhsd/codemirror-mediawiki@2.12.0/dist/main.min.js";var S=e=>JSON.parse(String(localStorage.getItem(e))),C=(e,i)=>{localStorage.setItem(e,JSON.stringify(i))};var re=S("InPageEditMwConfig")||{},ke=typeof mw=="object"?mw.config.get("wgServerName")+mw.config.get("wgScriptPath"):location.origin,_=re[ke],ye=Number(_==null?void 0:_.time)>Date.now()-86400*1e3*30,oe=(e,i,t)=>{let n=e.filter(i).filter(({"case-sensitive":a})=>a!==t).flatMap(({aliases:a,name:l,"case-sensitive":o})=>a.map(s=>({alias:(o?s:s.toLowerCase()).replace(/:$/u,""),name:l}))),r={};for(let{alias:a,name:l}of n)r[a]=l;return r},be=(e,i)=>[!0,!1].map(t=>oe(e,i,t)),ve=e=>{mw.config.set("extCodeMirrorConfig",e)},se=async()=>{mw.loader.getState("ext.CodeMirror")!==null&&!ye&&await mw.loader.using(mw.loader.getState("ext.CodeMirror.data")?"ext.CodeMirror.data":"ext.CodeMirror");let e=mw.config.get("extCodeMirrorConfig");!e&&ye&&({config:e}=_,ve(e));let i=e&&Object.values(e.functionSynonyms[0]).includes(!0),t=mw.config.get("wgNamespaceIds");if(e!=null&&e.img&&e.variants&&!i)return e.urlProtocols=e.urlProtocols.replace(/\\:/gu,":"),{...e,nsid:t};await mw.loader.using("mediawiki.api");let{query:{general:{variants:n},magicwords:r,extensiontags:a,functionhooks:l,variables:o}}=await new mw.Api().get({meta:"siteinfo",siprop:["general","magicwords",...e&&!i?[]:["extensiontags","functionhooks","variables"]],formatversion:"2"}),s=new Set(["msg","raw","msgnw","subst","safesubst"]);if(e&&!i){let{functionSynonyms:[d]}=e;"subst"in d||Object.assign(d,oe(r,({name:c})=>s.has(c)))}else{e={tagModes:{},tags:{}};for(let c of a)e.tags[c.slice(1,-1)]=!0;let d=new Set([...l,...o,...s]);e.functionSynonyms=be(r,({name:c})=>d.has(c)),e.doubleUnderscore=be(r,({aliases:c})=>c.some(m=>/^__.+__$/u.test(m)))}return e.img=oe(r,({name:d})=>d.startsWith("img_")),e.variants=n?n.map(({code:d})=>d):[],e.nsid=t,e.urlProtocols=mw.config.get("wgUrlProtocols").replace(/\\:/gu,":"),ve(e),re[ke]={config:e,time:Date.now()},C("InPageEditMwConfig",re),e},xe=(e,i)=>{if(mw.config.exists("wikilintConfig"))return mw.config.get("wikilintConfig");let t={...e,ext:Object.keys(i.tags),namespaces:mw.config.get("wgFormattedNamespaces"),nsid:i.nsid,doubleUnderscore:i.doubleUnderscore.map(n=>Object.keys(n).map(r=>r.slice(2,-2))),variants:i.variants,protocol:i.urlProtocols};if([t.parserFunction[0]]=i.functionSynonyms,mw.loader.getState("ext.CodeMirror")===null)for(let[n,r]of Object.entries(i.functionSynonyms[0]))n.startsWith("#")||(t.parserFunction[0][`#${n}`]=r);t.parserFunction[1]=[...Object.keys(i.functionSynonyms[1]),"="];for(let[n,r]of Object.entries(i.img))t.img[n]=r.slice(4);return t};var J="npm/@bhsd/codemirror-mediawiki@2.12.0",K=J.slice(J.lastIndexOf("@")+1),{vendor:Ke,userAgent:Ue,maxTouchPoints:Be,platform:Ge}=navigator,ce=Ke.includes("Apple Computer")&&(Ue.includes("Mobile/")||Be>2)||Ge.includes("Mac"),Ee="codemirror-mediawiki-i18n",Xe={zh:"zh-hans","zh-hans":"zh-hans","zh-cn":"zh-hans","zh-my":"zh-hans","zh-sg":"zh-hans","zh-hant":"zh-hant","zh-tw":"zh-hant","zh-hk":"zh-hant","zh-mo":"zh-hant"},ae=Xe[mw.config.get("wgUserLanguage")]||"en",O=S(Ee)||{},{version:le}=O,Le=async e=>{if(O.lang!==ae||le!==K)try{Object.assign(O,await(await fetch(`${e}/${J}/i18n/${ae}.json`)).json()),C(Ee,O)}catch(i){mw.notify(u("i18n-failed",ae),{type:"error"}),console.error(i)}for(let[i,t]of Object.entries(O))i.endsWith("-mac")?ce&&mw.messages.set(`cm-mw-${i.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${i}`,t)},u=(e,...i)=>mw.msg(`cm-mw-${e}`,...i),Se=e=>(e.find("a").add(e.filter("a")).attr("target","_blank"),e);function U(e,i){let t=mw.message(`cm-mw-${e}`);return i?t.parse():Se(t.parseDom())}var Me=e=>e.split(".",2).map(Number),Te=async(e,...i)=>{let t=Se($("<p>",{html:u(e,...i)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},Ce=async(e,i)=>{let t;if(!le)t=await Te("welcome");else if(i.length>0){let[n,r]=Me(e),[a,l]=Me(le);(a<n||a===n&&l<r)&&(t=await Te("welcome-addons",K,String(i.length),i.map(o=>`<li>${U(`addon-${o}`,!0)}</li>`).join("")))}t==null||t.find("#settings").click(n=>{n.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Oe=e=>{let i={};for(let[t,n]of Object.entries(O))t.startsWith("phrase-")&&(i[t.slice(7).replace(/-/gu," ")]=n);e.localize(i)};var Ye=ce?"metaKey":"ctrlKey",de=new WeakMap;function B(e){return e==null?void 0:e.name.replace(/_+/gu," ").trim()}var I=(e,i,t=B(e))=>{for(;B(e[i])===t;)e=e[i];return e},Ze=e=>{if(de.has(e))return de.get(e);let i=t=>{if(!t[Ye])return;let{view:n}=e,{state:r}=n,a=e.getNodeAt(n.posAtCoords(t));if(a){if(a.name.includes("mw-pagename")){t.preventDefault(),t.stopPropagation();let l=B(a),o=r.sliceDoc(I(a,"prevSibling",l).from,I(a,"nextSibling",l).to).trim();o.startsWith("/")&&(o=`:${mw.config.get("wgPageName")}${o}`);let s=0;l.includes("-template-name")?s=10:l.includes("-parserfunction")&&(s=828),open(new mw.Title(o,s).getUrl(void 0),"_blank")}else if(/-extlink-protocol/u.test(a.name))t.preventDefault(),open(r.sliceDoc(a.from,I(a.nextSibling,"nextSibling").to),"_blank");else if(/-extlink(?:_|$)/u.test(a.name)){t.preventDefault();let l=B(a),o=I(a,"prevSibling",l).prevSibling,s=I(a,"nextSibling",l);open(r.sliceDoc(o.from,s.to),"_blank")}}};return de.set(e,i),i},Ae=(e,i)=>{let{contentDOM:t}=e.view,n=Ze(e);i?(mw.loader.load("mediawiki.Title"),t.addEventListener("mousedown",n,{capture:!0}),t.style.setProperty("--codemirror-cursor","pointer")):i===!1&&(t.removeEventListener("mousedown",n,{capture:!0}),t.style.removeProperty("--codemirror-cursor"))};var k=new WeakMap,w=e=>k.get(e[0]),ge={getContents(){return w(this).view.state.doc.toString()},setContents(e){return w(this).setContent(e),this},getSelection(){let{state:e}=w(this).view,{selection:{main:{from:i,to:t}}}=e;return e.sliceDoc(i,t)},setSelection({start:e,end:i=e}){return w(this).view.dispatch({selection:{anchor:e,head:i}}),this},replaceSelection(e){let{view:i}=w(this);return i.dispatch(i.state.replaceSelection(e)),this},encapsulateSelection({pre:e="",peri:i="",post:t="",ownline:n,replace:r,selectPeri:a=!0,splitlines:l,selectionStart:o,selectionEnd:s=o}){let{view:d}=w(this),{state:c}=d,m=(b,f,p)=>{let q=0,z=0;return n&&(b>0&&!/[\n\r]/u.test(c.sliceDoc(b-1,b))&&(p=`
2
- ${p}`,q=1),/[\n\r]/u.test(c.sliceDoc(f,f+1))||(p+=`
3
- `,z=1)),[p,q,z]};if(n&&r&&!e&&!t&&o===void 0&&/^\s*=.*=\s*$/u.test(i)){let{selection:{main:{from:b,to:f}}}=c,[p]=m(b,f,i);return d.dispatch({changes:{from:b,to:f,insert:p},selection:{anchor:b+p.length}}),this}return A.replaceSelections(d,(b,{from:f,to:p})=>{o!==void 0&&(f=o,p=s);let q=a&&f===p,z=r||f===p?i:c.sliceDoc(f,p),[ie,qe,Fe]=m(f,p,l?z.split(`
1
+ var ne=(e,i,t)=>{if(!i.has(e))throw TypeError("Cannot "+t)};var g=(e,i,t)=>(ne(e,i,"read from private field"),t?t.call(e):i.get(e)),M=(e,i,t)=>{if(i.has(e))throw TypeError("Cannot add the same private member more than once");i instanceof WeakSet?i.add(e):i.set(e,t)},P=(e,i,t,n)=>(ne(e,i,"write to private field"),n?n.call(e,t):i.set(e,t),t);var q=(e,i,t)=>(ne(e,i,"access private method"),t);import{CodeMirror6 as We,CDN as ee}from"https://testingcf.jsdelivr.net/npm/@bhsd/codemirror-mediawiki@2.12.2/dist/main.min.js";var L=e=>JSON.parse(String(localStorage.getItem(e))),C=(e,i)=>{localStorage.setItem(e,JSON.stringify(i))};var re=L("InPageEditMwConfig")||{},ke=typeof mw=="object"?mw.config.get("wgServerName")+mw.config.get("wgScriptPath"):location.origin,_=re[ke],ye=Number(_==null?void 0:_.time)>Date.now()-86400*1e3*30,oe=(e,i,t)=>{let n=e.filter(i).filter(({"case-sensitive":a})=>a!==t).flatMap(({aliases:a,name:l,"case-sensitive":o})=>a.map(s=>({alias:(o?s:s.toLowerCase()).replace(/:$/u,""),name:l}))),r={};for(let{alias:a,name:l}of n)r[a]=l;return r},be=(e,i)=>[!0,!1].map(t=>oe(e,i,t)),ve=e=>{mw.config.set("extCodeMirrorConfig",e)},se=async()=>{mw.loader.getState("ext.CodeMirror")!==null&&!ye&&await mw.loader.using(mw.loader.getState("ext.CodeMirror.data")?"ext.CodeMirror.data":"ext.CodeMirror");let e=mw.config.get("extCodeMirrorConfig");!e&&ye&&({config:e}=_,ve(e));let i=e&&Object.values(e.functionSynonyms[0]).includes(!0),t=mw.config.get("wgNamespaceIds");if(e!=null&&e.img&&e.redirection&&e.variants&&!i)return e.urlProtocols=e.urlProtocols.replace(/\\:/gu,":"),{...e,nsid:t};await mw.loader.using("mediawiki.api");let{query:{general:{variants:n},magicwords:r,extensiontags:a,functionhooks:l,variables:o}}=await new mw.Api().get({meta:"siteinfo",siprop:["general","magicwords",...e&&!i?[]:["extensiontags","functionhooks","variables"]],formatversion:"2"}),s=new Set(["msg","raw","msgnw","subst","safesubst"]);if(e&&!i){let{functionSynonyms:[d]}=e;"subst"in d||Object.assign(d,oe(r,({name:c})=>s.has(c)))}else{e={tagModes:{},tags:{}};for(let c of a)e.tags[c.slice(1,-1)]=!0;let d=new Set([...l,...o,...s]);e.functionSynonyms=be(r,({name:c})=>d.has(c)),e.doubleUnderscore=be(r,({aliases:c})=>c.some(m=>/^__.+__$/u.test(m)))}return e.img=oe(r,({name:d})=>d.startsWith("img_")),e.variants=n?n.map(({code:d})=>d):[],e.redirection=r.find(({name:d})=>d==="redirect").aliases,e.nsid=t,e.urlProtocols=mw.config.get("wgUrlProtocols").replace(/\\:/gu,":"),ve(e),re[ke]={config:e,time:Date.now()},C("InPageEditMwConfig",re),e},xe=(e,i)=>{if(mw.config.exists("wikilintConfig"))return mw.config.get("wikilintConfig");let t={...e,ext:Object.keys(i.tags),namespaces:mw.config.get("wgFormattedNamespaces"),nsid:i.nsid,doubleUnderscore:i.doubleUnderscore.map(n=>Object.keys(n).map(r=>r.slice(2,-2))),variants:i.variants,protocol:i.urlProtocols,redirection:i.redirection||e.redirection};if([t.parserFunction[0]]=i.functionSynonyms,mw.loader.getState("ext.CodeMirror")===null)for(let[n,r]of Object.entries(i.functionSynonyms[0]))n.startsWith("#")||(t.parserFunction[0][`#${n}`]=r);t.parserFunction[1]=[...Object.keys(i.functionSynonyms[1]),"="];for(let[n,r]of Object.entries(i.img))t.img[n]=r.slice(4);return t};var I="npm/@bhsd/codemirror-mediawiki@2.12.2",K=I.slice(I.lastIndexOf("@")+1),{vendor:Ke,userAgent:Ue,maxTouchPoints:Be,platform:Ge}=navigator,ce=Ke.includes("Apple Computer")&&(Ue.includes("Mobile/")||Be>2)||Ge.includes("Mac"),Ee="codemirror-mediawiki-i18n",Xe={zh:"zh-hans","zh-hans":"zh-hans","zh-cn":"zh-hans","zh-my":"zh-hans","zh-sg":"zh-hans","zh-hant":"zh-hant","zh-tw":"zh-hant","zh-hk":"zh-hant","zh-mo":"zh-hant"},ae=Xe[mw.config.get("wgUserLanguage")]||"en",O=L(Ee)||{},{version:le}=O,Se=async e=>{if(O.lang!==ae||le!==K)try{Object.assign(O,await(await fetch(`${e}/${I}/i18n/${ae}.json`)).json()),C(Ee,O)}catch(i){mw.notify(u("i18n-failed",ae),{type:"error"}),console.error(i)}for(let[i,t]of Object.entries(O))i.endsWith("-mac")?ce&&mw.messages.set(`cm-mw-${i.slice(0,-4)}`,t):mw.messages.set(`cm-mw-${i}`,t)},u=(e,...i)=>mw.msg(`cm-mw-${e}`,...i),Le=e=>(e.find("a").add(e.filter("a")).attr("target","_blank"),e);function U(e,i){let t=mw.message(`cm-mw-${e}`);return i?t.parse():Le(t.parseDom())}var Me=e=>e.split(".",2).map(Number),Te=async(e,...i)=>{let t=Le($("<p>",{html:u(e,...i)}));return await mw.notify(t,{type:"success",autoHideSeconds:"long"}),t},Ce=async(e,i)=>{let t;if(!le)t=await Te("welcome");else if(i.length>0){let[n,r]=Me(e),[a,l]=Me(le);(a<n||a===n&&l<r)&&(t=await Te("welcome-addons",K,String(i.length),i.map(o=>`<li>${U(`addon-${o}`,!0)}</li>`).join("")))}t==null||t.find("#settings").click(n=>{n.preventDefault(),document.getElementById("cm-settings").dispatchEvent(new MouseEvent("click"))})},Oe=e=>{let i={};for(let[t,n]of Object.entries(O))t.startsWith("phrase-")&&(i[t.slice(7).replace(/-/gu," ")]=n);e.localize(i)};var Ye=ce?"metaKey":"ctrlKey",de=new WeakMap;function B(e){return e==null?void 0:e.name.replace(/_+/gu," ").trim()}var J=(e,i,t=B(e))=>{for(;B(e[i])===t;)e=e[i];return e},Ze=e=>{if(de.has(e))return de.get(e);let i=t=>{if(!t[Ye])return;let{view:n}=e,{state:r}=n,a=e.getNodeAt(n.posAtCoords(t));if(a){if(a.name.includes("mw-pagename")){t.preventDefault(),t.stopPropagation();let l=B(a),o=r.sliceDoc(J(a,"prevSibling",l).from,J(a,"nextSibling",l).to).trim();o.startsWith("/")&&(o=`:${mw.config.get("wgPageName")}${o}`);let s=0;l.includes("-template-name")?s=10:l.includes("-parserfunction")&&(s=828),open(new mw.Title(o,s).getUrl(void 0),"_blank")}else if(/-extlink-protocol/u.test(a.name))t.preventDefault(),open(r.sliceDoc(a.from,J(a.nextSibling,"nextSibling").to),"_blank");else if(/-extlink(?:_|$)/u.test(a.name)){t.preventDefault();let l=B(a),o=J(a,"prevSibling",l).prevSibling,s=J(a,"nextSibling",l);open(r.sliceDoc(o.from,s.to),"_blank")}}};return de.set(e,i),i},Ae=(e,i)=>{let{contentDOM:t}=e.view,n=Ze(e);i?(mw.loader.load("mediawiki.Title"),t.addEventListener("mousedown",n,{capture:!0}),t.style.setProperty("--codemirror-cursor","pointer")):i===!1&&(t.removeEventListener("mousedown",n,{capture:!0}),t.style.removeProperty("--codemirror-cursor"))};var k=new WeakMap,w=e=>k.get(e[0]),ge={getContents(){return w(this).view.state.doc.toString()},setContents(e){return w(this).setContent(e),this},getSelection(){let{state:e}=w(this).view,{selection:{main:{from:i,to:t}}}=e;return e.sliceDoc(i,t)},setSelection({start:e,end:i=e}){return w(this).view.dispatch({selection:{anchor:e,head:i}}),this},replaceSelection(e){let{view:i}=w(this);return i.dispatch(i.state.replaceSelection(e)),this},encapsulateSelection({pre:e="",peri:i="",post:t="",ownline:n,replace:r,selectPeri:a=!0,splitlines:l,selectionStart:o,selectionEnd:s=o}){let{view:d}=w(this),{state:c}=d,m=(b,f,p)=>{let F=0,z=0;return n&&(b>0&&!/[\n\r]/u.test(c.sliceDoc(b-1,b))&&(p=`
2
+ ${p}`,F=1),/[\n\r]/u.test(c.sliceDoc(f,f+1))||(p+=`
3
+ `,z=1)),[p,F,z]};if(n&&r&&!e&&!t&&o===void 0&&/^\s*=.*=\s*$/u.test(i)){let{selection:{main:{from:b,to:f}}}=c,[p]=m(b,f,i);return d.dispatch({changes:{from:b,to:f,insert:p},selection:{anchor:b+p.length}}),this}return A.replaceSelections(d,(b,{from:f,to:p})=>{o!==void 0&&(f=o,p=s);let F=a&&f===p,z=r||f===p?i:c.sliceDoc(f,p),[ie,Fe,qe]=m(f,p,l?z.split(`
4
4
  `).map(_e=>e+_e+t).join(`
5
- `):e+z+t),he=f+ie.length;return q?[ie,f+e.length+qe,he-t.length-Fe]:[ie,he]}),this},getCaretPosition(e){let{state:{selection:{main:{from:i,to:t,head:n}}}}=w(this).view;return e!=null&&e.startAndEnd?[i,t]:n},scrollToCaretPosition(){return w(this).scrollTo(),this}},me={getContents(){return w(this).model.getValue()},setContents(e){return w(this).model.setValue(e),this},getSelection(){let{model:e,editor:i}=w(this);return e.getValueInRange(i.getSelection())},setSelection({start:e,end:i=e}){let{model:t,editor:n}=w(this),{lineNumber:r,column:a}=t.getPositionAt(e),{lineNumber:l,column:o}=t.getPositionAt(i);return n.setSelection({startLineNumber:r,startColumn:a,endLineNumber:l,endColumn:o}),this},replaceSelection(e){let{editor:i}=w(this);return i.executeEdits("replaceSelection",[{range:i.getSelection(),text:e,forceMoveMarkers:!0}]),this},encapsulateSelection({pre:e="",peri:i="",post:t="",ownline:n,replace:r,splitlines:a,selectionStart:l,selectionEnd:o=l}){l!==void 0&&ge.setSelection.call(this,{start:l,end:o});let{model:s,editor:d}=w(this),c=d.getSelection(),m=r||c.isEmpty()?i:s.getValueInRange(c),b=`${n&&c.startColumn>1?`
5
+ `):e+z+t),he=f+ie.length;return F?[ie,f+e.length+Fe,he-t.length-qe]:[ie,he]}),this},getCaretPosition(e){let{state:{selection:{main:{from:i,to:t,head:n}}}}=w(this).view;return e!=null&&e.startAndEnd?[i,t]:n},scrollToCaretPosition(){return w(this).scrollTo(),this}},me={getContents(){return w(this).model.getValue()},setContents(e){return w(this).model.setValue(e),this},getSelection(){let{model:e,editor:i}=w(this);return e.getValueInRange(i.getSelection())},setSelection({start:e,end:i=e}){let{model:t,editor:n}=w(this),{lineNumber:r,column:a}=t.getPositionAt(e),{lineNumber:l,column:o}=t.getPositionAt(i);return n.setSelection({startLineNumber:r,startColumn:a,endLineNumber:l,endColumn:o}),this},replaceSelection(e){let{editor:i}=w(this);return i.executeEdits("replaceSelection",[{range:i.getSelection(),text:e,forceMoveMarkers:!0}]),this},encapsulateSelection({pre:e="",peri:i="",post:t="",ownline:n,replace:r,splitlines:a,selectionStart:l,selectionEnd:o=l}){l!==void 0&&ge.setSelection.call(this,{start:l,end:o});let{model:s,editor:d}=w(this),c=d.getSelection(),m=r||c.isEmpty()?i:s.getValueInRange(c),b=`${n&&c.startColumn>1?`
6
6
  `:""}${a?m.split(`
7
7
  `).map(f=>e+f+t).join(`
8
8
  `):e+m+t}${n&&c.endColumn<=s.getLineLength(c.endLineNumber)?`
9
- `:""}`;return d.executeEdits("encapsulateSelection",[{range:c,text:b,forceMoveMarkers:!0}]),this},getCaretPosition(e){let{editor:i,model:t}=w(this),n=i.getSelection(),r=t.getOffsetAt(n.getEndPosition());return e!=null&&e.startAndEnd?[t.getOffsetAt(n.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:e}=w(this);return e.revealPosition(e.getPosition()),this}};var Pe=["bold-header","format-leakage","fostered-content","h1","illegal-attr","insecure-style","invalid-gallery","invalid-imagemap","invalid-invoke","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"];var He="codemirror-mediawiki-addons",Re="codemirror-mediawiki-wikilint",Z=["ESLint","Stylelint"],H=mw.config.get("wgUserName"),$e=H&&`User:${H}/codemirror-mediawiki.json`;var N="codemirror-mediawiki-indent",h=new Set(S(He)),v=S(Re)||{},E=new Map(Z.map(e=>[e,S(`codemirror-mediawiki-${e}`)])),G,ue,X,Y,T=localStorage.getItem(N)||"",fe={},je=new Map,ze=(e,i)=>{let t=e==="http"||e==="okay-but-empty"?`MediaWiki API request failed: ${e}`:$("<ul>",{html:i.errors.map(({html:n})=>$("<li>",{html:n}))});mw.notify(t,{type:"error",autoHideSeconds:"long"})},Je=(async()=>{if(H)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),pe=(async()=>{if(!H)return;let e={action:"query",prop:"revisions",titles:$e,rvprop:"content",rvlimit:1};(await Je).get(e).then(i=>{var n;let{query:{pages:[t]}}=i;if(t!=null&&t.revisions){let r=JSON.parse(t.revisions[0].content);if(!((n=r.addons)!=null&&n.includes("save")))return;h.clear();for(let a of r.addons)h.add(a);r.indent&&localStorage.setItem(N,r.indent);for(let a of Z)r[a]&&E.set(a,r[a]);r.wikilint&&Object.assign(v,r.wikilint)}},ze)})(),Ie=async e=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await pe,G)X.setValue([...h]),Y.setValue(T);else{G=new OO.ui.MessageDialog({id:"cm-preference"});let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([G]),ue=new OO.ui.IndexLayout;let n=new OO.ui.TabPanelLayout("main",{label:u("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),a={};for(let s of Z){let d=E.get(s);fe[s]=new OO.ui.MultilineTextInputWidget({value:d?JSON.stringify(d,null,T||" "):""});let c=new OO.ui.FieldLayout(fe[s],{label:u(`${s}-config`),align:"top"}),m=new OO.ui.TabPanelLayout(s,{label:s,$content:c.$element});m.on("active",b=>{let[f]=m.$element.find("textarea");b&&!k.has(f)&&(async()=>{let{editor:p}=await A.fromTextArea(f,"json");p&&(p.getContainerDomNode().style.height=`${Math.max(p.getContentHeight(),400)}px`)})()}),a[s]=m}ue.addTabPanels([n,r,...Object.values(a)],0),X=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(O).filter(s=>s!=="addon-indent"&&s.startsWith("addon-")&&!s.endsWith("-mac")).map(s=>({data:s.slice(6),label:U(s),disabled:s==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||s==="addon-save"&&!H}))],value:[...h]}),Y=new OO.ui.TextInputWidget({value:T,placeholder:"\\t"});let l=new OO.ui.FieldLayout(X,{label:u("label"),align:"top"}),o=new OO.ui.FieldLayout(Y,{label:u("addon-indent")});n.$element.append(l.$element,o.$element,$("<p>",{html:u("feedback","codemirror-mediawiki")})),r.$element.append(...Pe.map(s=>{let d=s==="no-arg"?"0":"1",c=new OO.ui.DropdownInputWidget({options:[{data:"0",label:u("wikilint-off")},{data:"1",label:u("wikilint-error")},{data:"2",label:u("wikilint-on")}],value:v[s]||d}),m=new OO.ui.FieldLayout(c,{label:s});return je.set(s,c),v[s]||(v[s]=d),m.$element}),$("<p>",{html:u("feedback","wikiparser-node")}))}let i=await G.open({message:ue.$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 i=="object"&&i.action==="accept"){let t=T,n=h.has("save");T=Y.getValue();let r=T!==t;if(r){for(let o of e)o==null||o.setIndent(T||" ");localStorage.setItem(N,T)}for(let[o,s]of je){let d=s.getValue();r||(r=d!==v[o]),v[o]=d}C(Re,v);let a=[];for(let o of Z)try{let s=JSON.parse(fe[o].getValue().trim()||"null");r||(r=JSON.stringify(s)!==JSON.stringify(E.get(o))),E.set(o,s),C(`codemirror-mediawiki-${o}`,s)}catch(s){a.push(o)}a.length>0&&OO.ui.alert(u("json-error",a.join(u("and"))));let l=X.getValue();if(l.length!==h.size||!l.every(o=>h.has(o))){r=!0,h.clear();for(let o of l)h.add(o);for(let o of e)o==null||o.prefer(l);C(He,l)}if(r&&H&&(n||h.has("save"))){let o={action:"edit",title:$e,text:JSON.stringify({addons:[...h],indent:T,wikilint:v,ESLint:E.get("ESLint"),Stylelint:E.get("Stylelint")}),summary:u("save-summary")};(await Je).postWithToken("csrf",o).then(()=>{mw.notify(U("save-success"),{type:"success"})},ze)}}};var Ne=async e=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");if(await mw.loader.using("ext.wikiEditor"),!e.data("wikiEditorContext")){if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(e);else{let{wikiEditor:{modules:{dialogs:{config:i}}}}=$;e.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...i.getDefaultConfig()}),i.replaceIcons(e)}await new Promise(i=>{e.on("wikiEditor-toolbar-doneInitialSections",i)})}};var et="2.11",tt=["useMonaco"];mw.loader.load(`${ee}/${J}/mediawiki.min.css`,"text/css");$.valHooks.textarea={get(e){let i=k.get(e);return i!=null&&i.visible?i.getContent():e.value},set(e,i){let t=k.get(e);t!=null&&t.visible?t.setContent(i):e.value=i}};var W={},Qe={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki"},it={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},De=e=>!e.closest("#cm-preference"),nt=e=>async(i,t=0)=>{let n=mw.config.get("wgPageName"),{length:r}=n,a=!1;i.startsWith("/")&&(i=n+i,t=0,a=!0);try{let[,l]=await e.get({action:"opensearch",search:i,namespace:t,limit:"max",formatversion:"2"});return a?l.map(o=>o.slice(r)):t===0?l:l.map(o=>new mw.Title(o).getMainText())}catch(l){return[]}},L,x,y,j,D,R,te,Ve,V,we,Q=class Q extends We{constructor(t,n,r,a,l=!0){var o,s;if((o=k.get(t))!=null&&o.visible)throw new RangeError("The textarea has already been replaced by CodeMirror.");super(t,n,a,!1);M(this,te);M(this,V);M(this,L,!0);M(this,x,void 0);M(this,y,void 0);M(this,j,void 0);M(this,D,void 0);M(this,R," ");this.ns=r,k.set(t,this),l?super.initialize(a):(P(this,D,F(this,te,Ve).call(this)),$(t).data("jquery.textSelection",me)),De(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((s=t.form)==null||s.addEventListener("submit",()=>{let d=document.querySelector("#wpScrolltop");d&&this.view&&g(this,L)&&(d.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return g(this,L)}get model(){return g(this,y)}get editor(){return g(this,j)}initialize(t){if(g(this,y))throw new Error("A Monaco editor is already initialized!");super.initialize(t)}toggle(t=!g(this,L)){let{textarea:n}=this;g(this,y)?t&&!g(this,L)?(g(this,y).setValue(n.value),F(this,V,we).call(this),g(this,x).style.display="",n.style.display="none",$(n).data("jquery.textSelection",me)):!t&&g(this,L)&&(g(this,x).style.display="none",n.style.display="",$(n).removeData("jquery.textSelection")):(super.toggle(t),$(n).data("jquery.textSelection",t&&ge)),P(this,L,t)}async setLanguage(t,n){if(g(this,y))throw new Error("Cannot change the language of a Monaco editor!");(t==="mediawiki"||t==="html")&&(await mw.loader.using(["mediawiki.api","mediawiki.Title"]),n.linkSuggest=nt(new mw.Api)),super.setLanguage(t,n)}setContent(t){g(this,y)?g(this,y).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():g(this,y).getValue()}setIndent(t){if(g(this,j)){P(this,R,t);let n=t.includes(" ");g(this,j).updateOptions({tabSize:n?4:Number(t),insertSpaces:!n})}else super.setIndent(t)}async getLinter(t){let n=await super.getLinter(t);return W[this.lang]=n,n}async defaultLint(t,n=this.ns){if(!t){this.lint();return}let{lang:r}=this,a=E.get("ESLint"),l=E.get("Stylelint"),o;if(typeof n=="number"?r==="mediawiki"&&(n===10||n===828||n===2)?o={include:!0}:r==="javascript"?o={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...n===8||n===2300?{parserOptions:{ecmaVersion:8}}:{},...a}:r==="css"&&l&&(o=l):o=n,r in W)o&&await this.getLinter(o);else{if(r==="mediawiki"){let s=mw.config.get("wgUserLanguage");["zh","zh-hans","zh-cn","zh-sg","zh-my"].includes(s)?o={...o,i18n:"zh-hans"}:["zh-hant","zh-tw","zh-hk","zh-mo"].includes(s)&&(o={...o,i18n:"zh-hant"})}if(await this.getLinter(o),r==="mediawiki"){let[s,d]=await Promise.all([se(),wikiparse.getConfig()]);wikiparse.setConfig(xe(d,s))}}W[r]&&(r==="mediawiki"?this.lint(async s=>(await W[r](s)).filter(({rule:d,severity:c})=>Number(v[d])>+(c==="warning"))):this.lint(W[r]))}prefer(t){if(this.view){super.prefer(t);let n=Array.isArray(t)?a=>t.includes(a):a=>t[a],r=n("lint");r!==void 0&&this.defaultLint(r),Ae(this,n("openLinks"))}}static async fromTextArea(t,n,r){var d;if(h.has("wikiEditor")&&De(t))try{await Ne($(t))}catch(c){c instanceof Error&&c.message==="no-wikiEditor"&&mw.notify(u(c.message),{type:"error"}),h.delete("wikiEditor")}if(!n&&r===void 0){let{wgAction:c,wgNamespaceNumber:m,wgPageContentModel:b}=mw.config.get();c==="edit"||c==="submit"?(r=m,n=m===274?"html":b.toLowerCase()):(await mw.loader.using("oojs-ui-windows"),n=(d=await OO.ui.prompt(u("contentmodel"))||void 0)==null?void 0:d.toLowerCase())}n&&n in Qe&&(n=Qe[n]);let a=!h.has("useMonaco"),l=a&&(n==="mediawiki"||n==="html"),o=new Q(t,l?void 0:n,r,void 0,a);if(l){let c;if(mw.config.get("wgServerName").endsWith(".moegirl.org.cn"))if(mw.config.exists("wikilintConfig"))c=mw.config.get("extCodeMirrorConfig");else{let m=await(await fetch(`${ee}/npm/wikiparser-node@browser/config/moegirl.json`)).json();mw.config.set("wikilintConfig",m),c=We.getMwConfig(m),mw.config.set("extCodeMirrorConfig",c)}else c=await se();await o.setLanguage(n,{...c,tagModes:Q.mwTagModes})}await Promise.all([pe,g(o,D)]),o.prefer([...h]);let s=localStorage.getItem(N);return s&&o.setIndent(s),o}};L=new WeakMap,x=new WeakMap,y=new WeakMap,j=new WeakMap,D=new WeakMap,R=new WeakMap,te=new WeakSet,Ve=async function(){"monaco"in window||await $.ajax(`${ee}/npm/monaco-wiki/dist/all.min.js`,{dataType:"script",scriptAttrs:{type:"module"}});let{textarea:t,lang:n}=this,r=it[n]||n,a=g(this,R).includes(" ");P(this,y,(await monaco).editor.createModel(t.value,r)),P(this,x,document.createElement("div")),F(this,V,we).call(this),g(this,x).style.minHeight="2em",t.after(g(this,x)),t.style.display="none",P(this,j,monaco.editor.create(g(this,x),{model:g(this,y),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:r==="wikitext"||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:a?4:Number(g(this,R)),insertSpaces:!a,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:r!=="wikitext"&&r!=="html"&&r!=="plaintext"}}));let l;g(this,y).onDidChangeContent(()=>{clearTimeout(l),l=window.setTimeout(()=>{t.value=g(this,y).getValue()},400)})},V=new WeakSet,we=function(){let{textarea:{offsetHeight:t,style:{height:n}}}=this;g(this,x).style.height=t?`${t}px`:n},Q.version=K;var A=Q;document.body.addEventListener("click",e=>{e.target instanceof HTMLTextAreaElement&&e.shiftKey&&!k.has(e.target)&&(e.preventDefault(),A.fromTextArea(e.target))});(async()=>{let e={minerva:"page-actions-overflow",moeskin:"ca-more-actions",citizen:"p-tb"};await Promise.all([mw.loader.using("mediawiki.util"),Le(ee)]),mw.hook("wiki-codemirror6").add(Oe),mw.util.addPortletLink(e[mw.config.get("skin")]||"p-cactions","#",u("title"),"cm-settings").addEventListener("click",i=>{i.preventDefault();let t=[...document.querySelectorAll(".cm-editor + textarea")];Ie(t.map(n=>k.get(n)))}),Ce(et,tt)})();Object.assign(window,{CodeMirror6:A});export{A as CodeMirror};
9
+ `:""}`;return d.executeEdits("encapsulateSelection",[{range:c,text:b,forceMoveMarkers:!0}]),this},getCaretPosition(e){let{editor:i,model:t}=w(this),n=i.getSelection(),r=t.getOffsetAt(n.getEndPosition());return e!=null&&e.startAndEnd?[t.getOffsetAt(n.getStartPosition()),r]:r},scrollToCaretPosition(){let{editor:e}=w(this);return e.revealPosition(e.getPosition()),this}};var Pe=["bold-header","format-leakage","fostered-content","h1","illegal-attr","insecure-style","invalid-gallery","invalid-imagemap","invalid-invoke","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"];var Re="codemirror-mediawiki-addons",He="codemirror-mediawiki-wikilint",Z=["ESLint","Stylelint"],R=mw.config.get("wgUserName"),$e=R&&`User:${R}/codemirror-mediawiki.json`;var N="codemirror-mediawiki-indent",h=new Set(L(Re)),v=L(He)||{},E=new Map(Z.map(e=>[e,L(`codemirror-mediawiki-${e}`)])),G,ue,X,Y,T=localStorage.getItem(N)||"",fe={},je=new Map,ze=(e,i)=>{let t=e==="http"||e==="okay-but-empty"?`MediaWiki API request failed: ${e}`:$("<ul>",{html:i.errors.map(({html:n})=>$("<li>",{html:n}))});mw.notify(t,{type:"error",autoHideSeconds:"long"})},Ie=(async()=>{if(R)return await mw.loader.using("mediawiki.api"),new mw.Api({parameters:{errorformat:"html",formatversion:"2"}})})(),pe=(async()=>{if(!R)return;let e={action:"query",prop:"revisions",titles:$e,rvprop:"content",rvlimit:1};(await Ie).get(e).then(i=>{var n;let{query:{pages:[t]}}=i;if(t!=null&&t.revisions){let r=JSON.parse(t.revisions[0].content);if(!((n=r.addons)!=null&&n.includes("save")))return;h.clear();for(let a of r.addons)h.add(a);r.indent&&localStorage.setItem(N,r.indent);for(let a of Z)r[a]&&E.set(a,r[a]);r.wikilint&&Object.assign(v,r.wikilint)}},ze)})(),Je=async e=>{if(await mw.loader.using(["oojs-ui-windows","oojs-ui-widgets","oojs-ui.styles.icons-content","mediawiki.jqueryMsg"]),await pe,G)X.setValue([...h]),Y.setValue(T);else{G=new OO.ui.MessageDialog({id:"cm-preference"});let t=new OO.ui.WindowManager;t.$element.appendTo(document.body),t.addWindows([G]),ue=new OO.ui.IndexLayout;let n=new OO.ui.TabPanelLayout("main",{label:u("title")}),r=new OO.ui.TabPanelLayout("wikilint",{label:"WikiLint"}),a={};for(let s of Z){let d=E.get(s);fe[s]=new OO.ui.MultilineTextInputWidget({value:d?JSON.stringify(d,null,T||" "):""});let c=new OO.ui.FieldLayout(fe[s],{label:u(`${s}-config`),align:"top"}),m=new OO.ui.TabPanelLayout(s,{label:s,$content:c.$element});m.on("active",b=>{let[f]=m.$element.find("textarea");b&&!k.has(f)&&(async()=>{let{editor:p}=await A.fromTextArea(f,"json");p&&(p.getContainerDomNode().style.height=`${Math.max(p.getContentHeight(),400)}px`)})()}),a[s]=m}ue.addTabPanels([n,r,...Object.values(a)],0),X=new OO.ui.CheckboxMultiselectInputWidget({options:[{disabled:!0},...Object.keys(O).filter(s=>s!=="addon-indent"&&s.startsWith("addon-")&&!s.endsWith("-mac")).map(s=>({data:s.slice(6),label:U(s),disabled:s==="addon-wikiEditor"&&!mw.loader.getState("ext.wikiEditor")||s==="addon-save"&&!R}))],value:[...h]}),Y=new OO.ui.TextInputWidget({value:T,placeholder:"\\t"});let l=new OO.ui.FieldLayout(X,{label:u("label"),align:"top"}),o=new OO.ui.FieldLayout(Y,{label:u("addon-indent")});n.$element.append(l.$element,o.$element,$("<p>",{html:u("feedback","codemirror-mediawiki")})),r.$element.append(...Pe.map(s=>{let d=s==="no-arg"?"0":"1",c=new OO.ui.DropdownInputWidget({options:[{data:"0",label:u("wikilint-off")},{data:"1",label:u("wikilint-error")},{data:"2",label:u("wikilint-on")}],value:v[s]||d}),m=new OO.ui.FieldLayout(c,{label:s});return je.set(s,c),v[s]||(v[s]=d),m.$element}),$("<p>",{html:u("feedback","wikiparser-node")}))}let i=await G.open({message:ue.$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 i=="object"&&i.action==="accept"){let t=T,n=h.has("save");T=Y.getValue();let r=T!==t;if(r){for(let o of e)o==null||o.setIndent(T||" ");localStorage.setItem(N,T)}for(let[o,s]of je){let d=s.getValue();r||(r=d!==v[o]),v[o]=d}C(He,v);let a=[];for(let o of Z)try{let s=JSON.parse(fe[o].getValue().trim()||"null");r||(r=JSON.stringify(s)!==JSON.stringify(E.get(o))),E.set(o,s),C(`codemirror-mediawiki-${o}`,s)}catch(s){a.push(o)}a.length>0&&OO.ui.alert(u("json-error",a.join(u("and"))));let l=X.getValue();if(l.length!==h.size||!l.every(o=>h.has(o))){r=!0,h.clear();for(let o of l)h.add(o);for(let o of e)o==null||o.prefer(l);C(Re,l)}if(r&&R&&(n||h.has("save"))){let o={action:"edit",title:$e,text:JSON.stringify({addons:[...h],indent:T,wikilint:v,ESLint:E.get("ESLint"),Stylelint:E.get("Stylelint")}),summary:u("save-summary")};(await Ie).postWithToken("csrf",o).then(()=>{mw.notify(U("save-success"),{type:"success"})},ze)}}};var Ne=async e=>{if(!mw.loader.getState("ext.wikiEditor"))throw new Error("no-wikiEditor");if(await mw.loader.using("ext.wikiEditor"),!e.data("wikiEditorContext")){if(typeof mw.addWikiEditor=="function")mw.addWikiEditor(e);else{let{wikiEditor:{modules:{dialogs:{config:i}}}}=$;e.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...i.getDefaultConfig()}),i.replaceIcons(e)}await new Promise(i=>{e.on("wikiEditor-toolbar-doneInitialSections",i)})}};var et="2.12",tt=["autocompletion","codeFolding"];mw.loader.load(`${ee}/${I}/mediawiki.min.css`,"text/css");$.valHooks.textarea={get(e){let i=k.get(e);return i!=null&&i.visible?i.getContent():e.value},set(e,i){let t=k.get(e);t!=null&&t.visible?t.setContent(i):e.value=i}};var W={},De={"sanitized-css":"css",js:"javascript",scribunto:"lua",wikitext:"mediawiki"},it={mediawiki:"wikitext",template:"wikitext",gadget:"javascript",plain:"plaintext"},Qe=e=>!e.closest("#cm-preference"),nt=(e,i)=>async(t,n=0)=>{let{length:r}=i,a=!1;t.startsWith("/")&&(t=i+t,n=0,a=!0);try{let[,l]=await e.get({action:"opensearch",search:t,namespace:n,limit:"max"});return a?l.map(o=>[o.slice(r)]):n===0?l.map(o=>[o]):l.map(o=>[new mw.Title(o).getMainText()])}catch(l){return[]}},rt=(e,i)=>async t=>{var n;t.startsWith("/")&&(t=i+t);try{t=new mw.Title(t,10).getPrefixedDb();let{pages:r}=await e.get({action:"templatedata",titles:t,redirects:!0,converttitles:!0,lang:mw.config.get("wgUserLanguage")}),a=Object.entries(((n=Object.values(r)[0])==null?void 0:n.params)||{}),l=[];for(let[o,{aliases:s,label:d}]of a){let c=d||"";l.push([o,c],...s.map(m=>[m,c]))}return l}catch(r){return[]}},S,x,y,j,Q,H,te,Ve,V,we,D=class D extends We{constructor(t,n,r,a,l=!0){var o,s;if((o=k.get(t))!=null&&o.visible)throw new RangeError("The textarea has already been replaced by CodeMirror.");super(t,n,a,!1);M(this,te);M(this,V);M(this,S,!0);M(this,x,void 0);M(this,y,void 0);M(this,j,void 0);M(this,Q,void 0);M(this,H," ");this.ns=r,k.set(t,this),l?super.initialize(a):(P(this,Q,q(this,te,Ve).call(this)),$(t).data("jquery.textSelection",me)),Qe(t)&&(mw.hook("wiki-codemirror6").fire(this),t.id==="wpTextbox1"&&((s=t.form)==null||s.addEventListener("submit",()=>{let d=document.querySelector("#wpScrolltop");d&&this.view&&g(this,S)&&(d.value=String(this.view.scrollDOM.scrollTop))})))}get visible(){return g(this,S)}get model(){return g(this,y)}get editor(){return g(this,j)}initialize(t){if(g(this,y))throw new Error("A Monaco editor is already initialized!");super.initialize(t)}toggle(t=!g(this,S)){let{textarea:n}=this;g(this,y)?t&&!g(this,S)?(g(this,y).setValue(n.value),q(this,V,we).call(this),g(this,x).style.display="",n.style.display="none",$(n).data("jquery.textSelection",me)):!t&&g(this,S)&&(g(this,x).style.display="none",n.style.display="",$(n).removeData("jquery.textSelection")):(super.toggle(t),$(n).data("jquery.textSelection",t&&ge)),P(this,S,t)}async setLanguage(t,n){if(g(this,y))throw new Error("Cannot change the language of a Monaco editor!");if(t==="mediawiki"||t==="html"){await mw.loader.using(["mediawiki.api","mediawiki.Title"]);let r=new mw.Api({parameters:{formatversion:2}}),a=mw.config.get("wgPageName");Object.assign(n,{linkSuggest:nt(r,a),paramSuggest:rt(r,a)})}super.setLanguage(t,n)}setContent(t){g(this,y)?g(this,y).setValue(t):super.setContent(t)}getContent(){return this.view?this.view.state.doc.toString():g(this,y).getValue()}setIndent(t){if(g(this,j)){P(this,H,t);let n=t.includes(" ");g(this,j).updateOptions({tabSize:n?4:Number(t),insertSpaces:!n})}else super.setIndent(t)}async getLinter(t){let n=await super.getLinter(t);return W[this.lang]=n,n}async defaultLint(t,n=this.ns){if(!t){this.lint();return}let{lang:r}=this,a=E.get("ESLint"),l=E.get("Stylelint"),o;if(typeof n=="number"?r==="mediawiki"&&(n===10||n===828||n===2)?o={include:!0}:r==="javascript"?o={env:{browser:!0,es2024:!0,jquery:!0},globals:{mw:"readonly",mediaWiki:"readonly",OO:"readonly"},...n===8||n===2300?{parserOptions:{ecmaVersion:8}}:{},...a}:r==="css"&&l&&(o=l):o=n,r in W)o&&await this.getLinter(o);else{if(r==="mediawiki"){let s=mw.config.get("wgUserLanguage");["zh","zh-hans","zh-cn","zh-sg","zh-my"].includes(s)?o={...o,i18n:"zh-hans"}:["zh-hant","zh-tw","zh-hk","zh-mo"].includes(s)&&(o={...o,i18n:"zh-hant"})}if(await this.getLinter(o),r==="mediawiki"){let[s,d]=await Promise.all([se(),wikiparse.getConfig()]);wikiparse.setConfig(xe(d,s))}}W[r]&&(r==="mediawiki"?this.lint(async s=>(await W[r](s)).filter(({rule:d,severity:c})=>Number(v[d])>+(c==="warning"))):this.lint(W[r]))}prefer(t){if(this.view){super.prefer(t);let n=Array.isArray(t)?a=>t.includes(a):a=>t[a],r=n("lint");r!==void 0&&this.defaultLint(r),Ae(this,n("openLinks"))}}static async fromTextArea(t,n,r){var d;if(h.has("wikiEditor")&&Qe(t))try{await Ne($(t))}catch(c){c instanceof Error&&c.message==="no-wikiEditor"&&mw.notify(u(c.message),{type:"error"}),h.delete("wikiEditor")}if(!n&&r===void 0){let{wgAction:c,wgNamespaceNumber:m,wgPageContentModel:b}=mw.config.get();c==="edit"||c==="submit"?(r=m,n=m===274?"html":b.toLowerCase()):(await mw.loader.using("oojs-ui-windows"),n=(d=await OO.ui.prompt(u("contentmodel"))||void 0)==null?void 0:d.toLowerCase())}n&&n in De&&(n=De[n]);let a=!h.has("useMonaco"),l=a&&(n==="mediawiki"||n==="html"),o=new D(t,l?void 0:n,r,void 0,a);if(l){let c;if(mw.config.get("wgServerName").endsWith(".moegirl.org.cn"))if(mw.config.exists("wikilintConfig"))c=mw.config.get("extCodeMirrorConfig");else{let m=await(await fetch(`${ee}/npm/wikiparser-node@browser/config/moegirl.json`)).json();mw.config.set("wikilintConfig",m),c=We.getMwConfig(m),mw.config.set("extCodeMirrorConfig",c)}else c=await se();await o.setLanguage(n,{...c,tagModes:D.mwTagModes})}await Promise.all([pe,g(o,Q)]),o.prefer([...h]);let s=localStorage.getItem(N);return s&&o.setIndent(s),o}};S=new WeakMap,x=new WeakMap,y=new WeakMap,j=new WeakMap,Q=new WeakMap,H=new WeakMap,te=new WeakSet,Ve=async function(){"monaco"in window||await new Promise(o=>{let s=document.createElement("script");s.addEventListener("load",o),s.type="module",s.src=`${ee}/npm/monaco-wiki/dist/all.min.js`,document.head.append(s)});let{textarea:t,lang:n}=this,r=it[n]||n,a=g(this,H).includes(" ");P(this,y,(await monaco).editor.createModel(t.value,r)),P(this,x,document.createElement("div")),q(this,V,we).call(this),g(this,x).style.minHeight="2em",t.after(g(this,x)),t.style.display="none",P(this,j,monaco.editor.create(g(this,x),{model:g(this,y),automaticLayout:!0,theme:"monokai",readOnly:t.readOnly,wordWrap:r==="wikitext"||r==="html"||r==="plaintext"?"on":"off",wordBreak:"keepAll",tabSize:a?4:Number(g(this,H)),insertSpaces:!a,glyphMargin:!0,fontSize:parseFloat(getComputedStyle(t).fontSize),unicodeHighlight:{ambiguousCharacters:r!=="wikitext"&&r!=="html"&&r!=="plaintext"}}));let l;g(this,y).onDidChangeContent(()=>{clearTimeout(l),l=window.setTimeout(()=>{t.value=g(this,y).getValue()},400)})},V=new WeakSet,we=function(){let{textarea:{offsetHeight:t,style:{height:n}}}=this;g(this,x).style.height=t?`${t}px`:n},D.version=K;var A=D;document.body.addEventListener("click",e=>{e.target instanceof HTMLTextAreaElement&&e.shiftKey&&!k.has(e.target)&&(e.preventDefault(),A.fromTextArea(e.target))});(async()=>{let e={minerva:"page-actions-overflow",moeskin:"ca-more-actions",citizen:"p-tb"};await Promise.all([mw.loader.using("mediawiki.util"),Se(ee)]),mw.hook("wiki-codemirror6").add(Oe),mw.util.addPortletLink(e[mw.config.get("skin")]||"p-cactions","#",u("title"),"cm-settings").addEventListener("click",i=>{i.preventDefault();let t=[...document.querySelectorAll(".cm-editor + textarea")];Je(t.map(n=>k.get(n)))}),Ce(et,tt)})();Object.assign(window,{CodeMirror6:A});export{A as CodeMirror};
10
10
  //# sourceMappingURL=mw.min.js.map