|
|
| Line 1: |
Line 1: |
| − | "use strict";
| |
| − |
| |
| | /* ----------------------------- */ | | /* ----------------------------- */ |
| − | /* General Browser Cache Bypass Instructions */ | + | /* Collapsible Content Sections */ |
| − | /* Instructions for refreshing the page cache for different browsers */ | + | /* Enables hide/collapse functionality for content sections */ |
| | /* ----------------------------- */ | | /* ----------------------------- */ |
| | | | |
| − | //Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac) | + | // Fonction pour ajouter des boutons de pliage aux sections de contenu |
| − | //Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
| + | $(document).ready(function() { |
| − | //Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
| + | $('.collapsible-section').each(function(index) { |
| − | //Opera: Clear the cache in Tools → Preferences
| + | var section = $(this); |
| − | | + | // Créer le bouton de pliage |
| − | /* ----------------------------- */
| + | var toggleButton = $('<button type="button" class="toggle-button">hide</button>'); |
| − | /* Collapsible Tables Feature */
| + | // Insérer le bouton au début de la section |
| − | /* Enables collapsible tables for better organization and allows users to show or hide table contents */
| + | section.prepend(toggleButton); |
| − | /* ----------------------------- */
| + | // Cacher le contenu initialement si nécessaire |
| − | | + | if (section.hasClass('collapsed')) { |
| − | var autoCollapse = 2;
| + | section.find('.section-content').hide(); |
| − | var collapseCaption = 'hide';
| + | toggleButton.text('show'); |
| − | var expandCaption = 'show';
| + | |
| − | | + | |
| − | /**
| + | |
| − | * Function to collapse the table rows
| + | |
| − | * @param {number} tableIndex
| + | |
| − | */
| + | |
| − | function collapseTable(tableIndex) { | + | |
| − | var Button = document.getElementById('collapseButton' + tableIndex);
| + | |
| − | var Table = document.getElementById('collapsibleTable' + tableIndex);
| + | |
| − | | + | |
| − | if (!Table || !Button) {
| + | |
| − | return false; | + | |
| − | }
| + | |
| − | | + | |
| − | var Rows = Table.rows;
| + | |
| − | | + | |
| − | if (Button.firstChild.data == collapseCaption) {
| + | |
| − | for (var i = 1; i < Rows.length; i++) {
| + | |
| − | Rows[i].style.display = 'none'; | + | |
| | } | | } |
| − | Button.firstChild.data = expandCaption; | + | // Ajouter l'événement de clic pour le bouton |
| − | } else {
| + | toggleButton.on('click', function() { |
| − | for (var i = 1; i < Rows.length; i++) {
| + | var content = section.find('.section-content'); |
| − | Rows[i].style.display = Rows[0].style.display;
| + | content.toggle(); |
| − | }
| + | // Mettre à jour le texte du bouton |
| − | Button.firstChild.data = collapseCaption;
| + | if (content.is(':visible')) { |
| − | }
| + | toggleButton.text('hide'); |
| − | }
| + | } else { |
| − | | + | toggleButton.text('show'); |
| − | /** | + | |
| − | * Creates a click handler for table collapse/expand
| + | |
| − | * @param {number} tableIndex
| + | |
| − | */
| + | |
| − | function createClickHandler(tableIndex) {
| + | |
| − | return function (e) {
| + | |
| − | e.preventDefault(); | + | |
| − | collapseTable(tableIndex);
| + | |
| − | };
| + | |
| − | }
| + | |
| − | | + | |
| − | /**
| + | |
| − | * Adds collapse buttons to all tables with the 'collapsible' class
| + | |
| − | */
| + | |
| − | function createCollapseButtons() { | + | |
| − | var tableIndex = 0;
| + | |
| − | var NavigationBoxes = {};
| + | |
| − | var Tables = document.getElementsByTagName('table');
| + | |
| − | | + | |
| − | for (var i = 0; i < Tables.length; i++) {
| + | |
| − | if ($(Tables[i]).hasClass('collapsible')) {
| + | |
| − | var HeaderRow = Tables[i].getElementsByTagName('tr')[0];
| + | |
| − | if (!HeaderRow) { | + | |
| − | continue; | + | |
| | } | | } |
| − | var Header = HeaderRow.getElementsByTagName('th')[0];
| |
| − | if (!Header) {
| |
| − | continue;
| |
| − | }
| |
| − |
| |
| − | NavigationBoxes[tableIndex] = Tables[i];
| |
| − | Tables[i].setAttribute('id', 'collapsibleTable' + tableIndex);
| |
| − |
| |
| − | var Button = document.createElement('span');
| |
| − | var ButtonLink = document.createElement('a');
| |
| − | var ButtonText = document.createTextNode(collapseCaption);
| |
| − |
| |
| − | Button.style.styleFloat = 'right';
| |
| − | Button.style.cssFloat = 'right';
| |
| − | Button.style.fontWeight = 'normal';
| |
| − | Button.style.textAlign = 'right';
| |
| − | Button.style.width = '6em';
| |
| − |
| |
| − | ButtonLink.style.color = Header.style.color;
| |
| − | ButtonLink.setAttribute('id', 'collapseButton' + tableIndex);
| |
| − | $(ButtonLink).on('click', createClickHandler(tableIndex));
| |
| − | ButtonLink.appendChild(ButtonText);
| |
| − |
| |
| − | Button.appendChild(document.createTextNode('['));
| |
| − | Button.appendChild(ButtonLink);
| |
| − | Button.appendChild(document.createTextNode(']'));
| |
| − |
| |
| − | Header.insertBefore(Button, Header.childNodes[0]);
| |
| − | tableIndex++;
| |
| − | }
| |
| − | }
| |
| − |
| |
| − | // Collapse all tables if the conditions are met (autocollapse or collapsed class)
| |
| − | for (var i = 0; i < tableIndex; i++) {
| |
| − | if ($(NavigationBoxes[i]).hasClass('collapsed') ||
| |
| − | (tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass('autocollapse'))
| |
| − | ) {
| |
| − | collapseTable(i);
| |
| − | }
| |
| − | }
| |
| − | }
| |
| − |
| |
| − | // Run the collapse button creation function on page load
| |
| − | $(createCollapseButtons);
| |
| − |
| |
| − | /* ----------------------------- */
| |
| − | /* Custom Script for Highlighting Backticks */
| |
| − | /* Applies custom visual styles to text wrapped in backticks without altering the content */
| |
| − | /* ----------------------------- */
| |
| − |
| |
| − | // This script waits for the document to fully load, and applies a visual style
| |
| − | // to any text that is surrounded by backticks (` `), without altering the content.
| |
| − |
| |
| − | document.addEventListener('DOMContentLoaded', function () {
| |
| − | // Check if we are in edit mode (to avoid changing the editor content)
| |
| − | if (document.querySelector('#wpTextbox1') !== null) {
| |
| − | return; // Do nothing in edit mode
| |
| − | }
| |
| − |
| |
| − | /**
| |
| − | * Function to highlight text between backticks by wrapping it in a span element
| |
| − | * @param {string} text
| |
| − | * @returns {string}
| |
| − | */
| |
| − | function highlightBackticks(text) {
| |
| − | const backtickRegex = /`([^`]+)`/g; // Matches text between backticks
| |
| − | const styledText = text.replace(backtickRegex, function (match, p1) {
| |
| − | return '<span class="backtick-style">' + p1 + '</span>';
| |
| | }); | | }); |
| − | return styledText;
| + | }); |
| − | } | + | |
| − | | + | |
| − | /**
| + | |
| − | * Traverse all text nodes and apply the backtick highlighting
| + | |
| − | * @param {Node} node
| + | |
| − | */
| + | |
| − | function traverseTextNodes(node) {
| + | |
| − | if (node.nodeType === 3 && node.nodeValue.includes('`')) { // Only process text nodes
| + | |
| − | const span = document.createElement('span');
| + | |
| − | span.innerHTML = highlightBackticks(node.nodeValue);
| + | |
| − | node.parentNode.replaceChild(span, node);
| + | |
| − | } else if (node.nodeType === 1 && node.childNodes) { // Traverse element children
| + | |
| − | node.childNodes.forEach(traverseTextNodes);
| + | |
| − | }
| + | |
| − | }
| + | |
| − | | + | |
| − | // Apply the changes to the entire body
| + | |
| − | traverseTextNodes(document.body);
| + | |
| − | });
| + | |
| − | | + | |
| − | console.log('Backtick script loaded');
| + | |
| − | | + | |
| − | /* ----------------------------- */
| + | |
| − | /* Force CSS Rules Dynamically */
| + | |
| − | /* Injects CSS with higher priority for overriding styles, especially the list indentations */
| + | |
| − | /* ----------------------------- */
| + | |
| − | | + | |
| − | // Using MediaWiki's loader to inject custom CSS with high priority
| + | |
| − | mw.loader.using('mediawiki.util', function () {
| + | |
| − | var css = '.mw-parser-output ul ul, .mw-parser-output ul ol, .mw-parser-output ol ul, .mw-parser-output ol ol {' +
| + | |
| − | 'padding-left: 0 !important;' +
| + | |
| − | 'margin-left: 0 !important;' +
| + | |
| − | '}';
| + | |
| − | mw.util.addCSS(css);
| + | |
| | }); | | }); |