index.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. function submit() {
  13. const segmentation = JSON.parse(
  14. el.getAttribute('event-segmentation') || '{}'
  15. )
  16. segmentation.page = window.location.pathname
  17. if (element === 'checkbox') {
  18. segmentation.checkbox = el.checked ? 'checked' : 'unchecked'
  19. } else if (element === 'select') {
  20. segmentation.selectValue = el.value
  21. }
  22. if (sendMB) {
  23. if (sendOnce) {
  24. eventTracking.sendMBOnce(key, segmentation)
  25. } else {
  26. eventTracking.sendMB(key, segmentation)
  27. }
  28. }
  29. if (gaCategory) {
  30. if (sendOnce) {
  31. eventTracking.sendOnce(gaCategory, action, label)
  32. } else {
  33. eventTracking.send(gaCategory, action, label)
  34. }
  35. }
  36. }
  37. let timer
  38. let timeoutAmt = 500
  39. switch (trigger) {
  40. case 'click':
  41. el.addEventListener('click', () => submit())
  42. break
  43. case 'hover':
  44. if (el.getAttribute('event-hover-amt')) {
  45. timeoutAmt = parseInt(el.getAttribute('event-hover-amt'), 10)
  46. }
  47. el.addEventListener('mouseenter', () => {
  48. timer = setTimeout(() => submit(), timeoutAmt)
  49. })
  50. el.addEventListener('mouseleave', () => clearTimeout(timer))
  51. break
  52. default:
  53. debugConsole.error(`unsupported event tracking action: ${trigger}`)
  54. }
  55. }
  56. document.querySelectorAll('[event-tracking]').forEach(setupEventTracking)