1(function ($) { 2 'use strict'; 3 4 $(function () { 5 init_data_layer_events(); 6 }); 7 8 let main_offer_selectors = [ 9 '.campaign-list-item', 10 '.campaign-compact-table__offer', 11 '.casino_finder__final_offer', 12 '.toplist-flagship-crypto__offer', 13 '.toplist-poker__offer', 14 '.toplist-poker-v2__offer', 15 '.toplist-poker-compact__offer', 16 '.toplist-tech__offer', 17 '.toplist-repurposed__offer', 18 ].join(', '); 19 20 const cta_button_selectors = [ 21 '.campaign-list-item_cta-btn', 22 '.campaign-compact-table__offer-cta-button a', 23 '.campaign-list-item__cta_button', 24 '.toplist-flagship-crypto__offer-visit-link', 25 '.toplist-poker__offer-cta-btn', 26 '.toplist-poker-v2__offer-cta-btn', 27 '.toplist-poker-compact__offer-cta-btn', 28 '.toplist-tech__offer-cta-btn', 29 '.toplist-repurposed__offer-cta-btn', 30 ].join(', '); 31 32 const coupon_copied_selectors = [ 33 '.country_code_right', 34 '.coupon-code__copy-btn', 35 '.campaign-list-item__coupon-wrapper', 36 ].join(', '); 37 38 const toplist_database = { 39 'campaign-list-item': { 40 type: 'Casino Toplist v1', 41 selectors: { 42 title: '.campaign-list-item_key-features > p, .campaign-list-item__offer', 43 rating: '.campaign_list_item__score_text, .campaign-list-item__rating', 44 coupon: '.coupon_code, .campaign-list-item__coupon span', 45 }, 46 }, 47 'campaign-compact-table__offer': { 48 type: 'Casino Toplist v2', 49 selectors: { 50 title: '.campaign-compact-table__offer-description', 51 rating: '.campaign-compact-table__offer-rating-text', 52 coupon: '.coupon-code', 53 }, 54 }, 55 'casino_finder__final_offer': { 56 type: '', 57 selectors: { 58 title: '.casino_finder__final_offer_title', 59 rating: '.casino_finder__final_marks_section p', 60 coupon: '.casino_finder__final_coupon_text:first', 61 }, 62 }, 63 'toplist-flagship-crypto__offer': { 64 type: 'CryptoNews Toplist', 65 selectors: { 66 title: '.toplist-flagship-crypto__offer-title', 67 rating: '.toplist-flagship-crypto__offer-rating', 68 }, 69 }, 70 'toplist-poker__offer': { 71 type: 'Poker Toplist', 72 selectors: { 73 title: '.toplist-poker__offer-title', 74 rating: '.toplist-poker__offer-rating', 75 }, 76 }, 77 'toplist-poker-v2__offer': { 78 type: 'Poker Toplist v2', 79 selectors: { 80 title: '.toplist-poker-v2__offer-title', 81 rating: '.toplist-poker-v2__offer-rating', 82 }, 83 }, 84 'toplist-poker-compact__offer': { 85 type: 'Poker Toplist Compact', 86 selectors: { 87 title: '.toplist-poker-compact__offer-title', 88 rating: '.toplist-poker-compact__offer-rating', 89 }, 90 }, 91 'toplist-tech__offer': { 92 type: 'Tech Toplist', 93 selectors: { 94 title: '.toplist-tech__offer-title', 95 }, 96 }, 97 'toplist-repurposed__offer': { 98 type: 'Casino Repurposed Toplist', 99 selectors: { 100 title: '.toplist-repurposed__offer-title', 101 rating: '.toplist-repurposed__offer-rating-score', 102 }, 103 }, 104 } 105 106 const init_data_layer_events = () => { 107 if (typeof dataLayer !== 'undefined') { 108 init_data_layer_campaign_events(); 109 init_data_layer_casino_finder_events(); 110 } 111 } 112 113 const init_data_layer_campaign_events = ( 114 campaign = false, 115 database = {} 116 ) => { 117 if (typeof dataLayer === 'undefined') { 118 return; 119 } 120 121 if ( 122 jQuery.isEmptyObject(database) === false 123 && typeof database['selectors']['offer'] !== 'undefined' 124 && typeof database['selectors']['cta'] !== 'undefined' 125 ) { 126 // Extend default events by adding a new event. 127 128 const offer_class_name = database['selectors']['offer'].replace('.', ''); 129 toplist_database[offer_class_name] = database; 130 131 event_campaign_hover(database['selectors']['offer'], campaign); 132 event_campaign_cta_button(database['selectors']['cta'], campaign, database['selectors']['offer']); 133 134 return; 135 } 136 137 // Init default events. 138 event_campaign_vote_action(campaign); 139 event_campaign_learn_more(campaign); 140 event_campaign_coupon_copied(coupon_copied_selectors, campaign); 141 event_campaign_cta_button(cta_button_selectors, campaign); 142 event_campaign_hover(main_offer_selectors, campaign); 143 event_campaign_filter_start(campaign); 144 event_campaign_filter_applied(campaign); 145 event_campaign_extra_filter_start(campaign); 146 event_campaign_extra_filter_applied(campaign); 147 event_campaign_popular_filter(campaign); 148 event_campaign_compare_toggle(campaign); 149 event_campaign_compare_view_section_click(campaign); 150 } 151 152 const init_data_layer_casino_finder_events = () => { 153 event_casino_finder_start(); 154 event_casino_finder_form_interaction(); 155 event_casino_finder_form_end(); 156 157 $('.casino_finder__final_screen_show_more').click(function () { 158 event_campaign_hover('.casino_finder__final_offer'); 159 }); 160 } 161 162 const init_data_layer_casino_finder_final_offers_events = () => { 163 if (typeof dataLayer !== 'undefined') { 164 event_campaign_coupon_copied('.casino_finder__final_copy_btn'); 165 event_campaign_cta_button('a.casino_finder__final_cta'); 166 event_campaign_hover('.casino_finder__final_offer'); 167 } 168 } 169 170 const data_layer_compare_view_visible = (campaign = false) => { 171 if (typeof dataLayer !== 'undefined') { 172 event_campaign_compare_view_section_click(campaign); 173 } 174 } 175 176 const event_campaign_vote_action = (campaign = false) => { 177 let selector = '.campaign__voting_section__btn'; 178 if (campaign !== false) { 179 selector = $(campaign).find(selector); 180 } 181 182 $(selector).click(function () { 183 const campaign_item = $(this).parents('.campaign-list-item').first(); 184 const $params = get_event_default_params(campaign_item); 185 186 $params.event = 'Bonus'; 187 $params.workflowName = 'vote action'; 188 $params.voteType = $(this).hasClass('like-action') ? 'like' : 'dislike'; 189 $params.interfaceComponent = 'vote button'; 190 $params.filterType = ''; 191 192 dataLayer.push($params); 193 }); 194 } 195 196 const event_campaign_learn_more = (campaign = false) => { 197 let selector = '.campaign-list-item_open-more-btn, .campaign-list-item__show-more-btn'; 198 if (campaign !== false) { 199 selector = $(campaign).find(selector); 200 } 201 202 $(selector).click(function () { 203 const campaign_item = $(this).parents('.campaign-list-item').first(); 204 const $params = get_event_default_params(campaign_item); 205 206 $params.event = 'Bonus'; 207 $params.workflowName = 'more info'; 208 $params.interfaceComponent = 'learn more button'; 209 $params.filterType = ''; 210 211 dataLayer.push($params); 212 }); 213 } 214 215 const event_campaign_coupon_copied = (selectors, campaign = false) => { 216 let selector = selectors; 217 if (campaign !== false) { 218 selector = $(campaign).find(selectors); 219 } 220 221 $(selector).click(function () { 222 const campaign_item = $(this).parents(main_offer_selectors).first(); 223 const $params = get_event_default_params(campaign_item); 224 225 $params.event = 'Bonus'; 226 $params.workflowName = 'bonus copied'; 227 $params.interfaceComponent = 'copy coupon button'; 228 $params.filterType = ''; 229 230 dataLayer.push($params); 231 }); 232 } 233 234 const event_campaign_cta_button = (selectors, campaign = false, custom_main_offer_selectors = '') => { 235 let selector = selectors; 236 if (campaign !== false) { 237 selector = $(campaign).find(selectors); 238 } 239 240 $(selector).click(function () { 241 let campaign_item; 242 if (custom_main_offer_selectors === '') { 243 campaign_item = $(this).parents(main_offer_selectors).first(); 244 } else { 245 campaign_item = $(this).parents(custom_main_offer_selectors).first(); 246 } 247 248 const $params = get_event_default_params(campaign_item); 249 250 $params.event = 'Bonus'; 251 $params.workflowName = 'Toplist CTA Click'; 252 $params.interfaceComponent = 'cta button'; 253 $params.filterType = ''; 254 255 dataLayer.push($params); 256 }); 257 } 258 259 const event_campaign_hover = (selectors, campaign = false) => { 260 let selector = selectors; 261 if (campaign !== false) { 262 selector = $(campaign).find(selectors); 263 } 264 265 let hovered_offers = []; 266 267 $(selector).hover(function () { 268 const campaign_item = $(this).first(); 269 270 let offer_id = $(campaign_item).data('id'); 271 if (typeof offer_id === 'undefined') { 272 offer_id = $(campaign_item).attr('offer_id'); 273 } 274 275 if (hovered_offers.includes(offer_id) === false) { 276 const $params = get_event_default_params(campaign_item); 277 278 $params.event = 'Bonus'; 279 $params.workflowName = 'Toplist shown'; 280 $params.interfaceComponent = 'cta button'; 281 $params.filterType = ''; 282 283 dataLayer.push($params); 284 285 hovered_offers.push(offer_id); 286 } 287 }); 288 } 289 290 const get_event_default_params = (campaign_item) => { 291 const $campaign_item = $(campaign_item); 292 293 return { 294 affcode: $campaign_item.data('offer-name'), 295 bonusCode: get_campaign_bonus_code($campaign_item), 296 toplistTitle: get_campaign_bonus_title($campaign_item), 297 toplistType: get_campaign_toplist_type($campaign_item), 298 partnerRating: get_campaign_bonus_rating($campaign_item), 299 interfaceOfferPosition: $campaign_item.index(), 300 } 301 } 302 303 const event_campaign_filter_start = (campaign = false) => { 304 let selector = '.campaign_sport_filters__quick_block:not(.disable_click)'; 305 if (campaign !== false) { 306 selector = $(campaign).find(selector); 307 } 308 309 $(selector).click(function () { 310 const filter_type = 'Main Filter'; 311 312 dataLayer.push({ 313 event: 'Filter', 314 workflowName: 'Toplist filter', 315 workflowStepName: 'start', 316 filterType: filter_type, 317 }); 318 }); 319 } 320 321 const event_campaign_filter_applied = (campaign = false) => { 322 let selector = '.campaign_sport_filters__quick_block_field'; 323 if (campaign !== false) { 324 selector = $(campaign).find(selector); 325 } 326 327 $(selector).click(function () { 328 const filter_type = 'Main Filter'; 329 const filter_value = $(this).find('.campaign_sport_filters__quick_block_label').first().text(); 330 331 dataLayer.push({ 332 event: 'Filter', 333 workflowName: 'Toplist filter', 334 workflowStepName: 'applied', 335 filterType: filter_type, 336 filterValue: filter_value, 337 }); 338 }); 339 340 selector = '.campaign_sport_filters__quick_block_select_option'; 341 if (campaign !== false) { 342 selector = $(campaign).find(selector); 343 } 344 345 $(selector).click(function () { 346 const filter_type = 'Main Filter'; 347 const filter_value = $(this).find('span').first().text(); 348 349 dataLayer.push({ 350 event: 'Filter', 351 workflowName: 'Toplist filter', 352 workflowStepName: 'applied', 353 filterType: filter_type, 354 filterValue: filter_value, 355 }); 356 }); 357 } 358 359 const event_campaign_extra_filter_start = (campaign = false) => { 360 let selector = '.campaign_sport_filters__open_btn'; 361 if (campaign !== false) { 362 selector = $(campaign).find(selector); 363 } 364 365 $(selector).click(function () { 366 const filter_type = 'Extra Filter'; 367 368 dataLayer.push({ 369 event: 'Filter', 370 workflowName: 'Toplist filter', 371 workflowStepName: 'start', 372 filterType: filter_type, 373 }); 374 }); 375 } 376 377 const event_campaign_extra_filter_applied = (campaign = false) => { 378 let selector = '.campaign_sport_filters__extended_view'; 379 if (campaign !== false) { 380 selector = $(campaign).find(selector); 381 } 382 383 $(selector).click(function () { 384 const filter_type = 'Extra Filter'; 385 let filter_field = ''; 386 let filter_value = {}; 387 388 const checked_inputs = $('.campaign_sport_filters__quick_block_field input:checked'); 389 $(checked_inputs).each(function () { 390 const filter_group = $(this).parents('.campaign_sport_filters__extended_group').first(); 391 const filter_group_title = $(filter_group).find('.campaign_sport_filters__extended_group_title').text(); 392 const input_label = $(this).parents('label').first().find('.campaign_sport_filters__quick_block_label').first().text(); 393 394 if (input_label !== 'Show all') { 395 if (typeof filter_value[filter_group_title] === 'undefined') { 396 filter_value[filter_group_title] = input_label; 397 } else { 398 filter_value[filter_group_title] = filter_value[filter_group_title] + ', ' + input_label; 399 } 400 } 401 }); 402 403 filter_value = JSON.stringify(filter_value); 404 405 dataLayer.push({ 406 event: 'Filter', 407 workflowName: 'Toplist filter', 408 workflowStepName: 'applied', 409 filterType: filter_type, 410 filterField: filter_field, 411 filterValue: filter_value, 412 }); 413 }); 414 } 415 416 const event_campaign_popular_filter = (campaign = false) => { 417 let selector = '.campaign_sport_filters__tag, .campaign-shortcode-table_filter-list-item';
418 if (campaign !== false) { 419 selector = $(campaign).find(selector); 420 } 421 422 $(selector).click(function () { 423 const filter_type = 'Most Popular Filter'; 424 let filter_value = ''; 425 if ($(this).hasClass('campaign_sport_filters__tag')) { 426 filter_value = $(this).clone().children().remove().end().text(); 427 } else { 428 filter_value = $(this).text(); 429 } 430 431 dataLayer.push({ 432 event: 'Filter', 433 workflowName: 'Toplist filter', 434 workflowStepName: 'applied', 435 filterType: filter_type, 436 filterValue: filter_value, 437 }); 438 }); 439 } 440 441 const event_campaign_compare_toggle = (campaign = false) => { 442 let selector = '.campaign_sport_filters__compare-toggle-input'; 443 if (campaign !== false) { 444 selector = $(campaign).find(selector); 445 } 446 447 $(selector).change(function () { 448 if ($(this).is(':checked')) { 449 dataLayer.push({ 450 event: 'Filter', 451 workflowName: 'Toplist filter', 452 workflowStepName: 'start', 453 filterType: 'Extra filter', 454 filterValue: 'Compare toggle', 455 }); 456 } 457 }); 458 } 459 460 const event_campaign_compare_view_section_click = (campaign = false) => { 461 let selector = '.campaign-shortcode__compare-view__section'; 462 if (campaign !== false) { 463 selector = $(campaign).find(selector); 464 } 465 466 if ($(selector).length === 0) { 467 return; 468 } 469 470 const $campaign_compare_view_wrapper = $(selector).parents('.campaign-compare-view-wrapper').first(); 471 if ($campaign_compare_view_wrapper.hasClass('bm-data-layer-init')) { 472 return; 473 } 474 475 $campaign_compare_view_wrapper.addClass('bm-data-layer-init'); 476 477 $(selector).click(function () { 478 if ($(this).hasClass('collapsed')) { 479 return; 480 } 481 482 const filter_value = $(this).find('.campaign-shortcode__compare-view__section-name').first().text().trim(); 483 484 dataLayer.push({ 485 event: 'Filter', 486 workflowName: 'Toplist filter', 487 workflowStepName: 'start', 488 filterType: 'Compare toggle accordion', 489 filterValue: filter_value, 490 }); 491 }); 492 } 493 494 const event_casino_finder_start = () => { 495 $('.casino_finder__start_btn, .casino_finder__first_button_screen_wrapper').click(function () { 496 let interface_component = ''; 497 498 if ($(this).parents('header').length > 0) { 499 interface_component = 'header'; 500 } 501 502 if ($(this).parents('footer').length > 0) { 503 interface_component = 'footer'; 504 } 505 506 if ($(this).parents('.sidebar').length > 0) { 507 interface_component = 'sidebar'; 508 } else if ($(this).parents('main').length > 0) { 509 interface_component = 'content'; 510 } 511 512 dataLayer.push({ 513 event: 'Casino Finder', 514 workflowStepName: 'form start', 515 interfaceComponent: interface_component, 516 }); 517 }); 518 } 519 520 const event_casino_finder_form_interaction = () => { 521 $('.casino_finder__tile').click(function () { 522 const question_screen_wrapper = $(this).parents('.casino_finder__question_screen_wrapper').first(); 523 const form_step_number = $(question_screen_wrapper).attr('screen-number'); 524 const form_question = $(question_screen_wrapper).find('.casino_finder__question_header_question').first().text(); 525 const form_value = $(this).find('.casino_finder__label').text(); 526 527 dataLayer.push({ 528 event: 'Casino Finder', 529 workflowStepName: 'form interaction', 530 formStepNumber: form_step_number, 531 formQuestion: form_question, 532 formValue: form_value, 533 }); 534 }); 535 } 536 537 const event_casino_finder_form_end = () => { 538 $('.casino_finder__wrapper').each(function () { 539 const question_screen_wrapper = $(this).find('.casino_finder__question_screen_wrapper').last(); 540 const tiles = $(question_screen_wrapper).find('.casino_finder__tile'); 541 542 $(tiles).click(function () { 543 dataLayer.push({ 544 event: 'Casino Finder', 545 workflowStepName: 'form end', 546 }); 547 }); 548 }); 549 } 550 551 const get_entity_value = (campaign_item, selector_key) => { 552 const $campaign_item = $(campaign_item); 553 554 for (const [class_name, dictionary] of Object.entries(toplist_database)) { 555 if ($campaign_item.hasClass(class_name)) { 556 const selector = dictionary.selectors[selector_key]; 557 558 return selector ? $campaign_item.find(selector).first().text().trim() : ''; 559 } 560 } 561 562 return ''; 563 } 564 565 const get_campaign_bonus_code = (campaign_item) => { 566 return get_entity_value(campaign_item, 'coupon'); 567 } 568 569 const get_campaign_bonus_title = (campaign_item) => { 570 return get_entity_value(campaign_item, 'title'); 571 } 572 573 const get_campaign_toplist_type = (campaign_item) => { 574 for (const [class_name, dictionary] of Object.entries(toplist_database)) { 575 if (campaign_item.hasClass(class_name)) { 576 return dictionary.type; 577 } 578 } 579 580 return ''; 581 } 582 583 const get_campaign_bonus_rating = (campaign_item) => { 584 return get_entity_value(campaign_item, 'rating').replace('/10', '').replace('/5', ''); 585 } 586 587 window.dataLayer_initCampaignEvents = init_data_layer_campaign_events; 588 window.dataLayer_initCasinoFinderFinalOffersEvents = init_data_layer_casino_finder_final_offers_events; 589 window.dataLayer_compareViewVisible = data_layer_compare_view_visible; 590})(jQuery);
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.