eternal september banner
Main Page | Bulletin Board | About | Opening Tour | Label | Listserv



Random Article


11B-X-1371 | 2001 | 23-enigma | ARPANET | Abercrombie | About | Advertising | Ai | Alban-berg | Alejandro-jodorowsky | Alien | Altered-states | Alters | Ambien | Andrei-tarkovsky | Anima | Anton-webern | Apeirophobia | Aphasia | Apocrypha | Archangel-michael | Arizona | Arnold-schwarzenegger | Ashtar | Asparagaceae | Asphodel-meadows | Atari | Automaton | Baconator | Baudelaire | Behold a Pale Horse | Bell-labs | Berhold-brecht | Berserk | Berserk! ▶︎ | Beta page | Bicameralism | Bitcoin | Black-drop | Black-screen-o'-death | Blade-runner | BladeEnc | Bloomin-onion | Boltzmann Brain | Bomaye | Bowerbirds | Brain-virus | Bruges | Brutalism | Bulletin-board | Burgundy-car-interior | Byrds-of-paradise | CIA | COBOL | COINTELPRO | Cannabis | Captain-crunch | Cave of Brahma | Cenobites | Cerulean-fog ▶︎ | Chemtrails | Chernobyl | Chris-marker | Christian Family Research Council | Christianity | Chrysanthemum | Cicada-3301 | Cicadas | Cimmerian | Circuit-city | Cocobolo | Cocteau-twins | Code-x-digital | Codex | Codex-exoniensis | Codicil | Cold-slither | Collexion-III ▶︎ | Collexion-II ▶︎ | Collexion-IV ▶︎ | Collexion-I ▶︎ | Colonel-john-matrix | Coltan | Combahee-river | Contra | Copiale-cipher | Coral-gables | Cotton-mather | Credits | Crib-death | Cross-of-akht | Crystal-pepsi | Cult-of-the-dead-cow | Cybernetics | Dactyls | Daemon | Dallas | David Icke | Death-of-optimus | Deep-blue | Dekalog | Delorean | Destro | Destroy! | Dharma | Dialectic | Dido | Digital | Digital-riptide | Dikembe-mutombo | Dillinger-is-dead | Directory | Disclaimer | Division-bell | Dokken | Dolly | Doppler | Egyptian Helicopter | Ehspf | Elektroshock-therapy | Elysium | Enneagram | Enochian | Eraserhead | Error | Essential-oils | Et | Eternalblue | Eucharist | Event-horizon | Exile from Paradise | FBI | Faye-dunaway | Fleetwood-mac | Freeside | Galactus | Gallowglass | Gauntlet | Generation x | George-van-tassel | Ghost-from-three-men-and-a-baby | Gi-joe | Giant Panther | Gnosticism | Gowanus-canal | Gravitys-rainbow | Grey-waves | Gyokusai | HAL ▶︎ | Hadean-lands | Hades | Hair-metal | Hatra | He-man | Healthgoth | Helicopter-fetish | Helikopter-streichquartett | Hotline-connect | Hysteria | I-Antichrist | IBM | Icer-addis | Illuminati-quartet | Imago | Imbruglia | Immanuel-velikovsky | Incubus | Integraton | Internet | Internet-relay-chat | Jan-michael-vincent | Japanese-streetwear | Jazzercise | Jesus of Nazareth | John-david-mcafee | Jon-and-kate | Joybubbles | Judgement-day ▶︎ | Kareem-abdul-jabbar | Karlheinz-stockhausen | Kinesiology | Klf | Knight-ridder | Knight-rider | Konami | Konami Dream | Kosciuszko-bridge | Kumbaya | Lawns | Legions-of-osiris | Lesser-key-of-solomon | Light-singing | Lindisfarne-gospel | Linguistics | Listserv | Lord-digital | Los Angeles | Luciferin | Lyric-suite | Ma-bell | Mailer-daemon | Main Page | Marduk | Massed-vulture | Maudlin Show | Max-headroom | Mech | Meconium | Mega-man-2 | Memorex | Meshes-of-the-afternoon | Metal-gear-solid | Metatron | Metroid | Michael-j-fox | Microsoft | Microsoft-solitaire | Millennium-rift | MindRape | Mindvox | Minotaur | Molly-millions | Mountain Dew | Murad-Jacob-Kevorkian | My-nepenthe | NESticle | NY1 | Narcotics | NeXT BlackBox3 | Neon-babylon | Neon-genesis-evangelion | Nes | Nettle | New Jerusalem | Ninel-kulagina | Nirvana | No-wave | No-wire-hangers-ever | Noid | Nordgen | Normcore | Obelisk | Oberheim-SEM | Obolus | Octagon-of-dex | Operation-mindcrime | Operation-sundevil | Ophite-diagrams | Ornithomancy | Otherworld | PARCO | PARCO-collexion | Palimpsest | Panopticon | Parallax | Paresthesia | Pazuzu | Perfect-strangers | Periaqueductal-grey | Phage | Phantom-archives | Phantom-city | Phantom Access Technologies | Phiber-optik | Phowa | Phreaking | Pokemon | Pole-position ▶︎ | Power-electronics | Public-enemy-era | Quantum | Quantum-loop-gravity | Radioshack | Ragnarok | Rammellzee | Ramparts-magazine | Relational Aesthetics | Ringu | Robert-Anton-Wilson | Robert-john-mutt-lange | Roger-bacon | Ronald-reagan | Rorschach-test | Rose-pattern | Running-cola | Rygar | Saccharin | Sacred geometry | Saddam Hussein | Saraya-sarhaddi-nelson | Satanism | Saturn's Hexagon | Schizophrenia | Sega | Septuagint | Serialism | Sex-with-Satan | Shamir | Shepherds-of-apocrypha | Signal-hijacking | Silicon-valley | Silmarillion | Silurian Hypothesis | Simulation-theory | Skinemax | Skynet-syndrome | Slideshow demo | Snow-crash | Socotra | Solaris | Solemn Simulacrum | Solitaire ▶︎ | Solomons-key | Southern-incident | Spaceships-of-ezekiel | Spectral-peaks | Spectre-complex | Ssynthündßäx | Stalker | Steven-bochco | Steven-seagal | Studs-terkel | Susumu Hirasawa | Sword-of-damocles | T-1-carrier | Technostalgia | Terminator | Tetra-denim | The-Song-of-the-Cow | The-baroness | The-exorcist | The-iceman-cometh | The-legion-of-doom | The-moldau | The-self | The-waste-land | The-woman-in-the-dunes | The Bogdanov Twins | Thomas-kinkade | Tikrit | Timeline | Tobo-bottleneck | Top-gun | Total-freedom | Tottori Sand Dunes | Tower-of-babel | Transformers | Tron | True-hunger | UNTITLED ▶︎ | Un-chien-andalou | UseNet | Valhalla | Valkyrie | Vannevar-bush | VaporTech | Vaporwave | Venetian-pool | Venusian-enigmata | Videotex | Viduus | Viewtron | Voices-in-my-head | Voynich-manuscript | Vpd | W.A.S.P. | Warner-Amex Satellite Productions's Music Television | Weld-am-draht | White-columns | Wight | William-gibson | Winamp | Wintermute | Xenakis | Y2K | Yukio-mishima | Zelda | Zellige | Ziggurat
No edit summary
No edit summary
Line 162: Line 162:
         // Create the form HTML
         // Create the form HTML
         var formHTML = '<form method="POST" action="https://script.google.com/macros/s/AKfycbzGYYHbCtVTjXPjTcYKA3wuK6ZAfKIiluw6sZKuWTZzVFnlnl-V9UYsVEroi1MzyIoUhg/exec">' +
         var formHTML = '<form method="POST" action="https://script.google.com/macros/s/AKfycbzGYYHbCtVTjXPjTcYKA3wuK6ZAfKIiluw6sZKuWTZzVFnlnl-V9UYsVEroi1MzyIoUhg/exec">' +
             '<input name="Email" type="email" placeholder="Email" required>' +
             '<input name="Email" type="email" placeholder="Email" required>' + '<br>' +
             '<input name="Name" type="text" placeholder="Name" required>' +
             '<input name="Name" type="text" placeholder="Name" required>' + '<br>' + '<input name="Comment" type="text" placeholder="Comment" required>' +
             '<button type="submit">Send</button>' +
             '<button type="submit">Send</button>' +
             '</form>';
             '</form>';

Revision as of 22:32, 15 August 2025

function fixViewport() {
    // Remove all viewport tags except the responsive one
    var viewportTags = document.querySelectorAll('meta[name="viewport"]');
    for (var i = 0; i < viewportTags.length; i++) {
        var tag = viewportTags[i];
        if (tag.content.indexOf('width=device-width') === -1) {
            tag.parentNode.removeChild(tag);
        }
    }
    
    // Force browser to reprocess the remaining viewport tag
    var goodViewport = document.querySelector('meta[name="viewport"]');
    if (goodViewport) {
        var content = goodViewport.getAttribute('content');
        goodViewport.setAttribute('content', '');
        goodViewport.setAttribute('content', content);
    }
}

if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', fixViewport);
} else {
    fixViewport();
}

document.addEventListener('DOMContentLoaded', function() {
    // Remove the viewport tag with width=1000
    const badViewport = document.querySelector('meta[name="viewport"][content*="width=1000"]');
    if (badViewport) {
        badViewport.remove();
    }
});

// MediaWiki Audio Player Controller

(function() {
  function initGallery() {
    var galleries = document.querySelectorAll('.collapsible-gallery');
    
    galleries.forEach(function(gallery) {
      // Skip if already initialized
      if (gallery.dataset.initialized) return;
      gallery.dataset.initialized = 'true';
      
      var slides = gallery.querySelectorAll('.gallery-slide');
      var container = gallery.querySelector('.gallery-container');
      var currentIndex = 0;
      
      // Create navigation controls using JavaScript
      var controls = document.createElement('div');
      controls.className = 'gallery-controls';
      
      var prevBtn = document.createElement('div');
      prevBtn.className = 'gallery-btn gallery-prev';
      prevBtn.innerHTML = '&lt; Previous';
      prevBtn.setAttribute('role', 'button');
      prevBtn.setAttribute('tabindex', '0');
      
      var counter = document.createElement('div');
      counter.className = 'gallery-counter';
      
      var nextBtn = document.createElement('div');
      nextBtn.className = 'gallery-btn gallery-next';
      nextBtn.innerHTML = 'Next &gt;';
      nextBtn.setAttribute('role', 'button');
      nextBtn.setAttribute('tabindex', '0');
      
      controls.appendChild(prevBtn);
      controls.appendChild(counter);
      controls.appendChild(nextBtn);
      
      // Insert controls before the container
      gallery.insertBefore(controls, container);
      
      // Initialize counter
      updateCounter();
      
      // Set up event listeners
      prevBtn.addEventListener('click', showPreviousSlide);
      nextBtn.addEventListener('click', showNextSlide);
      
      // Keyboard support
      prevBtn.addEventListener('keydown', function(e) {
        if (e.key === 'Enter' || e.key === ' ') {
          e.preventDefault();
          showPreviousSlide();
        }
      });
      
      nextBtn.addEventListener('keydown', function(e) {
        if (e.key === 'Enter' || e.key === ' ') {
          e.preventDefault();
          showNextSlide();
        }
      });
      
      function showSlide(index) {
        // Hide all slides
        slides.forEach(function(slide) {
          slide.classList.remove('showing');
        });
        
        // Show the selected slide
        slides[index].classList.add('showing');
        
        // Update counter
        updateCounter();
      }
      
      function showNextSlide() {
        currentIndex = (currentIndex + 1) % slides.length;
        showSlide(currentIndex);
      }
      
      function showPreviousSlide() {
        currentIndex = (currentIndex - 1 + slides.length) % slides.length;
        showSlide(currentIndex);
      }
      
      function updateCounter() {
        counter.textContent = (currentIndex + 1) + ' / ' + slides.length;
      }
    });
  }
  
  // Handle MediaWiki specific environment
  if (window.mw && window.mw.hook) {
    mw.hook('wikipage.content').add(initGallery);
  } else {
    document.addEventListener('DOMContentLoaded', initGallery);
  }
  
  // Handle collapsibles being expanded
  document.addEventListener('click', function(e) {
    if (e.target.classList.contains('mw-collapsible-toggle') || 
        e.target.closest('.mw-collapsible-toggle')) {
      setTimeout(initGallery, 150);
    }
  });
  
  // Also try to initialize on any content changes
  var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
      if (mutation.type === 'attributes' && 
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('mw-collapsible')) {
        setTimeout(initGallery, 100);
      }
    });
  });
  
  observer.observe(document.body, {
    attributes: true,
    subtree: true,
    attributeFilter: ['class']
  });
})();

// Contact Form Handler
$(document).ready(function () {
    $('.contact-form-container').each(function() {
        // Create the form HTML
        var formHTML = '<form method="POST" action="https://script.google.com/macros/s/AKfycbzGYYHbCtVTjXPjTcYKA3wuK6ZAfKIiluw6sZKuWTZzVFnlnl-V9UYsVEroi1MzyIoUhg/exec">' +
            '<input name="Email" type="email" placeholder="Email" required>' + '<br>' +
            '<input name="Name" type="text" placeholder="Name" required>' + '<br>' + '<input name="Comment" type="text" placeholder="Comment" required>' +
            '<button type="submit">Send</button>' +
            '</form>';
        
        // Insert the form HTML into the div
        $(this).html(formHTML);
        
        // Optional: Add event listener for form submission if you want to handle it with JS
        $(this).find('form').on('submit', function(e) {
            // You can add custom submission handling here if needed
            console.log('Form submitted');
            // If you want to handle the submission yourself, uncomment the next line
            // e.preventDefault();
        });
    });
});

// IFRAME COMMUNICATION
(function() {
    'use strict';
    
    // Only run if we're in an iframe
    if (window.parent !== window) {
        // Wait for the page to load
        $(function() {
            // Configuration
            var PARENT_ORIGIN = 'http://127.0.0.1:5500';
            var CLICKABLE_ELEMENTS = [
                'a',     // Category links
                '.audio-ref'
            ];
            
            // Add click handlers to the specified elements
            $(CLICKABLE_ELEMENTS.join(', ')).on('click', function(e) {
                // Get element information
                var elementInfo = {
                    type: 'elementClicked',
                    elementId: this.id || 'unnamed-element',
                    elementTag: this.tagName.toLowerCase(),
                    elementClass: this.className,
                    elementText: $(this).text().trim(),
                    timestamp: Date.now()
                };
                
                // Send message to parent React app
                window.parent.postMessage(elementInfo, PARENT_ORIGIN);
                
                console.log('Click detected and reported:', elementInfo);
            });
            
            console.log('Click detection initialized for iframe communication');
        });
    }
})();

// Symbol replacement hook
mw.hook('wikipage.content').add(function ($content) {
    // Find all links in the content
    var links = $content.find('a');
    
    // Iterate through each link
    links.each(function() {
        var $link = $(this);
        var html = $link.html();
        
        // Check if the link contains the symbol (including variant selectors)
        if (html && html.indexOf('▶') !== -1) {
            // Replace the symbol with a span that has white color
            var newHtml = html.replace(/▶[\uFE0E\uFE0F]?/g, '<span class="symbol-container" style="color: white;">▶</span>');
            $link.html(newHtml);
        }
    });
});

// VideoJS initialization
function initializeAllVideoJS() {
    var players = document.querySelectorAll('audio.video-js, video.video-js');
    players.forEach(function(player) {
        if (!player.player) { // Prevent double init
            videojs(player);
        }
    });
}

$(document).ready(function() {
    initializeAllVideoJS();
});