Skip to content

Instantly share code, notes, and snippets.

@SyntaxCacao
Created January 26, 2024 18:40
Show Gist options
  • Select an option

  • Save SyntaxCacao/28b597fb607967ac628353a410fbdab9 to your computer and use it in GitHub Desktop.

Select an option

Save SyntaxCacao/28b597fb607967ac628353a410fbdab9 to your computer and use it in GitHub Desktop.
MediaWiki TOC and headline numbering in "I. 1. a) α) αα)" format
/* Based on https://www.mediawiki.org/wiki/Snippets/Auto-number_headings */
const upperRoman = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI", "XXII", "XXIII", "XXIV", "XXV"];
const lowerGreek = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "ς", "τ", "υ", "φ", "χ", "ψ", "ω"];
const lowerLatin = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
var level2 = 0;
var level3 = 0;
var level4 = 0;
var level5 = 0;
var level6 = 0;
const toc = document.querySelector("#toc");
document.querySelectorAll(".mw-parser-output :is(h1,h2,h3,h4,h5,h6) .mw-headline").forEach(function (headline) {
var number;
if (headline.parentNode.nodeName == "H2") {
number = upperRoman[level2] + ".";
level2 += 1;
level3 = 0;
level4 = 0;
level5 = 0;
level6 = 0;
} else if (headline.parentNode.nodeName == "H3") {
number = (level3+1) + ".";
level3 += 1;
level4 = 0;
level5 = 0;
level6 = 0;
} else if (headline.parentNode.nodeName == "H4") {
number = lowerLatin[level4] + ")";
level4 += 1;
level5 = 0;
level6 = 0;
} else if (headline.parentNode.nodeName == "H5") {
number = lowerGreek[level5] + ")";
level5 += 1;
level6 = 0;
} else if (headline.parentNode.nodeName == "H6") {
number = lowerGreek[level6] + lowerGreek[level6] + ")";
level6 += 1;
}
number += " ";
/* headline.innerHTML = '<span class="mw-headline-number">' + number + '</span>' + headline.innerHTML; */
headline.prepend(number);
if (toc) {
var num = toc.querySelector('a[href="#' + CSS.escape(headline.id) + '"] .tocnumber');
if (num) num.innerHTML = number;
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment