Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
mw.loader.load( "/w/index.php?title=User:Fred_Gandt/sectionFooters.css&action=raw&ctype=text/css", "text/css" );
$( document ).ready( () => {
	"use strict";
	let cntnt = document.querySelector( "#mw-content-text .mw-parser-output" );
	if ( !cntnt ) return;
	let hdrs = [ "h1", "h2", "h3", "h4", "h5", "h6" ],
		sctns = cntnt.querySelectorAll( hdrs.join( "," ) ),
		fgse = "fg-section-end",
		i = 0, ii = 0,
		sctn, sctncln, nxtsctn, sctnspn, sctntxt, prvssctn, trmntr;
	while ( sctn = sctns[ i++ ] ) {
		if ( sctn.parentElement === cntnt && sctn.querySelector( "span.mw-editsection" ) && sctn.firstElementChild ) {
			sctncln = sctn.cloneNode( true );
			sctncln.setAttribute( "class", fgse );
			sctncln.removeAttribute( "id" );
			sctnspn = sctncln.querySelector( "span.mw-headline" );
			sctncln.replaceChild( document.createTextNode( sctnspn.textContent ), sctnspn );
			nxtsctn = sctns[ ii = i ];
			while ( nxtsctn && nxtsctn.tagName > sctncln.tagName ) {
				nxtsctn = sctns[ ++ii ];
			}
			if ( nxtsctn ) {
				while ( ~hdrs.indexOf( ( prvssctn = nxtsctn.previousElementSibling ).tagName.toLowerCase() ) ) {
					if ( !prvssctn.classList.contains( fgse ) ) break;
					nxtsctn = prvssctn;
				}
				nxtsctn.parentElement.insertBefore( sctncln, nxtsctn );
			} else {
				if ( trmntr ) cntnt.insertBefore( sctncln, trmntr );
				else {
					cntnt.appendChild( sctncln );
					trmntr = sctncln;
				}
			}
		}
	}
} );