1//AA Members JS 2jQuery(document).ready(function(){ 3 4 5 6 ///// Start Account Menu Hover Intent ////// 7 8 jQuery("#account-links > a#profile-header-link").hoverIntent({ 9 over: slideDownAccount, 10 timeout: 100, 11 out: slideUpAccount 12 }); 13 14 function slideDownAccount(){ 15 jQuery("#account-links ul#profile-dropdown-menu").fadeIn(); 16 } 17 18 function slideUpAccount(){ 19 //Don't need anything here but need to define something for jQuery 20 } 21 22 //When hovering over mega menu keep it visible 23 jQuery("#account-links ul#profile-dropdown-menu").mouseover(function () { 24 jQuery(this).stop(true, true).show(); 25 }); 26 27 //When leaving the mega menu fade it out 28 jQuery("#account-links ul#profile-dropdown-menu, #account-links > a#profile-header-link").mouseleave(function () { 29 jQuery("#account-links ul#profile-dropdown-menu").delay(200).fadeOut(); 30 }); 31 32 ///// End Account Menu Hover Intent ////// 33 34 35 36 37 //Append tooltips and other bits to inputs 38 jQuery('.modal-container-block input').each(function(i, obj) { 39 40 if (jQuery(obj).attr("type") === "password") { 41 jQuery('<span data-toggle="#'+jQuery(obj).attr("id")+'" class="fa fa-fw fa-eye field_icon toggle-password"></span>').insertAfter(jQuery(obj)); 42 } 43 44 if (jQuery(obj).attr("type") === "email" || jQuery(obj).attr("id") === "user_login") { 45 jQuery('<span class="email_tool_tip_icon"><a href="#" class="tool_tip_icon"></a><div class="email-tooltip">Please use the email address of the company or organisation with which you are a member</div></span>"').insertAfter(jQuery(obj)); 46 } 47 48 }); 49 50 //Show required alert on required inputs 51 jQuery('.modal-container-block :input[required]').on('blur', function(e){ 52 jQuery(this).closest('p').find(".mandatory_field").remove(); 53 if (jQuery(this).val() == "") { 54 jQuery('<span class="mandatory_field fail">This is a mandatory field</span>"').insertAfter(jQuery(this)); 55 } else { 56 jQuery('<span class="mandatory_field success">Tick</span>"').insertAfter(jQuery(this)); 57 } 58 }); 59 60 //Show password 61 jQuery("body").on('click', '.toggle-password', function() { 62 jQuery(this).toggleClass("fa-eye fa-eye-slash"); 63 var input = jQuery(this).attr("data-toggle"); 64 if (jQuery(input).attr("type") === "password") { 65 jQuery(input).attr("type", "text"); 66 } else { 67 jQuery(input).attr("type", "password"); 68 } 69 }); 70 71 72 73 //Show rest of saved posts 74 jQuery("body").on('click', '.row.title-row span.sub-title a.show-more-saved', function(e) { 75 e.preventDefault(); 76 jQuery("div#saved_post_output article").fadeIn(); 77 78 jQuery('html, body').animate({ 79 scrollTop: jQuery("div#saved_post_output article:nth-child(5)").offset().top - 70 80 }, 2000); 81 }); 82 83 //Open Modal 84 jQuery("body").on('click', 'a[data-modal]', function(e) { 85 e.preventDefault(); 86 var modalToOpen = jQuery(this).attr('data-modal');
87 jQuery(".modal-container-block").hide(); 88 jQuery(".modal-container-block#"+modalToOpen).fadeIn(); 89 jQuery("input[name='wp-submit']").removeAttr("disabled"); 90 91 //If reset password modal, reset 92 if (modalToOpen == "forgotten-password-modal") { 93 jQuery("#forgotten-password-error, #forgotten-password-success").addClass("hidden"); 94 jQuery("form#lostpasswordform").removeClass("error"); 95 jQuery("#forgotten-password-request").removeClass("hidden"); 96 } 97 98 //Append to URL 99 var url = new URL(location.href); 100 var params = new URLSearchParams(url.search); 101 url.searchParams.set('modal', modalToOpen); 102 history.pushState({}, null, url); 103 }); 104 105 //Close Modal 106 jQuery(".modal-container-block .close-modal").click(function(e) { 107 e.preventDefault(); 108 109 //Get URL And Parameters 110 var url = new URL(location.href); 111 var params = new URLSearchParams(url.search); 112 113 // Delete the modal parameter. 114 url.searchParams.delete('modal'); 115 history.pushState({}, null, url); 116
117 jQuery(".modal-container-block").fadeOut(); 118 }); 119 120 //Close Modal from Backdrop 121 jQuery(".modal-container-block .modal-backdrop").click(function(e) { 122 e.preventDefault(); 123 124 //Get URL And Parameters 125 var url = new URL(location.href); 126 var params = new URLSearchParams(url.search); 127 128 // Delete the modal parameter. 129 url.searchParams.delete('modal'); 130 history.pushState({}, null, url); 131 132 jQuery(".modal-container-block").fadeOut(); 133 }); 134 135 136 137 //Login Modal Tabs 138 jQuery(".login-tabs a").click(function(e) { 139 e.preventDefault(); 140 jQuery(".login-tabs a").removeClass("active"); 141 jQuery(this).addClass("active"); 142 var tab = jQuery(this).attr('data-tab'); 143 jQuery(".modal-inner .login-dropped-content .tabbed-block").slideUp(); 144 jQuery(".modal-inner .login-dropped-content .tabbed-block#"+tab).slideDown(); 145 }); 146 147 148 149 //Forgotten Password AJAX 150 jQuery(".modal-container-block form#lostpasswordform").submit(function(e) { 151 e.preventDefault(); 152 153 //Reset 154 jQuery("#forgotten-password-error, #forgotten-password-success").addClass("hidden"); 155 jQuery("form#lostpasswordform").removeClass("error"); 156 157 //AJAX Call 158 jQuery.ajax({ 159 url: ajaxurl, 160 type: 'POST', 161 data: { 162 'action':'forgotten_password_ajax', 163 'user_login': jQuery("form#lostpasswordform #user_login").val() 164 }, 165 dataType: 'json', 166 success:function(data) { 167 if (data.success) { 168 jQuery("#forgotten-password-request").addClass("hidden"); 169 jQuery("#forgotten-password-success").removeClass("hidden"); 170 } else { 171 jQuery("form#lostpasswordform").addClass("error"); 172 jQuery("#forgotten-password-error").text(data.message).removeClass("hidden"); 173 } 174 175 }, 176 error: function(errorThrown){ 177 console.log(errorThrown); 178 } 179 }); 180 181 }); 182 183 //Reset Password AJAX
184 jQuery(".modal-container-block form#resetpassform").submit(function(e) { 185 e.preventDefault(); 186 187 //Reset 188 jQuery("#password-reset-error, #password-reset-success").addClass("hidden"); 189 jQuery("form#resetpassform").removeClass("error"); 190 191 //check if password fields are empty 192 if( jQuery('#pass1').val() == '' || jQuery('#pass1').val() =='' ){ 193 jQuery("form#resetpassform").addClass("error"); 194 jQuery("#password-reset-error").text('Please enter your new password').removeClass("hidden"); 195 return false; 196 } 197 198 199 //AJAX Call 200 jQuery.ajax({ 201 url: ajaxurl, 202 type: 'POST', 203 data: { 204 'action':'reset_password_ajax', 205 'login': jQuery("form#resetpassform #login").val(), 206 'key': jQuery("form#resetpassform #key").val(), 207 'pass1': jQuery("form#resetpassform #pass1").val(), 208 'pass_confirm': jQuery("form#resetpassform #pass_confirm").val() 209 }, 210 dataType: 'json', 211 success:function(data) { 212 if (data.success) { 213 jQuery("#password-reset-request").addClass("hidden"); 214 jQuery("#password-reset-success").removeClass("hidden"); 215 } else { 216 jQuery("form#resetpassform").addClass("error"); 217 jQuery("#password-reset-error").text(data.message).removeClass("hidden"); 218 } 219 220 }, 221 error: function(errorThrown){ 222 console.log(errorThrown); 223 } 224 }); 225 226 }); 227 228 //Login Form AJAX
229 jQuery(".modal-container-block form#loginform").submit(function(e) { 230 e.preventDefault(); 231 232 //Reset 233 jQuery("form#loginform #login-error").remove(); 234 jQuery("form#loginform").removeClass("error"); 235 236 //AJAX Call 237 jQuery.ajax({ 238 url: ajaxurl, 239 type: 'POST', 240 data: { 241 'action':'member_login_ajax', 242 'user_login': jQuery("form#loginform #user_login").val(), 243 'user_pass': jQuery("form#loginform #user_pass").val(), 244 'rememberme': jQuery("form#loginform #rememberme").val() 245 }, 246 dataType: 'json', 247 success:function(data) { 248 if (data.success) { 249 250 //If on a piece of member content, refresh, else redirect to profile 251 if (jQuery(".gated-content-login-block").length) { 252 window.location.href = window.location.href.split('?')[0]; 253 } else { 254 window.location.href = data.redirect; 255 } 256 257 //jQuery(".modal-container-block").fadeOut(); 258 //jQuery("a[data-modal='login-modal']").addClass("hidden"); 259 //jQuery("#profile-header-link, #profile-dropdown-menu").removeClass("hidden"); 260 } else { 261 jQuery("form#loginform").prepend('<div class="alert alert-danger" id="login-error" role="alert">'+data.message+'</div>'); 262 } 263 264 }, 265 error: function(errorThrown){ 266 console.log(errorThrown); 267 } 268 }); 269 270 }); 271 272 //Log out via AJAX 273 jQuery(".member_logout").click(function(e) { 274 e.preventDefault(); 275 276 //AJAX Call 277 jQuery.ajax({ 278 url: ajaxurl, 279 data: { 280 'action':'member_logout_ajax' 281 }, 282 dataType: 'json', 283 success:function(data) { 284 window.location.href = data.redirect; 285 }, 286 error: function(errorThrown){ 287 console.log(errorThrown); 288 } 289 }); 290 291 }); 292 293 //Register Form AJAX
294 jQuery(".modal-container-block form#registeraccountform").submit(function(e) { 295 e.preventDefault(); 296 297 //Reset 298 jQuery("form#registeraccountform #register-error, form#registeraccountform #register-success").remove(); 299 jQuery("form#registeraccountform").removeClass("error"); 300 301 //Get checked newsletters 302 var newsletters_opted_in = jQuery("form#registeraccountform input[name='update_opt_in[]']:checkbox:checked").map(function(){ 303 return jQuery(this).val(); 304 }).get(); 305 306 //AJAX Call 307 jQuery.ajax({ 308 url: ajaxurl, 309 data: { 310 'action':'member_register_ajax', 311 'first_name': jQuery("form#registeraccountform #first_name").val(), 312 'last_name': jQuery("form#registeraccountform #last_name").val(), 313 'job_title': jQuery("form#registeraccountform #job_title").val(), 314 'company_organisation': jQuery("form#registeraccountform #company_organisation").val(), 315 'email': jQuery("form#registeraccountform #email").val(), 316 'update_opt_in': newsletters_opted_in, 317 }, 318 dataType: 'json', 319 success:function(data) { 320 if (data.success) { 321 jQuery("#register-modal #register-account-success").removeClass('hidden'); 322 jQuery("#register-account-request").addClass("hidden"); 323 } else { 324 jQuery("form#registeraccountform").prepend('<div class="alert alert-danger" id="register-error" role="alert">'+data.message+'</div>'); 325 } 326 327 }, 328 error: function(errorThrown){ 329 console.log(errorThrown); 330 } 331 }); 332 333 }); 334 335 //Interest selection AJAX 336 jQuery("input.interest_selection_input").change(function(e) { 337 e.preventDefault(); 338 339 //If all, and unchecked, uncheck all 340 if (jQuery(this).val() == "all") { 341 if (jQuery(this).is(":checked")) { 342 jQuery('input.interest_selection_input').not(this).prop('checked', true); 343 jQuery('#user_interests .user_interests_label.hidden_interest').removeClass("hidden_interest"); 344 jQuery('#user_interests .interest-col.hidden_interest').removeClass("hidden_interest"); 345 } else { 346 jQuery('input.interest_selection_input').not(this).prop('checked', false); 347 jQuery('#user_interests .user_interests_label.hidden_interest').addClass("hidden_interest"); 348 jQuery('#user_interests .interest-col.hidden_interest').addClass("hidden_interest"); 349 } 350 } 351 352 353 //Loop through all interests, and hide / show on profile page 354 jQuery('input.interest_selection_input').each(function(i, obj) { 355 if (jQuery(obj).is(":checked")) { 356 357 //Unhide on user profile page 358 jQuery('#user_interests .user_interests_label[data-value="'+this.value+'"]').removeClass("hidden_interest"); 359 jQuery('#user_interests .user_interests_label[data-value="'+this.value+'"]').parent().removeClass("hidden_interest"); 360 361 } else { 362 363 //Hide on user profile page 364 jQuery('#user_interests .user_interests_label[data-value="'+this.value+'"]').addClass("hidden_interest"); 365 jQuery('#user_interests .user_interests_label[data-value="'+this.value+'"]').parent().addClass("hidden_interest"); 366 367 } 368 }); 369 370 //Get all selected interests 371 var selected_interests = jQuery('input.interest_selection_input:checked').map(function() { 372 if (this.value !== "all") { 373 return this.value; 374 } 375 }).get(); 376 377 //show more if more than 6 selected 378 if(selected_interests.length > 6){ 379 jQuery("a#show-more-interests").addClass('hidden'); 380 } else { 381 jQuery("a#show-more-interests").addClass('hidden'); 382 } 383 384 //AJAX Call 385 jQuery.ajax({ 386 url: ajaxurl, 387 data: { 388 'action':'member_interest_selection_ajax', 389 'selected_interests': selected_interests 390 }, 391 dataType: 'json', 392 success:function(data) { 393 394 //Regenerate posts on profile page 395 regenerate_member_profile_posts(); 396 397 }, 398 error: function(errorThrown){ 399 console.log(errorThrown); 400 } 401 }); 402 403 }); 404 405 //Regenerate recommended posts on members profile page 406 function regenerate_member_profile_posts(current_recommended_posts = []) { 407 408 //AJAX Call 409 jQuery.ajax({ 410 url: ajaxurl, 411 data: { 412 'action':'regenerate_member_profile_posts', 413 'current_recommended_posts' : current_recommended_posts 414 }, 415 dataType: 'json', 416 success:function(data) { 417 418 //Regenerate posts on profile page 419 if (data.success) { 420 421 jQuery('#recommended_for_you div#recommended_post_output').slick('unslick'); 422
423 jQuery("#recommended_post_output").html(data.output); 424 jQuery(".no_interests").hide(); 425 jQuery("#edit_interests").show(); 426 427 // slick for testimonials posts 428 jQuery('#recommended_for_you div#recommended_post_output').not('.slick-initialized').slick({ 429 infinite: false, 430 slidesToShow: 4, 431 slidesToScroll: 4, 432 prevArrow : '<button type="button" class="fa previous fa-chevron-left general">', 433 nextArrow : '<button type="button" class="fa next fa-chevron-right general">', 434 dots: true, 435 arrows: true, 436 responsive: [ 437 { 438 breakpoint: 1200, 439 settings: { 440 slidesToShow: 3, 441 slidesToScroll:3 442 } 443 }, 444 { 445 breakpoint: 991, 446 settings: { 447 slidesToShow: 3, 448 slidesToScroll: 3 449 } 450 }, 451 { 452 breakpoint: 767, 453 settings: { 454 slidesToShow: 1, 455 slidesToScroll: 1, 456 dots: false, 457 arrows: true 458 } 459 } 460 ] 461 }); 462 463 } else { 464 jQuery("#recommended_post_output").empty(); 465 jQuery(".no_interests").show(); 466 jQuery("#edit_interests").hide(); 467 } 468 469 }, 470 error: function(errorThrown){ 471 console.log(errorThrown); 472 } 473 }); 474 475 } 476 477 //Dismiss a post from recommended section 478 jQuery("body").on("click", "span.dismiss_post", function(event){ 479 480 event.preventDefault(); 481 482 var dismissed_post_id = jQuery(this).attr("data-post_id"); 483 484 //Get current recommended posts to avoid serving these again 485 var current_recommended_posts = jQuery('#recommended_post_output article').map(function() { 486 if (jQuery(this).attr("data-post_id") !== dismissed_post_id) { 487 return jQuery(this).attr("data-post_id"); 488 } 489 }).get(); 490 491 jQuery.ajax({ 492 url: ajaxurl, 493 data: { 494 'action':'dismiss_member_profile_post', 495 'dismissed_post_id':dismissed_post_id, 496 'current_recommended_posts':current_recommended_posts 497 }, 498 dataType: 'json', 499 beforeSend: function() { 500 }, 501 success:function(data) { 502 503 //Regenerate member interest posts 504 regenerate_member_profile_posts(current_recommended_posts); 505 506 507 }, 508 error: function(errorThrown){ 509 console.log(errorThrown); 510 } 511 }); 512 513 }); 514 515 516 //Get page ID from body class 517 function get_current_page_id() { 518 var page_body = jQuery('body'); 519 520 var id = 0; 521 522 if(page_body) { 523 var classList = page_body.attr('class').split(/\s+/); 524 525 jQuery.each(classList, function(index, item) { 526 if (item.indexOf('postid') >= 0) { 527 var item_arr = item.split('-'); 528 id = item_arr[item_arr.length -1]; 529 return false; 530 } 531 }); 532 } 533 return id; 534 } 535 536 //Send AJAX request every 15 seconds to track post views for logged in users 537 var timeViewed = 0; 538 setInterval(function() { 539 540 //Increment time 541 timeViewed = timeViewed + 15; 542 543 jQuery.ajax({ 544 url: ajaxurl, 545 data: { 546 'action':'track_post_analytics', 547 'post_id' : get_current_page_id(), 548 'time_viewed' : timeViewed + 15 549 }, 550 dataType: 'json', 551 beforeSend: function() { 552 }, 553 success:function(data) { 554 }, 555 error: function(errorThrown){ 556 } 557 }); 558 }, 15000);//time in milliseconds 559 560}); 561 562 563jQuery(window).on('load', function() { 564 565 setTimeout(function() { 566 567 //show more if more than 6 selected 568 if(jQuery("div#saved_post_output article").length > 4){ 569 jQuery(".row.title-row span.sub-title a.show-more-saved").removeClass('hidden'); 570 } else { 571 jQuery(".row.title-row span.sub-title a.show-more-saved").addClass('hidden'); 572 } 573 574 }, 2000); 575 576});
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.