MediaWiki:Common.js
Материал из Викитеки — свободной библиотеки
Замечание: Чтобы после сохранения сделанные изменения вступили в силу, очистите кеш своего браузера: Mozilla / Firefox: Ctrl+Shift+R, IE: Ctrl+F5, Safari: Cmd+Shift+R, Konqueror: F5, Opera: через меню Tools→Preferences.
function includeScript(page, project) { var url = '/w/index.php?title=' + encodeURIComponent(page) + '&action=raw&ctype=text/javascript'; if (project) url = 'http://' + project + url; var s = document.createElement('script'); s.src = url; s.type = 'text/javascript'; document.getElementsByTagName('head')[0].appendChild(s); } /* Для шаблона Полнота текста */ function articleTab(){ var tabMain = document.getElementById('ca-nstab-main'); if (!tabMain) return; if (document.getElementById('Author') && tabMain.firstChild.innerHTML == 'Статья') tabMain.firstChild.innerHTML = 'Автор'; var qEl, img = ''; if (qEl = document.getElementById('textquality')){ switch(qEl.classname) { case '0%': img = '8/8f/00%25.png'; break; case '25%': img = '5/5b/25%25.png'; break; case '50%': img = '3/3a/50%25.png'; break; case '75%': img = 'c/cd/75%25.png'; break; case '100%': img = '6/64/100%25.png'; break; } if (img) tabMain.firstChild.innerHTML += '<img src="http://upload.wikimedia.org/wikipedia/commons/' + img + '" alt="' + qEl.classname + 'width=9px height=9px/>'; } } /* Добавление значка ⇔ в интервики */ function BilingualLink() { var pLang = document.getElementById('p-lang'); if (!pLang) return; var url = wgServer + wgArticlePath; url = url.replace('\$1', wgPageName); var lang, qm, i; var li = pLang.getElementsByTagName('li'); for (i=0; i<li.length; i++) { lang = li[i].className.split('-')[1]; li[i].innerHTML += ' <a href="' + url + '?match=' + lang + '">⇔</a>'; } } /********************** *** InterWiki-Info *** Используется в шаблоне «Интервики инфо» **********************/ function interwikiExtra() { var a, b, p, pvers, c, e, pref, n; // итерация через все <span>-элементы for (var i = 0; a = document.getElementsByTagName('span')[i]; i++) { // если найден span interwiki-info if (a.className == 'interwiki-info') { // итерация через все <li>-элементы var count = 0; for (var j = 0; b = document.getElementsByTagName('li')[j]; j++) { if (b.className == 'interwiki-' + a.id) { b.innerHTML = b.innerHTML + ' ' + a.title; if (a.title == '(vo)') { b.title = 'Texte original'; } } else if(b.className == 'interwiki-' + a.id.substr(0, a.id.length - 1)) { count++; if (a.id.charAt(a.id.length - 1) == count) { b.innerHTML = b.innerHTML + ' ' + a.title; } } } } /* if(a.className == "otherVersion") { p = a.title.indexOf("|"); if(a.title.substr(0,11) == "wikilivres:") { pref = "http://www.wikilivres.info/wiki/"; n = 11; } else { pref = "/wiki/"; n = 0; } pvers = document.getElementById("p-version"); if (pvers == null) { c = document.getElementById("column-one"); c.innerHTML = c.innerHTML + "<div class=\"portlet\" id=\"p-version\">" + "<h5>другие версии</h5>" + "<div class=\"pBody\">" + "<ul>" + "</ul>" + "</div>" + "</div>"; pvers = document.getElementById("p-version"); } e = pvers.getElementsByTagName("ul")[0]; e.innerHTML = e.innerHTML + "<li class=\"\"><a href='" + pref + a.title.substring(n,p) + "'>" + a.title.substr(p+1,a.title.length-1)+ "</a> " +"</li>" } */ } } function editTopLink(){ var h2s = document.getElementsByTagName('H2'); var h2 = h2s[0]; if (!h2) return; if (h2.parentNode.id == 'toctitle') h2 = h2s[1]; if (!h2) return; var span = h2.firstChild; if (!span || span.className != 'editsection') return; var zero = span.cloneNode(true); if (document.getElementById('featured-star')) zero.style.marginRight = '25px' var parent = document.getElementsByTagName('H1')[0]; parent.insertBefore(zero, parent.firstChild); var a = zero.getElementsByTagName('A')[0]; a.title = a.title.replace(/:.*$/,': 0'); a.setAttribute('href', a.href.replace(/§ion=1/,'§ion=0')); } function extSearchMenu(){ var search = document.forms['search']; if (!search) return; //add hidden external search form extSearch = document.createElement('form'); //global var extSearch.target = '_blank'; for (i=0; i<5; i++){ inp = document.createElement('input'); inp.type = 'hidden'; extSearch.appendChild(inp); } search.parentNode.appendChild(extSearch); //create a menu of search sites var sel = document.createElement('select'); var searchURL = []; function addSite (name, url){ searchURL[searchURL.length] = url; var opt = document.createElement('option'); opt.appendChild(document.createTextNode(name)); sel.appendChild(opt); } var wgDomain = wgServer.substring(7); addSite('также',''); addSite('Google по Викитеке', 'http://www.google.com/custom?hl='+wgContentLanguage + '&domains='+wgDomain + '&sitesearch='+wgDomain + '&q='); addSite('Яndex по Викитеке', 'http://www.yandex.ru/yandsearch?ras=1&site_manually=true' + '&site='+wgDomain + '&server_name=Викитека&text='); addSite('Искать в Википедии', 'http://ru.wikipedia.org/wiki/Special:Search?search=') addSite('Искать в Викисловаре', 'http://ru.wiktionary.org/wiki/Special:Search?search=') search['search'].style.marginLeft = '10px'; search[search.length-1].parentNode.appendChild(sel); //what to do when site selected sel.onchange = function(){ if (this.selectedIndex == 0) return; var s = searchURL[this.selectedIndex].split('?'); extSearch.action = s[0]; var opt = s[1].split('&'); for (var i=0; i<opt.length; i++){ extSearch[i].disabled = false; extSearch[i].name = opt[i].split('=')[0]; extSearch[i].value = opt[i].split('=')[1]; if (extSearch[i].value == '') extSearch[i].value = document.forms['search'].search.value; } while (i < extSearch.length) extSearch[i++].disabled = true; extSearch.submit(); this.selectedIndex = 0; } } if (wgNamespaceNumber == 0) { addOnloadHook (articleTab); addOnloadHook (interwikiExtra); addOnloadHook (BilingualLink); } if (wgNamespaceNumber >=0 && wgAction == 'view') addOnloadHook (editTopLink); if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Search') addOnloadHook (extSearchMenu); if ((wgAction == 'edit' || wgAction == 'submit') && wgCanonicalNamespace != 'Special') includeScript('MediaWiki:Editpage.js'); /* Collapsible tables: http://en.wikipedia.org/wiki/Wikipedia:Collapsible_tables */ var autoCollapse = 2; var collapseCaption = "скрыть"; var expandCaption = "показать"; function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = new Object(); var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName( "th" )[0]; if (!Header) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.style.styleFloat = "right"; Button.style.cssFloat = "right"; Button.style.fontWeight = "normal"; Button.style.textAlign = "right"; Button.style.width = "6em"; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } for ( var i = 0; i < tableIndex; i++ ) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { collapseTable( i ); } } } addOnloadHook( createCollapseButtons ); /* Test if an element has a certain class */ var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); //{Modifynewsectionlink} function newSectionLink(){ var plus = document.getElementById('ca-addsection') if (!plus) return var custom = document.getElementById('add-custom-section') if (!custom) return plus.firstChild.setAttribute('href', custom.getElementsByTagName('A')[0].href) } //import module importScript_ = importScript importScript = function (page, proj){ if (!proj) importScript_(page) else { if (proj.indexOf('.')==-1) proj += '.wikisource.org' importScriptURI('http://'+proj+'/w/index.php?action=raw&ctype=text/javascript&title='+encodeURIComponent(page.replace(/ /g,'_'))) } } addLoadEvent = addOnloadHook // Faster Dynamic Navigation // set up the words in your language var NavigationBarHide = '▲'; var NavigationBarShow = '▼'; var NavigationTitleHide = 'hide contents'; var NavigationTitleShow = 'show contents'; // shows and hides content and picture (if available) of navigation bars function toggleNavigationBar(e) { e = e || window.event; var target = e.target || e.srcElement; var NavFrame, NavToggle; if (hasClass(target, 'navigation')) { NavFrame = target.parentNode.parentNode; NavToggle = target; } else if (hasClass(target, 'NavHead')) { NavFrame = target.parentNode; if (hasClass(target.lastChild, 'navigation')) NavToggle = target.lastChild; else return; } if (NavToggle.firstChild.data == NavigationBarHide) { for (var NavChild=NavFrame.firstChild; NavChild != null; NavChild=NavChild.nextSibling) { if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) NavChild.style.display = 'none'; } NavToggle.firstChild.data = NavigationBarShow; NavToggle.parentNode.setAttribute('title', NavigationTitleShow); } else if (NavToggle.firstChild.data == NavigationBarShow) { for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) NavChild.style.display = 'block'; } NavToggle.firstChild.data = NavigationBarHide; NavToggle.parentNode.setAttribute('title', NavigationTitleHide); } } // adds show/hide-button to navigation bars function createNavigationBarToggleButton() { // iterate over all div elements var NavFrame=document.getElementsByTagName("div"); for (var i=0; i < NavFrame.length; i++) { if (!hasClass(NavFrame[i], "NavFrame")) continue; var NavToggle = document.createElement("a"); var NavToggleText = document.createTextNode(hasClass(NavFrame[i], "selected") ? NavigationBarShow : NavigationBarHide); NavToggle.className = 'navigation'; NavToggle.appendChild(NavToggleText); // add NavToggle-Button as element inside of NavHead for (var j=0; j < NavFrame[i].childNodes.length; j++) { var NavHead = NavFrame[i].childNodes[j]; if (!hasClass(NavHead, "NavHead")) continue; NavHead.appendChild(NavToggle); NavHead.onclick = toggleNavigationBar; // only bother to emulate click if if toggle button was added if (document.createEvent) { // DOM 2 and DOM 3 compliant browsers var e = document.createEvent("MouseEvents"); e.initMouseEvent("click", true,true, window, 0,0,0,0,0, false,false,false,false, 0, null); NavHead.dispatchEvent(e); } else if (NavHead.fireEvent) { // IE NavHead.fireEvent("onclick"); } break; } } } addOnloadHook( createNavigationBarToggleButton ); //Дополнительные кнопки /*function add_toolbox_link(action, name, id) { var tools = document.getElementById('column-one'); if (tools) tools = tools.getElementsByTagName('div')[0].getElementsByTagName('ul')[0]; if (!tools) return; var na = document.createElement('a').appendChild(document.createTextNode(name)).parentNode; if (typeof action == "string") na.setAttribute('href', action); else if (typeof action == "function") na.onclick = action; else return; var li = document.createElement('li').appendChild(na).parentNode; if (typeof id == "string") li.id = id; tools.appendChild(li); } function add_all_user_tools() { if (wgNamespaceNumber != 2 && wgNamespaceNumber != 3) return; var username = encodeURIComponent(wgTitle.split("/")[0]); var project = wgServer.replace("http://", ""); var baseurl = 'http://tools.wikimedia.de/~daniel/WikiSense/'; var delimg = 'Images_with_unknown_copyright_status'; add_toolbox_link(baseurl + 'UntaggedImages.php?wiki=' + project + '&img_user_text=' + username , 'untagged', 'ca-untagged'); add_toolbox_link(baseurl + 'MediaSearch.php?wiki=' + project + '&category=' + delimg + '&depth=10&max=100&uploader=' + username, 'unlicensed', 'ca-unlicensed'); } if(typeof gadget_removeimagetools == 'undefined') gadget_removeimagetools = 0; if(gadget_removeimagetools != 1) addOnloadHook(add_all_user_tools);*/ //Mainpage: tab «статья» -> «заглавная» function mainPageTab(){ if (wgArticleId == 1290){ var nstab = document.getElementById('ca-nstab-main') if (!nstab || wgUserLanguage != 'ru') return //other skins/lang var a = nstab.firstChild if (a.textContent) a.textContent = 'Заглавная' else a.innerText = 'Заглавная' } } // Подцепка addOnloadHook(mainPageTab) //Для {{TextQuality}} function textQuality() { if(wgAction!='view' && wgAction!='submit' && wgAction!='purge') return; if(wgCanonicalNamespace != "") return; if( document.getElementById("Author") ) { a.firstChild.innerHTML = "Автор"; return;} if(wgPageName.substring(0,8) == "Портал:") return; var a = document.getElementById("ca-nstab-main"); if(!a) return; var q = document.getElementById("textquality"); if( q ) { var t = q.className; var new_img = document.createElement("img"); if(t == 'Проверенные тексты') new_img.setAttribute("src", "http://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Compar%C3%A9.png/10px-Compar%C3%A9.png"); else new_img.setAttribute("src", "/wiki/Special:Filepath/"+t.substring(0,t.length-1)+'%25.png'); new_img.setAttribute("title", "уровень полноты статьи: "+t.substring(0,t.length-1)+'%'); a.firstChild.appendChild(new_img); } var q = document.getElementById("pr_index"); if( q ) { href = q.firstChild; if(!href) return; q.removeChild(href); href.innerHTML = "<img src='http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Open_book_nae_02.svg/20px-Open_book_nae_02.svg.png' />"; href.setAttribute("title", "Смотреть список текстов и принимать участие в их исправлении"); var new_li = document.createElement("li"); new_li.appendChild(href); a.parentNode.insertBefore(new_li,a.nextSibling); } else { if( ! document.getElementById("pr_page")) { var c = document.getElementById("contentSub"); c.innerHTML = c.innerHTML + "<span></span>"; } } } addOnloadHook(textQuality) // from http://de.wiktionary.org/wiki/MediaWiki:Common.js by [[wikt:de:User:Melancholie]] Interprojekt-Links ([[mediazilla:708|Bug 708]]) function $(ID) {return document.getElementById(ID);} document.write('<style type="text/css">#interProject, #sisterProjects {display: none; speak: none;} #p-tb .pBody {padding-right: 0;}<\/style>'); function iProject() { if ($("interProject")) { var iProject = $("interProject").innerHTML; var interProject = document.createElement("div"); interProject.style.marginTop = "0.7em"; interProject.innerHTML = '<h5><a href="http://meta.wikimedia.org/wiki/Meta:SisterProjects">Братские проекты<\/a><\/h5><div class="pBody">'+iProject+'<\/div>'; $("p-tb").appendChild(interProject); } } addOnloadHook(iProject); // То же, для альтернативных версий текста function AltVersions() { if ($("otherVersions")) { var tvers = $("otherVersions").innerHTML; var otherVersions = document.createElement("div"); otherVersions.className = "portlet"; otherVersions.style.marginTop = "0.7em"; otherVersions.innerHTML = '<h5 style="color:#00f">другие версии<\/h5><div class="pBody">'+tvers+'<\/div>'; $("p-tb").appendChild(otherVersions); } } addOnloadHook(AltVersions); /********************** *** Automatically generate page footer from values in {{header}} *** by [[user:GrafZahl]] **********************/ function DisplayFooter() { var hs, tr, td, fp, fc, fo, fy, fa, a, text, fn, mc, mo, my, ma; if(document.getElementById && (wgNamespaceNumber==0 || wgNamespaceNumber==4)) { var nofooter = document.getElementById('nofooter'); var hp = document.getElementById('headerprevious'); var hn = document.getElementById('headernext'); var hc = document.getElementById('header_contents'); var ha = document.getElementById('header_author_text'); var ho = document.getElementById('header_coll_text'); var hy = document.getElementById('header_cycle_text'); var prs = document.getElementById('old_spelling'); var cnt = document.getElementById('bodyContent'); var ctl = document.getElementById('catlinks'); var ftr = document.createElement('table'); if (hc) { mc = hc.getElementsByTagName('a'); if (mc.length > 0) { fc = mc[0].cloneNode(true); fc.id='footer_contents'; } } if (ha) { ma = ha.getElementsByTagName('a'); if (ma.length > 0) { fa = ma[0].cloneNode(true); fa.id='footer_author_text'; } } if (ho) { mo = ho.getElementsByTagName('a'); if (mo.length > 0) { fo = mo[0].cloneNode(true); fo.id='footer_coll_text'; } } if (hy) { my = hy.getElementsByTagName('a'); if (my.length > 0) { fy = my[0].cloneNode(true); fy.id='footer_cycle_text'; } } var mm = document.getElementById('contentSub').firstChild; if (mm && mm.hasChildNodes()) { if (mm.id == 'mw-revisiontag') hs = null; else hs = mm.innerHTML.replace(/<\s+/,'').replace(/\s+\|\s+/g,': '); } else hs = null; if( (!((cnt) && (ftr))) || (!(hp || hn)) || (nofooter)) return; ftr.className='headertemplate'; ftr.style.marginTop='1em'; ftr.style.clear='all'; /* Begin footer HTML code */ tr = document.createElement('tr'); if (prs) tr.className = 'oldspell'; td = document.createElement('td'); td.align='left'; td.style.width='25%'; td.className='header_backlink'; if (hp) { fp = hp.cloneNode(true); td.appendChild(fp); } tr.appendChild(td); td = document.createElement('td'); td.align='center'; td.style.width='50%'; td.className='header_title'; if (hs) { td.innerHTML = hs; } else if (fc) { td.appendChild(fc); } else if (fo) { td.appendChild(fo); } else if (fy) { td.appendChild(fy); } else if (fa) { td.appendChild(fa); } else { a = document.createElement('a'); a.href='#top'; text = document.createTextNode('Наверх'); a.appendChild(text); td.appendChild(a); } tr.appendChild(td); td = document.createElement('td'); td.align='right'; td.style.width='25%'; td.className='header_forelink'; if (hn) { fn = hn.cloneNode(true); td.appendChild(fn); } tr.appendChild(td); ftr.appendChild(tr); /* End footer HTML code */ if(ctl) // place footer before category box cnt.insertBefore(ftr, ctl); else cnt.appendChild(ftr); try { bodyContent.outerHTML = cnt.outerHTML; } catch(e) { } } } addOnloadHook(DisplayFooter); /* Подключение функций участникам с дополнительными правами */ if (wgUserGroups) for (var i=0; i<wgUserGroups.length; i++) switch (wgUserGroups[i]){ case 'editor': importStylesheet('MediaWiki:Gadget-FlaggedRevs.css'); break case 'sysop': importScript('MediaWiki:Sysop.js'); break } /* Картинки-значки для защищённых страниц*/ if ( wgRestrictionEdit == "autoconfirmed" && wgAction == "view" ) { appendCSS('h1.firstHeading {background: url(http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Crystal_Clear_action_lock3.png/23px-Crystal_Clear_action_lock3.png) center right no-repeat; margin: 0 1em 0 0;}'); } else if ( wgRestrictionEdit == "sysop" && wgAction == "view" ) { appendCSS('h1.firstHeading {background: url(http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Crystal_Clear_action_lock.png/23px-Crystal_Clear_action_lock.png) center right no-repeat; margin: 0 1em 0 0;}'); }