MediaWiki:Common.js: различия между версиями
Перейти к навигации
Перейти к поиску
(удаляю код, который всё равно перекрывается ниже лежащим кодом function addLoadEvent( f ) { addOnloadHook( f ); }) |
(ну и зачем было определять функции, которые нигде не используются? ;-) их надобно выполнить хотя бы при загрузке страницы, и выполню) |
||
Строка 258: | Строка 258: | ||
Rows[i].style.display = disp | Rows[i].style.display = disp | ||
} | } | ||
+ | |||
+ | addOnloadHook(collapsibleTables); | ||
var NavigationBarHide = '[' + collapseCaption + ']' | var NavigationBarHide = '[' + collapseCaption + ']' | ||
Строка 296: | Строка 298: | ||
child.style.display = disp | child.style.display = disp | ||
} | } | ||
+ | |||
+ | addOnloadHook(collapsibleDivs); | ||
//Автопричины при удалении | //Автопричины при удалении |
Версия от 13:22, 18 января 2008
/* <source lang="javascript">
Размещённый здесь код JavaScript будет загружен всем пользователям при обращении к какой-либо странице
*/
// подгрузка файла со скриптами для редактирования *****************************************
if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0)
{
if (wgCanonicalNamespace != "Special")
{
document.write('<script type="text/javascript" src="/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
}
/**********************************************************************************/
function addLoadEvent( f ) { addOnloadHook( f ); }
/*************************************************************************************************/
/*Alex Mashin, May 19, 2007. Script for expandable tables moved here from extension and HTML body.
*/
function toggleExpandable(id) {
var heading = document.getElementById('expandable-heading-'+id);
var content = document.getElementById('expandable-content-'+id);
if (content.style.display == 'none') content.style.display = '';
else content.style.display = 'none';
this.parent.focus();
}
/*************************************************************************************************/
/** Import module *************************************************************
*
* Description: Includes a raw wiki page as javascript or CSS,
* used for including user made modules.
* Maintainers: [[en:User:AzaToth]], фиксанул в ВикиТрадиции администратор Afinogenoff.
*/
function importScript( page ) {
var url = wgScriptPath + '/index.php?title='
+ escape( page.replace( ' ', '_' ) )
+ '&action=raw&ctype=text/javascript&dontcountme=s';
var scriptElem = document.createElement( 'script' );
scriptElem.setAttribute( 'src' , url );
scriptElem.setAttribute( 'type' , 'text/javascript' );
document.getElementsByTagName( 'head' )[0].appendChild( scriptElem );
}
function importStylesheet( page ) {
var sheet = '@import "'
+ wgScriptPath
+ '/index.php?title='
+ escape( page.replace( ' ', '_' ) )
+ '&action=raw&ctype=text/css";'
var styleElem = document.createElement( 'style' );
styleElem.setAttribute( 'type' , 'text/css' );
styleElem.appendChild( document.createTextNode( sheet ) );
document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
}
var auto_comment = 0
/** Расширенный поиск *****************************************
** Автор: Участник:Afinogenoff
*/
function SpecialSearchEnhanced()
{
var mainNode = document.getElementsByTagName("form");
if (!mainNode) return;
var searchValue = document.forms[0].search.value
var safeSearchValue = searchValue.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
var firstForm = mainNode[0];
var node = document.createElement('div');
var googleSearch = '<form action="http://www.google.com/custom" method="get" name="google" target="_blank" id="google">';
googleSearch += '<input type="hidden" name="hl" value="ru" />';
googleSearch += '<input type="hidden" name="domains" value="ru.wikipedia.org" />';
googleSearch += '<input type="hidden" name="q" maxlength="2048" value="' + safeSearchValue + '" />'
googleSearch += '<input type="hidden" name="sitesearch" value="wiki.traditio.ru" />'
googleSearch += '<input type="button" value="Google по Традиции" onclick="document.google.q.value = document.forms[0].search.value; this.form.submit();" style="width: 12em;" />'
googleSearch += '</form>'
var yandexSearch = '<form action="http://www.yandex.ru/yandsearch" method="get" name="yandex" target="_blank" id="yandex">';
yandexSearch += '<input type="hidden" name="text" maxlength="300" value="' + safeSearchValue + '" />';
yandexSearch += '<input type="hidden" name="site" value="wiki.traditio.ru" />';
yandexSearch += '<input type="hidden" name="ras" value="1" />'
yandexSearch += '<input type="hidden" name="site_manually" value="true" />'
yandexSearch += '<input type="hidden" name="server_name" value="Traditio" />'
yandexSearch += '<input type="button" value="Яндекс по Традиции" onclick="document.yandex.text.value = document.forms[0].search.value; this.form.submit();" style="width: 12em;" />'
yandexSearch += '</form>'
var ramblerSearch = '<form action="http://www.rambler.ru/srch?set=www&words" method="get" name="rambler" target="_blank" id="rambler">';
ramblerSearch += '<input type="hidden" name="text" maxlength="300" value="' + safeSearchValue + '" />';
ramblerSearch += '<input type="hidden" name="site" value="wiki.traditio.ru" />';
ramblerSearch += '<input type="hidden" name="ras" value="1" />'
ramblerSearch += '<input type="hidden" name="site_manually" value="true" />'
ramblerSearch += '<input type="hidden" name="server_name" value="Traditio" />'
ramblerSearch += '<input type="button" value="Рамблер по Традиции" onclick="document.rambler.text.value = document.forms[0].search.value; this.form.submit();" style="width: 12em;" />'
ramblerSearch += '</form>'
node.innerHTML = node.innerHTML + '<table style="margin-left: 75%; padding-left:4px;"><tr><td>' + yandexSearch + '</td></tr><tr><td>' + googleSearch + '</td></tr><tr><td>' + ramblerSearch + '</td></tr></table>';
firstForm.parentNode.insertBefore(node, firstForm.nextSibling);
}
if (wgPageName == "Служебная:Search") { addOnloadHook(SpecialSearchEnhanced); }
/** Избранные интервики, статус ICQ, статус Quake II ***************
*
* Что делает:
*
* 1) Ставит звёздочки для избранных статей
* (не знаю, зачем оно нам надо, у нас же нет языковых разделов;
* но пусть уж будет)
*
* 2) показывает значок статуса ICQ
*
* 3) показывает консоль для отслеживания статуса игры Quake II
*
*/
function LinkFA()
{
// iterate over all span-elements
for(var i=0; nextSpanElement = document.getElementsByTagName("span")[i]; i++) {
// if found a ICQ span
if(nextSpanElement.className == "ICQ") {
nextSpanElement.style.padding = "0 0 0 20px";
nextSpanElement.style.backgroundImage = "url('http://status.icq.com/online.gif?icq="+a.id+"&img=5')";
nextSpanElement.style.backgroundRepeat = "no-repeat";
}
// if found a Quake II span
if(nextSpanElement.className == "quake2traditio") {
nextSpanContent = nextSpanElement.innerHTML;
// проверяем, действительно ли указано имя сервера
// (защита от взлома Традиции, совершаемого впрыскиванием левого кода)
// имя.имя.имя...имя:порт, где имя == [a-zA-Z01-9][a-zA-Z01-9-]*
// а порт не обязателен
if (nextSpanContent.match(/^([a-zA-Z01-9][a-zA-Z01-9-]*\.)+([a-zA-Z01-9][a-zA-Z01-9-]*)(:[1-9][01-9]*)?$/)
== null) {
// не сервер:
nextSpanElement.innerHTML = "<b>" + nextSpanContent + " не является сервером Quake II<"
+ "/b>";
} else {
// сервер:
nextSpanElement.innerHTML = '<embed style="width: 100%;" ' +
'height=388 type="application/x-q3plug-plugin" ' +
'name="' + nextSpanContent + '" color="#ffeedd" ' +
'color2="#88ff88" game="Q2" ' +
'pluginspage="http://members.liwest.at/mb/q3plug" /' +
'>';
} // конец проверки того, действительно ли указано имя сервера
}
// if found a FA span
if(nextSpanElement.className == "FA") {
// iterate over all li-elements
for(var j=0; nextListItem = document.getElementsByTagName("li")[j]; j++) {
// if found a FA link
if(nextListItem.className == "interwiki-" + nextSpanElement.id) {
nextListItem.className += " FA"
nextListItem.title = "Эта статья является избранной в другом языковом разделе.";
}
}
}
}
}
addOnloadHook( LinkFA );
// русификация кнопок на панели инструментов
if (wgAction == 'edit' || wgAction == 'submit')
addOnloadHook(function(){
if (mwEditButtons.length < 3) return;
mwEditButtons[0].imageFile = 'http://wiki.traditio.ru/images/9/9a/Button_boldru.png';
mwEditButtons[1].imageFile = 'http://wiki.traditio.ru/images/8/88/Button_italicru.png';
mwEditButtons[2].imageFile = 'http://wiki.traditio.ru/images/3/3d/Button_internal_link_ru.png'
})
//{Неверный заголовок}
function correctTitle(){
if (window.disableRealTitle) return
var toHide = document.getElementById('trestrictions_replace')
if (!toHide) return
var newTitle = document.getElementById('trestrictions_correct')
if (!newTitle) return
document.getElementsByTagName('h1')[0].innerHTML = newTitle.innerHTML
toHide.style.display = 'none'
document.getElementById('trestrictions_replaced').style.display = 'block'
}
//[[Special:Upload]]: insert {Изображение} automatically, insert {Обоснование добросовестного использования} with click
function uploadPage(){
var desc = document.getElementById('wpUploadDescription')
var tmpl = document.getElementById('imageinfo')
if (tmpl && desc && !desc.value) desc.value = tmpl.innerHTML
var span = document.getElementById('insertlink')
if (!span) return
var a = document.createElement('a')
a.href = 'javascript:addRationaleTemplate()'
span.parentNode.insertBefore(a, span)
a.appendChild(span)
span.style.display = 'inline'
}
function addRationaleTemplate(){
var desc = document.getElementById('wpUploadDescription')
var tmpl = document.getElementById('rationale')
if (desc && tmpl && desc.value.indexOf(tmpl.innerHTML.substring(0,8)) == -1){
desc.value += '\n' + tmpl.innerHTML
desc.rows = 15
}
}
//Сворачивающиеся блоки
var autoCollapse = 2
var collapseCaption = 'скрыть'
var expandCaption = 'показать'
function collapsibleTables(){
var Table, HRow, THs, Header, btn, a, tblIdx = 0, colTables = []
var allTables = document.getElementsByTagName('table')
for (var i=0; Table = allTables[i]; i++){
if (!hasClass(Table, 'collapsible')) continue
if (!(HRow = Table.rows[0])) continue
THs = HRow.getElementsByTagName('th')
if (THs.length == 0) continue
Header = THs[THs.length-1] //last TH, not 1st like in en.wp
Table.id = 'collapsibleTable' + tblIdx
btn = document.createElement('span')
btn.style.styleFloat = btn.style.cssFloat = 'right'
btn.style.fontWeight = 'normal'
a = document.createElement('a')
a.id = 'collapseButton' + tblIdx
a.href = 'javascript:collapseTable(' + tblIdx + ');'
a.appendChild(document.createTextNode(collapseCaption))
btn.appendChild(document.createTextNode('['))
btn.appendChild(a)
btn.appendChild(document.createTextNode(']'))
Header.insertBefore(btn, Header.childNodes[0])
colTables[tblIdx++] = Table
}
for (var i=0; i < tblIdx; i++)
if ((tblIdx > autoCollapse && hasClass(colTables[i], 'autocollapse')) || hasClass(colTables[i], 'collapsed'))
collapseTable(i)
}
function collapseTable (idx){
var Table = document.getElementById('collapsibleTable' + idx)
var btn = document.getElementById('collapseButton' + idx)
if (!Table || !btn) return false
var Rows = Table.rows
var isShown = (btn.firstChild.data == collapseCaption)
btn.firstChild.data = isShown ? expandCaption : collapseCaption
var disp = isShown ? 'none' : Rows[0].style.display
for (var i=1; i < Rows.length; i++)
Rows[i].style.display = disp
}
addOnloadHook(collapsibleTables);
var NavigationBarHide = '[' + collapseCaption + ']'
var NavigationBarShow = '[' + expandCaption + ']'
var NavigationBarShowDefault = autoCollapse
function collapsibleDivs(){
var navIdx = 0, colNavs = [], i, NavFrame
var divs = document.getElementById('content').getElementsByTagName('div')
for (i=0; NavFrame = divs[i]; i++) {
if (!hasClass(NavFrame, 'NavFrame')) continue
NavFrame.id = 'NavFrame' + navIdx
var a = document.createElement('a')
a.className = 'NavToggle'
a.id = 'NavToggle' + navIdx
a.href = 'javascript:collapseDiv(' + navIdx + ');'
a.appendChild(document.createTextNode(NavigationBarHide))
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
for (var j=0; j < NavFrame.childNodes.length; j++)
if (hasClass(NavFrame.childNodes[j], 'NavHead'))
NavFrame.childNodes[j].appendChild(a)
colNavs[navIdx++] = NavFrame
}
for (i=0; i < navIdx; i++)
if ((navIdx > NavigationBarShowDefault && !hasClass(colNavs[i], 'expanded')) || hasClass(colNavs[i], 'collapsed'))
collapseDiv(i)
}
function collapseDiv(idx) {
var div = document.getElementById('NavFrame' + idx)
var btn = document.getElementById('NavToggle' + idx)
if (!div || !btn) return false
var isShown = (btn.firstChild.data == NavigationBarHide)
btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
var disp = isShown ? 'none' : 'block'
for (var child = div.firstChild; child != null; child = child.nextSibling)
if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent'))
child.style.display = disp
}
addOnloadHook(collapsibleDivs);
//Автопричины при удалении
importScript('User:Afinogenoff/adm/delreason2.js');
/* </source> */