links.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. export function whenThisLinkIsClicked(el, callback) {
  2. el.addEventListener('click', e => {
  3. e.preventDefault()
  4. callback(el)
  5. })
  6. }
  7. export function whenThisLinkIsPressed(el, callback) {
  8. el.addEventListener('click', e => e.preventDefault())
  9. el.addEventListener('mousedown', e => {
  10. e.preventDefault()
  11. callback((whenReleased) => {
  12. let handler = e => {
  13. e.preventDefault()
  14. whenReleased()
  15. el.removeEventListener('mouseup', handler)
  16. }
  17. el.addEventListener('mouseup', handler)
  18. })
  19. })
  20. }
  21. export function whenThisLinkIsHoveredFor(el, ms = 60, callback) {
  22. el.addEventListener('mouseenter', e => {
  23. let timeout = setTimeout(() => {
  24. callback(e)
  25. }, ms)
  26. let handler = () => {
  27. clearTimeout(timeout)
  28. el.removeEventListener('mouseleave', handler)
  29. }
  30. el.addEventListener('mouseleave', handler)
  31. })
  32. }
  33. export function extractDestinationFromLink(linkEl) {
  34. return createUrlObjectFromString(linkEl.getAttribute('href'))
  35. }
  36. export function createUrlObjectFromString(urlString) {
  37. return new URL(urlString, document.baseURI)
  38. }