Created
January 10, 2019 21:39
-
-
Save danielpost/c3c8705bce8fa7d105f2c929f467abd3 to your computer and use it in GitHub Desktop.
Make Hugo's footnotes accessible to screen readers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Make Hugo's footnotes accessible. | |
*/ | |
/** | |
* Add a title to the footnotes wrapper. | |
* | |
* @param {Element} footnotes - Footnotes wrapper. | |
* @param {String} title - Text for the title element. | |
* @param {String} id - ID for the title element. | |
*/ | |
const addTitle = (footnotes, title, id) => { | |
if (!footnotes || !title || !id) return; | |
const element = document.createElement('h2'); | |
const text = document.createTextNode(title); | |
element.appendChild(text); | |
element.classList.add('u-hidden-visually'); | |
element.setAttribute('id', id); | |
footnotes.insertBefore(element, footnotes.firstChild); | |
}; | |
/** | |
* Set attribute to HTML selector. | |
* | |
* @param {String} selector - Selector to set attribute for. | |
* @param {String} attribute - Attribute to set. | |
* @param {String} value - Value for the attribute. | |
*/ | |
const setAttributeValue = (selector, attribute, value) => { | |
if (!selector || !attribute || !value) return; | |
const items = document.querySelectorAll(selector); | |
if (!items.length) return; | |
for (const item of items) { | |
item.setAttribute(attribute, value); | |
} | |
}; | |
/** | |
* @param {String} selector - Selector of the footnotes wrapper. | |
* @param {String} title - Title for screen readers. | |
* @param {String} returnText - 'Back to content' text. | |
*/ | |
export default function({ | |
selector = '.footnotes', | |
title = 'Footnotes', | |
returnText = 'Back to content' | |
} = {}) { | |
const footnotes = document.querySelector(selector); | |
const id = 'footnotes-label'; | |
if (!footnotes) return; | |
addTitle(footnotes, title, id); | |
setAttributeValue('.footnote-ref a', 'aria-describedby', id); | |
setAttributeValue('.footnote-return', 'aria-label', returnText); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment