/* MIT License Copyright (c) 2016 Edenspiekermann */ (function () { 'use strict'; var internalId = 0; var togglesMap = {}; var targetsMap = {}; function $ (selector, context) { return Array.prototype.slice.call( (context || document).querySelectorAll(selector) ); } function getClosestToggle (element) { if (element.closest) { return element.closest('[data-a11y-toggle]'); } while (element) { if (element.nodeType === 1 && element.hasAttribute('data-a11y-toggle')) { return element; } element = element.parentNode; } return null; } function handleToggle (toggle) { var target = toggle && targetsMap[toggle.getAttribute('aria-controls')]; if (!target) { return false; } var toggles = togglesMap['#' + target.id]; var isExpanded = target.getAttribute('aria-hidden') === 'false'; target.setAttribute('aria-hidden', isExpanded); toggles.forEach(function (toggle) { toggle.setAttribute('aria-expanded', !isExpanded); }); } var initA11yToggle = function (context) { togglesMap = $('[data-a11y-toggle]', context).reduce(function (acc, toggle) { var selector = '#' + toggle.getAttribute('data-a11y-toggle'); acc[selector] = acc[selector] || []; acc[selector].push(toggle); return acc; }, togglesMap); var targets = Object.keys(togglesMap); targets.length && $(targets).forEach(function (target) { var toggles = togglesMap['#' + target.id]; var isExpanded = target.hasAttribute('data-a11y-toggle-open'); var labelledby = []; toggles.forEach(function (toggle) { toggle.id || toggle.setAttribute('id', 'a11y-toggle-' + internalId++); toggle.setAttribute('aria-controls', target.id); toggle.setAttribute('aria-expanded', isExpanded); labelledby.push(toggle.id); }); target.setAttribute('aria-hidden', !isExpanded); target.hasAttribute('aria-labelledby') || target.setAttribute('aria-labelledby', labelledby.join(' ')); targetsMap[target.id] = target; }); }; document.addEventListener('DOMContentLoaded', function () { initA11yToggle(); }); document.addEventListener('click', function (event) { var toggle = getClosestToggle(event.target); handleToggle(toggle); }); document.addEventListener('keyup', function (event) { if (event.which === 13 || event.which === 32) { var toggle = getClosestToggle(event.target); if (toggle && toggle.getAttribute('role') === 'button') { handleToggle(toggle); } } }); window && (window.a11yToggle = initA11yToggle); })();
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
en-US | Folder | 0755 |
|
|
media | Folder | 0755 |
|
|
a11y-toggle.js | File | 2.62 KB | 0644 |
|
default.css | File | 19.32 KB | 0644 |
|
fuzzysort.js | File | 24.59 KB | 0644 |
|
help.html | File | 1.41 KB | 0644 |
|
help.js | File | 6.5 KB | 0644 |
|
help2.js | File | 8.2 KB | 0644 |
|
hid2file.js | File | 687.62 KB | 0644 |
|
idxcaption.xsl | File | 2.01 KB | 0644 |
|
idxcontent.xsl | File | 3.54 KB | 0644 |
|
index.html | File | 3.89 KB | 0644 |
|
languages.js | File | 418 B | 0644 |
|
main_transform.xsl | File | 36.49 KB | 0644 |
|
normalize.css | File | 5.91 KB | 0644 |
|
paginathing.js | File | 7.69 KB | 0644 |
|
polyfills.js | File | 4.9 KB | 0644 |
|
prism.css | File | 5.01 KB | 0644 |
|
prism.js | File | 31.26 KB | 0644 |
|