PageSourceSearch

https://ttara.org/wp-content/plugins/ajax-login-and-registration-modal-popup/assets/lrm-core.js?ver=56

js ttara.org collected 2026-10-02 08:04:16 UTC 30,536 bytes, 920 lines download raw bytes

1var LRM = LRM ? LRM : {};
2
3//jQuery(document).ready(function($) {
4// jQuery(document).ready(
5/** @var $ jQuery */
6+(function ($) {
7
8	if ( LRM.home_url_arr.scheme !== window.location.protocol.replace(":", "") ) {
9		alert( "AJAX Login and Registration Popup warning: the WP settings site URL scheme and current url scheme doesn't math. " + "\n\r" +
10			  "WP settings url: " + LRM.home_url + "\n" + "Browser url: " + window.location.href + "\n\r" +
11			  "This could cause a login/registration issues! " +
12			  "Usually this happens when SSL (HTTPS) were added to the site, but HTTP version still accessible. How to set up HTTP to HTTPS redirect: https://websitesetup.org/http-to-https-wordpress/" );
13	}
14
15	if ( LRM.validate_domain && LRM.home_url_arr.host !== window.location.host ) {
16		alert( "AJAX Login and Registration Popup warning: the WP settings site Domain and current url Domain doesn't math. " + "\n\r" +
17			  "WP settings domain: " + LRM.home_url_arr.host + "\n" + "Browser domain: " + window.location.host + "\n\r" +
18			  "This could cause a login/registration issues! ");
19	}
20
21	if ($('.lrm-user-modal').length > 0) {
22		lrm_init()
23	} else {
24		setTimeout(function () {
25			lrm_init();
26		}, 1200);
27	}
28
29	function is_mobile_or_tablet() {
30		var check = false;
31
32		(function (a) {
33			if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true;
34		})(navigator.userAgent || navigator.vendor || window.opera);
35
36		return check;
37	}
38
39	function lrm_init() {
40		// var $formModal = $('.lrm-user-modal'),
41		// 	  $formLogin = $formModal.find('#lrm-login'),
42		// 	  $formSignup = $formModal.find('#lrm-signup'),
43		// 	  $formForgotPassword = $formModal.find('#lrm-reset-password'),
44		// 	  $formModalTab = $('.lrm-switcher'),
45		// 	  $tabLogin = $formModalTab.children('li').eq(0).children('a'),
46		// 	  $tabSignup = $formModalTab.children('li').eq(1).children('a'),
47		// 	  $forgotPasswordLink = $formLogin.find('.lrm-form-bottom-message a'),
48		// 	  $backToLoginLink = $formForgotPassword.find('.lrm-form-bottom-message a'),
49
50		var loader_html = '<span class="lrm-button-loader"> <svg version="1.1" id="L4" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 40" enable-background="new 0 0 0 0" xml:space="preserve"> <circle fill="#ffffff" stroke="none" cx="30" cy="20" r="6"> <animate attributeName="opacity" dur="1s" values="0;1;
500" repeatCount="indefinite" begin="0.1"/> </circle> <circle fill="#ffffff" stroke="none" cx="50" cy="20" r="6"> <animate attributeName="opacity" dur="1s" values="0;1;0" repeatCount="indefinite" begin="0.2"/> </circle> <circle fill="#ffffff" stroke="none" cx="70" cy="20" r="6"> <animate attributeName="opacity" dur="1s" values="0;1;0" repeatCount="indefinite" begin="0.3"/> </circle> </svg></span>';
51
52		$("html").addClass("html-has-lrm");
53		$("body").addClass("has-lrm");
54
55		$(document).on('lrm_show_signup', signup_selected);
56		$(document).on('lrm_show_register', signup_selected);
57
58		$(document).on('lrm_show_signin', login_selected);
59		$(document).on('lrm_show_login', login_selected);
60
61		setTimeout(function () {
62			if (LRM.selectors_mapping.login) {
63				$(LRM.selectors_mapping.login)
64					  .off("click")
65					  .on('click', function (event) {
66						  event.preventDefault();
67						  $(document).trigger('lrm_show_login', [event]);
68						  return false;
69					  });
70			}
71			if (LRM.selectors_mapping.register) {
72				$(LRM.selectors_mapping.register)
73					  .off("click")
74					  .on('click', function (event) {
75						  event.preventDefault();
76						  $(document).trigger('lrm_show_signup', [event]);
77						  return false;
78					  });
79			}
80
81			var hash = window.location.hash.substring(1);
82			if ( hash.length > 0 ) {
83				if (hash === "login") {
84					$(document).trigger('lrm_show_login');
85				} else if (hash === "inline-login") {
86					jQuery(".lrm-inline .lrm-switch-to--login").click();
87				} else if (hash == "register") {
88					$(document).trigger('lrm_show_signup');
89				} else if (hash == "inline-register") {
90					jQuery(".lrm-inline .lrm-switch-to--register").click();
91				} else if (hash == "reset-password") {
92					jQuery(".lrm-inline .lrm-switch-to--reset-password").click();
93				}
94			}
95		}, 300);
96
97		//$("form.cart").on('submit', signup_selected);
98
99		//var handle_event = is_mobile_or_tablet() ? 'touchend' : 'click';
100
101		//open sign-up form
102		$(document).on('click', '.lrm-signup', signup_selected);
103		$(document).on('touchend click', '[class*="lrm-register"]', signup_selected);
104		$(document).on('click', '.lrm-switch-to--register', signup_selected);
105
106		//open login-form form
107		$(document).on('click', '.lrm-signin', login_selected);
108		$(document).on('touchend click', '[class*="lrm-login"]', login_selected);
109		$(document).on('click', '.lrm-switch-to--login', login_selected);
110
111		$(document).on('click', '.lrm-forgot-password,[data-action="login"] .lrm-form-message a,.lrm-switch-to--reset-password', function (event) {
112			event.preventDefault();
113			forgot_password_selected(event);
114		});
115
116		//close modal
117		$('.lrm-user-modal').on('mousedown', function (event) {
118			if ($(event.target).is('.lrm-user-modal') || $(event.target).is('.lrm-close-form')) {
119				// Check reCaptha, etc
120				var can_close = $(document).triggerHandler('lrm/can_close_modal', event);
121				if ( can_close !== undefined && !can_close ) {
122					return false;
123				}
124
125				$(this).removeClass('is-visible');
126				auto_selected_role = false;
127				$(document).triggerHandler("lrm/close_modal", this, event, "click");
128			}
129		});
130		//close modal when clicking the esc keyboard button
131		$(document).on( "keyup", function (event) {
132			if (event.which == '27') {
133				// Check reCaptha, etc
134				var can_close = $(document).triggerHandler('lrm/can_close_modal', event);
135				if ( can_close !== undefined && !can_close ) {
136					return false;
137				}
138
139				$(".lrm-user-modal").removeClass('is-visible');
140				auto_selected_role = false;
141				$(document).triggerHandler("lrm/close_modal", this, event, "esc");
142			}
143		});
144
145		//switch from a tab to another
146		// $formModalTab.on('click', function (event) {
147		// 	event.preventDefault();
148		// 	( $(event.target).is($tabLogin) ) ? login_selected(event, true) : signup_selected(event, true);
149		// });
150
151		//hide or show password
152		$(document).on('click', '.lrm-user-modal-container .hide-password', function () {
153			var togglePass = $(this),
154				  passwordField = togglePass.parent().find('input');
155
156			('password' == passwordField.attr('type')) ? passwordField.attr('type', 'text') : passwordField.attr('type', 'password');
157
158			if ( togglePass.hasClass("hide-password--on") )  {
159				togglePass.attr( "title", togglePass.data("show") );
160				togglePass.removeClass("hide-password--on");
161			} else {
162				togglePass.attr( "title", togglePass.data("hide") );
163				togglePass.addClass("hide-password--on");
164			}
165			//focus and move cursor to the end of input field
166			passwordField.putCursorAtEnd();
167		});
168
169		//show forgot-password form
170		// $forgotPasswordLink.on('click', function (event) {
171		// 	event.preventDefault();
172		// 	forgot_password_selected(event);
173		// });
174		//
175		// //back to login from the forgot-password form
176		// $backToLoginLink.on('click', function (event) {
177		// 	event.preventDefault();
178		// 	login_selected(event, true);
179		// });
180
181		var auto_selected_role = false;
182		var hidden_role = false;
183
184		function _save_auto_role(event) {
185			if ( !event.target || $(event.target).hasClass("lrm-switch-to-link") ) {
186			 	return;
187			}
188			var role = $(event.target).data("lrm-role");
189			if ( role !== undefined ) {
190				auto_selected_role = role;
191			}
192
193			hidden_role = false;
194			if ( $(event.target).data("lrm-role-silent") !== undefined ) {
195				hidden_role = true;
196			}
197		}
198
199		function login_selected(event, event_orig) {
200			if (LRM.is_user_logged_in && !LRM.is_customize_preview) {
201				return true;
202			}
203
204			if (event) {
205				event.stopPropagation();
206				event.preventDefault();
207			}
208			/**
209			 * @since 1.34
210			 * this - clicked element
211			 */
212			$(document).triggerHandler("lrm/before_display/login", this, event);
213
214			_save_auto_role(event);
215
216			var $formModal = $(event.target).closest(".lrm-main");
217
218			if (!$formModal.length) {
219				LRM.redirect_url = "";
220				if (!event_orig) {
221					var el = event.target ? event.target : this;
222				} else {
223					var el = event_orig.target;
224				}
225				if (el && ($(el).hasClass("lrm-redirect") || $(el).parent().hasClass("lrm-redirect"))) {
226					LRM.redirect_url = $(el).attr("href");
227				}
228			}
229
230			if (!$formModal.length) {
231				$formModal = $(".lrm-user-modal");
232			}
233
234			// var $formModal = $('.lrm-user-modal'),
235			// 	  $formLogin = $formModal.find('.lrm-login'),
236			// 	  $formSignup = $formModal.find('.lrm-signup'),
237			// 	  $formForgotPassword = $formModal.find('.lrm-reset-password'),
238			// 	  $formModalTab = $('.lrm-switcher'),
239			// 	  $tabLogin = $formModalTab.children('li').eq(0).children('a'),
240			// 	  $tabSignup = $formModalTab.children('li').eq(1).children('a'),
241			// 	  $forgotPasswordLink = $formLogin.find('.lrm-form-bottom-message a'),
242			// 	  $backToLoginLink = $formForgotPassword.find('.lrm-form-bottom-message a'),
243			//
244			_show_modal($formModal);
245			$formModal.find('.lrm-signin-section').addClass('is-selected');
246			$formModal.find('.lrm-signup-section').removeClass('is-selected');
247			$formModal.find('.lrm-reset-password-section').removeClass('is-selected');
248			$formModal.find('.lrm-switcher').children('li').eq(0).children('a').addClass('selected');
249			$formModal.find('.lrm-switcher').children('li').eq(1).children('a').removeClass('selected');
250
251			setTimeout(function() {
252				if ( $(window).width() > 600 ) {
253					$formModal.find(".lrm-signin-section input[data-autofocus]").trigger('focus');
254				}
255			}, 100);
256
257			return false;
258		}
259
260		function signup_selected(event, event_orig) {
261			if (LRM.is_user_logged_in && !LRM.is_customize_preview) {
262				return true;
263			}
264
265			if (event) {
266				event.stopPropagation();
267				event.preventDefault();
268			}
269			/**
270			 * @since 1.34
271			 * this - clicked element
272			 */
273			$(document).triggerHandler("lrm/before_display/registration", this, event);
274
275			_save_auto_role(event);
276
277			// $formModal.addClass('is-visible');
278			// $formLogin.removeClass('is-selected');
279			// $formSignup.addClass('is-selected');
280			// $formForgotPassword.removeClass('is-selected');
281			// $tabLogin.removeClass('selected');
282			// $tabSignup.addClass('selected');
283
284			var $formModal = $(event.target).closest(".lrm-main");
285
286
287			if (!$formModal.length) {
288				LRM.redirect_url = "";
289				if (!event_orig) {
290					var el = event.target ? event.target : this;
291				} else {
292					var el = event_orig.target;
293				}
294				if (el && ($(el).hasClass("lrm-redirect") || $(el).parent().hasClass("lrm-redirect"))) {
295					LRM.redirect_url = $(el).attr("href");
296				}
297			}
298
299			if (!$formModal.length) {
300				$formModal = $(".lrm-user-modal");
301			}
302
303			_show_modal($formModal);
304			$formModal.find('.lrm-signin-section').removeClass('is-selected');
305			$formModal.find('.lrm-signup-section').addClass('is-selected');
306			$formModal.find('.lrm-reset-password-section').removeClass('is-selected');
307			$formModal.find('.lrm-switcher').children('li').eq(0).children('a').removeClass('selected');
308			$formModal.find('.lrm-switcher').children('li').eq(1).children('a').addClass('selected');
309
310			// User Role selector!
311			if ( $formModal.find(".fieldset--user_role") ) {
312				var $user_role_wrap = $formModal.find(".fieldset--user_role");
313				var $role_option = null, role_id;
314
315				if (auto_selected_role) {
316					$role_option = $user_role_wrap.find("option[data-label='" + auto_selected_role + "']");
317					if ( $role_option.length ) {
318						var role_id = $role_option.val();
319					}
320					if ( role_id ) {
321						$user_role_wrap.find("select[name='user_role']").val(role_id); // aa
322					} else {
323						console.warn( "LRM user role selector: no Role was found with a label:", auto_selected_role );
324					}
325				} else {
326					$user_role_wrap.find("select[name='user_role']").val("");
327				}
328
329				if (hidden_role && ( !auto_selected_role || (auto_selected_role && role_id) )) {
330					$user_role_wrap.hide();
331				} else {
332					$user_role_wrap.show();
333				}
334			}
335
336			setTimeout(function() {
337				if ( $(window).width() > 600 ) {
338					$formModal.find(".lrm-signup-section input:first").trigger('focus');
339				}
340
341				$("#signup-password").trigger("keyup");
342			}, 100);
343
344			return false;
345		}
346
347		function forgot_password_selected(event) {
348			// if (LRM.is_user_logged_in) {
349			// 	return true;
350			// }
351
352			/**
353			 * @since 1.34
354			 * this - clicked element
355			 */
356			$(document).triggerHandler("lrm/before_display/forgot_password", this, event);
357
358			var $formModal = $(event.target).closest(".lrm-main");
359
360			if (!$formModal.length) {
361				$formModal = $(".lrm-user-modal");
362			}
363
364			_show_modal($formModal);
365			$formModal.find('.lrm-signin-section').removeClass('is-selected');
366			$formModal.find('.lrm-signup-section').removeClass('is-selected');
367			$formModal.find('.lrm-reset-password-section').addClass('is-selected');
368
369			setTimeout(function() {
370				if ( $(window).width() > 600 ) {
371					$formModal.find(".lrm-reset-password-section input[data-autofocus]").trigger('focus');
372				}
373			}, 100);
374
375			if (event) {
376				event.preventDefault();
377			}
378
379			// $formLogin.removeClass('is-selected');
380			// $formSignup.removeClass('is-selected');
381			// $formForgotPassword.addClass('is-selected');
382			return false;
383		}
384
385		/**
386		 * Global function for all actions
387		 * @param $formModal
388		 * @private
389		 */
390		function _show_modal( $formModal ) {
391			if ( window.LRM_Pro ) {
392				window.LRM_Pro.modal_is_shown = true;
393			}
394			$formModal.addClass('is-visible');
395			$(document).triggerHandler("lrm/show_modal", $formModal);
396		}
397
398		window.lrm_submit_form = function(event) {
399			if (LRM.is_customize_preview) {
400				alert("Not possible to submit form in Preview Mode!");
401				return;
402			}
403			var $form = $(event.target);
404
405			if ( $form.hasClass("rcp_form") ) {
406				return true;
407			}
408
409			event.preventDefault();
410
411			if ( $form.hasClass("--is-submitting") ) {
412				return false;
413			}
414
415			// Check reCaptha, etc
416			if ( $(document).triggerHandler('lrm/do_not_submit_form', $form) ) {
417				return false;
418			}
419
420			// Fix for ACF PRO plugin
421			if ( $form.data("action") == "registration" && $form.find("#acf-form-data").length > 0 && window.acf && window.acf.validation.active ) {
422				if ("yes" !== $form.data("lrm-acf-validated")) {
423					return;
424				}
425				// Reset validation flag
426				$form.data("lrm-acf-validated", "no");
427			}
428
429			$form.find(".has-error").removeClass("has-error")
430				  .next("span").removeClass("is-visible");
431
432			$form.find("button[type='submit']").prepend(loader_html);
433
434			$form.find(".lrm-form-message").html("");
435
436			$form.addClass("--is-submitting");
437
438
439			$.ajax({
440				type: 'POST',
441				dataType: 'json',
442				url: LRM.ajax_url,
443				data: $form.serialize(),
444				success: function (response) {
445					$form.find(".lrm-button-loader").remove();
446					$form.removeClass("--is-submitting");
447
448					if (response.data.message) {
449						if (!response.data.for) {
450							LRM_Form.set_message( $form, response.data.message, !response.success );
451							//$form.find(".lrm-form-message").html(response.data.message);
452
453							// if (!response.success) {
454							// 	$form.find(".lrm-form-message").addClass("lrm-is-error");
455							// }
456
457							//$form.closest(".lrm-user-modal-container").animate({scrollTop: error_scroll_offset}, 400);
458						} else {
459							// Tweak in case this selector is Missing
460							if ( 0 === $form.find('input[name="' + response.data.for + '"]').length ) {
461								alert(response.data.message);
462							} else {
463								$form.find('input[name="' + response.data.for + '"]').addClass('has-error')
464									// .next('.lrm-error-message') - fix for LastPass Extention
465									.parent()
466									.find('.lrm-error-message')
467									.html(response.data.message).addClass('is-visible');
468								$form.find(".lrm-form-message").removeClass("lrm-is-error").html("");
469
470							}
471						}
472
473						if (response.data.custom_html && response.data.custom_html_selector) {
474							$(response.data.custom_html_selector).html(response.data.custom_html);
475						}
476					}
477
478					// $form.data("action") for get
479					$(document).triggerHandler('lrm/ajax_response', [response, $form, $form.data("action")]);
480
481					if ( window.is_lrm_testing ) {
482						window.lrm_response = response;
483						return;
484					}
485
486					//console.log(response);
487
488					// If user Logged in After Login or Registration
489					// If Email Verify after Registration enabled - we skip this
490					if (response.success && response.data.logged_in) {
491						LRM.is_user_logged_in = true;
492						$(document).triggerHandler('lrm_user_logged_in', [response, $form, $form.data("action")]);
493
494						if ( "reload" == response.data.action ) {
495							window.location.reload( true );
496						} else if ( "hide" == response.data.action ) {
497							$(".lrm-user-modal").removeClass('is-visible');
498							$("body").addClass("logged-in");
499						}
500					}
501
502					$(document).triggerHandler('lrm_pro/maybe_refresh_recaptcha');
503				},
504				error: function (jqXHR, textStatus, errorThrown) {
505					$form.find(".lrm-button-loader").remove();
506					$form.removeClass("--is-submitting");
507
508					if ( jqXHR.responseText.indexOf("GF_AJAX_POSTBACK") > 0 ) {
509						$(document).triggerHandler('lrm_gf_ajax', [jqXHR.responseText, jqXHR.status, $form, $form.data("action")]);
510						console.log('GF_AJAX_POSTBACK found');
511						return;
512					}
513
514					if ( 503 === jqXHR.status && jqXHR.responseText.indexOf("ERROR") > 0 ) {
515						LRM_Form.set_message( $form, jqXHR.responseText, false );
516					} else {
517						alert("An error occurred, please contact with administrator... \n\rFor more details look at the console (F12 or Ctrl+Shift+I, Console tab)!");
518					}
519
520					if (window.console == undefined) {
521						return;
522					}
523					console.log('statusCode:', jqXHR.status);
524					console.log('errorThrown:', errorThrown);
525					console.log('responseText:', jqXHR.responseText);
526				}
527
528			});
529
530			return false;
531		}
532
533		$(document).on('submit', '.js-lrm-form', window.lrm_submit_form);
534
535		/**
536		 * @since 1.51
537		 */
538		$( 'body' ).on( 'keyup', '#lrm-password1,#lrm-password2', function( event ) {
539			var passwordStrength = LRM.checkPasswordStrength(
540				  $( "#lrm-password1" ),         // First password field
541				  null,         // First password field
542				  $( "#lrm-password1" ).parent().parent().find(".lrm-pass-strength-result")           // Strength meter
543			);
544
545			if (typeof passwordStrength === "undefined" || passwordStrength === null) {
546				return;
547			}
548
549			if ( "yes_allow_weak" == LRM.validate_password_strength ) {
550				if (!passwordStrength || passwordStrength <= 2) {
551					$(".pw-weak").show()
552					$(".pw-checkbox").attr("required", "required");
553				} else {
554					$(".pw-weak").hide()
555					$(".pw-checkbox").attr("required", false);
556				}
557			}
558		});
559
560		setTimeout(function () {
561			if ( $('#lrm-password1,#lrm-password2').length > 0 ) {
562				$('#lrm-password1,#lrm-password2').trigger('keyup');
563			}
564		}, 500);
565
566	}
567
568	// ajaxSetup is global, but we use it to ensure JSON is valid once returned.
569	$.ajaxSetup({
570		dataFilter: function (raw_response, dataType) {
571			// We only want to work with JSON
572			if ('json' !== dataType || !raw_response) {
573				return raw_response;
574			}
575
576			if (lrm_is_valid_json(raw_response)) {
577				return raw_response;
578			} else {
579				// Attempt to fix the malformed JSON
580				var maybe_valid_json = raw_response.match(/{"success.*}/);
581
582				if (null === maybe_valid_json) {
583					console.log('Unable to fix malformed JSON');
584				} else if (lrm_is_valid_json(maybe_valid_json[0])) {
585					console.log('Fixed malformed JSON. Original:');
586					console.log(raw_response);
587					raw_response = maybe_valid_json[0];
588				} else {
589					console.log('Unable to fix malformed JSON');
590				}
591			}
592
593			return raw_response;
594		}
595	});
596
597
598	function lrm_is_valid_json(raw_json) {
599		try {
600			var json = $.parseJSON(raw_json);
601
602			return (json && 'object' === typeof json);
603		} catch (e) {
604			return false;
605		}
606	}
607
608	window.LRM_Form = {
609		set_message: function($form, message_html, is_error) {
610			var $message = $form.find(".lrm-form-message");
611
612			if ( 0 === $message.length && $form.hasClass("signup-form") ) {
613				$form.prepend( '<div class="lrm-form-message"></div>' );
614				$message = $form.find(".lrm-form-message");
615			}
616
617			// Tweak in case this selector is Missing
618			if ( 0 !== $message.length ) {
619				$message.html(message_html);
620			} else {
621				alert(message_html);
622			}
623
624			var modal_is_visible = $(".lrm-user-modal").hasClass('is-visible');
625
626			var element_to_scroll = modal_is_visible ? ".lrm-user-modal" : "html, body";
627
628			var error_scroll_offset = $(document).triggerHandler("lrm/form/set_message_scroll_offset", [$form, modal_is_visible, $message]);
629			if ( error_scroll_offset === undefined ) {
630				error_scroll_offset = modal_is_visible ? 25 : $message.offset().top - 15;
631			}
632
633			if ( "no" !== error_scroll_offset ) {
634				$(element_to_scroll).animate({
635					scrollTop: error_scroll_offset
636				}, 1500);
637			}
638
639			if ( is_error ) {
640				$message.addClass("lrm-is-error");
641			} else {
642				$message.removeClass("lrm-is-error");
643			}
644		}
645	};
646
647	/**
648	 * https://code.tutsplus.com/articles/using-the-included-password-strength-meter-script-in-wordpress--wp-34736
649	 *
650	 * @param $pass1
651	 * @param $strengthResult
652	 * @returns {*}
653	 */
654	LRM.checkPasswordStrength = function( $pass1, $pass2, $strengthResult ) {
655
656		return LRM.loadPasswordMeter(function() {
657			var pass1 = $pass1.val().trim();
658			if ( !pass1 ) {
659				$strengthResult.data('status','empty');
660				return 0;
661			}
662
663			if (!$pass2) {
664				var pass2 = pass1;
665			} else {
666				var pass2 = $pass2.val();
667			}
668
669			if ( "no" === LRM.validate_password_strength ) {
670				if ( $pass2 && pass2 !== pass1 ) {
671					$strengthResult.attr('data-status', 'short').html(LRM.l10n.passwords_is_mismatch);
672					return 5;
673				} else if ( pass1.length < 3 || $pass2 && pass2.length < 3 ) {
674					$strengthResult.attr('data-status','short').html(LRM.l10n.password_is_short);
675					return 1;
676				} else {
677					$strengthResult.attr('data-status', null);
678				}
679				return 0;
680			}
681
682			//$strengthResult.removeClass('short bad good strong');
683
684			// Extend our blacklist array with those from the inputs & site data
685			var blacklistArray = ["querty", "password", "P@ssword1", "132", "123", "admin", "user"]
686
687			// Get the password strength
688			var strength = 0;
689			if ( "lrm" === LRM.password_strength_lib ) {
690				strength = LRM_Helper.PasswordMeter(pass1, blacklistArray, pass2);
691			} else {
692				blacklistArray = blacklistArray.concat(wp.passwordStrength.userInputBlacklist());
693				strength = wp.passwordStrength.meter(pass1, blacklistArray, pass2);
694			}
695
696			// Add the strength meter results
697			switch (strength) {
698
699				case 2:
700					$strengthResult.attr('data-status','bad').html(LRM.l10n.password_is_bad);
701					break;
702
703				case 3:
704					$strengthResult.attr('data-status','good').html(LRM.l10n.password_is_good);
705					break;
706
707				case 4:
708					$strengthResult.attr('data-status','strong').html(LRM.l10n.password_is_strong);
709					break;
710
711				case 5:
712					if ($pass2) {
713						$strengthResult.attr('data-status','short').html(LRM.l10n.passwords_is_mismatch);
714						break;
715					}
716
717				default:
718					$strengthResult.attr('data-status','short').html(LRM.l10n.password_is_short);
719
720			}
721
722			//console.log( "Pass strength: ", strength );
723
724			return strength;
725		});
726	}
727
728	LRM.passwordMeterIsLoaded = false;
729	LRM.passwordMeterIsLoading = false;
730	LRM.loadPasswordMeter = function ( callback ) {
731		if ( "lrm" === LRM.password_strength_lib || LRM.passwordMeterIsLoaded ) {
732			return callback();
733		}
734		// From "wp-admin/js/password-strength-meter.min.js?ver=5.0.4"
735		window.wp=window.wp||{};var passwordStrength;!function(a){wp.passwordStrength={meter:function(b,c,d){if(a.isArray(c)||(c=[c.toString()]),b!=d&&d&&d.length>0)return 5;if("undefined"==typeof window.zxcvbn)return-1;var e=zxcvbn(b,c);return e.score},userInputBlacklist:function(){var b,c,d,e,f=[],g=[],h=["user_login","first_name","last_name","nickname","display_name","email","url","description","weblog_title","admin_email"];for(f.push(document.title),f.push(document.URL),c=h.length,b=0;b<c;b++)e=a("#"+h[b]),0!==e.length&&(f.push(e[0].defaultValue),f.push(e.val()));for(d=f.length,b=0;b<d;b++)f[b]&&(g=g.concat(f[b].replace(/\W/g," ").split(" ")));return g=a.grep(g,function(b,c){return!(""===b||4>b.length)&&a.inArray(b,g)===c})}},passwordStrength=wp.passwordStrength.meter}(jQuery);
736
737		LRM.passwordMeterIsLoading = true;
738
739		// Usage
740		$.cachedScript( LRM.password_zxcvbn_js_src ).done(function( script, textStatus ) {
741			LRM.passwordMeterIsLoaded = true;
742			callback();
743		});
744	}
745
746//});
747})(jQuery);
748
749
750//credits http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
751jQuery.fn.putCursorAtEnd = function () {
752	return this.each(function () {
753		// If this function exists...
754		if (this.setSelectionRange) {
755			// ... then use it (Doesn't work in IE)
756			// Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.
757			var len = jQuery(this).val().length * 2;
758			jQuery(this).trigger('focus');
759			this.setSelectionRange(len, len);
760		} else {
761			// ... otherwise replace the contents with itself
762			// (Doesn't work in Google Chrome)
763			jQuery(this).val(jQuery(this).val());
764		}
765	});
766};
767
768/**
769 * @since 2.02
770 *
771 * @param url
772 * @param options
773 * @returns {*}
774 */
775jQuery.cachedScript = function( url, options ) {
776	// Allow user to set any option except for dataType, cache, and url
777	options = jQuery.extend( options || {}, {
778		dataType: "script",
779		cache: true,
780		url: url
781	});
782
783	// Use $.ajax() since it is more flexible than $.getScript
784	// Return the jqXHR object so we can chain callbacks
785	return jQuery.ajax( options );
786};
787
788var LRM_Helper= {};
789
790LRM_Helper.setCookie = function(name,value,days) {
791	var expires = "";
792	if (days) {
793		var date = new Date();
794		date.setTime(date.getTime() + (days*24*60*60*1000));
795		expires = "; expires=" + date.toUTCString();
796	}
797	document.cookie = name + "=" + (value || "")  + expires + "; path=/";
798}
799
800LRM_Helper.getCookie = function(name) {
801	var nameEQ = name + "=";
802	var ca = document.cookie.split(';');
803	for(var i=0;i < ca.length;i++) {
804		var c = ca[i];
805		while (c.charAt(0)==' ') c = c.substring(1,c.length);
806		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
807	}
808	return null;
809}
810
811LRM_Helper.PasswordMeter = function( pass1, blacklistArr, pass2 ) {
812
813	function PasswordMeter() {
814
815		this.pass1 = pass1;
816		this.pass2 = pass2;
817		this.passLength = this.pass1.length;
818
819		this.tokens = {
820			letters: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
821			numbers: "0123456789",
822			specialChars: "!&%/()=?^*+][#><;:,._-|"
823		};
824		this.letters = this.tokens.letters.split( "" );
825		this.numbers = this.tokens.numbers.split( "" );
826		this.specialChars = this.tokens.specialChars.split( "" );
827	}
828
829	PasswordMeter.prototype = {
830		check: function() {
831			var self = this;
832
833			if ( self.pass2 && self.pass1 !== self.pass2 ) {
834				return 5;
835			}
836
837			var val = self.pass1;
838			var total = self.passLength;
839
840			var totalLetters = 0;
841			var totalNumbers = 0;
842			var totalSpecialChars = 0;
843
844			var tokens = val.split( "" );
845			var len = tokens.length;
846			var i;
847
848			for( i = 0; i < len; ++i ) {
849				var token = tokens[i];
850				if( self._isLetter( token ) ) {
851					totalLetters++;
852				} else if( self._isNumber( token ) ) {
853					totalNumbers++;
854				} else if( self._isSpecialChar( token ) ) {
855					totalSpecialChars++;
856				}
857
858			}
859			
860			var result = self._calculate( total, totalLetters, totalNumbers, totalSpecialChars );
861			return Math.round(result/2.5);
862		},
863		_isLetter: function( token ) {
864			var self = this;
865			if( self.letters.indexOf( token ) == -1 ) {
866				return false;
867			}
868			return true;
869		},
870		_isNumber: function( token ) {
871			var self = this;
872			if( self.numbers.indexOf( token ) == -1 ) {
873				return false;
874			}
875			return true;
876		},
877		_isSpecialChar: function( token ) {
878			var self = this;
879			if( self.specialChars.indexOf( token ) == -1 ) {
880				return false;
881			}
882			return true;
883		},
884		_calculate: function( total, letters, numbers, chars ) {
885			var level = 0;
886			var l = parseInt( letters, 10 );
887			var n = parseInt( numbers, 10 );
888			var c = parseInt( chars, 10 );
889
890			if( total < 7 ) {
891				level += 1;
892			}
893			if( total >= 7 ) {
894				level += 4;
895			}
896
897			if( l > 0 ) {
898				level += 1;
899			}
900
901			if( n > 0 ) {
902				level += 2;
903			}
904
905			if( c > 0 ) {
906				level += 3;
907			}
908
909			if ( jQuery.inArray( pass1, blacklistArr ) > 0 ) {
910				level = 5;
911			}
912
913			return level;
914		}
915	};
916
917	var pwdMeter = new PasswordMeter();
918	return pwdMeter.check();
919};
920// END

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.