1/** 2 * Javascript: RSVP Events Calendar 3 * @version 2.6.5 4 */ 5jQuery(document).ready(function($){ 6 7 init(); 8 9 var JDATA = {}; 10 var submit_open = false; 11 12 // INITIATE script 13 function init(){ 14 $('body').on('click','.evoRS_status_option_selection span',function(){ 15 show_rsvp_form( $(this), $(this).attr('data-val'), 'submit'); 16 }); 17 } 18 19 // load JSON DATA for event's rsvp into local object 20 function load_json_to_local(O){ 21 JDATA = O.closest('.evo_metarow_rsvp').find('.evors_jdata').data('j'); 22 } 23 24 // RSVP form interactions 25 // change RSVP status within the form 26 $('body').on('click', 'span.evors_choices', function(){ 27 OBJ = $(this); 28 29 VAL = OBJ.attr('data-val'); 30 SUBMISSION_FORM = OBJ.closest('form.evors_submission_form'); 31 SUBMISSION_FORM.attr('class','evors_submission_form rsvp_'+VAL); 32 OBJ.siblings().removeClass('set'); 33 OBJ.addClass('set'); 34 35 OBJ.siblings('input').val( VAL ); 36 37 }); 38 // close RSVP form from incard close button 39 $('body').on('click','.evors_incard_close',function(){ 40 PAR = $(this).parent(); 41 PAR.slideUp(function(){ 42 PAR.html(''); 43 }); 44 // reset any selected RSVP choices 45 $(this).closest('.evo_metarow_rsvp').find('.evors_choices').removeClass('set'); 46 }); 47 48 // checkbox field 49 $('body').on('click', '.evors_checkbox_field', function(){ 50 O = $(this); 51 if(O.hasClass('checked')){ 52 O.removeClass('checked'); 53 O.siblings('input').val('no'); 54 }else{ 55 O.addClass('checked'); 56 O.siblings('input').val('yes'); 57 } 58 }); 59 60 // RSVP from eventtop 61 $('body').on('click', '.evors_eventtop_rsvp span', function(event){ 62 event.preventDefault(); 63 event.stopPropagation(); 64 65 load_json_to_local( $(this) ); 66 67 68 var obj = $(this), 69 rsvp = obj.parent(), 70 rsvp_section = rsvp.parent(), 71 ajaxdataa = {}; 72 73 ajaxdataa['rsvp']= obj.data('val'); 74 ajaxdataa['lang']= rsvp.data('lang'); 75 ajaxdataa['uid']= rsvp.data('uid'); 76 ajaxdataa['updates']= 'no'; 77 ajaxdataa['action']='the_ajax_evors_a7'; 78 ajaxdataa['repeat_interval']=rsvp.data('ri'); 79 ajaxdataa['e_id']= rsvp.data('eid'); 80 81 $.ajax({ 82 beforeSend: function(){ rsvp.addClass('loading'); }, 83 type: 'POST', 84 url:evors_ajax_script.ajaxurl, 85 data: ajaxdataa, 86 dataType:'json', 87 success:function(data){ 88 if(data.status=='0'){ 89 $('body').trigger('evors_new_rsvp_eventtop'); 90 rsvp.html(data.message).addClass('success'); 91 rsvp_section.find('.evors_eventtop_section_data').replaceWith(data.content); 92 }else{ 93 rsvp.append('<span class="error">'+data.message+'</span>'); 94 } 95 },complete:function(){ 96 rsvp.removeClass('loading'); 97 } 98 }); 99 }); 100 101 // RSVP form submissions & update existing 102 $('body').on('click', '.evors_submit_rsvpform_btn', function(){ 103 104 var obj = O = $(this), 105 ajaxdataa = { }, 106 form = obj.closest('form.evors_submission_form'), 107 FORMPAR = form.parent(), 108 formSection = form.parent(), 109 error = 0, 110 formType = form.find('input[name="formtype"]').val(); 111 112 113 // reset form error messages 114 rsvp_hide_notifications(); 115 FORMPAR.parent().removeClass('error'); 116 117 // validation 118 // run through each rsvp field 119 form.find('.input').each(function(index){ 120 iO = $(this); 121 122 $(this).removeClass('err'); 123 124 // required checkbox field 125 if( iO.hasClass('req') && iO.hasClass('checkbox') && iO.val()=='no'){ 126 error = 1; 127 iO.siblings('em').addClass('err'); 128 } 129 130 // check required fields filled 131 if( iO.hasClass('req') && iO.val()=='' && iO.is(":visible")){ 132 error = 1; 133 iO.addClass('err'); 134 } 135 136 if( $(this).val() == '' ) return true; 137 //ajaxdataa[ $(this).attr('name') ] = encodeURIComponent( $(this).val() ); 138 }); 139 140 // validate email 141 if(error==0){ 142 var thisemail = form.find('input[name=email]'); 143 if(!is_email(thisemail.val().trim() )){ 144 thisemail.addClass('err'); 145 rsvp_error('err2','','', form); // invalid email address 146 error = 2; 147 } 148 } 149 // capacity check 150 if(error==0){ 151 if(formType=='update'){ 152 pastVal = parseInt(form.find('input[name=count]').attr('data-pastval')); 153 newVal = parseInt(form.find('input[name=count]').val()); 154 compareCount = (pastVal>newVal)? 0: newVal-pastVal; 155 }else{ 156 compareCount = parseInt(form.find('input[name=count]').val()); 157 } 158 159 if(form.find('.rsvp_status span.set').data('val')!='n' 160 && JDATA.cap 161 && JDATA.cap !='na' 162 && compareCount > parseInt(JDATA.cap) 163 ){ 164 error=4; 165 form.find('input[name=count]').addClass('err'); 166 rsvp_error('err9','','',form); 167 } 168 // max count limit 169 if( JDATA.precap!='na' && 170 (parseInt(form.find('input[name=count]').val()) > parseInt(JDATA.precap) ) 171 ){ 172 error=4; 173 form.find('input[name=count]').addClass('err'); 174 rsvp_error('err10','','',form); 175 } 176 } 177 // validate human 178 if(error==0){ 179 var human = rsvp_validate_human( form.find('input.captcha') ); 180 if(!human){ 181 error=3; 182 rsvp_error('err6','','',form); 183 } 184 } 185 186 // if form type is wl-remove 187 if(formType == 'wl-remove') error = 0; 188 189 if(error==0){ 190 var updates = form.find('.updates input').attr('checked'); 191 updates = (updates=='checked')? 'yes':'no'; 192
193 ajaxdataa['action']='the_ajax_evors'; 194 form.ajaxSubmit({ 195 //$.ajax({ 196 beforeSend: function(){ form.parent().addClass('loading'); }, 197 type: 'POST',url:evors_ajax_script.ajaxurl,data: ajaxdataa,dataType:'json', 198 success:function(data){ 199 if(data.status=='0'){ 200 201 202 FORMPAR.parent().html(data.message); 203 EVENTCARD = $('body').find('.event_'+data.e_id+'_'+ data.ri ); 204 205 // if lightbox event 206 lb_eventcard = $('body').find('.evo_lightbox_body.event_'+ data.e_id+'_'+ data.ri); 207 208 // update event top data 209 if( 'data_content_eventtop' in data){ 210 // lightbox 211 if(lb_eventcard.find('.evors_eventtop_section_data').length>0){ 212 lb_eventcard.find('.evors_eventtop_section_data').replaceWith( data.data_content_eventtop ); 213 } 214 215 // calednar 216 if(EVENTCARD.find('.evors_eventtop_section_data').length>0){ 217 EVENTCARD.find('.evors_eventtop_section_data').replaceWith( data.data_content_eventtop ); 218 } 219 } 220 if('data_content_eventtop_your' in data){ 221 // lightbox 222 if(lb_eventcard.find('.evors_eventop_rsvped_data').length>0){ 223 lb_eventcard.find('.evors_eventop_rsvped_data').replaceWith( data.data_content_eventtop_your ); 224 } 225 // calendar 226 if(EVENTCARD.find('.evors_eventop_rsvped_data').length>0){ 227 EVENTCARD.find('.evors_eventop_rsvped_data').replaceWith( data.data_content_eventtop_your ); 228 } 229 } 230 231 // update Event Card 232 if(data.e_id){ 233 if(data.data_content_eventcard != ''){ 234 EVENTCARD.find('.evors_eventcard_content').html( data.data_content_eventcard); 235 lb_eventcard.find('.evors_eventcard_content').html( data.data_content_eventcard); 236 } 237 } 238 // update event manager stuff 239 if( $('body').find('#rsvp_event_'+data.e_id).length>0 && data.new_rsvp_text){ 240 STATUS = $('#rsvp_event_'+data.e_id).find('span.rsvpstatus'); 241 STATUS.html( data.new_rsvp_text); 242 STATUS.attr('class','rsvpstatus status_'+data.new_rsvp_text); 243 } 244 245 246 247 }else{ 248 var passedRsvppd = (data.status)? 'err'+data.status:'err7'; 249 rsvp_error(passedRsvppd, '', data.message,form); 250 } 251 },complete:function(){ form.parent().removeClass('loading'); } 252 }); 253 }else if(error==1){ rsvp_error('err','','',form); } 254 }); 255 256 // capacity check real-time 257 $('body').on('change','input.evors_rsvp_count',function(){ 258 O = $(this); 259 260 // reset 261 $('.evors_lightbox_body').removeClass('error'); 262 $(this).removeClass('err'); 263 rsvp_hide_notifications(); 264 265 CAP = JDATA.cap; 266 PERCAP = JDATA.precap; 267 FORM = O.closest('.evors_submission_form'); 268 269 VAL = parseInt(O.val()); 270 271 ERROR = false; 272 273 // check avialable space vs party size 274 if(VAL > parseInt(CAP) && CAP!= 'na'){ 275 $(this).addClass('err'); 276 rsvp_error('err9','','',FORM); 277 ERROR = true; 278 } 279 // check per each rsvp capacity vs party size 280 if(VAL > parseInt(PERCAP) && PERCAP!= 'na'){ 281 $(this).addClass('err'); 282 rsvp_error('err10','','',FORM); 283 ERROR = true; 284 } 285 286 if(!ERROR){ 287 // if valid capacity add additional guests 288 guestNames = O.closest('.evors_submission_form').find('.form_guest_names'); 289 if(VAL>1){ 290 291 maskField = '<input class="regular input" name="names[]" type="text">'; 292 inputHolder = guestNames.find('.form_guest_names_list'); 293 ExistInputCount = inputHolder.find('input').length; 294 295 // add or remove input fields 296 if( (VAL-1) > ExistInputCount){ // add 297 fieldsNeed = VAL-1-ExistInputCount; 298 appender =''; 299 for(x=0; x<fieldsNeed; x++){ 300 appender += maskField; 301 } 302 inputHolder.append(appender); 303 }else{ 304 fieldsNeed = VAL-2; 305 inputHolder.find('input').each(function(index){ 306 if(index> fieldsNeed) $(this).remove(); 307 }); 308 } 309 guestNames.show(); 310 }else{ 311 guestNames.hide(); 312 } 313 } 314 }); 315 316 // CHANGE RSVP 317 // change a RSVP 318 $("body").on('click','.evors_change_rsvp_trig',function(){ 319 OBJ = $(this); 320 PAR = OBJ.parent(); 321 show_rsvp_form(OBJ, '','update'); 322 }); 323 324 // from successful rsvped page 325 $('body').on('click','#call_change_rsvp_form',function(){ 326 OBJ = $(this); 327 PAR = OBJ.parent(); 328 show_rsvp_form(OBJ, '','update'); 329 }); 330 // From rsvp manager 331 $('.eventon_rsvp_rsvplist').on('click','.update_rsvp',function(){ 332 OBJ = $(this); 333 PAR = OBJ.parent(); 334 335 // load Json data 336 JDATA = OBJ.parent().siblings('.evors_jdata').data('j'); 337 console.log(JDATA); 338 339 show_rsvp_form(OBJ, '','update'); 340 }); 341 342 // Show RSVP lightbox form 343 function show_rsvp_form(OBJ, RSVP,formtype){ 344 var ajaxdataa = {}; 345 ajaxdataa['action']='evors_get_rsvp_form'; 346 347 ROW = OBJ.closest('.evo_metarow_rsvp'); 348 if(OBJ.closest('.evo_metarow_rsvp').length) load_json_to_local( OBJ); 349 350 if(JDATA){ 351 $.each(JDATA, function(index, val){ 352 ajaxdataa[index] = val; 353 }); 354 } 355 356 ajaxdataa['rsvp'] = RSVP; 357 ajaxdataa['formtype'] = formtype; 358 FORMNEST = OBJ.closest('.evors_forms').parent(); 359 360 $.ajax({
361 beforeSend: function(){ 362 loading(OBJ); 363 }, 364 url: evors_ajax_script.ajaxurl, 365 data: ajaxdataa, dataType:'json', type: 'POST', 366 success:function(data){ 367 if(data.status=='good'){ 368 // show form inside eventcard 369 if( ajaxdataa.incard =='yes'){ 370 ROW.find('.evors_incard_form') 371 .removeClass('error') 372 .html( data.content ) 373 .slideDown(); 374 }else{ 375 $('.evors_lightbox') 376 .find('.evo_lightbox_body') 377 .removeClass('error') 378 .html( data.content ); 379 $('.evors_lightbox.evo_lightbox').addClass('show'); 380 $('body').trigger('evolightbox_show'); 381 } 382 383 }else{ 384 // error notice *** 385 } 386 },complete:function(){ 387 completeloading(OBJ); 388 FORMNEST.closest('.evorow').removeClass('loading'); 389 } 390 }); 391 } 392 393 // during ajax eventcard loading 394 function loading(obj){ 395 obj.closest('.evorow').addClass('loading'); 396 obj.closest('p.rsvpmanager_event').addClass('loading'); 397 } 398 function completeloading(obj){ 399 obj.closest('.evorow').removeClass('loading'); 400 obj.closest('p.rsvpmanager_event').removeClass('loading'); 401 } 402 403 // Find RSVP 404 $('body').on('click','.evors_findrsvp_form_btn', function(){ 405 var obj = $(this); 406 var form = obj.closest('form.evors_findrsvp_form'); 407 FORM_PAR = form.closest('.evors_forms'); 408 var error = 0; 409 410 // run through each rsvp field 411 form.find('.input').each(function(index){ 412 // check required fields filled 413 if( $(this).hasClass('req') && $(this).val()=='' ){ 414 error = 1; 415 } 416 }); 417 if(error=='1'){ 418 rsvp_error('err','','',form); 419 }else{ 420 var ajaxdataa = {}; 421 ajaxdataa['action']='evors_find_rsvp_form'; 422 form.ajaxSubmit({ 423 beforeSend: function(){ FORM_PAR.addClass('loading'); }, 424 url: evors_ajax_script.ajaxurl, 425 data: ajaxdataa, dataType:'json', type: 'POST', 426 success:function(data){ 427 if(data.status=='good'){ 428 FORM_PAR.parent().html( data.content ); 429 FORM_PAR.parent().removeClass('error'); 430 }else{ 431 rsvp_error('err5','','',form); 432 } 433 },complete:function(){ FORM_PAR.removeClass('loading'); } 434 }); 435 } 436 }); 437 438 // hover over guests list icons 439 $('body').on('mouseover','.evors_whos_coming span.initials', function(){ 440 OBJ = $(this); 441 EM = OBJ.parent().find('em.tooltip'); 442 TEXT = OBJ.data('name'); 443 444 POS = OBJ.position(); 445 446 EM.css({'left':(POS.left+20), 'top':(POS.top-30)}).html(TEXT).show(); 447 448 }); 449 $('body').on('mouseout','.evors_whos_coming span', function(){ 450 OBJ = $(this); 451 EM = OBJ.parent().find('em.tooltip'); 452 EM.hide(); 453 }); 454 455 // Buddypress profile linking 456 $('body').on('click','.evors_whos_coming span',function(){ 457 LINK = $(this).data('link'); 458 459 if(LINK != 'na') 460 window.open(LINK, '_blank'); 461 }); 462 463 // action user event manager 464 // show rsvp stats for events 465 $('#evoau_event_manager').on('click','a.load_rsvp_stats',function(event){ 466 event.preventDefault(); 467 468 O = $(this); 469 470 MANAGER = $(this).closest('.evoau_manager'); 471 var data_arg = { 472 action: 'evors_ajax_get_auem_stats', 473 eid: O.data('eid'), 474 data: O.closest('.evoau_manager').find('.evoau_manager_json').data('js') 475 }; 476 $.ajax({
477 beforeSend: function(){ 478 MANAGER.find('.eventon_actionuser_eventslist').addClass('evoloading'); 479 }, 480 type: 'POST', 481 url:evors_ajax_script.ajaxurl, 482 data: data_arg, 483 dataType:'json', 484 success:function(data){ 485 $('body').trigger('evoau_show_eventdata',[MANAGER, data.html, true]); 486 },complete:function(){ 487 MANAGER.find('.eventon_actionuser_eventslist').removeClass('evoloading'); 488 } 489 }); 490 }); 491 492 // checkin guests 493 $('.evoau_manager_event').on('click','span.checkin',function(){ 494 var obj = $(this); 495 var PAR = obj.closest('.evorsau_attendee_list'); 496 497 if(!PAR.hasClass('checkable')) return false; 498 499 var status = obj.attr('data-status'); 500 501 status = (status=='' || status=='check-in')? 'checked':'check-in'; 502 503 var data_arg = { 504 action: 'the_ajax_evors_f4', 505 rsvp_id: obj.attr('data-id'), 506 status: status, 507 nonce: PAR.find('input#evors_nonce').val() 508 }; 509 $.ajax({ 510 beforeSend: function(){ 511 obj.html( obj.html()+'...'); 512 }, 513 type: 'POST', 514 url:evors_ajax_script.ajaxurl, 515 data: data_arg, 516 dataType:'json', 517 success:function(data){ 518 //alert(data); 519 obj.attr({'data-status':status}).html(data.new_status_lang).removeAttr('class').addClass(status+' checkin'); 520 } 521 }); 522 }); 523 524 // ADDONS 525 // waitlist 526 // Remove from waitlist 527 $('body').on('click','.evorsw_remove_wl',function(){ 528 529 FORM = $(this).closest('form'); 530 531 // update form values to remove from waitlist 532 FORM.find('input[name="formtype"]').val('wl-remove'); 533 534 // submit form 535 FORM.find('.evors_submit_rsvpform_btn').trigger('click'); 536 537 }); 538 539 // Supporting functions 540 // show error messages 541 function rsvp_error(code, type, message, O){ 542 FORM = O.closest('.evors_forms'); 543 F = FORM.find('form'); 544 545 if(message == '' || message === undefined){ 546 var C = FORM.find('.evors_msg_').data('j'); 547 var classN = (type== undefined || type=='error' || type == '')? 'err':type; 548 message = C.codes[code] 549 } 550 FORM.find('.notification').addClass(classN).show().find('p').html(message); 551 FORM.parent().addClass('error'); 552 F.addClass('error'); 553 } 554 555 // hide form messages 556 function rsvp_hide_notifications(){ 557 $('.evors_lightbox_body').find('.notification').hide(); 558 } 559 // validate humans 560 function rsvp_validate_human(field){ 561 if(field==undefined){ 562 return true; 563 }else{ 564 var numbers = ['11', '3', '6', '3', '8']; 565 if(numbers[field.attr('data-cal')] == field.val() ){ 566 return true; 567 }else{ return false;} 568 } 569 } 570 571 function is_email(email){ 572 var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 573 return regex.test(email); 574 } 575});
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.