MediaWiki:Common.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
// FLY LOGIC //
// constants
var flyDim = 100;
var flySizeVar = 0.25;
var flyMaxVelAdd = 2.5;
var flySnapToAnchorDamp = 50.0;
var flyMouseDistThres = flyDim * 3;
var shadowOff = 20;
var flyParameters = {
min: 0,
max: 2
};
// static vars
var xDistThres = window.innerWidth / 3;
var yDistThres = window.innerHeight / 3;
var mousePos;
// https://stackoverflow.com/questions/7790725/javascript-track-mouse-position
document.onmousemove = handleMouseMove;
function handleMouseMove(event) {
var dot, eventDoc, doc, body, pageX, pageY;
event = event || window.event; // IE-ism
// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}
mousePos = {
x: event.pageX,
y: event.pageY
};
}
window.addEventListener("resize", function() {
xDistThres = window.innerWidth / 5;
yDistThres = window.innerHeight / 5;
})
function clamp(x,a,b)
{
return Math.max(a,Math.min(x,b));
}
function updateFlyPos(flyDiv)
{
flyDiv.style.left = flyDiv.getAttribute("xpos") + "px";
flyDiv.style.top = flyDiv.getAttribute("ypos") + "px";
}
function updateFlyAnchor(flyDiv)
{
flyDiv.setAttribute("xanchor", window.innerWidth / 2);
flyDiv.setAttribute("yanchor", window.innerHeight / 2);
}
/* Any JavaScript here will be loaded for all users on every page load. */
function createFly()
{
var flyDiv = document.createElement("div");
flyDiv.style.position = 'fixed';
flyDiv.style.opacity = 0.0;
flyDiv.className = "fly";
flyDiv.setAttribute("xpos",Math.random() * window.innerWidth);
flyDiv.setAttribute("ypos",Math.random() * window.innerHeight);
flyDiv.setAttribute("xvel","0");
flyDiv.setAttribute("yvel","0");
flyDiv.setAttribute("opacity","0");
var size = 1.0 + (Math.random() * flySizeVar * 2 - flySizeVar);
flyDiv.style.width = (flyDim * (1.0 + flySizeVar)) + "px";
flyDiv.style.height = (flyDim * (1.0 + flySizeVar)) + "px";
flyDiv.setAttribute("size", size);
var flyAnim = document.createElement("img");
flyAnim.src = "/images/9/9e/AnimFly.gif";
flyAnim.style.width = flyDim * size + "px";
flyAnim.style.height = "auto";
flyAnim.style.left = -shadowOff + "px";
flyAnim.style.top = -shadowOff + "px";
flyAnim.style.position = "relative";
if(Math.random() < 0.5)
{
flyDiv.className = "fly fly-rev";
}
flyDiv.appendChild(flyAnim);
flyAnim.addEventListener("click", function(event)
{
var flyDiv = event.target.parentElement;
flyDiv.children[0].src = "https://tboigodmode.wiki.gg/images/6/6a/BloodExplode.gif";
clearInterval(Number(flyDiv.getAttribute("intervalID")));
flyDiv.className = "noclick";
setTimeout(function(flyDiv){
flyDiv.remove();
}, 500, flyDiv);
setTimeout(function(flyDiv) {
var size = Number(flyDiv.getAttribute("size"));
flyDiv.setAttribute("xpos",Number(flyDiv.getAttribute("xpos")) - flyDim * 0.5 * size);
flyDiv.setAttribute("ypos",Number(flyDiv.getAttribute("ypos")) - flyDim * 0.5 * size);
updateFlyPos(flyDiv);
flyDiv.children[0].style.width = flyDim * 2 * size + "px";
}, 100, flyDiv);
});
window.addEventListener("resize", function(event)
{
updateFlyAnchor(flyDiv);
});
flyDiv.setAttribute("intervalID",setInterval(function(flyDiv){
flyDiv.setAttribute("opacity",Number(flyDiv.getAttribute("opacity")) + 0.01);
flyDiv.style.opacity = clamp(Number(flyDiv.getAttribute("opacity")), 0.0, 1.0);
var centOff = Number(flyDiv.getAttribute("size")) * flyDim / 2;
var x = Number(flyDiv.getAttribute("xpos")) + centOff;
var y = Number(flyDiv.getAttribute("ypos")) + centOff;
var xanch = Number(flyDiv.getAttribute("xanchor"));
var yanch = Number(flyDiv.getAttribute("yanchor"));
var xvel = Number(flyDiv.getAttribute("xvel"));
var yvel = Number(flyDiv.getAttribute("yvel"));
var xrand = Math.floor(Math.random() * 100);
var yrand = Math.floor(Math.random() * 100);
var targX = (Math.abs(xanch - x) > xDistThres ? clamp((xanch - x) / flySnapToAnchorDamp, -1, 1) : (Math.random() - 0.5)) * flyMaxVelAdd;
var targY = (Math.abs(yanch - y) > yDistThres ? clamp((yanch - y) / flySnapToAnchorDamp, -1, 1) : (Math.random() - 0.5)) * flyMaxVelAdd;
if(mousePos && Math.abs(mousePos.x - x) < flyMouseDistThres && Math.abs(mousePos.y - y) < flyMouseDistThres)
{
targX = targX * 0.75 + clamp((mousePos.x - x) / flySnapToAnchorDamp,-flyMaxVelAdd,flyMaxVelAdd) * 0.25;
targY = targY * 0.75 + clamp((mousePos.y - y) / flySnapToAnchorDamp,-flyMaxVelAdd,flyMaxVelAdd) * 0.25;
}
flyDiv.setAttribute("xvel",xvel * 0.9 + targX);
flyDiv.setAttribute("yvel",yvel * 0.9 + targY);
flyDiv.setAttribute("xpos",x + xvel - centOff);
flyDiv.setAttribute("ypos",y + yvel - centOff);
updateFlyPos(flyDiv);
},20,flyDiv));
updateFlyPos(flyDiv);
updateFlyAnchor(flyDiv);
document.body.appendChild(flyDiv);
}
var loc = window.location.href;
if(loc.includes("Main_Page"))
{
var numFlies = Math.floor(Math.random() * (flyParameters.max - flyParameters.min)) + flyParameters.min;
for(var i = 0; i <= numFlies; ++i)
{
createFly();
}
}
var mobileWidth = 720;
var mwPanel = document.getElementById("mw-panel");
var content = document.getElementById("content");
var mobileLayoutFunc = function(event) {
if(window.innerWidth < mobileWidth)
{
mwPanel.className = "mobile";
content.style = "font-size: 1em !important;";
}
else
{
mwPanel.className = "";
content.style = "";
}
};
var updateMW = function()
{
var pos = getVerticalScrollPercentage(document.body) / 100.0;
var contentBound = content.children[0].children[0].getBoundingClientRect();
var panelBound = mwPanel.getBoundingClientRect();
if(mwPanel.className != "mobile") {
if(mwPanel.getAttribute("intervalID") == ""){
mwPanel.style = "";
// add to navigation
mwPanel.remove();
document.getElementById("mw-navigation").appendChild(mwPanel);
}
var min = 80;
var max = 200;
var cur = contentBound.bottom - (panelBound.bottom - panelBound.y);
// mwPanel.style.top = Math.max(min, Math.min(max, cur)) + "px";
mwPanel.style.top = Math.max(min, Math.min(max, panelBound.y + panelSpeed,(cur - panelBound.y) / 5.0)) + "px";
// if(mwPanel.getAttribute("intervalID") != "")
// {
// clearInterval(Number(mwPanel.getAttribute("intervalID")));
// }
// mwPanel.setAttribute("intervalID",setInterval(function(mwPanel,cur){
// var bound = mwPanel.getBoundingClientRect();
// mwPanel.style.top = bound.y + Math.max(-panelSpeed,Math.min(panelSpeed,(cur - bound.y) / 10.0)) + "px";
// if(mwPanel.style.top == cur)
// {
// clearInterval(Number(mwPanel.getAttribute("intervalID")));
// }
// },20,mwPanel,Math.max(min, Math.min(max, cur))));
}
else
{
if(mwPanel.getAttribute("intervalID") != ""){
clearInterval(Number(mwPanel.getAttribute("intervalID")));
mwPanel.setAttribute("intervalID","");
mwPanel.style = "top: 40%; width: 70% !important; margin: auto 10% !important;";
// add to accordion
mwPanel.remove();
document.getElementById("p-personal").children[1].appendChild(mwPanel);
}
}
}
window.addEventListener('resize', mobileLayoutFunc, true);
window.addEventListener('scroll', updateMW, true);
window.addEventListener('resize', updateMW, true);
mobileLayoutFunc();
updateMW();
var header = document.getElementById("wikigg-header");
var panelSpeed = 5.0; //max and min panel speed
// mw-panel movement logic and wiki gg header back logic
document.onscroll = function(){
var pos = getVerticalScrollPercentage(document.body) / 100.0;
updateMW();
if(pos > 0)
{
header.className = "back";
}
else
{
header.className = "";
}
}
function getVerticalScrollPercentage( elm ){
var p = elm.parentNode;
return (elm.scrollTop || p.scrollTop) / (p.scrollHeight - p.clientHeight ) * 100
}
//google font api - Ubuntu
var font_links = [ "https://fonts.googleapis.com/css2?family=Ubuntu:wght@500&display=swap" ];
if(font_links.length > 0)
{
var link1 = document.createElement("link");
link1.href = "https://fonts.googleapis.com";
link1.rel = "preconnect";
var link2 = document.createElement("link");
link2.href = "https://fonts.gstatic.com";
link2.rel = "preconnect";
link2.setAttribute("crossorigin","");
document.head.appendChild(link1);
document.head.appendChild(link2);
for (var i = 0; i < font_links.length; ++i)
{
var fontLink = document.createElement("link");
fontLink.href = font_links[i];
fontLink.rel = "stylesheet";
document.head.appendChild(fontLink);
}
}