Jump to content

MediaWiki:Common.js: Difference between revisions

From FC1
No edit summary
No edit summary
Line 10: Line 10:


el.innerHTML = chars.map((c, i) => {
el.innerHTML = chars.map((c, i) => {
    // Add font-weight and font-style inheritance here
    let styles = [
let styles = [
      `display: inline-block`,  
  `display: inline-block`,  
      `position: relative`,
  `position: relative`,
      `color: inherit`,  
  `color: inherit`,     // Crucial for the 'Color' param to work
      `background: transparent` // Letters should have transparent backgrounds to show the container background
  `background: inherit` // Crucial for the 'Background' param to work
    ];
];
let delays = [];
let delays = [];
      
      
     if (isWavy) {
     if (isWavy) {

Revision as of 17:08, 16 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');

  // Kill animation on the parent so it doesn't move as a block
  el.style.setProperty('animation', 'none', 'important');

	el.innerHTML = chars.map((c, i) => {
	    let styles = [
	      `display: inline-block`, 
	      `position: relative`,
	      `color: inherit`, 
	      `background: transparent` // Letters should have transparent backgrounds to show the container background
	    ];
	let delays = [];
    
    if (isWavy) {
      const waveDelay = -((i / total) * 1).toFixed(2);
      delays.push(`${waveDelay}s`);
    }
    
    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`);
    }

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

    // Apply the crucial animation-delay with !important
    if (delays.length > 0) {
      span.style.setProperty('animation-delay', delays.join(', '), 'important');
    }

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

$(document).ready(function() {
    // 200ms gives the wiki a bit more breathing room to load CSS
    setTimeout(function() {
        $('.rainbow, .wavy').each(function() { 
            applyEffects(this); 
        });
    }, 200); 
});