MediaWiki:Common.js

From LYC4NTHR0PYZ
Revision as of 02:10, 20 March 2026 by Mostknown663 (talk | contribs)

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)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// == Confetti Effect ==
( function () {
    'use strict';

    var canvas, ctx, particles, animId;

    function random( min, max ) {
        return Math.random() * ( max - min ) + min;
    }

    function createParticle() {
        return {
            x:     random( 0, window.innerWidth ),
            y:     random( -20, 0 ),
            w:     random( 7, 14 ),
            h:     random( 4, 8 ),
            color: 'hsl(' + Math.floor( random( 0, 360 ) ) + ',90%,60%)',
            speed: random( 2, 6 ),
            angle: random( -0.4, 0.4 ),
            spin:  random( -0.15, 0.15 ),
            rot:   random( 0, Math.PI * 2 ),
            wobble: random( 0, Math.PI * 2 ),
            wobbleSpeed: random( 0.05, 0.12 )
        };
    }

    function launch( count ) {
        canvas = document.createElement( 'canvas' );
        canvas.style.cssText =
            'position:fixed;top:0;left:0;width:100%;height:100%;' +
            'pointer-events:none;z-index:99999;';
        canvas.width  = window.innerWidth;
        canvas.height = window.innerHeight;
        document.body.appendChild( canvas );
        ctx = canvas.getContext( '2d' );

        particles = [];
        for ( var i = 0; i < ( count || 150 ); i++ ) {
            particles.push( createParticle() );
        }

        function step() {
            ctx.clearRect( 0, 0, canvas.width, canvas.height );
            var alive = false;

            for ( var j = 0; j < particles.length; j++ ) {
                var p = particles[ j ];
                p.y       += p.speed;
                p.x       += Math.sin( p.wobble ) * 1.5;
                p.wobble  += p.wobbleSpeed;
                p.rot     += p.spin;

                if ( p.y < canvas.height + 20 ) {
                    alive = true;
                    ctx.save();
                    ctx.translate( p.x, p.y );
                    ctx.rotate( p.rot );
                    ctx.fillStyle = p.color;
                    ctx.fillRect( -p.w / 2, -p.h / 2, p.w, p.h );
                    ctx.restore();
                }
            }

            if ( alive ) {
                animId = requestAnimationFrame( step );
            } else {
                cancelAnimationFrame( animId );
                canvas.parentNode.removeChild( canvas );
            }
        }

        step();

        window.addEventListener( 'resize', function () {
            canvas.width  = window.innerWidth;
            canvas.height = window.innerHeight;
        } );
    }

    // Fire confetti when the DOM is ready
    mw.loader.using( 'mediawiki.util' ).done( function () {
        launch( 150 );
    } );

}() );

mw.hook('wikipage.content').add(function() {
    // Add class "rainbow-text" to any element you want animated
    document.querySelectorAll('.rainbow-text').forEach(function(el) {
        let hue = 0;
        setInterval(function() {
            el.style.color = 'hsl(' + hue + ', 100%, 50%)';
            hue = (hue + 2) % 360;
        }, 20);
    });
});

mw.hook('wikipage.content').add(function() {
    document.querySelectorAll('.glitch-text').forEach(function(el) {
        const original = el.textContent;
        const glitchChars = '!<>-_\\/[]{}—=+*^?#@$%&';

        setInterval(function() {
            if (Math.random() > 0.85) { // Trigger glitch ~15% of the time
                let glitched = '';
                for (let i = 0; i < original.length; i++) {
                    if (Math.random() > 0.8) {
                        glitched += glitchChars[Math.floor(Math.random() * glitchChars.length)];
                    } else {
                        glitched += original[i];
                    }
                }
                el.textContent = glitched;
                setTimeout(function() {
                    el.textContent = original; // Restore after brief glitch
                }, 80);
            }
        }, 150);
    });
});

mw.hook('wikipage.content').add(function() {
    document.querySelectorAll('.rainbow-glitch').forEach(function(el) {
        const original = el.textContent;
        const glitchChars = '!<>-_\\/[]{}—=+*^?#@$%&';
        let hue = 0;

        // Rainbow cycling
        setInterval(function() {
            el.style.color = 'hsl(' + hue + ', 100%, 55%)';
            el.style.textShadow = '2px 0 hsl(' + ((hue + 120) % 360) + ', 100%, 50%), -2px 0 hsl(' + ((hue + 240) % 360) + ', 100%, 50%)';
            hue = (hue + 3) % 360;
        }, 30);

        // Glitch effect
        setInterval(function() {
            if (Math.random() > 0.85) {
                let glitched = '';
                for (let i = 0; i < original.length; i++) {
                    glitched += Math.random() > 0.75
                        ? glitchChars[Math.floor(Math.random() * glitchChars.length)]
                        : original[i];
                }
                el.textContent = glitched;
                setTimeout(() => { el.textContent = original; }, 100);
            }
        }, 200);
    });
}); mw.hook('wikipage.content').add(function() {
    const canvas = document.createElement('canvas');
    canvas.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:9999';
    document.body.appendChild(canvas);
    const ctx = canvas.getContext('2d');
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;

    // Load your image
    const img = new Image();
    img.src = 'Jinx.png’

    const flakes = Array.from({length: 50}, () => ({
        x: Math.random() * canvas.width,
        y: Math.random() * canvas.height,
        size: Math.random() * 24 + 12,   // image size in px
        speed: Math.random() * 1.5 + 0.5,
        rotation: Math.random() * Math.PI * 2,
        rotSpeed: (Math.random() - 0.5) * 0.05  // spin speed
    }));

    function draw() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        flakes.forEach(f => {
            ctx.save();
            ctx.translate(f.x, f.y);
            ctx.rotate(f.rotation);
            ctx.globalAlpha = 0.85;
            ctx.drawImage(img, -f.size / 2, -f.size / 2, f.size, f.size);
            ctx.restore();

            f.y += f.speed;
            f.rotation += f.rotSpeed;
            if (f.y > canvas.height + f.size) f.y = -f.size;
        });
        requestAnimationFrame(draw);
    }

    img.onload = draw; // wait for image to load before starting
});