MediaWiki:Gadget-wikiplus-highlight.js

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/**
 * Minified by jsDelivr using Terser v5.19.2.
 * Original file: /gh/bhsd-harry/Wikiplus-highlight@2.60.3/main.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
/**
 * @name Wikiplus-highlight Wikiplus编辑器的CodeMirror语法高亮扩展
 * @author Bhsd <https://github.com/bhsd-harry>
 * @author 机智的小鱼君 <https://github.com/Dragon-Fish>
 * @license GPL-3.0
 */
(async()=>{"use strict";if(mw.libs.wphl&&mw.libs.wphl.version)return;mw.libs.wphl=mw.libs.wphl||{};const e="2.60.3",t="object"==typeof mw.storage&&"function"==typeof mw.storage.getObject?mw.storage:{getObject(e){const t=localStorage.getItem(e);if(!1===t)return!1;try{return JSON.parse(t)}catch(e){return null}},setObject(e,t){try{return localStorage.setItem(e,JSON.stringify(t))}catch(e){return!1}}};Object.fromEntries=Object.fromEntries||(e=>{const t={};for(const[i,n]of e)t[i]=n;return t});const i=(t=e)=>t.split(".").map(Number),n=(e,...t)=>mw.msg(`wphl-${e}`,...t),o=(...e)=>$($.parseHTML(n(...e))),a=(...e)=>()=>{const t=$("<p>",{html:n(...e)});return mw.notify(t,{type:"success",autoHideSeconds:"long",tag:"wikiplus-highlight"}),t},s=i().slice(0,2).join("."),r="//cdn.jsdelivr.net",l="npm/codemirror@5.65.3",d="npm/@bhsd/codemirror-mediawiki@1.1.11",c="npm/wikiparser-node@1.1.1-b",m=`gh/bhsd-harry/Wikiplus-highlight@${s}`,{config:{values:{wgPageName:p,wgNamespaceNumber:u,wgPageContentModel:g,wgServerName:w,wgScriptPath:h,wgUserLanguage:k,skin:f}}}=mw,b=null!==mw.loader.getState("ext.CodeMirror"),x=mw.loader.getState("ext.CodeMirror.data")?"ext.CodeMirror.data":"ext.CodeMirror",y=t.getObject("InPageEditMwConfig")||{},j=`${w}${h}`,C=y[j]||{},S=!(C.time>Date.now()-2592e6),v={css:"css","sanitized-css":"css",javascript:"javascript",json:"javascript",wikitext:"mediawiki"},M=b?{lib:"ext.CodeMirror.lib",css:"ext.CodeMirror.lib.mode.css",javascript:"ext.CodeMirror.lib.mode.javascript",lua:`${l}/mode/lua/lua.min.js`,mediawiki:S?x:[],htmlmixed:"ext.CodeMirror.lib.mode.htmlmixed",xml:[]}:{lib:`${l}/lib/codemirror.min.js`,css:`${l}/mode/css/css.min.js`,javascript:`${l}/mode/javascript/javascript.min.js`,lua:`${l}/mode/lua/lua.min.js`,mediawiki:[],htmlmixed:`${l}/mode/htmlmixed/htmlmixed.min.js`,xml:`${l}/mode/xml/xml.min.js`},W={searchcursor:`${l}/addon/search/searchcursor.min.js`,search:`${m}/search.min.js`,markSelection:`${l}/addon/selection/mark-selection.min.js`,activeLine:`${l}/addon/selection/active-line.min.js`,trailingspace:`${l}/addon/edit/trailingspace.min.js`,matchBrackets:`${l}/addon/edit/matchbrackets.min.js`,closeBrackets:`${l}/addon/edit/closebrackets.min.js`,matchTags:`${m}/matchtags.min.js`,fold:`${m}/fold.min.js`,wikiEditor:"ext.wikiEditor",contextmenu:"mediawiki.Title",lint:`${l}/addon/lint/lint.min.js`,annotateScrollbar:`${l}/addon/scroll/annotatescrollbar.min.js`,parser:`${c}/extensions/dist/base.min.js`,linter:`${c}/extensions/dist/lint.min.js`,lintWikitext:`${m}/lint.min.js`},O=[{option:"styleSelectedText",addon:"search",download:"markSelection",only:!0,complex:()=>!E.has("wikiEditor")},{option:"styleActiveLine",addon:"activeLine"},{option:"showTrailingSpace",addon:"trailingspace"},{option:"matchBrackets",complex:(e,t)=>"mediawiki"!==e&&!t||{bracketRegex:/[{}[\]]/u}},{option:"autoCloseBrackets",addon:"closeBrackets",complex:(e,t)=>"mediawiki"!==e&&!t||'()[]{}""'},{option:"matchTags",addon:["matchTags","fold"],modes:new Set(["mediawiki","widget"])},{option:"fold",modes:new Set(["mediawiki","widget"])}],E=new Set(t.getObject("Wikiplus-highlight-addons")||["search"]);let _=t.getObject("Wikiplus-highlight-indent")||4;const T={'"':"quot","'":"apos","<":"lt",">":"gt","&":"amp"," ":"nbsp"},A=e=>t=>{t.replaceSelections(t.getSelections().map((t=>t.split("\n").map(e).join("\n"))),"around")},I=A((e=>[...e].map((e=>{if(e in T)return`&${T[e]};`;const t=e.codePointAt();return t<256?`&#${t};`:`&#x${t.toString(16)};`})).join(""))),P=A((e=>{if(e.includes("%"))try{return decodeURIComponent(e)}catch(e){}return encodeURIComponent(e)})),L=A((e=>{try{return decodeURIComponent(e.replace(/\.([\da-f]{2})/giu,"%$1"))}catch(t){return e}})),z=({keyMap:e})=>e.default===e.pcDefault,D=e=>{const t=z(e)?"Ctrl":"Cmd";return{[`${t}-/`]:I,[`${t}-\\`]:P,[`Shift-${t}-\\`]:L}},N=(e,t)=>{if("mediawiki"!==t&&"widget"!==t||!E.has("contextmenu"))return;const i=$(e.getWrapperElement()).addClass("CodeMirror-contextmenu"),{functionSynonyms:[n]}=mw.config.get("extCodeMirrorConfig")||{functionSynonyms:[{invoke:"invoke","调用":"invoke",widget:"widget","小工具":"widget"}]},o=e=>new Set(Object.keys(n).filter((t=>n[t]===e)).map((e=>e.startsWith("#")?e:`#${e}`))),a=o("invoke"),s=o("widget");i.contextmenu((({pageX:t,pageY:i})=>{const n=e.coordsChar({left:t,top:i}),{line:o,ch:r}=n,l=e.getTokenTypeAt(n);if(!/\bmw-(?:template-name|parserfunction)\b/u.test(l))return;const d=e.getLineTokens(o);for(let e=d.length-1;e>0;e--){const{type:t,end:i,string:n}=d[e];d[e-1].type===t&&(d[e-1].end=i,d[e-1].string+=n,d.splice(e,1))}const c=d.findIndex((({start:e,end:t})=>e<r&&t>=r)),m=d[c].string.replace(/\u200E/gu,"").replace(/_/gu," ").trim();if(/\bmw-template-name\b/u.test(l)){const e=new mw.Title(m);return 0!==e.namespace||m.startsWith(":")?open(e.getUrl(),"_blank"):open(mw.util.getUrl(`Template:${m}`),"_blank"),!1}if(c<2||!/\bmw-parserfunction-delimiter\b/u.test(d[c-1].type)||!/\bmw-parserfunction-name\b/u.test(d[c-2].type))return;const p=d[c-2].string.trim().toLowerCase();if(a.has(p))open(mw.util.getUrl(`Module:${m}`),"_blank");else{if(!s.has(p))return;open(mw.util.getUrl(`Widget:${m}`,{action:"edit"}),"_blank")}return!1}))},U=t.getObject("Wikiplus-highlight-i18n")||{};let H;U["wphl-version"]?((e,t)=>{const[n,o]=i(e),[a,s]=i(t);return n<a||n===a&&o<s})(U["wphl-version"],e)&&(H=a("welcome-upgrade",e,0)):H=a("welcome");const F={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",ka:"ka"}[k]||"en",Q=`${r}/${m}/i18n/${F}.json`,V=U["wphl-version"]===s,B=async()=>{V&&U["wphl-lang"]===F||(Object.assign(U,await $.ajax(`${Q}`,{dataType:"json",cache:!0})),t.setObject("Wikiplus-highlight-i18n",U)),mw.messages.set(U)},R=Promise.all([mw.loader.using("mediawiki.util"),B()]),q=e=>e.length>0?mw.loader.using(e):Promise.resolve(),K=e=>e.length>0?$.ajax(`${r}/${e.length>1?"combine/":""}${e.join()}`,{dataType:"script",cache:!0}):Promise.resolve(),J=async(e,t)=>{const i=e.filter((e=>!e.includes("/"))),n=e.filter((e=>e.includes("/")));return!0===t?(await q(i),K(n)):!1===t?(await K(n),q(i)):Promise.all([q(i),K(n)])};let G;const X=(e,t=!1)=>{const i=[];for(const{option:n,addon:o=n,download:a=(Array.isArray(o)?n:o),only:s}of O)s&&t||n in e.optionHandlers||!Y(o,E)||i.push(W[a]);return i},Y=(e,t)=>Array.isArray(e)?e.some((e=>t.has(e))):t.has(e),Z=e=>{let t=[];const i="function"==typeof window.CodeMirror,n=i?window.CodeMirror:{modes:{},prototype:{},commands:{},optionHandlers:{},helpers:{}};if(i||(t.push(M.lib),b||mw.loader.load(`${r}/${l}/lib/codemirror.min.css`,"text/css")),"mediawiki"===e&&C.config&&C.config.tags.html&&(e="html"),"mediawiki"!==e&&"widget"!==e||n.modes.mediawiki||(mw.loader.load(`${r}/${d}/mediawiki.min.css`,"text/css"),t.push(`${d}/mediawiki.min.js`)),"widget"===e||"html"===e)for(const e of["css","javascript","mediawiki","htmlmixed","xml"])n.modes[e]||(t=t.concat(M[e]));else t=t.concat(M[e]);if(n.prototype.getSearchCursor||!E.has("search")||E.has("wikiEditor")||t.push(W.searchcursor),!n.prototype.annotateScrollbar&&"mediawiki"===e&&E.has("lint")&&t.push(W.annotateScrollbar),n.commands.find||!E.has("search")||E.has("wikiEditor")||t.push(W.search),!window.wikiparse&&"mediawiki"===e&&E.has("lint")&&t.push(W.parser,W.linter),!n.optionHandlers.lint&&"mediawiki"===e&&E.has("lint")&&(mw.loader.load(`${r}/${l}/addon/lint/lint.min.css`,"text/css"),t.push(W.lint)),n.helpers.lint&&n.helpers.lint.mediawiki||"mediawiki"!==e||!E.has("lint")||t.push(W.lintWikitext),E.has("wikiEditor")){const e=mw.loader.getState("ext.wikiEditor");e?"ready"!==e&&t.push(W.wikiEditor):E.delete("wikiEditor")}return"ready"!==mw.loader.getState("mediawiki.Title")&&E.has("contextmenu")&&t.push(W.contextmenu),t.push(...X(n)),J(t,i?void 0:b)},ee=e=>{y[j]={config:e,time:Date.now()},t.setObject("InPageEditMwConfig",y)},te=e=>e.flatMap((({aliases:e,name:t})=>e.map((e=>({alias:e,name:t}))))),ie=e=>Object.fromEntries(e.map((({alias:e,name:t})=>[e.replace(/:$/u,""),t]))),ne=e=>{const t=["indicator","poem","ref","tabs","tab","poll"];for(const i of t)e.tags[i]&&(e.tagModes[i]="text/mediawiki")},oe=async(e,t)=>{if("mediawiki"!==e&&"widget"!==e)return;b&&S&&await t;let i=mw.config.get("extCodeMirrorConfig");i||S||!V||(({config:i}=C),ne(i),mw.config.set("extCodeMirrorConfig",i));const n=i&&Object.values(i.functionSynonyms[0]).includes(!0);if(i&&i.redirect&&i.img&&i.variants&&!n)return i;const{query:{general:{variants:o},magicwords:a,extensiontags:s,functionhooks:r,variables:l}}=await(new mw.Api).get({meta:"siteinfo",siprop:"general|magicwords"+(i&&!n?"":"|extensiontags|functionhooks|variables"),formatversion:2}),d=new Set(["msg","raw","msgnw","subst","safesubst"]);if(i&&!n){const{functionSynonyms:[e]}=i;if(!e.subst){const t=te(a.filter((({name:e})=>d.has(e))));for(const{alias:i,name:n}of t)e[i.replace(/:$/u,"")]=n}}else{i={tagModes:{pre:"mw-tag-pre",nowiki:"mw-tag-nowiki",ref:"text/mediawiki"},tags:Object.fromEntries(s.map((e=>[e.slice(1,-1),!0]))),urlProtocols:mw.config.get("wgUrlProtocols")};const e=new Set([...r,...l,...d]),t=a.filter((({name:t,aliases:i})=>i.some((e=>/^__.+__$/u.test(e)))||e.has(t))),n=te(t.filter((e=>e["case-sensitive"]))),o=te(t.filter((e=>!e["case-sensitive"]))).map((({alias:e,name:t})=>({alias:e.toLowerCase(),name:t})));i.doubleUnderscore=[ie(o.filter((({alias:e})=>/^__.+__$/u.test(e)))),ie(n.filter((({alias:e})=>/^__.+__$/u.test(e))))],i.functionSynonyms=[ie(o.filter((({alias:e})=>!/^__.+__|^#$/u.test(e)))),ie(n.filter((({alias:e})=>!/^__.+__|^#$/u.test(e))))]}return i.redirect=a.find((({name:e})=>"redirect"===e)).aliases,i.img=ie(te(a.filter((({name:e})=>e.startsWith("img_"))))),i.variants=o?o.map((({code:e})=>e)):[],ne(i),mw.config.set("extCodeMirrorConfig",i),ee(i),i},ae={getContents:()=>G.getValue(),setContents(e){return G.setValue(e),this},getSelection:()=>G.getSelection(),setSelection(e){return G.setSelection(G.posFromIndex(e.start),"end"in e?G.posFromIndex(e.end):void 0),G.focus(),this},replaceSelection(e){return G.replaceSelection(e),this},getCaretPosition(e){const t=G.indexFromPos(G.getCursor("from")),i=G.indexFromPos(G.getCursor("to"));return e.startAndEnd?[t,i]:t},scrollToCaretPosition(){return G.scrollIntoView(),this}},se=async(e,i)=>{const o=i?"javascript":await(async()=>{if(p.endsWith("/doc"))return"mediawiki";if(274!==u&&828!==u)return v[g];const e=274===u?"Widget":"Lua";return await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),await OO.ui.confirm(n("contentmodel"),{actions:[{label:e},{label:"Wikitext",action:"accept"}]})?"mediawiki":e.toLowerCase()})(),a=Z(o),[s]=await Promise.all([oe(o,a),a]);if(!i&&E.has("wikiEditor"))try{if("function"==typeof mw.addWikiEditor)mw.addWikiEditor(e);else{const{wikiEditor:{modules:{dialogs:{config:t}}}}=$;e.wikiEditor("addModule",{...$.wikiEditor.modules.toolbar.config.getDefaultConfig(),...t.getDefaultConfig()}),t.replaceIcons(e)}}catch(e){E.delete("wikiEditor"),mw.notify("WikiEditor工具栏加载失败。",{type:"error"}),console.error(e)}"mediawiki"===o&&s.tags.html?(s.tagModes.html="htmlmixed",await Z("html")):"widget"!==o||CodeMirror.mimeModes.widget||CodeMirror.defineMIME("widget",{name:"htmlmixed",tags:{noinclude:[[null,null,"mediawiki"]]}});const r=e.height();G&&G.toTextArea();const l=i||"json"===g;G=CodeMirror.fromTextArea(e[0],$.extend({inputStyle:"contenteditable",lineNumbers:!/Android\b/u.test(navigator.userAgent),lineWrapping:!0,mode:o,mwConfig:s,json:l},Object.fromEntries(O.map((({option:e,addon:t=e,modes:i,complex:n=(e=>!i||i.has(e))})=>{const a=Array.isArray(t)?t[0]:t;return[e,E.has(a)&&n(o,l)]}))),"mediawiki"===o?{extraKeys:E.has("escape")&&D(CodeMirror)}:{indentUnit:E.has("indentWithSpace")?_:4,indentWithTabs:!E.has("indentWithSpace")})),G.setSize(null,r),G.getWrapperElement().id="Wikiplus-CodeMirror",$.fn.textSelection&&e.textSelection("register",ae);const d=z(CodeMirror)?"Ctrl":"Cmd";if(E.has("wikiEditor")){const t=e.data("wikiEditorContext");G.addKeyMap({[`${d}-F`](){$.wikiEditor.modules.dialogs.api.openDialog(t,"search-and-replace")}})}if(N(G,o),$("#Wikiplus-Quickedit-Jump").children("a").attr("href","#Wikiplus-CodeMirror"),!i){const e=t.getObject("Wikiplus_Settings"),i=e&&e.esc_to_exit_quickedit||e.escToExitQuickEdit,n=()=>{$("#Wikiplus-Quickedit-Submit").triggerHandler("click")},o=()=>{$("#Wikiplus-Quickedit-MinorEdit").click(),$("#Wikiplus-Quickedit-Submit").triggerHandler("click")};G.addKeyMap($.extend({[`${d}-S`]:n,[`Shift-${d}-S`]:o},!0===i||"true"===i?{Esc(){$("#Wikiplus-Quickedit-Back").triggerHandler("click")}}:{}))}G.refresh(),mw.hook("wiki-codemirror").fire(G)},{body:re}=document;new MutationObserver((e=>{const t=$(e.flatMap((({addedNodes:e})=>[...e]))).find("#Wikiplus-Quickedit, #Wikiplus-Setting-Input");t.length>0&&se(t,"Wikiplus-Setting-Input"===t.attr("id"))})).observe(re,{childList:!0}),$(re).on("keydown.wphl",".ui-dialog",(function(e){if("Escape"===e.key){const t=$(this).children(".ui-dialog-content").data("context");t&&t.$textarea&&"Wikiplus-Quickedit"===t.$textarea.attr("id")&&e.stopPropagation()}}));const le=e=>"Wikiplus-Quickedit"===e.id||"Wikiplus-Setting-Input"===e.id;let de,ce,me,pe,ue,ge,we;$.valHooks.textarea={get:e=>le(e)&&G?G.getValue():e.value,set(e,t){le(e)&&G?G.setValue(t):e.value=t}},await R;const he=(e=[...E])=>{we.toggle(e.includes("indentWithSpace"))},ke=$(mw.util.addPortletLink({minerva:"page-actions-overflow",moeskin:"ca-more-actions"}[f]||"p-cactions","#",n("portlet"),"wphl-settings")).click((async()=>{if(de)ce.setValue([...E]),ue.setValue(_);else{await mw.loader.using(["oojs-ui-windows","oojs-ui.styles.icons-content"]),de=new OO.ui.MessageDialog({id:"Wikiplus-highlight-dialog"});const e=new OO.ui.WindowManager;e.$element.appendTo(re),e.addWindows([de]),ce=new OO.ui.CheckboxMultiselectInputWidget({options:[...O.map((({option:e,addon:t=e})=>{const i=Array.isArray(t)?t[0]:t;return{data:i,label:o(`addon-${i.toLowerCase()}`)}})),...["wikiEditor","escape","contextmenu","lint","indentWithSpace","otherEditors"].map((e=>({data:e,label:o(`addon-${e.toLowerCase()}`)})))],value:[...E]}).on("change",he);const{checkboxMultiselectWidget:t}=ce;me=t.findItemFromData("search"),pe=t.findItemFromData("wikiEditor"),ue=new OO.ui.NumberInputWidget({min:0,value:_}),ge=new OO.ui.FieldLayout(ce,{label:n("addon-label"),notices:[n("addon-notice")],align:"top"}),we=new OO.ui.FieldLayout(ue,{label:n("addon-indent")}),he(),Object.assign(mw.libs.wphl,{widget:ce,indentWidget:ue})}const e="object"==typeof window.Wikiplus||"object"==typeof window._WikiplusPages;me.setDisabled(!e),pe.setDisabled(!e||!mw.loader.getState("ext.wikiEditor"));const i=await de.open({title:n("addon-title"),message:ge.$element.add(we.$element).add($("<p>",{html:n("feedback")})),actions:[{action:"reject",label:mw.msg("ooui-dialog-message-reject")},{action:"accept",label:mw.msg("ooui-dialog-message-accept"),flags:"progressive"}],size:"en"===F||"minerva"===f?"medium":"small"}).closing;if(ge.$element.detach(),we.$element.detach(),"object"==typeof i&&"accept"===i.action){const e=ce.getValue();E.clear();for(const t of e)E.add(t);_=Number(ue.getValue()),t.setObject("Wikiplus-highlight-addons",e),t.setObject("Wikiplus-highlight-indent",_)}}));"minerva"===f&&ke.find(".mw-ui-icon").addClass("mw-ui-icon-minerva-settings"),"function"==typeof H&&H().find("#wphl-settings-notify").click((e=>{e.preventDefault(),$("#wphl-settings").triggerHandler("click")}));const fe=async e=>{if(!E.has("otherEditors"))return;let t=e.getOption("mode");t="text/mediawiki"===t?"mediawiki":t;const i=X(CodeMirror,!0),n=e.getOption("json"),{prototype:o,optionHandlers:a,helpers:{lint:s}}=CodeMirror;!o.annotateScrollbar&&"mediawiki"===t&&E.has("lint")&&i.push(W.annotateScrollbar),!window.wikiparse&&"mediawiki"===t&&E.has("lint")&&i.push(W.parser),!a.lint&&"mediawiki"===t&&E.has("lint")&&(mw.loader.load(`${r}/${l}/addon/lint/lint.min.css`,"text/css"),i.push(W.lint)),s&&s.mediawiki||"mediawiki"!==t||!E.has("lint")||i.push(W.lintWikitext),await J(i);for(const{option:i,addon:o=i,modes:a,complex:s=(e=>!a||a.has(e))}of O.filter((({only:e})=>!e))){const a=Array.isArray(o)?o[0]:o;void 0===e.getOption(i)&&E.has(a)&&e.setOption(i,s(t,n))}"mediawiki"===t&&E.has("escape")?e.addKeyMap(D(CodeMirror),!0):"mediawiki"!==t&&E.has("indentWithSpace")&&(e.setOption("indentUnit",_),e.setOption("indentWithTabs",!1)),N(e,t)};mw.hook("InPageEdit.quickEdit.codemirror").add((({cm:e})=>fe(e))),mw.hook("inspector").add((e=>fe(e))),mw.hook("wiki-codemirror").add((e=>{e.getTextArea&&le(e.getTextArea())||fe(e)})),mw.loader.load(`${r}/${m}/styles.min.css`,"text/css"),Object.assign(mw.libs.wphl,{version:e,options:O,addons:E,i18n:U,i18nLang:F,storage:t,$portlet:ke,CDN:r,PARSER_CDN:c,USING_LOCAL:b,MODE_LIST:M,ADDON_LIST:W,msg:n,htmlMsg:o,escapeHTML:I,handleContextMenu:N,setI18N:B,getAddonScript:X,updateCachedConfig:ee,getMwConfig:oe,renderEditor:se,handleOtherEditors:fe,isPc:z})})();
//# sourceMappingURL=/sm/5ec6066ae194fdd6b69ec2894fedea411edfd6170e606001dad4c36094921ae6.map