1/** 2 * @file 3 * Datalayer global events. 4 */ 5 6(function ($, Drupal, once, drupalSettings) { 7 8 'use strict'; 9 10 Drupal.behaviors.ln_datalayer_api_events = { 11 attach: function (context, settings) { 12 if (drupalSettings.ln_datalayer && drupalSettings.ln_datalayer.events) { 13 for (let event_name in drupalSettings.ln_datalayer.events) { 14 let event = drupalSettings.ln_datalayer.events[event_name]; 15 if(event.hasOwnProperty('event')){ 16 if(!event.hasOwnProperty('module_name')){ 17 event.module_name = drupalSettings.ln_datalayer.data.module_name; 18 } 19 if(!event.hasOwnProperty('module_version')){ 20 event.module_version = drupalSettings.ln_datalayer.data.module_version; 21 } 22 if( event.hasOwnProperty('content_id') && event.content_id == ''){ 23 event.content_id = drupalSettings.ln_datalayer.data.content_id; 24 } 25 if( event.hasOwnProperty('content_name') && event.content_name == ''){ 26 event.content_name = drupalSettings.ln_datalayer.data.content_name; 27 } 28 if( event.hasOwnProperty('recipe_id') && event.recipe_id == ''){ 29 event.recipe_id = drupalSettings.ln_datalayer.data.content_id; 30 } 31 if( event.hasOwnProperty('recipe_name') && event.recipe_name == ''){ 32 event.recipe_name = drupalSettings.ln_datalayer.data.content_name; 33 } 34 if( event.hasOwnProperty('item_id') && event.item_id == ''){ 35 event.item_id = drupalSettings.ln_datalayer.data.content_id; 36 } 37 if( event.hasOwnProperty('item_name') && event.item_name == ''){ 38 event.item_name = drupalSettings.ln_datalayer.data.content_name; 39 } 40 window.dataLayer = window.dataLayer || []; 41 window.dataLayer.push(event); 42 } 43 } 44 45 delete drupalSettings.ln_datalayer.events; 46 } 47 } 48 }; 49 50 Drupal.behaviors.ln_datalayer_global_events = { 51 attach: function (context, settings) { 52 //CTA link event 53 $(once('ln_datalayer_cta_click', '.field--name-field-c-link a')).click(function(ev){ 54 let $link = $(this); 55 56 let domain = ''; 57 try{ 58 //relative links 59 let url = $link.attr('href'); 60 if(url.startsWith('/')){ 61 url = document.location.origin + url; 62 } 63 domain = new URL(url).hostname; 64 }catch(e){} 65 66 window.dataLayer = window.dataLayer || []; 67 window.dataLayer.push({ 68 'event': 'cta_click', 69 'event_name': 'cta_click', 70 'link_classes': $link.attr('class'), 71 'link_domain': domain, 72 'link_id': $link.attr('id'), 73 'link_text': $link.text(), 74 'link_url': $link.attr('href'), 75 'module_name': drupalSettings.ln_datalayer.data.module_name, 76 'module_version': drupalSettings.ln_datalayer.data.module_version, 77 }); 78 }); 79 80 //Outbound links 81 $(once('ln_datalayer_outbound_link', "a[target='_blank']")).click(function(ev){ 82 let $link = $(this); 83 84 let domain = ''; 85 try{ 86 //relative links 87 let url = $link.attr('href'); 88 if(url.startsWith('/')){ 89 url = document.location.origin + url; 90 } 91 domain = new URL(url).hostname; 92 }catch(e){} 93 94 window.dataLayer = window.dataLayer || []; 95 window.dataLayer.push({ 96 'event': 'outbound_link', 97 'event_name': 'outbound_link', 98 'link_classes': $link.attr('class'), 99 'link_domain': domain, 100 'link_id': $link.attr('id'), 101 'link_url': $link.attr('href'), 102 'outbound (boolean)': true, 103 'module_name': drupalSettings.ln_datalayer.data.module_name, 104 'module_version': drupalSettings.ln_datalayer.data.module_version, 105 }); 106 }); 107 108 //Datalayer GA4 event - drupal_upload_submit 109 $(once('ln_datalayer_input', '.form-managed-file')).click(function(ev){ 110 window.dataLayer = window.dataLayer || []; 111 window.dataLayer.push({ 112 'event': 'drupal_upload_submit', 113 'event_name': 'drupal_upload_submit', 114 'module_name' : drupalSettings.ln_datalayer.data.module_name, 115 'module_version' : drupalSettings.ln_datalayer.data.module_version, 116 }); 117 }); 118 //Datalayer GA4 event - drupal_upload_error 119 if ($('.form-type-managed-file').siblings(".alert-wrapper").length) { 120 window.dataLayer = window.dataLayer || []; 121 window.dataLayer.push({ 122 'event': 'drupal_upload_error', 123 'event_name': 'drupal_upload_error', 124 'error_name': $(".alert-wrapper .item-list").text(), 125 'module_name': drupalSettings.ln_datalayer.data.module_name, 126 'module_version': drupalSettings.ln_datalayer.data.module_version, 127 }); 128 } 129 } 130 }; 131})(jQuery, Drupal, once, drupalSettings);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.