UNPKG

wtf_wikipedia

Version:
2,064 lines (1,939 loc) 289 kB
/* wtf_wikipedia 9.0.1 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('isomorphic-unfetch')) : typeof define === 'function' && define.amd ? define(['isomorphic-unfetch'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.wtf = factory(global.unfetch)); }(this, (function (isomorphicUnfetch) { 'use strict'; function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var isomorphicUnfetch__default = /*#__PURE__*/_interopDefaultLegacy(isomorphicUnfetch); /** * Parses out the domain and title from a url * * @private * @param {string} url The url that will be parsed * @returns {{domain: string, title: string}} The domain and title of a url */ const parseUrl = function (url) { let parsed = new URL(url); let title = parsed.pathname.replace(/^\/(wiki\/)?/, ''); title = decodeURIComponent(title); return { domain: parsed.host, title: title }; }; var parseUrl_1 = parseUrl; /** * capitalizes the input * hello -> Hello * hello there -> Hello there * * @private * @param {string} [str] the string that will be capitalized * @returns {string} the capitalized string */ function capitalise(str) { if (str && typeof str === 'string') { return str.charAt(0).toUpperCase() + str.slice(1); } return ''; } /** * trim whitespaces of the ends normalize 2 spaces into one and removes whitespaces before commas * * @private * @param {string} [str] the string that will be processed * @returns {string} the processed string */ function trim_whitespace$1(str) { if (str && typeof str === 'string') { str = str.replace(/^\s+/, ''); str = str.replace(/\s+$/, ''); str = str.replace(/ {2}/, ' '); str = str.replace(/\s, /, ', '); return str; } return ''; } /** * determines if an variable is an array or not * * @private * @param {*} x the variable that needs to be checked * @returns {boolean} whether the variable is an array */ function isArray$4(x) { return Object.prototype.toString.call(x) === '[object Array]'; } /** * determines if an variable is an object or not * * @private * @param {*} x the variable that needs to be checked * @returns {boolean} whether the variable is an object */ function isObject$1(x) { return x && Object.prototype.toString.call(x) === '[object Object]'; } var helpers = { capitalise, trim_whitespace: trim_whitespace$1, isArray: isArray$4, isObject: isObject$1 }; const { isArray: isArray$3 } = helpers; const isInterWiki = /(wikibooks|wikidata|wikimedia|wikinews|wikipedia|wikiquote|wikisource|wikispecies|wikiversity|wikivoyage|wiktionary|foundation|meta)\.org/; const defaults$c = { action: 'query', prop: 'revisions|pageprops', // we use the 'revisions' api here, instead of the Raw api, for its CORS-rules.. rvprop: 'content', maxlag: 5, rvslots: 'main', origin: '*', format: 'json', redirects: 'true' }; /** * turns a object into a query string * * @private * @param {Object<string, string | number | boolean>} obj * @returns {string} QueryString */ const toQueryString = function (obj) { return Object.entries(obj).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&'); }; /** * cleans and prepares the tile by replacing the spaces with underscores (_) and trimming the white spaces of the ends * * @private * @param {string} page the title that needs cleaning * @returns {string} the cleaned title */ const cleanTitle = page => { return page.replace(/ /g, '_').trim(); }; /** * generates the url for fetching the pages * * @private * @param {import('.').fetchDefaults} options * @returns {string} the url that can be used to make the fetch */ const makeUrl = function (options) { let params = Object.assign({}, defaults$c); //default url let apiPath = ''; //add support for third party apis if (options.domain) { //wikimedia is the only api that uses `/w/api` as its path. other wikis use other paths let path = isInterWiki.test(options.domain) ? 'w/api.php' : options.path; apiPath = `https://${options.domain}/${path}?`; } else if (options.lang && options.wiki) { apiPath = `https://${options.lang}.${options.wiki}.org/w/api.php?`; } else { return ''; } if (!options.follow_redirects) { delete params.redirects; } //support numerical ids let title = options.title; if (typeof title === 'number') { //single pageId params.pageids = title; } else if (typeof title === 'string') { //single page title params.titles = cleanTitle(title); } else if (title !== undefined && isArray$3(title) && typeof title[0] === 'number') { //pageid array params.pageids = title.join('|'); } else if (title !== undefined && isArray$3(title) === true && typeof title[0] === 'string') { //title array params.titles = title.map(cleanTitle).join('|'); } else { return ''; } //make it! return `${apiPath}${toQueryString(params)}`; }; var makeUrl_1 = makeUrl; /** * parses the media wiki api response to something we can use * * the data-format from mediawiki api is nutso * * @private * @param {object} data * @param {object} [options] * @returns {*} result */ const getResult = function (data, options = {}) { //get all the pagesIds from the result let pages = Object.keys(data.query.pages); // map over the pageIds to parse out all the information return pages.map(id => { // get the page by pageID let page = data.query.pages[id] || {}; // if the page is missing or not found than return null if (page.hasOwnProperty('missing') || page.hasOwnProperty('invalid')) { return null; } // get the text from the object let text = page.revisions[0]['*']; // if the text is not found in the regular place than it is at the other place if (!text && page.revisions[0].slots) { text = page.revisions[0].slots.main['*']; } page.pageprops = page.pageprops || {}; let domain = options.domain; if (!domain && options.wiki) { domain = `${options.wiki}.org`; } let meta = Object.assign({}, options, { title: page.title, pageID: page.pageid, namespace: page.ns, domain: domain, wikidata: page.pageprops.wikibase_item, description: page.pageprops['wikibase-shortdesc'] }); return { wiki: text, meta: meta }; }); }; var getResult_1 = getResult; /** * helper for looping around all sections of a document * * @private * @param {Document} doc the document with the sections * @param {string} fn the function name of the function that will be called * @param {string | number} [clue] the clue that will be used with the function * @returns {Array|*} the array of item at the index of the clue */ const sectionMap = function (doc, fn, clue) { let arr = []; doc.sections().forEach(sec => { let list = []; if (typeof clue === 'string') { list = sec[fn](clue); } else { list = sec[fn](); } list.forEach(t => { arr.push(t); }); }); if (typeof clue === 'number') { if (arr[clue] === undefined) { return []; } return [arr[clue]]; } return arr; }; var _sectionMap = sectionMap; /** * applies the the key values of defaults to options * * @private * @param {object} options the user options * @param {object} defaults the defaults * @returns {object} the user options with the defaults applied */ const setDefaults = function (options, defaults) { return Object.assign({}, defaults, options); }; var setDefaults_1 = setDefaults; /** * @typedef DocumentToJsonOptions * @property {boolean | undefined} title * @property {boolean | undefined} pageID * @property {boolean | undefined} categories * @property {boolean | undefined} sections * @property {boolean | undefined} coordinates * @property {boolean | undefined} infoboxes * @property {boolean | undefined} images * @property {boolean | undefined} plaintext * @property {boolean | undefined} citations * @property {boolean | undefined} references */ const defaults$b = { title: true, sections: true, pageID: true, categories: true }; /** * @typedef documentToJsonReturn * @property {string | undefined} title * @property {number | null | undefined} pageID * @property {string[] | undefined} categories * @property {object[] | undefined} sections * @property {boolean | undefined} isRedirect * @property {object | undefined} redirectTo * @property {object[] | undefined} coordinates * @property {object[] | undefined} infoboxes * @property {Image[] | undefined} images * @property {string | undefined} plaintext * @property {object[] | undefined} references */ /** * an opinionated output of the most-wanted data * * @private * @param {Document} doc * @param {DocumentToJsonOptions} options * @returns {documentToJsonReturn} */ const toJSON$3 = function (doc, options) { options = setDefaults_1(options, defaults$b); /** * @type {documentToJsonReturn} */ let data = {}; if (options.title) { data.title = doc.title(); } if (options.pageID) { data.pageID = doc.pageID(); } if (options.categories) { data.categories = doc.categories(); } if (options.sections) { data.sections = doc.sections().map(i => i.json(options)); } if (doc.isRedirect() === true) { data.isRedirect = true; data.redirectTo = doc.redirectTo(); data.sections = []; } //these are default-off if (options.coordinates) { data.coordinates = doc.coordinates(); } if (options.infoboxes) { data.infoboxes = doc.infoboxes().map(i => i.json(options)); } if (options.images) { data.images = doc.images().map(i => i.json(options)); } if (options.plaintext) { data.plaintext = doc.text(options); } if (options.citations || options.references) { data.references = doc.references(); } return data; }; var toJson$6 = toJSON$3; var categories$1 = ['category', //en 'abdeeling', // pdc 'bólkur', // fo 'catagóir', // ga 'categori', // cy 'categoria', 'categoria', // co 'categoría', // es 'categorîa', // lij 'categorìa', // pms 'catégorie', 'categorie', 'catègorie', // frp 'category', 'categuria', // lmo 'catigurìa', // scn 'class', // kw 'ẹ̀ka', // yo 'flocc', 'flocc', // ang 'flokkur', 'grup', // tpi 'jamii', // sw 'kaarangay', // war 'kateggoría', // lad 'kategooria', // et 'kategori', // da 'kategorî', // ku 'kategoria', // eu 'kategória', // hu 'kategorie', //de 'kategoriija', // se 'kategorija', // sl 'kategorio', // eo 'kategoriya', 'kategoriýa', // tk 'kategoriye', // diq 'kategory', // fy 'kategorya', // tl 'kateqoriya', // az 'katiguriya', // qu 'klad', // vo 'luokka', 'ñemohenda', // gn 'roinn', //-seòrsa gd 'ronney', // gv 'rummad', // br 'setensele', // nso 'sokajy', // mg 'sumut', // atassuseq kl 'thể', // loại vi 'turkum', // uz 'категорија', 'категория', // ru 'категорія', // uk 'катэгорыя', 'төркем', // tt 'קטגוריה', // he 'تصنيف', 'تۈر', // ug 'رده', 'श्रेणी', 'श्रेणी', // hi 'বিষয়শ্রেণী', // bn 'หมวดหมู่', // th '분류', // ko '분류', //ko '分类' // za //-- ]; var disambig_templates = ['dab', //en 'disamb', //en 'disambig', //en 'disambiguation', //en 'aðgreining', //is 'aimai', //ja 'ałtsʼáʼáztiin', //nv 'anlam ayrımı', //gag 'anlam ayrımı', //tr 'apartigilo', //eo 'argipen', //eu 'begriepskloorenge', //stq 'begriffsklärung', //als 'begriffsklärung', //de 'begriffsklärung', //pdc 'begriffsklearung', //bar 'bisongidila', //kg 'bkl', //pfl 'bokokani', //ln 'caddayn', //so 'clerheans', //kw 'cudakirin', //ku 'čvor', //bs 'db', //vls 'desambig', //nov 'desambigación', //an 'desambiguação', //pt 'desambiguació', //ca 'desambiguación', //es 'desambiguáncia', //ext 'desambiguasion', //lad 'desambiguassiù', //lmo 'desambigui', //lfn 'dezambiguizare', //ro 'dəqiqləşdirmə', //az 'disambigua', //it 'disambigua', //lij 'disambigua', //nap 'disambìgua', //sc 'disambigua', //scn 'disambiguasi', //id 'disambiguasi', //su 'discretiva', //la 'disheñvelout', //br 'disingkek', //min 'dixanbigua', //vec 'dixebra', //ast 'diżambigwazzjoni', //mt 'doorverwijspagina', //nl 'dp', //nl 'dp', //zea 'dubbelsinnig', //af 'dudalipen', //rmy 'dv', //nds_nl 'egyért', //hu 'fleiri týdningar', //fo 'fleirtyding', //nn 'flertydig', //da 'förgrening', //sv 'gì-ngiê', //cdo 'giklaro', //ceb 'gwahaniaethu', //cy 'homonimo', //io 'homónimos', //gl 'homonymie', //fr 'huaʻōlelo puana like', //haw 'idirdhealú', //ga 'khu-pia̍t', //zh_min_nan 'kthjellim', //sq 'kujekesa', //sn 'maana', //sw 'maneo bin', //diq 'mehrdüdig begreep', //nds 'menm non', //ht 'muardüüdag artiikel', //frr 'neibetsjuttings', //fy 'nozīmju atdalīšana', //lv 'nuorodinis', //lt 'nyahkekaburan', //ms 'omonimeye', //wa 'omonimia', //oc 'page dé frouque', //nrm 'paglilinaw', //tl 'panangilawlawag', //ilo 'pansayod', //war 'pejy mitovy anarana', //mg 'peker', //no 'razdvojba', //hr 'razločitev', //sl 'razvrstavanje', //sh 'reddaghey', //gv 'rozcestník', //cs 'rozlišovacia stránka', //sk 'sclerir noziun', //rm 'selvendyssivu', //olo 'soilleireachadh', //gd 'suzmunski', //jbo 'täpsustuslehekülg', //et 'täsmennyssivu', //fi 'telplänov', //vo 'tlahtolmelahuacatlaliztli', //nah 'trang định hướng', //vi 'ujednoznacznienie', //pl 'verdudeliking', //li 'wěcejwóznamowosć', //dsb 'wjacezmyslnosć', //hsb 'zambiguaçon', //mwl 'zeimeibu škiršona', //ltg 'αποσαφήνιση', //el 'айрық', //kk 'аҵакырацәа', //ab 'вишезначна одредница', //sr 'ибҳомзудоӣ', //tg 'кёб магъаналы', //krc 'күп мәгънәләр', //tt 'күп мәғәнәлелек', //ba 'мъногосъмꙑслиѥ', //cu 'неадназначнасць', //be 'неадназначнасьць', //be_x_old 'неоднозначность', //ru 'олон удхатай', //bxr 'појаснување', //mk 'пояснение', //bg 'са шумуд манавал', //lez 'салаа утгатай', //mn 'суолталар', //sah 'текмаанисиздик', //ky 'цо магіна гуреб', //av 'чеперушка', //rue 'чолхалла', //ce 'шуко ончыктымаш-влак', //mhr 'მრავალმნიშვნელოვანი', //ka 'բազմիմաստութիւն', //hyw 'բազմիմաստություն', //hy 'באדייטן', //yi 'פירושונים', //he 'ابهام‌زدایی', //fa 'توضيح', //ar 'توضيح', //arz 'دقیقلشدیرمه', //azb 'ڕوونکردنەوە', //ckb 'سلجهائپ', //sd 'ضد ابہام', //ur 'گجگجی بیری', //mzn 'نامبهمېدنه', //ps 'መንታ', //am 'अस्पष्टता', //ne 'बहुअर्थी', //bh 'बहुविकल्पी शब्द', //hi 'দ্ব্যর্থতা নিরসন', //bn 'ਗੁੰਝਲ-ਖੋਲ੍ਹ', //pa 'સંદિગ્ધ શીર્ષક', //gu 'பக்கவழி நெறிப்படுத்தல்', //ta 'అయోమయ నివృత్తి', //te 'ದ್ವಂದ್ವ ನಿವಾರಣೆ', //kn 'വിവക്ഷകൾ', //ml 'වක්‍රෝත්ති', //si 'แก้ความกำกวม', //th 'သံတူကြောင်းကွဲ', //my 'ណែនាំ', //km '동음이의', //ko '扤清楚', //gan '搞清楚', //zh_yue '曖昧さ回避', //ja '消歧义', //zh '釋義', //zh_classical "gestion dj'omònim", //pms "sut'ichana qillqa" //qu // 'z', //vep // 'သဵင်မိူၼ် တူၼ်ႈထႅဝ်ပႅၵ်ႇ', //shn ]; // used in titles to denote disambiguation pages // see 'Football_(disambiguation)' var disambig_titles = ['disambiguation', //en 'homonymie', //fr 'توضيح', //ar 'desambiguação', //pt 'Begriffsklärung', //de 'disambigua', //it '曖昧さ回避', //ja '消歧義', //zh '搞清楚', //zh-yue 'значения', //ru 'ابهام‌زدایی', //fa 'د ابہام', //ur '동음이의', //ko 'dubbelsinnig', //af 'այլ կիրառումներ', //hy 'ujednoznacznienie' //pl ]; var images = ['file', //en 'image', //en 'चित्र', //img 'archivo', //es 'attēls', //lv 'berkas', //id 'bestand', //nl 'datei', //de 'dosiero', //eo 'dosya', //lad 'fájl', //hu 'fasciculus', //la 'fichier', //fr 'fil', //da 'fitxategi', //eu 'fitxer', //ca 'gambar', //su 'imagem', //pt 'imej', //ms 'immagine', //it 'larawan', //tl 'lêer', //af 'plik', //pl 'restr', //br 'slika', //bs 'wêne', //ku 'wobraz', //dsb 'выява', //be 'податотека', //mk 'слика', //sr 'файл', //ru 'სურათი', //ka 'պատկեր', //hy 'קובץ', //he 'پرونده', //fa 'دوتنه', //ps 'ملف', //ar 'وێنە', //ckb 'चित्र', //hi 'ไฟล์', //th '파일', //ko 'ファイル' //ja ]; var infoboxes = ['infobox', //en 'anfo', //mwl 'anuāmapa', //haw 'bilgi kutusu', //tr 'bilgi', //tr 'bilgiquti', //uz 'boaty', //mg 'boestkelaouiñ', //br 'bosca', //ga 'capsa', //la 'diehtokássa', //se 'faktamall', //sv 'ficha', //es 'generalni', //hr 'gwybodlen3', //cy 'info', //pt 'infobokis', //tpi 'infoboks', //da 'infochascha', //rm 'infokašćik', //dsb 'infokast', //et 'infokutija', //bs 'infolentelė', //lt 'infopolje', //sl 'informkesto', //eo 'infoskreine', //ltg 'infotaula', //eu 'inligtingskas', 'inligtingskas3', //af 'inligtingskas4', //af 'kishtey', //gv 'kotak', //su 'tertcita', //jbo 'tietolaatikko', //fi 'yerleşim bilgi kutusu', 'ynfoboks', //fy 'πλαίσιο', //el 'акарточка', //ab 'аҥа', //mhr 'инфобокс', //kk 'инфокутија', //sr 'инфокутия', //bg 'інфобокс', //rue 'канадский', 'картка', //be 'карточка', //ru 'карточка2', //mdf 'карточкарус', //ba 'картуш', //koi 'қуттӣ', //tg 'ინფოდაფა', //ka 'տեղեկաքարտ', //hy 'אינפאקעסטל', //yi 'תבנית', //he 'بطاقة', //ar 'ڄاڻخانو', //sd 'خانہ', //ur 'لغة', 'ज्ञानसन्दूक', //hi 'তথ্যছক', //bn 'ਜਾਣਕਾਰੀਡੱਬਾ', //pa 'సమాచారపెట్టె', //te 'තොරතුරුකොටුව', //si 'กล่องข้อมูล', //th 'ប្រអប់ព័ត៌មាន', //km '정보상자', //ko '明細' //zh_yue ]; var redirects$1 = ['adkas', //br 'aýdaw', 'doorverwijzing', //nl 'ohjaus', 'patrz', //pl 'přesměruj', 'redirección', 'redireccion', 'redirección', //es 'redirecionamento', //pt 'redirect', //en 'redirection', 'redirection', //fr 'rinvia', //it 'tilvísun', 'uudelleenohjaus', 'weiterleitung', 'weiterleitung', //de 'yönlendi̇r', 'yönlendirme', 'yönlendi̇rme', //tr 'ανακατευθυνση', //el 'айдау', 'перанакіраваньне', 'перенаправлення', //uk 'пренасочување', //mk 'преусмери', 'преусмјери', 'تغییر_مسیر', 'تغییرمسیر', 'تغییرمسیر', //fa 'เปลี่ยนทาง', //th 'ប្តូរទីតាំងទៅ', //km '転送', //ja '重定向']; var references = ['references', 'reference', 'einzelnachweise', 'referencias', 'références', 'notes et références', '脚注', 'referenser', 'bronnen', 'примечания']; /** * wikipedia special terms lifted and augmented from parsoid parser april 2015 * and then manually on March 2020 * * @private * @type {{ * images: string[], * references: string[], * redirects: string[], * infoboxes: string[], * categories: string[], * disambig: string[] * }} */ var i18n = { categories: categories$1, disambig_templates: disambig_templates, disambig_titles: disambig_titles, images: images, infoboxes: infoboxes, redirects: redirects$1, references: references //specials: [ //'спэцыяльныя', //'especial', //'speciální', //'spezial', //'special', //'ویژه', //'toiminnot', //'kerfissíða', //'arnawlı', //'spécial', //'speciaal', //'посебно', //'özel', //'特別' //], //users: [ //'удзельнік', //'usuari', //'uživatel', //'benutzer', //'user', //'usuario', //'کاربر', //'käyttäjä', //'notandi', //'paydalanıwshı', //'utilisateur', //'gebruiker', //'корисник', //'kullanıcı', //'利用者' //], //sources: [ ////blacklist these headings, as they're not plain-text //'references', //'see also', //'external links', //'further reading', //'notes et références', //'voir aussi', //'liens externes', //'参考文献', //references (ja) //'脚注', //citations (ja) //'関連項目', //see also (ja) //'外部リンク' //external links (ja) //] }; //alt disambig-templates en-wikipedia uses let d = ' disambiguation'; const templates$a = ['dab', 'dab', 'disamb', 'disambig', 'geodis', 'hndis', 'setindex', 'ship index', 'split dab', 'sport index', 'wp disambig', 'disambiguation cleanup', 'airport' + d, 'biology' + d, 'call sign' + d, 'caselaw' + d, 'chinese title' + d, 'genus' + d, 'hospital' + d, 'lake index', 'letter' + d, 'letter-number combination' + d, 'mathematical' + d, 'military unit' + d, 'mountainindex', 'number' + d, 'phonetics' + d, 'place name' + d, 'portal' + d, 'road' + d, 'school' + d, 'species latin name abbreviation' + d, 'species latin name' + d, 'station' + d, 'synagogue' + d, 'taxonomic authority' + d, 'taxonomy' + d].reduce((h, str) => { h[str] = true; return h; }, {}); var _disambig = templates$a; const inTitle = new RegExp('. \\((' + i18n.disambig_titles.join('|') + ')\\)$', 'i'); const i18n_templates = i18n.disambig_templates.reduce((h, str) => { h[str] = true; return h; }, {}); // look for '... may refer to' const byText = function (s) { if (!s) { return false; } let txt = s.text(); if (txt !== null && txt[0]) { if (/. may (also)? refer to\b/i.test(txt) === true) { return true; } } return false; }; /** * Parses the wikitext to find out if this page is a disambiguation * * @private * @param {Document} doc the document that is examined * @returns {boolean} an indication if the document is a disambiguation page */ const isDisambig = function (doc) { // check for a {{disambig}} template let templates = doc.templates().map(tmpl => tmpl.json()); let found = templates.find(obj => { return _disambig.hasOwnProperty(obj.template) || i18n_templates.hasOwnProperty(obj.template); }); if (found) { return true; } // check for (disambiguation) in title let title = doc.title(); if (title && inTitle.test(title) === true) { return true; } //try 'may refer to' on first line for en-wiki? if (byText(doc.sentence(0)) === true || byText(doc.sentence(1)) === true) { return true; } return false; }; var isDisambig_1 = isDisambig; const defaults$a = { caption: true, alt: true, links: true, thumb: true, url: true }; // const toJson$5 = function (img, options) { options = setDefaults_1(options, defaults$a); let json = { file: img.file() }; if (options.thumb !== false) { json.thumb = img.thumbnail(); } if (options.url !== false) { json.url = img.url(); } //add captions if (options.caption !== false && img.data.caption) { json.caption = img.caption(); if (options.links !== false && img.data.caption.links()) { json.links = img.links(); } } if (options.alt !== false && img.data.alt) { json.alt = img.alt(); } return json; }; var toJson_1$3 = toJson$5; const server = 'wikipedia.org'; const encodeTitle = function (file) { let title = file.replace(/^(image|file?):/i, ''); //titlecase it title = title.charAt(0).toUpperCase() + title.substring(1); //spaces to underscores title = title.trim().replace(/ /g, '_'); return title; }; //the wikimedia image url is a little silly: const makeSrc = function (file) { let title = encodeTitle(file); title = encodeURIComponent(title); return title; }; //the class for our image generation functions const Image = function (data) { Object.defineProperty(this, 'data', { enumerable: false, value: data }); }; const methods$8 = { file() { return this.data.file || ''; }, alt() { let str = this.data.alt || this.data.file || ''; str = str.replace(/^(file|image):/i, ''); str = str.replace(/\.(jpg|jpeg|png|gif|svg)/i, ''); return str.replace(/_/g, ' '); }, caption() { if (this.data.caption) { return this.data.caption.text(); } return ''; }, links() { if (this.data.caption) { return this.data.caption.links(); } return []; }, url() { // let lang = 'en' //this.language() || 'en' //hmm: get actual language? let fileName = makeSrc(this.file()); let domain = this.data.domain || server; let path = `wiki/Special:Redirect/file`; return `https://${domain}/${path}/${fileName}`; }, thumbnail(size) { size = size || 300; return this.url() + '?width=' + size; }, format() { let arr = this.file().split('.'); if (arr[arr.length - 1]) { return arr[arr.length - 1].toLowerCase(); } return null; }, json: function (options) { options = options || {}; return toJson_1$3(this, options); }, text: function () { return ''; }, wikitext: function () { return this.data.wiki || ''; } }; Object.keys(methods$8).forEach(k => { Image.prototype[k] = methods$8[k]; }); Image.prototype.src = Image.prototype.url; Image.prototype.thumb = Image.prototype.thumbnail; var Image_1 = Image; var languages = { aa: 'Afar', //Afar ab: 'Аҧсуа', //Abkhazian af: 'Afrikaans', //Afrikaans ak: 'Akana', //Akan als: 'Alemannisch', //Alemannic am: 'አማርኛ', //Amharic an: 'Aragonés', //Aragonese ang: 'Englisc', //Anglo-Saxon ar: 'العربية', //Arabic arc: 'ܣܘܪܬ', //Aramaic as: 'অসমীয়া', //Assamese ast: 'Asturianu', //Asturian av: 'Авар', //Avar ay: 'Aymar', //Aymara az: 'Azərbaycanca', //Azerbaijani ba: 'Башҡорт', //Bashkir bar: 'Boarisch', //Bavarian 'bat-smg': 'Žemaitėška', //Samogitian bcl: 'Bikol', //Bikol be: 'Беларуская', //Belarusian 'be-x-old': 'ltr', //Belarusian bg: 'Български', //Bulgarian bh: 'भोजपुरी', //Bihari bi: 'Bislama', //Bislama bm: 'Bamanankan', //Bambara bn: 'বাংলা', //Bengali bo: 'བོད་ཡིག', //Tibetan bpy: 'ltr', //Bishnupriya br: 'Brezhoneg', //Breton bs: 'Bosanski', //Bosnian bug: 'ᨅᨔ', //Buginese bxr: 'ltr', //Buriat ca: 'Català', //Catalan cdo: 'Chinese', //Min ce: 'Нохчийн', //Chechen ceb: 'Sinugboanong', //Cebuano ch: 'Chamoru', //Chamorro cho: 'Choctaw', //Choctaw chr: 'ᏣᎳᎩ', //Cherokee chy: 'Tsetsêhestâhese', //Cheyenne co: 'Corsu', //Corsican cr: 'Nehiyaw', //Cree cs: 'Česky', //Czech csb: 'Kaszëbsczi', //Kashubian cu: 'Slavonic', //Old cv: 'Чăваш', //Chuvash cy: 'Cymraeg', //Welsh da: 'Dansk', //Danish de: 'Deutsch', //German diq: 'Zazaki', //Dimli dsb: 'ltr', //Lower dv: 'ދިވެހިބަސް', //Divehi dz: 'ཇོང་ཁ', //Dzongkha ee: 'Ɛʋɛ', //Ewe far: 'فارسی', //Farsi el: 'Ελληνικά', //Greek en: 'English', //English eo: 'Esperanto', //Esperanto es: 'Español', //Spanish et: 'Eesti', //Estonian eu: 'Euskara', //Basque ext: 'Estremeñu', //Extremaduran ff: 'Fulfulde', //Peul fi: 'Suomi', //Finnish 'fiu-vro': 'Võro', //Võro fj: 'Na', //Fijian fo: 'Føroyskt', //Faroese fr: 'Français', //French frp: 'Arpitan', //Arpitan fur: 'Furlan', //Friulian fy: 'ltr', //West ga: 'Gaeilge', //Irish gan: 'ltr', //Gan gd: 'ltr', //Scottish gil: 'Taetae', //Gilbertese gl: 'Galego', //Galician gn: "Avañe'ẽ", //Guarani got: 'gutisk', //Gothic gu: 'ગુજરાતી', //Gujarati gv: 'Gaelg', //Manx ha: 'هَوُسَ', //Hausa hak: 'ltr', //Hakka haw: 'Hawai`i', //Hawaiian he: 'עברית', //Hebrew hi: 'हिन्दी', //Hindi ho: 'ltr', //Hiri hr: 'Hrvatski', //Croatian ht: 'Krèyol', //Haitian hu: 'Magyar', //Hungarian hy: 'Հայերեն', //Armenian hz: 'Otsiherero', //Herero ia: 'Interlingua', //Interlingua id: 'Bahasa', //Indonesian ie: 'Interlingue', //Interlingue ig: 'Igbo', //Igbo ii: 'ltr', //Sichuan ik: 'Iñupiak', //Inupiak ilo: 'Ilokano', //Ilokano io: 'Ido', //Ido is: 'Íslenska', //Icelandic it: 'Italiano', //Italian iu: 'ᐃᓄᒃᑎᑐᑦ', //Inuktitut ja: '日本語', //Japanese jbo: 'Lojban', //Lojban jv: 'Basa', //Javanese ka: 'ქართული', //Georgian kg: 'KiKongo', //Kongo ki: 'Gĩkũyũ', //Kikuyu kj: 'Kuanyama', //Kuanyama kk: 'Қазақша', //Kazakh kl: 'Kalaallisut', //Greenlandic km: 'ភាសាខ្មែរ', //Cambodian kn: 'ಕನ್ನಡ', //Kannada khw: 'کھوار', //Khowar ko: '한국어', //Korean kr: 'Kanuri', //Kanuri ks: 'कश्मीरी', //Kashmiri ksh: 'Ripoarisch', //Ripuarian ku: 'Kurdî', //Kurdish kv: 'Коми', //Komi kw: 'Kernewek', //Cornish ky: 'Kırgızca', //Kirghiz la: 'Latina', //Latin lad: 'Dzhudezmo', //Ladino lan: 'Leb', //Lango lb: 'Lëtzebuergesch', //Luxembourgish lg: 'Luganda', //Ganda li: 'Limburgs', //Limburgian lij: 'Líguru', //Ligurian lmo: 'Lumbaart', //Lombard ln: 'Lingála', //Lingala lo: 'ລາວ', //Laotian lt: 'Lietuvių', //Lithuanian lv: 'Latviešu', //Latvian 'map-bms': 'Basa', //Banyumasan mg: 'Malagasy', //Malagasy man: '官話', //Mandarin mh: 'Kajin', //Marshallese mi: 'Māori', //Maori min: 'Minangkabau', //Minangkabau mk: 'Македонски', //Macedonian ml: 'മലയാളം', //Malayalam mn: 'Монгол', //Mongolian mo: 'Moldovenească', //Moldovan mr: 'मराठी', //Marathi ms: 'Bahasa', //Malay mt: 'bil-Malti', //Maltese mus: 'Muskogee', //Creek my: 'Myanmasa', //Burmese na: 'Dorerin', //Nauruan nah: 'Nahuatl', //Nahuatl nap: 'Nnapulitano', //Neapolitan nd: 'ltr', //North nds: 'Plattdüütsch', //Low German 'nds-nl': 'Saxon', //Dutch ne: 'नेपाली', //Nepali new: 'नेपालभाषा', //Newar ng: 'Oshiwambo', //Ndonga nl: 'Nederlands', //Dutch nn: 'ltr', //Norwegian no: 'Norsk', //Norwegian nr: 'ltr', //South nso: 'ltr', //Northern nrm: 'Nouormand', //Norman nv: 'Diné', //Navajo ny: 'Chi-Chewa', //Chichewa oc: 'Occitan', //Occitan oj: 'ᐊᓂᔑᓈᐯᒧᐎᓐ', //Ojibwa om: 'Oromoo', //Oromo or: 'ଓଡ଼ିଆ', //Oriya os: 'Иронау', //Ossetian pa: 'ਪੰਜਾਬੀ', //Panjabi pag: 'Pangasinan', //Pangasinan pam: 'Kapampangan', //Kapampangan pap: 'Papiamentu', //Papiamentu pdc: 'ltr', //Pennsylvania pi: 'Pāli', //Pali pih: 'Norfuk', //Norfolk pl: 'Polski', //Polish pms: 'Piemontèis', //Piedmontese ps: 'پښتو', //Pashto pt: 'Português', //Portuguese qu: 'Runa', //Quechua rm: 'ltr', //Raeto rmy: 'Romani', //Romani rn: 'Kirundi', //Kirundi ro: 'Română', //Romanian 'roa-rup': 'Armâneashti', //Aromanian ru: 'Русский', //Russian rw: 'Kinyarwandi', //Rwandi sa: 'संस्कृतम्', //Sanskrit sc: 'Sardu', //Sardinian scn: 'Sicilianu', //Sicilian sco: 'Scots', //Scots sd: 'सिनधि', //Sindhi se: 'ltr', //Northern sg: 'Sängö', //Sango sh: 'Srpskohrvatski', //Serbo-Croatian si: 'සිංහල', //Sinhalese simple: 'ltr', //Simple sk: 'Slovenčina', //Slovak sl: 'Slovenščina', //Slovenian sm: 'Gagana', //Samoan sn: 'chiShona', //Shona so: 'Soomaaliga', //Somalia sq: 'Shqip', //Albanian sr: 'Српски', //Serbian ss: 'SiSwati', //Swati st: 'ltr', //Southern su: 'Basa', //Sundanese sv: 'Svenska', //Swedish sw: 'Kiswahili', //Swahili ta: 'தமிழ்', //Tamil te: 'తెలుగు', //Telugu tet: 'Tetun', //Tetum tg: 'Тоҷикӣ', //Tajik th: 'ไทย', //Thai ti: 'ትግርኛ', //Tigrinya tk: 'Туркмен', //Turkmen tl: 'Tagalog', //Tagalog tlh: 'tlhIngan-Hol', //Klingon tn: 'Setswana', //Tswana to: 'Lea', //Tonga tpi: 'ltr', //Tok tr: 'Türkçe', //Turkish ts: 'Xitsonga', //Tsonga tt: 'Tatarça', //Tatar tum: 'chiTumbuka', //Tumbuka tw: 'Twi', //Twi ty: 'Reo', //Tahitian udm: 'Удмурт', //Udmurt ug: 'Uyƣurqə', //Uyghur uk: 'Українська', //Ukrainian ur: 'اردو', //Urdu uz: 'Ўзбек', //Uzbek ve: 'Tshivenḓa', //Venda vi: 'Việtnam', //Vietnamese vec: 'Vèneto', //Venetian vls: 'ltr', //West vo: 'Volapük', //Volapük wa: 'Walon', //Walloon war: 'Winaray', //Waray-Waray wo: 'Wollof', //Wolof xal: 'Хальмг', //Kalmyk xh: 'isiXhosa', //Xhosa yi: 'ייִדיש', //Yiddish yo: 'Yorùbá', //Yoruba za: 'Cuengh', //Zhuang zh: '中文', //Chinese 'zh-classical': 'ltr', //Classical 'zh-min-nan': 'Bân-lâm-gú', //Minnan 'zh-yue': '粵語', //Cantonese zu: 'isiZulu' //Zulu }; languages.aa; languages.ab; languages.af; languages.ak; languages.als; languages.am; languages.an; languages.ang; languages.ar; languages.arc; languages.as; languages.ast; languages.av; languages.ay; languages.az; languages.ba; languages.bar; languages.bcl; languages.be; languages.bg; languages.bh; languages.bi; languages.bm; languages.bn; languages.bo; languages.bpy; languages.br; languages.bs; languages.bug; languages.bxr; languages.ca; languages.cdo; languages.ce; languages.ceb; languages.ch; languages.cho; languages.chr; languages.chy; languages.co; languages.cr; languages.cs; languages.csb; languages.cu; languages.cv; languages.cy; languages.da; languages.de; languages.diq; languages.dsb; languages.dv; languages.dz; languages.ee; languages.far; languages.el; languages.en; languages.eo; languages.es; languages.et; languages.eu; languages.ext; languages.ff; languages.fi; languages.fj; languages.fo; languages.fr; languages.frp; languages.fur; languages.fy; languages.ga; languages.gan; languages.gd; languages.gil; languages.gl; languages.gn; languages.got; languages.gu; languages.gv; languages.ha; languages.hak; languages.haw; languages.he; languages.hi; languages.ho; languages.hr; languages.ht; languages.hu; languages.hy; languages.hz; languages.ia; languages.id; languages.ie; languages.ig; languages.ii; languages.ik; languages.ilo; languages.io; languages.is; languages.it; languages.iu; languages.ja; languages.jbo; languages.jv; languages.ka; languages.kg; languages.ki; languages.kj; languages.kk; languages.kl; languages.km; languages.kn; languages.khw; languages.ko; languages.kr; languages.ks; languages.ksh; languages.ku; languages.kv; languages.kw; languages.ky; languages.la; languages.lad; languages.lan; languages.lb; languages.lg; languages.li; languages.lij; languages.lmo; languages.ln; languages.lo; languages.lt; languages.lv; languages.mg; languages.man; languages.mh; languages.mi; languages.min; languages.mk; languages.ml; languages.mn; languages.mo; languages.mr; languages.ms; languages.mt; languages.mus; languages.my; languages.na; languages.nah; languages.nap; languages.nd; languages.nds; languages.ne; languages.ng; languages.nl; languages.nn; languages.no; languages.nr; languages.nso; languages.nrm; languages.nv; languages.ny; languages.oc; languages.oj; languages.om; languages.or; languages.os; languages.pa; languages.pag; languages.pam; languages.pap; languages.pdc; languages.pi; languages.pih; languages.pl; languages.pms; languages.ps; languages.pt; languages.qu; languages.rm; languages.rmy; languages.rn; languages.ro; languages.ru; languages.rw; languages.sa; languages.sc; languages.scn; languages.sco; languages.sd; languages.se; languages.sg; languages.sh; languages.si; languages.simple; languages.sk; languages.sl; languages.sm; languages.sn; languages.so; languages.sq; languages.sr; languages.ss; languages.st; languages.su; languages.sv; languages.sw; languages.ta; languages.te; languages.tet; languages.tg; languages.th; languages.ti; languages.tk; languages.tl; languages.tlh; languages.tn; languages.to; languages.tpi; languages.tr; languages.ts; languages.tt; languages.tum; languages.tw; languages.ty; languages.udm; languages.ug; languages.uk; languages.ur; languages.uz; languages.ve; languages.vi; languages.vec; languages.vls; languages.vo; languages.wa; languages.war; languages.wo; languages.xal; languages.xh; languages.yi; languages.yo; languages.za; languages.zh; languages.zu; const wp = '.wikipedia.org/wiki/$1'; const wm = '.wikimedia.org/wiki/$1'; const w = 'www.'; var interwiki$1 = { acronym: w + 'acronymfinder.com/$1.html', advisory: 'advisory' + wm, advogato: w + 'advogato.org/$1', aew: 'wiki.arabeyes.org/$1', appropedia: w + 'appropedia.org/$1', aquariumwiki: w + 'theaquariumwiki.com/$1', arborwiki: 'localwiki.org/ann-arbor/$1', arxiv: 'arxiv.org/abs/$1', atmwiki: w + 'otterstedt.de/wiki/index.php/$1', baden: w + 'stadtwiki-baden-baden.de/wiki/$1/', battlestarwiki: 'en.battlestarwiki.org/wiki/$1', bcnbio: 'historiapolitica.bcn.cl/resenas_parlamentarias/wiki/$1', beacha: w + 'beachapedia.org/$1', betawiki: 'translatewiki.net/wiki/$1', bibcode: 'adsabs.harvard.edu/abs/$1', bibliowiki: 'wikilivres.org/wiki/$1', bluwiki: 'bluwiki.com/go/$1', blw: 'britainloves' + wp, botwiki: 'botwiki.sno.cc/wiki/$1', boxrec: w + 'boxrec.com/media/index.php?$1', brickwiki: w + 'brickwiki.info/wiki/$1', bugzilla: 'bugzilla.wikimedia.org/show_bug.cgi?id=$1', bulba: 'bulbapedia.bulbagarden.net/wiki/$1', c: 'commons' + wm, c2: 'c2.com/cgi/wiki?$1', c2find: 'c2.com/cgi/wiki?FindPage&value=$1', cache: w + 'google.com/search?q=cache:$1', ĉej: 'esperanto.blahus.cz/cxej/vikio/index.php/$1', cellwiki: 'cell.wikia.com/wiki/$1', centralwikia: 'community.wikia.com/wiki/$1', chej: 'esperanto.blahus.cz/cxej/vikio/index.php/$1', choralwiki: w + 'cpdl.org/wiki/index.php/$1', citizendium: 'en.citizendium.org/wiki/$1', ckwiss: w + 'ck-wissen.de/ckwiki/index.php?title=$1', comixpedia: w + 'comixpedia.org/index.php?title=$1', commons: 'commons' + wm, communityscheme: 'community.schemewiki.org/?c=s&key=$1', communitywiki: 'communitywiki.org/$1', comune: 'rete.comuni-italiani.it/wiki/$1', creativecommons: 'creativecommons.org/licenses/$1', creativecommonswiki: 'wiki.creativecommons.org/$1', cxej: 'esperanto.blahus.cz/cxej/vikio/index.php/$1', dcc: w + 'dccwiki.com/$1', dcdatabase: 'dc.wikia.com/$1', dcma: 'christian-morgenstern.de/dcma/index.php?title=$1', debian: 'wiki.debian.org/$1', delicious: w + 'delicious.com/tag/$1', devmo: 'developer.mozilla.org/en/docs/$1', dictionary: w + 'dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1', dict: w + 'dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1', disinfopedia: 'sourcewatch.org/index.php/$1', distributedproofreaders: w + 'pgdp.net/wiki/$1', distributedproofreadersca: w + 'pgdpcanada.net/wiki/index.php/$1', dmoz: 'curlie.org/$1', dmozs: 'curlie.org/search?q=$1', doi: 'doi.org/$1', donate: 'donate' + wm, doom_wiki: 'doom.wikia.com/wiki/$1', download: 'releases.wikimedia.org/$1', dbdump: 'dumps.wikimedia.org/$1/latest/', dpd: 'lema.rae.es/dpd/?key=$1', drae: 'dle.rae.es/?w=$1', dreamhost: 'wiki.dreamhost.com/index.php/$1', drumcorpswiki: w + 'drumcorpswiki.com/index.php/$1', dwjwiki: w + 'suberic.net/cgi-bin/dwj/wiki.cgi?$1', eĉei: w + 'ikso.net/cgi-bin/wiki.pl?$1', ecoreality: w + 'EcoReality.org/wiki/$1', ecxei: w + 'ikso.net/cgi-bin/wiki.pl?$1', elibre: 'enciclopedia.us.es/index.php/$1', emacswiki: w + 'emacswiki.org/emacs?$1', encyc: 'encyc.org/wiki/$1', energiewiki: w + 'netzwerk-energieberater.de/wiki/index.php/$1', englyphwiki: 'en.glyphwiki.org/wiki/$1', enkol: 'enkol.pl/$1', eokulturcentro: 'esperanto.toulouse.free.fr/nova/wikini/wakka.php?wiki=$1', esolang: 'esolangs.org/wiki/$1', etherpad: 'etherpad.wikimedia.org/$1', ethnologue: w + 'ethnologue.com/language/$1', ethnologuefamily: w + 'ethnologue.com/show_family.asp?subid=$1', evowiki: 'wiki.cotch.net/index.php/$1', exotica: w + 'exotica.org.uk/wiki/$1', fanimutationwiki: 'wiki.animutationportal.com/index.php/$1', fedora: 'fedoraproject.org/wiki/$1', finalfantasy: 'finalfantasy.wikia.com/wiki/$1', finnix: w + 'finnix.org/$1', flickruser: w + 'flickr.com/people/$1', flickrphoto: w + 'flickr.com/photo.gne?id=$1', floralwiki: w + 'floralwiki.co.uk/wiki/$1', foldoc: 'foldoc.org/$1', foundation: 'foundation' + wm, foundationsite: 'wikimediafoundation.org/$1', foxwiki: 'fox.wikis.com/wc.dll?Wiki~$1', freebio: 'freebiology.org/wiki/$1', freebsdman: w + 'FreeBSD.org/cgi/man.cgi?apropos=1&query=$1', freeculturewiki: 'wiki.freeculture.org/index.php/$1', freedomdefined: 'freedomdefined.org/$1', freefeel: 'freefeel.org/wiki/$1', freekiwiki: 'wiki.freegeek.org/index.php/$1', // freenode: 'irc://irc.freenode.net/$1', freesoft: 'directory.fsf.org/wiki/$1', ganfyd: 'ganfyd.org/index.php?title=$1', gardenology: w + 'gardenology.org/wiki/$1', gausswiki: 'gauss.ffii.org/$1', gentoo: 'wiki.gentoo.org/wiki/$1', genwiki: 'wiki.genealogy.net/index.php/$1', gerrit: 'gerrit.wikimedia.org/r/$1', git: 'gerrit.wikimedia.org/g/$1', google: w + 'google.com/search?q=$1', googledefine: w + 'google.com/search?q=define:$1', googlegroups: 'groups.google.com/groups?q=$1', guildwarswiki: 'wiki.guildwars.com/wiki/$1', guildwiki: 'guildwars.wikia.com/wiki/$1', guc: 'tools.wmflabs.org/guc/?user=$1', gucprefix: 'tools.wmflabs.org/guc/?isPrefixPattern=1&src=rc&user=$1', gutenberg: w + 'gutenberg.org/etext/$1', gutenbergwiki: w + 'gutenberg.org/wiki/$1', hackerspaces: 'hackerspaces.org/wiki/$1', h2wiki: 'halowiki.net/p/$1', hammondwiki: w + 'dairiki.org/HammondWiki/index.php3?$1', hdl: 'hdl.handle.net/$1', heraldik: 'heraldik-wiki.de/wiki/$1', heroeswiki: 'heroeswiki.com/$1', horizonlabs: 'horizon.wikimedia.org/$1', hrwiki: w + 'hrwiki.org/index.php/$1', hrfwiki: 'fanstuff.hrwiki.org/index.php/$1', hupwiki: 'wiki.hup.hu/index.php/$1', iarchive: 'archive.org/details/$1', imdbname: w + 'imdb.com/name/nm$1/', imdbtitle: w + 'imdb.com/title/tt$1/', imdbcompany: w + 'imdb.com/company/co$1/', imdbcharacter: w + 'imdb.com/character/ch$1/', incubator: 'incubator' + wm, infosecpedia: 'infosecpedia.org/wiki/$1', infosphere: 'theinfosphere.org/$1', // irc: 'irc://irc.freenode.net/$1', // ircs: 'ircs://irc.freenode.net/$1', // ircrc: 'irc://irc.wikimedia.org/$1', // rcirc: 'irc://irc.wikimedia.org/$1', 'iso639-3': 'iso639-3.sil.org/code/$1', issn: w + 'worldcat.org/issn/$1', iuridictum: 'iuridictum.pecina.cz/w/$1', jaglyphwiki: 'glyphwiki.org/wiki/$1', jefo: 'esperanto-jeunes.org/wiki/$1', jerseydatabase: 'jerseydatabase.com/wiki.php?id=$1', jira: 'jira.toolserver.org/browse/$1', jspwiki: w + 'ecyrd.com/JSPWiki/Wiki.jsp?page=$1', jstor: w + 'jstor.org/journals/$1', kamelo: 'kamelopedia.mormo.org/index.php/$1', karlsruhe: 'ka.stadtwiki.net/$1', kinowiki: 'kino.skripov.com/index.php/$1', komicawiki: 'wiki.komica.org/?$1', kontuwiki: 'kontu.wiki/$1', wikitech: 'wikitech' + wm, libreplanet: 'libreplanet.org/wiki/$1', linguistlist: 'linguistlist.org/forms/langs/LLDescription.cfm?code=$1', linuxwiki: w + 'linuxwiki.de/$1', linuxwikide: w + 'linuxwiki.de/$1', liswiki: 'liswiki.org/wiki/$1', literateprograms: 'en.literateprograms.org/$1', livepedia: w + 'livepedia.gr/index.php?title=$1', localwiki: 'localwiki.org/$1', lojban: 'mw.lojban.org/papri/$1', lostpedia: 'lostpedia.wikia.com/wiki/$1', lqwiki: 'wiki.linuxquestions.org/wiki/$1', luxo: 'tools.wmflabs.org/guc/?user=$1', mail: 'lists.wikimedia.org/mailman/listinfo/$1', mailarchive: 'lists.wikimedia.org/pipermail/$1', mariowiki: w + 'mariowiki.com/$1', marveldatabase: w + 'marveldatabase.com/wiki/index.php/$1', meatball: 'meatballwiki.org/wiki/$1', mw: w + 'mediawiki.org/wiki/$1', mediazilla: 'bugzilla.wikimedia.org/$1', memoryalpha: 'memory-alpha.fandom.com/wiki/$1', metawiki: 'meta' + wm, metawikimedia: 'meta' + wm, metawikipedia: 'meta' + wm, mineralienatlas: w + 'mineralienatlas.de/lexikon/index.php/$1', moinmoin: 'moinmo.in/$1', monstropedia: w + 'monstropedia.org/?title=$1', mosapedia: 'mosapedia.de/wiki/index.php/$1', mozcom: 'mozilla.wikia.com/wiki/$1', mozillawiki: 'wiki.mozilla.org/$1', mozillazinekb: 'kb.mozillazine.org/$1', musicbrainz: 'musicbrainz.org/doc/$1', mediawikiwiki: w + 'mediawiki.org/wiki/$1', mwod: w + 'merriam-webster.com/dictionary/$1', mwot: w + 'merriam-webster.com/thesaurus/$1', nkcells: w + 'nkcells.info/index.php?title=$1', nara: 'catalog.archives.gov/id/$1', nosmoke: 'no-smok.net/nsmk/$1', nost: 'nostalgia.' + wp, nostalgia: 'nostalgia.' + wp, oeis: 'oeis.org/$1', oldwikisource: 'wikisource.org/wiki/$1', olpc: 'wiki.laptop.org/go/$1', omegawiki: w + 'omegawiki.org/Expression:$1', onelook: w + 'onelook.com/?ls=b&w=$1', openlibrary: 'openlibrary.org/$1', openstreetmap: 'wiki.openstreetmap.org/wiki/$1', openwetware: 'openwetware.org/wiki/$1', opera7wiki: 'operawiki.info/$1', organicdesign: w + 'organicdesign.co.nz/$1', orthodoxwiki: 'orthodoxwiki.org/$1', osmwiki: 'wiki.openstreetmap.org/wiki/$1', otrs: 'ticket.wikimedia.org/otrs/index.pl?Action=AgentTicketZoom&TicketID=$1', otrswiki: 'otrs-wiki' + wm, ourmedia: w + 'socialtext.net/ourmedia/index.cgi?$1', outreach: 'outreach' + wm, outreachwiki: 'outreach' + wm, owasp: w + 'owasp.org/index.php/$1', panawiki: 'wiki.alairelibre.net/index.php?title=$1', patwiki: 'gauss.ffii.org/$1', personaltelco: 'personaltelco.net/wiki/$1', petscan: 'petscan.wmflabs.org/?psid=$1', phab: 'phabricator.wikimedia.org/$1', phabricator: 'phabricator.wikimedia.org/$1', phwiki: w + 'pocketheaven.com/ph/wiki/index.php?title=$1', phpwiki: 'phpwiki.sourceforge.net/phpwiki/index.php?$1', planetmath: 'planetmath.org/node/$1', pmeg: w + 'bertilow.com/pmeg/$1', pmid: w + 'ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract', pokewiki: 'pokewiki.de/$1', pokéwiki: 'pokewiki.de/$1', policy: 'policy.wikimedia.org/$1', proofwiki: w + 'proofwiki.org/wiki/$1', pyrev: w + 'mediawiki.org/wiki/Special:Code/pywikipedia/$1', pythoninfo: 'wiki.python.org/moin/$1', pythonwiki: w + 'pythonwiki.de/$1', pywiki: 'c2.com/cgi/wiki?$1', psycle: 'psycle.sourceforge.net/wiki/$1', quality: 'quality' + wm, quarry: 'quarry.wmflabs.org/$1', regiowiki: 'regiowiki.at/wiki/$1', rev: w + 'mediawiki.org/wiki/Special:Code/MediaWiki/$1', revo: 'purl.org/NET/voko/revo/art/$1.html', rfc: 'tools.ietf.org/html/rfc$1', rheinneckar: 'rhein-neckar-wiki.de/$1', robowiki: 'robowiki.net/?$1', rodovid: 'en.rodovid.org/wk/$1', reuterswiki: 'glossary.reuters.com/index.php/$1', rowiki: 'wiki.rennkuckuck.de/index.php/$1', rt: 'rt.wikimedia.org/Ticket/Display.html?id=$1', // rtfm: 'ftp://rtfm.mit.edu/pub/faqs/$1', s23wiki: 's23.org/wiki/$1', scholar: 'scholar.google.com/scholar?q=$1', schoolswp: 'schools-' + wp, scores: 'imslp.org/wiki/$1', scoutwiki: 'en.scoutwiki.org/$1', scramble: w + 'scramble.nl/wiki/index.php?title=$1', seapig: w + 'seapig.org/$1', seattlewiki: 'seattle.wikia.com/wiki/$1', slwiki: 'wiki.secondlife.com/wiki/$1', 'semantic-mw': w + 'semantic-mediawiki.org/wiki/$1', senseislibrary: 'senseis.xmp.net/?$1', sharemap: 'sharemap.org/$1', silcode: w + 'sil.org/iso639-3/documentation.asp?id=$1', slashdot: 'slashdot.org/article.pl?sid=$1', sourceforge: 'sourceforge.net/$1', spcom: 'spcom' + wm, species: 'species' + wm, squeak: