MediaWiki:Common.js
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)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
$(document).ready(function () { var communityFeatured = $('#community-featured'); var filteredListItems = $('.filtered-list-item'); var showArticleWrapper = $('#show-article-wrapper'); var listLists = [$('#list'), $('#list-list'), $('#list-list-1'), $('#list-list-2'), $('#list-list-3')]; var originalWidths = listLists.map(list => list.width()); // Detach and reattach the community featured element based on the page layout function adjustCommunityFeaturedPlacement() { if (filteredListItems.length >= 2) { communityFeatured.detach().insertAfter(filteredListItems.eq(1)).show(); } } // Setup image toggle for articles with multiple images function setupArticleImageToggle() { if ($('#show-article-wrapper-entry').length || $('#show-article-wrapper').length) { var images = $('.article-images .image-container img').map(function () { return { src: $(this).attr('src'), alt: $(this).attr('alt'), caption: $(this).next('div').text(), captionClass: $(this).next('div').attr('class') }; }).get(); if (images.length > 0) { setupImageToggle(images); updateImageLabel(1, images.length); } } } // Handle filter clicks and update community featured visibility $('#list, #list-list').on('mousedown', '.filtered-value-option', function() { updateCommunityFeaturedVisibility($(this).closest('#list, #list-list').attr('id')); }); function updateCommunityFeaturedVisibility(contextId) { var contextSelector = '#' + contextId; var hasActiveFilters = $(contextSelector + ' .filtered-value-option input[type="checkbox"]:checked').length > 0; communityFeatured.toggle(!hasActiveFilters); } // Function to open and adjust modal views function openModal(cardElement, event) { event.stopPropagation(); showArticleWrapper.show(); $.each(listLists, (index, list) => list.css('width', '60%')); filteredListItems.css('width', 'calc(33.333% - 0px)'); communityFeatured.hide(); $('#article-title, #article-content').empty(); populateModalContent(cardElement); } // Populate modal content based on the card element function populateModalContent(cardElement) { if (isRelatedArticle) { // Handle card elements (existing logic) var cardImages = []; for (var i = 1; i <= 5; i++) { var imageClass = '.related-article-image' + i; var captionClass = '.related-article-caption-image' + i; var imageElem = $(cardElement).find(imageClass + ' img'); if (imageElem.length) { var captionText = $(cardElement).find(imageClass + ' ' + captionClass).text(); cardImages.push({ link: $(cardElement).find(imageClass + ' a').attr('href'), src: imageElem.attr('src'), alt: imageElem.attr('alt'), caption: captionText, captionClass: 'related-article-caption-image' + i }); } } if (cardImages.length > 1) { setupImageToggle(cardImages); } // Handle related-article elements var entryNumber = $(cardElement).find('.related-article-entry-number').text(); var peopleHtml = $(cardElement).find('.related-article-people').html(); var title = $(cardElement).find('.related-article-title').text(); var typeHtml = $(cardElement).find('.related-article-type').html(); var externalLinkURL = $(cardElement).find('.related-article-link a').attr('href'); var entity = $(cardElement).find('.related-article-entity').text(); var discipline = $(cardElement).find('.related-article-discipline').text(); var subject = $(cardElement).find('.related-article-subject').text(); var description = $(cardElement).find('.related-article-description').html(); var reflection = $(cardElement).find('.related-article-reflection').html(); var quote = $(cardElement).find('.related-article-quote').text(); var modificationDate = $(cardElement).find('.related-article-modification-date').text(); // Update modal content for related-article $('#article-title').html('<p class="article-entry-number">' + entryNumber + '</p><p class="article-people">' + peopleHtml + '</p>'); var articleContentHtml = '<div class="article-title-link">'; articleContentHtml += '<p class="article-title">' + title + '</p>'; if (externalLinkURL) { articleContentHtml += '<a href="' + externalLinkURL + '" target="_blank" class="external-link-icon"><img src="/images/6/6d/Link-arrow-new.png" alt="Link"></a>'; } articleContentHtml += '</div>'; // Close the new div // Append type, entity, discipline, and subject details articleContentHtml += '<p class="article-type">' + typeHtml + '</p>' + '<div class="article-metadata">' + '<div class="article-metadata-column">' + '<p class="article-metadata-label">Entity</p>' + '<p class="article-metadata-value">' + entity + '</p>' + '</div>' + '<div class="article-metadata-column">' + '<p class="article-metadata-label">Discipline</p>' + '<p class="article-metadata-value">' + discipline + '</p>' + '</div>' + '<div class="article-metadata-column">' + '<p class="article-metadata-label">Subject(s)</p>' + '<p class="article-metadata-value">' + subject + '</p>' + '</div>' + '</div>'; // Add images if any if (cardImages.length > 0) { var initialImage = cardImages[0]; // Use the first image initially articleContentHtml += '<div class="article-images">' + getImageHtml(initialImage, 0, cardImages.length) + '</div>'; } // Add non-image content (description, reflection, etc.) articleContentHtml += (description ? '<p class="article-label-description">Description</p>' + '<div class="article-description">' + formatParagraphs(description) + '</div>' : '') + (reflection ? '<p class="article-label-reflection">Reflection</p>' + '<div class="article-reflection">' + formatParagraphs(reflection) + '</div>' : '') + (quote ? '<p class="article-label-quote">Quote</p>' + '<p class="article-quote">' + quote + '</p>' : '') + '<p class="article-label-modification-date">Added on</p>' + '<div class="article-modification-date">' + modificationDate + '</div>'; $('#article-content').html(articleContentHtml); } else { // Handle card elements (existing logic) var cardImages = []; for (var i = 1; i <= 5; i++) { var imageClass = '.image' + i; var captionClass = '.caption-image' + i; var imageElem = $(cardElement).find(imageClass + ' img'); if (imageElem.length) { var captionText = $(cardElement).find(imageClass + ' ' + captionClass).text(); cardImages.push({ link: $(cardElement).find(imageClass + ' a').attr('href'), src: imageElem.attr('src'), alt: imageElem.attr('alt'), caption: captionText, captionClass: 'caption-image' + i }); } } if (cardImages.length > 1) { setupImageToggle(cardImages); } var entryNumber = $(cardElement).find('.entry-number').text(); var title = $(cardElement).find('.title').text(); var peopleHtml = $(cardElement).find('.people').html(); var typeHtml = $(cardElement).find('.type').html(); var externalLinkURL = $(cardElement).find('.link a').attr('href'); var entity = $(cardElement).find('.entity').text(); var discipline = $(cardElement).find('.discipline').text(); var subject = $(cardElement).find('.subject').text(); var description = $(cardElement).find('.description').html(); var reflection = $(cardElement).find('.reflection').html(); var quote = $(cardElement).find('.quote').text(); var modificationDate = $(cardElement).find('.modification-date').text(); var relatedArticlesHtml = $(cardElement).find('.related-articles').html(); $('#article-title').html('<p class="article-entry-number">' + entryNumber + '</p><p class="article-people">' + peopleHtml + '</p>'); var articleContentHtml = '<div class="article-title-link">'; articleContentHtml += '<p class="article-title">' + title + '</p>'; if (externalLinkURL) { articleContentHtml += '<a href="' + externalLinkURL + '" target="_blank" class="external-link-icon"><img src="/images/6/6d/Link-arrow-new.png" alt="Link"></a>'; } articleContentHtml += '</div>'; // Close the new div // Append type, entity, discipline, and subject details articleContentHtml += '<p class="article-type">' + typeHtml + '</p>' + '<div class="article-metadata">' + '<div class="article-metadata-column">' + '<p class="article-metadata-label">Entity</p>' + '<p class="article-metadata-value">' + entity + '</p>' + '</div>' + '<div class="article-metadata-column">' + '<p class="article-metadata-label">Discipline</p>' + '<p class="article-metadata-value">' + discipline + '</p>' + '</div>' + '<div class="article-metadata-column">' + '<p class="article-metadata-label">Subject(s)</p>' + '<p class="article-metadata-value">' + subject + '</p>' + '</div>' + '</div>'; // Add images if any if (cardImages.length > 0) { var initialImage = cardImages[0]; // Use the first image initially articleContentHtml += '<div class="article-images">' + getImageHtml(initialImage, 0, cardImages.length) + '</div>'; } // Add non-image content (description, reflection, etc.) articleContentHtml += (description ? '<p class="article-label-description">Description</p>' + '<div class="article-description">' + formatParagraphs(description) + '</div>' : '') + (reflection ? '<p class="article-label-reflection">Reflection</p>' + '<div class="article-reflection">' + formatParagraphs(reflection) + '</div>' : '') + (quote ? '<p class="article-label-quote">Quote</p>' + '<p class="article-quote">' + quote + '</p>' : '') + '<p class="article-label-modification-date">Added on</p>' + '<div class="article-modification-date">' + modificationDate + '</div>'; $('#article-content').html(articleContentHtml); $('#related-articles').html(relatedArticlesHtml); if (relatedArticlesHtml && relatedArticlesHtml.trim().length > 0) { $('#related-articles').html('<div class="related-articles-label">Related Articles</div><div class="related-articles-container">' + relatedArticlesHtml + '</div>').show(); } } // Apply the fade-out effect to both #list and #list-list elements $('#list, #list-list, #list-list-1, #list-list-2, #list-list-3, #list-block-1, #list-block-2, #list-block-3').addClass('fade-out'); // End of openModal } // Close modal function function closeModal() { showArticleWrapper.hide(); $.each(listLists, (index, list) => list.width(originalWidths[index])); filteredListItems.css('width', 'calc(20% - 0px)'); communityFeatured.toggle(areFiltersCleared('#list') && areFiltersCleared('#list-list')); } // Check if filters are cleared in a given context function areFiltersCleared(selector) { return $(selector + ' .filtered-value-option input[type="checkbox"]:checked').length === 0; } // Initial setup calls adjustCommunityFeaturedPlacement(); setupArticleImageToggle(); // Event bindings for modal interactions $('#list, #list-list, #list-list-1, #list-list-2, #list-list-3, #list-block-1, #list-block-2, #list-block-3').on('mousedown', '.card, .list-card', function(event) { openModal(this, event); }); $('#show-article-wrapper').on('mousedown', '.related-article', function(event) { openModal(this, event); }); $('#close-button').on('click', closeModal); $(document).on('mousedown', function (event) { if (!showArticleWrapper.is(event.target) && showArticleWrapper.has(event.target).length === 0) { closeModal(); } }); // Button to open [Nr.s] $('.button-open-nrs').click(function() { var queryDiv = $('.entry-nrs-query'); if (queryDiv.css('display') === 'none') { queryDiv.css('display', 'flex'); } else { queryDiv.css('display', 'none'); } }); function setShowArticleRotationEffect() { const offset = 20; const showArticle = document.querySelector('#show-article'); const h = showArticle.clientHeight; const theta = -Math.atan(offset/h); const a = Math.cos(theta); const b = Math.sin(theta); const c = -Math.sin(theta); const d = Math.cos(theta); const showArticleBefore = document.querySelector('#show-article-before'); const transformValue = 'matrix('+a+','+b+','+c+','+d+',0,0)'; showArticleBefore.style.transform = transformValue; } // Delegate the mousedown event for both block view and list view pages $('#list, #list-list, #list-list-1, #list-list-2, #list-list-3, #list-block-1, #list-block-2, #list-block-3').on('mousedown', '.card, .list-card', function(event) { if ($(event.target).closest('.people a, .type a').length) { return; // Clicked on a link inside '.people' or '.type', do nothing } openModal(this, event); // Pass the event object to openModal setShowArticleRotationEffect(); }); $('#show-article-wrapper').on('mousedown', '.related-article', function(event) { openModal(this, event); // Call openModal when a related-article is clicked setShowArticleRotationEffect(); }); function setupImageToggle(images) { var currentIndex = 0; function toggleImage() { currentIndex = (currentIndex + 1) % images.length; var image = images[currentIndex]; updateImageLabel(currentIndex + 1, images.length); // Update the label on toggle $('#article-content').find('.article-images').html(getImageHtml(image, currentIndex, images.length)); } $('#article-content').on('click', '.image-container img', function() { toggleImage(); }); } function getImageHtml(image, currentIndex, totalImages) { var imageLabel = (currentIndex + 1) + '/' + totalImages + ' IMAGES'; return '<p class="article-label-image">' + imageLabel + '</p>' + '<div class="image-container">' + '<img src="' + image.src + '" alt="' + image.alt + '">' + '<div class="' + image.captionClass + '">' + image.caption + '</div>' + '</div>'; } function updateImageLabel(currentIndex, totalImages) { var imageLabel = currentIndex + '/' + totalImages + ' IMAGES'; $('#article-content .article-label-image').text(imageLabel); // Update or set the label text } // Close modal with Close button $('#close-button').on('click', function () { $('#list, #list-list, #list-list-1, #list-list-2, #list-list-3, #list-block-1, #list-block-2, #list-block-3').removeClass('fade-out'); closeModal(); }); // Close modal and remove fade out also when clicking outside of card $(document).on('mousedown', function (event) { var isOutsideWrapper = !showArticleWrapper.is(event.target) && showArticleWrapper.has(event.target).length === 0; var isOnCard = $(event.target).closest('.card, .list-card').length > 0; if (isOutsideWrapper && !isOnCard) { console.log('Closing modal from outside wrapper and not on card'); $('#list, #list-list, #list-list-1, #list-list-2, #list-list-3, #list-block-1, #list-block-2, #list-block-3').removeClass('fade-out'); showArticleWrapper.css('display', 'none'); closeModal(); // Use closeModal() for cleanup } }); // Hover effect for scrolling showArticleWrapper.hover(function () { // On hover, enable scrolling on #show-article-wrapper $(this).css('overflow-y', 'auto'); }, function () { // On hover out, disable scrolling on #show-article-wrapper $(this).css('overflow-y', 'hidden'); }); // ALL VIEWS IN ONE PAGE // Handle List View Button $(".list-view-button").click(function() { // Show list view and list sorting buttons, hide block view and block sorting buttons $(".list-view").show(); $(".block-view").hide(); $(".list-sorting-buttons").show(); $(".block-sorting-buttons").hide(); $(".list-view > div").hide(); $(".chronicle-list").show(); }); // Handle Block View Button $(".block-view-button").click(function() { // Show block view and block sorting buttons, hide list view and list sorting buttons $(".block-view").show(); $(".list-view").hide(); $(".block-sorting-buttons").css('display', 'flex'); $(".list-sorting-buttons").hide(); $(".block-view > div").hide(); $(".chronicle-block").show(); }); // Handle List Sorting Buttons $(".chronicle-list-button").click(function() { // Show only the chronicle list $(".list-view > div").hide(); $(".chronicle-list").show(); }); $(".random-list-button").click(function() { // Show only the random list $(".list-view > div").hide(); $(".random-list").show(); }); $(".alphabetical-list-button").click(function() { // Show only the alphabetical list $(".list-view > div").hide(); $(".alphabetical-list").show(); }); // Similar event handlers can be added for block view buttons if needed // Handle Block Sorting Buttons $(".chronicle-block-button").click(function() { // Show only the chronicle block $(".block-view > div").hide(); $(".chronicle-block").show(); }); $(".random-block-button").click(function() { // Show only the random block $(".block-view > div").hide(); $(".random-block").show(); }); $(".alphabetical-block-button").click(function() { // Show only the alphabetical block $(".block-view > div").hide(); $(".alphabetical-block").show(); }); // NEW TEST // Handle Block View Button in home $(".home-block-view-button").click(function() { // Show block view and block sorting buttons, hide list view and list sorting buttons $(".home-block-view").show(); $(".home-list-view").hide(); $(".home-block-sorting-buttons").css('display', 'flex'); $(".home-list-sorting-buttons").hide(); $(".home-block-view > div").hide(); $(".home-chronicle-block").show(); }); // Handle List View Button in home $(".home-list-view-button").click(function() { // Show list view and list sorting buttons, hide block view and block sorting buttons $(".home-list-view").show(); $(".home-block-view").hide(); $(".home-list-sorting-buttons").css('display', 'flex'); $(".home-block-sorting-buttons").hide(); $(".home-list-view > div").hide(); $(".home-chronicle-list").show(); }); // Handle List Sorting Buttons in home $(".home-chronicle-list-button").click(function() { // Show only the chronicle list $(".home-list-view > div").hide(); $(".home-chronicle-list").show(); }); $(".home-random-list-button").click(function() { // Show only the random list $(".home-list-view > div").hide(); $(".home-random-list").show(); }); $(".home-alphabetical-list-button").click(function() { // Show only the alphabetical list $(".home-list-view > div").hide(); $(".home-alphabetical-list").show(); }); // Handle Block Sorting Buttons $(".home-chronicle-block-button").click(function() { // Show only the chronicle block $(".home-block-view > div").hide(); $(".home-chronicle-block").show(); }); $(".home-random-block-button").click(function() { // Show only the random block $(".home-block-view > div").hide(); $(".home-random-block").show(); }); $(".home-alphabetical-block-button").click(function() { // Show only the alphabetical block $(".home-block-view > div").hide(); $(".home-alphabetical-block").show(); }); });