User:Wittylama/monobook.js
// Script from User:Lupin/recent2.js
mw.loader.load(
'https://en.wikipedia.org/w/index.php?title=User:Lupin/recent2.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s');
importScript('User:AzaToth/twinkle.js');
importScript('User:Lupin/popups.js');
popupDelay=2
popupHideDelay=0.2
if (mw.config.get('wgNamespaceNumber') >= 0)
addOnloadHook(function(){
var pCactions = document.getElementById('p-cactions');
if (!pCactions) return;
var caMain = pCactions.getElementsByTagName('li')[0];
var caTalk = document.getElementById('ca-talk');
var caEdit = document.getElementById('ca-edit');
if (!caEdit) caEdit = document.getElementById('ca-viewsource');
var caHistory = document.getElementById('ca-history');
if (!caMain || !caTalk || !caEdit || !caHistory) return;
var el_move, el_create, id2;
if (mw.config.get('wgNamespaceNumber') % 2) { //talk space
el_move = caTalk; el_create = caMain; id2 = '';
} else {
el_move = caMain; el_create = caTalk; id2 = 'discussion';
}
caEdit.firstChild.innerHTML = 'edit';
caHistory.firstChild.innerHTML = 'hist';
el_move.parentNode.insertBefore(caHistory, el_move.nextSibling);
el_move.parentNode.insertBefore(caEdit, el_move.nextSibling);
var href = el_create.firstChild.getAttribute('href', 2);
if (el_create.className.indexOf('new') < 0){
mw.util.addPortletLink('p-cactions', href + '?action=history', 'hist',
'ca-history-'+id2, id2+' history', '', el_create.nextSibling);
mw.util.addPortletLink('p-cactions', href + '?action=edit', 'edit',
'ca-edit-'+id2, 'Edit '+id2, '', el_create.nextSibling);
}
caMain.style.marginRight = '0.3em';
caTalk.style.marginRight = '0.3em';
caTalk.style.marginLeft = '1.6em';
})
//
var iwiki = new function (){
// View interwiki
var pLang, ul, lis, count, ww, displayMode = window.iwDisplayMode || 0
this.onLoad = function(){
pLang = document.getElementById('p-lang')
if (!pLang) return
var h5 = pLang.getElementsByTagName('h5')[0]
addHandler(h5, 'click', iwiki.display)
h5.style.cursor = 'pointer'
h5.title = 'Change how interwiki displayed'
if (displayMode) iwiki.display()
if (mw.config.get('wgAction')=='edit' || mw.config.get('wgAction')=='submit')
iwiki.loadSync()
}
this.display = function(){
displayMode++
if (displayMode > 3) displayMode = 1
var aa, page
if (!ww) getDisplayedList()
switch (displayMode){
case 1: //no change
ww.sort(function(a,b){return a.i > b.i ? 1 : -1})
for(i=0; i < count; i++){
aa = ww[i].li.firstChild
aa.title = ''
aa.innerHTML = ww[i].local
}
break
case 2: //English names
ww.sort(function(a,b){return a.name > b.name ? 1 : -1})
for(i=0; i < count; i++){
aa = ww[i].li.firstChild
aa.title = ww[i].local
aa.innerHTML = ww[i].name
}
break
case 3: //actual interwiki links
ww.sort(function(a,b){return a.lang > b.lang ? 1 : -1})
for(i=0; i < count; i++){
aa = ww[i].li.firstChild
page = aa.href.match(/org\/wiki\/(.*)$/)[1]
page = decodeURIComponent(page)
aa.title = ww[i].name + ': ' + page
aa.innerHTML = ww[i].lang + ':' + page
}
break
}
for(i=1; i < count; i++)
ul.appendChild(ww[i].li)
}
function getDisplayedList(){
ul = pLang.getElementsByTagName('ul')[0]
lis = ul.getElementsByTagName('li')
count = lis.length
ww = new Array(count)
var aa, lang
for (var i=0; i < count; i++){
aa = lis[i].firstChild
lang = aa.href.substring(7, aa.href.indexOf('.'))
ww[i] = {
lang: lang,
local: aa.innerHTML,
name: iwNames[lang] || '- ' + aa.innerHTML,
li: lis[i],
i: i
}
}
}
// Sync interwiki
var wpTextbox1, iw, iwdiv, iwtable, queriedLink, siteLang, wasRedirect
this.loadSync = function(){
mw.util.addPortletLink('p-lang', 'javascript:iwiki.sync()', '(sync)')
}
this.sync = function(){
iw = []
queriedLink = ''
wasRedirect = false
siteLang = mw.config.get('wgServer').substring(7, mw.config.get('wgServer').indexOf('.'))
wpTextbox1 = document.getElementById('wpTextbox1')
var i, m, ma, re, txt = wpTextbox1.value
//find local interwikis
for (i in iwNames){
re = new RegExp('\\[\\['+i+':'+'[^\\]]+\\]\\]', 'gi');
if (ma = txt.match(re)){
if (ma.length==0) continue
for (var m=0; m < ma.length; m++)
addIW(ma[m].substring(2,ma[m].length-2), false) //drop brackets
}
}
//add self
addIW(siteLang + ':' + mw.config.get('wgPageName').replace(/_/g, ' '))
//show
showDiv()
}
function showDiv(){
if (iwdiv) iwdiv.style.display = 'block'
else createDiv()
//scroll to it
var yy = iwdiv.offsetTop, obj = iwdiv
while (obj = obj.offsetParent) yy += obj.offsetTop
scrollTo(0, yy)
drawTable()
}
function createDiv(){
var div = document.createElement('div')
div.innerHTML = '
style="background-color:#EEEEEE">\
style="background-color:#EEEEEE">\
style="background-color:#E5EFE5">\
style="background-color:#F5E5E5">\
wpTextbox1.parentNode.insertBefore(div, wpTextbox1.nextSibling)
iwdiv = div.firstChild
//document.getElementById('iwNext').onclick = iwiki.queryNext
//document.getElementById('iwApply').onclick = iwiki.apply
//document.getElementById('iwCancel').onclick = iwiki.cancel
}
function drawTable(){
iw.sort(function(a,b){ return (a.lnk>b.lnk)?1:-1})
var tb = document.createElement('tbody')
//draw
var tr, td, nocell, needAddAllButton = false, lang, prev = ''
for (var i=0; i tr = document.createElement('tr') lang = getLang(iw[i].lnk) isself = (siteLang == lang) //«x» link to delete cell if (iw[i].local && !isself) putCell('x',' ') else putCell('', ' ') td.style.paddingRight = '5px' //local cell if (iw[i].local) { if (isself) { putCell (iw[i].lnk) td.style.color = 'gray' td.style.fontSize = 'smaller' }else{ putCell(getFullLink(iw[i].lnk)) if (iw[i].isnew) td.style.backgroundColor = '#DFFFEF' if (queriedLink == iw[i].lnk) { //was just queried td.style.backgroundColor = '#EFEFEF' td.style.fontWeight = 'bold' } } if (lang == prev) td.style.border = '2px solid red' prev = lang }else //local missing putCell('', '#FFEADF') //status cell if (isself){ putCell('', ' ') }else if (!iw[i].local && iw[i].remote) { putCell('←', ' ') needAddAllButton = true }else{ htm = '
htm += (iw[i].queried) ? '>v' : '>?' putCell(htm+' } td.style.textAlign = 'center' td.style.width = '50px' //remote cell if (iw[i].remote){ if (iw[i].local) putCell('', '#F5F5F5'); else putCell (getFullLink(iw[i].lnk)) }else if (!queriedLink || queriedLink == iw[i].lnk){ //remote not needed if (wasRedirect) putCell('(redirect)', ' ') else putCell('', ' ') }else{ //remote is absent putCell('', '#FFEADF') } //add row tb.appendChild(tr) }//for if (iwtable) iwtable.replaceChild(tb, iwtable.firstChild) else{ iwtable = document.createElement('table') iwtable.id = 'iwtable' iwtable.appendChild(tb) iwdiv.appendChild(iwtable) } document.getElementById('appendAll').style.visibility = needAddAllButton ? 'visible' : 'hidden' //iwdiv.focus() function putCell(htm, style){ td = document.createElement('td') td.style.padding = '0 10px 0 10px ' td.innerHTML = htm if (!style) td.style.border = '1px dotted gray' else if (style != ' ') td.style.backgroundColor = style tr.appendChild(td) return } } function addIW(iwlink, isRemote){ if (!isRemote){ //local var iwnew = {} iwnew.lnk = iwlink iwnew.local = true //iwnew.remote = false //iwnew.queried = false iw[iw.length] = iwnew }else{ //remote //if (siteLang == getLang(iwlink)) return var isFound = false for (var i=0; i if (iw[i].lnk == iwlink) { isFound = true; break } if (isFound){ iw[i].remote = true }else{ var iwnew = {} iwnew.lnk = iwlink iwnew.local = false iwnew.remote = true iw[iw.length] = iwnew } } } function getLang(iwlink){ //en:Page -> en return iwlink.substring(0, iwlink.indexOf(':')) } function getPage(iwlink){ // //en:Page -> Page return iwlink.substring(iwlink.indexOf(':')+1) } function getFullLink(iwlink){ ////en:Page ->
return '' + iwlink + '' } this.append = function(i){ iw[i].local = true iw[i].isnew = true drawTable() } this.appendAll = function(){ for (var i=0; i if (!iw[i].local && iw[i].remote){ iw[i].local = true iw[i].isnew = true } drawTable() } this.remove = function(i){ iw[i].local = false //iw.splice(i,1) drawTable() } this.apply = function(){ var i, re, txt = wpTextbox1.value //remove old for (i in iwNames){ re = new RegExp('\\[\\['+i+':'+'[^\\]]+\\]\\]\n?', 'gi') txt = txt.replace(re, '\x01') } //create new var iwtxt = '' for (i=0; i if (iw[i].local && getLang(iw[i].lnk) != siteLang) iwtxt += '[' + '[' + iw[i].lnk + ']]\n' //append new txt = txt.replace('\x01', iwtxt).replace(/\x01/g,'') wpTextbox1.value = txt iwdiv.style.display = 'none' } this.cancel = function(){ iwdiv.style.display = 'none' } this.queryNext = function(){ for (var i=0; i if (iw[i].local && !iw[i].queried && getLang(iw[i].lnk) != siteLang) { iwiki.query(i) break } } this.query = function(idx){ document.getElementById('iwNext').style.textDecoration = 'blink' queriedLink = iw[idx].lnk //remember queryGo('langlinks&titles='+encodeURIComponent(getPage(queriedLink)) + '&proxylang='+getLang(queriedLink), iwiki.process ) } this.process = function(q){ document.getElementById('iwNext').style.textDecoration = 'none' //mark queried link for (var i=0; i if (queriedLink == iw[i].lnk){ iw[i].queried = true; break } //clear last results for (var i=0; i iw[i].remote = false if (!iw[i].local) { iw.splice(i,1); i-- } //remove item } //add new iwikis links = anyChild(q.pages).langlinks if (links){ for (var n=0; n iwlink = links[n].lang + ':' + links[n]['*'] addIW(iwlink, true) } wasRedirect = false }else if (typeof anyChild(q.pages).redirect == 'string') wasRedirect = true drawTable() } function queryGo(params, func){ var aj = sajax_init_object() aj.onreadystatechange = function() { if (aj.readyState != 4) return //if (aj.status == 200) { eval('q='+aj.responseText) func(q) //} else jsMsg('Empty query result') //else func(null) } var url='/w/query.php?format=json&noprofile&what=' + params aj.open("GET",url,true) //aj.setRequestHeader('Accept','text/*') aj.send(null) } //interwiki codes and names, extracted from http://meta.wikimedia.org/wiki/List_of_Wikipedias var iwNames = { 'en':'English', 'de':'German', 'fr':'French', 'pl':'Polish', 'ja':'Japanese', 'nl':'Dutch', 'it':'Italian', 'pt':'Portuguese', 'es':'Spanish', 'sv':'Swedish', 'ru':'Russian', 'zh':'Chinese', 'fi':'Finnish', 'no':'Norwegian (Bokmål)', 'vo':'Volapük', 'ro':'Romanian', 'tr':'Turkish', 'eo':'Esperanto', 'ca':'Catalan', 'sk':'Slovak', 'cs':'Czech', 'uk':'Ukrainian', 'hu':'Hungarian', 'da':'Danish', 'id':'Indonesian', 'he':'Hebrew', 'lt':'Lithuanian', 'sr':'Serbian', 'sl':'Slovenian', 'lmo':'Lombard', 'bg':'Bulgarian', 'ko':'Korean', 'ar':'Arabic', 'et':'Estonian', 'te':'Telugu', 'hr':'Croatian', 'new':'Newar / Nepal Bhasa', 'ceb':'Cebuano', 'gl':'Galician', 'th':'Thai', 'el':'Greek', 'nn':'Norwegian (Nynorsk)', 'fa':'Persian', 'vi':'Vietnamese', 'ms':'Malay', 'bpy':'Bishnupriya Manipuri', 'eu':'Basque', 'bs':'Bosnian', 'simple':'Simple English', 'lb':'Luxembourgish', 'is':'Icelandic', 'sq':'Albanian', 'ka':'Georgian', 'az':'Azeri', 'br':'Breton', 'bn':'Bengali', 'la':'Latin', 'io':'Ido', 'hi':'Hindi', 'sh':'Serbo-Croatian', 'mr':'Marathi', 'su':'Sundanese', 'mk':'Macedonian', 'nap':'Neapolitan', 'cy':'Welsh', 'ta':'Tamil', 'lv':'Latvian', 'scn':'Sicilian', 'nds':'Low Saxon', 'oc':'Occitan', 'pms':'Piedmontese', 'jv':'Javanese', 'tl':'Tagalog', 'ku':'Kurdish', 'ast':'Asturian', 'wa':'Walloon', 'af':'Afrikaans', 'tg':'Tajik', 'be-x-old':'Belarusian (Tarashkevitsa)', 'roa-tara':'Tarantino', 'an':'Aragonese', 'be':'Belarusian', 'ru-sib':'Siberian/North Russian', 'ksh':'Ripuarian', 'ht':'Haitian', 'cv':'Chuvash', 'ur':'Urdu', 'mi':'Maori', 'sw':'Swahili', 'vec':'Venetian', 'uz':'Uzbek', 'fy':'West Frisian', 'zh-yue':'Cantonese', 'ga':'Irish', 'co':'Corsican', 'qu':'Quechua', 'kn':'Kannada', 'gd':'Scottish Gaelic', 'ml':'Malayalam', 'yi':'Yiddish', 'yo':'Yoruba', 'nah':'Nahuatl', 'bat-smg':'Samogitian', 'pam':'Kapampangan', 'tt':'Tatar', 'ia':'Interlingua', 'sa':'Sanskrit', 'hsb':'Upper Sorbian', 'hy':'Armenian', 'li':'Limburgian', 'als':'Alemannic', 'map-bms':'Banyumasan', 'am':'Amharic', 'pag':'Pangasinan', 'zh-min-nan':'Min Nan', 'nrm':'Norman', 'fo':'Faroese', 'se':'Northern Sami', 'nds-nl':'Dutch Low Saxon', 'fur':'Friulian', 'bh':'Bihari', 'nov':'Novial', 'war':'Waray-Waray', 'pi':'Pali', 'vls':'West Flemish', 'ilo':'Ilokano', 'sco':'Scots', 'frp':'Franco-Provençal/Arpitan', 'lij':'Ligurian', 'ne':'Nepali', 'dv':'Divehi', 'os':'Ossetian', 'zh-classical':'Classical Chinese', 'diq':'Zazaki', 'mt':'Maltese', 'kk':'Kazakh', 'csb':'Kashubian', 'pdc':'Pennsylvania German', 'lad':'Ladino', 'fiu-vro':'Võro', 'kw':'Cornish', 'to':'Tongan', 'bar':'Bavarian', 'ps':'Pashto', 'rm':'Romansh', 'tk':'Turkmen', 'ang':'Anglo-Saxon', 'ln':'Lingala', 'mn':'Mongolian', 'jbo':'Lojban', 'tpi':'Tok Pisin', 'or':'Oriya', 'wo':'Wolof', 'ty':'Tahitian', 'eml':'Emilian-Romagnol', 'ky':'Kirghiz', 'arc':'Assyrian Neo-Aramaic', 'ig':'Igbo', 'roa-rup':'Aromanian', 'mo':'Moldovan', 'gu':'Gujarati', 'km':'Khmer', 'ie':'Interlingue', 'kab':'Kabyle', 'ks':'Kashmiri', 'wuu':'Wu', 'glk':'Gilaki', 'zea':'Zealandic', 'mg':'Malagasy', 'tet':'Tetum', 'cu':'Old Church Slavonic', 'sc':'Sardinian', 'so':'Somali', 'gv':'Manx', 'kg':'Kongo', 'udm':'Udmurt', 'si':'Sinhalese', 'iu':'Inuktitut', 'pa':'Punjabi', 'rmy':'Romani', 'cbk-zam':'Zamboanga Chavacano', 'na':'Nauruan', 'haw':'Hawaiian', 'lo':'Lao', 'bo':'Tibetan', 'sd':'Sindhi', 'chr':'Cherokee', 'ba':'Bashkir', 'got':'Gothic', 'om':'Oromo', 'ee':'Ewe', 'ti':'Tigrinya', 'as':'Assamese', 'sm':'Samoan', 'ay':'Aymara', 'ug':'Uyghur', 'hak':'Hakka', 'av':'Avar', 'cdo':'Min Dong', 'mzn':'Mazandarani', 'ce':'Chechen', 'bm':'Bambara', 'nv':'Navajo', 'pap':'Papiamentu', 'cr':'Cree', 'zu':'Zulu', 'rw':'Kinyarwanda', 'my':'Burmese', 'tlh':'Klingon', 'xh':'Xhosa', 've':'Venda', 'ik':'Inupiak', 'dz':'Dzongkha', 'pih':'Norfolk', 'gn':'Guarani', 'ss':'Swati', 'ab':'Abkhazian', 'kl':'Greenlandic', 'kv':'Komi', 'bug':'Buginese', 'ak':'Akan', 'bi':'Bislama', 'st':'Sesotho', 'bxr':'Buryat (Russia)', 'tn':'Tswana', 'xal':'Kalmyk', 'tw':'Twi', 'ny':'Chichewa', 'fj':'Fijian', 'ff':'Fula', 'ha':'Hausa', 'tum':'Tumbuka', 'sn':'Shona', 'za':'Zhuang', 'ki':'Kikuyu', 'sg':'Sango', 'ii':'Sichuan Yi', 'lg':'Luganda', 'cho':'Choctaw', 'lbe':'Lak', 'rn':'Kirundi', 'chy':'Cheyenne', 'ts':'Tsonga', 'mh':'Marshallese', 'ch':'Chamorro', 'ng':'Ndonga', 'aa':'Afar', 'kj':'Kuanyama', 'ho':'Hiri Motu', 'mus':'Muscogee', 'kr':'Kanuri', 'hz':'Herero', 'tokipona':'Tokipona' } } //obj function anyChild(obj) { for(var key in obj) return obj[key]; return null } addOnloadHook(iwiki.onLoad)