From 9d52291b53e7b8a10550699cce71dc7022c80286 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 8 Jul 2024 13:25:15 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20diskdanc?= =?UTF-8?q?e/wscd@ebe6d382ed80bb0f180197c6f950a80c4f4a0f3b=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/{index.96e82935.js => index.d6a9cde1.js} | 4 ++-- assets/{index.96e82935.js.map => index.d6a9cde1.js.map} | 2 +- index.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename assets/{index.96e82935.js => index.d6a9cde1.js} (99%) rename assets/{index.96e82935.js.map => index.d6a9cde1.js.map} (99%) diff --git a/assets/index.96e82935.js b/assets/index.d6a9cde1.js similarity index 99% rename from assets/index.96e82935.js rename to assets/index.d6a9cde1.js index 7a7d67a..f3ee092 100644 --- a/assets/index.96e82935.js +++ b/assets/index.d6a9cde1.js @@ -1,4 +1,4 @@ -var si=Object.defineProperty;var mi=(e,o,a)=>o in e?si(e,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[o]=a;var I=(e,o,a)=>(mi(e,typeof o!="symbol"?o+"":o,a),a);import{o as c,c as W,a as n,t as s,d as L,u as m,p as N,b as z,r as di,e as A,f as $,n as j,i as ii,g as H,F as gi,h as ui,j as l,w as h,k as f,l as x,m as pi,v as wi,q as ei,s as _i,T as J,x as M,y as ci,B as li}from"./vendor.6b7883f2.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const k of document.querySelectorAll('link[rel="modulepreload"]'))r(k);new MutationObserver(k=>{for(const d of k)if(d.type==="childList")for(const u of d.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function a(k){const d={};return k.integrity&&(d.integrity=k.integrity),k.referrerpolicy&&(d.referrerPolicy=k.referrerpolicy),k.crossorigin==="use-credentials"?d.credentials="include":k.crossorigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(k){if(k.ep)return;k.ep=!0;const d=a(k);fetch(k.href,d)}})();const T=(e,o)=>{const a=e.__vccOpts||e;for(const[r,k]of o)a[r]=k;return a},Wi={},yi={class:"site-header"},hi={class:"site-header__title"},bi={href:"."},vi={class:"site-header__desc"};function Ei(e,o){return c(),W("header",yi,[n("div",hi,[n("a",bi,s(e.$i18n("title-abbr")),1)]),n("div",vi,s(e.$i18n("header-slogan")),1)])}const Pi=T(Wi,[["render",Ei],["__scopeId","data-v-74e8946c"]]),fi="/wscd/assets/toolforge-dark.a8aea765.svg",Ti="/wscd/assets/toolforge.859d8eda.svg",Ii=e=>(N("data-v-a522fbb5"),e=e(),z(),e),Ai=fi,Di={class:"site-footer"},Li={class:"site-footer__badge"},ji=Ii(()=>n("source",{srcset:Ai,media:"(prefers-color-scheme: dark)"},null,-1)),Ri=["alt"],Vi={class:"site-footer__text"},Oi={class:"site-footer__src",target:"_blank",href:"https://github.com/diskdance/wscd"},qi={class:"site-footer__license",target:"_blank",href:"https://github.com/diskdance/wscd/blob/master/LICENSE"},Si={class:"site-footer__version"},Ci=L({__name:"SiteFooter",setup(e){const o="0.2.22-gh",a="256a1b6";return(r,k)=>(c(),W("footer",Di,[n("picture",Li,[ji,n("img",{class:"badge__image",src:Ti,alt:r.$i18n("footer-badge-alt")},null,8,Ri)]),n("div",Vi,[n("a",Oi,s(r.$i18n("footer-code")),1),n("a",qi,s(r.$i18n("footer-license")),1),n("span",Si,"wscd "+s(m(o))+" ("+s(m(a))+")",1)])]))}});const $i=T(Ci,[["__scopeId","data-v-a522fbb5"]]),Ni="modulepreload",zi=function(e){return"/wscd/"+e},Z={},i=function(o,a,r){return!a||a.length===0?o():Promise.all(a.map(k=>{if(k=zi(k),k in Z)return;Z[k]=!0;const d=k.endsWith(".css"),u=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${k}"]${u}`))return;const g=document.createElement("link");if(g.rel=d?"stylesheet":Ni,d||(g.as="script",g.crossOrigin=""),g.href=k,document.head.appendChild(g),d)return new Promise((w,_)=>{g.addEventListener("load",w),g.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${k}`)))})})).then(()=>o())};var E=(e=>(e.PENDING="Pending",e.CHECKING="Checking",e.SUCCESS="Success",e.FAILURE="Failure",e))(E||{}),D=(e=>(e.NOT_BLOCKED="Not blocked",e.BLOCKED="Blocked",e.UNKNOWN="Unknown",e.NOT_A_WIKI="Not a wiki",e))(D||{}),P=(e=>(e[e.NOT_RUN=0]="NOT_RUN",e[e.PREPARING=1]="PREPARING",e[e.RUNNING=2]="RUNNING",e[e.ENDED=3]="ENDED",e[e.ENDED_ERROR=4]="ENDED_ERROR",e))(P||{});const p=di({checkStatus:0,domainDataView:new Map});function K(e){const o=new AbortController;return setTimeout(()=>{o.abort()},e),o.signal}function ai(){window.location.reload()}function Y(e,o,a="modelValue"){return A({get(){return e[a]},set(r){o(`update:${a}`,r)}})}const Bi=e=>(N("data-v-f349f2c2"),e=e(),z(),e),Gi=Bi(()=>n("div",{class:"site-card__icon"},null,-1)),Mi={class:"site-card__text"},Ki={class:"site-card__header"},Ui={class:"site-card__main"},Fi=L({__name:"SiteCard",props:{type:null},setup(e){return(o,a)=>(c(),W("div",{class:j(["site-card",e.type?`site-card--${e.type}`:""])},[Gi,n("div",Mi,[n("div",Ki,[$(o.$slots,"header")]),n("div",Ui,[$(o.$slots,"default")])])],2))}});const Q=T(Fi,[["__scopeId","data-v-f349f2c2"]]);class Hi{constructor(o){I(this,"queue");I(this,"workers");I(this,"concurrency");this.queue=[],this.workers=[],this.concurrency=o}async promiseMain(){for(;;){const o=this.queue.shift();if(o===void 0)break;await o()}}enqueue(o){this.queue.push(o)}async run(){this.workers=[];for(let o=0;o{this.taskDispatcher.enqueue(()=>{this.perDomainCheckStarted(o);const r={domain:o,isWiki:a,isSuccessful:!1},k=performance.now();return(a?fetch(`https://${o}/w/api.php?action=query&format=json&formatversion=2&meta=userinfo&uiprop=blockinfo&origin=*`,{...F,signal:K(U)}).then(u=>u.json()).then(u=>u.query===void 0?null:(r.isBlocked="blockid"in u.query.userinfo,u.query.userinfo.name)):fetch(`https://${o}/favicon.ico`,{...F,mode:"no-cors",signal:K(U)})).then(async u=>{if(r.ping=Math.trunc(performance.now()-k),r.isSuccessful=!0,typeof u=="string"&&!r.isBlocked)try{const g=await fetch(`https://${o}/w/api.php?action=query&list=globalblocks&bgip=${u}&bgprop=address&format=json&formatversion=2&origin=*`,{...F,signal:K(U)}).then(w=>w.json());g.query!==void 0&&(r.isBlocked=g.query.globalblocks.length>0)}catch{}}).catch(()=>{r.isSuccessful=!1}).then(()=>{this.perDomainFinished(r)})})}),this.taskDispatcher.run()}}const Yi=L({__name:"SiteButton",props:{major:{type:Boolean}},setup(e){return(o,a)=>(c(),W("button",{class:j(["site-button",{"site-button--major":e.major}])},[$(o.$slots,"default",{},void 0,!0)],2))}});const R=T(Yi,[["__scopeId","data-v-e824d833"]]),Zi={class:"table-container"},Qi={class:"table"},Xi={"aria-hidden":"true",class:"table__mobile-header"},ie={class:"table__content"},ee={"aria-hidden":"true",class:"table__mobile-header"},ae={class:"table__content"},oe=["href"],ne={"aria-hidden":"true",class:"table__mobile-header"},re={class:"table__content"},te={"aria-hidden":"true",class:"table__mobile-header"},ke={class:"table__content"},se={"aria-hidden":"true",class:"table__mobile-header"},me=["title"],de={class:"table-container__pager"},ge=f("<< "),ue=f("< "),pe=f("> "),we=f(">> "),_e=L({__name:"DataTable",setup(e){const a=ii("banana"),r=H(0),k=A(()=>[...p.domainDataView.entries()].slice(r.value,r.value+20)),d=A(()=>r.value-20<0),u=A(()=>r.value+20>p.domainDataView.size-1);function g(t){const b=`name-${t.replace(/^(www|m)\./g,"").replace(/\.(www|m)\./g,".")}`,S=a.i18n(b);return S===b?a.i18n("name-key-missing"):S}function w(t){switch(t){case E.FAILURE:return a.i18n("avl-no");case E.SUCCESS:return a.i18n("avl-yes");case E.CHECKING:return a.i18n("checking");default:return a.i18n("pending")}}function _(t){if(t===void 0)return"";switch(t){case D.BLOCKED:return a.i18n("blk-yes");case D.NOT_BLOCKED:return a.i18n("blk-no");case D.NOT_A_WIKI:return a.i18n("blk-non-wiki");default:return a.i18n("blk-unknown")}}function v(t){return t===void 0?"":t<=1e3?a.i18n("rtt-excellent"):t>1e3&&t<=2e3?a.i18n("rtt-good"):a.i18n("rtt-bad")}function O(){u.value||(r.value+=20)}function V(){d.value||(r.value-=20)}function q(){r.value=0}function B(){r.value=p.domainDataView.size-p.domainDataView.size%20}return(t,y)=>(c(),W("div",Zi,[n("table",Qi,[n("thead",null,[n("tr",null,[n("th",null,s(t.$i18n("tbl-h-name")),1),n("th",null,s(t.$i18n("tbl-h-domains")),1),n("th",null,s(t.$i18n("tbl-h-available")),1),n("th",null,s(t.$i18n("tbl-h-block")),1),n("th",null,s(t.$i18n("tbl-h-conn")),1)])]),n("tbody",null,[(c(!0),W(gi,null,ui(m(k),([b,{connectivity:S,ping:G,blocking:ki}])=>(c(),W("tr",{key:b},[n("td",null,[n("span",Xi,s(t.$i18n("tbl-h-name")),1),n("span",ie,s(g(b)),1)]),n("td",null,[n("span",ee,s(t.$i18n("tbl-h-domains")),1),n("span",ae,[n("a",{target:"_blank",rel:"noopener noreferrer",href:`https://${b}/`},s(b),9,oe)])]),n("td",null,[n("span",ne,s(t.$i18n("tbl-h-available")),1),n("span",re,s(w(S)),1)]),n("td",null,[n("span",te,s(t.$i18n("tbl-h-block")),1),n("span",ke,s(_(ki)),1)]),n("td",null,[n("span",se,s(t.$i18n("tbl-h-conn")),1),n("span",{class:"table__content",title:G===void 0?void 0:t.$i18n("rtt-title",G)},s(v(G)),9,me)])]))),128))])]),n("div",de,[l(R,{onClick:y[0]||(y[0]=b=>q()),class:j(["page__button",{"pager__button--hidden":m(d)}]),title:t.$i18n("tbl-btn-jts")},{default:h(()=>[ge]),_:1},8,["class","title"]),l(R,{onClick:y[1]||(y[1]=b=>V()),class:j(["page__button",{"pager__button--hidden":m(d)}]),title:t.$i18n("tbl-btn-prev")},{default:h(()=>[ue]),_:1},8,["class","title"]),n("div",null,s(t.$i18n("tbl-page-info",r.value+1,m(u)?m(p).domainDataView.size:r.value+20,m(p).domainDataView.size)),1),l(R,{onClick:y[2]||(y[2]=b=>O()),class:j(["page__button",{"pager__button--hidden":m(u)}]),title:t.$i18n("tbl-btn-next")},{default:h(()=>[pe]),_:1},8,["class","title"]),l(R,{onClick:y[3]||(y[3]=b=>B()),class:j(["page__button",{"pager__button--hidden":m(u)}]),title:t.$i18n("tbl-btn-jte")},{default:h(()=>[we]),_:1},8,["class","title"])])]))}});const ce=T(_e,[["__scopeId","data-v-bf5a866a"]]);const le={},We=e=>(N("data-v-7d59e553"),e=e(),z(),e),ye={tabindex:"-1",class:"progress-indicator",style:{transform:"rotate(calc(-90deg))"},xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 43.01075268817205 43.01075268817205"},he=We(()=>n("circle",{tabindex:"-1",class:"progress-indicator__overlay",fill:"transparent",cx:"50%",cy:"50%",r:"20","stroke-width":"3.0107526881720434","stroke-dasharray":"125.66370614359172","stroke-dashoffset":"125.66370614359172px"},null,-1)),be=[he];function ve(e,o){return c(),W("svg",ye,be)}const Ee=T(le,[["render",ve],["__scopeId","data-v-7d59e553"]]),Pe=["disabled"],fe={key:0,class:"round-button__indicator-container"},Te=L({__name:"RoundButton",props:{waiting:{type:Boolean}},setup(e){return(o,a)=>(c(),W("button",{class:j(["round-button",{"round-button--waiting":e.waiting}]),disabled:e.waiting},[$(o.$slots,"default",{},void 0,!0),e.waiting?(c(),W("div",fe,[l(Ee)])):x("",!0)],10,Pe))}});const Ie=T(Te,[["__scopeId","data-v-6ac920f1"]]),Ae=e=>(N("data-v-31b176b9"),e=e(),z(),e),De={class:"toggle-switch"},Le=["aria-checked","aria-label"],je=Ae(()=>n("div",{class:"toggle-switch__switch"},[n("div",{class:"toggle-switch__thumb"})],-1)),Re=L({__name:"ToggleSwitch",props:{modelValue:{type:Boolean},ariaLabel:null},emits:["update:modelValue"],setup(e,{emit:o}){const r=Y(e,o);return(k,d)=>(c(),W("div",De,[pi(n("input",{class:"toggle-switch__input",type:"checkbox","onUpdate:modelValue":d[0]||(d[0]=u=>ei(r)?r.value=u:null),role:"switch","aria-checked":m(r),"aria-label":e.ariaLabel},null,8,Le),[[wi,m(r)]]),je]))}});const Ve=T(Re,[["__scopeId","data-v-31b176b9"]]),Oe={class:"ct-field"},qe={class:"ct-field__type"},Se={class:"ct-field__value"},Ce=L({__name:"CheckTypeField",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(e,{emit:o}){const r=Y(e,o);return(k,d)=>(c(),W("div",Oe,[n("div",qe,s(k.$i18n("ct-field-type")),1),n("div",Se,[n("span",{class:j(["type-label","type-label--left",{"type-label--active":!m(r)}])},s(k.$i18n("ct-field-std")),3),l(Ve,{class:"ct-field__toggle",modelValue:m(r),"onUpdate:modelValue":d[0]||(d[0]=u=>ei(r)?r.value=u:null),ariaLabel:k.$i18n("ct-field-ext-check")},null,8,["modelValue","ariaLabel"]),n("span",{class:j(["type-label","type-label--right",{"type-label--active":m(r)}])},s(k.$i18n("ct-field-ext")),3)])]))}});const $e=T(Ce,[["__scopeId","data-v-4948aebf"]]),Ne=["aria-valuenow"],ze=L({__name:"ProgressBar",props:{value:null},setup(e){return(o,a)=>(c(),W("div",{class:"progressbar",role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.value},[n("div",{class:"progressbar__active",style:_i({width:`${e.value}%`})},null,4)],8,Ne))}});const Be=T(ze,[["__scopeId","data-v-2567a536"]]),Ge=` +var si=Object.defineProperty;var mi=(e,o,a)=>o in e?si(e,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[o]=a;var I=(e,o,a)=>(mi(e,typeof o!="symbol"?o+"":o,a),a);import{o as c,c as W,a as n,t as s,d as L,u as m,p as N,b as z,r as di,e as A,f as $,n as j,i as ii,g as H,F as gi,h as ui,j as l,w as h,k as f,l as x,m as pi,v as wi,q as ei,s as _i,T as J,x as M,y as ci,B as li}from"./vendor.6b7883f2.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const k of document.querySelectorAll('link[rel="modulepreload"]'))r(k);new MutationObserver(k=>{for(const d of k)if(d.type==="childList")for(const u of d.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function a(k){const d={};return k.integrity&&(d.integrity=k.integrity),k.referrerpolicy&&(d.referrerPolicy=k.referrerpolicy),k.crossorigin==="use-credentials"?d.credentials="include":k.crossorigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(k){if(k.ep)return;k.ep=!0;const d=a(k);fetch(k.href,d)}})();const T=(e,o)=>{const a=e.__vccOpts||e;for(const[r,k]of o)a[r]=k;return a},Wi={},yi={class:"site-header"},hi={class:"site-header__title"},bi={href:"."},vi={class:"site-header__desc"};function Ei(e,o){return c(),W("header",yi,[n("div",hi,[n("a",bi,s(e.$i18n("title-abbr")),1)]),n("div",vi,s(e.$i18n("header-slogan")),1)])}const Pi=T(Wi,[["render",Ei],["__scopeId","data-v-74e8946c"]]),fi="/wscd/assets/toolforge-dark.a8aea765.svg",Ti="/wscd/assets/toolforge.859d8eda.svg",Ii=e=>(N("data-v-a522fbb5"),e=e(),z(),e),Ai=fi,Di={class:"site-footer"},Li={class:"site-footer__badge"},ji=Ii(()=>n("source",{srcset:Ai,media:"(prefers-color-scheme: dark)"},null,-1)),Ri=["alt"],Vi={class:"site-footer__text"},Oi={class:"site-footer__src",target:"_blank",href:"https://github.com/diskdance/wscd"},qi={class:"site-footer__license",target:"_blank",href:"https://github.com/diskdance/wscd/blob/master/LICENSE"},Si={class:"site-footer__version"},Ci=L({__name:"SiteFooter",setup(e){const o="0.2.22-gh",a="ebe6d38";return(r,k)=>(c(),W("footer",Di,[n("picture",Li,[ji,n("img",{class:"badge__image",src:Ti,alt:r.$i18n("footer-badge-alt")},null,8,Ri)]),n("div",Vi,[n("a",Oi,s(r.$i18n("footer-code")),1),n("a",qi,s(r.$i18n("footer-license")),1),n("span",Si,"wscd "+s(m(o))+" ("+s(m(a))+")",1)])]))}});const $i=T(Ci,[["__scopeId","data-v-a522fbb5"]]),Ni="modulepreload",zi=function(e){return"/wscd/"+e},Z={},i=function(o,a,r){return!a||a.length===0?o():Promise.all(a.map(k=>{if(k=zi(k),k in Z)return;Z[k]=!0;const d=k.endsWith(".css"),u=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${k}"]${u}`))return;const g=document.createElement("link");if(g.rel=d?"stylesheet":Ni,d||(g.as="script",g.crossOrigin=""),g.href=k,document.head.appendChild(g),d)return new Promise((w,_)=>{g.addEventListener("load",w),g.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${k}`)))})})).then(()=>o())};var E=(e=>(e.PENDING="Pending",e.CHECKING="Checking",e.SUCCESS="Success",e.FAILURE="Failure",e))(E||{}),D=(e=>(e.NOT_BLOCKED="Not blocked",e.BLOCKED="Blocked",e.UNKNOWN="Unknown",e.NOT_A_WIKI="Not a wiki",e))(D||{}),P=(e=>(e[e.NOT_RUN=0]="NOT_RUN",e[e.PREPARING=1]="PREPARING",e[e.RUNNING=2]="RUNNING",e[e.ENDED=3]="ENDED",e[e.ENDED_ERROR=4]="ENDED_ERROR",e))(P||{});const p=di({checkStatus:0,domainDataView:new Map});function K(e){const o=new AbortController;return setTimeout(()=>{o.abort()},e),o.signal}function ai(){window.location.reload()}function Y(e,o,a="modelValue"){return A({get(){return e[a]},set(r){o(`update:${a}`,r)}})}const Bi=e=>(N("data-v-f349f2c2"),e=e(),z(),e),Gi=Bi(()=>n("div",{class:"site-card__icon"},null,-1)),Mi={class:"site-card__text"},Ki={class:"site-card__header"},Ui={class:"site-card__main"},Fi=L({__name:"SiteCard",props:{type:null},setup(e){return(o,a)=>(c(),W("div",{class:j(["site-card",e.type?`site-card--${e.type}`:""])},[Gi,n("div",Mi,[n("div",Ki,[$(o.$slots,"header")]),n("div",Ui,[$(o.$slots,"default")])])],2))}});const Q=T(Fi,[["__scopeId","data-v-f349f2c2"]]);class Hi{constructor(o){I(this,"queue");I(this,"workers");I(this,"concurrency");this.queue=[],this.workers=[],this.concurrency=o}async promiseMain(){for(;;){const o=this.queue.shift();if(o===void 0)break;await o()}}enqueue(o){this.queue.push(o)}async run(){this.workers=[];for(let o=0;o{this.taskDispatcher.enqueue(()=>{this.perDomainCheckStarted(o);const r={domain:o,isWiki:a,isSuccessful:!1},k=performance.now();return(a?fetch(`https://${o}/w/api.php?action=query&format=json&formatversion=2&meta=userinfo&uiprop=blockinfo&origin=*`,{...F,signal:K(U)}).then(u=>u.json()).then(u=>u.query===void 0?null:(r.isBlocked="blockid"in u.query.userinfo,u.query.userinfo.name)):fetch(`https://${o}/favicon.ico`,{...F,mode:"no-cors",signal:K(U)})).then(async u=>{if(r.ping=Math.trunc(performance.now()-k),r.isSuccessful=!0,typeof u=="string"&&!r.isBlocked)try{const g=await fetch(`https://${o}/w/api.php?action=query&list=globalblocks&bgip=${u}&bgprop=address&format=json&formatversion=2&origin=*`,{...F,signal:K(U)}).then(w=>w.json());g.query!==void 0&&(r.isBlocked=g.query.globalblocks.length>0)}catch{}}).catch(()=>{r.isSuccessful=!1}).then(()=>{this.perDomainFinished(r)})})}),this.taskDispatcher.run()}}const Yi=L({__name:"SiteButton",props:{major:{type:Boolean}},setup(e){return(o,a)=>(c(),W("button",{class:j(["site-button",{"site-button--major":e.major}])},[$(o.$slots,"default",{},void 0,!0)],2))}});const R=T(Yi,[["__scopeId","data-v-e824d833"]]),Zi={class:"table-container"},Qi={class:"table"},Xi={"aria-hidden":"true",class:"table__mobile-header"},ie={class:"table__content"},ee={"aria-hidden":"true",class:"table__mobile-header"},ae={class:"table__content"},oe=["href"],ne={"aria-hidden":"true",class:"table__mobile-header"},re={class:"table__content"},te={"aria-hidden":"true",class:"table__mobile-header"},ke={class:"table__content"},se={"aria-hidden":"true",class:"table__mobile-header"},me=["title"],de={class:"table-container__pager"},ge=f("<< "),ue=f("< "),pe=f("> "),we=f(">> "),_e=L({__name:"DataTable",setup(e){const a=ii("banana"),r=H(0),k=A(()=>[...p.domainDataView.entries()].slice(r.value,r.value+20)),d=A(()=>r.value-20<0),u=A(()=>r.value+20>p.domainDataView.size-1);function g(t){const b=`name-${t.replace(/^(www|m)\./g,"").replace(/\.(www|m)\./g,".")}`,S=a.i18n(b);return S===b?a.i18n("name-key-missing"):S}function w(t){switch(t){case E.FAILURE:return a.i18n("avl-no");case E.SUCCESS:return a.i18n("avl-yes");case E.CHECKING:return a.i18n("checking");default:return a.i18n("pending")}}function _(t){if(t===void 0)return"";switch(t){case D.BLOCKED:return a.i18n("blk-yes");case D.NOT_BLOCKED:return a.i18n("blk-no");case D.NOT_A_WIKI:return a.i18n("blk-non-wiki");default:return a.i18n("blk-unknown")}}function v(t){return t===void 0?"":t<=1e3?a.i18n("rtt-excellent"):t>1e3&&t<=2e3?a.i18n("rtt-good"):a.i18n("rtt-bad")}function O(){u.value||(r.value+=20)}function V(){d.value||(r.value-=20)}function q(){r.value=0}function B(){r.value=p.domainDataView.size-p.domainDataView.size%20}return(t,y)=>(c(),W("div",Zi,[n("table",Qi,[n("thead",null,[n("tr",null,[n("th",null,s(t.$i18n("tbl-h-name")),1),n("th",null,s(t.$i18n("tbl-h-domains")),1),n("th",null,s(t.$i18n("tbl-h-available")),1),n("th",null,s(t.$i18n("tbl-h-block")),1),n("th",null,s(t.$i18n("tbl-h-conn")),1)])]),n("tbody",null,[(c(!0),W(gi,null,ui(m(k),([b,{connectivity:S,ping:G,blocking:ki}])=>(c(),W("tr",{key:b},[n("td",null,[n("span",Xi,s(t.$i18n("tbl-h-name")),1),n("span",ie,s(g(b)),1)]),n("td",null,[n("span",ee,s(t.$i18n("tbl-h-domains")),1),n("span",ae,[n("a",{target:"_blank",rel:"noopener noreferrer",href:`https://${b}/`},s(b),9,oe)])]),n("td",null,[n("span",ne,s(t.$i18n("tbl-h-available")),1),n("span",re,s(w(S)),1)]),n("td",null,[n("span",te,s(t.$i18n("tbl-h-block")),1),n("span",ke,s(_(ki)),1)]),n("td",null,[n("span",se,s(t.$i18n("tbl-h-conn")),1),n("span",{class:"table__content",title:G===void 0?void 0:t.$i18n("rtt-title",G)},s(v(G)),9,me)])]))),128))])]),n("div",de,[l(R,{onClick:y[0]||(y[0]=b=>q()),class:j(["page__button",{"pager__button--hidden":m(d)}]),title:t.$i18n("tbl-btn-jts")},{default:h(()=>[ge]),_:1},8,["class","title"]),l(R,{onClick:y[1]||(y[1]=b=>V()),class:j(["page__button",{"pager__button--hidden":m(d)}]),title:t.$i18n("tbl-btn-prev")},{default:h(()=>[ue]),_:1},8,["class","title"]),n("div",null,s(t.$i18n("tbl-page-info",r.value+1,m(u)?m(p).domainDataView.size:r.value+20,m(p).domainDataView.size)),1),l(R,{onClick:y[2]||(y[2]=b=>O()),class:j(["page__button",{"pager__button--hidden":m(u)}]),title:t.$i18n("tbl-btn-next")},{default:h(()=>[pe]),_:1},8,["class","title"]),l(R,{onClick:y[3]||(y[3]=b=>B()),class:j(["page__button",{"pager__button--hidden":m(u)}]),title:t.$i18n("tbl-btn-jte")},{default:h(()=>[we]),_:1},8,["class","title"])])]))}});const ce=T(_e,[["__scopeId","data-v-bf5a866a"]]);const le={},We=e=>(N("data-v-7d59e553"),e=e(),z(),e),ye={tabindex:"-1",class:"progress-indicator",style:{transform:"rotate(calc(-90deg))"},xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 43.01075268817205 43.01075268817205"},he=We(()=>n("circle",{tabindex:"-1",class:"progress-indicator__overlay",fill:"transparent",cx:"50%",cy:"50%",r:"20","stroke-width":"3.0107526881720434","stroke-dasharray":"125.66370614359172","stroke-dashoffset":"125.66370614359172px"},null,-1)),be=[he];function ve(e,o){return c(),W("svg",ye,be)}const Ee=T(le,[["render",ve],["__scopeId","data-v-7d59e553"]]),Pe=["disabled"],fe={key:0,class:"round-button__indicator-container"},Te=L({__name:"RoundButton",props:{waiting:{type:Boolean}},setup(e){return(o,a)=>(c(),W("button",{class:j(["round-button",{"round-button--waiting":e.waiting}]),disabled:e.waiting},[$(o.$slots,"default",{},void 0,!0),e.waiting?(c(),W("div",fe,[l(Ee)])):x("",!0)],10,Pe))}});const Ie=T(Te,[["__scopeId","data-v-6ac920f1"]]),Ae=e=>(N("data-v-31b176b9"),e=e(),z(),e),De={class:"toggle-switch"},Le=["aria-checked","aria-label"],je=Ae(()=>n("div",{class:"toggle-switch__switch"},[n("div",{class:"toggle-switch__thumb"})],-1)),Re=L({__name:"ToggleSwitch",props:{modelValue:{type:Boolean},ariaLabel:null},emits:["update:modelValue"],setup(e,{emit:o}){const r=Y(e,o);return(k,d)=>(c(),W("div",De,[pi(n("input",{class:"toggle-switch__input",type:"checkbox","onUpdate:modelValue":d[0]||(d[0]=u=>ei(r)?r.value=u:null),role:"switch","aria-checked":m(r),"aria-label":e.ariaLabel},null,8,Le),[[wi,m(r)]]),je]))}});const Ve=T(Re,[["__scopeId","data-v-31b176b9"]]),Oe={class:"ct-field"},qe={class:"ct-field__type"},Se={class:"ct-field__value"},Ce=L({__name:"CheckTypeField",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(e,{emit:o}){const r=Y(e,o);return(k,d)=>(c(),W("div",Oe,[n("div",qe,s(k.$i18n("ct-field-type")),1),n("div",Se,[n("span",{class:j(["type-label","type-label--left",{"type-label--active":!m(r)}])},s(k.$i18n("ct-field-std")),3),l(Ve,{class:"ct-field__toggle",modelValue:m(r),"onUpdate:modelValue":d[0]||(d[0]=u=>ei(r)?r.value=u:null),ariaLabel:k.$i18n("ct-field-ext-check")},null,8,["modelValue","ariaLabel"]),n("span",{class:j(["type-label","type-label--right",{"type-label--active":m(r)}])},s(k.$i18n("ct-field-ext")),3)])]))}});const $e=T(Ce,[["__scopeId","data-v-4948aebf"]]),Ne=["aria-valuenow"],ze=L({__name:"ProgressBar",props:{value:null},setup(e){return(o,a)=>(c(),W("div",{class:"progressbar",role:"progressbar","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":e.value},[n("div",{class:"progressbar__active",style:_i({width:`${e.value}%`})},null,4)],8,Ne))}});const Be=T(ze,[["__scopeId","data-v-2567a536"]]),Ge=` - `,Me="none",C=" ",Ke=["Domains","Status","Blocked?","RTT (ms)"],Ue=30,Fe=10,He=15,xe=8;function Je(e,o){const a=document.createElement("a");a.href=e,a.download=o,document.body.appendChild(a),a.click(),document.body.removeChild(a)}class Ye{constructor(o){I(this,"checkData");I(this,"url");I(this,"firstGeneratedTime");this.checkData=o}renderSiteList(o){return[...this.checkData].filter(([,a])=>o(a)).map(([a])=>Ge+a).join("")||Me}renderTable(){const o=[];return this.checkData.forEach(({connectivity:a,blocking:r,ping:k},d)=>{o.push([d,a,r,k])}),[Ke,...o.map(a=>a.map(r=>`${r||""}`))].map(([a,r,k,d])=>[a.padEnd(Ue,C),r.padEnd(Fe,C),k.padEnd(He,C),d.padStart(xe,C)].join("")).join(` `)}generateReport(o){let a="Check result";return a+=` ------------`,a+=` @@ -7,4 +7,4 @@ Unavailable domains: ${this.renderSiteList(({connectivity:r})=>r===E.FAILURE)}`, Blocked domains: ${this.renderSiteList(({blocking:r})=>r===D.BLOCKED)}`,a+=` `,a+=` ${this.renderTable()}`,a}download(){this.firstGeneratedTime===void 0&&(this.firstGeneratedTime=new Date);const o=`CheckReport_${this.firstGeneratedTime.getTime()}.txt`;if(this.url===void 0){const a=this.generateReport(this.firstGeneratedTime),r=new Blob([a],{type:"text/plain"});this.url=URL.createObjectURL(r)}Je(this.url,o)}}const Ze={class:"summary-card"},Qe={key:0,class:"summary-card__main summary-card__main--running"},Xe={class:"summary-card__heading"},ia={class:"summary-card__content"},ea={class:"summary-card__action"},aa={key:1,class:"summary-card__main summary-card__main--ended"},oa={class:"summary-card__heading"},na={key:0,class:"summary-card__content"},ra=["innerHTML"],ta={key:1,class:"summary-card__content summary-card__content--no-problem"},ka={class:"summary-card__action"},sa=L({__name:"SummaryCard",props:{isTableExpanded:{type:Boolean}},emits:["update:isTableExpanded"],setup(e,{emit:o}){const a=e,r=ii("banana"),k=Y(a,o,"isTableExpanded"),d=new Ye(p.domainDataView);function u(t){return t.length===0?r.i18n("sc-domain-desc-none"):t.length===1?t[0]:r.i18n("sc-domain-desc",t[0],t.length-1)}function g(){d.download()}const w=A(()=>[...p.domainDataView.entries()].filter(([,t])=>t.connectivity===E.FAILURE).map(([t])=>t)),_=A(()=>[...p.domainDataView.entries()].filter(([,t])=>t.blocking===D.BLOCKED).map(([t])=>t)),v=A(()=>u(w.value)),O=A(()=>u(_.value)),V=A(()=>w.value.length+_.value.length!==0),q=A(()=>[...p.domainDataView.values()].filter(t=>t.connectivity!==E.CHECKING&&t.connectivity!==E.PENDING).length),B=A(()=>([...p.domainDataView.entries()].reverse().find(([,t])=>t.connectivity===E.CHECKING)||[""])[0]);return(t,y)=>(c(),W("div",Ze,[l(J,{name:"slide",mode:"out-in"},{default:h(()=>[m(p).checkStatus===m(P).RUNNING?(c(),W("div",Qe,[l(Be,{class:"summary-card__progressbar",value:m(q)/m(p).domainDataView.size*100},null,8,["value"]),n("h2",Xe,s(t.$i18n(m(V)?"sc-chk-h-err":"sc-chk-h",m(q),m(p).domainDataView.size)),1),n("div",ia,[n("p",null,s(t.$i18n("sc-chk-desc")),1),n("p",null,s(t.$i18n("sc-chk-cur",m(B))),1),n("p",null,s(t.$i18n("sc-inaccessible",m(v))),1),n("p",null,s(t.$i18n("sc-blocked",m(O))),1)]),n("div",ea,[l(R,{major:!0,onClick:y[0]||(y[0]=b=>k.value=!m(k))},{default:h(()=>[f(s(t.$i18n(m(k)?"sc-btn-hide":"sc-btn-show")),1)]),_:1})])])):(c(),W("div",aa,[n("h2",oa,s(t.$i18n(m(V)?"sc-end-h-err":"sc-end-h-np")),1),m(V)?(c(),W("div",na,[n("p",null,s(t.$i18n("sc-end-b-err")),1),n("p",null,s(t.$i18n("sc-total",m(p).domainDataView.size)),1),n("p",null,s(t.$i18n("sc-inaccessible",m(v))),1),n("p",null,s(t.$i18n("sc-blocked",m(O))),1),n("h3",null,s(t.$i18n("sc-end-b-err-1t")),1),n("p",null,s(t.$i18n("sc-end-b-err-1p1")),1),n("p",null,s(t.$i18n("sc-end-b-err-1p2")),1),n("p",null,s(t.$i18n("sc-end-b-err-1p3")),1),n("h3",null,s(t.$i18n("sc-end-b-err-2t")),1),n("p",null,s(t.$i18n("sc-end-b-err-2p1")),1),n("p",{innerHTML:t.$i18n("sc-end-b-err-2p2")},null,8,ra)])):(c(),W("div",ta,[n("p",null,s(t.$i18n("sc-end-b-np")),1)])),n("div",ka,[l(R,{major:!0,onClick:y[1]||(y[1]=b=>m(ai)())},{default:h(()=>[f(s(t.$i18n("sc-btn-recheck")),1)]),_:1}),l(R,{onClick:y[2]||(y[2]=b=>k.value=!m(k))},{default:h(()=>[f(s(t.$i18n(m(k)?"sc-btn-hide":"sc-btn-show")),1)]),_:1}),l(R,{onClick:y[3]||(y[3]=b=>g())},{default:h(()=>[f(s(t.$i18n("sc-btn-dl")),1)]),_:1})])]))]),_:1})]))}});const ma=T(sa,[["__scopeId","data-v-a9cc8362"]]),da={class:"site-main"},ga={key:0,class:"site-main__check-panel"},ua=["innerHTML"],pa={class:"error-card__buttons"},wa=L({__name:"SiteMain",setup(e){const o=H(!1),a=H(!1);function r(g){return g.map(w=>typeof w=="string"?[w,!0]:w)}function k(){p.checkStatus=P.ENDED_ERROR}async function d(g){p.checkStatus=P.RUNNING,g.forEach(([_])=>{p.domainDataView.set(_,{connectivity:E.PENDING})}),await new Ji(g,_=>{const v=p.domainDataView.get(_);v.connectivity=E.CHECKING},_=>{const v=p.domainDataView.get(_.domain);v.connectivity=_.isSuccessful?E.SUCCESS:E.FAILURE,v.ping=_.ping,_.isSuccessful?_.isWiki?_.isBlocked!==void 0?v.blocking=_.isBlocked?D.BLOCKED:D.NOT_BLOCKED:v.blocking=D.UNKNOWN:v.blocking=D.NOT_A_WIKI:v.blocking=D.UNKNOWN}).check(),p.checkStatus=P.ENDED}async function u(g){try{p.checkStatus=P.PREPARING,p.domainDataView.clear();const{default:w}=g?await i(()=>import("./sites-all.e89b613a.js"),[]):await i(()=>import("./sites-std.464e568f.js"),[]);await d(r(w))}catch{k()}}return(g,w)=>(c(),W("main",da,[l(J,{name:"site-main",mode:"out-in"},{default:h(()=>[[m(P).NOT_RUN,m(P).PREPARING].includes(m(p).checkStatus)?(c(),W("div",ga,[l(Ie,{class:"check-panel__button",onClick:w[0]||(w[0]=_=>u(o.value)),waiting:m(p).checkStatus===m(P).PREPARING},{default:h(()=>[f(s(g.$i18n("btn-chk")),1)]),_:1},8,["waiting"]),l($e,{class:"check-panel__ct-field",modelValue:o.value,"onUpdate:modelValue":w[1]||(w[1]=_=>o.value=_)},null,8,["modelValue"]),l(Q,{class:"check-panel__info-card"},{header:h(()=>[f(s(g.$i18n("card-about-head")),1)]),default:h(()=>[n("p",null,s(g.$i18n("card-about-desc-1")),1),n("p",null,s(g.$i18n("card-about-desc-2")),1),n("p",{innerHTML:g.$i18n("card-about-desc-3")},null,8,ua)]),_:1})])):[m(P).RUNNING,m(P).ENDED].includes(m(p).checkStatus)?(c(),M(ma,{key:1,class:"site-main__summary-card",isTableExpanded:a.value,"onUpdate:isTableExpanded":w[2]||(w[2]=_=>a.value=_)},null,8,["isTableExpanded"])):m(p).checkStatus===m(P).ENDED_ERROR?(c(),M(Q,{key:2,class:"site-main__error-card",type:"error"},{header:h(()=>[f(s(g.$i18n("card-err-head")),1)]),default:h(()=>[n("div",null,s(g.$i18n("card-err-desc")),1),n("div",pa,[l(R,{major:!0,onClick:w[3]||(w[3]=_=>m(ai)())},{default:h(()=>[f(s(g.$i18n("sc-btn-recheck")),1)]),_:1})])]),_:1})):x("",!0)]),_:1}),l(J,{name:"site-main__data-table"},{default:h(()=>[a.value?(c(),M(ce,{key:0,class:"site-main__data-table"})):x("",!0)]),_:1})]))}});const _a=T(wa,[["__scopeId","data-v-6cf35f4c"]]),ca={class:"site-view"},la=L({__name:"App",setup(e){return(o,a)=>(c(),W("div",ca,[l(Pi,{class:"site-view__header"}),l(_a,{class:"site-view__main"}),l($i)]))}});const Wa=(e,o)=>{const a=e[o];return a?typeof a=="function"?a():Promise.resolve(a):new Promise((r,k)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(k.bind(null,new Error("Unknown variable dynamic import: "+o)))})},oi="Wikimedia Server Connectivity Dashboard",ni="\u{1F552} Waiting...",ri="\u{1F50D} Checking...",ti={"name-aa.wikipedia.org":"Afar Wikipedia","name-aa.wikibooks.org":"Afar Wikibooks","name-aa.wiktionary.org":"Afar Wiktionary","name-ab.wikipedia.org":"Abkhazian Wikipedia","name-ab.wiktionary.org":"Abkhazian Wiktionary","name-ace.wikipedia.org":"Achinese Wikipedia","name-advisors.wikimedia.org":"Wikimedia Advisors","name-advisory.wikimedia.org":"Advisory Board","name-ady.wikipedia.org":"Adyghe Wikipedia","name-af.wikipedia.org":"Afrikaans Wikipedia","name-af.wikibooks.org":"Afrikaans Wikibooks","name-af.wikiquote.org":"Afrikaans Wikiquote","name-af.wiktionary.org":"Afrikaans Wiktionary","name-ak.wikipedia.org":"Akan Wikipedia","name-ak.wikibooks.org":"Akan Wikibooks","name-ak.wiktionary.org":"Akan Wiktionary","name-als.wikipedia.org":"Alemannisch Wikipedia","name-als.wikibooks.org":"Alemannisch Wikibooks","name-als.wikiquote.org":"Alemannisch Wikiquote","name-als.wiktionary.org":"Alemannisch Wiktionary","name-alt.wikipedia.org":"Altai Wikipedia","name-amical.wikimedia.org":"Amical Wikimedia","name-ami.wikipedia.org":"Amis Wikipedia","name-am.wikipedia.org":"Amharic Wikipedia","name-am.wikimedia.org":"Wikimedia Armenia","name-am.wikiquote.org":"Amharic Wikiquote","name-am.wiktionary.org":"Amharic Wiktionary","name-ang.wikipedia.org":"Old English Wikipedia","name-ang.wikibooks.org":"Old English Wikibooks","name-ang.wikiquote.org":"Old English Wikiquote","name-ang.wikisource.org":"Old English Wikisource","name-ang.wiktionary.org":"Old English Wiktionary","name-anp.wikipedia.org":"Angika Wikipedia","name-an.wikipedia.org":"Aragonese Wikipedia","name-an.wiktionary.org":"Aragonese Wiktionary","name-apiportal.wikimedia.org":"Wikimedia Api Portal","name-arbcom-de.wikimedia.org":"German Wikipedia Arbitration Committee","name-arbcom-en.wikimedia.org":"English Wikipedia Arbitration Committee","name-arbcom-fi.wikimedia.org":"Finnish Wikipedia Arbitration Committee","name-arbcom-it.wikimedia.org":"Italian Wikipedia Arbitration Committee","name-arbcom-nl.wikimedia.org":"Dutch Wikipedia Arbitration Committee","name-arbcom-ru.wikimedia.org":"Russian Wikipedia Arbitration Committee","name-arc.wikipedia.org":"Syriac Wikipedia","name-ar.wikipedia.org":"Arabic Wikipedia","name-ar.wikibooks.org":"Arabic Wikibooks","name-ar.wikimedia.org":"Wikimedia Argentina","name-ar.wikinews.org":"Arabic Wikinews","name-ar.wikiquote.org":"Arabic Wikiquote","name-ar.wikisource.org":"Arabic Wikisource","name-ar.wikiversity.org":"Arabic Wikiversity","name-ar.wiktionary.org":"Arabic Wiktionary","name-ary.wikipedia.org":"Moroccan Arabic Wikipedia","name-arz.wikipedia.org":"Egyptian Arabic Wikipedia","name-ast.wikipedia.org":"Asturian Wikipedia","name-ast.wikibooks.org":"Asturian Wikibooks","name-ast.wikiquote.org":"Asturian Wikiquote","name-ast.wiktionary.org":"Asturian Wiktionary","name-as.wikipedia.org":"Assamese Wikipedia","name-as.wikibooks.org":"Assamese Wikibooks","name-as.wikiquote.org":"Assamese Wikiquote","name-as.wikisource.org":"Assamese Wikisource","name-as.wiktionary.org":"Assamese Wiktionary","name-atj.wikipedia.org":"Atikamekw Wikipedia","name-auditcom.wikimedia.org":"Audit Committee","name-avk.wikipedia.org":"Kotava Wikipedia","name-av.wikipedia.org":"Avaric Wikipedia","name-av.wiktionary.org":"Avaric Wiktionary","name-awa.wikipedia.org":"Awadhi Wikipedia","name-ay.wikipedia.org":"Aymara Wikipedia","name-ay.wikibooks.org":"Aymara Wikibooks","name-ay.wiktionary.org":"Aymara Wiktionary","name-azb.wikipedia.org":"South Azerbaijani Wikipedia","name-az.wikipedia.org":"Azerbaijani Wikipedia","name-az.wikibooks.org":"Azerbaijani Wikibooks","name-az.wikimedia.org":"Azerbaijani Wikimedians User Group","name-az.wikiquote.org":"Azerbaijani Wikiquote","name-az.wikisource.org":"Azerbaijani Wikisource","name-az.wiktionary.org":"Azerbaijani Wiktionary","name-ban.wikipedia.org":"Balinese Wikipedia","name-ban.wikisource.org":"Balinese Wikisource","name-bar.wikipedia.org":"Bavarian Wikipedia","name-bat-smg.wikipedia.org":"Samogitian Wikipedia","name-ba.wikipedia.org":"Bashkir Wikipedia","name-ba.wikibooks.org":"Bashkir Wikibooks","name-bbc.wikipedia.org":"Toba Batak Wikipedia","name-bcl.wikipedia.org":"Bikol Central Wikipedia","name-bcl.wikiquote.org":"Central Bikol Wikiquote","name-bcl.wiktionary.org":"Central Bikol Wiktionary","name-bd.wikimedia.org":"Wikimedia Bangladesh","name-be-tarask.wikipedia.org":"Belarusian (Tara\u0161kievica) Wikipedia","name-beta.wikiversity.org":"Wikiversity Beta","name-be.wikipedia.org":"Belarusian Wikipedia","name-be.wikibooks.org":"Belarusian Wikibooks","name-be.wikimedia.org":"Wikimedia Belgium","name-be.wikiquote.org":"Belarusian Wikiquote","name-be.wikisource.org":"Belarusian Wikisource","name-be.wiktionary.org":"Belarusian Wiktionary","name-bew.wikipedia.org":"Betawi Wikipedia","name-bg.wikipedia.org":"Bulgarian Wikipedia","name-bg.wikibooks.org":"Bulgarian Wikibooks","name-bg.wikinews.org":"Bulgarian Wikinews","name-bg.wikiquote.org":"Bulgarian Wikiquote","name-bg.wikisource.org":"Bulgarian Wikisource","name-bg.wiktionary.org":"Bulgarian Wiktionary","name-bh.wikipedia.org":"Bhojpuri Wikipedia","name-bh.wiktionary.org":"Bhojpuri Wiktionary","name-bi.wikipedia.org":"Bislama Wikipedia","name-bi.wikibooks.org":"Bislama Wikibooks","name-bi.wiktionary.org":"Bislama Wiktionary","name-bjn.wikipedia.org":"Banjar Wikipedia","name-bjn.wikiquote.org":"Banjar Wikiquote","name-bjn.wiktionary.org":"Banjar Wiktionary","name-blk.wikipedia.org":"Pa'O Wikipedia","name-blk.wiktionary.org":"Pa'O Wiktionary","name-bm.wikipedia.org":"Bambara Wikipedia","name-bm.wikibooks.org":"Bambara Wikibooks","name-bm.wikiquote.org":"Bambara Wikiquote","name-bm.wiktionary.org":"Bambara Wiktionary","name-bn.wikipedia.org":"Bengali Wikipedia","name-bn.wikibooks.org":"Bengali Wikibooks","name-bn.wikiquote.org":"Bengali Wikiquote","name-bn.wikisource.org":"Bengali Wikisource","name-bn.wikivoyage.org":"Bengali Wikivoyage","name-bn.wiktionary.org":"Bengali Wiktionary","name-boardgovcom.wikimedia.org":"Board Governance Committee","name-board.wikimedia.org":"Wikimedia Board","name-bo.wikipedia.org":"Tibetan Wikipedia","name-bo.wikibooks.org":"Tibetan Wikibooks","name-bo.wiktionary.org":"Tibetan Wiktionary","name-bpy.wikipedia.org":"Bishnupriya Wikipedia","name-br.wikipedia.org":"Breton Wikipedia","name-br.wikimedia.org":"Wikimedia Brazil","name-br.wikiquote.org":"Breton Wikiquote","name-br.wikisource.org":"Breton Wikisource","name-br.wiktionary.org":"Breton Wiktionary","name-bs.wikipedia.org":"Bosnian Wikipedia","name-bs.wikibooks.org":"Bosnian Wikibooks","name-bs.wikinews.org":"Bosnian Wikinews","name-bs.wikiquote.org":"Bosnian Wikiquote","name-bs.wikisource.org":"Bosnian Wikisource","name-bs.wiktionary.org":"Bosnian Wiktionary","name-btm.wikipedia.org":"Mandailing Wikipedia","name-btm.wiktionary.org":"Mandailing Wiktionary","name-bug.wikipedia.org":"Buginese Wikipedia","name-bxr.wikipedia.org":"Buryat Wikipedia","name-ca.wikipedia.org":"Catalan Wikipedia","name-ca.wikibooks.org":"Catalan Wikibooks","name-ca.wikimedia.org":"Wikimedia Canada","name-ca.wikinews.org":"Catalan Wikinews","name-ca.wikiquote.org":"Catalan Wikiquote","name-ca.wikisource.org":"Catalan Wikisource","name-ca.wiktionary.org":"Catalan Wiktionary","name-cbk-zam.wikipedia.org":"Chavacano de Zamboanga Wikipedia","name-cdo.wikipedia.org":"Min Dong Chinese Wikipedia","name-ceb.wikipedia.org":"Cebuano Wikipedia","name-ce.wikipedia.org":"Chechen Wikipedia","name-chair.wikimedia.org":"Wikimedia Board Chair","name-affcom.wikimedia.org":"Affcom","name-checkuser.wikimedia.org":"CheckUser volunteers","name-cho.wikipedia.org":"Choctaw Wikipedia","name-chr.wikipedia.org":"Cherokee Wikipedia","name-chr.wiktionary.org":"Cherokee Wiktionary","name-ch.wikipedia.org":"Chamorro Wikipedia","name-ch.wikibooks.org":"Chamorro Wikibooks","name-ch.wiktionary.org":"Chamorro Wiktionary","name-chy.wikipedia.org":"Cheyenne Wikipedia","name-ckb.wikipedia.org":"Central Kurdish Wikipedia","name-ckb.wiktionary.org":"Central Kurdish Wiktionary","name-cn.wikimedia.org":"Wikimedia China","name-collab.wikimedia.org":"Collab","name-commons.wikimedia.org":"Wikimedia Commons","name-co.wikipedia.org":"Corsican Wikipedia","name-co.wikibooks.org":"Corsican Wikibooks","name-co.wikimedia.org":"Wikimedia Colombia","name-co.wikiquote.org":"Corsican Wikiquote","name-co.wiktionary.org":"Corsican Wiktionary","name-crh.wikipedia.org":"Crimean Tatar Wikipedia","name-cr.wikipedia.org":"Cree Wikipedia","name-cr.wikiquote.org":"Cree Wikiquote","name-cr.wiktionary.org":"Cree Wiktionary","name-csb.wikipedia.org":"Kashubian Wikipedia","name-csb.wiktionary.org":"Kashubian Wiktionary","name-cs.wikipedia.org":"Czech Wikipedia","name-cs.wikibooks.org":"Czech Wikibooks","name-cs.wikinews.org":"Czech Wikinews","name-cs.wikiquote.org":"Czech Wikiquote","name-cs.wikisource.org":"Czech Wikisource","name-cs.wikiversity.org":"Czech Wikiversity","name-cs.wiktionary.org":"Czech Wiktionary","name-cu.wikipedia.org":"Church Slavic Wikipedia","name-cv.wikipedia.org":"Chuvash Wikipedia","name-cv.wikibooks.org":"Chuvash Wikibooks","name-cy.wikipedia.org":"Welsh Wikipedia","name-cy.wikibooks.org":"Welsh Wikibooks","name-cy.wikiquote.org":"Welsh Wikiquote","name-cy.wikisource.org":"Welsh Wikisource","name-cy.wiktionary.org":"Welsh Wiktionary","name-dag.wikipedia.org":"Dagbani Wikipedia","name-da.wikipedia.org":"Danish Wikipedia","name-da.wikibooks.org":"Danish Wikibooks","name-da.wikiquote.org":"Danish Wikiquote","name-da.wikisource.org":"Danish Wikisource","name-da.wiktionary.org":"Danish Wiktionary","name-de.wikipedia.org":"German Wikipedia","name-de.wikibooks.org":"German Wikibooks","name-de.wikinews.org":"German Wikinews","name-de.wikiquote.org":"German Wikiquote","name-de.wikisource.org":"German Wikisource","name-de.wikiversity.org":"German Wikiversity","name-de.wikivoyage.org":"German Wikivoyage","name-de.wiktionary.org":"German Wiktionary","name-dga.wikipedia.org":"Dagaare Wikipedia","name-din.wikipedia.org":"Dinka Wikipedia","name-diq.wikipedia.org":"Zazaki Wikipedia","name-diq.wiktionary.org":"Zazaki Wiktionary","name-dk.wikimedia.org":"Wikimedia Denmark","name-donate.wikimedia.org":"Donate","name-dsb.wikipedia.org":"Lower Sorbian Wikipedia","name-dtp.wikipedia.org":"Central Dusun Wikipedia","name-dty.wikipedia.org":"Doteli Wikipedia","name-dv.wikipedia.org":"Divehi Wikipedia","name-dv.wiktionary.org":"Divehi Wiktionary","name-dz.wikipedia.org":"Dzongkha Wikipedia","name-dz.wiktionary.org":"Dzongkha Wiktionary","name-ec.wikimedia.org":"Wikimedistas de Ecuador","name-ee.wikipedia.org":"Ewe Wikipedia","name-el.wikipedia.org":"Greek Wikipedia","name-el.wikibooks.org":"Greek Wikibooks","name-el.wikinews.org":"Greek Wikinews","name-el.wikiquote.org":"Greek Wikiquote","name-el.wikisource.org":"Greek Wikisource","name-el.wikiversity.org":"Greek Wikiversity","name-el.wikivoyage.org":"Greek Wikivoyage","name-el.wiktionary.org":"Greek Wiktionary","name-eml.wikipedia.org":"Emiliano-Romagnolo Wikipedia","name-en.wikipedia.org":"English Wikipedia","name-en.wikibooks.org":"English Wikibooks","name-en.wikinews.org":"English Wikinews","name-en.wikiquote.org":"English Wikiquote","name-en.wikisource.org":"English Wikisource","name-en.wikiversity.org":"English Wikiversity","name-en.wikivoyage.org":"English Wikivoyage","name-en.wiktionary.org":"English Wiktionary","name-eo.wikipedia.org":"Esperanto Wikipedia","name-eo.wikibooks.org":"Esperanto Wikibooks","name-eo.wikinews.org":"Esperanto Wikinews","name-eo.wikiquote.org":"Esperanto Wikiquote","name-eo.wikisource.org":"Esperanto Wikisource","name-eo.wikivoyage.org":"Esperanto Wikivoyage","name-eo.wiktionary.org":"Esperanto Wiktionary","name-es.wikipedia.org":"Spanish Wikipedia","name-es.wikibooks.org":"Spanish Wikibooks","name-es.wikinews.org":"Spanish Wikinews","name-es.wikiquote.org":"Spanish Wikiquote","name-es.wikisource.org":"Spanish Wikisource","name-es.wikiversity.org":"Spanish Wikiversity","name-es.wikivoyage.org":"Spanish Wikivoyage","name-es.wiktionary.org":"Spanish Wiktionary","name-et.wikipedia.org":"Estonian Wikipedia","name-et.wikibooks.org":"Estonian Wikibooks","name-ee.wikimedia.org":"Wikimedia Estonia","name-et.wikiquote.org":"Estonian Wikiquote","name-et.wikisource.org":"Estonian Wikisource","name-et.wiktionary.org":"Estonian Wiktionary","name-eu.wikipedia.org":"Basque Wikipedia","name-eu.wikibooks.org":"Basque Wikibooks","name-eu.wikiquote.org":"Basque Wikiquote","name-eu.wikisource.org":"Basque Wikisource","name-eu.wiktionary.org":"Basque Wiktionary","name-exec.wikimedia.org":"Wikimedia Executive","name-ext.wikipedia.org":"Extremaduran Wikipedia","name-fat.wikipedia.org":"Fante Wikipedia","name-fa.wikipedia.org":"Persian Wikipedia","name-fa.wikibooks.org":"Persian Wikibooks","name-fa.wikinews.org":"Persian Wikinews","name-fa.wikiquote.org":"Persian Wikiquote","name-fa.wikisource.org":"Persian Wikisource","name-fa.wikivoyage.org":"Persian Wikivoyage","name-fa.wiktionary.org":"Persian Wiktionary","name-fdc.wikipedia.org":"Wikimedia FDC","name-ff.wikipedia.org":"Fulah Wikipedia","name-fiu-vro.wikipedia.org":"V\xF5ro Wikipedia","name-fi.wikipedia.org":"Finnish Wikipedia","name-fi.wikibooks.org":"Finnish Wikibooks","name-fi.wikimedia.org":"Wikimedia Finland","name-fi.wikinews.org":"Finnish Wikinews","name-fi.wikiquote.org":"Finnish Wikiquote","name-fi.wikisource.org":"Finnish Wikisource","name-fi.wikiversity.org":"Finnish Wikiversity","name-fi.wikivoyage.org":"Finnish Wikivoyage","name-fi.wiktionary.org":"Finnish Wiktionary","name-fj.wikipedia.org":"Fijian Wikipedia","name-fj.wiktionary.org":"Fijian Wiktionary","name-fon.wikipedia.org":"Fon Wikipedia","name-foundation.wikimedia.org":"Wikimedia Foundation Governance","name-fo.wikipedia.org":"Faroese Wikipedia","name-fo.wikisource.org":"Faroese Wikisource","name-fo.wiktionary.org":"Faroese Wiktionary","name-frp.wikipedia.org":"Arpitan Wikipedia","name-frr.wikipedia.org":"Northern Frisian Wikipedia","name-fr.wikipedia.org":"French Wikipedia","name-fr.wikibooks.org":"French Wikibooks","name-fr.wikinews.org":"French Wikinews","name-fr.wikiquote.org":"French Wikiquote","name-fr.wikisource.org":"French Wikisource","name-fr.wikiversity.org":"French Wikiversity","name-fr.wikivoyage.org":"French Wikivoyage","name-fr.wiktionary.org":"French Wiktionary","name-fur.wikipedia.org":"Friulian Wikipedia","name-fy.wikipedia.org":"Western Frisian Wikipedia","name-fy.wikibooks.org":"Western Frisian Wikibooks","name-fy.wiktionary.org":"Western Frisian Wiktionary","name-gag.wikipedia.org":"Gagauz Wikipedia","name-gan.wikipedia.org":"Gan Chinese Wikipedia","name-ga.wikipedia.org":"Irish Wikipedia","name-ga.wikibooks.org":"Irish Wikibooks","name-ga.wikiquote.org":"Irish Wikiquote","name-ga.wiktionary.org":"Irish Wiktionary","name-gcr.wikipedia.org":"Guianan Creole Wikipedia","name-gd.wikipedia.org":"Scottish Gaelic Wikipedia","name-gd.wiktionary.org":"Scottish Gaelic Wiktionary","name-ge.wikimedia.org":"Wikimedia Community User Group Georgia","name-glk.wikipedia.org":"Gilaki Wikipedia","name-gl.wikipedia.org":"Galician Wikipedia","name-gl.wikibooks.org":"Galician Wikibooks","name-gl.wikiquote.org":"Galician Wikiquote","name-gl.wikisource.org":"Galician Wikisource","name-gl.wiktionary.org":"Galician Wiktionary","name-gn.wikipedia.org":"Guarani Wikipedia","name-gn.wikibooks.org":"Guarani Wikibooks","name-gn.wiktionary.org":"Guarani Wiktionary","name-gom.wikipedia.org":"Goan Konkani Wikipedia","name-gom.wiktionary.org":"Goan Konkani Wiktionary","name-gor.wikipedia.org":"Gorontalo Wikipedia","name-gor.wiktionary.org":"Gorontalo Wiktionary","name-got.wikipedia.org":"Gothic Wikipedia","name-got.wikibooks.org":"Gothic Wikibooks","name-gpe.wikipedia.org":"Ghanaian Pidgin Wikipedia","name-grants.wikimedia.org":"Wikimedia Foundation Grants Discussion","name-project-localized-name-group-wikibooks":"Wikibooks","name-project-localized-name-group-wikinews":"Wikinews","name-project-localized-name-group-wikipedia":"Wikipedia","name-project-localized-name-group-wikiquote":"Wikiquote","name-project-localized-name-group-wikisource":"Wikisource","name-project-localized-name-group-wikiversity":"Wikiversity","name-project-localized-name-group-wikivoyage":"Wikivoyage","name-project-localized-name-group-wiktionary":"Wiktionary","name-gr.wikimedia.org":"Wikimedia Community User Group Greece","name-guc.wikipedia.org":"Wayuu Wikipedia","name-gur.wikipedia.org":"Farefare Wikipedia","name-gu.wikipedia.org":"Gujarati Wikipedia","name-gu.wikibooks.org":"Gujarati Wikibooks","name-gu.wikiquote.org":"Gujarati Wikiquote","name-gu.wikisource.org":"Gujarati Wikisource","name-gu.wiktionary.org":"Gujarati Wiktionary","name-guw.wikipedia.org":"Gun Wikipedia","name-guw.wikinews.org":"Gun Wikinews","name-guw.wikiquote.org":"Gun Wikiquote","name-guw.wiktionary.org":"Gun Wiktionary","name-gv.wikipedia.org":"Manx Wikipedia","name-gv.wiktionary.org":"Manx Wiktionary","name-hak.wikipedia.org":"Hakka Chinese Wikipedia","name-ha.wikipedia.org":"Hausa Wikipedia","name-ha.wiktionary.org":"Hausa Wiktionary","name-haw.wikipedia.org":"Hawaiian Wikipedia","name-he.wikipedia.org":"Hebrew Wikipedia","name-he.wikibooks.org":"Hebrew Wikibooks","name-he.wikinews.org":"Hebrew Wikinews","name-he.wikiquote.org":"Hebrew Wikiquote","name-he.wikisource.org":"Hebrew Wikisource","name-he.wikivoyage.org":"Hebrew Wikivoyage","name-he.wiktionary.org":"Hebrew Wiktionary","name-hif.wikipedia.org":"Fiji Hindi Wikipedia","name-hif.wiktionary.org":"Fiji Hindi Wiktionary","name-hi.wikipedia.org":"Hindi Wikipedia","name-hi.wikibooks.org":"Hindi Wikibooks","name-hi.wikiquote.org":"Hindi Wikiquote","name-hi.wikisource.org":"Hindi Wikisource","name-hi.wikiversity.org":"Hindi Wikiversity","name-hi.wikivoyage.org":"Hindi Wikivoyage","name-hi.wiktionary.org":"Hindi Wiktionary","name-ho.wikipedia.org":"Hiri Motu Wikipedia","name-hr.wikipedia.org":"Croatian Wikipedia","name-hr.wikibooks.org":"Croatian Wikibooks","name-hr.wikiquote.org":"Croatian Wikiquote","name-hr.wikisource.org":"Croatian Wikisource","name-hr.wiktionary.org":"Croatian Wiktionary","name-hsb.wikipedia.org":"Upper Sorbian Wikipedia","name-hsb.wiktionary.org":"Upper Sorbian Wiktionary","name-ht.wikipedia.org":"Haitian Creole Wikipedia","name-ht.wikisource.org":"Haitian Creole Wikisource","name-hu.wikipedia.org":"Hungarian Wikipedia","name-hu.wikibooks.org":"Hungarian Wikibooks","name-hu.wikinews.org":"Hungarian Wikinews","name-hu.wikiquote.org":"Hungarian Wikiquote","name-hu.wikisource.org":"Hungarian Wikisource","name-hu.wiktionary.org":"Hungarian Wiktionary","name-hy.wikipedia.org":"Armenian Wikipedia","name-hy.wikibooks.org":"Armenian Wikibooks","name-hy.wikiquote.org":"Armenian Wikiquote","name-hy.wikisource.org":"Armenian Wikisource","name-hy.wiktionary.org":"Armenian Wiktionary","name-hyw.wikipedia.org":"Western Armenian Wikipedia","name-hz.wikipedia.org":"Herero Wikipedia","name-ia.wikipedia.org":"Interlingua Wikipedia","name-ia.wikibooks.org":"Interlingua Wikibooks","name-ia.wiktionary.org":"Interlingua Wiktionary","name-id-internal.wikimedia.org":"Wikimedia Indonesia (internal)","name-id.wikipedia.org":"Indonesian Wikipedia","name-id.wikibooks.org":"Indonesian Wikibooks","name-id.wikimedia.org":"Wikimedia Indonesia","name-id.wikiquote.org":"Indonesian Wikiquote","name-id.wikisource.org":"Indonesian Wikisource","name-id.wiktionary.org":"Indonesian Wiktionary","name-iegcom.wikimedia.org":"Individual Engagement Grants Committee","name-ie.wikipedia.org":"Interlingue Wikipedia","name-ie.wikibooks.org":"Interlingue Wikibooks","name-ie.wiktionary.org":"Interlingue Wiktionary","name-igl.wikipedia.org":"Igala Wikipedia","name-ig.wikipedia.org":"Igbo Wikipedia","name-ig.wikiquote.org":"Igbo Wikiquote","name-ig.wiktionary.org":"Igbo Wiktionary","name-ii.wikipedia.org":"Sichuan Yi Wikipedia","name-ik.wikipedia.org":"Inupiaq Wikipedia","name-ik.wiktionary.org":"Inupiaq Wiktionary","name-ilo.wikipedia.org":"Iloko Wikipedia","name-il.wikimedia.org":"Wikimedia Israel","name-incubator.wikimedia.org":"Wikimedia Incubator","name-inh.wikipedia.org":"Ingush Wikipedia","name-internal.wikimedia.org":"Internal","name-io.wikipedia.org":"Ido Wikipedia","name-io.wiktionary.org":"Ido Wiktionary","name-is.wikipedia.org":"Icelandic Wikipedia","name-is.wikibooks.org":"Icelandic Wikibooks","name-is.wikiquote.org":"Icelandic Wikiquote","name-is.wikisource.org":"Icelandic Wikisource","name-is.wiktionary.org":"Icelandic Wiktionary","name-it.wikipedia.org":"Italian Wikipedia","name-it.wikibooks.org":"Italian Wikibooks","name-it.wikinews.org":"Italian Wikinews","name-it.wikiquote.org":"Italian Wikiquote","name-it.wikisource.org":"Italian Wikisource","name-it.wikiversity.org":"Italian Wikiversity","name-it.wikivoyage.org":"Italian Wikivoyage","name-it.wiktionary.org":"Italian Wiktionary","name-iu.wikipedia.org":"Inuktitut Wikipedia","name-iu.wiktionary.org":"Inuktitut Wiktionary","name-jam.wikipedia.org":"Jamaican Patois Wikipedia","name-ja.wikipedia.org":"Japanese Wikipedia","name-ja.wikibooks.org":"Japanese Wikibooks","name-ja.wikinews.org":"Japanese Wikinews","name-ja.wikiquote.org":"Japanese Wikiquote","name-ja.wikisource.org":"Japanese Wikisource","name-ja.wikiversity.org":"Japanese Wikiversity","name-ja.wikivoyage.org":"Japanese Wikivoyage","name-ja.wiktionary.org":"Japanese Wiktionary","name-jbo.wikipedia.org":"Lojban Wikipedia","name-jbo.wiktionary.org":"Lojban Wiktionary","name-jv.wikipedia.org":"Javanese Wikipedia","name-jv.wikisource.org":"Javanese Wikisource","name-jv.wiktionary.org":"Javanese Wiktionary","name-kaa.wikipedia.org":"Kara-Kalpak Wikipedia","name-kaa.wiktionary.org":"Karakalpak Wiktionary","name-kab.wikipedia.org":"Kabyle Wikipedia","name-ka.wikipedia.org":"Georgian Wikipedia","name-ka.wikibooks.org":"Georgian Wikibooks","name-ka.wikiquote.org":"Georgian Wikiquote","name-ka.wikisource.org":"Georgian Wikisource","name-ka.wiktionary.org":"Georgian Wiktionary","name-kbd.wikipedia.org":"Kabardian Wikipedia","name-kbd.wiktionary.org":"Kabardian Wiktionary","name-kbp.wikipedia.org":"Kabiy\xE8 Wikipedia","name-kcg.wikipedia.org":"Tyap Wikipedia","name-kcg.wiktionary.org":"Tyap Wiktionary","name-kg.wikipedia.org":"Kongo Wikipedia","name-ki.wikipedia.org":"Kikuyu Wikipedia","name-kj.wikipedia.org":"Kuanyama Wikipedia","name-kk.wikipedia.org":"Kazakh Wikipedia","name-kk.wikibooks.org":"Kazakh Wikibooks","name-kk.wikiquote.org":"Kazakh Wikiquote","name-kk.wiktionary.org":"Kazakh Wiktionary","name-kl.wikipedia.org":"Kalaallisut Wikipedia","name-kl.wiktionary.org":"Kalaallisut Wiktionary","name-km.wikipedia.org":"Khmer Wikipedia","name-km.wikibooks.org":"Khmer Wikibooks","name-km.wiktionary.org":"Khmer Wiktionary","name-kn.wikipedia.org":"Kannada Wikipedia","name-kn.wikibooks.org":"Kannada Wikibooks","name-kn.wikiquote.org":"Kannada Wikiquote","name-kn.wikisource.org":"Kannada Wikisource","name-kn.wiktionary.org":"Kannada Wiktionary","name-koi.wikipedia.org":"Komi-Permyak Wikipedia","name-ko.wikipedia.org":"Korean Wikipedia","name-ko.wikibooks.org":"Korean Wikibooks","name-ko.wikinews.org":"Korean Wikinews","name-ko.wikiquote.org":"Korean Wikiquote","name-ko.wikisource.org":"Korean Wikisource","name-ko.wikiversity.org":"Korean Wikiversity","name-ko.wiktionary.org":"Korean Wiktionary","name-krc.wikipedia.org":"Karachay-Balkar Wikipedia","name-kr.wikipedia.org":"Kanuri Wikipedia","name-kr.wikiquote.org":"Kanuri Wikiquote","name-ksh.wikipedia.org":"Colognian Wikipedia","name-ks.wikipedia.org":"Kashmiri Wikipedia","name-ks.wikibooks.org":"Kashmiri Wikibooks","name-ks.wikiquote.org":"Kashmiri Wikiquote","name-ks.wiktionary.org":"Kashmiri Wiktionary","name-kus.wikipedia.org":"Kusaal Wikipedia","name-ku.wikipedia.org":"Kurdish Wikipedia","name-ku.wikibooks.org":"Kurdish Wikibooks","name-ku.wikiquote.org":"Kurdish Wikiquote","name-ku.wiktionary.org":"Kurdish Wiktionary","name-kv.wikipedia.org":"Komi Wikipedia","name-kw.wikipedia.org":"Cornish Wikipedia","name-kw.wikiquote.org":"Cornish Wikiquote","name-kw.wiktionary.org":"Cornish Wiktionary","name-ky.wikipedia.org":"Kyrgyz Wikipedia","name-ky.wikibooks.org":"Kyrgyz Wikibooks","name-ky.wikiquote.org":"Kyrgyz Wikiquote","name-ky.wiktionary.org":"Kyrgyz Wiktionary","name-wikitech.wikimedia.org":"Wikitech","name-labtest.wikimedia.org":"Test Wikitech","name-lad.wikipedia.org":"Ladino Wikipedia","name-la.wikipedia.org":"Latin Wikipedia","name-la.wikibooks.org":"Latin Wikibooks","name-la.wikiquote.org":"Latin Wikiquote","name-la.wikisource.org":"Latin Wikisource","name-la.wiktionary.org":"Latin Wiktionary","name-lbe.wikipedia.org":"Lak Wikipedia","name-lb.wikipedia.org":"Luxembourgish Wikipedia","name-lb.wikibooks.org":"Luxembourgish Wikibooks","name-lb.wikiquote.org":"Luxembourgish Wikiquote","name-lb.wiktionary.org":"Luxembourgish Wiktionary","name-legalteam.wikimedia.org":"Legal Team","name-lez.wikipedia.org":"Lezghian Wikipedia","name-lfn.wikipedia.org":"Lingua Franca Nova Wikipedia","name-lg.wikipedia.org":"Ganda Wikipedia","name-lij.wikipedia.org":"Ligurian Wikipedia","name-lij.wikisource.org":"Ligurian Wikisource","name-li.wikipedia.org":"Limburgish Wikipedia","name-li.wikibooks.org":"Limburgish Wikibooks","name-li.wikinews.org":"Limburgish Wikinews","name-li.wikiquote.org":"Limburgish Wikiquote","name-li.wikisource.org":"Limburgish Wikisource","name-li.wiktionary.org":"Limburgish Wiktionary","name-lld.wikipedia.org":"Ladin Wikipedia","name-lmo.wikipedia.org":"Lombard Wikipedia","name-lmo.wiktionary.org":"Lombard Wiktionary","name-ln.wikipedia.org":"Lingala Wikipedia","name-ln.wikibooks.org":"Lingala Wikibooks","name-ln.wiktionary.org":"Lingala Wiktionary","name-login.wikimedia.org":"Wikimedia Login","name-lo.wikipedia.org":"Lao Wikipedia","name-lo.wiktionary.org":"Lao Wiktionary","name-lrc.wikipedia.org":"Northern Luri Wikipedia","name-ltg.wikipedia.org":"Latgalian Wikipedia","name-lt.wikipedia.org":"Lithuanian Wikipedia","name-lt.wikibooks.org":"Lithuanian Wikibooks","name-lt.wikiquote.org":"Lithuanian Wikiquote","name-lt.wikisource.org":"Lithuanian Wikisource","name-lt.wiktionary.org":"Lithuanian Wiktionary","name-lv.wikipedia.org":"Latvian Wikipedia","name-lv.wikibooks.org":"Latvian Wikibooks","name-lv.wiktionary.org":"Latvian Wiktionary","name-mad.wikipedia.org":"Madurese Wikipedia","name-mai.wikipedia.org":"Maithili Wikipedia","name-mai.wikimedia.org":"Maithili Wikimedians User Group","name-map-bms.wikipedia.org":"Basa Banyumasan Wikipedia","name-mdf.wikipedia.org":"Moksha Wikipedia","name-mediawiki.org":"MediaWiki","name-meta.wikimedia.org":"Meta-Wiki","name-mg.wikipedia.org":"Malagasy Wikipedia","name-mg.wikibooks.org":"Malagasy Wikibooks","name-mg.wiktionary.org":"Malagasy Wiktionary","name-mhr.wikipedia.org":"Eastern Mari Wikipedia","name-mh.wikipedia.org":"Marshallese Wikipedia","name-mh.wiktionary.org":"Marshallese Wiktionary","name-min.wikipedia.org":"Minangkabau Wikipedia","name-min.wiktionary.org":"Minangkabau Wiktionary","name-mi.wikipedia.org":"Maori Wikipedia","name-mi.wikibooks.org":"Maori Wikibooks","name-mi.wiktionary.org":"Maori Wiktionary","name-mk.wikipedia.org":"Macedonian Wikipedia","name-mk.wikibooks.org":"Macedonian Wikibooks","name-mk.wikimedia.org":"Wikimedia Macedonia","name-mk.wikisource.org":"Macedonian Wikisource","name-mk.wiktionary.org":"Macedonian Wiktionary","name-ml.wikipedia.org":"Malayalam Wikipedia","name-ml.wikibooks.org":"Malayalam Wikibooks","name-ml.wikiquote.org":"Malayalam Wikiquote","name-ml.wikisource.org":"Malayalam Wikisource","name-ml.wiktionary.org":"Malayalam Wiktionary","name-mni.wikipedia.org":"Meitei Wikipedia","name-mni.wiktionary.org":"Meetei Wiktionary","name-mn.wikipedia.org":"Mongolian Wikipedia","name-mn.wikibooks.org":"Mongolian Wikibooks","name-mn.wiktionary.org":"Mongolian Wiktionary","name-mnw.wikipedia.org":"Mon Wikipedia","name-mnw.wiktionary.org":"Mon Wiktionary","name-movementroles.wikimedia.org":"Movement Roles","name-mo.wikipedia.org":"Moldovan Wikipedia","name-mo.wiktionary.org":"Moldovan Wiktionary","name-mrj.wikipedia.org":"Western Mari Wikipedia","name-mr.wikipedia.org":"Marathi Wikipedia","name-mr.wikibooks.org":"Marathi Wikibooks","name-mr.wikiquote.org":"Marathi Wikiquote","name-mr.wikisource.org":"Marathi Wikisource","name-mr.wiktionary.org":"Marathi Wiktionary","name-ms.wikipedia.org":"Malay Wikipedia","name-ms.wikibooks.org":"Malay Wikibooks","name-ms.wikisource.org":"Malay Wikisource","name-ms.wiktionary.org":"Malay Wiktionary","name-mt.wikipedia.org":"Maltese Wikipedia","name-mt.wiktionary.org":"Maltese Wiktionary","name-mus.wikipedia.org":"Creek Wikipedia","name-mwl.wikipedia.org":"Mirandese Wikipedia","name-mx.wikimedia.org":"Wikimedia Mexico","name-myv.wikipedia.org":"Erzya Wikipedia","name-my.wikipedia.org":"Burmese Wikipedia","name-my.wikibooks.org":"Burmese Wikibooks","name-my.wikisource.org":"Burmese Wikisource","name-my.wiktionary.org":"Burmese Wiktionary","name-mzn.wikipedia.org":"Mazanderani Wikipedia","name-nah.wikipedia.org":"N\u0101huatl Wikipedia","name-nah.wikibooks.org":"N\u0101huatl Wikibooks","name-nah.wiktionary.org":"N\u0101huatl Wiktionary","name-nap.wikipedia.org":"Neapolitan Wikipedia","name-nap.wikisource.org":"Neapolitan Wikisource","name-na.wikipedia.org":"Nauru Wikipedia","name-na.wikibooks.org":"Nauru Wikibooks","name-na.wikiquote.org":"Nauru Wikiquote","name-na.wiktionary.org":"Nauru Wiktionary","name-nds-nl.wikipedia.org":"Low Saxon Wikipedia","name-nds.wikipedia.org":"Low German Wikipedia","name-nds.wikibooks.org":"Low German Wikibooks","name-nds.wikiquote.org":"Low German Wikiquote","name-nds.wiktionary.org":"Low German Wiktionary","name-ne.wikipedia.org":"Nepali Wikipedia","name-ne.wikibooks.org":"Nepali Wikibooks","name-ne.wiktionary.org":"Nepali Wiktionary","name-new.wikipedia.org":"Newari Wikipedia","name-ng.wikipedia.org":"Ndonga Wikipedia","name-ng.wikimedia.org":"Wikimedia Nigeria","name-nia.wikipedia.org":"Nias Wikipedia","name-nia.wiktionary.org":"Nias Wiktionary","name-nl.wikipedia.org":"Dutch Wikipedia","name-nl.wikibooks.org":"Dutch Wikibooks","name-nl.wikimedia.org":"Wikimedia Netherlands","name-nl.wikinews.org":"Dutch Wikinews","name-nl.wikiquote.org":"Dutch Wikiquote","name-nl.wikisource.org":"Dutch Wikisource","name-nl.wikivoyage.org":"Dutch Wikivoyage","name-nl.wiktionary.org":"Dutch Wiktionary","name-nn.wikipedia.org":"Norwegian Nynorsk Wikipedia","name-nn.wikiquote.org":"Norwegian Nynorsk Wikiquote","name-nn.wiktionary.org":"Norwegian Nynorsk Wiktionary","name-noboard-chapters.wikimedia.org":"Wikimedia Norway Internal Board","name-nostalgia.wikipedia.org":"Nostalgia Wikipedia","name-nov.wikipedia.org":"Novial Wikipedia","name-no.wikipedia.org":"Norwegian Bokm\xE5l Wikipedia","name-no.wikibooks.org":"Norwegian Wikibooks","name-no.wikimedia.org":"Wikimedia Norway","name-no.wikinews.org":"Norwegian Wikinews","name-no.wikiquote.org":"Norwegian Bokm\xE5l Wikiquote","name-no.wikisource.org":"Norwegian Wikisource","name-no.wiktionary.org":"Norwegian Bokm\xE5l Wiktionary","name-nqo.wikipedia.org":"N'Ko Wikipedia","name-nrm.wikipedia.org":"Nouormand Wikipedia","name-nso.wikipedia.org":"Northern Sotho Wikipedia","name-nv.wikipedia.org":"Navajo Wikipedia","name-nyc.wikimedia.org":"Wikimedia New York City","name-ny.wikipedia.org":"Nyanja Wikipedia","name-nz.wikimedia.org":"Wikimedia New Zealand","name-oc.wikipedia.org":"Occitan Wikipedia","name-oc.wikibooks.org":"Occitan Wikibooks","name-oc.wiktionary.org":"Occitan Wiktionary","name-office.wikimedia.org":"Wikimedia Office","name-olo.wikipedia.org":"Livvi-Karelian Wikipedia","name-ombudsmen.wikimedia.org":"Ombuds Committee","name-om.wikipedia.org":"Oromo Wikipedia","name-om.wiktionary.org":"Oromo Wiktionary","name-or.wikipedia.org":"Oriya Wikipedia","name-or.wikisource.org":"Oriya Wikisource","name-or.wiktionary.org":"Oriya Wiktionary","name-os.wikipedia.org":"Ossetic Wikipedia","name-vrt-wiki.wikimedia.org":"Volunteer Response Team","name-outreach.wikimedia.org":"Wikimedia Outreach","name-pa-us.wikimedia.org":"Wikimedia Pennsylvania","name-pag.wikipedia.org":"Pangasinan Wikipedia","name-pam.wikipedia.org":"Pampanga Wikipedia","name-pap.wikipedia.org":"Papiamento Wikipedia","name-pa.wikipedia.org":"Punjabi Wikipedia","name-pa.wikibooks.org":"Punjabi Wikibooks","name-pa.wikisource.org":"Punjabi Wikisource","name-pa.wiktionary.org":"Punjabi Wiktionary","name-pcd.wikipedia.org":"Picard Wikipedia","name-pcm.wikipedia.org":"Nigerian Pidgin Wikipedia","name-pdc.wikipedia.org":"Pennsylvania German Wikipedia","name-pfl.wikipedia.org":"Palatine German Wikipedia","name-pih.wikipedia.org":"Norfuk / Pitkern Wikipedia","name-pi.wikipedia.org":"Pali Wikipedia","name-pi.wiktionary.org":"Pali Wiktionary","name-pl.wikipedia.org":"Polish Wikipedia","name-pl.wikibooks.org":"Polish Wikibooks","name-pl.wikimedia.org":"Wikimedia Poland","name-pl.wikinews.org":"Polish Wikinews","name-pl.wikiquote.org":"Polish Wikiquote","name-pl.wikisource.org":"Polish Wikisource","name-pl.wikivoyage.org":"Polish Wikivoyage","name-pl.wiktionary.org":"Polish Wiktionary","name-pms.wikipedia.org":"Piedmontese Wikipedia","name-pms.wikisource.org":"Piedmontese Wikisource","name-pnb.wikipedia.org":"Western Punjabi Wikipedia","name-pnb.wiktionary.org":"Western Punjabi Wiktionary","name-pnt.wikipedia.org":"Pontic Wikipedia","name-ps.wikipedia.org":"Pashto Wikipedia","name-ps.wikibooks.org":"Pashto Wikibooks","name-ps.wikivoyage.org":"Pashto Wikivoyage","name-ps.wiktionary.org":"Pashto Wiktionary","name-pt.wikipedia.org":"Portuguese Wikipedia","name-pt.wikibooks.org":"Portuguese Wikibooks","name-pt.wikinews.org":"Portuguese Wikinews","name-pt.wikiquote.org":"Portuguese Wikiquote","name-pt.wikisource.org":"Portuguese Wikisource","name-pt.wikiversity.org":"Portuguese Wikiversity","name-pt.wikivoyage.org":"Portuguese Wikivoyage","name-pt.wiktionary.org":"Portuguese Wiktionary","name-punjabi.wikimedia.org":"Punjabi Wikimedians","name-pwn.wikipedia.org":"Paiwan Wikipedia","name-quality.wikimedia.org":"Wikimedia Quality","name-qu.wikipedia.org":"Quechua Wikipedia","name-qu.wikibooks.org":"Quechua Wikibooks","name-qu.wikiquote.org":"Quechua Wikiquote","name-qu.wiktionary.org":"Quechua Wiktionary","name-rm.wikipedia.org":"Romansh Wikipedia","name-rm.wikibooks.org":"Romansh Wikibooks","name-rm.wiktionary.org":"Romansh Wiktionary","name-rmy.wikipedia.org":"Romani Wikipedia","name-rn.wikipedia.org":"Rundi Wikipedia","name-rn.wiktionary.org":"Rundi Wiktionary","name-roa-rup.wikipedia.org":"Aromanian Wikipedia","name-roa-rup.wiktionary.org":"Aromanian Wiktionary","name-roa-tara.wikipedia.org":"Tarand\xEDne Wikipedia","name-ro.wikipedia.org":"Romanian Wikipedia","name-ro.wikibooks.org":"Romanian Wikibooks","name-ro.wikinews.org":"Romanian Wikinews","name-ro.wikiquote.org":"Romanian Wikiquote","name-ro.wikisource.org":"Romanian Wikisource","name-ro.wikivoyage.org":"Romanian Wikivoyage","name-ro.wiktionary.org":"Romanian Wiktionary","name-rs.wikimedia.org":"Wikimedia Serbia","name-rue.wikipedia.org":"Rusyn Wikipedia","name-ru.wikipedia.org":"Russian Wikipedia","name-ru.wikibooks.org":"Russian Wikibooks","name-ru.wikimedia.org":"Wikimedia Russia","name-ru.wikinews.org":"Russian Wikinews","name-ru.wikiquote.org":"Russian Wikiquote","name-ru.wikisource.org":"Russian Wikisource","name-ru.wikiversity.org":"Russian Wikiversity","name-ru.wikivoyage.org":"Russian Wikivoyage","name-ru.wiktionary.org":"Russian Wiktionary","name-rw.wikipedia.org":"Kinyarwanda Wikipedia","name-rw.wiktionary.org":"Kinyarwanda Wiktionary","name-sah.wikipedia.org":"Sakha Wikipedia","name-sah.wikiquote.org":"Sakha Wikiquote","name-sah.wikisource.org":"Sakha Wikisource","name-sat.wikipedia.org":"Santali Wikipedia","name-sa.wikipedia.org":"Sanskrit Wikipedia","name-sa.wikibooks.org":"Sanskrit Wikibooks","name-sa.wikiquote.org":"Sanskrit Wikiquote","name-sa.wikisource.org":"Sanskrit Wikisource","name-sa.wiktionary.org":"Sanskrit Wiktionary","name-scn.wikipedia.org":"Sicilian Wikipedia","name-scn.wiktionary.org":"Sicilian Wiktionary","name-sco.wikipedia.org":"Scots Wikipedia","name-sc.wikipedia.org":"Sardinian Wikipedia","name-sc.wiktionary.org":"Sardinian Wiktionary","name-sd.wikipedia.org":"Sindhi Wikipedia","name-sd.wikinews.org":"Sindhi Wikinews","name-sd.wiktionary.org":"Sindhi Wiktionary","name-searchcom.wikimedia.org":"Search Committee","name-se.wikipedia.org":"Northern Sami Wikipedia","name-se.wikibooks.org":"Northern Sami Wikibooks","name-se.wikimedia.org":"Wikimedia Sweden","name-sg.wikipedia.org":"Sango Wikipedia","name-sg.wiktionary.org":"Sango Wiktionary","name-shi.wikipedia.org":"Tachelhit Wikipedia","name-shn.wikipedia.org":"Shan Wikipedia","name-shn.wikibooks.org":"Shan Wikibooks","name-shn.wikivoyage.org":"Shan Wikivoyage","name-shn.wiktionary.org":"Shan Wiktionary","name-sh.wikipedia.org":"Serbo-Croatian Wikipedia","name-sh.wiktionary.org":"Serbo-Croatian Wiktionary","name-shy.wiktionary.org":"Shawiya Wiktionary","name-simple.wikipedia.org":"Simple English Wikipedia","name-simple.wikibooks.org":"Simple English Wikibooks","name-simple.wikiquote.org":"Simple English Wikiquote","name-simple.wiktionary.org":"Simple English Wiktionary","name-si.wikipedia.org":"Sinhala Wikipedia","name-si.wikibooks.org":"Sinhala Wikibooks","name-si.wiktionary.org":"Sinhala Wiktionary","name-skr.wikipedia.org":"Saraiki Wikipedia","name-skr.wiktionary.org":"Saraiki Wiktionary","name-sk.wikipedia.org":"Slovak Wikipedia","name-sk.wikibooks.org":"Slovak Wikibooks","name-sk.wikiquote.org":"Slovak Wikiquote","name-sk.wikisource.org":"Slovak Wikisource","name-sk.wiktionary.org":"Slovak Wiktionary","name-sl.wikipedia.org":"Slovenian Wikipedia","name-sl.wikibooks.org":"Slovenian Wikibooks","name-sl.wikiquote.org":"Slovenian Wikiquote","name-sl.wikisource.org":"Slovenian Wikisource","name-sl.wikiversity.org":"Slovenian Wikiversity","name-sl.wiktionary.org":"Slovenian Wiktionary","name-smn.wikipedia.org":"Inari Sami Wikipedia","name-sm.wikipedia.org":"Samoan Wikipedia","name-sm.wiktionary.org":"Samoan Wiktionary","name-sn.wikipedia.org":"Shona Wikipedia","name-sn.wiktionary.org":"Shona Wiktionary","name-wikisource.org":"Multilingual Wikisource","name-so.wikipedia.org":"Somali Wikipedia","name-so.wiktionary.org":"Somali Wiktionary","name-spcom.wikimedia.org":"Spcom","name-species.wikimedia.org":"Wikispecies","name-sq.wikipedia.org":"Albanian Wikipedia","name-sq.wikibooks.org":"Albanian Wikibooks","name-sq.wikinews.org":"Albanian Wikinews","name-sq.wikiquote.org":"Albanian Wikiquote","name-sq.wiktionary.org":"Albanian Wiktionary","name-srn.wikipedia.org":"Sranan Tongo Wikipedia","name-sr.wikipedia.org":"Serbian Wikipedia","name-sr.wikibooks.org":"Serbian Wikibooks","name-sr.wikinews.org":"Serbian Wikinews","name-sr.wikiquote.org":"Serbian Wikiquote","name-sr.wikisource.org":"Serbian Wikisource","name-sr.wiktionary.org":"Serbian Wiktionary","name-ss.wikipedia.org":"Swati Wikipedia","name-ss.wiktionary.org":"Swati Wiktionary","name-steward.wikimedia.org":"Steward community","name-stq.wikipedia.org":"Saterland Frisian Wikipedia","name-strategy.wikimedia.org":"Strategic Planning","name-st.wikipedia.org":"Southern Sotho Wikipedia","name-st.wiktionary.org":"Southern Sotho Wiktionary","name-su.wikipedia.org":"Sundanese Wikipedia","name-su.wikibooks.org":"Sundanese Wikibooks","name-su.wikiquote.org":"Sundanese Wikiquote","name-su.wikisource.org":"Sundanese Wikisource","name-su.wiktionary.org":"Sundanese Wiktionary","name-sv.wikipedia.org":"Swedish Wikipedia","name-sv.wikibooks.org":"Swedish Wikibooks","name-sv.wikinews.org":"Swedish Wikinews","name-sv.wikiquote.org":"Swedish Wikiquote","name-sv.wikisource.org":"Swedish Wikisource","name-sv.wikiversity.org":"Swedish Wikiversity","name-sv.wikivoyage.org":"Swedish Wikivoyage","name-sv.wiktionary.org":"Swedish Wiktionary","name-sw.wikipedia.org":"Swahili Wikipedia","name-sw.wikibooks.org":"Swahili Wikibooks","name-sw.wiktionary.org":"Swahili Wiktionary","name-sysop-it.wikipedia.org":"Italian Wikipedia sysops","name-sysop-pl.wikimedia.org":"Polish Wikipedia sysops","name-szl.wikipedia.org":"Silesian Wikipedia","name-szy.wikipedia.org":"Sakizaya Wikipedia","name-ta.wikipedia.org":"Tamil Wikipedia","name-ta.wikibooks.org":"Tamil Wikibooks","name-ta.wikinews.org":"Tamil Wikinews","name-ta.wikiquote.org":"Tamil Wikiquote","name-ta.wikisource.org":"Tamil Wikisource","name-ta.wiktionary.org":"Tamil Wiktionary","name-tay.wikipedia.org":"Atayal Wikipedia","name-tcy.wikipedia.org":"Tulu Wikipedia","name-ten.wikipedia.org":"Wikipedia 10","name-test2.wikipedia.org":"Test2 Wikipedia","name-test.wikipedia.org":"Test Wikipedia","name-test.wikidata.org":"Test Wikidata","name-tet.wikipedia.org":"Tetum Wikipedia","name-te.wikipedia.org":"Telugu Wikipedia","name-te.wikibooks.org":"Telugu Wikibooks","name-te.wikiquote.org":"Telugu Wikiquote","name-te.wikisource.org":"Telugu Wikisource","name-te.wiktionary.org":"Telugu Wiktionary","name-tg.wikipedia.org":"Tajik Wikipedia","name-tg.wikibooks.org":"Tajik Wikibooks","name-tg.wiktionary.org":"Tajik Wiktionary","name-thankyou.wikipedia.org":"Thank you","name-th.wikipedia.org":"Thai Wikipedia","name-th.wikibooks.org":"Thai Wikibooks","name-th.wikinews.org":"Thai Wikinews","name-th.wikiquote.org":"Thai Wikiquote","name-th.wikisource.org":"Thai Wikisource","name-th.wiktionary.org":"Thai Wiktionary","name-ti.wikipedia.org":"Tigrinya Wikipedia","name-ti.wiktionary.org":"Tigrinya Wiktionary","name-tk.wikipedia.org":"Turkmen Wikipedia","name-tk.wikibooks.org":"Turkmen Wikibooks","name-tk.wikiquote.org":"Turkmen Wikiquote","name-tk.wiktionary.org":"Turkmen Wiktionary","name-tl.wikipedia.org":"Tagalog Wikipedia","name-tl.wikibooks.org":"Tagalog Wikibooks","name-tl.wikiquote.org":"Tagalog Wikiquote","name-tl.wiktionary.org":"Tagalog Wiktionary","name-tly.wikipedia.org":"Talysh Wikipedia","name-tn.wikipedia.org":"Tswana Wikipedia","name-tn.wiktionary.org":"Tswana Wiktionary","name-to.wikipedia.org":"Tongan Wikipedia","name-to.wiktionary.org":"Tongan Wiktionary","name-tpi.wikipedia.org":"Tok Pisin Wikipedia","name-tpi.wiktionary.org":"Tok Pisin Wiktionary","name-transitionteam.wikimedia.org":"ED Transition Team","name-trv.wikipedia.org":"Seediq Wikipedia","name-tr.wikipedia.org":"Turkish Wikipedia","name-tr.wikibooks.org":"Turkish Wikibooks","name-tr.wikimedia.org":"Wikimedia Turkey","name-tr.wikinews.org":"Turkish Wikinews","name-tr.wikiquote.org":"Turkish Wikiquote","name-tr.wikisource.org":"Turkish Wikisource","name-tr.wikivoyage.org":"Turkish Wikivoyage","name-tr.wiktionary.org":"Turkish Wiktionary","name-ts.wikipedia.org":"Tsonga Wikipedia","name-ts.wiktionary.org":"Tsonga Wiktionary","name-tt.wikipedia.org":"Tatar Wikipedia","name-tt.wikibooks.org":"Tatar Wikibooks","name-tt.wikiquote.org":"Tatar Wikiquote","name-tt.wiktionary.org":"Tatar Wiktionary","name-tum.wikipedia.org":"Tumbuka Wikipedia","name-tw.wikipedia.org":"Twi Wikipedia","name-tw.wiktionary.org":"Twi Wiktionary","name-tyv.wikipedia.org":"Tuvinian Wikipedia","name-ty.wikipedia.org":"Tahitian Wikipedia","name-u4c.wikipedia.org":"Universal Code of Conduct Coordinating Committee","name-ua.wikimedia.org":"Wikimedia Ukraine","name-udm.wikipedia.org":"Udmurt Wikipedia","name-ug.wikipedia.org":"Uyghur Wikipedia","name-ug.wikibooks.org":"Uyghur Wikibooks","name-ug.wikiquote.org":"Uyghur Wikiquote","name-ug.wiktionary.org":"Uyghur Wiktionary","name-uk.wikipedia.org":"Ukrainian Wikipedia","name-uk.wikibooks.org":"Ukrainian Wikibooks","name-uk.wikimedia.org":"Wikimedia UK","name-uk.wikinews.org":"Ukrainian Wikinews","name-uk.wikiquote.org":"Ukrainian Wikiquote","name-uk.wikisource.org":"Ukrainian Wikisource","name-uk.wikivoyage.org":"Ukrainian Wikivoyage","name-uk.wiktionary.org":"Ukrainian Wiktionary","name-ur.wikipedia.org":"Urdu Wikipedia","name-ur.wikibooks.org":"Urdu Wikibooks","name-ur.wikiquote.org":"Urdu Wikiquote","name-ur.wiktionary.org":"Urdu Wiktionary","name-usability.wikimedia.org":"Wikimedia Usability Initiative","name-uz.wikipedia.org":"Uzbek Wikipedia","name-uz.wikibooks.org":"Uzbek Wikibooks","name-uz.wikimedia.org":"Wikimedians of the Uzbek language User Group","name-uz.wikiquote.org":"Uzbek Wikiquote","name-uz.wiktionary.org":"Uzbek Wiktionary","name-vec.wikipedia.org":"Venetian Wikipedia","name-vec.wikisource.org":"Venetian Wikisource","name-vec.wiktionary.org":"Venetian Wiktionary","name-vep.wikipedia.org":"Veps Wikipedia","name-ve.wikipedia.org":"Venda Wikipedia","name-ve.wikimedia.org":"Wikimedia Venezuela","name-vi.wikipedia.org":"Vietnamese Wikipedia","name-vi.wikibooks.org":"Vietnamese Wikibooks","name-vi.wikiquote.org":"Vietnamese Wikiquote","name-vi.wikisource.org":"Vietnamese Wikisource","name-vi.wikivoyage.org":"Vietnamese Wikivoyage","name-vi.wiktionary.org":"Vietnamese Wiktionary","name-vls.wikipedia.org":"West Flemish Wikipedia","name-vote.wikimedia.org":"Wikimedia Vote","name-vo.wikipedia.org":"Volap\xFCk Wikipedia","name-vo.wikibooks.org":"Volap\xFCk Wikibooks","name-vo.wikiquote.org":"Volap\xFCk Wikiquote","name-vo.wiktionary.org":"Volap\xFCk Wiktionary","name-war.wikipedia.org":"Waray Wikipedia","name-wa.wikipedia.org":"Walloon Wikipedia","name-wa.wikibooks.org":"Walloon Wikibooks","name-wa.wikisource.org":"Walloon Wikisource","name-wa.wiktionary.org":"Walloon Wiktionary","name-wg-en.wikipedia.org":"English Wikipedia Working Group","name-wikidata.org":"Wikidata","name-wikifunctions.wikimedia.org":"Wikifunctions","name-wikimania2005.wikimedia.org":"Wikimania 2005","name-wikimania2006.wikimedia.org":"Wikimania 2006","name-wikimania2007.wikimedia.org":"Wikimania 2007","name-wikimania2008.wikimedia.org":"Wikimania 2008","name-wikimania2009.wikimedia.org":"Wikimania 2009","name-wikimania2010.wikimedia.org":"Wikimania 2010","name-wikimania2011.wikimedia.org":"Wikimania 2011","name-wikimania2012.wikimedia.org":"Wikimania 2012","name-wikimania2013.wikimedia.org":"Wikimania 2013","name-wikimania2014.wikimedia.org":"Wikimania 2014","name-wikimania2015.wikimedia.org":"Wikimania 2015","name-wikimania2016.wikimedia.org":"Wikimania 2016","name-wikimania2017.wikimedia.org":"Wikimania 2017","name-wikimania2018.wikimedia.org":"Wikimania 2018","name-wikimaniateam.wikimedia.org":"WikimaniaTeam","name-wikimania.wikimedia.org":"Wikimania","name-wo.wikipedia.org":"Wolof Wikipedia","name-wo.wikiquote.org":"Wolof Wikiquote","name-wo.wiktionary.org":"Wolof Wiktionary","name-wuu.wikipedia.org":"Wu Chinese Wikipedia","name-xal.wikipedia.org":"Kalmyk Wikipedia","name-xh.wikipedia.org":"Xhosa Wikipedia","name-xh.wikibooks.org":"Xhosa Wikibooks","name-xh.wiktionary.org":"Xhosa Wiktionary","name-xmf.wikipedia.org":"Mingrelian Wikipedia","name-yi.wikipedia.org":"Yiddish Wikipedia","name-yi.wikisource.org":"Yiddish Wikisource","name-yi.wiktionary.org":"Yiddish Wiktionary","name-yo.wikipedia.org":"Yoruba Wikipedia","name-yo.wikibooks.org":"Yoruba Wikibooks","name-yo.wiktionary.org":"Yoruba Wiktionary","name-za.wikipedia.org":"Zhuang Wikipedia","name-za.wikibooks.org":"Zhuang Wikibooks","name-za.wikiquote.org":"Zhuang Wikiquote","name-za.wiktionary.org":"Zhuang Wiktionary","name-zea.wikipedia.org":"Zeelandic Wikipedia","name-zgh.wikipedia.org":"Moroccan Amazigh Wikipedia","name-zh-classical.wikipedia.org":"Classical Chinese Wikipedia","name-zh-min-nan.wikipedia.org":"Min Nan Wikipedia","name-zh-min-nan.wikibooks.org":"Min Nan Wikibooks","name-zh-min-nan.wikiquote.org":"Min Nan Wikiquote","name-zh-min-nan.wikisource.org":"Min Nan Wikisource","name-zh-min-nan.wiktionary.org":"Min Nan Wiktionary","name-zh-yue.wikipedia.org":"Cantonese Wikipedia","name-zh.wikipedia.org":"Chinese Wikipedia","name-zh.wikibooks.org":"Chinese Wikibooks","name-zh.wikinews.org":"Chinese Wikinews","name-zh.wikiquote.org":"Chinese Wikiquote","name-zh.wikisource.org":"Chinese Wikisource","name-zh.wikiversity.org":"Chinese Wikiversity","name-zh.wikivoyage.org":"Chinese Wikivoyage","name-zh.wiktionary.org":"Chinese Wiktionary","name-zu.wikipedia.org":"Zulu Wikipedia","name-zu.wikibooks.org":"Zulu Wikibooks","name-zu.wiktionary.org":"Zulu Wiktionary","name-wikitech-static.wikimedia.org":"Wikitech (Backup)","name-ar.planet.wikimedia.org":"Arabic Planet Wikimedia","name-bg.planet.wikimedia.org":"Bulgarian Planet Wikimedia","name-cs.planet.wikimedia.org":"Czech Planet Wikimedia","name-de.planet.wikimedia.org":"German Planet Wikimedia","name-el.planet.wikimedia.org":"Greek Planet Wikimedia","name-en.planet.wikimedia.org":"English Planet Wikimedia","name-es.planet.wikimedia.org":"Spanish Planet Wikimedia","name-fr.planet.wikimedia.org":"French Planet Wikimedia","name-gmq.planet.wikimedia.org":"Scandinavian Planet Wikimedia","name-id.planet.wikimedia.org":"Indonesian Planet Wikimedia","name-it.planet.wikimedia.org":"Italian Planet Wikimedia","name-pl.planet.wikimedia.org":"Polish Planet Wikimedia","name-pt.planet.wikimedia.org":"Portuguese Planet Wikimedia","name-ro.planet.wikimedia.org":"Romanian Planet Wikimedia","name-ru.planet.wikimedia.org":"Russian Planet Wikimedia","name-sq.planet.wikimedia.org":"Albanian Planet Wikimedia","name-uk.planet.wikimedia.org":"Ukrainian Planet Wikimedia","name-zh.planet.wikimedia.org":"Chinese Planet Wikimedia","name-upload.wikimedia.org":"Wikimedia Media Storage","name-wikimediafoundation.org":"Wikimedia Foundation","name-phabricator.wikimedia.org":"Wikimedia Phabricator","name-gerrit.wikimedia.org":"Wikimedia Code Review","name-gitlab.wikimedia.org":"Wikimedia GitLab","name-ticket.wikimedia.org":"Volunteer Response Team","name-idp.wikimedia.org":"Wikimedia Developer Single Sign On","name-dumps.wikimedia.org":"Wikimedia Downloads","name-lists.wikimedia.org":"Wikimedia Mailing Lists","name-diff.wikimedia.org":"Diff Blog","name-techblog.wikimedia.org":"Wikimedia Tech Blog","name-wikimedia.org":"Wikimedia Portal","name-wikipedia.org":"Wikipedia Portal","name-wiktionary.org":"Wiktionary Portal","name-wikibooks.org":"Wikibooks Portal","name-wikinews.org":"Wikinews Portal","name-wikiquote.org":"Wikiquote Portal","name-wikiversity.org":"Wikiversity Portal","name-wikivoyage.org":"Wikivoyage Portal","name-w.wiki":"Wikimedia URL Shortener",title:oi,"title-abbr":"wscd","card-err-head":"An error occurred","card-err-desc":"This may be because essential resources required to perform the check could not be downloaded. Please check your network connection.","card-about-head":"About this tool","card-about-desc-1":"Wikimedia Server Connectivity Dashboard helps you check whether you can visit and edit Wikimedia projects from your network.","card-about-desc-2":"Connection disruption can take place due to faulty networks, company network policies or government censorship.","card-about-desc-3":"IP blocks may be because you are using a proxy or VPN service. To prevent vandalism, Wikimedia projects blocked proxy IPs from editing. You can [https://en.wikipedia.org/wiki/Wikipedia:IP_block_exemption request IP block exemption rights] for your account to avoid such disruption.","tbl-h-name":"Names","tbl-h-domains":"Domains","tbl-h-available":"Available?","tbl-h-conn":"Connectivity","tbl-h-block":"Editable?","tbl-btn-jts":"Jump to start","tbl-btn-jte":"Jump to end","tbl-btn-next":"Next page","tbl-btn-prev":"Previous page","tbl-page-info":"$1-$2/$3","footer-badge-alt":"Powered by Toolforge","footer-code":"Source code","footer-license":"License","header-slogan":"How far are you from free knowledge?","name-key-missing":"(Unknown)","avl-yes":"\u2714\uFE0F Available","avl-no":"\u274C Unavailable","blk-yes":"\u{1F6AB} Blocked","blk-no":"\u2714\uFE0F Editable","blk-unknown":"\u2754 Unknown","blk-non-wiki":"\u2714\uFE0F Not a wiki",pending:ni,checking:ri,"rtt-excellent":"\u26A1 Excellent","rtt-good":"\u{1F680} Good","rtt-bad":"\u{1F40C} Not good","rtt-title":"$1 ms","ct-field-ext-check":"Check all sites","ct-field-type":"Check type","ct-field-std":"Popular sites","ct-field-ext":"All sites","btn-chk":"Check","sc-chk-h":"Checking... ($1/$2)","sc-chk-h-err":"Some issues detected. Checking... ($1/$2)","sc-chk-desc":"Depending on your network condition, this may take up to several minutes.","sc-chk-cur":"Currently checking: $1","sc-end-h-np":"No issues detected","sc-end-b-np":"Congratulations, free knowledge is at your fingertip!","sc-end-h-err":"Some issues detected","sc-end-b-err":"Your network might have some problems affecting your experience on Wikimedia sites.","sc-end-b-err-1t":"Why did this happen?","sc-end-b-err-1p1":"First of all, it is not your fault!","sc-end-b-err-1p2":"For connection disruption, this may be due to faulty networks, company network policies or government censorship.","sc-end-b-err-1p3":"For IP blocks, this may be because you are using a proxy or VPN service. Using such services would change your IP address to theirs, which Wikimedia projects may block from editing to prevent vandalism.","sc-end-b-err-2t":"What should I do?","sc-end-b-err-2p1":"Try to use proxies or VPN services to connect.","sc-end-b-err-2p2":"To address IP blocks, please [https://en.wikipedia.org/wiki/Wikipedia:IP_block_exemption request IP block exemption rights] for your account to get bypassed.","sc-total":"Total number of sites: $1","sc-inaccessible":"You cannot access: $1","sc-blocked":"You cannot edit: $1","sc-domain-desc":"$1 and $2 more","sc-domain-desc-none":"none","sc-btn-hide":"Hide data","sc-btn-show":"Show data","sc-btn-recheck":"Rerun check","sc-btn-dl":"Download data"},ya=Object.freeze(Object.defineProperty({__proto__:null,title:oi,pending:ni,checking:ri,default:ti},Symbol.toStringTag,{value:"Module"})),X={zh:"zh-hans","zh-cn":"zh-hans","zh-tw":"zh-hant","zh-sg":"zh-hans"};function ha(){let e=(new URLSearchParams(window.location.search).get("lang")||navigator.language).toLowerCase();return e in X&&(e=X[e]),e}async function ba(){const e=ha(),o={en:ti};let a="en";if(!e.startsWith("en"))for(const r of[e,e.split("-")[0]])try{o[r]=(await Wa(Object.assign({"../../i18n-merged/ab.json":()=>i(()=>import("./ab.5699ae92.js"),[]),"../../i18n-merged/ace.json":()=>i(()=>import("./ace.b19702ed.js"),[]),"../../i18n-merged/acm.json":()=>i(()=>import("./acm.7dfcdf52.js"),[]),"../../i18n-merged/af.json":()=>i(()=>import("./af.86b8b707.js"),[]),"../../i18n-merged/ann.json":()=>i(()=>import("./ann.1e58a152.js"),[]),"../../i18n-merged/anp.json":()=>i(()=>import("./anp.8bf008d6.js"),[]),"../../i18n-merged/ar.json":()=>i(()=>import("./ar.3b216af8.js"),[]),"../../i18n-merged/ary.json":()=>i(()=>import("./ary.0bd9f3af.js"),[]),"../../i18n-merged/arz.json":()=>i(()=>import("./arz.655d0f05.js"),[]),"../../i18n-merged/as.json":()=>i(()=>import("./as.5a250935.js"),[]),"../../i18n-merged/ast.json":()=>i(()=>import("./ast.57e669cc.js"),[]),"../../i18n-merged/awa.json":()=>i(()=>import("./awa.f6279539.js"),[]),"../../i18n-merged/az.json":()=>i(()=>import("./az.0b5f5293.js"),[]),"../../i18n-merged/ba.json":()=>i(()=>import("./ba.37a13c66.js"),[]),"../../i18n-merged/ban.json":()=>i(()=>import("./ban.46ccde25.js"),[]),"../../i18n-merged/bar.json":()=>i(()=>import("./bar.2c6be67e.js"),[]),"../../i18n-merged/be-tarask.json":()=>i(()=>import("./be-tarask.6e0e0076.js"),[]),"../../i18n-merged/be.json":()=>i(()=>import("./be.18aa8dd1.js"),[]),"../../i18n-merged/bg.json":()=>i(()=>import("./bg.fa880341.js"),[]),"../../i18n-merged/bho.json":()=>i(()=>import("./bho.bb1a1518.js"),[]),"../../i18n-merged/bjn.json":()=>i(()=>import("./bjn.5abde57e.js"),[]),"../../i18n-merged/blk.json":()=>i(()=>import("./blk.fea91b80.js"),[]),"../../i18n-merged/bn.json":()=>i(()=>import("./bn.a60165f4.js"),[]),"../../i18n-merged/br.json":()=>i(()=>import("./br.5b2b224d.js"),[]),"../../i18n-merged/bs.json":()=>i(()=>import("./bs.ed08e1b0.js"),[]),"../../i18n-merged/btm.json":()=>i(()=>import("./btm.576e4175.js"),[]),"../../i18n-merged/ca.json":()=>i(()=>import("./ca.33079730.js"),[]),"../../i18n-merged/cdo.json":()=>i(()=>import("./cdo.7f737f30.js"),[]),"../../i18n-merged/ce.json":()=>i(()=>import("./ce.7508e553.js"),[]),"../../i18n-merged/chr.json":()=>i(()=>import("./chr.45d4b601.js"),[]),"../../i18n-merged/ckb.json":()=>i(()=>import("./ckb.720bafa6.js"),[]),"../../i18n-merged/cs.json":()=>i(()=>import("./cs.d79ee4d7.js"),[]),"../../i18n-merged/csb.json":()=>i(()=>import("./csb.6f504b02.js"),[]),"../../i18n-merged/cu.json":()=>i(()=>import("./cu.de03ee29.js"),[]),"../../i18n-merged/cy.json":()=>i(()=>import("./cy.17c6d8f5.js"),[]),"../../i18n-merged/da.json":()=>i(()=>import("./da.2974fc08.js"),[]),"../../i18n-merged/de.json":()=>i(()=>import("./de.4dea0bfe.js"),[]),"../../i18n-merged/dga.json":()=>i(()=>import("./dga.48f1276d.js"),[]),"../../i18n-merged/diq.json":()=>i(()=>import("./diq.86b441f2.js"),[]),"../../i18n-merged/el.json":()=>i(()=>import("./el.a7baf115.js"),[]),"../../i18n-merged/en-ca.json":()=>i(()=>import("./en-ca.860e651d.js"),[]),"../../i18n-merged/en.json":()=>i(()=>Promise.resolve().then(()=>ya),void 0),"../../i18n-merged/eo.json":()=>i(()=>import("./eo.ab6020a1.js"),[]),"../../i18n-merged/es.json":()=>i(()=>import("./es.0100daac.js"),[]),"../../i18n-merged/et.json":()=>i(()=>import("./et.e1cb73fe.js"),[]),"../../i18n-merged/eu.json":()=>i(()=>import("./eu.179cb5fa.js"),[]),"../../i18n-merged/fa.json":()=>i(()=>import("./fa.282b7c6b.js"),[]),"../../i18n-merged/fat.json":()=>i(()=>import("./fat.b7ccbdbc.js"),[]),"../../i18n-merged/fi.json":()=>i(()=>import("./fi.2c2cfd9d.js"),[]),"../../i18n-merged/fit.json":()=>i(()=>import("./fit.8deabfe8.js"),[]),"../../i18n-merged/fr.json":()=>i(()=>import("./fr.d60a7cbd.js"),[]),"../../i18n-merged/frr.json":()=>i(()=>import("./frr.2e109287.js"),[]),"../../i18n-merged/fy.json":()=>i(()=>import("./fy.24166386.js"),[]),"../../i18n-merged/gan-hant.json":()=>i(()=>import("./gan-hant.ed922731.js"),[]),"../../i18n-merged/gcr.json":()=>i(()=>import("./gcr.714aa41d.js"),[]),"../../i18n-merged/gl.json":()=>i(()=>import("./gl.a09a9005.js"),[]),"../../i18n-merged/gn.json":()=>i(()=>import("./gn.10af33da.js"),[]),"../../i18n-merged/gom-deva.json":()=>i(()=>import("./gom-deva.cf0c9822.js"),[]),"../../i18n-merged/gom-latn.json":()=>i(()=>import("./gom-latn.759cfd69.js"),[]),"../../i18n-merged/grc.json":()=>i(()=>import("./grc.43bd46de.js"),[]),"../../i18n-merged/gu.json":()=>i(()=>import("./gu.760622e2.js"),[]),"../../i18n-merged/ha.json":()=>i(()=>import("./ha.5a0f1a21.js"),[]),"../../i18n-merged/hak.json":()=>i(()=>import("./hak.afd365e2.js"),[]),"../../i18n-merged/he.json":()=>i(()=>import("./he.2b22d19c.js"),[]),"../../i18n-merged/hi.json":()=>i(()=>import("./hi.d7ac9076.js"),[]),"../../i18n-merged/hr.json":()=>i(()=>import("./hr.9b53674f.js"),[]),"../../i18n-merged/hu.json":()=>i(()=>import("./hu.96ab54cd.js"),[]),"../../i18n-merged/hy.json":()=>i(()=>import("./hy.15c68704.js"),[]),"../../i18n-merged/hyw.json":()=>i(()=>import("./hyw.84cad4d2.js"),[]),"../../i18n-merged/ia.json":()=>i(()=>import("./ia.ccfe37ec.js"),[]),"../../i18n-merged/id.json":()=>i(()=>import("./id.7bfd0356.js"),[]),"../../i18n-merged/ig.json":()=>i(()=>import("./ig.3c704b54.js"),[]),"../../i18n-merged/inh.json":()=>i(()=>import("./inh.d402108f.js"),[]),"../../i18n-merged/io.json":()=>i(()=>import("./io.1ba3aa1b.js"),[]),"../../i18n-merged/it.json":()=>i(()=>import("./it.fb00d0b3.js"),[]),"../../i18n-merged/ja.json":()=>i(()=>import("./ja.71329f9a.js"),[]),"../../i18n-merged/jbo.json":()=>i(()=>import("./jbo.63cabc1e.js"),[]),"../../i18n-merged/jv.json":()=>i(()=>import("./jv.b3cf556b.js"),[]),"../../i18n-merged/ka.json":()=>i(()=>import("./ka.a7e08b09.js"),[]),"../../i18n-merged/kaa.json":()=>i(()=>import("./kaa.c29ee7ea.js"),[]),"../../i18n-merged/kab.json":()=>i(()=>import("./kab.e46899cd.js"),[]),"../../i18n-merged/kcg.json":()=>i(()=>import("./kcg.52bc46d1.js"),[]),"../../i18n-merged/kjp.json":()=>i(()=>import("./kjp.1256e28f.js"),[]),"../../i18n-merged/kk-cyrl.json":()=>i(()=>import("./kk-cyrl.cec52cfe.js"),[]),"../../i18n-merged/km.json":()=>i(()=>import("./km.54e87f9e.js"),[]),"../../i18n-merged/kn.json":()=>i(()=>import("./kn.15d6bd1e.js"),[]),"../../i18n-merged/ko-kp.json":()=>i(()=>import("./ko-kp.083cf663.js"),[]),"../../i18n-merged/ko.json":()=>i(()=>import("./ko.58c2e0ef.js"),[]),"../../i18n-merged/koi.json":()=>i(()=>import("./koi.06310f94.js"),[]),"../../i18n-merged/krc.json":()=>i(()=>import("./krc.98afef62.js"),[]),"../../i18n-merged/ks-arab.json":()=>i(()=>import("./ks-arab.72cf30e2.js"),[]),"../../i18n-merged/ksh.json":()=>i(()=>import("./ksh.d282e897.js"),[]),"../../i18n-merged/ksw.json":()=>i(()=>import("./ksw.bab2aa78.js"),[]),"../../i18n-merged/ku-latn.json":()=>i(()=>import("./ku-latn.204a215e.js"),[]),"../../i18n-merged/ky.json":()=>i(()=>import("./ky.7a3145b4.js"),[]),"../../i18n-merged/la.json":()=>i(()=>import("./la.54d1b1c4.js"),[]),"../../i18n-merged/lb.json":()=>i(()=>import("./lb.6ffb440a.js"),[]),"../../i18n-merged/lez.json":()=>i(()=>import("./lez.feebbcf2.js"),[]),"../../i18n-merged/lfn.json":()=>i(()=>import("./lfn.72205b3d.js"),[]),"../../i18n-merged/lo.json":()=>i(()=>import("./lo.cc641d8b.js"),[]),"../../i18n-merged/lt.json":()=>i(()=>import("./lt.a9292bda.js"),[]),"../../i18n-merged/lv.json":()=>i(()=>import("./lv.627e5965.js"),[]),"../../i18n-merged/lzh.json":()=>i(()=>import("./lzh.605509ab.js"),[]),"../../i18n-merged/min.json":()=>i(()=>import("./min.b31761b8.js"),[]),"../../i18n-merged/mk.json":()=>i(()=>import("./mk.ba40aec6.js"),[]),"../../i18n-merged/ml.json":()=>i(()=>import("./ml.7480a33e.js"),[]),"../../i18n-merged/mnc-mong.json":()=>i(()=>import("./mnc-mong.11786fea.js"),[]),"../../i18n-merged/mni.json":()=>i(()=>import("./mni.4db6ec59.js"),[]),"../../i18n-merged/mnw.json":()=>i(()=>import("./mnw.6341958d.js"),[]),"../../i18n-merged/mr.json":()=>i(()=>import("./mr.9f0fdefc.js"),[]),"../../i18n-merged/mrh.json":()=>i(()=>import("./mrh.631b0c38.js"),[]),"../../i18n-merged/ms-arab.json":()=>i(()=>import("./ms-arab.591a2d5a.js"),[]),"../../i18n-merged/ms.json":()=>i(()=>import("./ms.5c180cd7.js"),[]),"../../i18n-merged/mwl.json":()=>i(()=>import("./mwl.7bb0d0bb.js"),[]),"../../i18n-merged/my.json":()=>i(()=>import("./my.f8781482.js"),[]),"../../i18n-merged/mzn.json":()=>i(()=>import("./mzn.77f833d7.js"),[]),"../../i18n-merged/nah.json":()=>i(()=>import("./nah.8efd0c00.js"),[]),"../../i18n-merged/nan.json":()=>i(()=>import("./nan.000fe682.js"),[]),"../../i18n-merged/nap.json":()=>i(()=>import("./nap.fa2a27cc.js"),[]),"../../i18n-merged/nb.json":()=>i(()=>import("./nb.87d7b751.js"),[]),"../../i18n-merged/ne.json":()=>i(()=>import("./ne.59fadbbd.js"),[]),"../../i18n-merged/nl.json":()=>i(()=>import("./nl.257724ac.js"),[]),"../../i18n-merged/nn.json":()=>i(()=>import("./nn.f156d523.js"),[]),"../../i18n-merged/nqo.json":()=>i(()=>import("./nqo.ff331634.js"),[]),"../../i18n-merged/nv.json":()=>i(()=>import("./nv.b7a1b321.js"),[]),"../../i18n-merged/oc.json":()=>i(()=>import("./oc.e7232b24.js"),[]),"../../i18n-merged/ojb.json":()=>i(()=>import("./ojb.a7970195.js"),[]),"../../i18n-merged/om.json":()=>i(()=>import("./om.c3a74184.js"),[]),"../../i18n-merged/or.json":()=>i(()=>import("./or.d16250d3.js"),[]),"../../i18n-merged/pa.json":()=>i(()=>import("./pa.63884a7b.js"),[]),"../../i18n-merged/pcd.json":()=>i(()=>import("./pcd.129f00db.js"),[]),"../../i18n-merged/piu.json":()=>i(()=>import("./piu.c5d766fe.js"),[]),"../../i18n-merged/pl.json":()=>i(()=>import("./pl.78e9656e.js"),[]),"../../i18n-merged/pnb.json":()=>i(()=>import("./pnb.542ebdf9.js"),[]),"../../i18n-merged/ps.json":()=>i(()=>import("./ps.0809f512.js"),[]),"../../i18n-merged/pt-br.json":()=>i(()=>import("./pt-br.8c5b6221.js"),[]),"../../i18n-merged/pt.json":()=>i(()=>import("./pt.81ae52b9.js"),[]),"../../i18n-merged/rki.json":()=>i(()=>import("./rki.e09c9bc5.js"),[]),"../../i18n-merged/ro.json":()=>i(()=>import("./ro.ba8db0fe.js"),[]),"../../i18n-merged/roa-tara.json":()=>i(()=>import("./roa-tara.e1ff9b4d.js"),[]),"../../i18n-merged/ru.json":()=>i(()=>import("./ru.54e60585.js"),[]),"../../i18n-merged/rue.json":()=>i(()=>import("./rue.4956395f.js"),[]),"../../i18n-merged/sah.json":()=>i(()=>import("./sah.01b894fc.js"),[]),"../../i18n-merged/sat.json":()=>i(()=>import("./sat.92ea2a5d.js"),[]),"../../i18n-merged/scn.json":()=>i(()=>import("./scn.71be271d.js"),[]),"../../i18n-merged/sco.json":()=>i(()=>import("./sco.acbd56f7.js"),[]),"../../i18n-merged/sd.json":()=>i(()=>import("./sd.c02bff9d.js"),[]),"../../i18n-merged/sdc.json":()=>i(()=>import("./sdc.5aabadd9.js"),[]),"../../i18n-merged/sdh.json":()=>i(()=>import("./sdh.ee94126d.js"),[]),"../../i18n-merged/se.json":()=>i(()=>import("./se.54de5604.js"),[]),"../../i18n-merged/sk.json":()=>i(()=>import("./sk.f32d1f69.js"),[]),"../../i18n-merged/skr-arab.json":()=>i(()=>import("./skr-arab.10a281e6.js"),[]),"../../i18n-merged/sl.json":()=>i(()=>import("./sl.5a07764d.js"),[]),"../../i18n-merged/smn.json":()=>i(()=>import("./smn.95d8eba9.js"),[]),"../../i18n-merged/sms.json":()=>i(()=>import("./sms.1e307e94.js"),[]),"../../i18n-merged/sn.json":()=>i(()=>import("./sn.63d91b86.js"),[]),"../../i18n-merged/sq.json":()=>i(()=>import("./sq.d700f199.js"),[]),"../../i18n-merged/sr-ec.json":()=>i(()=>import("./sr-ec.e972ea94.js"),[]),"../../i18n-merged/sr-el.json":()=>i(()=>import("./sr-el.fe821bac.js"),[]),"../../i18n-merged/sv.json":()=>i(()=>import("./sv.de47254e.js"),[]),"../../i18n-merged/sw.json":()=>i(()=>import("./sw.3eea57f4.js"),[]),"../../i18n-merged/szy.json":()=>i(()=>import("./szy.45cf4a17.js"),[]),"../../i18n-merged/ta.json":()=>i(()=>import("./ta.30dbac75.js"),[]),"../../i18n-merged/tcy.json":()=>i(()=>import("./tcy.3bff9e5c.js"),[]),"../../i18n-merged/te.json":()=>i(()=>import("./te.d88dd87e.js"),[]),"../../i18n-merged/tg-cyrl.json":()=>i(()=>import("./tg-cyrl.688c8674.js"),[]),"../../i18n-merged/th.json":()=>i(()=>import("./th.a0445ee0.js"),[]),"../../i18n-merged/ti.json":()=>i(()=>import("./ti.2862eb67.js"),[]),"../../i18n-merged/tk.json":()=>i(()=>import("./tk.38901303.js"),[]),"../../i18n-merged/tl.json":()=>i(()=>import("./tl.acc800bb.js"),[]),"../../i18n-merged/tly.json":()=>i(()=>import("./tly.e558323d.js"),[]),"../../i18n-merged/tok.json":()=>i(()=>import("./tok.a0dd3a02.js"),[]),"../../i18n-merged/tr.json":()=>i(()=>import("./tr.17246d55.js"),[]),"../../i18n-merged/tt-cyrl.json":()=>i(()=>import("./tt-cyrl.8d862284.js"),[]),"../../i18n-merged/udm.json":()=>i(()=>import("./udm.28238112.js"),[]),"../../i18n-merged/ug-arab.json":()=>i(()=>import("./ug-arab.3ad8b899.js"),[]),"../../i18n-merged/uk.json":()=>i(()=>import("./uk.86a5d934.js"),[]),"../../i18n-merged/ur.json":()=>i(()=>import("./ur.076b6cf3.js"),[]),"../../i18n-merged/uz.json":()=>i(()=>import("./uz.f5195109.js"),[]),"../../i18n-merged/vec.json":()=>i(()=>import("./vec.a222772e.js"),[]),"../../i18n-merged/vi.json":()=>i(()=>import("./vi.96f55216.js"),[]),"../../i18n-merged/wa.json":()=>i(()=>import("./wa.e5e58f3a.js"),[]),"../../i18n-merged/xal.json":()=>i(()=>import("./xal.e3b5a44b.js"),[]),"../../i18n-merged/xmf.json":()=>i(()=>import("./xmf.0e613158.js"),[]),"../../i18n-merged/yi.json":()=>i(()=>import("./yi.e8d099ec.js"),[]),"../../i18n-merged/yue-hant.json":()=>i(()=>import("./yue-hant.da242a49.js"),[]),"../../i18n-merged/zgh.json":()=>i(()=>import("./zgh.ee315e39.js"),[]),"../../i18n-merged/zh-hans.json":()=>i(()=>import("./zh-hans.9c8c3002.js"),[]),"../../i18n-merged/zh-hant.json":()=>i(()=>import("./zh-hant.9456a742.js"),[]),"../../i18n-merged/zh-hk.json":()=>i(()=>import("./zh-hk.fe94fd91.js"),[])}),`../../i18n-merged/${r}.json`)).default,a=r;break}catch{}return{lang:a,messageSource:o}}(async()=>{const e=ci(la),{lang:o,messageSource:a}=await ba(),r=new li(o,{messages:a,wikilinks:!0});document.title=r.i18n("title"),document.documentElement.lang=o,e.config.globalProperties.$i18n=r.i18n.bind(r),e.provide("banana",r),e.mount("#app")})(); -//# sourceMappingURL=index.96e82935.js.map +//# sourceMappingURL=index.d6a9cde1.js.map diff --git a/assets/index.96e82935.js.map b/assets/index.d6a9cde1.js.map similarity index 99% rename from assets/index.96e82935.js.map rename to assets/index.d6a9cde1.js.map index c6035a7..74e26bf 100644 --- a/assets/index.96e82935.js.map +++ b/assets/index.d6a9cde1.js.map @@ -1 +1 @@ -{"version":3,"mappings":"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","names":["relList","link","processPreload","mutations","mutation","node","getFetchOpts","script","fetchOpts","_hoisted_1","_hoisted_2","_hoisted_3","_createElementBlock","_imports_0","_imports_1","VUE_APP_VERSION","VUE_GIT_HASH","DomainConnectivityResult","DomainBlockingResult","CheckStatus","store","reactive","getTimeoutSignal","ms","controller","reloadWindow","useModelWrapper","props","emit","name","computed","value","TaskDispatcher","concurrency","__publicField","job","task","i","CONCURRENCY","TIMEOUT_MS","FETCH_OPT","ConnectivityChecker","domainList","perDomainCheckStarted","perDomainFinished","domain","isWiki","domainData","startTime","resp","respJson","ip","gbRespJson","inject","start","ref","domainDataViewSlice","isAtStart","isAtEnd","getName","key","translation","banana","getStatus","status","getDomainBlockingResult","blockStatus","getConnectivity","ping","nextPage","prevPage","toStart","toEnd","_withScopeId","JOIN_PATTERN","EMPTY_FALLBACK","PADDING_CHAR","TABLE_HEADER_ROW","PADDING_DOMAINS","PADDING_STATUS","PADDING_BLOCKED","PADDING_PING","download","url","filename","hiddenAnchor","ReportGenerator","checkData","matcher","view","tableEntries","connectivity","blocking","entry","item","blocked","date","result","report","blob","isTableExpanded","reportGenerator","getDomainsFriendlyDesc","domains","downloadData","inaccessibleDomains","dataView","blockedDomains","inaccessibleDomainsDesc","blockedDomainsDesc","hasProblem","checkedDomainsCount","currentCheckingDomain","transformRawDomainList","rawDomainList","handleError","check","data","prepareAndCheck","prefetchAll","rawList","__vitePreload","glob","path","v","_","reject","MAPPINGS","getCurrentLang","lang","getI18nInfo","messageSource","EnMessageSource","selectedLang","currentLang","__variableDynamicImportRuntimeHelper","createApp","App","Banana","app"],"sources":["../../vite/modulepreload-polyfill","../../src/components/SiteHeader.vue","../../src/assets/toolforge-dark.svg","../../src/assets/toolforge.svg","../../src/components/SiteFooter.vue","../../src/modules/store.ts","../../src/modules/utils.ts","../../src/modules/TaskDispatcher.ts","../../src/modules/ConnectivityChecker.ts","../../src/components/DataTable.vue","../../src/components/ProgressIndicator.vue","../../src/components/ToggleSwitch.vue","../../src/components/CheckTypeField.vue","../../src/modules/ReportGenerator.ts","../../src/components/SummaryCard.vue","../../src/components/SiteMain.vue","../../../../../../../@vite/dynamic-import-helper","../../src/modules/lang.ts","../../src/main.ts"],"sourcesContent":["__VITE_IS_MODERN__&&(function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n}());","\n\n\n","export default \"__VITE_ASSET__a8aea765__\"","export default \"__VITE_ASSET__859d8eda__\"","\n\n\n\n\n","import { reactive } from 'vue';\n\n// Give them string values for the convenience of logging\n\nenum DomainConnectivityResult {\n PENDING = 'Pending',\n CHECKING = 'Checking',\n SUCCESS = 'Success',\n FAILURE = 'Failure',\n}\n\nenum DomainBlockingResult {\n NOT_BLOCKED = 'Not blocked',\n BLOCKED = 'Blocked',\n UNKNOWN = 'Unknown',\n NOT_A_WIKI = 'Not a wiki',\n}\n\nenum CheckStatus {\n NOT_RUN,\n PREPARING,\n RUNNING,\n ENDED,\n ENDED_ERROR,\n}\n\ninterface DomainDataView {\n connectivity: DomainConnectivityResult,\n blocking?: DomainBlockingResult,\n ping?: number,\n}\n\nconst store = reactive({\n checkStatus: CheckStatus.NOT_RUN,\n domainDataView: new Map(),\n});\n\nexport default store;\nexport type { DomainDataView };\nexport { DomainConnectivityResult, DomainBlockingResult, CheckStatus };\n","import { computed, WritableComputedRef } from 'vue';\n\nfunction resolveAfter(ms: number) {\n return new Promise((resolve) => { setTimeout(resolve, ms); });\n}\n\nfunction getTimeoutSignal(ms: number): AbortSignal {\n const controller = new AbortController();\n\n // AbortSignal.timeout() is not preferred due to its browser support\n // https://caniuse.com/?search=AbortSignal.timeout\n setTimeout(() => {\n controller.abort();\n }, ms);\n\n return controller.signal;\n}\n\nfunction reloadWindow() {\n window.location.reload();\n}\n\n/**\n * Return a computed property that returns the corresponding prop value when is accessed\n * and fires an event when is set. Used with v-model.\n * @param props props field of a component\n * @param emit emit function of a component\n * @param name name of the prop\n * @return wrapped computer property\n */\nfunction useModelWrapper>(\n props: P,\n emit: (event: `update:${T}`, value: P[T]) => void,\n name: T = 'modelValue' as T,\n)\n : WritableComputedRef {\n return computed({\n get() {\n return props[name];\n },\n set(value) {\n emit(`update:${name}`, value);\n },\n });\n}\n\nexport {\n resolveAfter, reloadWindow, getTimeoutSignal, useModelWrapper,\n};\n","type Task = () => Promise;\n\nclass TaskDispatcher {\n private queue: Task[];\n\n private workers: Promise[];\n\n private readonly concurrency: number;\n\n /**\n * Main routine for a pooled promise.\n */\n private async promiseMain() {\n while (true) {\n const job = this.queue.shift();\n if (job === undefined) {\n break;\n }\n await job();\n }\n }\n\n /**\n * Instantiate a {@link TaskDispatcher} object.\n * @param concurrency max numbers of tasks to run at the same time\n */\n public constructor(concurrency: number) {\n this.queue = [];\n this.workers = [];\n this.concurrency = concurrency;\n }\n\n /**\n * Add a task to the queue to run it later.\n * @param task task\n */\n public enqueue(task: Task): void {\n this.queue.push(task);\n }\n\n /**\n * Start executing the task queue.\n * @return a promise that is resolved when all tasks have completed.\n */\n public async run(): Promise {\n this.workers = [];\n for (let i = 0; i < this.concurrency; i++) {\n this.workers.push(this.promiseMain());\n }\n return Promise.all(this.workers);\n }\n}\n\nexport default TaskDispatcher;\n","import TaskDispatcher from './TaskDispatcher';\nimport { getTimeoutSignal } from './utils';\n\ninterface DomainData {\n domain: string,\n isWiki: boolean,\n isSuccessful: boolean,\n ping?: number,\n isBlocked?: boolean,\n}\n\ninterface MwQueryUserInfoApiResult {\n query?: {\n userinfo: {\n id: number,\n name: string,\n anon: boolean,\n blockid?: unknown,\n }\n }\n}\n\ninterface MwQueryGlobalBlocksApiResult {\n query?: {\n globalblocks: Array<{\n address: string,\n }>\n }\n}\n\ntype DomainList = Array<[string, boolean]>;\n\nconst CONCURRENCY = 15;\nconst TIMEOUT_MS = 30 * 1000;\nconst FETCH_OPT: RequestInit = {\n method: 'GET',\n headers: { 'Api-User-Agent': `wscd/${APP_VERSION}` },\n cache: 'no-store',\n};\n\nclass ConnectivityChecker {\n private readonly domainList: DomainList;\n\n private readonly perDomainCheckStarted: (domain: string) => void;\n\n private readonly perDomainFinished: (data: DomainData) => void;\n\n private readonly taskDispatcher: TaskDispatcher;\n\n /**\n * Instantiate a {@link ConnectivityChecker} object.\n * @param domainList a list of sites to be checked\n * @param perDomainCheckStarted a callback which is called when a single domain test is started\n * @param perDomainFinished a callback which is called when a single domain test is completed\n * @param concurrency number of domain checks to run at a single time\n */\n public constructor(\n domainList: DomainList,\n perDomainCheckStarted: (domain: string) => void,\n perDomainFinished: (data: DomainData) => void,\n concurrency = CONCURRENCY,\n ) {\n this.domainList = domainList;\n this.perDomainCheckStarted = perDomainCheckStarted;\n this.perDomainFinished = perDomainFinished;\n this.taskDispatcher = new TaskDispatcher(concurrency);\n }\n\n public async check(): Promise {\n this.domainList.forEach(([domain, isWiki]) => {\n this.taskDispatcher.enqueue(() => {\n this.perDomainCheckStarted(domain);\n\n const domainData: DomainData = {\n domain,\n isWiki,\n isSuccessful: false,\n };\n const startTime = performance.now();\n const fetchPromise = isWiki\n ? fetch(\n `https://${domain}/w/api.php?action=query&format=json&formatversion=2&meta=userinfo&uiprop=blockinfo&origin=*`,\n { ...FETCH_OPT, signal: getTimeoutSignal(TIMEOUT_MS) },\n )\n .then((resp) => resp.json())\n .then((respJson: MwQueryUserInfoApiResult) => {\n // Check if it is a private wiki\n if (respJson.query === undefined) {\n return null;\n }\n domainData.isBlocked = 'blockid' in respJson.query.userinfo;\n return respJson.query.userinfo.name; // IP address\n })\n : fetch(\n `https://${domain}/favicon.ico`,\n { ...FETCH_OPT, mode: 'no-cors', signal: getTimeoutSignal(TIMEOUT_MS) },\n );\n\n return fetchPromise\n .then(async (ip) => {\n domainData.ping = Math.trunc(performance.now() - startTime);\n domainData.isSuccessful = true;\n\n if (typeof ip === 'string' && !domainData.isBlocked) {\n // Check global blocks as uiprop=blockinfo doesn't acknowledge global blocks\n try {\n const gbRespJson: MwQueryGlobalBlocksApiResult = await fetch(\n `https://${domain}/w/api.php?action=query&list=globalblocks&bgip=${ip}&bgprop=address&format=json&formatversion=2&origin=*`,\n { ...FETCH_OPT, signal: getTimeoutSignal(TIMEOUT_MS) },\n ).then((resp) => resp.json());\n\n if (gbRespJson.query !== undefined) {\n domainData.isBlocked = gbRespJson.query.globalblocks.length > 0;\n }\n } catch {\n // FIXME: Better error handling here, consider not catching exceptions?\n }\n }\n })\n .catch(() => { domainData.isSuccessful = false; })\n .then(() => { this.perDomainFinished(domainData); });\n });\n });\n\n return this.taskDispatcher.run();\n }\n}\n\nexport default ConnectivityChecker;\n","\n\n\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import { DomainBlockingResult, DomainConnectivityResult, DomainDataView } from './store';\n\n// No need to support i18n, English only\n\nconst JOIN_PATTERN = '\\n - ';\nconst EMPTY_FALLBACK = 'none';\nconst PADDING_CHAR = ' ';\nconst TABLE_HEADER_ROW = ['Domains', 'Status', 'Blocked?', 'RTT (ms)'];\n\nconst PADDING_DOMAINS = 30;\nconst PADDING_STATUS = 10;\nconst PADDING_BLOCKED = 15;\nconst PADDING_PING = 8;\n\nfunction download(url: string, filename: string) {\n const hiddenAnchor = document.createElement('a');\n hiddenAnchor.href = url;\n hiddenAnchor.download = filename;\n document.body.appendChild(hiddenAnchor);\n\n hiddenAnchor.click();\n document.body.removeChild(hiddenAnchor);\n}\n\n/**\n * Helper class to generate check reports.\n */\nclass ReportGenerator {\n private readonly checkData: Map;\n\n private url?: string;\n\n private firstGeneratedTime?: Date;\n\n /**\n * Instantiate a {@link ReportGenerator} instance.\n * @param checkData check data\n */\n constructor(checkData: Map) {\n this.checkData = checkData;\n }\n\n /**\n * Render a string representation of matched domains.\n * @param matcher function expression to match against all domains\n * @return the string\n */\n private renderSiteList(matcher: (view: DomainDataView) => boolean): string {\n return [...this.checkData]\n .filter(([, view]) => matcher(view))\n .map(([domain]) => JOIN_PATTERN + domain)\n .join('') || EMPTY_FALLBACK;\n }\n\n /**\n * Render a string representation of all verbose data, in table style.\n * @return the table\n */\n private renderTable(): string {\n const tableEntries: Array<[\n string,\n DomainConnectivityResult,\n DomainBlockingResult | undefined,\n number | undefined,\n ]> = [];\n\n this.checkData.forEach(({ connectivity, blocking, ping }, key) => {\n tableEntries.push([key, connectivity, blocking, ping]);\n });\n\n return [\n TABLE_HEADER_ROW,\n ...tableEntries.map((entry) => entry.map((item) => `${item || ''}`)),\n ]\n .map(\n ([domain, status, blocked, ping]) => [\n domain.padEnd(PADDING_DOMAINS, PADDING_CHAR),\n status.padEnd(PADDING_STATUS, PADDING_CHAR),\n blocked.padEnd(PADDING_BLOCKED, PADDING_CHAR),\n ping.padStart(PADDING_PING, PADDING_CHAR),\n ].join(''),\n )\n .join('\\n');\n }\n\n /**\n * Export all check data to a string.\n * @param date date\n * @return the string\n */\n private generateReport(date: Date): string {\n let result = 'Check result';\n result += '\\n------------';\n result += `\\nGenerated at: ${date}`;\n result += `\\nUnavailable domains: ${this.renderSiteList(\n ({ connectivity }) => connectivity === DomainConnectivityResult.FAILURE,\n )}`;\n result += `\\nBlocked domains: ${this.renderSiteList(\n ({ blocking }) => blocking === DomainBlockingResult.BLOCKED,\n )}`;\n result += '\\n';\n result += `\\n${this.renderTable()}`;\n return result;\n }\n\n /**\n * Download the report.\n */\n public download(): void {\n if (this.firstGeneratedTime === undefined) {\n this.firstGeneratedTime = new Date();\n }\n const filename = `CheckReport_${this.firstGeneratedTime.getTime()}.txt`;\n\n if (this.url === undefined) {\n const report = this.generateReport(this.firstGeneratedTime);\n const blob = new Blob([report], { type: 'text/plain' });\n this.url = URL.createObjectURL(blob);\n }\n download(this.url, filename);\n }\n}\n\nexport default ReportGenerator;\n","\n\n\n\n\n","\n\n\n\n\n","export default (glob, path) => {\n const v = glob[path];\n if (v) {\n return typeof v === 'function' ? v() : Promise.resolve(v);\n }\n return new Promise((_, reject) => {\n (typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(reject.bind(null, new Error('Unknown variable dynamic import: ' + path)));\n });\n}","import { MessageSource } from 'banana-i18n';\nimport EnMessageSource from '../../i18n-merged/en.json';\n\ninterface I18nInfo {\n /** Selected primary language, falls back to `en` */\n lang: string,\n\n /** Banana message source */\n messageSource: MessageSource,\n}\n\nconst MAPPINGS: Record = {\n zh: 'zh-hans',\n 'zh-cn': 'zh-hans',\n 'zh-tw': 'zh-hant',\n 'zh-sg': 'zh-hans',\n};\n\n/**\n * Get user's preferred language. `?lang=xxx` takes priority over `navigator.languages`.\n * @return language\n */\nfunction getCurrentLang(): string {\n let lang = (new URLSearchParams(window.location.search).get('lang')\n || navigator.language).toLowerCase();\n if (lang in MAPPINGS) {\n lang = MAPPINGS[lang];\n }\n return lang;\n}\n\nasync function getI18nInfo(): Promise {\n const lang = getCurrentLang();\n const messageSource: Record> = {\n en: EnMessageSource,\n };\n\n let selectedLang = 'en';\n // Treat en-xx as en\n if (!lang.startsWith('en')) {\n for (const currentLang of [lang, lang.split('-')[0]]) {\n try {\n // Will throw exception when i18n file does not exist\n messageSource[currentLang] = (await import(`../../i18n-merged/${currentLang}.json`)).default;\n selectedLang = currentLang;\n break;\n } catch { }\n }\n }\n return { lang: selectedLang, messageSource };\n}\n\nexport default getI18nInfo;\n","import { createApp } from 'vue';\nimport Banana from 'banana-i18n';\n\nimport './styles/reset.less';\nimport './styles/style.less';\n\nimport '@fontsource/inter/400.css';\nimport '@fontsource/inter/700.css';\n\nimport App from './App.vue';\nimport getI18nInfo from './modules/lang';\n\n// Avoid top-level await for better browser support\n(async () => {\n const app = createApp(App);\n\n const { lang, messageSource } = await getI18nInfo();\n const banana = new Banana(lang, { messages: messageSource, wikilinks: true });\n\n document.title = banana.i18n('title');\n document.documentElement.lang = lang; // For a11y support\n\n app.config.globalProperties.$i18n = banana.i18n.bind(banana);\n app.provide('banana', banana);\n app.mount('#app');\n})();\n"],"file":"assets/index.96e82935.js"} \ No newline at end of file +{"version":3,"mappings":"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","names":["relList","link","processPreload","mutations","mutation","node","getFetchOpts","script","fetchOpts","_hoisted_1","_hoisted_2","_hoisted_3","_createElementBlock","_imports_0","_imports_1","VUE_APP_VERSION","VUE_GIT_HASH","DomainConnectivityResult","DomainBlockingResult","CheckStatus","store","reactive","getTimeoutSignal","ms","controller","reloadWindow","useModelWrapper","props","emit","name","computed","value","TaskDispatcher","concurrency","__publicField","job","task","i","CONCURRENCY","TIMEOUT_MS","FETCH_OPT","ConnectivityChecker","domainList","perDomainCheckStarted","perDomainFinished","domain","isWiki","domainData","startTime","resp","respJson","ip","gbRespJson","inject","start","ref","domainDataViewSlice","isAtStart","isAtEnd","getName","key","translation","banana","getStatus","status","getDomainBlockingResult","blockStatus","getConnectivity","ping","nextPage","prevPage","toStart","toEnd","_withScopeId","JOIN_PATTERN","EMPTY_FALLBACK","PADDING_CHAR","TABLE_HEADER_ROW","PADDING_DOMAINS","PADDING_STATUS","PADDING_BLOCKED","PADDING_PING","download","url","filename","hiddenAnchor","ReportGenerator","checkData","matcher","view","tableEntries","connectivity","blocking","entry","item","blocked","date","result","report","blob","isTableExpanded","reportGenerator","getDomainsFriendlyDesc","domains","downloadData","inaccessibleDomains","dataView","blockedDomains","inaccessibleDomainsDesc","blockedDomainsDesc","hasProblem","checkedDomainsCount","currentCheckingDomain","transformRawDomainList","rawDomainList","handleError","check","data","prepareAndCheck","prefetchAll","rawList","__vitePreload","glob","path","v","_","reject","MAPPINGS","getCurrentLang","lang","getI18nInfo","messageSource","EnMessageSource","selectedLang","currentLang","__variableDynamicImportRuntimeHelper","createApp","App","Banana","app"],"sources":["../../vite/modulepreload-polyfill","../../src/components/SiteHeader.vue","../../src/assets/toolforge-dark.svg","../../src/assets/toolforge.svg","../../src/components/SiteFooter.vue","../../src/modules/store.ts","../../src/modules/utils.ts","../../src/modules/TaskDispatcher.ts","../../src/modules/ConnectivityChecker.ts","../../src/components/DataTable.vue","../../src/components/ProgressIndicator.vue","../../src/components/ToggleSwitch.vue","../../src/components/CheckTypeField.vue","../../src/modules/ReportGenerator.ts","../../src/components/SummaryCard.vue","../../src/components/SiteMain.vue","../../../../../../../@vite/dynamic-import-helper","../../src/modules/lang.ts","../../src/main.ts"],"sourcesContent":["__VITE_IS_MODERN__&&(function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n}());","\n\n\n","export default \"__VITE_ASSET__a8aea765__\"","export default \"__VITE_ASSET__859d8eda__\"","\n\n\n\n\n","import { reactive } from 'vue';\n\n// Give them string values for the convenience of logging\n\nenum DomainConnectivityResult {\n PENDING = 'Pending',\n CHECKING = 'Checking',\n SUCCESS = 'Success',\n FAILURE = 'Failure',\n}\n\nenum DomainBlockingResult {\n NOT_BLOCKED = 'Not blocked',\n BLOCKED = 'Blocked',\n UNKNOWN = 'Unknown',\n NOT_A_WIKI = 'Not a wiki',\n}\n\nenum CheckStatus {\n NOT_RUN,\n PREPARING,\n RUNNING,\n ENDED,\n ENDED_ERROR,\n}\n\ninterface DomainDataView {\n connectivity: DomainConnectivityResult,\n blocking?: DomainBlockingResult,\n ping?: number,\n}\n\nconst store = reactive({\n checkStatus: CheckStatus.NOT_RUN,\n domainDataView: new Map(),\n});\n\nexport default store;\nexport type { DomainDataView };\nexport { DomainConnectivityResult, DomainBlockingResult, CheckStatus };\n","import { computed, WritableComputedRef } from 'vue';\n\nfunction resolveAfter(ms: number) {\n return new Promise((resolve) => { setTimeout(resolve, ms); });\n}\n\nfunction getTimeoutSignal(ms: number): AbortSignal {\n const controller = new AbortController();\n\n // AbortSignal.timeout() is not preferred due to its browser support\n // https://caniuse.com/?search=AbortSignal.timeout\n setTimeout(() => {\n controller.abort();\n }, ms);\n\n return controller.signal;\n}\n\nfunction reloadWindow() {\n window.location.reload();\n}\n\n/**\n * Return a computed property that returns the corresponding prop value when is accessed\n * and fires an event when is set. Used with v-model.\n * @param props props field of a component\n * @param emit emit function of a component\n * @param name name of the prop\n * @return wrapped computer property\n */\nfunction useModelWrapper>(\n props: P,\n emit: (event: `update:${T}`, value: P[T]) => void,\n name: T = 'modelValue' as T,\n)\n : WritableComputedRef {\n return computed({\n get() {\n return props[name];\n },\n set(value) {\n emit(`update:${name}`, value);\n },\n });\n}\n\nexport {\n resolveAfter, reloadWindow, getTimeoutSignal, useModelWrapper,\n};\n","type Task = () => Promise;\n\nclass TaskDispatcher {\n private queue: Task[];\n\n private workers: Promise[];\n\n private readonly concurrency: number;\n\n /**\n * Main routine for a pooled promise.\n */\n private async promiseMain() {\n while (true) {\n const job = this.queue.shift();\n if (job === undefined) {\n break;\n }\n await job();\n }\n }\n\n /**\n * Instantiate a {@link TaskDispatcher} object.\n * @param concurrency max numbers of tasks to run at the same time\n */\n public constructor(concurrency: number) {\n this.queue = [];\n this.workers = [];\n this.concurrency = concurrency;\n }\n\n /**\n * Add a task to the queue to run it later.\n * @param task task\n */\n public enqueue(task: Task): void {\n this.queue.push(task);\n }\n\n /**\n * Start executing the task queue.\n * @return a promise that is resolved when all tasks have completed.\n */\n public async run(): Promise {\n this.workers = [];\n for (let i = 0; i < this.concurrency; i++) {\n this.workers.push(this.promiseMain());\n }\n return Promise.all(this.workers);\n }\n}\n\nexport default TaskDispatcher;\n","import TaskDispatcher from './TaskDispatcher';\nimport { getTimeoutSignal } from './utils';\n\ninterface DomainData {\n domain: string,\n isWiki: boolean,\n isSuccessful: boolean,\n ping?: number,\n isBlocked?: boolean,\n}\n\ninterface MwQueryUserInfoApiResult {\n query?: {\n userinfo: {\n id: number,\n name: string,\n anon: boolean,\n blockid?: unknown,\n }\n }\n}\n\ninterface MwQueryGlobalBlocksApiResult {\n query?: {\n globalblocks: Array<{\n address: string,\n }>\n }\n}\n\ntype DomainList = Array<[string, boolean]>;\n\nconst CONCURRENCY = 15;\nconst TIMEOUT_MS = 30 * 1000;\nconst FETCH_OPT: RequestInit = {\n method: 'GET',\n headers: { 'Api-User-Agent': `wscd/${APP_VERSION}` },\n cache: 'no-store',\n};\n\nclass ConnectivityChecker {\n private readonly domainList: DomainList;\n\n private readonly perDomainCheckStarted: (domain: string) => void;\n\n private readonly perDomainFinished: (data: DomainData) => void;\n\n private readonly taskDispatcher: TaskDispatcher;\n\n /**\n * Instantiate a {@link ConnectivityChecker} object.\n * @param domainList a list of sites to be checked\n * @param perDomainCheckStarted a callback which is called when a single domain test is started\n * @param perDomainFinished a callback which is called when a single domain test is completed\n * @param concurrency number of domain checks to run at a single time\n */\n public constructor(\n domainList: DomainList,\n perDomainCheckStarted: (domain: string) => void,\n perDomainFinished: (data: DomainData) => void,\n concurrency = CONCURRENCY,\n ) {\n this.domainList = domainList;\n this.perDomainCheckStarted = perDomainCheckStarted;\n this.perDomainFinished = perDomainFinished;\n this.taskDispatcher = new TaskDispatcher(concurrency);\n }\n\n public async check(): Promise {\n this.domainList.forEach(([domain, isWiki]) => {\n this.taskDispatcher.enqueue(() => {\n this.perDomainCheckStarted(domain);\n\n const domainData: DomainData = {\n domain,\n isWiki,\n isSuccessful: false,\n };\n const startTime = performance.now();\n const fetchPromise = isWiki\n ? fetch(\n `https://${domain}/w/api.php?action=query&format=json&formatversion=2&meta=userinfo&uiprop=blockinfo&origin=*`,\n { ...FETCH_OPT, signal: getTimeoutSignal(TIMEOUT_MS) },\n )\n .then((resp) => resp.json())\n .then((respJson: MwQueryUserInfoApiResult) => {\n // Check if it is a private wiki\n if (respJson.query === undefined) {\n return null;\n }\n domainData.isBlocked = 'blockid' in respJson.query.userinfo;\n return respJson.query.userinfo.name; // IP address\n })\n : fetch(\n `https://${domain}/favicon.ico`,\n { ...FETCH_OPT, mode: 'no-cors', signal: getTimeoutSignal(TIMEOUT_MS) },\n );\n\n return fetchPromise\n .then(async (ip) => {\n domainData.ping = Math.trunc(performance.now() - startTime);\n domainData.isSuccessful = true;\n\n if (typeof ip === 'string' && !domainData.isBlocked) {\n // Check global blocks as uiprop=blockinfo doesn't acknowledge global blocks\n try {\n const gbRespJson: MwQueryGlobalBlocksApiResult = await fetch(\n `https://${domain}/w/api.php?action=query&list=globalblocks&bgip=${ip}&bgprop=address&format=json&formatversion=2&origin=*`,\n { ...FETCH_OPT, signal: getTimeoutSignal(TIMEOUT_MS) },\n ).then((resp) => resp.json());\n\n if (gbRespJson.query !== undefined) {\n domainData.isBlocked = gbRespJson.query.globalblocks.length > 0;\n }\n } catch {\n // FIXME: Better error handling here, consider not catching exceptions?\n }\n }\n })\n .catch(() => { domainData.isSuccessful = false; })\n .then(() => { this.perDomainFinished(domainData); });\n });\n });\n\n return this.taskDispatcher.run();\n }\n}\n\nexport default ConnectivityChecker;\n","\n\n\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n\n","import { DomainBlockingResult, DomainConnectivityResult, DomainDataView } from './store';\n\n// No need to support i18n, English only\n\nconst JOIN_PATTERN = '\\n - ';\nconst EMPTY_FALLBACK = 'none';\nconst PADDING_CHAR = ' ';\nconst TABLE_HEADER_ROW = ['Domains', 'Status', 'Blocked?', 'RTT (ms)'];\n\nconst PADDING_DOMAINS = 30;\nconst PADDING_STATUS = 10;\nconst PADDING_BLOCKED = 15;\nconst PADDING_PING = 8;\n\nfunction download(url: string, filename: string) {\n const hiddenAnchor = document.createElement('a');\n hiddenAnchor.href = url;\n hiddenAnchor.download = filename;\n document.body.appendChild(hiddenAnchor);\n\n hiddenAnchor.click();\n document.body.removeChild(hiddenAnchor);\n}\n\n/**\n * Helper class to generate check reports.\n */\nclass ReportGenerator {\n private readonly checkData: Map;\n\n private url?: string;\n\n private firstGeneratedTime?: Date;\n\n /**\n * Instantiate a {@link ReportGenerator} instance.\n * @param checkData check data\n */\n constructor(checkData: Map) {\n this.checkData = checkData;\n }\n\n /**\n * Render a string representation of matched domains.\n * @param matcher function expression to match against all domains\n * @return the string\n */\n private renderSiteList(matcher: (view: DomainDataView) => boolean): string {\n return [...this.checkData]\n .filter(([, view]) => matcher(view))\n .map(([domain]) => JOIN_PATTERN + domain)\n .join('') || EMPTY_FALLBACK;\n }\n\n /**\n * Render a string representation of all verbose data, in table style.\n * @return the table\n */\n private renderTable(): string {\n const tableEntries: Array<[\n string,\n DomainConnectivityResult,\n DomainBlockingResult | undefined,\n number | undefined,\n ]> = [];\n\n this.checkData.forEach(({ connectivity, blocking, ping }, key) => {\n tableEntries.push([key, connectivity, blocking, ping]);\n });\n\n return [\n TABLE_HEADER_ROW,\n ...tableEntries.map((entry) => entry.map((item) => `${item || ''}`)),\n ]\n .map(\n ([domain, status, blocked, ping]) => [\n domain.padEnd(PADDING_DOMAINS, PADDING_CHAR),\n status.padEnd(PADDING_STATUS, PADDING_CHAR),\n blocked.padEnd(PADDING_BLOCKED, PADDING_CHAR),\n ping.padStart(PADDING_PING, PADDING_CHAR),\n ].join(''),\n )\n .join('\\n');\n }\n\n /**\n * Export all check data to a string.\n * @param date date\n * @return the string\n */\n private generateReport(date: Date): string {\n let result = 'Check result';\n result += '\\n------------';\n result += `\\nGenerated at: ${date}`;\n result += `\\nUnavailable domains: ${this.renderSiteList(\n ({ connectivity }) => connectivity === DomainConnectivityResult.FAILURE,\n )}`;\n result += `\\nBlocked domains: ${this.renderSiteList(\n ({ blocking }) => blocking === DomainBlockingResult.BLOCKED,\n )}`;\n result += '\\n';\n result += `\\n${this.renderTable()}`;\n return result;\n }\n\n /**\n * Download the report.\n */\n public download(): void {\n if (this.firstGeneratedTime === undefined) {\n this.firstGeneratedTime = new Date();\n }\n const filename = `CheckReport_${this.firstGeneratedTime.getTime()}.txt`;\n\n if (this.url === undefined) {\n const report = this.generateReport(this.firstGeneratedTime);\n const blob = new Blob([report], { type: 'text/plain' });\n this.url = URL.createObjectURL(blob);\n }\n download(this.url, filename);\n }\n}\n\nexport default ReportGenerator;\n","\n\n\n\n\n","\n\n\n\n\n","export default (glob, path) => {\n const v = glob[path];\n if (v) {\n return typeof v === 'function' ? v() : Promise.resolve(v);\n }\n return new Promise((_, reject) => {\n (typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(reject.bind(null, new Error('Unknown variable dynamic import: ' + path)));\n });\n}","import { MessageSource } from 'banana-i18n';\nimport EnMessageSource from '../../i18n-merged/en.json';\n\ninterface I18nInfo {\n /** Selected primary language, falls back to `en` */\n lang: string,\n\n /** Banana message source */\n messageSource: MessageSource,\n}\n\nconst MAPPINGS: Record = {\n zh: 'zh-hans',\n 'zh-cn': 'zh-hans',\n 'zh-tw': 'zh-hant',\n 'zh-sg': 'zh-hans',\n};\n\n/**\n * Get user's preferred language. `?lang=xxx` takes priority over `navigator.languages`.\n * @return language\n */\nfunction getCurrentLang(): string {\n let lang = (new URLSearchParams(window.location.search).get('lang')\n || navigator.language).toLowerCase();\n if (lang in MAPPINGS) {\n lang = MAPPINGS[lang];\n }\n return lang;\n}\n\nasync function getI18nInfo(): Promise {\n const lang = getCurrentLang();\n const messageSource: Record> = {\n en: EnMessageSource,\n };\n\n let selectedLang = 'en';\n // Treat en-xx as en\n if (!lang.startsWith('en')) {\n for (const currentLang of [lang, lang.split('-')[0]]) {\n try {\n // Will throw exception when i18n file does not exist\n messageSource[currentLang] = (await import(`../../i18n-merged/${currentLang}.json`)).default;\n selectedLang = currentLang;\n break;\n } catch { }\n }\n }\n return { lang: selectedLang, messageSource };\n}\n\nexport default getI18nInfo;\n","import { createApp } from 'vue';\nimport Banana from 'banana-i18n';\n\nimport './styles/reset.less';\nimport './styles/style.less';\n\nimport '@fontsource/inter/400.css';\nimport '@fontsource/inter/700.css';\n\nimport App from './App.vue';\nimport getI18nInfo from './modules/lang';\n\n// Avoid top-level await for better browser support\n(async () => {\n const app = createApp(App);\n\n const { lang, messageSource } = await getI18nInfo();\n const banana = new Banana(lang, { messages: messageSource, wikilinks: true });\n\n document.title = banana.i18n('title');\n document.documentElement.lang = lang; // For a11y support\n\n app.config.globalProperties.$i18n = banana.i18n.bind(banana);\n app.provide('banana', banana);\n app.mount('#app');\n})();\n"],"file":"assets/index.d6a9cde1.js"} \ No newline at end of file diff --git a/index.html b/index.html index 5e34cc9..952ca25 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Wikimedia Server Connectivity Dashboard
\ No newline at end of file +Wikimedia Server Connectivity Dashboard
\ No newline at end of file