PageSourceSearch

https://adassoc.org.uk/wp-content/plugins/aa-members/aa_members.js?v=1790848577&ver=7.1.2

js adassoc.org.uk collected 2026-10-01 11:31:25 UTC 17,880 bytes, 576 lines download raw bytes

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.