MediaWiki

MediaWiki:ChapterSlides.js

From Illustrations in German Translations of Mark Twain's Works

Revision as of 15:09, 16 September 2025 by HMHTEST (talk | contribs) (Undo revision 1771 by HMHTEST (talk))

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// Acht feste Illustratoren definieren
const illustrators = [
  "Kemble",
  "Schroedter",
  "Hirth",
  "Busoni",
  "Kellerer",
  "Harder",
  "Trier",
  "Bebié"
];

// Bildlisten und aktuelle Indizes
let slides = {};
let currentIndex = {};

illustrators.forEach(name => {
  slides[name] = [];
  currentIndex[name] = 0;
});

// Eingabe verarbeiten
function loadSlideshowsByChapter() {
  const chapterInput = document.getElementById("chapterInput").value.trim();
  const chapterNumber = parseInt(chapterInput, 10);

  if (isNaN(chapterNumber) || chapterNumber < 1 || chapterNumber > 43) {
    alert("Please enter a number between 1 and 43.");
    return;
  }

  const chapterTag = "ch" + String(chapterNumber).padStart(3, "0");

  // Tabelle durchsuchen
  const rows = document.querySelectorAll("#catalog tbody tr");

  illustrators.forEach(name => {
    slides[name] = [];
    currentIndex[name] = 0;
    const imageElement = document.getElementById("slide-" + name);

    for (let i = 0; i < rows.length; i++) {
      const row = rows[i];
      const illustratorCell = row.cells[2];
      const idCell = row.cells[8];

      const illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : "";
      const idLink = idCell ? idCell.getElementsByTagName("a")[0] : null;
      const idText = idLink ? idLink.textContent.trim().toLowerCase() : "";

      if (
        illustratorText.indexOf(name.toLowerCase()) !== -1 &&
        idText.indexOf(chapterTag) !== -1
      ) {
        slides[name].push(idText);
      }
    }

    if (slides[name].length === 0) {
      imageElement.src = "https://illus.twainframe.org/images/2/2b/ChapterPlaceholder.png";
      imageElement.title = "No matching images found.";
      updateCounter(name); // Counter aktualisieren
    } else {
      showSlide(name, 0);
    }
  });
}

// Ein Bild anzeigen
function showSlide(illustrator, index) {
  const imageElement = document.getElementById("slide-" + illustrator);
  const slideArray = slides[illustrator];

  if (!imageElement || slideArray.length === 0) return;

  currentIndex[illustrator] = (index + slideArray.length) % slideArray.length;
  const imageId = slideArray[currentIndex[illustrator]];

  imageElement.src = "/index.php/Special:Redirect/file/" + imageId + ".jpg";
  imageElement.alt = imageId;
  imageElement.title = imageId;

  // Counter aktualisieren
  updateCounter(illustrator);
}

// Counter aktualisieren
function updateCounter(illustrator) {
  const counterElement = document.getElementById("counter-" + illustrator);
  const slideArray = slides[illustrator];
  const index = currentIndex[illustrator];

  if (counterElement) {
    if (slideArray.length === 0) {
      counterElement.textContent = "0/0";
    } else {
      counterElement.textContent = (index + 1) + "/" + slideArray.length;
    }
  }
}

// Buttons
function nextSlide(illustrator) {
  showSlide(illustrator, currentIndex[illustrator] + 1);
}

function prevSlide(illustrator) {
  showSlide(illustrator, currentIndex[illustrator] - 1);
}