Jump to content

MediaWiki:Common.js: Difference between revisions

From FC1
No edit summary
No edit summary
Line 7: Line 7:


   el.innerHTML = chars.map((c, i) => {
   el.innerHTML = chars.map((c, i) => {
     let styles = [];
     let styles = [`display: inline-block`];
     let delays = [];
     let delays = [];
      
      
     // Calculate Rainbow
     // Order matters! Matches the order in CSS 'animation' property
   
    // 1. Wavy Delay
    if (isWavy) {
      const waveDelay = -((i / total) * 1).toFixed(2);
      delays.push(`${waveDelay}s`);
    }
   
    // 2. Rainbow Delay
     if (isRainbow) {
     if (isRainbow) {
       const hue = Math.round((i / total) * 360);
       const hue = Math.round((i / total) * 360);
Line 16: Line 24:
       styles.push(`color: hsl(${hue}, 100%, 60%)`);
       styles.push(`color: hsl(${hue}, 100%, 60%)`);
       delays.push(`${rainbowDelay}s`);
       delays.push(`${rainbowDelay}s`);
    }
   
    // Calculate Wavy
    if (isWavy) {
      const waveDelay = -((i / total) * 1).toFixed(2); // Negative delay starts animation mid-cycle
      delays.push(`${waveDelay}s`);
     }
     }


    // Combine delays into a single animation-delay property
     if (delays.length > 0) {
     if (delays.length > 0) {
       styles.push(`animation-delay: ${delays.join(', ')}`);
       styles.push(`animation-delay: ${delays.join(', ')}`);

Revision as of 08:06, 14 March 2026

/* Any JavaScript here will be loaded for all users on every page load. */
function applyEffects(el) {
  const chars = el.textContent.split('');
  const total = chars.length;
  const isRainbow = el.classList.contains('rainbow');
  const isWavy = el.classList.contains('wavy');

  el.innerHTML = chars.map((c, i) => {
    let styles = [`display: inline-block`];
    let delays = [];
    
    // Order matters! Matches the order in CSS 'animation' property
    
    // 1. Wavy Delay
    if (isWavy) {
      const waveDelay = -((i / total) * 1).toFixed(2);
      delays.push(`${waveDelay}s`);
    }
    
    // 2. Rainbow Delay
    if (isRainbow) {
      const hue = Math.round((i / total) * 360);
      const rainbowDelay = -((i / total) * 3).toFixed(2);
      styles.push(`color: hsl(${hue}, 100%, 60%)`);
      delays.push(`${rainbowDelay}s`);
    }

    if (delays.length > 0) {
      styles.push(`animation-delay: ${delays.join(', ')}`);
    }

    return `<span style="${styles.join('; ')}">${c === ' ' ? '&nbsp;' : c}</span>`;
  }).join('');
}

$(document).ready(function() {
  $('.rainbow, .wavy').each(function() { applyEffects(this); });
});