MediaWiki:Common.js
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. <pre> */
/* </pre> */
/* 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);
};
})();
/**
* Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* [[Wikipedia:NavFrame]].
* Maintainers: [[User:R. Koot]]
*/
var autoCollapse = 2;
var collapseCaption = 'ukryj';
var expandCaption = 'pokaż';
window.collapseTable = function ( tableIndex ) {
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;
}
};
function createCollapseButtons() {
var tableIndex = 0;
var NavigationBoxes = {};
var Tables = document.getElementsByTagName( 'table' );
var i;
function handleButtonLink( index, e ) {
window.collapseTable( index );
e.preventDefault();
}
for ( i = 0; i < Tables.length; i++ ) {
if ( $( Tables[i] ).hasClass( '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', '#' );
$( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( '[' ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( ']' ) );
Header.insertBefore( Button, Header.firstChild );
tableIndex++;
}
}
for ( i = 0; i < tableIndex; i++ ) {
if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
window.collapseTable( i );
}
else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
var element = NavigationBoxes[i];
while ((element = element.parentNode)) {
if ( $( element ).hasClass( 'outercollapse' ) ) {
window.collapseTable ( i );
break;
}
}
}
}
}
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
/**
* Dynamic Navigation Bars (experimental)
*
* Description: See [[Wikipedia:NavFrame]].
* Maintainers: UNMAINTAINED
*/
/* set up the words in your language */
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
/**
* Shows and hides content and picture (if available) of navigation bars
* Parameters:
* indexNavigationBar: the index of navigation bar to be toggled
**/
window.toggleNavigationBar = function ( indexNavigationBar, event ) {
var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
var NavChild;
if ( !NavFrame || !NavToggle ) {
return false;
}
/* if shown now */
if ( NavToggle.firstChild.data === NavigationBarHide ) {
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( '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 ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
NavChild.style.display = 'block';
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
event.preventDefault();
};
/* adds show/hide-button to navigation bars */
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
var NavFrame;
var NavChild;
/* iterate over all < div >-elements */
var divs = document.getElementsByTagName( 'div' );
for ( var i = 0; (NavFrame = divs[i]); i++ ) {
/* if found a navigation bar */
if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
indexNavigationBar++;
var NavToggle = document.createElement( 'a' );
NavToggle.className = 'NavToggle';
NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
NavToggle.setAttribute( 'href', '#' );
$( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );
var isCollapsed = $( NavFrame ).hasClass( '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 ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) {
if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
if ( NavChild.style.display === 'none' ) {
isCollapsed = true;
}
}
}
if ( isCollapsed ) {
for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( '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 ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
NavToggle.style.color = NavFrame.childNodes[j].style.color;
NavFrame.childNodes[j].appendChild( NavToggle );
}
}
NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
}
}
}
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );
/*************************************************************************************/
/* DALEKOPIS */
/*************************************************************************************/
if(navigator.userAgent.indexOf("MSIE") == -1){ //Disables for IE, AJAX etc is really bugged in IE, wont work without major rewrite and server-side extension.
var ticker_tl=new Array(); //Dont touch
var ticker_speed=20; //Increase to slow down, too low makes it go incredibly slow, 15 is about right
var ticker_index=0; ticker_text_pos=0; //Dont touch
var ticker_str_length; //Dont touch
var ticker_contents, ticker_row; //Dont touch
var ticker_custompages = Array();
var ticker_custommsg = Array();
// Add lines like the following to add custom tickers:
// ticker_custompages['Portal:PORTALNAME'] = 'Portal:PORTALNAME/Tickersource';
// Make sure that the /Tickersource page is formatted like [[User:TheFearow/Tickersource]] using DPLs
//ticker_custompages['Portal:Football'] = 'Portal:Football/Tickersource';
//ticker_custompages['Wikinews:Newsroom'] = 'Wikinews:Newsroom/Tickersource';
//Add custommsgs for all custom pages
//ticker_custommsg['Portal:Football'] = 'Latest football stories';
//ticker_custommsg['Wikinews:Newsroom'] = 'Stories in development';
function ticker_prepare(){
ticker_str_length=ticker_tl[0].length
var content = document.getElementById('wstawdalekopis').innerHTML;
if(content != ""){
content += "<br/>\n";
}
var start = "Najnowsze wiadomości";
if(ticker_custommsg[wgBasePageName]){
start = ticker_custommsg[wgBasePageName];
}
var month=['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'];
var monthgen=['stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia'];
var today = new Date();
var page=encodeURI('#'+today.getDate()+'_'+monthgen[today.getMonth()]+'_'+today.getFullYear());
page = page.replace(/\%/g,'.');
page = 'Portal:'+month[today.getMonth()]+'_'+today.getFullYear() + page;
content += "<div id='ticker_start' style='font-weight: bold; font-size: 120%; display: inline;'>" + start + " <div style='font-size: smaller; display: inline;'>(<a href='" + mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + page + "'>pełna lista</a>)</div>: </div><div id='ticker_content' style='font-size: 120%; color: blue; display: inline;'></div>";
document.getElementById('wstawdalekopis').innerHTML = content;
}
wgBasePageName = mw.config.get('wgPageName');
if(wgBasePageName.indexOf("/") != -1){
wgBasePageName = wgBasePageName.split('/')[0];
}
var ticker_toload = "";
function ticker_load(){
try{
var randomunusedtickervariable = document.getElementById('wstawdalekopis').innerHTML;
}catch(err){
return;
}
ticker_toload = "Szablon:Najnowsze_wiadomości";
if(ticker_custompages[wgBasePageName]){
ticker_toload = ticker_custompages[wgBasePageName];
}
xmlhttp = sajax_init_object();
xmlhttp.overrideMimeType('text/xml');
xmlhttp.open( 'GET' , mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + ticker_toload + '&action=render', true);
xmlhttp.onload = function() {
//this.responseXML is the DOM
var entries = this.responseText.split("\n");
//window.alert(this.responseText);
for(var i = 0; i < entries.length; i++){
var val = entries[i];
if(val.indexOf("<li>") == 0 && val.indexOf("<a") != -1){
var title_begin = val.indexOf('">');
if(title_begin == -1) title_begin = val.indexOf("'>");
val = val.substring(title_begin+2, val.indexOf("</a>"));
ticker_tl[ticker_tl.length] = val;
}
}
ticker_prepare();
ticker_tick(false, true);
}
xmlhttp.send( null );
}
function ticker_tick(reset, first)
{
if(reset){
document.getElementById("ticker_content").innerHTML = "";
}
if(first){
ticker_index = Math.floor(Math.random() * ticker_tl.length);
ticker_text_pos=0;
ticker_str_length=ticker_tl[ticker_index].length;
}
ticker_contents='';
ticker_row=Math.max(0,ticker_index-7);
//window.alert("TL: "+ticker_tl[ticker_index]);
document.getElementById("ticker_content").innerHTML = ("<a href=\"" + mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace("$1", encodeURIComponent(ticker_tl[ticker_index])) + "\" title=\"" + ticker_tl[ticker_index].replace(/"/g, """) + "\">" + ticker_tl[ticker_index].substring(0,ticker_text_pos) + "_</a>").replace("\n", "");
if(ticker_text_pos++>=ticker_str_length)
{
ticker_index++;
if(ticker_index!=ticker_tl.length)
{
ticker_text_pos=0;
ticker_str_length=ticker_tl[ticker_index].length;
if(first){
setTimeout("ticker_tick(true, false)",3);
}else{
setTimeout("ticker_tick(true, false)",7000);
}
}else{
ticker_index = Math.floor(Math.random() * ticker_tl.length);
ticker_text_pos=ticker_tl[ticker_index].indexOf("\">");
ticker_str_length=ticker_tl[ticker_index].length;
setTimeout("ticker_tick(true, false)",3000);
}
} else
setTimeout("ticker_tick(false, false)",ticker_speed);
}
$(ticker_load);
function sajax_init_object() {
var A;
try {
// Try the new style before ActiveX so we don't
// unnecessarily trigger warnings in IE 7 when
// set to prompt about ActiveX usage
A = new XMLHttpRequest();
} catch (e) {
try {
A=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
A=new ActiveXObject("Microsoft.XMLHTTP");
} catch (oc) {
A=null;
}
}
}
return A;
}
}
/*************************************************************************************/
/* DALEKOPIS KONIEC */
/*************************************************************************************/
/* Dynamic purge */
function dynamic_purge(page)
{
new mw.Api().post( { action: 'purge', titles: page } ).then( function () {
location.reload();
});
}
// Funkcja służąca do obsługiwania paska z projektami siostrzanymi na stronie głównej
$(function (){
// Antyczne przeglądarki i tak nie będą wspierały animacji
if([].includes === undefined) return;
// Nie uruchamiaj poza stroną główną
var applicable_pages = ['Strona_główna', 'Wikireporter:Msz2001/Strona_główna'];
var current_page = mw.config.get('wgPageName');
if(!applicable_pages.includes(current_page)) return;
var animation_speed = 15000; // czas trwania obiegu w jedną stronę
var sister_projects = document.getElementById('sister-projects');
// Upewnij się, że pasek z projektami istnieje i da się animować
if(sister_projects === null || sister_projects === undefined
|| sister_projects.animate === undefined) return;
// Blokuje ręczne przewijanie
sister_projects.parentNode.scroll(0, 0);
sister_projects.parentNode.style.overflow = 'hidden';
var createAnimation = function () {
// Ustaw zakończenie animacji
var end = (sister_projects.clientWidth - sister_projects.scrollWidth - 8) + 'px';
// Stwórz animację
return sister_projects.animate(
[
{ marginLeft: '0' },
{ marginLeft: end }
],
{
duration: animation_speed,
easing: 'linear',
direction: 'alternate',
iterations: Infinity
}
);
};
// Uruchom animację
var animation = createAnimation();
// Dodaj zdarzenia myszy (wstrzymywanie i kontynuacja animacji)
sister_projects.addEventListener('mouseenter', function () { animation.pause(); });
sister_projects.addEventListener('mouseleave', function () { animation.play(); });
// Należy rozpocząć animację od nowa, kiedy użytkownik zmieni rozmiar okna
window.addEventListener('resize', function () {
animation.cancel();
animation = createAnimation();
});
});