Jump to content

MediaWiki:Common.js: Difference between revisions

From FC1
No edit summary
No edit summary
Line 28: Line 28:
         }
         }
          
          
        if (isRainbow) {
if (isRainbow) {
            const hue = Math.round((i / total) * 360);
      // FIXED: Uses a fixed multiplier (-0.15) so the rainbow 'flows'
            const rainbowDelay = -((i / total) * 3).toFixed(2);
      // left-to-right at a consistent width across the text.
            styles.push(`color: hsl(${hue}, 100%, 60%)`);
      const rainbowDelay = (i * -0.15).toFixed(2);
            delays.push(`${rainbowDelay}s`);
     
        }
      // We remove the static HSL calculation here because the
      // 'hue-cycle' animation in your CSS handles the color shifting.
      delays.push(`${rainbowDelay}s`);
    }


         const content = (c === ' ') ? ' ' : c;
         const content = (c === ' ') ? ' ' : c;

Revision as of 19:24, 16 March 2026

/* Any JavaScript here will be loaded for all users on every page load. */
document.querySelectorAll('.text-animation-container').forEach(applyEffects);

function applyEffects(el) {
    const hasEffect = ['wavy', 'rainbow', 'force-glow', 'force-shadow'].some(cls => el.classList.contains(cls));
    if (!hasEffect) return;

    const chars = el.textContent.split('');
    const total = chars.length;
    const isRainbow = el.classList.contains('rainbow');
    const isWavy = el.classList.contains('wavy');

    el.style.setProperty('animation', 'none', 'important');

    el.innerHTML = chars.map((c, i) => {
        let styles = [
            `display: inline-block`, 
            `position: relative`,
            `color: inherit`
        ];
        let delays = [];
        
        if (isWavy) {
            // FIXED: Using -0.15 creates a broad wave that flows through phrases 
            // instead of stretching one wave over the whole length.
            const waveDelay = (i * -0.15).toFixed(2);
            delays.push(`${waveDelay}s`);
        }
        
		if (isRainbow) {
	      // FIXED: Uses a fixed multiplier (-0.15) so the rainbow 'flows' 
	      // left-to-right at a consistent width across the text.
	      const rainbowDelay = (i * -0.15).toFixed(2);
	      
	      // We remove the static HSL calculation here because the 
	      // 'hue-cycle' animation in your CSS handles the color shifting.
	      delays.push(`${rainbowDelay}s`);
	    }

        const content = (c === ' ') ? ' ' : c;
        const span = document.createElement('span');
        span.innerHTML = content;
        
        styles.forEach(s => {
            const [prop, val] = s.split(': ');
            span.style.setProperty(prop, val, 'important');
        });

        if (delays.length > 0) {
            span.style.setProperty('animation-delay', delays.join(', '), 'important');
        }

        return span.outerHTML;
    }).join('');
}

$(document).ready(function() {
    // UPDATED: Added glow and shadow to the trigger list
    setTimeout(function() {
        $('.rainbow, .wavy, .force-glow, .force-shadow').each(function() { 
            applyEffects(this); 
        });
    }, 200); 
});