MediaWiki:Common.js: відмінності між версіями
Вилучено вміст Додано вміст
ResourceLoader/Migration guide (users) mw:Special:Permalink/4989156#importScriptURI (global sysop action) |
AS (обговорення | внесок) Немає опису редагування |
||
Рядок 404: | Рядок 404: | ||
function toggleImageFunction(group, remindex, shwindex) { |
function toggleImageFunction(group, remindex, shwindex) { |
||
return function() { |
return function() { |
||
document.getElementById("ImageGroupsGr" + group + "Im" + remindex).style |
document.getElementById("ImageGroupsGr" + group + "Im" + remindex).style.display = "none"; |
||
document.getElementById("ImageGroupsGr" + group + "Im" + shwindex).style |
document.getElementById("ImageGroupsGr" + group + "Im" + shwindex).style.display = "block"; |
||
return false; |
return false; |
||
}; |
}; |
||
Рядок 414: | Рядок 414: | ||
var units, search; |
var units, search; |
||
var currentimage; |
var currentimage; |
||
var UnitNode; |
var UnitNode, rightlink, commentText; |
||
for (i = 0; i < divs.length; i++) { |
for (i = 0; i < divs.length; i++) { |
||
if (divs[i].className !== "ImageGroup") { continue; } |
if (divs[i].className !== "ImageGroup") { continue; } |
||
Рядок 428: | Рядок 428: | ||
for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) { |
for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) { |
||
var temp = UnitNode.childNodes[j]; |
var temp = UnitNode.childNodes[j]; |
||
if ( |
if (['center', 'mw-halign-center'].some(function(className) { return temp.classList.contains(className);})) { |
||
units.push(temp); |
|||
} |
|||
} |
} |
||
var |
var wrap; |
||
var commentText = undefined; |
|||
for (j = 0; j < units.length; j++) { |
for (j = 0; j < units.length; j++) { |
||
currentimage = units[j]; |
currentimage = units[j]; |
||
wrap = document.createElement('div'); |
|||
wrap.id = "ImageGroupsGr" + i + "Im" + j; |
|||
currentimage.parentNode.insertBefore(wrap, currentimage); |
|||
wrap.appendChild(currentimage); |
|||
var leftlink = document.createElement("a"); |
var leftlink = document.createElement("a"); |
||
if (commentText !== undefined) { |
if (commentText !== undefined) { |
||
Рядок 454: | Рядок 458: | ||
var imghead = document.createElement("div"); |
var imghead = document.createElement("div"); |
||
rightlink = document.createElement("a"); |
rightlink = document.createElement("a"); |
||
if (j != 0) { |
if (j !== 0) { |
||
leftlink.href = "#"; |
leftlink.href = "#"; |
||
leftlink.onclick = toggleImageFunction(i, j, j-1); |
leftlink.onclick = toggleImageFunction(i, j, j-1); |
||
Рядок 464: | Рядок 468: | ||
rightlink.appendChild(document.createTextNode("▶")); |
rightlink.appendChild(document.createTextNode("▶")); |
||
} |
} |
||
imghead.style |
imghead.style.fontSize = "110%"; |
||
imghead.style |
imghead.style.fontweight = "bold"; |
||
imghead.appendChild(leftlink); |
imghead.appendChild(leftlink); |
||
imghead.appendChild(document.createTextNode("\xA0")); |
imghead.appendChild(document.createTextNode("\xA0")); |
||
Рядок 472: | Рядок 476: | ||
imghead.appendChild(rightlink); |
imghead.appendChild(rightlink); |
||
if (units.length > 1) { |
if (units.length > 1) { |
||
wrap.insertBefore(imghead,wrap.childNodes[0]); |
|||
} |
} |
||
if (j != 0) { |
if (j !== 0) { |
||
wrap.style.display = "none"; |
|||
} |
} |
||
} |
} |
Поточна версія на 15:26, 1 лютого 2023
/* Any JavaScript here will be loaded for all users on every page load. */
// <nowiki>
/**
* WikiMiniAtlas is a popup click and drag world map.
* See [[meta:WikiMiniAtlas]] for more information.
* Maintainers: [[w:User:Dschwen]]
*/
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );
/* Load fixes for Windows font rendering */
if( navigator.platform.indexOf( "Win" ) != -1 ) {
mw.loader.load( '/w/index.php?title=MediaWiki:Common.css/WinFixes.css&action=raw&ctype=text/css', 'text/css' );
}
/* Test if an element has a certain class **************************************
*
* Description: Uses regular expressions and caching for better performance.
* Maintainers: [[:en:User:Mike Dillon]], [[:en:User:R. Koot]], [[:en: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);
};
})();
/** Interwiki links to featured articles ***************************************
*
* Description: Highlights interwiki links to featured articles (or
* equivalents) by changing the bullet before the interwiki link
* into a star.
* Maintainers: [[:en:User:R. Koot]]
*/
function LinkFA()
{
if ( document.getElementById( "p-lang" ) ) {
var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
for ( var i = 0; i < InterwikiLinks.length; i++ ) {
if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
InterwikiLinks[i].className += " FA";
InterwikiLinks[i].title = "Ця стаття є вибраною в іншомовному розділі";
}
if ( document.getElementById( InterwikiLinks[i].className + "-ga" ) ) {
InterwikiLinks[i].className += " GA";
InterwikiLinks[i].title = "Ця стаття є доброю в іншомовному розділі";
}
}
}
}
$( LinkFA );
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* [[:en:wikiquote:NavFrame]].
* Maintainers: [[:en:User:R. Koot]]
*/
var autoCollapse = 2;
var collapseCaption = "сховати";
var expandCaption = "показати";
function collapseTable( tableIndex, e ){
var Button = document.getElementById( "collapseButton" + tableIndex );
var Table = document.getElementById( "collapsibleTable" + tableIndex );
if ( !Table || !Button ) {
return false;
}
var Rows = Table.rows;
var i;
if ( Button.firstChild.data == collapseCaption ) {
for (i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = "none";
}
Button.firstChild.data = expandCaption;
} else {
for (i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = Rows[0].style.display;
}
Button.firstChild.data = collapseCaption;
}
e.preventDefault();
}
function createCollapseButtons(){
var tableIndex = 0;
var NavigationBoxes = {};
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.className = "collapseButton"; //Styles are declared in Common.css
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
ButtonLink.setAttribute( "href", "#" );
//addHandler( ButtonLink, "click", new Function( "evt", "collapseTable(" + tableIndex + " ); return false;") );
$( ButtonLink ).on( 'click', $.proxy( collapseTable, ButtonLink, tableIndex ) );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( "[" ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( "]" ) );
Header.insertBefore( Button, Header.childNodes[0] );
tableIndex++;
}
}
for ( i = 0; i < tableIndex; i++ ) {
if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
collapseTable( i );
}
else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
var element = NavigationBoxes[i];
while (element = element.parentNode) {
if ( hasClass( element, "outercollapse" ) ) {
collapseTable ( i );
break;
}
}
}
}
}
$( createCollapseButtons );
/** Dynamic Navigation Bars (experimental) *************************************
*
* Description: See [[wikiquote:NavFrame]].
* Maintainers: UNMAINTAINED
*/
// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = autoCollapse;
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar){
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) {
return false;
}
var NavChild;
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (NavChild = NavFrame.firstChild; NavChild !== null; NavChild = NavChild.nextSibling) {
if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
NavChild.style.display = 'none';
}
}
NavToggle.firstChild.data = NavigationBarShow;
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (NavChild = NavFrame.firstChild; NavChild !== null; NavChild = NavChild.nextSibling) {
if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
NavChild.style.display = 'block';
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton(){
var indexNavigationBar = 0;
// iterate over all < div >-elements
var divs = document.getElementsByTagName("div");
for (var i = 0; NavFrame = divs[i]; i++) {
// if found a navigation bar
if (hasClass(NavFrame, "NavFrame")) {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var isCollapsed = hasClass( NavFrame, "collapsed" );
/*
* Check if any children are already hidden. This loop is here for backwards compatibility:
* the old way of making NavFrames start out collapsed was to manually add style="display:none"
* to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make
* the content visible without JavaScript support), the new recommended way is to add the class
* "collapsed" to the NavFrame itself, just like with collapsible tables.
*/
for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
if ( NavChild.style.display == 'none' ) {
isCollapsed = true;
}
}
}
if (isCollapsed) {
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
NavChild.style.display = 'none';
}
}
}
var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
NavToggle.appendChild(NavToggleText);
// 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")) {
NavToggle.style.color = NavFrame.childNodes[j].style.color;
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar) {
for(var i=1; i<=indexNavigationBar; ++i) {
toggleNavigationBar(i);
}
}
}
$( createNavigationBarToggleButton );
/*
* Функція, що на головній сторінці в кінці списку інтервікі ставить посилання на повний список всіх Вікіцитат
*/
function mainPageAppendCompleteListLink() {
try {
var node = document.getElementById( "p-lang" )
.getElementsByTagName('div')[0]
.getElementsByTagName('ul')[0];
var aNode = document.createElement( 'a' );
var liNode = document.createElement( 'li' );
aNode.appendChild( document.createTextNode( 'Повний список' ) );
aNode.setAttribute( 'href' , '//meta.wikimedia.org/wiki/Wikiquote#List_of_Wikiquotes' );
liNode.appendChild( aNode );
liNode.className = 'interwiki-completelist';
node.appendChild( liNode );
} catch(e) {
// lets just ignore what's happened
return;
}
}
if (mw.config.get('wgTitle') == 'Головна сторінка' && mw.config.get('wgNamespaceNumber') == 0 && mw.config.get('wgUserLanguage')=="uk" ) {
$( mainPageAppendCompleteListLink );
}
$(function(){
var plus = document.getElementById('ca-addsection');
if (!plus) return;
var custom = document.getElementById('add-custom-section');
if (!custom) return;
plus.getElementsByTagName('A')[0].setAttribute('href', custom.getElementsByTagName('A')[0].href);
})
/** Import module *************************************************************
*
* Предложен [[Участник:Alex_Smotrov]], на основе аналогичной английской функции
*
* Description: Includes a raw wiki page as javascript or CSS,
* used for including user made modules.
*/
function importScript(page, lang) {
var url = mw.config.get('wgScriptPath') + '/index.php?title='
+ encodeURIComponent(page.replace(' ','_'))
+ '&action=raw&ctype=text/javascript';
if (lang) {
url = '//' + lang + '.wikiquote.org' + url;
}else{
url = '//uk.wikiquote.org' + url;
}
mw.loader.load(url);
}
/* При загрузке [[Special:Upload]] вставляет в поле описания [[Шаблон:Изображение]]
Автор - [[User:Alex Smotrov]]
*/
function uploadPage(){
//автоматически вставить {Изображение}
var desc = document.getElementById('wpUploadDescription')
var temp = document.getElementById('imageinfo')
if (temp && desc && !desc.value) desc.value = temp.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 temp = document.getElementById('rationale')
if(!desc || !temp) return
if (desc.value.indexOf(temp.innerHTML.substring(0,8)) == -1){
desc.value += '\n' + temp.innerHTML
desc.rows = 15
}
}
if (mw.config.get('wgCanonicalNamespace') == 'Special' && mw.config.get('wgCanonicalSpecialPageName') == 'Upload')
$(uploadPage);
if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0)
{
if (mw.config.get('wgCanonicalNamespace') != "Special")
{
mw.loader.load('//uk.wikiquote.org/w/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript');
}
}
// Розширений пошук
// Автор: ru:User:Не А
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="uk" />';
googleSearch += '<input type="hidden" name="domains" value="uk.wikiquote.org" />';
googleSearch += '<input type="hidden" name="q" maxlength="2048" value="' + safeSearchValue + '" />'
googleSearch += '<input type="hidden" name="sitesearch" value="uk.wikiquote.org" />'
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.ua/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="uk.wikiquote.org" />';
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="Вікіцитати" />'
yandexSearch += '<input type="button" value="Яндекс по Вікіцитатах" onclick="document.yandex.text.value = document.forms[0].search.value; this.form.submit();" style="width: 12em;" />'
yandexSearch += '</form>'
node.innerHTML = node.innerHTML + '<table style="margin-left: 75%; padding-left:4px;"><tr><td>' + yandexSearch + '</td></tr><tr><td>' + googleSearch + '</td></tr></table>';
firstForm.parentNode.insertBefore(node, firstForm.nextSibling);
}
// Можливість редагування "нульового" розділу
// Теоретично це мало б бути у додатках...
importScript('MediaWiki:Gadget-edittop.js');
var auto_comment = 0
/**
* Для шаблону Шаблон:Scroll Gallery
*/
$(function() {
if (document.URL.match(/printable/g)) return;
function toggleImageFunction(group, remindex, shwindex) {
return function() {
document.getElementById("ImageGroupsGr" + group + "Im" + remindex).style.display = "none";
document.getElementById("ImageGroupsGr" + group + "Im" + shwindex).style.display = "block";
return false;
};
}
var divs = document.getElementsByTagName("div");
var i = 0, j = 0;
var units, search;
var currentimage;
var UnitNode, rightlink, commentText;
for (i = 0; i < divs.length; i++) {
if (divs[i].className !== "ImageGroup") { continue; }
UnitNode = undefined;
search = divs[i].getElementsByTagName("div");
for (j = 0; j < search.length; j++) {
if (search[j].className !== "ImageGroupUnits") { continue; }
UnitNode=search[j];
break;
}
if (UnitNode === undefined) { continue; }
units = [];
for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) {
var temp = UnitNode.childNodes[j];
if (['center', 'mw-halign-center'].some(function(className) { return temp.classList.contains(className);})) {
units.push(temp);
}
}
var wrap;
for (j = 0; j < units.length; j++) {
currentimage = units[j];
wrap = document.createElement('div');
wrap.id = "ImageGroupsGr" + i + "Im" + j;
currentimage.parentNode.insertBefore(wrap, currentimage);
wrap.appendChild(currentimage);
var leftlink = document.createElement("a");
if (commentText !== undefined) {
leftlink.setAttribute("title", commentText);
}
var comment;
if (typeof(currentimage.getAttribute("title")) !== "string") {
commentText = (j+1) + "/" + units.length;
comment = document.createElement("tt").appendChild(document.createTextNode("("+ commentText + ")"));
}
else {
commentText = currentimage.getAttribute("title");
comment = document.createElement("span").appendChild(document.createTextNode(commentText));
currentimage.removeAttribute("title");
}
if(rightlink !== undefined) {
rightlink.setAttribute("title", commentText);
}
var imghead = document.createElement("div");
rightlink = document.createElement("a");
if (j !== 0) {
leftlink.href = "#";
leftlink.onclick = toggleImageFunction(i, j, j-1);
leftlink.appendChild(document.createTextNode("◀"));
}
if (j != units.length - 1) {
rightlink.href = "#";
rightlink.onclick = toggleImageFunction(i, j, j+1);
rightlink.appendChild(document.createTextNode("▶"));
}
imghead.style.fontSize = "110%";
imghead.style.fontweight = "bold";
imghead.appendChild(leftlink);
imghead.appendChild(document.createTextNode("\xA0"));
imghead.appendChild(comment);
imghead.appendChild(document.createTextNode("\xA0"));
imghead.appendChild(rightlink);
if (units.length > 1) {
wrap.insertBefore(imghead,wrap.childNodes[0]);
}
if (j !== 0) {
wrap.style.display = "none";
}
}
}
});
//Кінець блоку для шаблону Scroll Gallery
/* скрипт, який додає деякі шаблони до панелі інструментів */
mw.loader.load('//uk.wikiquote.org/w/index.php?title=MediaWiki:EditToolsExt.js&action=raw&ctype=text/javascript');
/*прикол до 1 квітня*/
if (mw.config.get( 'wgIsMainPage' ))
if (new Date().getMonth() == 3 && new Date().getDate() == 1)
{
mw.loader.using( ['mediawiki.util'], function () {
mw.util.addCSS('#mw-panel, #bodyContent, #siteNotice, #p-personal, .vectorTabs li, .menu li, #p-cactions-label { -moz-transform: scaleX(-1); -webkit-transform: scaleX(-1); transform: scaleX(-1); }');
mw.util.addCSS('#p-personal ul { padding-left: 0; }');
mw.util.addCSS('.vectorTabs li span, div#mw-head div.vectorMenu h3 { background-position: 0% 0%; }');
} );
}
// </nowiki>