/****************************************************************************** * JS Extension for the W3C Spec Style Sheet * * * * This code handles: * * - some fixup to improve the table of contents * * - the obsolete warning on outdated specs * ******************************************************************************/ (function() { "use strict"; var ESCAPEKEY = 27; var collapseSidebarText = ' ' + 'Collapse Sidebar'; var expandSidebarText = ' ' + 'Pop Out Sidebar'; var tocJumpText = ' ' + 'Jump to Table of Contents'; var sidebarMedia = window.matchMedia('screen and (min-width: 78em)'); var autoToggle = function(e){ toggleSidebar(e.matches) }; if(sidebarMedia.addListener) { sidebarMedia.addListener(autoToggle); } function toggleSidebar(on, skipScroll) { if (on == undefined) { on = !document.body.classList.contains('toc-sidebar'); } if (!skipScroll) { /* Don't scroll to compensate for the ToC if we're above it already. */ var headY = 0; var head = document.querySelector('.head'); if (head) { // terrible approx of "top of ToC" headY += head.offsetTop + head.offsetHeight; } skipScroll = window.scrollY < headY; } var toggle = document.getElementById('toc-toggle'); var tocNav = document.getElementById('toc'); if (on) { var tocHeight = tocNav.offsetHeight; document.body.classList.add('toc-sidebar'); document.body.classList.remove('toc-inline'); toggle.innerHTML = collapseSidebarText; if (!skipScroll) { window.scrollBy(0, 0 - tocHeight); } tocNav.focus(); sidebarMedia.addListener(autoToggle); // auto-collapse when out of room } else { document.body.classList.add('toc-inline'); document.body.classList.remove('toc-sidebar'); toggle.innerHTML = expandSidebarText; if (!skipScroll) { window.scrollBy(0, tocNav.offsetHeight); } if (toggle.matches(':hover')) { /* Unfocus button when not using keyboard navigation, because I don't know where else to send the focus. */ toggle.blur(); } } } function createSidebarToggle() { /* Create the sidebar toggle in JS; it shouldn't exist when JS is off. */ var toggle = document.createElement('a'); /* This should probably be a button, but appearance isn't standards-track.*/ toggle.id = 'toc-toggle'; toggle.class = 'toc-toggle'; toggle.href = '#toc'; toggle.innerHTML = collapseSidebarText; sidebarMedia.addListener(autoToggle); var toggler = function(e) { e.preventDefault(); sidebarMedia.removeListener(autoToggle); // persist explicit off states toggleSidebar(); return false; } toggle.addEventListener('click', toggler, false); /* Get