dom-scripts.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /* expandable sections */
  2. (function () {
  3. function toggle (button, target) {
  4. var expanded = button.getAttribute('aria-expanded') === 'true'
  5. button.setAttribute('aria-expanded', !expanded)
  6. target.hidden = !target.hidden
  7. }
  8. var expanders = document.querySelectorAll('[data-expands]')
  9. Array.prototype.forEach.call(expanders, function (expander) {
  10. var target = document.getElementById(expander.getAttribute('data-expands'))
  11. expander.addEventListener('click', function () {
  12. toggle(expander, target)
  13. })
  14. })
  15. }());
  16. /* menu button */
  17. (function () {
  18. var button = document.getElementById('menu-button')
  19. var menu = document.getElementById('patterns-list')
  20. button.addEventListener('click', function() {
  21. var expanded = this.getAttribute('aria-expanded') === 'true'
  22. this.setAttribute('aria-expanded', !expanded)
  23. })
  24. }());
  25. /* persist navigation scroll point */
  26. (function () {
  27. window.onunload = function () {
  28. var scrollPoint = document.getElementById('patterns-nav').scrollTop
  29. localStorage.setItem('scrollPoint', scrollPoint)
  30. }
  31. window.addEventListener('DOMContentLoaded', function () {
  32. if (window.location.href.indexOf('patterns/') !== -1) {
  33. document.getElementById('patterns-nav').scrollTop = parseInt(localStorage.getItem('scrollPoint'))
  34. } else {
  35. document.getElementById('patterns-nav').scrollTop = 0
  36. }
  37. })
  38. }());
  39. /* Add "link here" links to <h2> headings */
  40. (function () {
  41. var headings = document.querySelectorAll('main > h2')
  42. Array.prototype.forEach.call(headings, function (heading) {
  43. var id = heading.getAttribute('id')
  44. if (id) {
  45. var newHeading = heading.cloneNode(true)
  46. var container = document.createElement('div')
  47. container.setAttribute('class', 'h2-container')
  48. container.appendChild(newHeading)
  49. heading.parentNode.insertBefore(container, heading)
  50. var link = document.createElement('a')
  51. link.setAttribute('href', '#' + id)
  52. link.setAttribute('aria-label', 'link for this section')
  53. link.innerHTML = '<svg aria-hidden="true" viewBox="0 0 50 50"><use xlink:href="#link"></use></svg>'
  54. container.appendChild(link)
  55. heading.parentNode.removeChild(heading);
  56. }
  57. })
  58. }());