ChapterSlidesAlt.js: Difference between revisions
From Illustrations in German Translations of Mark Twain's Works
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
$(function() { | |||
const illustrators = ["Kemble","Schroedter","Hirth","Busoni","Kellerer","Harder","Trier","Bebié"]; | |||
let slidesPerBox = {1: [], 2: []}; | |||
let currentIndex = {1: 0, 2: 0}; | |||
// Dropdowns befüllen | |||
illustrators.forEach(name => { | |||
$("#illustratorSelect1, #illustratorSelect2").append( | |||
$('<option>').val(name).text(name) | |||
); | |||
}); | |||
// Button Event | |||
$("#displayButton").click(loadSlideshowsByChapter); | |||
// | // Prev/Next Buttons | ||
$(".prevBtn").click(function() { | |||
prevSlide($(this).data("box")); | |||
}); | |||
}); | $(".nextBtn").click(function() { | ||
nextSlide($(this).data("box")); | |||
}); | |||
// | // Dropdown Change | ||
function | $("#illustratorSelect1, #illustratorSelect2").change(function() { | ||
const box = $(this).attr("id").replace("illustratorSelect", ""); | |||
refreshGallery(parseInt(box)); | |||
}); | |||
if (isNaN(chapterNumber) || chapterNumber < 1 || chapterNumber > 43) { | function loadSlideshowsByChapter() { | ||
const chapterNumber = parseInt($("#chapterInput").val(), 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"); | |||
const rows = $("#catalog tbody tr"); | |||
illustrators.forEach(name => { slidesPerBox[name] = []; }); | |||
rows.each(function() { | |||
const cells = $(this).find("td"); | |||
if (cells.length < 9) return; | |||
const illustratorText = cells.eq(2).text().trim().toLowerCase(); | |||
const idLink = cells.eq(8).find("a").text().trim().toLowerCase(); | |||
illustrators.forEach(name => { | |||
if (illustratorText.includes(name.toLowerCase()) && idLink.includes(chapterTag)) { | |||
slidesPerBox[name].push(idLink); | |||
} | |||
}); | |||
}); | |||
refreshGallery(1); | |||
refreshGallery(2); | |||
} | |||
function refreshGallery(boxNumber) { | |||
const select = $("#illustratorSelect" + boxNumber); | |||
const illustrator = select.val(); | |||
const img = $("#slide" + boxNumber); | |||
const counter = $("#counter" + boxNumber); | |||
const slideArray = slidesPerBox[illustrator] || []; | |||
if (!slideArray.length) { | |||
img.attr("src","https://illus.twainframe.org/images/2/2b/ChapterPlaceholder.png"); | |||
currentIndex[boxNumber] = 0; | |||
counter.text("0/0"); | |||
} else { | |||
showSlide(boxNumber, 0); | |||
} | } | ||
} | } | ||
function showSlide(boxNumber, index) { | |||
const select = $("#illustratorSelect" + boxNumber); | |||
const illustrator = select.val(); | |||
const slideArray = slidesPerBox[illustrator]; | |||
const img = $("#slide" + boxNumber); | |||
const counter = $("#counter" + boxNumber); | |||
if (!slideArray || !slideArray.length) return; | |||
currentIndex[boxNumber] = (index + slideArray.length) % slideArray.length; | |||
img.src | const imageId = slideArray[currentIndex[boxNumber]]; | ||
img.attr("src", "/index.php/Special:Redirect/file/" + imageId + ".jpg") | |||
.attr("alt", imageId) | |||
.attr("title", imageId); | |||
counter.text((currentIndex[boxNumber]+1) + "/" + slideArray.length); | |||
} | } | ||
function | function nextSlide(boxNumber) { | ||
showSlide(boxNumber, currentIndex[boxNumber] + 1); | |||
} | |||
function prevSlide(boxNumber) { | |||
showSlide(boxNumber, currentIndex[boxNumber] - 1); | |||
} | |||
function | |||
} | |||
}); | }); | ||
Revision as of 21:55, 2 September 2025
$(function() {
const illustrators = ["Kemble","Schroedter","Hirth","Busoni","Kellerer","Harder","Trier","Bebié"];
let slidesPerBox = {1: [], 2: []};
let currentIndex = {1: 0, 2: 0};
// Dropdowns befüllen
illustrators.forEach(name => {
$("#illustratorSelect1, #illustratorSelect2").append(
$('<option>').val(name).text(name)
);
});
// Button Event
$("#displayButton").click(loadSlideshowsByChapter);
// Prev/Next Buttons
$(".prevBtn").click(function() {
prevSlide($(this).data("box"));
});
$(".nextBtn").click(function() {
nextSlide($(this).data("box"));
});
// Dropdown Change
$("#illustratorSelect1, #illustratorSelect2").change(function() {
const box = $(this).attr("id").replace("illustratorSelect", "");
refreshGallery(parseInt(box));
});
function loadSlideshowsByChapter() {
const chapterNumber = parseInt($("#chapterInput").val(), 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");
const rows = $("#catalog tbody tr");
illustrators.forEach(name => { slidesPerBox[name] = []; });
rows.each(function() {
const cells = $(this).find("td");
if (cells.length < 9) return;
const illustratorText = cells.eq(2).text().trim().toLowerCase();
const idLink = cells.eq(8).find("a").text().trim().toLowerCase();
illustrators.forEach(name => {
if (illustratorText.includes(name.toLowerCase()) && idLink.includes(chapterTag)) {
slidesPerBox[name].push(idLink);
}
});
});
refreshGallery(1);
refreshGallery(2);
}
function refreshGallery(boxNumber) {
const select = $("#illustratorSelect" + boxNumber);
const illustrator = select.val();
const img = $("#slide" + boxNumber);
const counter = $("#counter" + boxNumber);
const slideArray = slidesPerBox[illustrator] || [];
if (!slideArray.length) {
img.attr("src","https://illus.twainframe.org/images/2/2b/ChapterPlaceholder.png");
currentIndex[boxNumber] = 0;
counter.text("0/0");
} else {
showSlide(boxNumber, 0);
}
}
function showSlide(boxNumber, index) {
const select = $("#illustratorSelect" + boxNumber);
const illustrator = select.val();
const slideArray = slidesPerBox[illustrator];
const img = $("#slide" + boxNumber);
const counter = $("#counter" + boxNumber);
if (!slideArray || !slideArray.length) return;
currentIndex[boxNumber] = (index + slideArray.length) % slideArray.length;
const imageId = slideArray[currentIndex[boxNumber]];
img.attr("src", "/index.php/Special:Redirect/file/" + imageId + ".jpg")
.attr("alt", imageId)
.attr("title", imageId);
counter.text((currentIndex[boxNumber]+1) + "/" + slideArray.length);
}
function nextSlide(boxNumber) {
showSlide(boxNumber, currentIndex[boxNumber] + 1);
}
function prevSlide(boxNumber) {
showSlide(boxNumber, currentIndex[boxNumber] - 1);
}
});