index.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import * as eventTracking from '../../infrastructure/event-tracking'
  2. import { debugConsole } from '@/utils/debugging'
  3. function setupEventTracking(el) {
  4. const key = el.getAttribute('event-tracking')
  5. const action = el.getAttribute('event-tracking-action') || key
  6. const label = el.getAttribute('event-tracking-label') || ''
  7. const gaCategory = el.getAttribute('event-tracking-ga')
  8. const sendMB = el.getAttribute('event-tracking-mb')
  9. const trigger = el.getAttribute('event-tracking-trigger')
  10. const sendOnce = el.getAttribute('event-tracking-send-once')
  11. const element = el.getAttribute('event-tracking-element')
  12. const segmentation = JSON.parse(el.getAttribute('event-segmentation') || '{}')
  13. segmentation.page = window.location.pathname
  14. function submit() {
  15. if (element === 'checkbox') {
  16. segmentation.checkbox = el.checked ? 'checked' : 'unchecked'
  17. } else if (element === 'select') {
  18. segmentation.selectValue = el.value
  19. }
  20. if (sendMB) {
  21. if (sendOnce) {
  22. eventTracking.sendMBOnce(key, segmentation)
  23. } else {
  24. eventTracking.sendMB(key, segmentation)
  25. }
  26. }
  27. if (gaCategory) {
  28. if (sendOnce) {
  29. eventTracking.sendOnce(gaCategory, action, label)
  30. } else {
  31. eventTracking.send(gaCategory, action, label)
  32. }
  33. }
  34. }
  35. let timer
  36. let timeoutAmt = 500
  37. switch (trigger) {
  38. case 'click':
  39. el.addEventListener('click', () => submit())
  40. break
  41. case 'hover':
  42. if (el.getAttribute('event-hover-amt')) {
  43. timeoutAmt = parseInt(el.getAttribute('event-hover-amt'), 10)
  44. }
  45. el.addEventListener('mouseenter', () => {
  46. timer = setTimeout(() => submit(), timeoutAmt)
  47. })
  48. el.addEventListener('mouseleave', () => clearTimeout(timer))
  49. break
  50. default:
  51. debugConsole.error(`unsupported event tracking action: ${trigger}`)
  52. }
  53. }
  54. document.querySelectorAll('[event-tracking]').forEach(setupEventTracking)