MediaWiki:Common.js: Difference between revisions

From LYC4NTHR0PYZ
No edit summary
Tags: Mobile edit Mobile web edit
No edit summary
Line 93: Line 93:
             hue = (hue + 2) % 360;
             hue = (hue + 2) % 360;
         }, 20);
         }, 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);
     });
     });
});
});

Revision as of 01:43, 20 March 2026

// == 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);
    });
});