MediaWiki:Common.css.bak
$(document).ready(function () {
// Global variables var cards = $(".card"); var showArticleWrapper = $("#show-article-wrapper"); var areFiltersActive = false;
// Make header-box in Home clickable $(".head-box").click(function () { window.location.href = "/Main_Page"; // Redirects to the home page });
// Loop through each card to format related articles cards.each(function () { // Check if the card has related articles var relatedArticles = $(this).find(".related-articles"); if (relatedArticles.length > 0) { // Get all the related article elements var relatedArticleElements = relatedArticles.find(".related-article");
// Create an array to store unique related articles var uniqueArticles = [];
// Loop through each related article element relatedArticleElements.each(function () {
// Remove
tags from the article $(this).find("p").remove(); // Convert the article HTML to a string var articleHTML = $(this)[0].outerHTML; // Check if the article HTML already exists in the uniqueArticles array if ($.inArray(articleHTML, uniqueArticles) === -1) { // If it doesn't exist, add it to the uniqueArticles array uniqueArticles.push(articleHTML); } }); // Clear the content of the related articles container relatedArticles.empty(); // Append the unique related articles back to the container relatedArticles.append(uniqueArticles.join("")); } }); // Utility Functions function sortChronologically() { var cards = $(".list-container .card").get(); cards.sort(function (a, b) { var numberA = parseInt( $(a).find(".entry-number").text().replace(/\[|\]/g, ""), 10 ); var numberB = parseInt( $(b).find(".entry-number").text().replace(/\[|\]/g, ""), 10 ); return numberB - numberA; // Descending order }); $.each(cards, function (index, item) { $(".list-container").append(item); }); } function randomizeCards(selector) { var cards = $(selector).get(); var i = cards.length, j, temp; while (--i > 0) { j = Math.floor(Math.random() * (i + 1)); temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } $.each(cards, function (index, item) { $(selector).parent().append(item); }); } function sortAlphabetically(selector) { var cards = $(selector).get(); cards.sort(function (a, b) { var titleA = $(a).find(".title").text().toUpperCase(); var titleB = $(b).find(".title").text().toUpperCase(); return titleA < titleB ? -1 : titleA > titleB ? 1 : 0; }); $.each(cards, function (index, item) { $(selector).parent().append(item); }); } function updateViews() { // Handle cards in the list view $(".home-chronicle-list div.list-container div.card:not(.event)").each( function () { if (!$(this).closest(".home-chronicle-block").length) { var title = $(this).find(".title").detach(); var images = $(this).find(".images").detach(); // Remove existing .title-images if it exists $(this).find(".title-images").remove(); var titleImagesContainer = $( '
'
).append(images, title); $(this).find(".people").after(titleImagesContainer); } } );
// Handle cards in the block view $(".home-chronicle-block div.list-container div.card:not(.event)").each( function () { // Remove .title-images container if it exists, re-attach .title and .images to their original places var titleImagesContainer = $(this).find(".title-images"); if (titleImagesContainer.length) { var title = titleImagesContainer.find(".title").detach(); var images = titleImagesContainer.find(".images").detach(); titleImagesContainer.remove();
$(this).find(".people").after(title); $(this).find(".type").after(images); } else { // If .title-images doesn't exist, ensure .images is placed correctly var images = $(this).find(".images").detach(); $(this).find(".type").after(images); } } ); }
function processEventCards() { $(".card.event").each(function () { var $card = $(this); var existingContainer = $card.find(".container-people-date");
// Create container if missing if (existingContainer.length === 0) {
existingContainer = $('
');
$card.append(existingContainer); // temp placement }
// Detach people and date var people = $card.find(".people").detach(); var date = $card.find(".date").detach();
// BLOCK VIEW (gallery) if ($card.closest(".home-chronicle-block").length) { existingContainer.append(people).append(date);
// Place container after title if (!existingContainer.is($card.find(".title").next())) { $card.find(".title").after(existingContainer); }
// LIST VIEW } else if ($card.closest(".home-chronicle-list").length) { // Only append .people into container existingContainer.empty().append(people);
// Place container before title $card.find(".title").before(existingContainer);
// Place date after title $card.find(".title").after(date); } }); }
if ($("#home").length > 0) { // This code will only run only on the homepage. $(".home-block-view").show(); $(".home-chronicle-block-button, .home-block-view-button").addClass( "active-view-button" );
// Initially hide list view sorting buttons and set the default sorted view for block $( ".home-chronicle-list-button, .home-random-list-button, .home-alphabetical-list-button" ).hide(); sortChronologically(); // Sort the block view chronologically by default
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews();
$(".home-list-view-button").click(function () { $(".home-list-sorting-buttons").css("display", "flex"); // Switching view classes $(".home-block-view") .removeClass("home-block-view") .addClass("home-list-view"); // Additional class switch $(".home-chronicle-block") .removeClass("home-chronicle-block") .addClass("home-chronicle-list"); // Toggling visibility of buttons $( ".home-chronicle-block-button, .home-random-block-button, .home-alphabetical-block-button" ).hide(); $( ".home-chronicle-list-button, .home-random-list-button, .home-alphabetical-list-button" ).show(); updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews();
// Remove active class from block view button and add to list view button $(".home-block-view-button").removeClass("active-view-button"); $(".home-list-view-button").addClass("active-view-button");
// Conditional checks for transferring the active class from block to list buttons if ($(".home-chronicle-block-button").hasClass("active-view-button")) { $(".home-chronicle-block-button").removeClass("active-view-button"); $(".home-chronicle-list-button").addClass("active-view-button"); } else if ( $(".home-random-block-button").hasClass("active-view-button") ) { $(".home-random-block-button").removeClass("active-view-button"); $(".home-random-list-button").addClass("active-view-button"); } else if ( $(".home-alphabetical-block-button").hasClass("active-view-button") ) { $(".home-alphabetical-block-button").removeClass("active-view-button"); $(".home-alphabetical-list-button").addClass("active-view-button"); } });
$(".home-block-view-button").click(function () { console.log("Block view button clicked."); $(".home-list-sorting-buttons").hide(); // Hide list sorting buttons $(".home-list-view") .removeClass("home-list-view") .addClass("home-block-view"); $(".home-chronicle-list") .removeClass("home-chronicle-list") .addClass("home-chronicle-block"); $( ".home-chronicle-block-button, .home-random-block-button, .home-alphabetical-block-button" ).show(); $( ".home-chronicle-list-button, .home-random-list-button, .home-alphabetical-list-button" ).hide(); updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-list-view-button").removeClass("active-view-button"); $(".home-block-view-button").addClass("active-view-button");
// Conditional checks for transferring the active class from block to list buttons if ($(".home-chronicle-list-button").hasClass("active-view-button")) { $(".home-chronicle-list-button").removeClass("active-view-button"); $(".home-chronicle-block-button").addClass("active-view-button"); } else if ($(".home-random-list-button").hasClass("active-view-button")) { $(".home-random-list-button").removeClass("active-view-button"); $(".home-random-block-button").addClass("active-view-button"); } else if ( $(".home-alphabetical-list-button").hasClass("active-view-button") ) { $(".home-alphabetical-list-button").removeClass("active-view-button"); $(".home-alphabetical-block-button").addClass("active-view-button"); } });
// BLOCK VIEW SORTING BUTTONS $(".home-chronicle-block-button").click(function () { sortChronologically();
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-chronicle-block-button").addClass("active-view-button"); $(".home-random-block-button").removeClass("active-view-button"); $(".home-alphabetical-block-button").removeClass("active-view-button"); });
$(".home-random-block-button").click(function () { randomizeCards(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-random-block-button").addClass("active-view-button"); $(".home-chronicle-block-button").removeClass("active-view-button"); $(".home-alphabetical-block-button").removeClass("active-view-button"); });
$(".home-alphabetical-block-button").click(function () { sortAlphabetically(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-alphabetical-block-button").addClass("active-view-button"); $(".home-chronicle-block-button").removeClass("active-view-button"); $(".home-random-block-button").removeClass("active-view-button"); });
// LIST VIEW SORTING BUTTONS $(".home-chronicle-list-button").click(function () { sortChronologically();
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-chronicle-list-button").addClass("active-view-button"); $(".home-random-list-button").removeClass("active-view-button"); $(".home-alphabetical-list-button").removeClass("active-view-button"); });
$(".home-random-list-button").click(function () { randomizeCards(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-random-list-button").addClass("active-view-button"); $(".home-chronicle-list-button").removeClass("active-view-button"); $(".home-alphabetical-list-button").removeClass("active-view-button"); });
$(".home-alphabetical-list-button").click(function () { sortAlphabetically(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".home-alphabetical-list-button").addClass("active-view-button"); $(".home-chronicle-list-button").removeClass("active-view-button"); $(".home-random-list-button").removeClass("active-view-button"); }); } else { console.log("NOT HOMEPAGE"); $(".home-list-view").show(); $(".chronicle-list-button, .list-view-button").addClass( "active-view-button" );
// Initialization and Default Settings // Initially hide block view sorting buttons and set the default sorted view for list $( ".chronicle-block-button, .random-block-button, .alphabetical-block-button" ).hide(); sortChronologically(); // Sort the block view chronologically by default updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews();
$(".list-view-button").click(function () { console.log("List view button clicked."); $(".list-sorting-buttons").css("display", "flex"); $(".block-sorting-buttons").hide(); // Switching view classes $(".home-block-view") .removeClass("home-block-view") .addClass("home-list-view"); // Additional class switch $(".home-chronicle-block") .removeClass("home-chronicle-block") .addClass("home-chronicle-list"); // Toggling visibility of buttons $( ".chronicle-block-button, .random-block-button, .alphabetical-block-button" ).hide(); $( ".chronicle-list-button, .random-list-button, .alphabetical-list-button" ).show(); updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews();
// Remove active class from block view button and add to list view button $(".block-view-button").removeClass("active-view-button"); $(".list-view-button").addClass("active-view-button");
// Conditional checks for transferring the active class from block to list buttons if ($(".chronicle-block-button").hasClass("active-view-button")) { $(".chronicle-block-button").removeClass("active-view-button"); $(".chronicle-list-button").addClass("active-view-button"); } else if ($(".random-block-button").hasClass("active-view-button")) { $(".random-block-button").removeClass("active-view-button"); $(".random-list-button").addClass("active-view-button"); } else if ( $(".alphabetical-block-button").hasClass("active-view-button") ) { $(".alphabetical-block-button").removeClass("active-view-button"); $(".alphabetical-list-button").addClass("active-view-button"); } });
$(".block-view-button").click(function () { console.log("Block view button clicked."); $(".list-sorting-buttons").hide(); // Hide list sorting buttons $(".block-sorting-buttons").css("display", "flex"); $(".home-list-view") .removeClass("home-list-view") .addClass("home-block-view"); $(".home-chronicle-list") .removeClass("home-chronicle-list") .addClass("home-chronicle-block"); $( ".chronicle-block-button, .random-block-button, .alphabetical-block-button" ).show(); $( ".chronicle-list-button, .random-list-button, .alphabetical-list-button" ).hide(); updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".list-view-button").removeClass("active-view-button"); $(".block-view-button").addClass("active-view-button");
// Conditional checks for transferring the active class from block to list buttons if ($(".chronicle-list-button").hasClass("active-view-button")) { $(".chronicle-list-button").removeClass("active-view-button"); $(".chronicle-block-button").addClass("active-view-button"); } else if ($(".random-list-button").hasClass("active-view-button")) { $(".random-list-button").removeClass("active-view-button"); $(".random-block-button").addClass("active-view-button"); } else if ( $(".alphabetical-list-button").hasClass("active-view-button") ) { $(".alphabetical-list-button").removeClass("active-view-button"); $(".alphabetical-block-button").addClass("active-view-button"); } });
// BLOCK VIEW SORTING BUTTONS $(".chronicle-block-button").click(function () { sortChronologically();
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".chronicle-block-button").addClass("active-view-button"); $(".random-block-button").removeClass("active-view-button"); $(".alphabetical-block-button").removeClass("active-view-button"); });
$(".random-block-button").click(function () { randomizeCards(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".random-block-button").addClass("active-view-button"); $(".chronicle-block-button").removeClass("active-view-button"); $(".alphabetical-block-button").removeClass("active-view-button"); });
$(".alphabetical-block-button").click(function () { sortAlphabetically(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".alphabetical-block-button").addClass("active-view-button"); $(".chronicle-block-button").removeClass("active-view-button"); $(".random-block-button").removeClass("active-view-button"); });
// LIST VIEW SORTING BUTTONS $(".chronicle-list-button").click(function () { sortChronologically();
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".chronicle-list-button").addClass("active-view-button"); $(".random-list-button").removeClass("active-view-button"); $(".alphabetical-list-button").removeClass("active-view-button"); });
$(".random-list-button").click(function () { randomizeCards(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".random-list-button").addClass("active-view-button"); $(".chronicle-list-button").removeClass("active-view-button"); $(".alphabetical-list-button").removeClass("active-view-button"); });
$(".alphabetical-list-button").click(function () { sortAlphabetically(".list-container .card");
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); $(".alphabetical-list-button").addClass("active-view-button"); $(".chronicle-list-button").removeClass("active-view-button"); $(".random-list-button").removeClass("active-view-button"); }); }
// FILTERS --------------------- SECTION // // General Filters Toggle Button $(".general-toggle").click(function () { var filtersDiv = $("#filters"); var resetButton = $(".reset-button");
filtersDiv.toggleClass("is-visible");
if (filtersDiv.hasClass("is-visible")) { filtersDiv.css("display", "grid").hide().slideDown(100); $(this).text("[FILTER]"); // Attach click handler to document $(document).on("mousedown.hideFilters", function (event) { var isOutsideFilters = !filtersDiv.is(event.target) && filtersDiv.has(event.target).length === 0; var isOnToggle = $(event.target).closest(".general-toggle").length > 0;
if (isOutsideFilters && !isOnToggle) { filtersDiv.removeClass("is-visible").slideUp(100, function () { $(this).css("display", "none"); }); $(".general-toggle").text("[FILTER]"); // Remove the document click handler $(document).off("mousedown.hideFilters"); } }); } else { filtersDiv.slideUp(100, function () { $(this).css("display", "none"); }); $(this).text("[FILTER]"); // Remove the document click handler $(document).off("mousedown.hideFilters"); }
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); });
// Specific Toggle for Filter Sections like TYPE, ENTITY, etc. $(".open-filter").click(function (event) { event.stopPropagation();
var filterType = $(this).closest(".filter").data("filter"); var cardSelector = $(".card").length > 0 ? ".card" : ".community-card"; // Determine which card type is present
console.log("Filter type:", filterType, "Card Selector:", cardSelector);
$("#values-" + filterType).toggle();
if ($("#values-" + filterType).is(":visible")) { $(this).addClass("active-filter"); } else { $(this).removeClass("active-filter"); }
// Pass the determined card selector to the function updateLastVisibleCard(cardSelector); updateWidthBlockView(cardSelector); processEventCards(cardSelector); updateViews(cardSelector);
console.log("Updated views and borders after filter toggle"); });
function filterCards() { var displayCountsHtml = ""; var cardSelector = $(".card").length > 0 ? ".card" : ".community-card"; // Determine which card type is present
$(".filter .values a[title]").each(function () { var anchor = $(this); var filterValue = anchor.attr("title").toLowerCase(); var count = 0;
if (anchor.find("button").hasClass("active")) { $(cardSelector).each(function () { var card = $(this); $(".filter").each(function () { var filterType = $(this).data("filter"); var cardValue = card .find("." + filterType) .text() .toLowerCase(); if (cardValue.indexOf(filterValue) !== -1) { count++; } }); });
displayCountsHtml +=
"[" + count + "] " + filterValue + " ";
}
});
if (displayCountsHtml) { $(".count-filtered-cards").html(displayCountsHtml).show(); } else { $(".count-filtered-cards").hide(); }
// Apply filtering and pass the determined card selector to the function applyFiltering(cardSelector);
updateLastVisibleCard(cardSelector); updateWidthBlockView(cardSelector); processEventCards(cardSelector); updateViews(cardSelector);
console.log("Filtering process complete, updated views and borders"); }
function applyFiltering() { // Determine which card selector to use based on the elements present in the DOM var cardSelector = $(".card").length > 0 ? ".card" : ".community-card";
// Apply the logic to the determined card type $(cardSelector) .show() .each(function () { var card = $(this); var hideCard = false;
$(".filter").each(function () { if (hideCard) return;
var filterType = $(this).data("filter"); var activeFilters = $(this) .find(".values a[title] button.active") .map(function () { return $(this).parent("a").attr("title").toLowerCase(); }) .get();
if (activeFilters.length > 0) { var cardValue = card .find("." + filterType) .text() .toLowerCase(); var matchesFilter = activeFilters.some(function (filterValue) { return cardValue.indexOf(filterValue) !== -1; }); if (!matchesFilter) hideCard = true; } });
if (hideCard) card.hide(); }); }
function updateLastVisibleCard() { // Target only the list view container for updating the last visible card $(".home-chronicle-list div.list-container div.card").removeClass( "last-visible" );
// Find the last visible card within the list view and add the class var lastVisibleCard = $( ".home-chronicle-list div.list-container div.card:visible:last" ); lastVisibleCard.addClass("last-visible"); }
function updateWidthBlockView() { // Target only the block view container for updating the with of card $(".home-chronicle-block div.list-container").css("width", "100%"); $(".home-chronicle-block div.list-container div.card").css( "width", "calc(20% - 0px)" ); $( ".home-chronicle-block div.list-container div.card:nth-child(5n + 1)" ).css("width", "calc(20% + 4px)"); }
// Reset function to remove active filters $(".reset-filter").click(function (event) { event.stopPropagation(); // Prevent event bubbling
// Remove 'active' class from all filter buttons $("#filters .values button").removeClass("active"); $(".open-filter").removeClass("active-filter");
// Reset and hide the filter counts $(".count-filtered-cards").text("").hide();
filterCards(); // Reapply filtering based on the updated active buttons
// Update other UI elements as needed, excluding the general toggle button updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); });
$("#filters .values button").click(function () { console.log("Filter is clicked!!!"); $(this).toggleClass("active"); filterCards(); // Re-apply the filters based on the updated active buttons
updateLastVisibleCard(); updateWidthBlockView(); processEventCards(); updateViews(); });
// Hide filters when window is scrolled $(window).on("scroll", function () { var filtersDiv = $("#filters");
if (filtersDiv.hasClass("is-visible")) { filtersDiv.removeClass("is-visible").slideUp(100, function () { $(this).css("display", "none"); // The filter reset code has been removed to keep the filters active }); $(".general-toggle").text("[FILTER]"); // Update the toggle button text } });
// MODAL ARTICLE --------------------- SECTION // // Format paragraphs function formatParagraphs(text) { var paragraphs = text.split("\n").filter(function (p) { return p.trim() !== ""; }); return paragraphs .map(function (p) {
return "
" + p.trim() + "
";
}) .join(""); }
var images = []; // Initialize an empty array to store the images // Find all image containers within the article content and extract the necessary information $(".article-images .image-container").each(function () { var img = $(this).find("img"); var captionDiv = $(this).find('div[class^="caption-image"]'); var image = { src: img.attr("src"), alt: img.attr("alt"), caption: captionDiv.text(), captionClass: captionDiv.attr("class"), }; images.push(image); // Add the image object to the images array });
if (images.length > 0) { setupImageToggle(images); // Call the setupImageToggle function with the images array updateImageLabel(1, images.length); // Set the label for the first image immediately }
function setupImageToggle(images) { var currentIndex = 0; var enableNavigation = images.length > 1; // Enable navigation only if there is more than one image
function showImage(index) { currentIndex = index; var image = images[currentIndex]; updateImageLabel(currentIndex + 1, images.length); $("#article-content") .find(".article-images") .html( getImageHtml(image, currentIndex, images.length, enableNavigation) ); }
// Attach click handlers only if navigation is enabled if (enableNavigation) { $("#article-content").on("click", ".next-arrow", function () { showImage((currentIndex + 1) % images.length); });
$("#article-content").on("click", ".prev-arrow", function () { showImage((currentIndex - 1 + images.length) % images.length); }); }
// Display the first image showImage(currentIndex); }
function getImageHtml(image, currentIndex, totalImages, enableNavigation) { var imageLabel = currentIndex + 1 + "/" + totalImages + " IMAGES";
// Render navigation arrows based on the enableNavigation flag var navigationHtml = enableNavigation
? '
'
: "";
return (
'
"
); }
function updateImageLabel(currentIndex, totalImages) { var imageLabel = currentIndex + "/" + totalImages + " IMAGES"; $("#article-content .article-label-image").text(imageLabel); }
$(".caption-image1").each(function () { // Split the caption at each
tag and wrap each line in a span var htmlContent = $(this).html(); var lines = htmlContent.split("
"); var wrappedLines = lines.map(function (line) { return '' + line + ""; }); var newHtml = wrappedLines.join("
"); $(this).html(newHtml); });
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; }
function openEvent(element, event) { event.stopPropagation(); event.preventDefault();
var url = $(element).find(".link a").attr("href"); if (url) { window.open(url, "_blank").focus(); } }
function openModal(cardElement, event) { event.stopPropagation(); $("#print-chooser").hide(); $("#show-article").removeClass("print-opts-open"); var pageTitle = $(cardElement).data("page") || null; // e.g. "090" window.currentEntryTitle = pageTitle;
var isRelatedArticle = $(cardElement).hasClass("related-article"); showArticleWrapper.css("display", "block");
// Clear existing content in modal $("#article-title").empty(); $("#article-content").empty();
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 externalPdfURL = $(cardElement) .find(".related-article-pdf a") .attr("href"); 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 subjectHtml = $(cardElement).find(".related-article-subject").html(); 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(
'
' + entryNumber + '
' +
peopleHtml +
"
"
);
var articleContentHtml = '
' + title + "
";// Create a div that will wrap the linksarticleContentHtml += '
if (externalPdfURL) { articleContentHtml += '<a href="' + externalPdfURL + '" target="_blank" class="pdf-link-icon">[PDF⤴]</a>'; } if (externalLinkURL) { articleContentHtml += '<a href="' + externalLinkURL + '" target="_blank" class="external-link-icon">[WEB⤴]</a>'; }
// Close the .link-pdf divarticleContentHtml += "
"; // Close the container div
// Append type, entity, discipline, and subject details articleContentHtml +=
'
' + typeHtml + "
" + '
";
// Add images if any if (cardImages.length > 0) { var initialImage = cardImages[0]; // Use the first image initially var enableNavigation = cardImages.length > 1; // Enable navigation only if more than one image articleContentHtml +=
'
getImageHtml(initialImage, 0, cardImages.length, enableNavigation) +"
";
} // Add non-image content (description, reflection, etc.) articleContentHtml += (description
? '
Description
' + '
formatParagraphs(description) +"
"
: "") + (reflection
? '
Reflection
' + '
formatParagraphs(reflection) +"
"
: "") + (quote
? '
Quote
' + '
' + quote + "
"
: "") +
'
Added on
' + '
modificationDate +"
";
$("#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 externalPdfURL = $(cardElement).find(".pdf a").attr("href"); var externalLinkURL = $(cardElement).find(".link a").attr("href"); var entity = $(cardElement).find(".entity").text(); var discipline = $(cardElement).find(".discipline").text(); var subjectHtml = $(cardElement).find(".subject").html(); var description = $(cardElement).find(".description").html(); var reflection = $(cardElement).find(".reflection").html(); var quote = $(cardElement).find(".quote").text(); var externalReferenceHtml = $(cardElement) .find(".external-reference") .html(); var modificationDate = $(cardElement).find(".modification-date").text(); var relatedArticlesHtml = $(cardElement).find(".related-articles").html();
$("#article-title").html(
'
' + entryNumber + '
' +
peopleHtml +
"
"
);
var articleContentHtml = '
' + title + "
";// Create a div that will wrap the linksarticleContentHtml += '
if (externalPdfURL) { articleContentHtml += '<a href="' + externalPdfURL + '" target="_blank" class="pdf-link-icon">[PDF⤴]</a>'; } if (externalLinkURL) { articleContentHtml += '<a href="' + externalLinkURL + '" target="_blank" class="external-link-icon">[WEB⤴]</a>'; } // Close the .link-pdf divarticleContentHtml += "
"; // Close the new div
// Append type, entity, discipline, and subject details articleContentHtml +=
'
' + typeHtml + "
" + '
";
// Add images if any if (cardImages.length > 0) { var initialImage = cardImages[0]; // Use the first image initially var enableNavigation = cardImages.length > 1; // Enable navigation only if more than one image articleContentHtml +=
'
getImageHtml(initialImage, 0, cardImages.length, enableNavigation) +"
";
} // Add non-image content (description, reflection, etc.) articleContentHtml += (description
? '
Description
' + '
formatParagraphs(description) +"
"
: "") + (reflection
? '
Reflection
' + '
formatParagraphs(reflection) +"
"
: "") + (externalReferenceHtml
? '
References
' + '
' + externalReferenceHtml + "
"
: "") + (quote
? '
Quote
' + '
' + quote + "
"
: "") +
'
Added on
' + '
modificationDate +"
";
$("#article-content").html(articleContentHtml); $("#related-articles").html(relatedArticlesHtml);
if (relatedArticlesHtml && relatedArticlesHtml.trim().length > 0) { $("#related-articles") .html(
'
"
) .show(); } }
// Check which view is active and set the width accordingly if ($(".home-chronicle-list").is(":visible")) { $(".home-list-view").each(function () { var currentWidth = $(this).width(); // Get the current width $(this).data("originalWidth", currentWidth); // Store the original width $(this).css("width", "calc(60% - 2px)"); });
// Modify the .type elements within .home-chronicle-list $(".home-chronicle-list .type").each(function () { var currentLeft = $(this).css("left"); // Get the current left value $(this).data("originalLeft", currentLeft); // Store the original left value $(this).css("left", "85%"); }); } else if ($(".home-chronicle-block").is(":visible")) { $(".home-chronicle-block div.list-container").each(function () { var currentWidth = $(this).width(); // Get the current width $(this).css("width", "calc(60% - 0px)"); // Set the new width as 30% of the current width }); $(".home-chronicle-block div.list-container div.card").each(function () { var currentWidth = $(this).width(); // Get the current width $(this).css("width", "calc(33.333% - 0px)"); // Set the new width as 30% of the current width }); }
// Apply the fade-out effect to both #list and #list-list elements $(".list-container").addClass("fade-out"); }
// closeModal function function closeModal() { $("#print-chooser").hide(); $("#show-article").removeClass("print-opts-open"); if ($(".home-chronicle-list").is(":visible")) { $(".home-list-view").css("width", "100%"); $(".home-chronicle-list div.list-container div.card div.type").css( "left", "90%" ); } else if ($(".home-chronicle-block").is(":visible")) { updateWidthBlockView(); } showArticleWrapper.hide(); }
$(".card").on("click", function (event) { // Check if the click event is originating from a link within .people or .type, or any other specific area if ($(event.target).closest(".people a, .type a").length) { // The click is inside a link; let the default behavior proceed without opening the modal return; }
// Prevent further event handling if the card has the 'event' class if ($(this).hasClass("event")) { event.stopImmediatePropagation(); openEvent(this, event); $(".list-container").removeClass("fade-out"); closeModal(); } else { // Handle cards without the 'event' class openModal(this, event); setShowArticleRotationEffect(); } });
$("#show-article-wrapper").on("click", ".related-article", function (event) { openModal(this, event); // Call openModal when a related-article is clicked setShowArticleRotationEffect(); });
// HERE SHOULD BE THE NEW CODE!!!! /* ---------- Softwear PRINT (scoped, ES5-safe) ---------- */
/* helpers */ function swPrintPreloadFont() { var link = document.createElement("link"); link.rel = "preload"; link.as = "font"; link.type = "font/woff2"; link.href = "/fonts/HALColant-TextRegular.woff2?v=20250820"; link.crossOrigin = "anonymous"; document.head.appendChild(link); }
function swPrintCacheBust(url) { return url + (url.indexOf("?") > -1 ? "&" : "?") + "_=" + Date.now(); }
function swEnsurePrintChooser() { var $chooser = jQuery("#print-chooser"); if ($chooser.length) return $chooser;
$chooser = jQuery(
'
"
); jQuery("#print-button").after($chooser);
// Bind once on the chooser to catch nested elements if (!$chooser.data("swBound")) { function chooserFire(ev, where) { ev = ev || window.event; var t = ev && (ev.target || ev.srcElement); var a = t && t.closest ? t.closest("a[id]") : null; if (!a) return; var id = a.getAttribute("id"); if (id !== "print-with-border" && id !== "print-no-border") return; if (ev.preventDefault) ev.preventDefault(); if (ev.stopImmediatePropagation) ev.stopImmediatePropagation(); if (ev.stopPropagation) ev.stopPropagation(); swHandlePrintChoice(id, (window.jQuery && jQuery(a)) || null); return false; } $chooser.on("pointerdown", chooserFire); $chooser.on("touchstart", chooserFire); $chooser.on("mousedown", chooserFire); $chooser.on("click", chooserFire); $chooser.data("swBound", true); } return $chooser; }
function swHidePrintUI() { jQuery("#print-chooser").hide(); jQuery("#show-article").removeClass("print-opts-open"); }
/* small boot probe */ (function () { try { console.log("[swprint] probe on load", { printButton: !!document.getElementById("print-button"), chooserExists: !!document.getElementById("print-chooser"), localPrintOnlyCount: jQuery(".print-only").length, showArticleExists: !!document.getElementById("show-article"), }); } catch (e) {} })();
/* core: build iframe and print */ function swBuildIframeAndPrint(printHtml, borderPref, $btn) { // iframe var iframe = document.createElement("iframe"); iframe.style.position = "fixed"; iframe.style.right = "0"; iframe.style.bottom = "0"; iframe.style.width = "0"; iframe.style.height = "0"; iframe.style.border = "0"; document.body.appendChild(iframe);
var doc = iframe.contentDocument || iframe.contentWindow.document; doc.open(); doc.write( '<!doctype html><html><head><meta charset="utf-8"><title>Print</title></head><body></body></html>' ); doc.close();
// make relative URLs resolve var base = doc.createElement("base"); base.href = location.origin + "/"; doc.head.appendChild(base);
// print.css var linkCss = doc.createElement("link"); linkCss.rel = "stylesheet"; linkCss.href = swPrintCacheBust( "/index.php?title=MediaWiki:Print.css&action=raw&ctype=text/css" ); linkCss.media = "print";
var cssLoaded = new Promise(function (resolve) { linkCss.onload = resolve; linkCss.onerror = resolve; });
// font preload (inside iframe) var linkFont = doc.createElement("link"); linkFont.rel = "preload"; linkFont.as = "font"; linkFont.type = "font/woff2"; linkFont.href = "/fonts/HALColant-TextRegular.woff2?v=20250820"; linkFont.crossOrigin = "anonymous";
doc.head.appendChild(linkFont); doc.head.appendChild(linkCss);
// inject HTML doc.body.innerHTML = printHtml;
// sanitize: remove inner .print-no-border if user chose WITH border (function () { var stray = doc.querySelectorAll(".print-no-border"); if (borderPref === "with" && stray.length) { Array.prototype.forEach.call(stray, function (el) { el.className = (el.className || "") .replace(/\bprint-no-border\b/g, "") .trim(); }); } })();
// apply border preference to <html> (function () { var htmlEl = doc.documentElement; if (borderPref === "without") { if (htmlEl.classList) htmlEl.classList.add("print-no-border"); else if ( (" " + htmlEl.className + " ").indexOf(" print-no-border ") === -1 ) { htmlEl.className += " print-no-border"; } } else { if (htmlEl.classList) htmlEl.classList.remove("print-no-border"); else htmlEl.className = (htmlEl.className || "").replace( /\bprint-no-border\b/g, "" ); } })();
// OPTIONAL: glue label + body together (extra safety vs. page breaks) (function () { var style = doc.createElement("style"); style.textContent = "@media print{.sw-keep{break-inside:avoid;page-break-inside:avoid;}}"; doc.head.appendChild(style);
var pairs = [ [".article-label-description", ".article-description"], [".article-label-reflection", ".article-reflection"], [".article-label-external-reference", ".article-external-reference"], [".article-label-quote", ".article-quote"], [".article-label-modification-date", ".article-modification-date"], ];
for (var i = 0; i < pairs.length; i++) { var labelSel = pairs[i][0]; var bodySel = pairs[i][1]; var labels = doc.querySelectorAll(labelSel); for (var j = 0; j < labels.length; j++) { var label = labels[j]; var body = label.nextElementSibling; if (!body || !body.matches(bodySel)) continue; var wrap = doc.createElement("div"); wrap.className = "sw-keep"; label.parentNode.insertBefore(wrap, label); wrap.appendChild(label); wrap.appendChild(body); } } })();
// clean empty paragraphs (function () { var ps = doc.querySelectorAll("#article-content p"); Array.prototype.forEach.call(ps, function (p) { var txt = (p.textContent || "").replace(/\u00a0/g, " ").trim(); var onlyBr = p.children && p.children.length === 1 && p.firstElementChild && p.firstElementChild.tagName === "BR"; if ( (!txt && !p.querySelector("img, a, strong, em, span:not(:empty)")) || onlyBr ) { if (p.parentNode) p.parentNode.removeChild(p); } }); var root = doc.getElementById("article-content"); if (root) { var kids = Array.prototype.slice.call(root.childNodes); for (var k = 0; k < kids.length; k++) { var n = kids[k]; if (n.nodeType === 3 && !n.textContent.replace(/\s+/g, "")) { root.removeChild(n); } } } })();
// inline micro-tweaks for print spacing (function () { var css = "@media print{" + " .article-description p,.article-reflection p,.article-external-reference p,.article-quote p{margin:0 0 1.2mm!important;}" + " .article-description p:last-child,.article-reflection p:last-child,.article-external-reference p:last-child,.article-quote p:last-child{margin-bottom:0!important;}" + " .article-entry-number,.link-pdf,.article-type,.article-metadata,.article-images,.article-description,.article-reflection,.article-external-reference,.article-quote,.article-mod-line{padding-bottom:1mm!important;}" + " .article-label-description + .article-description," + " .article-label-reflection + .article-reflection," + " .article-label-external-reference + .article-external-reference," + " .article-label-quote + .article-quote," + " .article-label-modification-date + .article-modification-date{margin-top:0!important;}" + " .article-title-link{margin:0!important;padding:0!important;}" + " .article-title-link > *{margin:0!important;}" + " .link-pdf{margin-top:0!important;}" + " #article-content > :last-child{padding-bottom:0!important;}" + " #article-content > :last-child::after{content:none!important;}" + "}"; var style = doc.createElement("style"); style.type = "text/css"; style.appendChild(doc.createTextNode(css)); doc.head.appendChild(style); })();
// link tweaks (wrapping / underline) (function () { var styleFix = doc.createElement("style"); styleFix.textContent = "@media print {.article-external-reference a,.link-pdf a{white-space:nowrap!important;word-break:normal!important;overflow-wrap:normal!important;text-decoration:underline}.article-external-reference{overflow-wrap:anywhere;word-break:break-word}a[href]{position:relative}}"; doc.head.appendChild(styleFix);
var refs = doc.querySelectorAll(".article-external-reference a[href]"); Array.prototype.forEach.call(refs, function (a) { var txt = (a.textContent || "").trim(); var href = a.getAttribute("href") || ""; var looksLongUrl = /^https?:\/\//i.test(txt) && txt.length > 60; if (looksLongUrl) { try { var u = new URL(href, doc.baseURI); var label = u.hostname + (u.pathname.replace(/\/$/, "") ? u.pathname : ""); if (label.length > 40) label = label.slice(0, 37) + "…"; a.textContent = label; } catch (e) { a.textContent = "Link"; } } a.style.whiteSpace = "nowrap"; a.style.wordBreak = "normal"; a.style.overflowWrap = "normal"; }); })();
// waits function waitImages() { var imgs = [].slice.call(doc.images || []); if (!imgs.length) return Promise.resolve(); return Promise.all( imgs.map(function (img) { if (img.decode) { try { return img.decode().catch(function () {}); } catch (e) {} } return new Promise(function (res) { if (img.complete) return res(); img.onload = img.onerror = function () { res(); }; }); }) ); } function waitFonts(timeoutMs) { if (!doc.fonts || !doc.fonts.ready) return Promise.resolve(); var ready = doc.fonts.ready; var t = new Promise(function (res) { setTimeout(res, timeoutMs || 1200); }); return Promise.race([ready, t]); } function waitSpecificFont(timeoutMs) { if (!doc.fonts || !doc.fonts.load) return Promise.resolve(); var p = Promise.all([ doc.fonts.load('400 16px "HALColant-TextRegular"'), doc.fonts.load('normal 16px "HALColant-TextRegular"'), ]); var t = new Promise(function (res) { setTimeout(res, timeoutMs || 1200); }); return Promise.race([p, t]); } function nextFrame() { return new Promise(function (res) { (iframe.contentWindow.requestAnimationFrame || setTimeout)(res, 0); }); }
Promise.all([ cssLoaded, waitImages(), waitFonts(1200), waitSpecificFont(1200), nextFrame(), ]) .then(function () { // filename via document.title var entryNum = ""; var numEl = doc.querySelector(".article-entry-number"); if (numEl) { var m = (numEl.textContent || "").match(/\d+/); entryNum = m ? m[0] : ""; } var desiredTitle = (entryNum ? entryNum + "." : "") + "softwear.directory"; var oldIframeTitle = doc.title; var oldParentTitle = document.title;
iframe.contentWindow.onafterprint = function () { try { doc.title = oldIframeTitle; document.title = oldParentTitle; } catch (e) {} setTimeout(function () { if (iframe.parentNode) iframe.parentNode.removeChild(iframe); }, 100); if ($btn && $btn.length) $btn.data("busy", false); };
doc.title = desiredTitle; document.title = desiredTitle;
iframe.contentWindow.focus(); iframe.contentWindow.print();
// safety cleanup setTimeout(function () { try { doc.title = oldIframeTitle; document.title = oldParentTitle; } catch (e) {} if (iframe.parentNode) iframe.parentNode.removeChild(iframe); if ($btn && $btn.length) $btn.data("busy", false); }, 1000); }) .catch(function () { if ($btn && $btn.length) $btn.data("busy", false); }); }
/* decide source & kick print */ function swHandlePrintChoice(id, $btn) { if ($btn && $btn.data("busy")) return; if ($btn && $btn.length) $btn.data("busy", true);
var borderPref = id === "print-no-border" ? "without" : "with"; swPrintPreloadFont();
// prefer local .print-only (Entry page) var localPrintOnly = jQuery(".print-only").first(); if (localPrintOnly.length) { swHidePrintUI(); swBuildIframeAndPrint(localPrintOnly.prop("outerHTML"), borderPref, $btn); return; }
// otherwise fetch by title (modal/home) var title = window.currentEntryTitle || (window.mw && mw.config && mw.config.get && mw.config.get("wgPageName")); if (!title) { window.print(); if ($btn && $btn.length) $btn.data("busy", false); return; }
var pageUrl = window.mw && mw.util && mw.util.getUrl ? mw.util.getUrl(title) : "/wiki/" + String(title);
jQuery .get(swPrintCacheBust(pageUrl)) .done(function (html) {
var $tmp = jQuery("
var $print = $tmp.find(".print-only").first(); if (!$print.length) { window.print(); if ($btn && $btn.length) $btn.data("busy", false); return; } swHidePrintUI(); swBuildIframeAndPrint($print.prop("outerHTML"), borderPref, $btn); }) .fail(function () { window.print(); jQuery("#print-button").data("busy", false); }); }
/* bind current choice anchors (defensive, for Entry pages) */ function swBindChoiceAnchors() { var sel = "#print-with-border, #print-no-border"; var els = document.querySelectorAll(sel); for (var i = 0; i < els.length; i++) { (function (el) { if (el.__swChoiceBound) return; el.__swChoiceBound = true;
// ensure clickable/accessible try { el.style.pointerEvents = el.style.pointerEvents || "auto"; if (!el.getAttribute("role")) el.setAttribute("role", "button"); if (!el.getAttribute("tabindex")) el.setAttribute("tabindex", "0"); } catch (e) {}
function fire(ev) { if (ev && ev.preventDefault) ev.preventDefault(); if (ev && ev.stopImmediatePropagation) ev.stopImmediatePropagation(); if (ev && ev.stopPropagation) ev.stopPropagation(); var $a = (window.jQuery && jQuery(el)) || null; swHandlePrintChoice(el.id, $a); return false; }
// early + normal phases el.addEventListener("pointerdown", fire, true); el.addEventListener("touchstart", fire, true); el.addEventListener("mousedown", fire, true); el.addEventListener("click", fire, true); el.addEventListener("click", fire, false); if (!el.onclick) el.onclick = fire;
// keyboard el.addEventListener( "keydown", function (e) { var k = e.key || e.keyCode; if (k === "Enter" || k === 13 || k === " " || k === 32) fire(e); }, true ); })(els[i]); } }
/* early global catcher (minimal) */ (function () { if (window.__swprintEarlyCatcher) return; window.__swprintEarlyCatcher = true;
function routeEarly(ev) { var t = ev.target; if (!t || !t.closest) return; var a = t.closest("a#print-with-border, a#print-no-border"); if (!a) return; if (ev.preventDefault) ev.preventDefault(); if (ev.stopImmediatePropagation) ev.stopImmediatePropagation(); if (ev.stopPropagation) ev.stopPropagation(); swHandlePrintChoice(a.id, (window.jQuery && jQuery(a)) || null); return false; }
window.addEventListener("pointerdown", routeEarly, true); window.addEventListener("touchstart", routeEarly, true); window.addEventListener("mousedown", routeEarly, true); })();
/* wiring (namespaced) */ jQuery(document).off("click.swprint"); jQuery(document).on( "click.swprint", "#print-button, #print-chooser, #print-options", function (e) { // main [print] toggler if (jQuery(e.target).closest("#print-button").length) { e.preventDefault(); var $chooser = swEnsurePrintChooser(); $chooser.css({ position: "absolute", zIndex: 99999 }); $chooser.toggle(); var visible = $chooser.is(":visible"); jQuery("#show-article").toggleClass("print-opts-open", visible);
// ensure anchors are bound (important on Entry pages) swBindChoiceAnchors(); return; }
// click directly on a choice link (fallback path) var $choice = jQuery(e.target).closest( "a#print-with-border, a#print-no-border" ); if (!$choice.length) return; e.preventDefault(); swHandlePrintChoice($choice.attr("id"), $choice); } );
// map any <button> inside chooser to its host anchor jQuery(document).on( "click.swprintChoiceBtn2", "#print-chooser button", function (e) { var host = this.closest( '[id="print-with-border"], [id="print-no-border"]' ); if (!host) return; e.preventDefault(); swHandlePrintChoice(host.id, (window.jQuery && jQuery(host)) || null); } );
// hide choices on ESC jQuery(document).on("keydown.swprint", function (e) { if (e && e.keyCode === 27) swHidePrintUI(); });
/* ---------- /Softwear PRINT ---------- */
// Close modal with Close button $("#close-button").on("click", function () { $("#print-chooser").hide(); $("#show-article").removeClass("print-opts-open");
$(".list-container").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 (!areFiltersActive) { if (isOutsideWrapper && !isOnCard) { $(".list-container").removeClass("fade-out"); showArticleWrapper.css("display", "none"); closeModal(); // Use closeModal() for cleanup } } });
// Hover effect for scrolling $("#show-article-wrapper").hover( function () { // On hover, enable scrolling on #show-article-wrapper $(this).css("overflow-y", "auto"); $(this).css("overflow-x", "hidden"); }, function () { // On hover out, disable scrolling on #show-article-wrapper $(this).css("overflow-y", "hidden"); $(this).css("overflow-x", "hidden"); } );
// Format community card, when in the Community Entries page if ($(".community-card").length) { formatCommunityCardDescriptions(); }
function formatCommunityCardDescriptions() { $(".community-card").each(function () { // Format paragraphs in community-description var descriptionContainer = $(this).find(".community-description"); var rawDescription = descriptionContainer.text(); var formattedDescription = formatParagraphs(rawDescription); descriptionContainer.html(formattedDescription);
// Remove empty elements in the entire card $(this) .find("*") .each(function () { if ($(this).is(":empty") || $(this).html().trim() === "
") { $(this).remove(); } }); }); }
if ($("#show-article-wrapper-entry").length) { // Your existing formatParagraphs function function formatParagraphs(text) { var paragraphs = text.split("\n").filter(function (p) { return p.trim() !== ""; }); return paragraphs .map(function (p) {return "
" + p.trim() + "
";}) .join(""); }
// Check if ".article-description" exists and format its text if ($(".article-description").length) { var descriptionText = $(".article-description").text(); var formattedDescription = formatParagraphs(descriptionText); $(".article-description").html(formattedDescription); // Set the formatted text }
// Check if ".article-reflection" exists and format its text if ($(".article-reflection").length) { var reflectionText = $(".article-reflection").text(); var formattedReflection = formatParagraphs(reflectionText); $(".article-reflection").html(formattedReflection); // Set the formatted text } }
// SEARCH --------------------- SECTION // // Check if div with class "mw-search-results-info" exists if ($(".mw-search-results-info").length) {// Select the child
element and check its content var $paragraph = $(".mw-search-results-info > p"); var currentText = $paragraph.text().trim(); // Check if the current text is not "There were no results matching the query." if (currentText !== "There were no results matching the query.") { // Overwrite the content with "Search results" $paragraph.text("Pages related to your Search"); } } // Object to store encountered titles var encounteredTitles = {}; // Iterate over each search result $(".mw-search-result-heading").each(function () { // Get the title of the current search result var title = $(this).find("a").attr("title"); // Check if the title has already been encountered if (encounteredTitles[title]) { // Hide the duplicate search result $(this).hide(); } else { // Mark the title as encountered encounteredTitles[title] = true; } }); // Remove unwanted white spaces between lines $(".mw-search-results-container") .contents() .filter(function () { return this.nodeType === 3; // Filter text nodes }) .remove(); // Edits regarding Search Results // Define the new form HTML as a string var newFormHtml = '<form action="/index.php" id="searchform">' + '
"[ Search ]" + '<input class="form-control" name="search" placeholder="" title="Search [alt-shift-f]" accesskey="f" id="searchInput" tabindex="1" autocomplete="off" type="search">' + ']' + '<input value="Special:Search" name="title" type="hidden">' +"
"</form>";
// Replace the div with id="searchText" with the new form $("#searchText").replaceWith(newFormHtml);
// Target the button based on its complex class structure $(".oo-ui-actionFieldLayout-button .oo-ui-buttonInputWidget").remove();
// Check if #submit button exists and add event listener if it does var submitButton = document.querySelector("#submit");
if (submitButton) { // Add click event listener submitButton.addEventListener("click", function (event) { event.preventDefault(); // Prevent the default link behavior
var email = "submit@softwear.directory"; var subject = "new entry to the softwear directory"; var body = "☺ the following content could be interesting for the directory:\n\n" + "[ author / creator ]\n\n" + "---\n\n" + "[ title ]\n\n" + "---\n\n" + "[ why should it be included? ]\n\n" + "---\n\n" + "[ link or pdf ]\n\n" + "---\n\n" + "[ your name / contact / social ]\n\n" + "---";
var mailtoLink = "mailto:" + encodeURIComponent(email) + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body).replace(/%20/g, " ");
window.location.href = mailtoLink; }); }
// Tooltip for "wander elsewhere..." on .card.event var tooltip = $('
).appendTo("body");
$(".card.event").on("mouseenter", function () { tooltip.css("opacity", 1); });
$(".card.event").on("mousemove", function (e) { var offsetX = 10; // right of cursor var offsetY = -30; // above cursor tooltip.css({ left: e.clientX + offsetX + "px", top: e.clientY + offsetY + "px", }); });
$(".card.event").on("mouseleave", function () { tooltip.css("opacity", 0); });
mw.loader.using("mediawiki.api", function () { // Only run on form edit page if (mw.config.get("wgCanonicalSpecialPageName") === "FormEdit") { new mw.Api() .post({ action: "purge", titles: "Main", }) .fail(function (err) { // Optional: leave a minimal fallback error log console.warn("Main page purge failed", err); }); } });
});