MediaWiki:Common.js: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
Ostrzyciel (dyskusja • edycje) M (ups.) |
Ostrzyciel (dyskusja • edycje) M (dobrze, starczy śniegu) |
||
Linia 393: | Linia 393: | ||
/* </nowiki></pre> */ |
/* </nowiki></pre> */ |
||
// KOD NA ŚNIEG – autor: Szewek |
|||
(function() { |
|||
'use strict'; |
|||
if (wgPageName != "Specjalna:Ostatnie_zmiany") return; |
|||
var NUM_FLAKES = 40; |
|||
var status = true, handle, SBTN, flakes, Flake, PI_2, canvas, context, drawCircle, i, range, resizeWindow, xpos; |
|||
SBTN = $('<button id="snieg-switch">Przełącz śnieg</button>').appendTo("div#content"); |
|||
SBTN.click(function(){ |
|||
status = !status; |
|||
if (status) |
|||
handle = requestAnimationFrame(step); |
|||
else { |
|||
cancelAnimationFrame(handle); |
|||
context.clearRect(0, 0, w, h); |
|||
} |
|||
}); |
|||
PI_2 = 2 * Math.PI; |
|||
canvas = $('<canvas style="z-index: 500; pointer-events: none; position: fixed; top: 0; left: 0;" id="snieg"></canvas>').appendTo("body")[0]; |
|||
context = canvas.getContext("2d"); |
|||
window.w = 0; |
|||
window.h = 0; |
|||
resizeWindow = function() { |
|||
window.w = canvas.width = window.innerWidth; |
|||
return (window.h = canvas.height = window.innerHeight); |
|||
}; |
|||
window.addEventListener('resize', resizeWindow, false); |
|||
$(function() {return setTimeout(resizeWindow, 0);}); |
|||
range = function(a, b) {return (b - a) * Math.random() + a;}; |
|||
drawCircle = function(x, y, r) { |
|||
context.beginPath(); |
|||
context.arc(x, y, r, 0, PI_2, false); |
|||
context.fill(); |
|||
context.stroke(); |
|||
}; |
|||
xpos = 0.5; |
|||
document.onmousemove = function(e) {return (xpos = e.pageX / w);}; |
|||
window.requestAnimationFrame = (function() { |
|||
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { |
|||
return window.setTimeout(callback, 1000 / 60); |
|||
}; |
|||
})(); |
|||
Flake = (function() { |
|||
function Flake() { |
|||
this.r = ~~range(4, 8); |
|||
this.r2 = 2 * this.r; |
|||
this.replace(); |
|||
} |
|||
Flake.prototype.replace = function() { |
|||
this.x = range(-this.r2, w - this.r2); |
|||
this.y = range(-20, h - this.r2); |
|||
this.xmax = w - this.r; |
|||
this.ymax = h - this.r; |
|||
this.vx = range(0, 2) + 8 * xpos - 5; |
|||
this.vy = 0.5 * this.r + range(-0.5, 0.5); |
|||
}; |
|||
Flake.prototype.draw = function() { |
|||
var f; |
|||
this.x += this.vx; |
|||
this.y += this.vy; |
|||
if (this.y > this.ymax) { |
|||
this.replace(); |
|||
} |
|||
if (!((0 < (f = this.x) && f < this.xmax))) { |
|||
this.x = (this.x + this.xmax) % this.xmax; |
|||
} |
|||
drawCircle(~~this.x, ~~this.y, this.r); |
|||
}; |
|||
return Flake; |
|||
})(); |
|||
flakes = (function() { |
|||
var i, a = []; |
|||
for (i = 0; i < NUM_FLAKES; i++) |
|||
a.push(new Flake()); |
|||
return a; |
|||
})(); |
|||
window.step = function() { |
|||
var i, len; |
|||
context.clearRect(0, 0, w, h); |
|||
context.fillStyle = "rgba(255, 251, 153, 1)"; |
|||
context.lineWidth = 2; |
|||
context.strokeStyle = "rgba(0,0,0,0.25)"; |
|||
for (i = 0, len = flakes.length; i < len; i++) |
|||
flakes[i].draw(); |
|||
handle = requestAnimationFrame(step); |
|||
}; |
|||
handle = requestAnimationFrame(step); |
|||
console.log("Załadowano śnieg"); |
|||
})(); |
Wersja z 21:01, 25 gru 2017
/* <pre><nowiki> */
/** COMMON.JS **
* Plik zawiera funkcje używane w innych skryptach. Edytuj ostrożnie!
**/
/** KONFIGURACJE **
* Tu są zamieszczone zmienne konfiguracyjne do innych skryptów, aby nie powodować zbędnych zmian i tworzyć kopii skryptów z zewnątrz ze zmienionymi ustawieniami.
* Nie trzeba będzie podążać za każdą aktualizacją skryptu. Można łatwiej skorzystać ze skryptów z dev.wikia.com (FANDOM Open Source Library), a także z innych wiki, wpisując odpowiednią nazwę strony (dla dev poprzedzone "dev:").
* Kolejność ładowania JS: Skrypty Wikii -> Common.js -> <skórka>.js -> Wszystko z MediaWiki:ImportJS
**/
// Chwilowo brak...
/** PODSTAWOWE FUNKCJE **/
// FIXME: Zastąpić wszystkie odwołania funkcji składnią "wgUserGroups.indexOf(a)", a potem tą funkcję usunąć
function inGroup(a) {
return wgUserGroups.indexOf(a) != -1;
}
// FIXME: Zastąpić to poprzez użycie jQuery: $("#id")
function returnObjById(a) {
var b = null;
document.getElementById ? b = document.getElementById(a) : document.all ? b = document.all[a] : document.layers && (b = document.layers[a]);
return b;
}
// FIXME: Zastąpić to poprzez użycie jQuery: $(b).hasClass(c)
function hasClass(e, c) {
return $(e).hasClass(c);
}
// Odpowiednik PRURAL w JS-ie
function war(l, j, k, w) {
return (l == 1) ? j : (l % 100 >= 10 && l % 100 <= 20) ? w : (l % 10 > 1 && l % 10 < 5) ? k : w;
}
// Odpowiednik GENDER w JS-ie
function gnd(g, m, z, n) {
var X = {
"male": m,
"female": z,
"unknown": n
};
return (g) ? X[g] : n;
}
// FIXME: Zastąpić to poprzez użycie jQuery Timeago: $.timeago.inWords(l)
function dTemu(l) {
var N = Math.floor(l / 1000),
D = Math.floor(N / 86400),
H = Math.floor((N - D * 86400) / 3600),
I = Math.floor((N - D * 86400 - H * 3600) / 60);
return {
d: D,
h: H,
i: I,
text: (D ? D + " d" + war(D, "zień", "ni", "ni") + " " : "") + (H ? H + " godz. " : "") + (I ? I + " min" + (!H ? "ut" + war(I, "ę", "y", "") : "") + " temu" : "przed chwilą")
};
}
/* Archiwizacja Porum */
function zipForum() {
if (!("Forum" != wgCanonicalNamespace || "view" != wgAction || "Strona główna" == wgTitle))
if (!document.getElementById("naglowekforum") || document.getElementById("nieodkopuj")) {
var cae = $("#ca-edit a")[0];
cae.style.color = "DarkKhaki";
cae.href = "";
cae.title = "Ten wątek jest archiwalny, prosimy o nieedytowanie go.";
}
}
/* Wyświetlenie nazwy użytkownika ([[Szablon:USERNAME]]) */
function UserNameReplace() {
if ("undefined" == typeof disableUsernameReplace || !disableUsernameReplace && wgUserName) {
$("#bodyContent .insertusername").each(function() {
this.textContent = wgUserName;
});
}
}
/* Import CSS i Wyświetlany przycisk do usuwania */
function EKNuke() {
if (wgUserGroups.indexOf("sysop") != -1 || wgUserGroups.indexOf("content-moderator") != -1)
$(".nuke").css("display", "inline");
}
function Zab() {
var KL = {
e: wgRestrictionEdit.length ? (wgRestrictionEdit[0] == "autoconfirmed" ? 1 : 2) : 0,
m: wgRestrictionMove.length ? (wgRestrictionMove[0] == "autoconfirmed" ? 1 : 2) : 0
},
WK = [false, "półzabezpieczona przed edycją", "zabezpieczona przed edycją", "półzabezpieczona przed przeniesieniem", "półzabezpieczona", "zabezpieczona przed edycją, półzabezpieczona przed przeniesieniem", "zabezpieczona przed przeniesieniem", "półzabezpieczona przed edycją, zabezpieczona przed przeniesieniem", "zabezpieczona"],
ML = parseInt(String(KL.m) + String(KL.e), 3);
WK[ML] && $("<span class='restr'>Strona " + WK[ML] + ".</span>").css({
float: "right",
marginTop: "2px"
}).appendTo("#contentSub");
}
$(document).ready(function() {
zipForum();
UserNameReplace();
EKNuke();
$('input#searchInput').attr({
'placeholder': 'Szukaj'
});
// Dla Szablon:Youtube
$(".yt-iframe").each(function() {
this.innerHTML = "<iframe src=\"//www.youtube-nocookie.com/embed/" + this.id + "?rel=0&autohide=1&modestbranding=1\" frameborder=\"0\" allowfullscreen></iframe>";
});
});
if (typeof wgRestrictionEdit != "undefined" || typeof wgRestrictionMove != "undefined")
$("#contentSub").ready(Zab);
/*** Skrypty dotyczące Gry ***/
/* Zmiana tytułu "Gra:Gra" na samo "Gra" */
$(".ns-108 #firstHeading").ready(function() {
if (wgPageName == "Gra:Gra")
$("#firstHeading").text("Gra");
});
/* BEGIN Dynamic Navigation Bars (experimantal)
* pochodzi z http://en.wikipedia.org/wiki/MediaWiki:Monobook.js
* autorzy: http://en.wikipedia.org/w/index.php?title=MediaWiki:Monobook.js&action=history
* licencja: GFDL
*/
// TODO: USUNĄĆ! Przez 8 ostatnich lat...
// set up the words in your language
var NavigationBarHide = '[ Ukryj ]';
var NavigationBarShow = '[ Pokaż ]';
// 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 = 1;
// 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;
}
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (
var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling
) {
if (NavChild.className == 'NavPic') {
NavChild.style.display = 'none';
}
if (NavChild.className == 'NavContent') {
NavChild.style.display = 'none';
}
}
NavToggle.firstChild.data = NavigationBarShow;
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (
var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling
) {
if (NavChild.className == 'NavPic') {
NavChild.style.display = 'block';
}
if (NavChild.className == 'NavContent') {
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
for (var i = 0; NavFrame = document.getElementsByTagName("div")[i]; i++) {
// if found a navigation bar
if (NavFrame.className == "NavFrame") {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var NavToggleText = document.createTextNode(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].className == "NavHead") {
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar && !wgTitle.match(/Najbardziej poszablonowana/)) {
for (var i = 1; i <= indexNavigationBar; i++) {
toggleNavigationBar(i);
}
}
}
$("#bodyContent").ready(createNavigationBarToggleButton);
/** Collapsible tables **
* Description: Allows tables to be collapsed, showing only the header. See
* [[en:Wikipedia:NavFrame]].
* Maintainers: [[User:R. Koot]]
*/
var autoCollapse = 2;
var collapseCaption = "Ukryj";
var expandCaption = "Pokaż";
function collapseTable(tableIndex) {
var i;
var Button = document.getElementById("collapseButton" + tableIndex);
var Table = document.getElementById("collapsibleTable" + tableIndex);
if (!Table || !Button) { return false; }
var Rows = Table.rows;
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 i;
var tableIndex = 0;
var NavigationBoxes = {};
var Tables = document.getElementsByTagName("table");
for (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.style.styleFloat = "right";
Button.style.cssFloat = "right";
Button.style.fontWeight = "normal";
Button.style.textAlign = "right";
Button.style.width = "6em";
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]);
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;
}
}
}
}
}
jQuery(document).ready(createCollapseButtons);
/* Zmiana tytułu strony, autor: [[user:Vae]], Public Domain */
/* Użycie: {{nibytytul|Przykladowy tytul}} */
/* {{nibytytul|Przykladowy tytul|sub=Podtytul}} */
// TODO: Przerobić na jQuery, żeby ktoś chociaż wiedział, jak to ma działać
function uChangeTitle() {
var staryTytul = null;
staryTytul = returnObjById("firstHeading"); /* monobook */
if (!staryTytul) {
var h1 = document.body.getElementsByTagName("h1");
staryTytul = h1[0];
}
var nowyTytul = null;
nowyTytul = returnObjById("uTytulStrony");
if (nowyTytul && staryTytul) {
// sprawdzamy, czy zawiera cudzyslowy (np. strona edycji)
// jesli tak, podmieniamy tylko zawartosc cudzyslowow
if (staryTytul.innerHTML.match(/^.*?„.*?”.*?$/))
staryTytul.innerHTML = staryTytul.innerHTML.replace(/^(.*?)„.*?”(.*?)$/, "$1" + "„" + nowyTytul.innerHTML + "”" + "$2");
else if (staryTytul.innerHTML.match(/<span>/i))
staryTytul.innerHTML = staryTytul.innerHTML.replace(/^(.*?)<span>/, returnObjById("uTytulStrony").innerHTML + "<span>");
else
staryTytul.innerHTML = returnObjById("uTytulStrony").innerHTML;
staryTytul.style.backgroundColor = nowyTytul.style.backgroundColor;
staryTytul.style.color = nowyTytul.style.color;
// sprawdzamy, czy podtytul tez jest do zamiany
var ssub = returnObjById("uPodtytulStrony");
var sub = returnObjById("siteSub");
if (ssub && ssub.innerHTML && sub) {
sub.innerHTML = ssub.innerHTML;
}
}
if (returnObjById("uLogoStrony")) {
var a = (skin == "monobook") ? returnObjById("p-logo").getElementsByTagName('a')[0] : returnObjById("wiki_logo");
a.style.backgroundImage = "url(" + returnObjById("uLogoStrony").getElementsByTagName('img')[0].src + ")";
}
return;
}
addOnloadHook(uChangeTitle);
/* komentarz w formularzu rejestracji */
// TODO: Usunąć, bo proces rejestracji w FANDOM-ie się zmienił
$("#userlogin2").ready(function() {
if ($("#userlogin2").length) {
$('#wpNameTD').append('<p style="font-size:9pt;">Nazwa użytkownika <b>może</b> zawierać spacje oraz polskie znaki.</p>');
$('#wpEmailTD').append('<p style="font-size:9pt;">Podanie adresu e-mail nie jest obowiązkowe. Będzie on jednak porzebny, jeśli zapomnisz hasła.</p>');
}
});
/* Skrypt dla Szablon:Galeria */
function toggleImage(group, remindex, shwindex) {
jQuery("#ImageGroupsGr" + group + "Im" + remindex).hide();
jQuery("#ImageGroupsGr" + group + "Im" + shwindex).show();
}
function ImageGroup() {
jQuery('div.ImageGroup').each(function(i, group) {
var unitnode = jQuery('div.ImageGroupUnits', group).get(0);
if (unitnode == undefined) {
return 1;
}
var units = jQuery(unitnode).children('.center');
var count = units.get().length;
if (count <= 1) {
return 1;
}
units.each(function(j, currentimage) {
jQuery(currentimage).attr('id', "ImageGroupsGr" + i + "Im" + j);
var leftlink = jQuery('<a href="#"/>');
if (j != 0) {
leftlink.text('◀').click(function() {
toggleImage(i, j, j - 1);
return false;
});
}
var rightlink = jQuery('<a href="#"/>');
if (j != count - 1) {
rightlink.text('▶').click(function() {
toggleImage(i, j, j + 1);
return false;
});
}
jQuery('<div/>').css({
'font-size': '110%',
'font-weight': 'bold'
})
.append(leftlink)
.append('<samp>(' + (j + 1) + '/' + count + ')</samp>')
.append(rightlink)
.prependTo(jQuery(currentimage));
if (j != 0) {
jQuery(currentimage).hide().addClass('noprint');
}
});
});
}
$(ImageGroup);
/* </nowiki></pre> */