MediaWiki
MediaWiki:Group-Grouse.js
From Grouse House Wiki
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.
$(function() { $('h2.c-header.active span.mw-headline').each(function () { var $header = $(this); var $headername = $header.html(); $headernameu = $headername.split(' ').join('_'); $headernameu = $headernameu.replace("'", "\\'").replace("?", "\\?").replace("!", "\\!"); var $secondheader = "#" + $headernameu + "_2"; var $editsection = $( $secondheader ).next().children('a').attr("href"); $header.after('[Edit]'); $header.next().css( 'font-size', '0.6em').css( 'margin-left', '1em'); $("a[href*='" + $secondheader + "']").hide(); }); }); $(function() { $('h2.c-header.hidden span.mw-headline').each(function () { var $header = $(this); var $headername = $header.html(); $headernameu = $headername.split(' ').join('_'); $headernameu = $headernameu.replace("'", "\\'").replace("?", "\\?").replace("!", "\\!"); var $secondheader = "#" + $headernameu + "_2"; var $editsection = $( $secondheader ).next().children('a').attr("href"); $header.after('[Edit]'); $header.next().css( 'font-size', '0.6em').css( 'margin-left', '1em'); $("a[href='" + $secondheader + "']").hide(); }); }); $(function() { $('h2.h-static span.mw-headline').each(function () { var $header = $(this); var $headername = $header.html(); $headernameu = $headername.split(' ').join('_'); $headernameu = $headernameu.replace("'", "\\'").replace("?", "\\?").replace("!", "\\!"); var $secondheader = "#" + $headernameu + "_2"; var $editsection = $( $secondheader ).next().children('a').attr("href"); $header.after('[Edit]'); $header.next().css( 'font-size', '0.6em').css( 'margin-left', '1em'); var $pagename = $('h1#firstHeading').html(); $pagenameu = $pagename.split(' ').join('_'); $toclink = "https://grousehouse.wiki/" + $pagenameu + $secondheader; $("a[href*='" + $secondheader + "']").hide(); }); }); $(function() { $('h3.c-header.active span.mw-headline').each(function () { var $header = $(this); var $headername = $header.html(); $headernameu = $headername.split(' ').join('_'); $headernameu = $headernameu.replace("'", "\\'").replace("?", "\\?").replace("!", "\\!"); var $secondheader = "#" + $headernameu + "_2"; var $editsection = $( $secondheader ).next().children('a').attr("href"); $header.after('[Edit]'); $header.next().css( 'font-size', '0.6em').css( 'margin-left', '1em'); $("a[href*='" + $secondheader + "']").hide(); }); }); $(function() { $('h3.c-header.hidden span.mw-headline').each(function () { var $header = $(this); var $headername = $header.html(); $headernameu = $headername.split(' ').join('_'); $headernameu = $headernameu.replace("'", "\\'").replace("?", "\\?").replace("!", "\\!"); var $secondheader = "#" + $headernameu + "_2"; var $editsection = $( $secondheader ).next().children('a').attr("href"); $header.after('[Edit]'); $header.next().css( 'font-size', '0.6em').css( 'margin-left', '1em'); var $pagename = $('h1#firstHeading').html(); $pagenameu = $pagename.split(' ').join('_'); $toclink = "https://grousehouse.wiki/" + $pagenameu + $secondheader; $("a[href*='" + $secondheader + "']").hide(); }); }); $(function() { $('h3.h-static span.mw-headline').each(function () { var $header = $(this); var $headername = $header.html(); $headernameu = $headername.split(' ').join('_'); $headernameu = $headernameu.replace("'", "\\'").replace("?", "\\?").replace("!", "\\!"); var $secondheader = "#" + $headernameu + "_2"; var $editsection = $( $secondheader ).next().children('a').attr("href"); $header.after('[Edit]'); $header.next().css( 'font-size', '0.6em').css( 'margin-left', '1em'); var $pagename = $('h1#firstHeading').html(); $pagenameu = $pagename.split(' ').join('_'); $toclink = "https://grousehouse.wiki/" + $pagenameu + $secondheader; $("a[href*='" + $secondheader + "']").hide(); }); }); /* Testing */ (function() { // Get all the <h2> headings const headings = document.querySelectorAll('main h2') Array.prototype.forEach.call(headings, heading => { // Give each <h2> a toggle button child // with the SVG plus/minus icon heading.innerHTML = ` <button aria-expanded="false"> ${heading.textContent} <svg aria-hidden="true" focusable="false" viewBox="0 0 10 10"> <rect class="vert" height="8" width="2" y="1" x="4"/> <rect height="2" width="8" y="4" x="1"/> </svg> </button> ` // Function to create a node list // of the content between this <h2> and the next const getContent = (elem) => { let elems = [] while (elem.nextElementSibling && elem.nextElementSibling.tagName !== 'H2') { elems.push(elem.nextElementSibling) elem = elem.nextElementSibling } // Delete the old versions of the content nodes elems.forEach((node) => { node.parentNode.removeChild(node) }) return elems } // Assign the contents to be expanded/collapsed (array) let contents = getContent(heading) // Create a wrapper element for `contents` and hide it let wrapper = document.createElement('div') wrapper.hidden = true // Add each element of `contents` to `wrapper` contents.forEach(node => { wrapper.appendChild(node) }) // Add the wrapped content back into the DOM // after the heading heading.parentNode.insertBefore(wrapper, heading.nextElementSibling) // Assign the button let btn = heading.querySelector('button') btn.onclick = () => { // Cast the state as a boolean let expanded = btn.getAttribute('aria-expanded') === 'true' || false // Switch the state btn.setAttribute('aria-expanded', !expanded) // Switch the content's visibility wrapper.hidden = expanded } }) })()