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.