PageSourceSearch

https://cdn.ricochet.com/app/plugins/ajax-login-and-registration-m…/free/assets/lrm-core.js?ver=56

js ricochet.com collected 2026-10-02 02:28:09 UTC 30,273 bytes, 913 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').html(response.data.message).addClass('is-visible');
465								$form.find(".lrm-form-message").removeClass("lrm-is-error").html("");
466
467							}
468						}
469
470						if (response.data.custom_html && response.data.custom_html_selector) {
471							$(response.data.custom_html_selector).html(response.data.custom_html);
472						}
473					}
474
475					// $form.data("action") for get
476					$(document).triggerHandler('lrm/ajax_response', [response, $form, $form.data("action")]);
477
478					if ( window.is_lrm_testing ) {
479						window.lrm_response = response;
480						return;
481					}
482
483					//console.log(response);
484
485					// If user Logged in After Login or Registration
486					// If Email Verify after Registration enabled - we skip this
487					if (response.success && response.data.logged_in) {
488						LRM.is_user_logged_in = true;
489						$(document).triggerHandler('lrm_user_logged_in', [response, $form, $form.data("action")]);
490
491						if ( "reload" == response.data.action ) {
492							window.location.reload( true );
493						} else if ( "hide" == response.data.action ) {
494							$(".lrm-user-modal").removeClass('is-visible');
495							$("body").addClass("logged-in");
496						}
497					}
498
499					$(document).triggerHandler('lrm_pro/maybe_refresh_recaptcha');
500				},
501				error: function (jqXHR, textStatus, errorThrown) {
502					$form.find(".lrm-button-loader").remove();
503					$form.removeClass("--is-submitting");
504
505					if ( jqXHR.responseText.indexOf("GF_AJAX_POSTBACK") > 0 ) {
506						$(document).triggerHandler('lrm_gf_ajax', [jqXHR.responseText, jqXHR.status, $form, $form.data("action")]);
507						console.log('GF_AJAX_POSTBACK found');
508						return;
509					}
510
511					if ( 503 === jqXHR.status && jqXHR.responseText.indexOf("ERROR") > 0 ) {
512						LRM_Form.set_message( $form, jqXHR.responseText, false );
513					} else {
514						alert("An error occurred, please contact with administrator... \n\rFor more details look at the console (F12 or Ctrl+Shift+I, Console tab)!");
515					}
516
517					if (window.console == undefined) {
518						return;
519					}
520					console.log('statusCode:', jqXHR.status);
521					console.log('errorThrown:', errorThrown);
522					console.log('responseText:', jqXHR.responseText);
523				}
524
525			});
526
527			return false;
528		}
529
530		$(document).on('submit', '.js-lrm-form', window.lrm_submit_form);
531
532		/**
533		 * @since 1.51
534		 */
535		$( 'body' ).on( 'keyup', '#lrm-password1,#lrm-password2', function( event ) {
536			var passwordStrength = LRM.checkPasswordStrength(
537				  $( "#lrm-password1" ),         // First password field
538				  null,         // First password field
539				  $( "#lrm-password1" ).parent().parent().find(".lrm-pass-strength-result")           // Strength meter
540			);
541
542			if (typeof passwordStrength === "undefined" || passwordStrength === null) {
543				return;
544			}
545
546			if ( "yes_allow_weak" == LRM.validate_password_strength ) {
547				if (!passwordStrength || passwordStrength <= 2) {
548					$(".pw-weak").show()
549					$(".pw-checkbox").attr("required", "required");
550				} else {
551					$(".pw-weak").hide()
552					$(".pw-checkbox").attr("required", false);
553				}
554			}
555		});
556
557		setTimeout(function () {
558			if ( $('#lrm-password1,#lrm-password2').length > 0 ) {
559				$('#lrm-password1,#lrm-password2').trigger('keyup');
560			}
561		}, 500);
562
563	}
564
565	// ajaxSetup is global, but we use it to ensure JSON is valid once returned.
566	$.ajaxSetup({
567		dataFilter: function (raw_response, dataType) {
568			// We only want to work with JSON
569			if ('json' !== dataType || !raw_response) {
570				return raw_response;
571			}
572
573			if (lrm_is_valid_json(raw_response)) {
574				return raw_response;
575			} else {
576				// Attempt to fix the malformed JSON
577				var maybe_valid_json = raw_response.match(/{"success.*}/);
578
579				if (null === maybe_valid_json) {
580					console.log('Unable to fix malformed JSON');
581				} else if (lrm_is_valid_json(maybe_valid_json[0])) {
582					console.log('Fixed malformed JSON. Original:');
583					console.log(raw_response);
584					raw_response = maybe_valid_json[0];
585				} else {
586					console.log('Unable to fix malformed JSON');
587				}
588			}
589
590			return raw_response;
591		}
592	});
593
594
595	function lrm_is_valid_json(raw_json) {
596		try {
597			var json = $.parseJSON(raw_json);
598
599			return (json && 'object' === typeof json);
600		} catch (e) {
601			return false;
602		}
603	}
604
605	window.LRM_Form = {
606		set_message: function($form, message_html, is_error) {
607			var $message = $form.find(".lrm-form-message");
608
609			if ( 0 === $message.length && $form.hasClass("signup-form") ) {
610				$form.prepend( '<div class="lrm-form-message"></div>' );
611				$message = $form.find(".lrm-form-message");
612			}
613
614			// Tweak in case this selector is Missing
615			if ( 0 !== $message.length ) {
616				$message.html(message_html);
617			} else {
618				alert(message_html);
619			}
620
621			var modal_is_visible = $(".lrm-user-modal").hasClass('is-visible');
622
623			var element_to_scroll = modal_is_visible ? ".lrm-user-modal" : "html, body";
624
625			var error_scroll_offset = $(document).triggerHandler("lrm/form/set_message_scroll_offset", [$form, modal_is_visible, $message]);
626			if ( error_scroll_offset === undefined ) {
627				error_scroll_offset = modal_is_visible ? 25 : $message.offset().top - 15;
628			}
629
630			if ( "no" !== error_scroll_offset ) {
631				$(element_to_scroll).animate({
632					scrollTop: error_scroll_offset
633				}, 1500);
634			}
635
636			if ( is_error ) {
637				$message.addClass("lrm-is-error");
638			} else {
639				$message.removeClass("lrm-is-error");
640			}
641		}
642	};
643
644	/**
645	 * https://code.tutsplus.com/articles/using-the-included-password-strength-meter-script-in-wordpress--wp-34736
646	 *
647	 * @param $pass1
648	 * @param $strengthResult
649	 * @returns {*}
650	 */
651	LRM.checkPasswordStrength = function( $pass1, $pass2, $strengthResult ) {
652
653		return LRM.loadPasswordMeter(function() {
654			var pass1 = $pass1.val();
655			if ( !pass1 ) {
656				$strengthResult.data('status','empty');
657				return;
658			}
659
660			if ( "no" === LRM.validate_password_strength ) {
661				if ( $pass2 && $pass2.val().trim() && $pass2.val() !== $pass1.val() ) {
662					$strengthResult.attr('data-status','short').html(LRM.l10n.passwords_is_mismatch);
663				} else {
664					$strengthResult.attr('data-status', null);
665				}
666				return null;
667			}
668
669			if (!$pass2) {
670				var pass2 = pass1;
671			} else {
672				var pass2 = $pass2.val();
673			}
674
675			//$strengthResult.removeClass('short bad good strong');
676
677			// Extend our blacklist array with those from the inputs & site data
678			var blacklistArray = ["querty", "password", "P@ssword1", "132", "123"]
679
680			// Get the password strength
681			var strength = 0;
682			if ( "lrm" === LRM.password_strength_lib ) {
683				strength = LRM_Helper.PasswordMeter(pass1, blacklistArray, pass2);
684			} else {
685				blacklistArray = blacklistArray.concat(wp.passwordStrength.userInputBlacklist());
686				strength = wp.passwordStrength.meter(pass1, blacklistArray, pass2);
687			}
688
689			// Add the strength meter results
690			switch (strength) {
691
692				case 2:
693					$strengthResult.attr('data-status','bad').html(LRM.l10n.password_is_bad);
694					break;
695
696				case 3:
697					$strengthResult.attr('data-status','good').html(LRM.l10n.password_is_good);
698					break;
699
700				case 4:
701					$strengthResult.attr('data-status','strong').html(LRM.l10n.password_is_strong);
702					break;
703
704				case 5:
705					if ($pass2) {
706						$strengthResult.attr('data-status','short').html(LRM.l10n.passwords_is_mismatch);
707						break;
708					}
709
710				default:
711					$strengthResult.attr('data-status','short').html(LRM.l10n.password_is_short);
712
713			}
714
715			//console.log( "Pass strength: ", strength );
716
717			return strength;
718		});
719	}
720
721	LRM.passwordMeterIsLoaded = false;
722	LRM.passwordMeterIsLoading = false;
723	LRM.loadPasswordMeter = function ( callback ) {
724		if ( "lrm" === LRM.password_strength_lib || LRM.passwordMeterIsLoaded ) {
725			return callback();
726		}
727		// From "wp-admin/js/password-strength-meter.min.js?ver=5.0.4"
728		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);
729
730		LRM.passwordMeterIsLoading = true;
731
732		// Usage
733		$.cachedScript( LRM.password_zxcvbn_js_src ).done(function( script, textStatus ) {
734			LRM.passwordMeterIsLoaded = true;
735			callback();
736		});
737	}
738
739//});
740})(jQuery);
741
742
743//credits http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
744jQuery.fn.putCursorAtEnd = function () {
745	return this.each(function () {
746		// If this function exists...
747		if (this.setSelectionRange) {
748			// ... then use it (Doesn't work in IE)
749			// Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.
750			var len = jQuery(this).val().length * 2;
751			jQuery(this).trigger('focus');
752			this.setSelectionRange(len, len);
753		} else {
754			// ... otherwise replace the contents with itself
755			// (Doesn't work in Google Chrome)
756			jQuery(this).val(jQuery(this).val());
757		}
758	});
759};
760
761/**
762 * @since 2.02
763 *
764 * @param url
765 * @param options
766 * @returns {*}
767 */
768jQuery.cachedScript = function( url, options ) {
769	// Allow user to set any option except for dataType, cache, and url
770	options = jQuery.extend( options || {}, {
771		dataType: "script",
772		cache: true,
773		url: url
774	});
775
776	// Use $.ajax() since it is more flexible than $.getScript
777	// Return the jqXHR object so we can chain callbacks
778	return jQuery.ajax( options );
779};
780
781var LRM_Helper= {};
782
783LRM_Helper.setCookie = function(name,value,days) {
784	var expires = "";
785	if (days) {
786		var date = new Date();
787		date.setTime(date.getTime() + (days*24*60*60*1000));
788		expires = "; expires=" + date.toUTCString();
789	}
790	document.cookie = name + "=" + (value || "")  + expires + "; path=/";
791}
792
793LRM_Helper.getCookie = function(name) {
794	var nameEQ = name + "=";
795	var ca = document.cookie.split(';');
796	for(var i=0;i < ca.length;i++) {
797		var c = ca[i];
798		while (c.charAt(0)==' ') c = c.substring(1,c.length);
799		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
800	}
801	return null;
802}
803
804LRM_Helper.PasswordMeter = function( pass1, blacklistArr, pass2 ) {
805
806	function PasswordMeter() {
807
808		this.pass1 = pass1;
809		this.pass2 = pass2;
810		this.passLength = this.pass1.length;
811
812		this.tokens = {
813			letters: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
814			numbers: "0123456789",
815			specialChars: "!&%/()=?^*+][#><;:,._-|"
816		};
817		this.letters = this.tokens.letters.split( "" );
818		this.numbers = this.tokens.numbers.split( "" );
819		this.specialChars = this.tokens.specialChars.split( "" );
820	}
821
822	PasswordMeter.prototype = {
823		check: function() {
824			var self = this;
825
826			if ( self.pass2 && self.pass1 !== self.pass2 ) {
827				return 5;
828			}
829
830			var val = self.pass1;
831			var total = self.passLength;
832
833			var totalLetters = 0;
834			var totalNumbers = 0;
835			var totalSpecialChars = 0;
836
837			var tokens = val.split( "" );
838			var len = tokens.length;
839			var i;
840
841			for( i = 0; i < len; ++i ) {
842				var token = tokens[i];
843				if( self._isLetter( token ) ) {
844					totalLetters++;
845				} else if( self._isNumber( token ) ) {
846					totalNumbers++;
847				} else if( self._isSpecialChar( token ) ) {
848					totalSpecialChars++;
849				}
850
851			}
852			
853			var result = self._calculate( total, totalLetters, totalNumbers, totalSpecialChars );
854			return Math.round(result/2.5);
855		},
856		_isLetter: function( token ) {
857			var self = this;
858			if( self.letters.indexOf( token ) == -1 ) {
859				return false;
860			}
861			return true;
862		},
863		_isNumber: function( token ) {
864			var self = this;
865			if( self.numbers.indexOf( token ) == -1 ) {
866				return false;
867			}
868			return true;
869		},
870		_isSpecialChar: function( token ) {
871			var self = this;
872			if( self.specialChars.indexOf( token ) == -1 ) {
873				return false;
874			}
875			return true;
876		},
877		_calculate: function( total, letters, numbers, chars ) {
878			var level = 0;
879			var l = parseInt( letters, 10 );
880			var n = parseInt( numbers, 10 );
881			var c = parseInt( chars, 10 );
882
883			if( total < 7 ) {
884				level += 1;
885			}
886			if( total >= 7 ) {
887				level += 4;
888			}
889
890			if( l > 0 ) {
891				level += 1;
892			}
893
894			if( n > 0 ) {
895				level += 2;
896			}
897
898			if( c > 0 ) {
899				level += 3;
900			}
901
902			if ( jQuery.inArray( pass1, blacklistArr ) > 0 ) {
903				level = 5;
904			}
905
906			return level;
907		}
908	};
909
910	var pwdMeter = new PasswordMeter();
911	return pwdMeter.check();
912};
913// 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.