diff --git a/.gitmessage b/.gitmessage index f9fe1d135..8b870730c 100644 --- a/.gitmessage +++ b/.gitmessage @@ -12,8 +12,8 @@ # style: delete excess whitespace # # Body (optional): -# What changed and why -# Important design decisions or context +# what changed (1 sentence) +# (if relevant) important decisions/context (succinct bullets) # # Footer (optional): # BREAKING CHANGE: describe breaking change diff --git a/src/lib/_utils/js/promote-data-aria-attributes.js b/src/lib/_utils/js/promote-data-aria-attributes.js new file mode 100644 index 000000000..ace70b37a --- /dev/null +++ b/src/lib/_utils/js/promote-data-aria-attributes.js @@ -0,0 +1,33 @@ +/** + * Copy `data-aria-*` attributes to matching `aria-*` on the same nodes. + * For HTML saved through WYSIWYG editors that strip unprefixed ARIA on publish. + * + * @param {ParentNode | null | undefined} [root=document] + */ +export default function promoteDataAriaAttributes(root = document) { + if (!root) { + return; + } + + const elements = + root instanceof Document + ? root.querySelectorAll('*') + : root instanceof Element + ? [ root, ...root.querySelectorAll('*') ] + : []; + + for (const el of elements) { + if (!(el instanceof Element)) { + continue; + } + for (const attr of [ ...el.attributes ]) { + if (!attr.name.startsWith('data-aria-')) { + continue; + } + el.setAttribute( + 'aria-' + attr.name.slice('data-aria-'.length), + attr.value + ); + } + } +}