docs.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* globals i18n */
  2. if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
  3. document.head.insertAdjacentHTML('beforeend', `
  4. <meta name="darkreader-lock">
  5. `);
  6. }
  7. let asideNav;
  8. window.addEventListener('beforeunload', () => {
  9. sessionStorage.setItem('sidebar_scrollTop', asideNav.scrollTop);
  10. });
  11. window.addEventListener('keydown', (e) => {
  12. if (e.key === 'Escape') {
  13. location.hash = 'close';
  14. }
  15. });
  16. document.addEventListener('DOMContentLoaded', () => {
  17. asideNav = document.querySelector('aside > nav.docs');
  18. const sidebar_scrollTop = sessionStorage.getItem('sidebar_scrollTop');
  19. if (sidebar_scrollTop) {
  20. asideNav.scrollTo(0, sidebar_scrollTop);
  21. sessionStorage.removeItem('sidebar_scrollTop');
  22. }
  23. const copyIconSvg = document.querySelector('template#copy-svg-icon').innerHTML;
  24. for (const el of document.querySelectorAll('div.highlight')) {
  25. el.insertAdjacentHTML('afterbegin', `
  26. <button class="copy" title="${i18n.copy_to_clipboard}">
  27. ${copyIconSvg}
  28. </button>
  29. `);
  30. const copyBtn = el.querySelector('button.copy');
  31. copyBtn.addEventListener('click', () => {
  32. const snippet = el.querySelector('code').innerText;
  33. if (navigator.clipboard) {
  34. navigator.clipboard.writeText(snippet);
  35. } else {
  36. // Fallback if no HTTPS
  37. const input = document.createElement('textarea');
  38. input.innerHTML = snippet;
  39. document.body.append(input);
  40. input.select();
  41. document.execCommand('copy');
  42. input.remove();
  43. }
  44. });
  45. }
  46. for (const el of document.querySelectorAll('img')) {
  47. if (el.parentNode.tagName !== 'A') {
  48. el.outerHTML = `<a href="${el.getAttribute('src')}">${el.outerHTML}</a>`;
  49. }
  50. }
  51. });