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.