MediaWiki

CharacterFilter.js: Difference between revisions

From Illustrations in German Translations of Mark Twain's Works

No edit summary
No edit summary
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
// Slideshow Script: Illustrations of Tom, filter by illustrator


// Globale Bildlisten und aktuelle Indizes
var slides = {
  A: [],
  B: [],
  C: [],
  D: [],


};
// Slideshow Script: Illustrations of Huck, filter by illustrator


var currentIndex = {
// ===============================
  A: 0,
// Huck Slideshow – filter by illustrator
  B: 0,
// ===============================
  C: 0,
  D: 0,
};


// Slideshow laden
// Globale Bildlisten und aktuelle Indizes für Huck
function filterAndLoadSlideshowT(target) {
var huck_slides = { C: [], D: [] };
  var dropdownId = 'illustratorDropdown' + target;
var huck_currentIndex = { C: 0, D: 0 };
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  var imageElement = document.getElementById('slide' + target);


  if (!imageElement) {
// Slideshow laden für Huck
     console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
function huck_filterAndLoadSlideshow(target) {
     return;
     var dropdownId = 'illustratorDropdown' + target;
  }
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
     var imageElement = document.getElementById('slide' + target);


  slides[target] = [];
    if (!imageElement) {
  currentIndex[target] = 0;
        console.error('Huck Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }


  if (!selectedIllustrator) {
     huck_slides[target] = [];
     imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
     huck_currentIndex[target] = 0;
     imageElement.title = "Kein Illustrator ausgewählt.";
    return;
  }


  var rows = document.querySelectorAll('#catalog tbody tr');
    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        huck_updateCounter(target);
        return;
    }


  for (var i = 0; i < rows.length; i++) {
     var rows = document.querySelectorAll('#catalog tbody tr');
     var row = rows[i];
    var illustratorCell = row.cells[2];
    var tagsCell = row.cells[7];
    var idCell = row.cells[8];


     var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
     for (var i = 0; i < rows.length; i++) {
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var row = rows[i];
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var illustratorCell = row.cells[2];
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
        var tagsCell = row.cells[7];
        var idCell = row.cells[8];


    if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('tom') !== -1) {
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
      slides[target].push(idText);
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
      console.log('✓ Zeile ' + i + ': ID=' + idText);
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
 
        // Filter: Illustrator match & 'huck'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('huck') !== -1) {
            huck_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
     }
     }
  }


  if (slides[target].length === 0) {
    if (huck_slides[target].length === 0) {
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
        imageElement.title = "No images found.";
    return;
        huck_updateCounter(target);
  }
        return;
    }


  showSlide(target, 0);
    huck_showSlide(target, 0);
}
}


// Zeige ein einzelnes Bild
// Einzelnes Bild anzeigen
function showSlide(target, index) {
function huck_showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('slide' + target);
  var slideArray = slides[target];
    var slideArray = huck_slides[target];
 
    if (!imageElement || slideArray.length === 0) {
        huck_updateCounter(target);
        return;
    }


  if (!imageElement || slideArray.length === 0) return;
    huck_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[huck_currentIndex[target]];


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  var imageId = slideArray[currentIndex[target]];
    imageElement.alt = imageId;
    imageElement.title = imageId;
   
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
   
    // ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    // optional: preload next image
  imageElement.alt = imageId;
    var nextImg = new Image();
  imageElement.title = imageId;
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(huck_currentIndex[target] + 1) % slideArray.length] + '.jpg';
 
    // Counter aktualisieren
    huck_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function huck_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    huck_showSlide(target, huck_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function huck_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    huck_showSlide(target, huck_currentIndex[target] - 1);
}
}


// Slideshow Script: Illustrations of Huck, filter by illustrator
// Counter-Funktion
function huck_updateCounter(target) {
    var total = huck_slides[target].length;
    var current = total > 0 ? huck_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}


// Globale Bildlisten und aktuelle Indizes
var slides = {
  A: [],
  B: [],
  C: [],
  D: [],


};
// ===============================
// Jim Slideshow – filter by illustrator
// ===============================


var currentIndex = {
// Globale Bildlisten und aktuelle Indizes für Jim
  A: 0,
var jim_slides = { C: [], D: [] };
  B: 0,
var jim_currentIndex = { C: 0, D: 0 };
  C: 0,
  D: 0,
};


// Slideshow laden
// Slideshow laden für Jim
function filterAndLoadSlideshowH(target) {
function jim_filterAndLoadSlideshow(target) {
  var dropdownId = 'illustratorDropdown' + target;
    var dropdownId = 'jim_illustratorDropdown' + target;
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('jim_slide' + target);


  if (!imageElement) {
    if (!imageElement) {
    console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
        console.error('Jim Slideshow ' + target + ': Bild-Element nicht gefunden.');
    return;
        return;
  }
    }


  slides[target] = [];
    jim_slides[target] = [];
  currentIndex[target] = 0;
    jim_currentIndex[target] = 0;


  if (!selectedIllustrator) {
    if (!selectedIllustrator) {
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    imageElement.title = "Kein Illustrator ausgewählt.";
        imageElement.title = "No illustrator selected.";
    return;
        return;
  }
    }


  var rows = document.querySelectorAll('#catalog tbody tr');
    var rows = document.querySelectorAll('#catalog tbody tr');


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


    var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';


    if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('huck') !== -1) {
        // Filter: Illustrator match & 'jim'-Tag vorhanden
      slides[target].push(idText);
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('jim') !== -1) {
      console.log('✓ Zeile ' + i + ': ID=' + idText);
            jim_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
     }
     }
  }


  if (slides[target].length === 0) {
    if (jim_slides[target].length === 0) {
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
        imageElement.title = "No matching images found.";
    return;
        return;
  }
    }


  showSlide(target, 0);
    jim_showSlide(target, 0);
}
}


// Zeige ein einzelnes Bild
// Einzelnes Bild anzeigen
function showSlide(target, index) {
function jim_showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('jim_slide' + target);
  var slideArray = slides[target];
    var slideArray = jim_slides[target];


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


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    jim_currentIndex[target] = (index + slideArray.length) % slideArray.length;
  var imageId = slideArray[currentIndex[target]];
    var imageId = slideArray[jim_currentIndex[target]];


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  imageElement.alt = imageId;
    imageElement.alt = imageId;
  imageElement.title = imageId;
    imageElement.title = imageId;
   
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
    // ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(jim_currentIndex[target] + 1) % slideArray.length] + '.jpg';
   
    // Counter aktualisieren
    jim_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function jim_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    jim_showSlide(target, jim_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function jim_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    jim_showSlide(target, jim_currentIndex[target] - 1);
}
// Counter-Funktion
function jim_updateCounter(target) {
    var total = jim_slides[target].length;
    var current = total > 0 ? jim_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
}
// ===============================
// Pap Finn Slideshow – filter by illustrator
// ===============================


// Slideshow Script: Illustrations of Jim, filter by illustrator
// Globale Bildlisten und aktuelle Indizes für Pap Finn
var pap_slides = { C: [], D: [] };
var pap_currentIndex = { C: 0, D: 0 };


// Globale Bildlisten und aktuelle Indizes
// Slideshow laden für Pap Finn
var slides = {
function pap_filterAndLoadSlideshow(target) {
  A: [],
    var dropdownId = 'pap_illustratorDropdown' + target;
  B: [],
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  C: [],
    var imageElement = document.getElementById('pap_slide' + target);
  D: [],


};
    if (!imageElement) {
        console.error('Pap Finn Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }


var currentIndex = {
    pap_slides[target] = [];
  A: 0,
    pap_currentIndex[target] = 0;
  B: 0,
  C: 0,
  D: 0,
};


// Slideshow laden
    if (!selectedIllustrator) {
function filterAndLoadSlideshowJ(target) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
  var dropdownId = 'illustratorDropdown' + target;
        imageElement.title = "No illustrator selected.";
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
        return;
  var imageElement = document.getElementById('slide' + target);
    }


  if (!imageElement) {
     var rows = document.querySelectorAll('#catalog tbody tr');
     console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
    return;
  }


  slides[target] = [];
    for (var i = 0; i < rows.length; i++) {
  currentIndex[target] = 0;
        var row = rows[i];
        var illustratorCell = row.cells[2];
        var tagsCell = row.cells[7];
        var idCell = row.cells[8];


  if (!selectedIllustrator) {
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    imageElement.title = "Kein Illustrator ausgewählt.";
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    return;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
  }


  var rows = document.querySelectorAll('#catalog tbody tr');
        // Filter: Illustrator match & 'pap'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('pap') !== -1) {
            pap_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }


  for (var i = 0; i < rows.length; i++) {
    if (pap_slides[target].length === 0) {
    var row = rows[i];
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    var illustratorCell = row.cells[2];
        imageElement.title = "No matching images found.";
    var tagsCell = row.cells[7];
        return;
     var idCell = row.cells[8];
     }


     var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
     pap_showSlide(target, 0);
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
}
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';


    if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('jim') !== -1) {
// Einzelnes Bild anzeigen
      slides[target].push(idText);
function pap_showSlide(target, index) {
      console.log('✓ Zeile ' + i + ': ID=' + idText);
    var imageElement = document.getElementById('pap_slide' + target);
    }
    var slideArray = pap_slides[target];
  }


  if (slides[target].length === 0) {
    if (!imageElement || slideArray.length === 0) return;
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
    return;
  }


  showSlide(target, 0);
    pap_currentIndex[target] = (index + slideArray.length) % slideArray.length;
}
    var imageId = slideArray[pap_currentIndex[target]];


// Zeige ein einzelnes Bild
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
function showSlide(target, index) {
    imageElement.alt = imageId;
  var imageElement = document.getElementById('slide' + target);
    imageElement.title = imageId;
  var slideArray = slides[target];


  if (!imageElement || slideArray.length === 0) return;
// Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    // optional: preload next image
  var imageId = slideArray[currentIndex[target]];
    var nextImg = new Image();
 
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(pap_currentIndex[target] + 1) % slideArray.length] + '.jpg';
  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
   
  imageElement.alt = imageId;
    // Counter aktualisieren
  imageElement.title = imageId;
    pap_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function pap_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    pap_showSlide(target, pap_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function pap_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    pap_showSlide(target, pap_currentIndex[target] - 1);
}
// Counter-Funktion
function pap_updateCounter(target) {
    var total = pap_slides[target].length;
    var current = total > 0 ? pap_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
}
// ===============================
// King/Duke Slideshow – filter by illustrator
// ===============================


// Slideshow Script: Illustrations of Pap, filter by illustrator
// Globale Bildlisten und aktuelle Indizes für King/Duke
var kd_slides = { C: [], D: [] };
var kd_currentIndex = { C: 0, D: 0 };


// Globale Bildlisten und aktuelle Indizes
// Slideshow laden für King/Duke
var slides = {
function kd_filterAndLoadSlideshow(target) {
  A: [],
    var dropdownId = 'kd_illustratorDropdown' + target;
  B: [],
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  C: [],
    var imageElement = document.getElementById('kd_slide' + target);
  D: [],


};
    if (!imageElement) {
        console.error('King/Duke Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }


var currentIndex = {
    kd_slides[target] = [];
  A: 0,
    kd_currentIndex[target] = 0;
  B: 0,
  C: 0,
  D: 0,
};


// Slideshow laden
    if (!selectedIllustrator) {
function filterAndLoadSlideshowP(target) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
  var dropdownId = 'illustratorDropdown' + target;
        imageElement.title = "No illustrator selected.";
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
        return;
  var imageElement = document.getElementById('slide' + target);
    }


  if (!imageElement) {
     var rows = document.querySelectorAll('#catalog tbody tr');
     console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
    return;
  }


  slides[target] = [];
    for (var i = 0; i < rows.length; i++) {
  currentIndex[target] = 0;
        var row = rows[i];
        var illustratorCell = row.cells[2];
        var tagsCell = row.cells[7];
        var idCell = row.cells[8];


  if (!selectedIllustrator) {
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    imageElement.title = "Kein Illustrator ausgewählt.";
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    return;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
  }


  var rows = document.querySelectorAll('#catalog tbody tr');
        // Filter: Illustrator match UND '-king' oder '-duke' im Tag
        if (illustratorText.indexOf(selectedIllustrator) !== -1 &&
            (tagsText.indexOf('-king') !== -1 || tagsText.indexOf('-duke') !== -1)) {
            kd_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }


  for (var i = 0; i < rows.length; i++) {
    if (kd_slides[target].length === 0) {
    var row = rows[i];
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    var illustratorCell = row.cells[2];
        imageElement.title = "No matching images found.";
    var tagsCell = row.cells[7];
        return;
    var idCell = row.cells[8];
 
    var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
 
    if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('papfinn') !== -1) {
      slides[target].push(idText);
      console.log('✓ Zeile ' + i + ': ID=' + idText);
     }
     }
  }


  if (slides[target].length === 0) {
    kd_showSlide(target, 0);
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
}
    imageElement.title = "Keine passenden Bilder gefunden.";
    return;
  }


  showSlide(target, 0);
// Einzelnes Bild anzeigen
}
function kd_showSlide(target, index) {
    var imageElement = document.getElementById('kd_slide' + target);
    var slideArray = kd_slides[target];


// Zeige ein einzelnes Bild
    if (!imageElement || slideArray.length === 0) return;
function showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
  var slideArray = slides[target];


  if (!imageElement || slideArray.length === 0) return;
    kd_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[kd_currentIndex[target]];


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  var imageId = slideArray[currentIndex[target]];
    imageElement.alt = imageId;
    imageElement.title = imageId;


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
// Klick öffnet die File-Seite in neuem Tab
  imageElement.alt = imageId;
    imageElement.onclick = function() {
  imageElement.title = imageId;
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(kd_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    kd_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function kd_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    kd_showSlide(target, kd_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function kd_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    kd_showSlide(target, kd_currentIndex[target] - 1);
}
}
// Counter-Funktion
function kd_updateCounter(target) {
    var total = kd_slides[target].length;
    var current = total > 0 ? kd_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// Tom Slideshow – filter by illustrator
// ===============================


// Globale Bildlisten und aktuelle Indizes für Tom
var tom_slides = { C: [], D: [] };
var tom_currentIndex = { C: 0, D: 0 };


// Slideshow Script: Illustrations of King and Duke, filter by illustrator
// Slideshow laden für Tom
function tom_filterAndLoadSlideshow(target) {
    var dropdownId = 'tom_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('tom_slide' + target);


// Globale Bildlisten und aktuelle Indizes
    if (!imageElement) {
var slides = {
        console.error('Tom Slideshow ' + target + ': Bild-Element nicht gefunden.');
  A: [],
        return;
  B: [],
    }
  C: [],
  D: [],


};
    tom_slides[target] = [];
    tom_currentIndex[target] = 0;


var currentIndex = {
    if (!selectedIllustrator) {
  A: 0,
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
  B: 0,
        imageElement.title = "No illustrator selected.";
  C: 0,
        return;
  D: 0,
    }
};


// Slideshow laden
    var rows = document.querySelectorAll('#catalog tbody tr');
function filterAndLoadSlideshowKD(target) {
  var dropdownId = 'illustratorDropdown' + target;
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  var imageElement = document.getElementById('slide' + target);


  if (!imageElement) {
    for (var i = 0; i < rows.length; i++) {
    console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
        var row = rows[i];
    return;
        var illustratorCell = row.cells[2];
  }
        var tagsCell = row.cells[7];
        var idCell = row.cells[8];


  slides[target] = [];
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
  currentIndex[target] = 0;
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';


  if (!selectedIllustrator) {
        // Filter: Illustrator match & '-tom'-Tag vorhanden
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('-tom') !== -1) {
    imageElement.title = "Kein Illustrator ausgewählt.";
            tom_slides[target].push(idText);
     return;
            console.log('✓ Zeile ' + i + ': ID=' + idText);
  }
        }
     }


  var rows = document.querySelectorAll('#catalog tbody tr');
    if (tom_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }


  for (var i = 0; i < rows.length; i++) {
     tom_showSlide(target, 0);
     var row = rows[i];
    var illustratorCell = row.cells[2];
    var tagsCell = row.cells[7];
    var idCell = row.cells[8];
 
    var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
 
    if (
  illustratorText.indexOf(selectedIllustrator) !== -1 &&
  (
    tagsText.indexOf('king') !== -1 ||
    tagsText.indexOf('duke') !== -1
  )
) {
  slides[target].push(idText);
  console.log('✓ Zeile ' + i + ': ID=' + idText);
}
  }
 
  if (slides[target].length === 0) {
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
    return;
  }
 
  showSlide(target, 0);
}
}


// Zeige ein einzelnes Bild
// Einzelnes Bild anzeigen
function showSlide(target, index) {
function tom_showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('tom_slide' + target);
  var slideArray = slides[target];
    var slideArray = tom_slides[target];


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


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    tom_currentIndex[target] = (index + slideArray.length) % slideArray.length;
  var imageId = slideArray[currentIndex[target]];
    var imageId = slideArray[tom_currentIndex[target]];


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  imageElement.alt = imageId;
    imageElement.alt = imageId;
  imageElement.title = imageId;
    imageElement.title = imageId;
   
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(tom_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    tom_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function tom_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    tom_showSlide(target, tom_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function tom_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    tom_showSlide(target, tom_currentIndex[target] - 1);
}
// Counter-Funktion
function tom_updateCounter(target) {
    var total = tom_slides[target].length;
    var current = total > 0 ? tom_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
}
// ===============================
// Other Characters Slideshow – filter by illustrator
// ===============================


// Slideshow Script: Illustrations of other characters, filter by illustrator
// Globale Bildlisten und aktuelle Indizes für Other Characters
var other_slides = { C: [], D: [] };
var other_currentIndex = { C: 0, D: 0 };


// Globale Bildlisten und aktuelle Indizes
// Slideshow laden für Other Characters
var slides = {
function other_filterAndLoadSlideshow(target) {
  A: [],
    var dropdownId = 'other_illustratorDropdown' + target;
  B: [],
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  C: [],
    var imageElement = document.getElementById('other_slide' + target);
  D: [],


};
    if (!imageElement) {
        console.error('Other Characters Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }


var currentIndex = {
    other_slides[target] = [];
  A: 0,
    other_currentIndex[target] = 0;
  B: 0,
  C: 0,
  D: 0,
};


// Slideshow laden
    if (!selectedIllustrator) {
function filterAndLoadSlideshowSDC(target) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
  var dropdownId = 'illustratorDropdown' + target;
        imageElement.title = "No illustrator selected.";
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
        return;
  var imageElement = document.getElementById('slide' + target);
    }


  if (!imageElement) {
     var rows = document.querySelectorAll('#catalog tbody tr');
     console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
    return;
  }


  slides[target] = [];
    for (var i = 0; i < rows.length; i++) {
  currentIndex[target] = 0;
        var row = rows[i];
        var illustratorCell = row.cells[2];
        var tagsCell = row.cells[7];
        var idCell = row.cells[8];


  if (!selectedIllustrator) {
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    imageElement.title = "Kein Illustrator ausgewählt.";
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    return;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
  }


  var rows = document.querySelectorAll('#catalog tbody tr');
        // Filter: Illustrator match & '-sdc'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('-sdc') !== -1) {
            other_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }


  for (var i = 0; i < rows.length; i++) {
    if (other_slides[target].length === 0) {
    var row = rows[i];
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    var illustratorCell = row.cells[2];
        imageElement.title = "No matching images found.";
    var tagsCell = row.cells[7];
        return;
    var idCell = row.cells[8];
 
    var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
 
    if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('sdc') !== -1) {
      slides[target].push(idText);
      console.log('✓ Zeile ' + i + ': ID=' + idText);
     }
     }
  }


  if (slides[target].length === 0) {
     other_showSlide(target, 0);
     imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
    return;
  }
 
  showSlide(target, 0);
}
}


// Zeige ein einzelnes Bild
// Einzelnes Bild anzeigen
function showSlide(target, index) {
function other_showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('other_slide' + target);
  var slideArray = slides[target];
    var slideArray = other_slides[target];


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


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    other_currentIndex[target] = (index + slideArray.length) % slideArray.length;
  var imageId = slideArray[currentIndex[target]];
    var imageId = slideArray[other_currentIndex[target]];


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  imageElement.alt = imageId;
    imageElement.alt = imageId;
  imageElement.title = imageId;
    imageElement.title = imageId;
   
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(other_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    other_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function other_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    other_showSlide(target, other_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function other_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    other_showSlide(target, other_currentIndex[target] - 1);
}
// Counter-Funktion
function other_updateCounter(target) {
    var total = other_slides[target].length;
    var current = total > 0 ? other_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
}


// Slideshow Script: Illustrations of female characters, filter by illustrator
// ===============================
// Female Characters Slideshow filter by illustrator
// ===============================


// Globale Bildlisten und aktuelle Indizes
// Globale Bildlisten und aktuelle Indizes für Female Characters
var slides = {
var female_slides = { C: [], D: [] };
  A: [],
var female_currentIndex = { C: 0, D: 0 };
  B: [],
  C: [],
  D: [],


};
// Slideshow laden für Female Characters
function female_filterAndLoadSlideshow(target) {
    var dropdownId = 'female_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('female_slide' + target);


var currentIndex = {
    if (!imageElement) {
  A: 0,
        console.error('Female Characters Slideshow ' + target + ': Bild-Element nicht gefunden.');
  B: 0,
        return;
  C: 0,
    }
  D: 0,
};


// Slideshow laden
    female_slides[target] = [];
function filterAndLoadSlideshowSDC(target) {
    female_currentIndex[target] = 0;
  var dropdownId = 'illustratorDropdown' + target;
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  var imageElement = document.getElementById('slide' + target);


  if (!imageElement) {
    if (!selectedIllustrator) {
    console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    return;
        imageElement.title = "No illustrator selected.";
  }
        return;
    }


  slides[target] = [];
    var rows = document.querySelectorAll('#catalog tbody tr');
  currentIndex[target] = 0;


  if (!selectedIllustrator) {
    for (var i = 0; i < rows.length; i++) {
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        var row = rows[i];
    imageElement.title = "Kein Illustrator ausgewählt.";
        var illustratorCell = row.cells[2];
    return;
        var tagsCell = row.cells[7];
  }
        var idCell = row.cells[8];


  var rows = document.querySelectorAll('#catalog tbody tr');
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';


  for (var i = 0; i < rows.length; i++) {
        // Filter: Illustrator match & '-fem'-Tag vorhanden
    var row = rows[i];
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('-fem') !== -1) {
    var illustratorCell = row.cells[2];
            female_slides[target].push(idText);
    var tagsCell = row.cells[7];
            console.log('✓ Zeile ' + i + ': ID=' + idText);
    var idCell = row.cells[8];
        }
 
     }
    var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
     var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';


     if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('fem') !== -1) {
     if (female_slides[target].length === 0) {
      slides[target].push(idText);
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
      console.log('✓ Zeile ' + i + ': ID=' + idText);
        imageElement.title = "No matching images found.";
        return;
     }
     }
  }
  if (slides[target].length === 0) {
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
    return;
  }


  showSlide(target, 0);
    female_showSlide(target, 0);
}
}


// Zeige ein einzelnes Bild
// Einzelnes Bild anzeigen
function showSlide(target, index) {
function female_showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('female_slide' + target);
  var slideArray = slides[target];
    var slideArray = female_slides[target];


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


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    female_currentIndex[target] = (index + slideArray.length) % slideArray.length;
  var imageId = slideArray[currentIndex[target]];
    var imageId = slideArray[female_currentIndex[target]];


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  imageElement.alt = imageId;
    imageElement.alt = imageId;
  imageElement.title = imageId;
    imageElement.title = imageId;
   
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(female_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    female_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function female_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    female_showSlide(target, female_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function female_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    female_showSlide(target, female_currentIndex[target] - 1);
}
}
// Counter-Funktion
function female_updateCounter(target) {
    var total = female_slides[target].length;
    var current = total > 0 ? female_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// Black Characters Slideshow – filter by illustrator
// ===============================


// Slideshow Script: Illustrations of black characters, filter by illustrator
// Globale Bildlisten und aktuelle Indizes für Black Characters
var black_slides = { C: [], D: [] };
var black_currentIndex = { C: 0, D: 0 };


// Globale Bildlisten und aktuelle Indizes
// Slideshow laden für Black Characters
var slides = {
function black_filterAndLoadSlideshow(target) {
  A: [],
    var dropdownId = 'black_illustratorDropdown' + target;
  B: [],
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
  C: [],
    var imageElement = document.getElementById('black_slide' + target);
  D: [],


};
    if (!imageElement) {
        console.error('Black Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }


var currentIndex = {
    black_slides[target] = [];
  A: 0,
    black_currentIndex[target] = 0;
  B: 0,
  C: 0,
  D: 0,
};


// Slideshow laden
    if (!selectedIllustrator) {
function filterAndLoadSlideshowSDC(target) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
  var dropdownId = 'illustratorDropdown' + target;
        imageElement.title = "No illustrator selected.";
  var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
        return;
  var imageElement = document.getElementById('slide' + target);
    }


  if (!imageElement) {
     var rows = document.querySelectorAll('#catalog tbody tr');
     console.error('Slideshow ' + target + ': Bild-Element nicht gefunden.');
    return;
  }


  slides[target] = [];
    for (var i = 0; i < rows.length; i++) {
  currentIndex[target] = 0;
        var row = rows[i];
        var illustratorCell = row.cells[2];
        var tagsCell = row.cells[7];
        var idCell = row.cells[8];


  if (!selectedIllustrator) {
        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    imageElement.title = "Kein Illustrator ausgewählt.";
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    return;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
  }


  var rows = document.querySelectorAll('#catalog tbody tr');
        // Filter: Illustrator match & '-aac'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('aac') !== -1) {
            black_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }


  for (var i = 0; i < rows.length; i++) {
    if (black_slides[target].length === 0) {
    var row = rows[i];
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
    var illustratorCell = row.cells[2];
        imageElement.title = "No matching images found.";
    var tagsCell = row.cells[7];
        return;
    var idCell = row.cells[8];
 
    var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
    var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
    var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
    var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';
 
    if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('aac') !== -1) {
      slides[target].push(idText);
      console.log('✓ Zeile ' + i + ': ID=' + idText);
     }
     }
  }


  if (slides[target].length === 0) {
     black_showSlide(target, 0);
     imageElement.src = "https://illus.twainframe.org/images/d/d2/GalleryPlaceholder.png";
    imageElement.title = "Keine passenden Bilder gefunden.";
    return;
  }
 
  showSlide(target, 0);
}
}


// Zeige ein einzelnes Bild
// Einzelnes Bild anzeigen
function showSlide(target, index) {
function black_showSlide(target, index) {
  var imageElement = document.getElementById('slide' + target);
    var imageElement = document.getElementById('black_slide' + target);
  var slideArray = slides[target];
    var slideArray = black_slides[target];


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


  currentIndex[target] = (index + slideArray.length) % slideArray.length;
    black_currentIndex[target] = (index + slideArray.length) % slideArray.length;
  var imageId = slideArray[currentIndex[target]];
    var imageId = slideArray[black_currentIndex[target]];


  imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
  imageElement.alt = imageId;
    imageElement.alt = imageId;
  imageElement.title = imageId;
    imageElement.title = imageId;
   
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(black_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    black_updateCounter(target);
}
}


// Buttons
// Buttons
function nextSlide(target) {
function black_nextSlide(target) {
  showSlide(target, currentIndex[target] + 1);
    black_showSlide(target, black_currentIndex[target] + 1);
}
}


function prevSlide(target) {
function black_prevSlide(target) {
  showSlide(target, currentIndex[target] - 1);
    black_showSlide(target, black_currentIndex[target] - 1);
}
// Counter-Funktion
function black_updateCounter(target) {
    var total = black_slides[target].length;
    var current = total > 0 ? black_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
 
// ===============================
// Character MediaInfo – für alle Slideshow-Targets
// ===============================
function loadCharacterMediaInfo(infoBox, filename) {
    if (!infoBox) return;
    infoBox.textContent = "Loading ...";
 
    var filePage = filename.endsWith('.jpg') ? filename : filename + '.jpg';
    var url = '/index.php?title=File:' + encodeURIComponent(filePage) + '&action=raw';
 
    fetch(url)
        .then(resp => resp.text())
        .then(text => {
            var match = text.match(/\{\{MediaInfo([\s\S]*?)\}\}/);
            if (!match) {
                infoBox.textContent = "No Data found.";
                return;
            }
 
            var block = match[1];
            var fields = ["title","chapter","illustration","illustrator","year","tags"];
            var htmlList = "<ul style='margin:0; padding-left:1em; list-style:none;'>";
 
            fields.forEach(function(field) {
                var m = block.match(new RegExp("\\|\\s*" + field + "\\s*=([^\\n]*)"));
                if (m) {
                    var label = field.charAt(0).toUpperCase() + field.slice(1);
                    htmlList += "<li><b>" + label + ":</b> " + m[1].trim() + "</li>";
                }
            });
 
            htmlList += "</ul>";
            infoBox.innerHTML = htmlList;
 
            // optional: CSS
            infoBox.style.backgroundColor = "#f9f9f9";
            infoBox.style.border = "1px solid #ccc";
            infoBox.style.padding = "0.5em 1em";
            infoBox.style.marginTop = "0.5em";
            infoBox.style.borderRadius = "4px";
            infoBox.style.fontSize = "0.9em";
        })
        .catch(function(err) {
            console.error(err);
            infoBox.textContent = "Error";
        });
}
}

Latest revision as of 16:53, 16 September 2025



// Slideshow Script: Illustrations of Huck, filter by illustrator

// ===============================
// Huck Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Huck
var huck_slides = { C: [], D: [] };
var huck_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Huck
function huck_filterAndLoadSlideshow(target) {
    var dropdownId = 'illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('slide' + target);

    if (!imageElement) {
        console.error('Huck Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    huck_slides[target] = [];
    huck_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        huck_updateCounter(target);
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & 'huck'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('huck') !== -1) {
            huck_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (huck_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No images found.";
        huck_updateCounter(target);
        return;
    }

    huck_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function huck_showSlide(target, index) {
    var imageElement = document.getElementById('slide' + target);
    var slideArray = huck_slides[target];

    if (!imageElement || slideArray.length === 0) {
        huck_updateCounter(target);
        return;
    }

    huck_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[huck_currentIndex[target]];

    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.alt = imageId;
    imageElement.title = imageId;
    
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
    
    // ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);

    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(huck_currentIndex[target] + 1) % slideArray.length] + '.jpg';

    // Counter aktualisieren
    huck_updateCounter(target);
}

// Buttons
function huck_nextSlide(target) {
    huck_showSlide(target, huck_currentIndex[target] + 1);
}

function huck_prevSlide(target) {
    huck_showSlide(target, huck_currentIndex[target] - 1);
}

// Counter-Funktion
function huck_updateCounter(target) {
    var total = huck_slides[target].length;
    var current = total > 0 ? huck_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}


// ===============================
// Jim Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Jim
var jim_slides = { C: [], D: [] };
var jim_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Jim
function jim_filterAndLoadSlideshow(target) {
    var dropdownId = 'jim_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('jim_slide' + target);

    if (!imageElement) {
        console.error('Jim Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    jim_slides[target] = [];
    jim_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & 'jim'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('jim') !== -1) {
            jim_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (jim_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    jim_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function jim_showSlide(target, index) {
    var imageElement = document.getElementById('jim_slide' + target);
    var slideArray = jim_slides[target];

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

    jim_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[jim_currentIndex[target]];

    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.alt = imageId;
    imageElement.title = imageId;
    
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
    // ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(jim_currentIndex[target] + 1) % slideArray.length] + '.jpg';
    
    // Counter aktualisieren
    jim_updateCounter(target);
}

// Buttons
function jim_nextSlide(target) {
    jim_showSlide(target, jim_currentIndex[target] + 1);
}

function jim_prevSlide(target) {
    jim_showSlide(target, jim_currentIndex[target] - 1);
}
// Counter-Funktion
function jim_updateCounter(target) {
    var total = jim_slides[target].length;
    var current = total > 0 ? jim_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// Pap Finn Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Pap Finn
var pap_slides = { C: [], D: [] };
var pap_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Pap Finn
function pap_filterAndLoadSlideshow(target) {
    var dropdownId = 'pap_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('pap_slide' + target);

    if (!imageElement) {
        console.error('Pap Finn Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    pap_slides[target] = [];
    pap_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & 'pap'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('pap') !== -1) {
            pap_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (pap_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    pap_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function pap_showSlide(target, index) {
    var imageElement = document.getElementById('pap_slide' + target);
    var slideArray = pap_slides[target];

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

    pap_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[pap_currentIndex[target]];

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

// Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);

    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(pap_currentIndex[target] + 1) % slideArray.length] + '.jpg';
    
    // Counter aktualisieren
    pap_updateCounter(target);
}

// Buttons
function pap_nextSlide(target) {
    pap_showSlide(target, pap_currentIndex[target] + 1);
}

function pap_prevSlide(target) {
    pap_showSlide(target, pap_currentIndex[target] - 1);
}
// Counter-Funktion
function pap_updateCounter(target) {
    var total = pap_slides[target].length;
    var current = total > 0 ? pap_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// King/Duke Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für King/Duke
var kd_slides = { C: [], D: [] };
var kd_currentIndex = { C: 0, D: 0 };

// Slideshow laden für King/Duke
function kd_filterAndLoadSlideshow(target) {
    var dropdownId = 'kd_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('kd_slide' + target);

    if (!imageElement) {
        console.error('King/Duke Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    kd_slides[target] = [];
    kd_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match UND '-king' oder '-duke' im Tag
        if (illustratorText.indexOf(selectedIllustrator) !== -1 &&
            (tagsText.indexOf('-king') !== -1 || tagsText.indexOf('-duke') !== -1)) {
            kd_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (kd_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    kd_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function kd_showSlide(target, index) {
    var imageElement = document.getElementById('kd_slide' + target);
    var slideArray = kd_slides[target];

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

    kd_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[kd_currentIndex[target]];

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

// Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(kd_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    kd_updateCounter(target);
}

// Buttons
function kd_nextSlide(target) {
    kd_showSlide(target, kd_currentIndex[target] + 1);
}

function kd_prevSlide(target) {
    kd_showSlide(target, kd_currentIndex[target] - 1);
}
// Counter-Funktion
function kd_updateCounter(target) {
    var total = kd_slides[target].length;
    var current = total > 0 ? kd_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// Tom Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Tom
var tom_slides = { C: [], D: [] };
var tom_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Tom
function tom_filterAndLoadSlideshow(target) {
    var dropdownId = 'tom_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('tom_slide' + target);

    if (!imageElement) {
        console.error('Tom Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    tom_slides[target] = [];
    tom_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & '-tom'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('-tom') !== -1) {
            tom_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (tom_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    tom_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function tom_showSlide(target, index) {
    var imageElement = document.getElementById('tom_slide' + target);
    var slideArray = tom_slides[target];

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

    tom_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[tom_currentIndex[target]];

    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.alt = imageId;
    imageElement.title = imageId;
    
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(tom_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    tom_updateCounter(target);
}

// Buttons
function tom_nextSlide(target) {
    tom_showSlide(target, tom_currentIndex[target] + 1);
}

function tom_prevSlide(target) {
    tom_showSlide(target, tom_currentIndex[target] - 1);
}
// Counter-Funktion
function tom_updateCounter(target) {
    var total = tom_slides[target].length;
    var current = total > 0 ? tom_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// Other Characters Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Other Characters
var other_slides = { C: [], D: [] };
var other_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Other Characters
function other_filterAndLoadSlideshow(target) {
    var dropdownId = 'other_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('other_slide' + target);

    if (!imageElement) {
        console.error('Other Characters Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    other_slides[target] = [];
    other_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & '-sdc'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('-sdc') !== -1) {
            other_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (other_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    other_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function other_showSlide(target, index) {
    var imageElement = document.getElementById('other_slide' + target);
    var slideArray = other_slides[target];

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

    other_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[other_currentIndex[target]];

    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.alt = imageId;
    imageElement.title = imageId;
    
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(other_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    other_updateCounter(target);
}

// Buttons
function other_nextSlide(target) {
    other_showSlide(target, other_currentIndex[target] + 1);
}

function other_prevSlide(target) {
    other_showSlide(target, other_currentIndex[target] - 1);
}
// Counter-Funktion
function other_updateCounter(target) {
    var total = other_slides[target].length;
    var current = total > 0 ? other_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}

// ===============================
// Female Characters Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Female Characters
var female_slides = { C: [], D: [] };
var female_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Female Characters
function female_filterAndLoadSlideshow(target) {
    var dropdownId = 'female_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('female_slide' + target);

    if (!imageElement) {
        console.error('Female Characters Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    female_slides[target] = [];
    female_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & '-fem'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('-fem') !== -1) {
            female_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (female_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    female_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function female_showSlide(target, index) {
    var imageElement = document.getElementById('female_slide' + target);
    var slideArray = female_slides[target];

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

    female_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[female_currentIndex[target]];

    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.alt = imageId;
    imageElement.title = imageId;
    
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(female_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    female_updateCounter(target);
}

// Buttons
function female_nextSlide(target) {
    female_showSlide(target, female_currentIndex[target] + 1);
}

function female_prevSlide(target) {
    female_showSlide(target, female_currentIndex[target] - 1);
}
// Counter-Funktion
function female_updateCounter(target) {
    var total = female_slides[target].length;
    var current = total > 0 ? female_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}
// ===============================
// Black Characters Slideshow – filter by illustrator
// ===============================

// Globale Bildlisten und aktuelle Indizes für Black Characters
var black_slides = { C: [], D: [] };
var black_currentIndex = { C: 0, D: 0 };

// Slideshow laden für Black Characters
function black_filterAndLoadSlideshow(target) {
    var dropdownId = 'black_illustratorDropdown' + target;
    var selectedIllustrator = document.getElementById(dropdownId).value.toLowerCase();
    var imageElement = document.getElementById('black_slide' + target);

    if (!imageElement) {
        console.error('Black Slideshow ' + target + ': Bild-Element nicht gefunden.');
        return;
    }

    black_slides[target] = [];
    black_currentIndex[target] = 0;

    if (!selectedIllustrator) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No illustrator selected.";
        return;
    }

    var rows = document.querySelectorAll('#catalog tbody tr');

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

        var illustratorText = illustratorCell ? illustratorCell.textContent.trim().toLowerCase() : '';
        var tagsText = tagsCell ? tagsCell.textContent.trim().toLowerCase() : '';
        var idLink = idCell ? idCell.getElementsByTagName('a')[0] : null;
        var idText = idLink ? idLink.textContent.trim().toLowerCase() : '';

        // Filter: Illustrator match & '-aac'-Tag vorhanden
        if (illustratorText.indexOf(selectedIllustrator) !== -1 && tagsText.indexOf('aac') !== -1) {
            black_slides[target].push(idText);
            console.log('✓ Zeile ' + i + ': ID=' + idText);
        }
    }

    if (black_slides[target].length === 0) {
        imageElement.src = "https://illus.twainframe.org/images/e/e9/IllustratorPlaceholder.png";
        imageElement.title = "No matching images found.";
        return;
    }

    black_showSlide(target, 0);
}

// Einzelnes Bild anzeigen
function black_showSlide(target, index) {
    var imageElement = document.getElementById('black_slide' + target);
    var slideArray = black_slides[target];

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

    black_currentIndex[target] = (index + slideArray.length) % slideArray.length;
    var imageId = slideArray[black_currentIndex[target]];

    imageElement.src = '/index.php/Special:Redirect/file/' + imageId + '.jpg';
    imageElement.alt = imageId;
    imageElement.title = imageId;
    
    // Klick öffnet die File-Seite in neuem Tab
    imageElement.onclick = function() {
        var fileUrl = '/File:' + imageId + '.jpg';
        window.open(fileUrl, '_blank');
    };
// ===============================
    // MediaInfo laden
    // ===============================
    var infoBox = document.getElementById('mediainfo' + target);
    loadCharacterMediaInfo(infoBox, imageId);
    // optional: preload next image
    var nextImg = new Image();
    nextImg.src = '/index.php/Special:Redirect/file/' + slideArray[(black_currentIndex[target] + 1) % slideArray.length] + '.jpg';
// Counter aktualisieren
    black_updateCounter(target);
}

// Buttons
function black_nextSlide(target) {
    black_showSlide(target, black_currentIndex[target] + 1);
}

function black_prevSlide(target) {
    black_showSlide(target, black_currentIndex[target] - 1);
}
// Counter-Funktion
function black_updateCounter(target) {
    var total = black_slides[target].length;
    var current = total > 0 ? black_currentIndex[target] + 1 : 0;
    var counterEl = document.getElementById("counter" + target);
    if (counterEl) {
        counterEl.textContent = current + "/" + total;
    }
}

// ===============================
// Character MediaInfo – für alle Slideshow-Targets
// ===============================
function loadCharacterMediaInfo(infoBox, filename) {
    if (!infoBox) return;
    infoBox.textContent = "Loading ...";

    var filePage = filename.endsWith('.jpg') ? filename : filename + '.jpg';
    var url = '/index.php?title=File:' + encodeURIComponent(filePage) + '&action=raw';

    fetch(url)
        .then(resp => resp.text())
        .then(text => {
            var match = text.match(/\{\{MediaInfo([\s\S]*?)\}\}/);
            if (!match) {
                infoBox.textContent = "No Data found.";
                return;
            }

            var block = match[1];
            var fields = ["title","chapter","illustration","illustrator","year","tags"];
            var htmlList = "<ul style='margin:0; padding-left:1em; list-style:none;'>";

            fields.forEach(function(field) {
                var m = block.match(new RegExp("\\|\\s*" + field + "\\s*=([^\\n]*)"));
                if (m) {
                    var label = field.charAt(0).toUpperCase() + field.slice(1);
                    htmlList += "<li><b>" + label + ":</b> " + m[1].trim() + "</li>";
                }
            });

            htmlList += "</ul>";
            infoBox.innerHTML = htmlList;

            // optional: CSS
            infoBox.style.backgroundColor = "#f9f9f9";
            infoBox.style.border = "1px solid #ccc";
            infoBox.style.padding = "0.5em 1em";
            infoBox.style.marginTop = "0.5em";
            infoBox.style.borderRadius = "4px";
            infoBox.style.fontSize = "0.9em";
        })
        .catch(function(err) {
            console.error(err);
            infoBox.textContent = "Error";
        });
}