1var brave_isMobile = window.matchMedia("only screen and (max-width: 760px)").matches; 2var brave_isTab = window.matchMedia("screen and (max-width: 1200px) and (min-width: 760px)").matches; 3var brave_currentDevice = brave_isMobile ? 'mobile' : 'desktop'; 4 5function brave_change_slide(elementID, goto, slideWidth){ 6 var sliderMargin = -(goto * slideWidth)+'px' 7 var theCarousel = document.getElementById('brave_carousel__slides-'+elementID); 8 var theCarouselNav = document.getElementById('brave_carousel__navs-'+elementID); 9 10 if(theCarousel){ 11 theCarousel.style.marginLeft = sliderMargin; 12 if(theCarouselNav){ 13 var allCarouselNavs = theCarouselNav.querySelectorAll(":scope li"); 14 for (var i = 0; i < allCarouselNavs.length; i++) { allCarouselNavs[i].classList.remove('slide__nav__active'); } 15 document.getElementById('brave_carousel__nav-'+elementID+'_'+goto).classList.add('slide__nav__active'); 16 } 17 } 18} 19 20function brave_autochange_slide(elementID){ 21 var theSlider = document.getElementById('brave_carousel__slides-'+elementID); 22 var currentslide = document.querySelector('#brave_carousel__navs-'+elementID).dataset.currentslide; 23 currentslide = parseInt(currentslide, 10) 24 var slideWidth = parseInt(theSlider.dataset.width, 10); 25 var totalSlides = parseInt(theSlider.dataset.totalslides, 10); 26 27 var carouselHovered = theSlider.dataset.hovered; 28 if(carouselHovered === 'true'){ return } 29 //console.log(elementID, currentslide, slideWidth, totalSlides); 30 31 32 brave_change_slide(elementID, currentslide, slideWidth); 33 34 if(totalSlides === (currentslide+1)){ 35 document.querySelector('#brave_carousel__navs-'+elementID).dataset.currentslide = 0; 36 }else{ 37 document.querySelector('#brave_carousel__navs-'+elementID).dataset.currentslide = currentslide + 1; 38 } 39} 40 41function brave_carousel_pause(elementID, resume=false){ 42 var theSlider = document.getElementById('brave_carousel__slides-'+elementID); 43 if(theSlider){ 44 theSlider.dataset.hovered = true; 45 if(resume){ 46 theSlider.dataset.hovered = false; 47 } 48 } 49} 50 51function brave_countdown(elementID, theDate, theHour, theMins, hideDays, auto=null) { 52 if(!theDate) { return null} 53 54 //console.log(theDate, theHour, theMins, hideDays, auto); 55 56 var dateString = theDate; 57 var time = {hour: theHour, minutes: theMins}; 58 var brave_endDate; 59 if(!auto){ 60 var parts = dateString.split('/'); 61 var brave_day = parseInt(parts[0], 10); 62 var brave_month = parseInt(parts[1], 10) - 1; 63 var brave_year = parseInt(parts[2], 10); 64 brave_endDate = new Date(brave_year, brave_month, brave_day); 65 brave_endDate.setHours(time.hour); 66 brave_endDate.setMinutes(time.minutes); 67 brave_endDate.setSeconds(0); 68 }else{ 69 if(auto){ 70 brave_endDate = auto; 71 } 72 73 } 74 75 var brave_startDate = new Date().getTime(); 76 77 var brave_days, brave_hours, brave_minutes, brave_seconds; 78 var timeRemaining = parseInt(((brave_endDate.getTime() - brave_startDate) / 1000), 10); 79 80 //console.log( brave_endDate.getTime(), brave_startDate, timeRemaining); 81 82 if (timeRemaining >= 0) { 83 if(!hideDays){ 84 brave_days = parseInt(timeRemaining / 86400); 85 timeRemaining = (timeRemaining % 86400); 86 } 87 88 brave_hours = parseInt(timeRemaining / 3600); 89 timeRemaining = (timeRemaining % 3600); 90 91 brave_minutes = parseInt(timeRemaining / 60); 92 timeRemaining = (timeRemaining % 60); 93 94 brave_seconds = parseInt(timeRemaining); 95 } 96 97 var daySpan = document.getElementById('brave_rem_days-'+elementID); 98 var hourSpan = document.getElementById('brave_rem_hours-'+elementID); 99 var minSpan = document.getElementById('brave_rem_minutes-'+elementID); 100 var secSpan = document.getElementById('brave_rem_seconds-'+elementID); 101 102 if(daySpan){ daySpan.innerHTML = timeRemaining >= 0 ? brave_days : 0} 103 if(hourSpan){ hourSpan.innerHTML = timeRemaining >= 0 ? brave_hours : 0} 104 if(minSpan){ minSpan.innerHTML = timeRemaining >= 0 ? brave_minutes : 0}
105 if(secSpan){ secSpan.innerHTML = timeRemaining >= 0 ? brave_seconds : 0} 106 107 108 109} 110 111 112function brave_select_imageField(fieldID, optionIndex, multi=false){ 113 var optionField = document.getElementById('brave_form_field'+fieldID+'_opt-'+optionIndex); 114 if(optionField){ 115 if(!multi){ 116 var allOptsFields = document.getElementById('brave_form_field'+fieldID).querySelectorAll('input'); 117 for (var i = 0; i < allOptsFields.length; i++) { allOptsFields[i].checked = false; document.getElementById('brave_form_field'+fieldID+'_opt-'+i).classList.remove('formfield__inner__image--selected'); } 118 } 119 var optionFieldInput = optionField.querySelector('input'); 120 if(optionFieldInput && (optionFieldInput.checked === false)){ optionFieldInput.checked = true; optionField.classList.add('formfield__inner__image--selected'); 121 }else if(optionFieldInput && (optionFieldInput.checked === true)){ optionFieldInput.checked = false; optionField.classList.remove('formfield__inner__image--selected'); } 122 } 123} 124function brave_form_rating_unhover(fieldID){ 125 var allRatingFields = document.getElementById('brave_form_field'+fieldID).querySelectorAll('.formfield__inner__ratings_star, .formfield__inner__ratings_number'); 126 for (var i = 0; i < allRatingFields.length; i++) { 127 allRatingFields[i].classList.remove('formfield__inner__ratings--hovered'); 128 } 129} 130function brave_form_rating_hover(fieldID, optionIndex){ 131 var allRatingFields = document.getElementById('brave_form_field'+fieldID).querySelectorAll('.formfield__inner__ratings_star, .formfield__inner__ratings_number'); 132 for (var i = 0; i < allRatingFields.length; i++) { 133 allRatingFields[i].classList.remove('formfield__inner__ratings--hovered'); 134 if(i <= (optionIndex-1)){ 135 allRatingFields[i].classList.add('formfield__inner__ratings--hovered'); 136 } 137 } 138} 139 140function brave_form_rate(fieldID, optionIndex, smiley=false){ 141 document.getElementById('brave_form_field'+fieldID).dataset.rated = optionIndex; 142 var allRatingFields = document.getElementById('brave_form_field'+fieldID).querySelectorAll('.formfield__inner__ratings_star, .formfield__inner__ratings_number, .formfield__inner__ratings_smiley'); 143 for (var i = 0; i < allRatingFields.length; i++) { 144 allRatingFields[i].classList.remove('formfield__inner__ratings--selected'); 145 if(!smiley && (i <= (optionIndex-1))){ allRatingFields[i].querySelector('input').checked = true; allRatingFields[i].classList.add('formfield__inner__ratings--selected'); } 146 147 if(smiley && (i === (optionIndex-1))){ 148 allRatingFields[i].querySelector('input').checked = true; 149 allRatingFields[i].classList.add('formfield__inner__ratings--selected'); 150 } 151 } 152} 153function brave_form_goBack(formID, totalSteps){ 154 var currentStep = document.querySelector('#brave_form_'+formID+' .brave_form_fields').dataset.step; 155 var formBackButton = document.querySelector('#brave_form_'+formID+' .brave_form_stepBack'); 156 var goto = currentStep - 1; 157 document.querySelector('#brave_form_'+formID+' .brave_form_fields').dataset.step = goto; 158 159 160 //Change The Popup and Form Height if specified 161 brave_form_changeHeight(formID, goto); 162 163 if(goto === 0 ){ 164 formBackButton.classList.add('brave_form_stepBack--hide'); 165 }else{ 166 formBackButton.classList.remove('brave_form_stepBack--hide'); 167 } 168 169 // //Go to Prev Step 170 var allformSteps = document.querySelectorAll('#brave_form_'+formID+' .brave_form_fields_step'); 171 for (var i = 0; i < allformSteps.length; i++) { 172 if(i ===goto){ 173 allformSteps[i].classList.add('brave_form_fields_step--show'); 174 175 }else{ 176 allformSteps[i].classList.remove('brave_form_fields_step--show'); 177 } 178 } 179 if(goto === (totalSteps - 1) ){ 180 document.querySelector('#brave_form_'+formID+' .brave_form_button').classList.remove('brave_form_button--hide'); 181 }else{ 182 document.querySelector('#brave_form_'+formID+' .brave_form_button').classList.add('brave_form_button--hide'); 183 } 184} 185 186function brave_form_gotoStep(formID, totalSteps, goto){ 187 //console.log('gotoStep', goto,totalSteps, goto === (totalSteps - 1)); 188 189 //Get The form Fields Values 190 var braveForm = document.getElementById('brave_form_'+formID); 191 //var formData = new FormData(braveForm); 192 //var fieldsData = JSON.parse(brave_popup_formData[formID].fields); 193 var fieldsData = brave_get_field_vals(braveForm, JSON.parse(brave_popup_formData[formID].fields)) 194 195 196 var stepFieldIDs = []; 197 var currentStep = document.querySelector('#brave_form_'+formID+' .brave_form_fields_step'+(goto-1)); 198 if(currentStep){ 199 var allStepFields = currentStep.querySelectorAll('.brave_form_field'); 200 for (var i = 0; i < allStepFields.length; i++) { 201 if( !allStepFields[i].classList.contains('brave_form_field--step') ){ 202 stepFieldIDs.push(allStepFields[i].getAttribute('id').replace('brave_form_field', '')); 203 } 204 } 205 } 206 var filteredFieldData = {}; 207 stepFieldIDs.forEach(function(fieldID){ 208 if(fieldsData[fieldID]){ 209 filteredFieldData[fieldID] = fieldsData[fieldID]; 210 } 211 }) 212 //console.log( fieldsData, filteredFieldData); 213 214 // //Check if Form Has Errors 215 var formErrors = [];
216 Object.keys(filteredFieldData).forEach(function(fieldID){ 217 var fieldError = brave_validate_fields(fieldID, filteredFieldData[fieldID]); 218 if(fieldError){ formErrors.push(fieldError); } 219 document.querySelector('#brave_form_field'+fieldID).classList.remove('brave_form_field--hasError', 'brave_form_field--hasError-firstname', 'brave_form_field--hasError-lastname'); 220 }); 221 brave_display_form_error(formErrors); 222 223 if(formErrors.length > 0){ return } 224 225 //Change The Popup and Form Height if specified 226 brave_form_changeHeight(formID, goto); 227 228 // //Go to NextStep 229 var allformSteps = document.querySelectorAll('#brave_form_'+formID+' .brave_form_fields_step'); 230 for (var i = 0; i < allformSteps.length; i++) { 231 if(i ===goto){ 232 document.querySelector('#brave_form_'+formID+' .brave_form_fields').dataset.step = goto; 233 allformSteps[i].classList.add('brave_form_fields_step--show'); 234 document.querySelector('#brave_form_'+formID+' .brave_form_fields').style.height = allformSteps[i].offsetHeight+'px'; 235 var formBackButton = document.querySelector('#brave_form_'+formID+' .brave_form_stepBack'); 236 if(formBackButton){ formBackButton.classList.remove('brave_form_stepBack--hide'); } 237 }else{ 238 allformSteps[i].classList.remove('brave_form_fields_step--show'); 239 } 240 } 241 //console.log(goto, totalSteps); 242 243 if(goto === (totalSteps - 1) ){ 244 setTimeout(() => { 245 document.querySelector('#brave_form_'+formID+' .brave_form_button').classList.remove('brave_form_button--hide'); 246 }, 250); 247 } 248 249} 250 251function brave_form_changeHeight(formID, goto){ 252 var changesFormHeight = brave_popup_formData[formID].changesFormHeight || false; 253 if(changesFormHeight){ 254 var braveForm = document.getElementById('brave_element-'+formID); 255 var parentPopupStep = braveForm.closest('.brave_popup__step'); 256 var initialHeight = brave_popup_formData[formID].heightData[0]; 257 var diffHeight = brave_popup_formData[formID].heightData[goto] - initialHeight; 258 var newFormHeight = brave_popup_formData[formID].heightData[goto] || initialHeight; 259 braveForm.style.height = (parseInt(newFormHeight, 10))+'px'; 260 261 if(parentPopupStep){ 262 var parentPopupHeight = parentPopupStep.dataset.height; 263 //console.log(goto, parentPopupHeight, diffHeight, initialHeight, brave_popup_formData[formID].heightData[goto], brave_popup_formData[formID].heightData); 264 parentPopupStep.querySelector('.brave_popup__step__inner').style.height = (parseInt(parentPopupHeight, 10) + diffHeight)+'px'; 265 } 266 } 267 //console.log( changesFormHeight, newFormHeight, initialHeight, diffHeight); 268} 269 270function brave_get_field_vals(braveForm, fieldOpts){ 271 var fieldsData = fieldOpts; 272 for( var i=0; i<braveForm.elements.length; i++ ){ 273 var fieldName = braveForm.elements[i].name.replace('[]', ''); 274 var fieldOpts = fieldsData[fieldName] || {}; 275 var fieldValue = braveForm.elements[i].value; 276 //console.log(fieldName, fieldOpts, fieldValue); 277 if(fieldOpts && fieldOpts.type && (fieldOpts.type ==='checkbox' || (fieldOpts.type ==='select' && fieldOpts.multi) || (fieldOpts.type ==='image' && fieldOpts.multi)) ){ 278 var checkedVal = document.querySelectorAll('#brave_form_field'+fieldName+' input:checked, #brave_form_field'+fieldName+' option:checked'); 279 fieldValue = Array.from(checkedVal).map(el => el.value); 280 if(fieldOpts.required && (fieldValue.length === 0 || fieldValue.includes('none')) ){ fieldValue =''; } 281 } 282 if(fieldsData[fieldName]){ 283 fieldsData[fieldName].value = fieldValue; 284 } 285 } 286 return fieldsData; 287} 288 289function brave_submit_form(event, settings){ 290 event.preventDefault(); 291 var braveForm = document.getElementById('brave_form_'+settings.formID); 292 var fieldsData = brave_get_field_vals(braveForm, JSON.parse(settings.fields)) 293 294 //Check if has Errrors 295 var formErrors = [];
296 Object.keys(fieldsData).forEach(function(fieldID){ 297 var fieldError = brave_validate_fields(fieldID, fieldsData[fieldID]); 298 if(fieldError){ formErrors.push(fieldError); } 299 document.querySelector('#brave_form_field'+fieldID).classList.remove('brave_form_field--hasError', 'brave_form_field--hasError-firstname', 'brave_form_field--hasError-lastname'); 300 }); 301 brave_display_form_error(formErrors); 302 303 var finalFieldsData = {}; 304 305 Object.keys(fieldsData).forEach(function(fieldID){ if(fieldsData[fieldID]) { finalFieldsData[fieldID] = fieldsData[fieldID].value; }}); 306 307 console.log(formErrors); 308 //console.log('FORM ERRORS: ', formErrors); 309 310 if(formErrors.length === 0){ 311 //console.log('NO ERRORS Sending to Backend!'); 312 //SEND Data 313 var ajaxurl = bravepop_global.ajaxURL; 314 var security = document.getElementById('brave_form_security'+settings.formID).value; 315 if(!security || !ajaxurl) { return console.log('Security Failed or Ajax URL Missing!!!!', security, ajaxurl); } 316 var finalData = { formData: JSON.stringify(finalFieldsData), popupID: settings.popupID, formID: settings.formID, stepID: settings.stepID, device: settings.device, security: security, action: 'bravepop_form_submission' }; 317 var brave_form = document.getElementById('brave_form_'+settings.formID); 318 var brave_login_loader = document.getElementById('brave_form_loading_'+settings.formID); 319 if(brave_login_loader){ brave_login_loader.classList.add('brave_form_loading--show'); } 320 if(brave_form){ brave_form.classList.add('brave_form_form--loading'); } 321 322 //console.log(finalData); 323 brave_ajax_send(ajaxurl, finalData, function(status, sentData){ 324 //Remove The sending Status 325 if(brave_login_loader){ brave_login_loader.classList.remove('brave_form_loading--show'); } 326 if(brave_form){ brave_form.classList.remove('brave_form_form--loading'); } 327 328 var response = JSON.parse(sentData); 329 console.log(status, response); 330 331 localStorage.setItem('brave_popup_'+settings.popupID+'_formsubmitted', true); 332 333 var braveFormSubmitEvent = new CustomEvent('brave_form_submitted', { detail: {popupId: parseInt(settings.popupID, 10), formId: settings.formID, formData: JSON.stringify(finalFieldsData)} }); 334 document.dispatchEvent(braveFormSubmitEvent); 335 336 //Send Ga Event 337 if(settings.track){ 338 var formTrackingSettings = JSON.parse(settings.track); 339 if( formTrackingSettings && formTrackingSettings.enable && formTrackingSettings.eventCategory && formTrackingSettings.eventAction){ 340 brave_send_ga_event(formTrackingSettings.eventCategory, formTrackingSettings.eventAction, formTrackingSettings.eventLabel || ''); 341 } 342 } 343 344 //Perform Goal 345 if(brave_popup_formData[settings.formID] && brave_popup_formData[settings.formID].goal){ 346 brave_complete_goal(settings.popupID, 'form'); 347 } 348 349 //Show Content 350 if(response.sent && response.primaryAction === 'content' && response.contentMessage ){ 351 if(brave_form){ brave_form.classList.add('brave_form_form--hide'); } 352 document.getElementById('brave_form_custom_content'+settings.formID).innerHTML = response.contentMessage; 353 //Auto Close Popup 354 if(response.autoclose && response.autoclosetime){ 355 setTimeout(() => { 356 brave_close_popup(settings.popupID); 357 }, parseInt(response.autoclosetime) * 1000); 358 } 359 //Also Download File 360 if(response.download && response.downloadURL){ 361 var downloadURI = response.downloadURL; var filename = response.downloadURL.substring( response.downloadURL.lastIndexOf('/')+1); 362 var link = document.createElement('a'); 363 if (typeof link.download === 'string') { 364 document.body.appendChild(link); // Firefox requires the link to be in the body 365 link.download = filename; 366 link.href = downloadURI; 367 link.target = '_blank'; 368 link.click(); 369 document.body.removeChild(link); // remove the link when done 370 } else { 371 location.replace(downloadURI); 372 } 373 } 374 } 375 376 //Redirect User 377 if(response.sent && response.primaryAction === 'redirect' && response.redirectURL ){
378 if(brave_form){ brave_form.classList.add('brave_form_form--hide'); } 379 document.getElementById('brave_form_custom_content'+settings.formID).innerHTML = response.redirectMessage; 380 var redirectTime = response.redirectAfter ? (response.redirectAfter *1000) : 6000; 381 setTimeout(() => { 382 window.location.href = response.redirectURL; 383 }, redirectTime); 384 } 385 386 //Go to Step 387 if(response.sent && response.primaryAction === 'step' && response.step && settings.popupID ){ 388 var formStep = parseInt(response.step, 10); 389 formStep = formStep === 0 ? 0 : formStep - 1; 390 brave_open_popup(settings.popupID, formStep); 391 } 392 393 394 }); 395 } 396 397} 398 399function brave_display_form_error(formErrors){ 400 console.log(formErrors); 401 402 //Display The Errors 403 if(formErrors.length > 0){ 404 formErrors.forEach(function(error){ 405 if(error.fieldType && error.fieldType ==='name'){ 406 if(error.firstname){ 407 document.querySelector('#brave_form_field'+error.id).classList.add('brave_form_field--hasError-firstname'); 408 document.querySelector('#brave_form_field'+error.id+' .brave_form_field_error--firstname').innerHTML = error.message; 409 } 410 if(error.lastname){ 411 document.querySelector('#brave_form_field'+error.id).classList.add('brave_form_field--hasError-lastname'); 412 document.querySelector('#brave_form_field'+error.id+' .brave_form_field_error--lastname').innerHTML = error.message; 413 } 414 415 }else{ 416 document.querySelector('#brave_form_field'+error.id).classList.add('brave_form_field--hasError'); 417 document.querySelector('#brave_form_field'+error.id+' .brave_form_field_error').innerHTML = error.message; 418 } 419 }); 420 } 421} 422 423 424function brave_validate_fields(fieldID, field){ 425 if(!field){ return } 426 427 if(!field.value && field.required) { 428 return {id: fieldID, type: 'required', message: bravepop_global.field_required} 429 } 430 if(field.required && (field.type==='input' || field.type==='textarea' || field.type==='date' ) ) { 431 if(!field.value.trim()){ 432 return {id: fieldID, type: 'required', message: bravepop_global.field_required} 433 } 434 } 435 436 if(field.type==='input' && field.validation === 'name' && field.required) { 437 if(!field.value[0] || !field.value[1]){ 438 return {id: fieldID, type: 'required', fieldType: 'name', message: bravepop_global.field_required, firstname: !field.value[0] ? true : false, lastname: !field.value[1] ? true : false} 439 } 440 } 441 442 if(field.value && field.required && field.type==='select' && field.value === 'none') { 443 return {id: fieldID, type: 'required', message: bravepop_global.field_required} 444 } 445 446 //Check HTML or Empty Value 447 if(field.value && ((field.type==='input' && field.validation === 'text') || field.type==='textarea' || field.type==='date' ) ) { 448 449 if(brave_hasHTML(field.value)){ 450 return {id: fieldID, type: 'ho_html', message: bravepop_global.no_html_allowed}; 451 } 452 } 453 454 //Validate number 455 if(field.value && field.type==='input' && field.validation === 'number' ) { 456 if(brave_isNumber(field.value) === false){ 457 return {id: fieldID, type: 'invalid', message: bravepop_global.invalid_number}; 458 } 459 } 460 //Validate url 461 if(field.value && field.type==='input' && field.validation === 'url' ) { 462 if(brave_isURL(field.value) === false){ 463 return {id: fieldID, type: 'invalid', message: bravepop_global.invalid_url}; 464 } 465 } 466 467 //Validate email 468 if(field.value && field.type==='input' && field.validation === 'email' ) { 469 if(brave_isEmail(field.value) === false){ 470 return {id: fieldID, type: 'invalid', message: bravepop_global.invalid_email}; 471 } 472 } 473 474 //Validate Date 475 if(field.value && field.type==='date' ) { 476 if(brave_isDate(field.value) === false){
477 return {id: fieldID, type: 'invalid', message: bravepop_global.invalid_date}; 478 } 479 } 480 481} 482 483function brave_hasHTML(value) { 484 var doc = new DOMParser().parseFromString(value, "text/html"); 485 return Array.from(doc.body.childNodes).some(node => node.nodeType === 1); 486} 487 488function brave_isNumber(value) { 489 var numberFormat = RegExp(/^[a-zA-Z]+$/); 490 return numberFormat.test(value) ? false : true; 491} 492 493function brave_isEmail(value) { 494 var mailformat = RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,8})+$/); 495 return mailformat.test(value) ? true : false; 496} 497 498function brave_isURL(value) { 499 var urlFormat = RegExp(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g); 500 return urlFormat.test(value) ? true : false; 501} 502 503function brave_isDate(value) { 504 var dateFormat = RegExp(/^\d{2}([./-])\d{2}\1\d{4}$/); 505 var matchedDate = dateFormat.test(value); 506 return matchedDate && matchedDate[0] ? true : false; 507} 508 509 510function brave_ajax_send(ajaxurl, aja
510xData, callbackFunction){ 511 //console.log(ajaxData); 512 var array = []; 513 Object.keys(ajaxData).forEach(function(element) { 514 array.push( encodeURIComponent(element) + "=" + encodeURIComponent(ajaxData[element]) ) 515 }); 516 var dataToSend = array.join("&"); 517 518 var request = new XMLHttpRequest(); 519 request.open('POST', ajaxurl, true); 520 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded' ); 521 request.onload = function () { 522 if (this.status >= 200 && this.status < 400) { 523 callbackFunction('success', this.response); 524 } else { 525 callbackFunction('error', this.response); 526 } 527 }; 528 //request.onerror = function(error) { console.log(error); }; 529 request.send(dataToSend); 530} 531 532 533function brave_action_step(popupID, currentStep, stepIndex){ 534 //console.log(popupID, stepIndex); 535 var selectedPopupStep = document.querySelector('#brave_popup_'+popupID+'__step__'+stepIndex+' .brave_popup__step__'+brave_currentDevice) 536 var noMobileContent = selectedPopupStep && selectedPopupStep.dataset.nomobilecontent === 'true' ? true : false; 537 var currentDevice = noMobileContent ? 'desktop' : brave_currentDevice; 538 var selectedPopupStep = document.querySelector('#brave_popup_'+popupID+'__step__'+currentStep+' .brave_popup__step__'+currentDevice) 539 selectedPopupStep.dataset.open = 'false'; 540 brave_open_popup(popupID, stepIndex); 541 542} 543 544 545function brave_init_popup(popupID, popupData ){ 546 //console.log(popupID, popupData); 547 548 brave_responsiveness(popupID, popupData); 549 550 //If is in Preview Mode force load the popup skinpping all the conditions 551 if(popupData.forceLoad){ 552 return brave_load_popup(popupID, popupData); 553 } 554 555 var triggerType = popupData.settings && popupData.settings.trigger && popupData.settings.trigger.triggerType ? popupData.settings.trigger.triggerType.split(',') : ['load']; 556 557 //Do not load if utm keywords dont match 558 var utmKeywords = []; 559 var containsKeyword = false; 560 if(popupData.settings && popupData.settings.placement && popupData.settings.placement.utm && popupData.settings.placement.utmKeywords){ 561 utmKeywords = popupData.settings.placement.utmKeywords.split(','); 562 } 563 if(utmKeywords.length > 0){ 564 var currentURL = window.location.href; 565 utmKeywords.forEach(function(key){ 566 if(currentURL.includes(key)){ containsKeyword = true; } 567 }) 568 if(containsKeyword === false){ 569 return console.log('Does Not Match UTM Keywords'); 570 } 571 } 572 573 //Do not load if Popup is not in Scheduled Dates 574 if(popupData.schedule && popupData.schedule.active && popupData.schedule.type){ 575 if(popupData.schedule.type === 'days' && popupData.schedule.days.length > 0){ 576 var currentDay = new Date().getDay(); 577 if(!popupData.schedule.days.includes(currentDay)){ 578 return console.log('Popup Not Scheduled for Today!'); 579 } 580 } 581 if(popupData.schedule.type === 'dates' && popupData.schedule.dates.length > 0){ 582 var thecurrentDate = new Date().getTime(); 583 var dateInRange = false; 584 popupData.schedule.dates.forEach(function(date){ 585 var theTimes = []; var timeTypes = ['start', 'end']; 586 timeTypes.forEach(function(val){ 587 var theDate = date[val].date.split('/'); 588 var theHour = date[val].time && date[val].time.hour ? date[val].time.hour : '00'; 589 var theMinutes = date[val].time && date[val].time.minutes ? date[val].time.minutes : '00'; 590 theTimes.push(new Date(theDate[2]+'/'+theDate[1]+'/'+theDate[0]+' '+theHour+':'+theMinutes+':00').getTime()); 591 }) 592 if(theTimes[0] < thecurrentDate && theTimes[1] > thecurrentDate){ 593 dateInRange = true; 594 } 595 }); 596 if(!dateInRange){ 597 return console.log('Popup Not Scheduled these dates!'); 598 } 599 } 600 } 601 602 //Do not Load if Device Settings doesnt Match 603 if(popupData.settings && popupData.settings.audience && popupData.settings.audience.devices && popupData.settings.audience.devices === "desktop" && brave_currentDevice === 'mobile'){ return console.log('Device Settings doesnt Match'); } 604 if(popupData.settings && popupData.settings.audience && popupData.settings.audience.devices && popupData.settings.audience.devices === "mobile" && brave_currentDevice === 'desktop'){ return console.log('Device Settings doesnt Match'); } 605
606 //Do not load if Opened n Times already 607 var popupOpenCount = localStorage.getItem('brave_popup_'+popupID+'_viewed'); 608 var popupRepeatCountType = popupData.settings && popupData.settings.frequency && popupData.settings.frequency.repeatCountType || 'lifetime'; 609 var repeatCount = popupData.settings && popupData.settings.frequency && popupData.settings.frequency.repeatCount ? parseInt(popupData.settings.frequency.repeatCount, 10) : 3; 610 if(popupData.settings && popupData.settings.frequency && popupData.settings.frequency.repeat){ 611 if(popupRepeatCountType === 'lifetime' && parseInt(popupOpenCount, 10) >= repeatCount){ 612 return console.log('Already Viewed '+repeatCount+' Times. Hiding..'); 613 } 614 var popupViewStat = localStorage.getItem('brave_popup_'+popupID+'_view_stat'); popupViewStat = popupViewStat ? JSON.parse(popupViewStat) : []; 615 var thecurrentDate = new Date(); var thecurrentDay = thecurrentDate.getDate(); var thecurrentMonth = thecurrentDate.getMonth(); var thecurrentYear = thecurrentDate.getFullYear(); 616 var popupViewDayCount = 0; var popupViewMonthCount = 0; 617 if(popupViewStat){ 618 popupViewStat.forEach(function(stat){ 619 var statDate = new Date(stat); var statDay = statDate.getDate(); var statMonth = statDate.getMonth(); var statYear = statDate.getFullYear(); 620 if((statDay === thecurrentDay) && (statMonth === thecurrentMonth) && (statYear === thecurrentYear)){ popupViewDayCount = popupViewDayCount + 1; } 621 if((statMonth === thecurrentMonth) && (statYear === thecurrentYear)){ popupViewMonthCount = popupViewMonthCount + 1; } 622 }) 623 } 624 if(popupRepeatCountType === 'day' && (parseInt(popupViewDayCount, 10) >= repeatCount)){ 625 return console.log('Already Viewed '+repeatCount+' Times for today. Hiding..'); 626 } 627 if(popupRepeatCountType === 'month' && (parseInt(popupViewMonthCount, 10) >= repeatCount) ){ 628 return console.log('Already Viewed '+repeatCount+' Times for this month. Hiding..'); 629 } 630 } 631 632 //Do not load if Closed n Times already 633 var popupCloseStat = localStorage.getItem('brave_popup_'+popupID+'_closed') ? JSON.parse(localStorage.getItem('brave_popup_'+popupID+'_closed')) : null; 634 if(popupData.settings && popupData.settings.frequency && popupData.settings.frequency.close && popupCloseStat && popupCloseStat.closed){ 635 var popupCloseCount = popupData.settings.frequency.closeCount ? popupData.settings.frequency.closeCount : 2; 636 var popupCloseFor = popupData.settings.frequency.closeFor ? parseInt(popupData.settings.frequency.closeFor, 10) * 86400 * 1000 : 86400 * 1000 * 30; 637 var userCloseCount = parseInt(popupCloseStat.closed, 10); 638 var userCloseDate = parseInt(popupCloseStat.closeTime, 10); 639 var currentDate = new Date().getTime(); 640 var closeTimeDiff = currentDate - userCloseDate; 641 console.log('##### CLOSING STATS',userCloseCount, popupCloseFor,closeTimeDiff, closeTimeDiff >= popupCloseFor, userCloseCount >= popupCloseCount); 642 if(closeTimeDiff <= popupCloseFor && (userCloseCount >= popupCloseCount )){ 643 return console.log('Close Time Settings Do not Match'); 644 } 645 } 646 //Do not Load if a Form Submitted in this Popup 647 if(popupData.settings && popupData.settings.frequency && popupData.settings.frequency.formSubmit && localStorage.getItem('brave_popup_'+popupID+'_formsubmitted')){ 648 return console.log('Form in this Popup already Submitted! Hiding..'); 649 } 650 651 //Do not show if goal is complete 652 if(popupData.settings && popupData.settings.frequency && popupData.settings.frequency.goalComplete && localStorage.getItem('brave_popup_'+popupID+'_goal_complete')){ 653 return console.log('Popup Goal Already Completed..'); 654 } 655 656 //Do not Load if Popups Countdown Timer has ended 657 if(popupData.settings && popupData.settings.frequency && popupData.settings.frequency.timerEnded && popupData.timers.length > 0 && popupData.timers[0].ended){ 658 return console.log('Popup Countdown Timer Ended! Hiding..'); 659 } 660
661 //Do not Load if a certain popup was not viewed/goaled/closed before 662 if(popupData.settings && popupData.settings.filters && popupData.settings.filters.popups_before && popupData.settings.filters.popups.length > 0){ 663 var popupFilterFulfilled = false; 664 popupData.settings.filters.popups.forEach(function (popup) { 665 if(!popupFilterFulfilled && popup.id && popup.action){ 666 var popupActionMatched = localStorage.getItem('brave_popup_'+popup.id+'_'+popup.action); 667 if(popupActionMatched){ popupFilterFulfilled = true; } 668 } 669 }) 670 if(!popupFilterFulfilled){ 671 return console.log('A selected Popup was not viewed before! Hiding..'); 672 } 673 } 674 675 if(triggerType.includes('load')){ brave_load_popup(popupID, popupData, 'load'); } 676 677 if(triggerType.includes('exit')){ 678 if(brave_currentDevice === 'mobile'){ 679 if(!popupData.settings.trigger.exitMobileFallback || (popupData.settings.trigger.exitMobileFallback && popupData.settings.trigger.exitMobileFallback.type && popupData.settings.trigger.exitMobileFallback.type === 'load')){ 680 brave_load_popup(popupID, popupData,'load'); 681 } 682 if(popupData.settings.trigger.exitMobileFallback && popupData.settings.trigger.exitMobileFallback.type && popupData.settings.trigger.exitMobileFallback.type === 'time'){ 683 var exitMobileDelay = popupData.settings.trigger.exitMobileFallback.time || 2000; 684 setTimeout(() => { brave_load_popup(popupID, popupData , 'time'); }, (exitMobileDelay * 1000)); 685 } 686 }else{ 687 document.addEventListener("mouseout", function(evt){ 688 if(evt.toElement === null && evt.relatedTarget === null) { 689 brave_load_popup(popupID, popupData, 'exit'); 690 } 691 }); 692 } 693 } 694 695 if(triggerType.includes('scroll') || (brave_isMobile && popupData.settings.trigger.exitMobileFallback && popupData.settings.trigger.exitMobileFallback.type && popupData.settings.trigger.exitMobileFallback.type ==='scroll')){ 696 document.addEventListener("scroll", function(evt){ 697 var h = document.documentElement, b = document.body, st = 'scrollTop', sh = 'scrollHeight'; 698 var scrollPercent = (h[st]||b[st]) / ((h[sh]||b[sh]) - h.clientHeight) * 100; 699 if( brave_isMobile && (popupData.settings.trigger.exitMobileFallback && popupData.settings.trigger.exitMobileFallback.type && popupData.settings.trigger.exitMobileFallback.type ==='scroll')){ 700 var exitMobielScroll = popupData.settings.trigger.exitMobileFallback.scroll || 15; 701 if(scrollPercent >= exitMobielScroll){ brave_load_popup(popupID, popupData, 'scroll'); } 702 } 703 if(popupData.settings && popupData.settings.trigger.scrolltype && popupData.settings.trigger.scrolltype === 'twenty'){ 704 if(scrollPercent >= 20){ brave_load_popup(popupID, popupData, 'scroll'); } 705 } 706 if(popupData.settings && popupData.settings.trigger.scrolltype && popupData.settings.trigger.scrolltype === 'half'){ 707 if(scrollPercent >= 50){ brave_load_popup(popupID, popupData, 'scroll'); } 708 } 709 if(popupData.settings && popupData.settings.trigger.scrolltype && popupData.settings.trigger.scrolltype === 'end'){ 710 if(scrollPercent >= 95){ brave_load_popup(popupID, popupData, 'scroll'); } 711 } 712 if(popupData.settings && popupData.settings.trigger.scrolltype && popupData.settings.trigger.scrollto && popupData.settings.trigger.scrolltype === 'custom'){ 713 var scrolltoElms = document.querySelectorAll(popupData.settings.trigger.scrollto); 714 if(scrolltoElms){ 715 scrolltoElms.forEach(function(scrolltoElm, index){ 716 if(scrolltoElm && brave_is_in_view(scrolltoElm)){ 717 brave_load_popup(popupID, popupData, 'scroll'); 718 } 719 }); 720 } 721 } 722 }); 723 } 724 725 if(triggerType.includes('click') && popupData.settings && popupData.settings.trigger.clickElements){ 726 var clickElms = document.querySelectorAll(popupData.settings.trigger.clickElements); 727 //console.log(clickElms); 728 729 if(clickElms){
730 clickElms.forEach(function(clickElm, index){ 731 clickElm.addEventListener("click", function(evt){ 732 evt.preventDefault(); 733 brave_load_popup(popupID, popupData, 'click'); 734 }); 735 }); 736 } 737 } 738 739 if(triggerType.includes('time') && popupData.settings && popupData.settings.trigger.time && (popupData.settings.trigger.time.hours || popupData.settings.trigger.time.minutes || popupData.settings.trigger.time.seconds)){ 740 var triggerHours = popupData.settings.trigger.time.hours ? parseInt(popupData.settings.trigger.time.hours, 10) : 0; 741 var triggerMinutes = popupData.settings.trigger.time.minutes ? parseInt(popupData.settings.trigger.time.minutes, 10) : 0; 742 var triggerSeconds = popupData.settings.trigger.time.seconds ? parseInt(popupData.settings.trigger.time.seconds, 10) : 0; 743 744 var totalTriggerDelay = (triggerHours * 3600) + (triggerMinutes * 60) + (triggerSeconds); 745 totalTriggerDelay = totalTriggerDelay * 1000; 746 //console.log(triggerHours, triggerMinutes, triggerSeconds, totalTriggerDelay); 747 748 setTimeout(() => { 749 brave_load_popup(popupID, popupData , 'time'); 750 }, totalTriggerDelay); 751 752 } 753 754 755 756} 757 758function brave_load_popup(popupID, popupData, triggerType='load'){ 759 var selectedPopup = document.getElementById('brave_popup_'+popupID); 760 var popupLoadStatus = selectedPopup ? selectedPopup.dataset.loaded : 'false'; 761 762 if(popupLoadStatus === 'false'){ 763 //LOAD ASSETS 764 //-------------------- 765 //Load Video Scripts 766 if(popupData.hasYoutube){ 767 var YTtag = document.createElement('script'); YTtag.src = "https://www.youtube.com/iframe_api"; 768 var PageFirstScript_YT = document.getElementsByTagName('script')[0]; PageFirstScript_YT.parentNode.insertBefore(YTtag, PageFirstScript_YT); 769 } 770 if(popupData.hasVimeo){ 771 var VimTag = document.createElement('script'); VimTag.src = "https://player.vimeo.com/api/player.js"; 772 var PageFirstScript_Vim = document.getElementsByTagName('script')[0]; PageFirstScript_Vim.parentNode.insertBefore(VimTag, PageFirstScript_Vim); 773 } 774 775 selectedPopup.dataset.loaded = true; 776 } 777 778 //Open Popup 779 //--------------------- 780 const step = popupData.forceLoad && popupData.forceStep? parseInt(popupData.forceStep, 10) - 1 : 0; 781 if(triggerType === 'exit' || triggerType === 'scroll'){ 782 var triggerFulFilled = document.getElementById('brave_popup_'+popupID).dataset.triggerfulfilled; 783 if(!triggerFulFilled){ 784 document.getElementById('brave_popup_'+popupID).dataset.triggerfulfilled = true; 785 brave_open_popup(popupID, step); 786 } 787 }else{ 788 brave_open_popup(popupID, step); 789 } 790 791} 792 793 794function brave_open_popup(popupID, step=0){ 795 var popupData = brave_popup_data[popupID]; 796 var selectedPopupStep = document.querySelector('#brave_popup_'+popupID+'__step__'+step+' .brave_popup__step__'+brave_currentDevice) 797 var noMobileContent = selectedPopupStep && selectedPopupStep.dataset.nomobilecontent === 'true' ? true : false; 798 var currentDevice = noMobileContent ? 'desktop' : brave_currentDevice; 799 var selectedPopupStep = document.querySelector('#brave_popup_'+popupID+'__step__'+step+' .brave_popup__step__'+currentDevice); 800 var popupStepOpen = selectedPopupStep ? selectedPopupStep.dataset.open : 'false'; 801 var stickyBar = selectedPopupStep && selectedPopupStep.dataset.layout === 'float' && selectedPopupStep.dataset.position === 'top_center' ? true : false; 802 803 console.log('Opening ', popupID, step, popupStepOpen, stickyBar, noMobileContent, currentDevice); 804 //Send Ajax View Stat Data 805 if(window.location.href.includes('brave_popup') === false ){ 806 var viewData = { popupID: popupID, security: bravepop_global.security, action: 'bravepop_ajax_popup_viewed' }; 807 brave_ajax_send(bravepop_global.ajaxURL, viewData, function(status, sentData){ 808 // console.log('Popup View Updated: ', status, JSON.parse(sentData)); 809 }); 810 } 811 //Set Popup Viewed Cookie 812 var currentPopupStat = localStorage.getItem('brave_popup_'+popupID+'_viewed'); 813 localStorage.setItem('brave_popup_'+popupID+'_viewed', currentPopupStat ? parseInt(currentPopupStat, 10) + 1 : 1); 814 var popupRepeat =popupData.settings && popupData.settings.frequency && popupData.settings.frequency.repeat 815 var popupRepeatCountType = popupData.settings && popupData.settings.frequency && popupData.settings.frequency.repeatCountType || 'lifetime'; 816 if(popupRepeat && popupRepeatCountType !== 'lifetime'){ 817 var theViewStat = localStorage.getItem('brave_popup_'+popupID+'_view_stat'); theViewStat = theViewStat ? JSON.parse(theViewStat) : []; 818 theViewStat.push(new Date().getTime()); 819 localStorage.setItem('brave_popup_'+popupID+'_view_stat', JSON.stringify(theViewStat)); 820 } 821 822 if(popupStepOpen !== 'false'){ return } 823 if(!popupData){ return } 824 825 //Stickybar - Add html top margin 826 if(stickyBar){ 827 //console.log('Apply Sticky Margin'); 828 var popupHeight = selectedPopupStep.dataset.height; 829 document.documentElement.style.setProperty('margin-top', popupHeight+'px', 'important'); 830 } 831 832 //LazyLoad Images 833 var allImages = selectedPopupStep.querySelectorAll('img'); 834 for (var i = 0; i < allImages.length; i++) { 835 if(allImages[i].dataset.lazy){ 836 allImages[i].src = allImages[i].dataset.lazy; 837 } 838 } 839 840 if(popupData.videoData && popupData.videoData[step] && popupData.videoData[step][currentDevice]){ 841 //console.log('HAS VIDEO!!!!!!!!!!!', popupData.videoData[step][currentDevice]); 842 var videoObj = popupData.videoData[step][currentDevice]; 843 var videoType = videoObj.videoType ? videoObj.videoType : 'youtube'; 844 var videoURL = videoObj.videoUrl ? videoObj.videoUrl : 'youtube'; 845 var videoTracking = videoObj.action && videoObj.action.track && videoObj.action.trackData ? videoObj.action.trackData : null; 846 var videoSettings = {id: videoObj.id, autoplay: videoObj.autoplay || false, controls: videoObj.controls || false, mute: videoObj.mute || false, tracking: videoTracking } 847 brave_load_video(videoType, videoURL, videoSettings); 848 } 849
850 var hasAnimation = popupData.hasAnimation ? popupData.hasAnimation : false; 851 var advancedAnimation = popupData.advancedAnimation ? popupData.advancedAnimation : false; 852 var hasContAnim = popupData.hasContAnim ? popupData.hasContAnim : false; 853 var animationData = popupData.animationData ? popupData.animationData : {}; 854 var selectedStep = document.getElementById('brave_popup_'+popupID+'__step__'+step); 855 if(selectedStep){ 856 var allSteps = document.querySelectorAll('#brave_popup_'+popupID+' .brave_popup__step_wrap'); 857 if(allSteps){ 858 allSteps.forEach(function(popStep, index){ 859 popStep.classList.remove('brave_popup__step_wrap--show'); 860 }); 861 } 862 var braveOpenEvent = new CustomEvent('brave_popup_open', { detail: {popupId: parseInt(popupID, 10), step: step} }); 863 document.dispatchEvent(braveOpenEvent); 864 865 //Open Animation 866 if(!advancedAnimation){ 867 brave_open_animation(popupID, step, currentDevice); 868 } 869 870 //Advanced Animation 871 if(advancedAnimation && hasAnimation && animationData){ 872 selectedStep.classList.add('brave_popup__step_wrap--show'); 873 brave_animate_popup(animationData, popupID, step, 'load'); 874 } 875 //Continious Animation 876 if(hasContAnim && animationData && animationData[step][currentDevice] && animationData[step][currentDevice].elements){ 877 var initialDelay = (animationData[step][currentDevice].totalDuration || 0) + 1200; 878 animationData[step][currentDevice].elements.forEach(function(element){ 879 //console.log(element); 880 881 if(element && element.animation && element.animation.continious){ 882 //console.log(element.id,element.animation.continious); 883 var theElement = element.id === 'popup' ? document.querySelector('#brave_popup_'+popupID+'__step__'+step+' .brave_popup__step__inner .brave_popupSections__wrap') : document.getElementById('brave_element-'+element.id); 884 var elementID = element.id === 'popup' ? popupID : element.id; 885 var contAnimType = element.animation.continious.preset || 'none'; 886 var contAnimDuration = element.animation.continious.duration || 500; 887 var contAnimDelay = element.animation.continious.delay || 0; 888 if(theElement){ 889 setTimeout(() => { 890 theElement.classList.add('brave_element-'+elementID+'_contAnim'); 891 if(contAnimDelay > 0){ 892 setInterval(function() { 893 theElement.classList.add('brave_element-'+elementID+'_contAnim'); 894 setTimeout(function() { 895 theElement.classList.remove('brave_element-'+elementID+'_contAnim'); 896 }, contAnimDuration); 897 }, ((contAnimDelay > contAnimDuration) ? contAnimDelay : contAnimDuration + contAnimDelay)) 898 } 899 }, initialDelay); 900 } 901 } 902 903 }) 904 905 } 906 907 } 908 //Show Vertical Scrollbar if Necessary 909 setTimeout(() => { 910 var currentPopupDimension = selectedPopupStep.querySelector('.brave_popup__step__inner').getBoundingClientRect(); 911 if((window.innerHeight < currentPopupDimension.height) && selectedPopupStep.classList.contains('brave_popup__step--boxed') && selectedPopupStep.classList.contains('position_center')){ 912 selectedPopupStep.classList.add('brave_popup_exceeds_windowHeight'); 913 selectedPopupStep.classList.add('brave_popup_show_scrollbar'); 914 //document.body.classList.add('brave_HideBodyScroll-'+popupID); 915 } 916 }, 100); 917 918 919 //Popup AutoClose 920 if(popupData.close[0] && popupData.close[0][currentDevice] && popupData.close[0][currentDevice].autoClose && popupData.close[0][currentDevice].autoCloseDuration){ 921 setTimeout(() => { 922 brave_close_popup(popupID, step) 923 }, parseInt(popupData.close[0][currentDevice].autoCloseDuration) * 1000); 924 } 925 926 //Change the Popup Step open status 927 selectedPopupStep.dataset.open = true; 928 brave_popup_data[popupID].opened = new Date().getTime(); 929 //console.log('Goal Data!!!', popupData.settings); 930 //Complete Step Open Goal 931 if((popupData.settings && !popupData.settings.goalAction) || (popupData.settings && popupData.settings.goalAction && popupData.settings.goalAction.type && popupData.settings.goalAction.type==='step' && popupData.settings.goalAction.step !== undefined )){ 932 //console.log('Goal Step!!!', popupData.settings); 933 934 var goalStep = popupData.settings.goalAction && popupData.settings.goalAction.step ? popupData.settings.goalAction.step.toString().split(',') :['0']; 935 if(goalStep.includes(step.toString()) ){ 936 brave_complete_goal(popupID, 'view'); 937 } 938 } 939 940 //If Code element is set to goal, attach submit event listener to complete goal 941 var allCodeElmGoals = document.querySelectorAll('.brave_element__code--goaled form'); 942 if(allCodeElmGoals.length > 0){ 943 for (var i = 0; i < allCodeElmGoals.length; ++i) { 944 allCodeElmGoals[i].addEventListener('submit', function () { brave_complete_goal(popupID, 'form'); }) 945 } 946 } 947 948 949} 950 951function brave_open_animation(popupID, step, currentDevice){ 952 var totalDuration = brave_popup_data[popupID].animationData[step][currentDevice].totalDuration; 953 var openAnimData = brave_popup_data[popupID].animationData[step][currentDevice].elements ? brave_popup_data[popupID].animationData[step][currentDevice].elements : [];
954 var hasAnimation = brave_popup_data[popupID].hasAnimation; 955 var selectedStep = document.querySelector('#brave_popup_'+popupID+'__step__'+step); 956 957 //console.log(popupID, step, currentDevice, openAnimData, selectedStep); 958 959 var brave_animateElement = function(elementID, selectedStep, elementDom, step, animType) { 960 selectedStep.classList.add('brave_popup__step_wrap--show'); 961 if(animType === 'text'){ 962 var selected_text_element = document.querySelector('#brave_element-'+elementID+' .brave_element__text_inner'); 963 var selected_text_element_HTML = selected_text_element.innerHTML; 964 var selected_text_element_content = selected_text_element.textContent; 965 var newHTLArray = selected_text_element_content.toString().split(''); 966 var selected_text_element_clone = selected_text_element; 967 968 selected_text_element_clone.innerHTML =''; 969 for (var i=0;i<=(newHTLArray.length - 1);i++) { 970 (function(ind) { 971 setTimeout(function(){ 972 selected_text_element_clone.innerHTML = selected_text_element_clone.innerHTML+newHTLArray[ind]; 973 }, 1000 + (50 * ind)); 974 })(i); 975 } 976 setTimeout(function(){ 977 selected_text_element_clone.innerHTML = selected_text_element_HTML; 978 }, 1000 + (50 * (newHTLArray.length -1))); 979 }else{ 980 if(!elementDom.classList.contains('brave_element-'+elementID+'_'+step+'_openAnim')){ elementDom.classList.add('brave_element-'+elementID+'_'+step+'_openAnim'); } 981 } 982 } 983 984 if(hasAnimation && openAnimData.length > 0){ 985 selectedStep.classList.add('brave_popup__step_wrap--show'); 986 openAnimData.forEach( function(element){ 987 if(element.animation && element.animation.load && element.animation.load.preset){ 988 var animType = element.animation.load.preset; 989 var animDuration = element.animation.load.duration; 990 var animDelay = element.animation.load.delay || 0; 991 var elementID = element.id === 'popup' ? popupID : element.id; 992 var elementDom = element.id === 'popup' ? selectedStep.querySelector('.brave_popup__step__'+currentDevice+' .brave_popupSections__wrap') : selectedStep.querySelector('.brave_popup__step__'+currentDevice+' #brave_element-'+element.id); 993 elementDom.style.opacity = 0; 994 selectedStep.classList.remove('brave_popup__step_wrap--show'); 995 if(animDelay){ 996 // setTimeout(function(){ brave_animateElement(elementID, selectedStep, elementDom, step, animType); }, animDelay); 997 brave_animateElement(elementID, selectedStep, elementDom, step, animType); 998 }else{ 999 brave_animateElement(elementID, selectedStep, elementDom, step, animType); 1000 } 1001 1002 setTimeout(() => { elementDom.style.opacity = ''; }, animDelay+ animDuration - 100); 1003 setTimeout(function(){ 1004 elementDom.classList.remove('brave_element-'+elementID+'_'+step+'_openAnim'); 1005 }, animDelay+ animDuration + 500); 1006 } 1007 }) 1008 1009 }else{ 1010 selectedStep.classList.add('brave_popup__step_wrap--show'); 1011 } 1012 1013} 1014 1015function brave_close_popup(popupID, step=0, gotoStep=false){ 1016 var selectedStep = document.getElementById('brave_popup_'+popupID+'__step__'+step); 1017 var selectedPopupStep = selectedStep.querySelector('.brave_popup__step__'+brave_currentDevice); 1018 var noMobileContent = selectedPopupStep.dataset.nomobilecontent === 'true' ? true : false; 1019 var currentDevice = noMobileContent ? 'desktop' : brave_currentDevice; 1020 1021 if(selectedStep){ 1022 var exitAnimation = ''; 1023 var currentPopupCloseStat = localStorage.getItem('brave_popup_'+popupID+'_closed') ? JSON.parse(localStorage.getItem('brave_popup_'+popupID+'_closed')) : {}; 1024 var newCloseStat = {closed: currentPopupCloseStat.closed ? currentPopupCloseStat.closed + 1 : 1, closeTime: new Date().getTime()} 1025 localStorage.setItem('brave_popup_'+popupID+'_closed', JSON.stringify(newCloseStat)); 1026 //Close Animation 1027 var exitAnimation = selectedStep.querySelector('.brave_popup__step__'+currentDevice).dataset.exitanimtype || ''; 1028 var exitAnimationDuration = selectedStep.dataset.exitanimlength ? parseFloat(selectedStep.dataset.exitanimlength, 10) : 0.5; 1029 1030 //Set the Popup Open status to False 1031 var selectedPopupStep = selectedStep.querySelector('.brave_popup__step__'+currentDevice); 1032 selectedPopupStep.dataset.open = 'false'; 1033 1034 //Stop All Videos 1035 if(brave_popup_videos && Object.keys(brave_popup_videos).length > 0){
1036 Object.keys(brave_popup_videos).forEach(function(playerID){ 1037 if(playerID.includes('youtube') && brave_popup_videos[playerID]){ brave_popup_videos[playerID].stopVideo(); } 1038 if(playerID.includes('vimeo') && brave_popup_videos[playerID]){ brave_popup_videos[playerID].pause(); } 1039 }); 1040 } 1041 1042 var braveCloseEvent = new CustomEvent('brave_popup_close', { detail: {popupId: parseInt(popupID, 10), step: step} }); 1043 document.dispatchEvent(braveCloseEvent); 1044 1045 //Play Exit Animation 1046 if(exitAnimation){ 1047 selectedStep.querySelector('.brave_popupSections__wrap').classList.add('brave_element-'+popupID+'_'+step+'_exitAnim'); 1048 setTimeout(() => { selectedStep.classList.remove('brave_popup__step_wrap--show');}, (exitAnimationDuration * 1000)); 1049 setTimeout(() => { selectedStep.querySelector('.brave_popupSections__wrap').classList.remove('brave_element-'+popupID+'_'+step+'_exitAnim'); }, (exitAnimationDuration * 1000)+500); 1050 if(selectedStep.querySelector('.brave_popup__step__'+currentDevice+' .brave_popup__step__overlay')){ 1051 setTimeout(() => { 1052 selectedStep.querySelector('.brave_popup__step__'+currentDevice+' .brave_popup__step__overlay').classList.add('brave_popup__step__overlay--hide'); 1053 }, (exitAnimationDuration > 0.3 ? ((exitAnimationDuration * 1000) - 200) : 200)); 1054 setTimeout(() => { selectedStep.querySelector('.brave_popup__step__'+currentDevice+' .brave_popup__step__overlay').classList.remove('brave_popup__step__overlay--hide'); }, (exitAnimationDuration * 1000)+500); 1055 } 1056 }else{ 1057 selectedStep.classList.add('brave_popup__step_wrap--hide'); 1058 setTimeout(() => { selectedStep.classList.remove('brave_popup__step_wrap--show');}, 500); 1059 setTimeout(() => { selectedStep.classList.remove('brave_popup__step_wrap--hide');}, 800); 1060 } 1061 1062 //If has gotoStep Command, go there 1063 if(gotoStep !== false && gotoStep >=0){ 1064 //First set the Taget Step's Open status to false 1065 var targetStep = document.getElementById('brave_popup_'+popupID+'__step__'+gotoStep); 1066 targetStep.querySelector('.brave_popup__step__desktop').dataset.open = false; 1067 targetStep.querySelector('.brave_popup__step__mobile').dataset.open = false; 1068 //Then Open the Popup 1069 brave_open_popup(popupID, gotoStep); 1070 } 1071 var stickyBar = selectedPopupStep.dataset.layout === 'float' && selectedPopupStep.dataset.position === 'top_center' ? true : false; 1072 if(stickyBar){ 1073 var newHeight = document.querySelector('body.admin-bar') ? '32px' : '0px'; 1074 document.documentElement.style.setProperty('margin-top', newHeight, 'important'); 1075 } 1076 1077 } 1078} 1079 1080function brave_send_ga_event(eventCategory, eventAction, eventLabel){ 1081 //console.log('ga Event: ', eventCategory, eventAction, eventLabel); 1082 if ("ga" in window && eventCategory && eventAction) { 1083 var tracker = ga.getAll()[0]; 1084 if (tracker){ 1085 tracker.send('event', eventCategory, eventAction, eventLabel); 1086 } 1087 } 1088} 1089 1090 1091function brave_load_video(videoType, videoURL, videoSettings){ 1092 //console.log(videoType, videoURL, videoSettings, videoSettings.tracking); 1093 1094 var elmID = videoSettings.id.replace(/[^a-zA-Z0-9]+/g, ''); 1095 if(videoType ==='custom'){ 1096 brave_popup_videos['video_'+videoType+elmID] = document.getElementById('brave_video_custom_'+videoSettings.id); 1097 if(videoSettings.autoplay){ 1098 brave_play_video(videoSettings.id, 'custom', videoSettings.tracking); 1099 } 1100 } 1101 1102 if(videoType ==='youtube'){ 1103 var youtube_regex = new RegExp(/^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\\&vi?=)([^#\\&\\?]*).*/); 1104 var parsed = videoURL.match(youtube_regex); 1105 var videoID = parsed && parsed[2] ? parsed[2]:null; 1106 1107 if(!brave_popup_videos['video_'+videoType+elmID]){ 1108 setTimeout(function() { 1109 brave_popup_videos['video_'+videoType+elmID] = new YT.Player('brave_video_iframe'+elmID, { 1110 videoId: videoID, 1111 playerVars: { 'autoplay': false, 'controls': videoSettings.controls ? videoSettings.controls : true, mute: videoSettings.mute ? videoSettings.mute : false }, 1112 events: { 1113 'onReady': function(){ 1114 return videoSettings.autoplay && brave_play_video(videoSettings.id, 'youtube', videoSettings.tracking) 1115 } 1116 } 1117 }); 1118 }, 1000); 1119 }else{ 1120 if(videoSettings.autoplay) { brave_play_video(videoSettings.id, 'youtube', videoSettings.tracking); } 1121 } 1122 } 1123 1124 if(videoType ==='vimeo'){ 1125 var vimeo_regex = new RegExp(/https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/); 1126 var parsed = videoURL.match(vimeo_regex); 1127 var videoID = parsed && parsed[3] ? parsed[3] : null; 1128 1129 if(!brave_popup_videos['video_'+videoType+elmID]){ 1130 setTimeout(function() { 1131 brave_popup_videos['video_'+videoType+elmID] = new Vimeo.Player('brave_video_iframe'+elmID, { id: videoID, background: videoSettings.controls ===false ? true : false }); 1132 setTimeout(() => { 1133 if(videoSettings.mute){ 1134 brave_popup_videos['video_'+videoType+elmID].setVolume(0); 1135 } 1136 if(videoSettings.autoplay){ 1137 brave_play_video(videoSettings.id, 'vimeo', videoSettings.tracking); 1138 } 1139 }, 2000); 1140 }, 1000); 1141 }else{ 1142 if(videoSettings.autoplay) { brave_play_video(videoSettings.id, 'youtube', videoSettings.tracking); } 1143 } 1144 1145 } 1146 1147} 1148 1149function brave_play_video(elmentID, videoType, track=null, inline=false){ 1150 //console.log('brave_play_video', elmentID, videoType, track ); 1151 var elmID = elmentID.replace(/[^a-zA-Z0-9]+/g, ''); 1152 if(!brave_popup_videos['video_'+videoType+elmID]){ return; } 1153 1154 if(document.getElementById("brave_element-"+elmentID)){ 1155 document.getElementById("brave_element-"+elmentID).classList.add('brave_element--video-show'); 1156 } 1157 1158 //Custom Video Playback 1159 if(videoType === 'custom' ){ 1160 brave_popup_videos['video_'+videoType+elmID].muted = true; //Video doesnt autoplay if not muted 1161 brave_popup_videos['video_'+videoType+elmID].play(); 1162 } 1163 //Youtube and Vimeo Playback 1164 if(videoType === 'youtube' || videoType === 'vimeo'){ 1165 if(videoType === 'youtube' && brave_popup_videos['video_'+videoType+elmID]){ brave_popup_videos['video_'+videoType+elmID].playVideo(); } 1166 if(videoType === 'vimeo' && brave_popup_videos['video_'+videoType+elmID]){ brave_popup_videos['video_'+videoType+elmID].play().then(); } 1167 } 1168 1169 //Track Video Playback 1170 if(inline && !track){ 1171 var playButton = document.getElementById('brave_play_video-'+elmentID) 1172 if(playButton){ 1173 var eventCategory = playButton.dataset.trackcategory || ''; 1174 var eventAction = playButton.dataset.trackcategory || ''; 1175 var eventLabel = playButton.dataset.tracklabel || ''; 1176 track = {eventCategory: eventCategory, eventAction:eventAction, eventLabel: eventLabel} 1177 } 1178 } 1179 1180 if(track && track.eventCategory && track.eventAction){ 1181 brave_send_ga_event(track.eventCategory, track.eventAction, track.eventLabel || ''); 1182 } 1183 1184} 1185 1186function brave_complete_goal(popupID, goalType='view'){ 1187 if(window.location.href.includes('brave_popup') === false ){ 1188 var goalData = { 1189 popupID: popupID, 1190 pageURL: window.location, 1191 security: bravepop_global.security, 1192 goalType: goalType, 1193 viewTime: brave_popup_data[popupID].opened, 1194 goalTime: new Date().getTime(), 1195 goalUTCTime: new Date().toUTCString(), 1196 device: brave_currentDevice, 1197 action: 'bravepop_ajax_popup_complete_goal' 1198 }; 1199 1200 brave_ajax_send(bravepop_global.ajaxURL, goalData, function(status, sentData){ console.log('Goal Complete!!!!!!', sentData); }); 1201 localStorage.setItem('brave_popup_'+popupID+'_goal_complete', true); 1202 var braveGoalCompletEvent = new CustomEvent('brave_goal_complete', { detail: {popupId: parseInt(popupID, 10), goalType: goalType} }); 1203 document.dispatchEvent(braveGoalCompletEvent); 1204 if(brave_popup_data[popupID].settings && brave_popup_data[popupID].settings.notification && brave_popup_data[popupID].settings.notification.analyticsGoal){ 1205 setTimeout(() => { 1206 //console.log('##### Send Goal Event to GA!'); 1207 brave_send_ga_event('popup', 'goal', brave_popup_data[popupID].title+' ('+popupID+')' || popupID); 1208 }, 2000); 1209 } 1210 } 1211} 1212 1213function brave_load_fonts(fontArray){ 1214 if(fontArray.length > 0){ 1215 WebFontConfig = { 1216 google: { families: fontArray } 1217 }; 1218 (function() { 1219 if(!document.getElementById('bravePopu_webfontLoader')){ 1220 var wf = document.createElement('script'); 1221 wf.setAttribute("id", "bravePopu_webfontLoader"); 1222 wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +'://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js'; 1223 wf.type = 'text/javascript'; 1224 wf.async = 'true'; 1225 var s = document.getElementsByTagName('script')[0]; 1226 s.parentNode.insertBefore(wf, s); 1227 } 1228 })(); 1229 } 1230 //return fontArray; 1231};
1232 1233function brave_is_in_view(elem) { 1234 var bounding = elem.getBoundingClientRect(); 1235 return ( 1236 bounding.top >= 0 && 1237 bounding.left >= 0 && 1238 bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) && 1239 bounding.right <= (window.innerWidth || document.documentElement.clientWidth) 1240 ); 1241}; 1242 1243window.addEventListener( 'DOMContentLoaded', brave_after_page_load ); 1244function brave_after_page_load(){ 1245 var allBraveFonts = [] 1246 Object.keys(brave_popup_data).forEach((popID)=> { 1247 brave_popup_data[popID].fonts.forEach((fontName)=> { 1248 if(!allBraveFonts.includes(fontName)){ 1249 allBraveFonts.push(fontName); 1250 } 1251 }) 1252 }); 1253 brave_load_fonts(allBraveFonts); 1254} 1255 1256function brave_responsiveness(popupID, popupData){ 1257 //If a step has no Mobile Content is set, make the Desktop Content mobile friendly and display that instead 1258 var stepsWithNoMobile = document.querySelectorAll('.brave_popup__step--mobile-noContent'); 1259 if(brave_isTab){ stepsWithNoMobile = document.querySelectorAll('.brave_popup__step_wrap'); } 1260 for (var i = 0; i < stepsWithNoMobile.length; i++) { 1261 var desktopStep = stepsWithNoMobile[i].querySelector('.brave_popup__step__desktop'); 1262 var popupLayout = desktopStep.dataset.layout; 1263 var popupPosition = popupLayout === 'landing' ? 'top_center' :desktopStep.dataset.position; 1264 var popupWidth = parseInt(desktopStep.dataset.width, 10); 1265 var popupHeight = parseInt(desktopStep.dataset.height, 10); 1266 var windowWidth = document.body.clientWidth; //window.innerWidth 1267 var windowHeight = window.innerHeight; 1268 1269 if(brave_currentDevice === 'mobile' || brave_isTab){ 1270 if((windowWidth < popupWidth) && (popupLayout == 'boxed' || popupLayout == 'landing' ) ){ 1271 var scale = desktopStep ? windowWidth/ desktopStep.dataset.width : 0; 1272 var tansformOrigin = popupPosition.includes('top') ? 'top' : 'center'; 1273 desktopStep.querySelector('.brave_popup__step__inner').style.transform = 'scale('+((scale*95)/100)+')'; 1274 desktopStep.querySelector('.brave_popup__step__inner').style.transformOrigin = ((scale*95)/2)+'px '+tansformOrigin; 1275 if(windowWidth < popupWidth && windowHeight < popupHeight){ 1276 desktopStep.querySelector('.brave_popup__step__inner').style.transformOrigin = 'left top'; 1277 desktopStep.querySelector('.brave_popup__step__inner').style.marginTop = 0; 1278 desktopStep.querySelector('.brave_popup__step__inner').style.top = 0; 1279 } 1280 if(popupPosition.includes('center') ){ 1281 var widthRemainder = windowWidth - (popupWidth * (scale*95)/100) ; 1282 var heightRemainder = windowHeight - (popupHeight * (scale*95)/100) ; 1283 desktopStep.querySelector('.brave_popup__step__inner').style.left = widthRemainder > 0 ? (widthRemainder/2)+'px' : '0'; 1284 //if(popupPosition === 'center'){ desktopStep.querySelector('.brave_popup__step__inner').style.top = heightRemainder > 0 ? (heightRemainder/2)+'px' : '0'; } 1285 } 1286 // if(windowHeight < (popupHeight * (scale*95)/100) ){ 1287 // console.log('Window Height vs Popup Height', windowHeight < (popupHeight * (scale*95)/100), windowHeight , (popupHeight * (scale*95)/100) ); 1288 // } 1289 } 1290 if(brave_currentDevice === 'mobile' && ((290 < popupWidth) || windowHeight < popupHeight) && (popupLayout == 'boxed' ) && (popupPosition === 'bottom_right') ){ 1291 desktopStep.querySelector('.brave_popup__step__inner').style.transform = 'scale(0.8)'; 1292 desktopStep.querySelector('.brave_popup__step__inner').style.transformOrigin = '100% bottom'; 1293 } 1294 1295 } 1296 } 1297 //Embedded Popup Resonsiveness 1298 var selectedPopup = document.getElementById('brave_popup_'+popupID); 1299 if(brave_popup_data[popupID] && brave_popup_data[popupID].hasDesktopEmbed){ selectedPopup.classList.add('brave_popup--embedded'); selectedPopup.dataset.embedded ='true'} 1300 if(brave_isMobile && brave_popup_data[popupID] && brave_popup_data[popupID].hasMobileEmbed){ selectedPopup.classList.add('brave_popup--embedded'); selectedPopup.dataset.embedded ='true'} 1301 var theEmbbeddedPopup = document.getElementById('bravepopup_embedded_'+popupID); 1302 if(theEmbbeddedPopup && selectedPopup.dataset.embedded === 'true'){ 1303 var parentElm = theEmbbeddedPopup.parentNode; 1304 //console.log('EMBEDDED POPUP!!!!', parentElm); 1305 theEmbbeddedPopup.appendChild( document.getElementById('brave_popup_'+popupID)); 1306 1307 //If Embedded, make the Popup Responsive on desktop 1308 var allEmbeddedSteps = document.querySelectorAll('.brave_popup__step__desktop.brave_popup__step--embedded'); 1309 for (var i = 0; i < allEmbeddedSteps.length; i++) { 1310 var desktopStep = document.getElementById('brave_popup_'+popupID+'__step__'+i); 1311 //var embededStepNoMobile = desktopStep.classList.contains('brave_popup__step--mobile-noContent') ? true : false; 1312 if((!brave_isMobile || (brave_isMobile)) && desktopStep){ 1313 var popupWidth = parseInt(allEmbeddedSteps[i].dataset.width, 10); 1314 var popupHeight = parseInt(allEmbeddedSteps[i].dataset.height, 10); 1315 var popup_parent_width = parentElm.clientWidth; 1316 1317 if((popup_parent_width < popupWidth) ){ 1318 var scale = Math.min( popup_parent_width / allEmbeddedSteps[i].dataset.width); 1319 desktopStep.querySelector('.brave_popup__step__inner').style.transform = 'scale('+((scale*96)/100)+')'; 1320 desktopStep.querySelector('.brave_popup__step__inner').style.transformOrigin = ((scale*96)/2)+'px center'; 1321 desktopStep.querySelector('.brave_popup__step__inner').parentNode.classList.add('brave_popup__step__inner--scaled'); 1322 } 1323 } 1324 } 1325 1326 } 1327} 1328 1329window.addEventListener( 'resize', brave_responsiveness );
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.