MediaWiki:Common.js: Difference between revisions

From Rhythm Game Wiki
Jump to navigation Jump to search
No edit summary
Line 16: Line 16:
findAndExecute(".rgwiki-main-negative-tabindex", (element) => {
findAndExecute(".rgwiki-main-negative-tabindex", (element) => {
     element.tabIndex = -1;
     element.tabIndex = -1;
});
/* Links without href/links to "javascript:void(0)" are not allowed by MediaWiki, this is a workaround */
/* Use Template:EmptyLink to activate this piece of code. */
findAndExecute(".rgwiki-main-emptylink", (span) => {
  const a = span.querySelector("a");
  for (const className of span.classList) {
    if (className !== "rgwiki-main-emptylink") {
      a.classList.add(className);
    }
  }
  a.href = "javascript:void(0)";
  const parent = span.parentNode;
  parent.replaceChild(a, span);
});
});



Revision as of 22:53, 26 February 2025

/* Any JavaScript here will be loaded for all users on every page load. */

/* Finds elements by a selector and executes a function for each element */
function findAndExecute(selector, callback) {
    const elements = document.querySelectorAll(selector);
    elements.forEach((element) => {
        try {
            callback(element);
        } catch (e) {
            console.error(`Error while initializing "${selector}"`, e);
        }
    });
}

/* tabindex="-1" is not allowed by MediaWiki, this is a workaround */
findAndExecute(".rgwiki-main-negative-tabindex", (element) => {
    element.tabIndex = -1;
});

/* Links without href/links to "javascript:void(0)" are not allowed by MediaWiki, this is a workaround */
/* Use Template:EmptyLink to activate this piece of code. */
findAndExecute(".rgwiki-main-emptylink", (span) => {
  const a = span.querySelector("a");
  for (const className of span.classList) {
    if (className !== "rgwiki-main-emptylink") {
      a.classList.add(className);
    }
  }
  a.href = "javascript:void(0)";
  const parent = span.parentNode;
  parent.replaceChild(a, span);
});

/* Localized date */
findAndExecute(".rgwiki-main-date-localized", (span) => {
    const inputDateString = span.dataset.datetime !== undefined ? span.dataset.datetime : span.textContent;
    const date = new Date(inputDateString);
    const outputDateString = date.toString();
    span.title = `This date in your timezone: ${outputDateString}`;
});