MediaWiki:Common.js: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Wargo (dyskusja | edycje)
mw.config.get
Linia 385:
});
}
 
// 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';
 
// Sprawdź przeglądarkę (https://stackoverflow.com/a/9851769/8127198)
var isFirefox = typeof InstallTrigger !== 'undefined';
 
var createAnimation = function () {
// Ustaw zakończenie animacji
// Firefox inaczej interpretuje 100% w calc(), dlatego potrzebuje wartości wyrażonej wprost
// Powoduje to jednak, że przy zmianie rozmiaru okna, animację trzeba tworzyć od nowa
var end = 'calc(-' + (sister_projects.scrollWidth + 8) + 'px + 100%)';
if(isFirefox) 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(); });
 
// W Firefoksie należy rozpocząć animację od nowa, kiedy użytkownik zmieni rozmiar okna
if(isFirefox){
window.addEventListener('resize', function () {
animation.cancel();
animation = createAnimation();
});
}
});