MediaWiki:Common.js — различия между версиями
EvilCat (обсуждение | вклад) (правка разметки) |
EvilCat (обсуждение | вклад) (правка разметки) |
||
Строка 139: | Строка 139: | ||
var Button = getInnerTags(Tables[i], 'collapseButton'); | var Button = getInnerTags(Tables[i], 'collapseButton'); | ||
− | if (!Button) | + | if ( (!Button) || (Button.length==0) ) |
{ | { | ||
Button=document.createElement( 'span' ); | Button=document.createElement( 'span' ); |
Версия 00:58, 22 июля 2013
/* Размещённый здесь код JavaScript будет загружен всем пользователям при обращении к какой-либо странице */ //кнопка викификатора if (wgAction == 'edit' || wgAction == 'submit') { importScriptURI('//ru.wikipedia.org/w/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript') mwCustomEditButtons['wikif'] = [function(){Wikify()}, '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png', 'Викификатор — автоматический обработчик текста'] if ( typeof $j != 'undefined' && typeof $j.fn.wikiEditor != 'undefined' ) { $j( function() {$j( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {'section': 'main','group': 'format','tools': { 'wikif': { label: 'Викификатор', type: 'button', icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png', action: { type: 'callback', execute: function(){Wikify()} }}}});}); } } var auto_comment = 0; if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0) { if (wgCanonicalNamespace != "Special") { document.write('<script type="text/javascript" src="/w/index.php' + '?title=MediaWiki:Onlyifediting.js&action=raw' + '&ctype=text/javascript&dontcountme=s"></script>'); } } //Кнопки быстрого описания правки //список кнопок function SummaryButtons(){ var wpSummary = document.getElementById('wpSummary') if (!wpSummary || (wpSummary.form.wpSection && wpSummary.form.wpSection.value == 'new')) return wpSummaryBtn = document.createElement('span') //global var wpSummaryBtn.id = 'userSummaryButtonsA' // +Рекомендация var wpSummaryBtnRec = document.createElement('i'); wpSummaryBtnRec.appendChild(document.createTextNode('Пожалуйста, если вы не торопитесь, опишите вашу правку подробно: например, не «дополнение», а «+персонажи».')); wpSummaryBtnRec.appendChild(document.createElement('br')); wpSummaryBtn.appendChild(wpSummaryBtnRec); wpSummary.parentNode.insertBefore(wpSummaryBtn, wpSummary.nextSibling); wpSummary.parentNode.insertBefore(document.createElement('br'), wpSummary.nextSibling); addSumButton('новости', 'новости', 'Учтены последние новости'); addSumButton('викификация', 'викификация', 'Произведена викификация'); addSumButton('правила', 'правила', 'Добавлены сведения о правилах'); addSumButton('сеттинг', 'сеттинг', 'Добавлены сведения о сеттинге'); addSumButton('оформление', 'оформление', 'Оформление'); addSumButton('стиль', 'стилевые правки', 'Стилевые правки'); addSumButton('грамматика', 'грамматика', 'Поправлена орфография/пунктуация'); addSumButton('категории', 'категоризация', 'Изменены категории'); addSumButton('шаблон', 'шаблон', 'Добавлен / изменён шаблон'); addSumButton('дополнение', 'дополнение', 'Добавлены новые сведения'); addSumButton('иллюстрация', 'иллюстрация', 'Размещена иллюстрация'); addSumButton('обновление', 'обновление сведений', 'Обновлены устаревшие сведения'); addSumButton('разметка', 'правка разметки', 'Изменение разметки'); } //код вставки кнопок быстрого описания function addSumButton(name, text, title) { var btn = document.createElement('a'); btn.appendChild(document.createTextNode(name)); btn.title = title; btn.onclick = function(){insertSummary(text)}; wpSummaryBtn.appendChild(btn); wpSummaryBtn.appendChild(document.createTextNode(' ')); } //код вставки описания function insertSummary(text) { var wpSummary = document.getElementById('wpSummary') if (wpSummary.value.indexOf(text) != -1) return if (wpSummary.value.match(/[^,; \/]$/)) wpSummary.value += ',' if (wpSummary.value.match(/[^ ]$/)) wpSummary.value += ' ' wpSummary.value += text } //вызов функции вставки кнопок быстрого описания правки при загрузке страницы addOnloadHook(SummaryButtons) /** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * http://www.mediawiki.org/wiki/Manual:Collapsible_tables. * Maintainers: [[**MAINTAINERS**]] */ 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; var Action=null; if (hasClass(Button, 'custom')) { if (Button.title==collapseCaption) Action='hide'; else Action='show'; } else if ( Button.firstChild.data == collapseCaption ) Action='hide'; else Action='show'; if ( Action=='hide' ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = 'none'; } Button.firstChild.data = expandCaption; Button.title=expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; Button.title=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 = getInnerTags(Tables[i], 'collapseButton'); if ( (!Button) || (Button.length==0) ) { Button=document.createElement( 'span' ); var ButtonLink = document.createElement( 'a' ); var ButtonText = document.createTextNode( collapseCaption ); Button.className = 'collapseButton'; // Styles are declared in MediaWiki:Common.css 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] ); } else { for (j in Button) { Button[j].style.pointer='hand'; Button[j].onclick="collapseTable("+tableIndex+");"; } } 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 ************************************** * * Description: Uses regular expressions and caching for better performance. * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]] */ var hasClass = (function() { var reCache = {}; return function( element, className ) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); // функция для поиска тэга определённого класса. function getInnerTags($source, $class) { var $list=$source.childNodes, $result=new Array(), $rec=new Array(); var $limit=0, $tag='SPAN'; if (typeof(arguments[2])=='string') $tag=arguments[2].toUpperCase(); if (typeof(arguments[3])=='number') $limit=arguments[3]; for (var $i=0; $i<$list.length; $i++) { if (($list[$i].tagName==$tag)&&(hasClass($list[$i], $class))) $result[$result.length]=$list[$i]; if (($limit>0)&&($result.length>=$limit)) break; $rec=getInnerTags($list[$i], $class, $tag, $limit-$result.length); if ($rec) $result=$result.concat($rec); if (($limit>0)&&($result.length>=$limit)) break; } if ($limit==1) return $result[0]; else return $result; } function addWikifButton() { var toolbar = document.getElementById('toolbar') if (!toolbar) return var i = document.createElement('img') i.src = 'http://upload.wikimedia.org/wikisource/ru/d/d1/Button-wikifikator.png' i.alt = i.title = 'викификатор' i.onclick = Wikify i.style.cursor = 'pointer' toolbar.appendChild(i) } if (wgAction == 'edit' || wgAction == 'submit') { importScriptURI('http://ru.rpg.wikia.com/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript') addOnloadHook(addWikifButton) } //перемещение ссылок "править" влево, к заголовку секции, для борьбы с багом движка addOnloadHook(function() { if (typeof oldEditsectionLinks != 'undefined' && oldEditsectionLinks) return; var spans = document.getElementsByTagName("span"); for (var i=0; i<spans.length; i++) { var span = spans[i]; if (span.className != "editsection") continue; span.style.fontSize = "x-small"; span.style.fontWeight = "normal"; span.style.styleFloat = "none"; // IE-Fix für die folgende Zeile span.style.cssFloat = "none"; span.style.marginLeft = "0px"; span.parentNode.appendChild(document.createTextNode(" ")); span.parentNode.appendChild(span); } }); // Основано на RPG Wikia function RPG_Wikia() { var $wikia=!(document.getElementById('originalRPGverse') || document.getElementById('other_source')); if ($wikia) { var $target=document.getElementById('footer-info-copyright'); if ($target) { var $add=' Данный текст основан на материале <a href=\"http://ru.rpg.wikia.com/wiki/'+wgPageName+'\">RPG Wikia</a>. См. <a href=\"http://wiki.rpgverse.ru/wiki/RPG_Wiki:%D0%97%D0%B5%D1%80%D0%BA%D0%B0%D0%BB%D0%BE\">RPG:Зеркало</a>.'; $target.innerHTML+=$add; } } } if ((wgCanonicalNamespace != 'Special')&&(wgAction=='view')) { addOnloadHook(RPG_Wikia) } // Google Analytics var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-38515594-1']); _gaq.push(['_setDomainName', 'rpgverse.ru']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();