1(function ($) { 2 'use strict'; 3 4 var boombox_login_form = $( 'form#boombox-login' ), 5 boombox_register_form = $( 'form#boombox-register' ), 6 boombox_forgot_password_form = $( 'form#boombox_forgot_password' ), 7 boombox_reset_password_form = $( 'form#boombox_reset_password' ), 8 boombox_login_form_captcha = null, 9 boombox_register_form_captcha = null; 10 11 /** 12 * Refresh Captcha Function 13 * 14 * @param selector 15 */ 16 var boombox_refresh_captcha = function( selector, type ){ 17 selector.find( '.captcha' ).attr( 'src', ajax_auth_object.captcha_file_url + '?' + Math.random() + '&type=' + type).closest( '.captcha-container').removeClass('loading'); 18 selector.find( '.bb-captcha-field' ).val( '' ); 19 } 20 21 /** 22 * Manually open authentication modal 23 * @param string type Modal type: Accepts: login, register, forgot-password 24 */ 25 var boombox_open_auth_popup = function( type ){ 26 switch( type ) { 27 case 'login': 28 var selector = '.js-authentication[href="#sign-in"]'; 29 break; 30 case 'register': 31 var selector = '.js-authentication[href="#registration"]'; 32 break; 33 case 'forgot-password': 34 case 'fp': 35 var selector = '.js-authentication[href="#forgot-password"]'; 36 break; 37 case 'reset-password': 38 case 'rp': 39 var selector = '.js-authentication[href="#reset-password"]'; 40 break; 41 default: 42 var selector = false; 43 } 44 45 if( selector && $( selector ).length > 0 ) { 46 $( selector ).first().trigger( 'click' ); 47 } 48 } 49 50 /** 51 * Check password strength 52 * @param passField 53 * @param confirmPassField 54 * @param strengthNode 55 * @param blacklistArray 56 */ 57 var boombox_check_pass_strength = function( passField, confirmPassField, strengthNode, blacklistArray ) { 58 var pass = passField.val(), 59 confirmPass = ( confirmPassField && confirmPassField.length ) ? confirmPassField.val() : pass, 60 strength, 61 strengthNodeText, 62 strengthNodeClass = 'bb-pass-strength', 63 passStrengthHtmlTemplate, 64 passStrengthPgBarHtmlTemplate = '<div class="pass-progress-bar"></div>'; 65 66 if ( ! pass ) { 67 strengthNode.empty(); 68 return; 69 } 70 71 blacklistArray = blacklistArray.concat( wp.passwordStrength.userInputBlacklist() ); 72 passStrengthHtmlTemplate = '<span class="pass-msg-title">'+ajax_auth_object.messages.password_strength+':</span>'; 73 74 strength = wp.passwordStrength.meter( pass, blacklistArray, confirmPass ); 75 76 switch ( strength ) { 77 case -1: 78 strengthNodeText = pwsL10n.unknown; 79 strengthNodeClass += ' bb-weak-pass'; 80 break; 81 case 2: 82 strengthNodeText = pwsL10n.bad; 83 strengthNodeClass += ' bb-weak-pass'; 84 break; 85 case 3: 86 strengthNodeText = pwsL10n.good; 87 strengthNodeClass += ' bb-good-pass'; 88 break; 89 case 4: 90 strengthNodeText = pwsL10n.strong; 91 strengthNodeClass += ' bb-strong-pass'; 92 break; 93 case 5: 94 strengthNodeText = ajax_auth_object.messages.password_mismatch; 95 passStrengthHtmlTemplate = ''; 96 passStrengthPgBarHtmlTemplate = ''; 97 strengthNodeClass += ' bb-mismatch-pass'; 98 break; 99 default: 100 strengthNodeText = pwsL10n['short']; 101 strengthNodeClass += ' bb-short-pass'; 102 } 103 104 strengthNode.html( '<div class="'+strengthNodeClass+'"><p class="pass-status-msg">'+passStrengthHtmlTemplate+'<span class="pass-msg-value"> '+strengthNodeText+'</span></p>'+passStrengthPgBarHtmlTemplate+'</div>' ) 105 } 106 107 /** 108 * Open auth popup 109 */ 110 if( ajax_auth_object.trigger_action ) { 111 if( '-1' != $.inArray( ajax_auth_object.trigger_action, [ 'login', 'register', 'forgot-password', 'fp', 'reset-password', 'rp' ] ) ) { 112 $( window ).on( 'load', function() { 113 boombox_open_auth_popup( ajax_auth_object.trigger_action ); 114 } ); 115 } 116 } 117 118 $.validator.addMethod("loginRegex", function(value, element) { 119 return this.optional(element) || /^[a-z0-9\-\_]+$/i.test(value); 120 } ); 121 122 /** 123 * Authentication Popup 124 */ 125var sign = $("#sign-in") 126var signbg = $(".light-modal-bg") 127$(document).on('click', '.js-authentication[href="#sign-in"]', function () { 128sign.addClass("light-modal-active"); 129sign.show("fast") 130signbg.show("fast") 131 }); 132 133 $('.js-authentication').lightModal({ 134 beforeShow: function(){ 135 var is_nsfw = $(this).hasClass('entry-nsfw'); 136 if ( boombox_login_form.length > 0 ) { 137 if( is_nsfw ){ 138 boombox_login_form.closest( '.authentication').addClass( 'is-nsfw-auth' ); 139 } 140 boombox_login_form[0].reset(); 141 boombox_login_form.find( '.error' ).removeClass( 'error' ); 142 boombox_login_form.find( '.status-msg' ).html( '' ); 143 if( ajax_auth_object.enable_login_captcha ) { 144 if( ajax_auth_object.captcha_type === 'image' ) { 145 boombox_refresh_captcha(boombox_login_form, boombox_login_form.attr('action')); 146 } else if( ajax_auth_object.captcha_type === 'google' ) { 147 var login_captcha_container = boombox_login_form.find( '#boombox-login-captcha' ); 148 if( boombox_login_form_captcha === null ) { 149 boombox_login_form_captcha = grecaptcha.render( login_captcha_container.attr('id'), { 150 sitekey : login_captcha_container.data('boombox-sitekey'), 151 theme : 'light' 152 }); 153 } else { 154 grecaptcha.reset( boombox_login_form_captcha ); 155 } 156 } 157 } 158 } 159 if ( boombox_register_form.length > 0 ) { 160 if( is_nsfw ){ 161 boombox_login_form.closest( '.authentication').addClass( 'is-nsfw-auth' ); 162 } 163 boombox_register_form[0].reset(); 164 boombox_check_pass_strength( $( '[name="signonpassword"]' ), false, $( '#bb-register-pass-strength-result' ), [] ); 165 boombox_register_form.find( '.error' ).removeClass( 'error' ); 166 boombox_register_form.find( '.status-msg' ).html( '' ); 167 if( ajax_auth_object.enable_registration_captcha ) { 168 if( ajax_auth_object.captcha_type === 'image' ) { 169 boombox_refresh_captcha(boombox_register_form, boombox_register_form.attr('action')); 170 } else if( ajax_auth_object.captcha_type === 'google' ) { 171 var register_captcha_container = boombox_register_form.find( '#boombox-register-captcha' ); 172 if( boombox_register_form_captcha === null ) { 173 boombox_register_form_captcha = grecaptcha.render( register_captcha_container.attr('id'), { 174 sitekey : register_captcha_container.data('boombox-sitekey'), 175 theme : 'light' 176 }); 177 } else { 178 grecaptcha.reset( boombox_register_form_captcha ); 179 } 180 } 181 } 182 } 183 if ( boombox_forgot_password_form.length > 0 ) { 184 boombox_forgot_password_form[0].reset(); 185 boombox_forgot_password_form.find( '.error' ).removeClass( 'error' ); 186 boombox_forgot_password_form.find( '.status-msg' ).html( '' ); 187 } 188 } 189 });
190 191 /** 192 * Client side form validation for "login" form 193 */ 194 if ( boombox_login_form.length > 0 ){ 195 boombox_login_form.validate( { 196 errorPlacement: function( error, element ) {} 197 } ); 198 199 } 200 201 /** 202 * Client side form validation for "registration" form 203 */ 204 if ( boombox_register_form.length > 0 ){ 205 boombox_register_form.validate( { 206 rules: { 207 signonusername: { 208 loginRegex: true 209 }, 210 signongdpr: { 211 required: true 212 }, 213 password2: { 214 equalTo: '#signonpassword' 215 } 216 }, 217 invalidHandler: function( event, validator ){ 218 console.log( $(this) ); 219 }, 220 errorPlacement: function( error, element ) {}, 221 highlight: function ( element, errorClass ) { 222 $( element ).addClass( errorClass ); 223 if ( $( element ).is( ':checkbox' ) ) { 224 $( element ).closest( 'div' ).addClass( 'bb-chkb-err' ); 225 } 226 }, 227 unhighlight: function ( element, errorClass ) { 228 $( element ).removeClass( errorClass ); 229 230 if ( $( element ).is( ':checkbox' ) ) { 231 $( element ).closest( 'div' ).removeClass( 'bb-chkb-err' ); 232 } 233 } 234 } ); 235 236 boombox_register_form.on( 'keyup', '[name="signonpassword"]', function(e){ 237 boombox_check_pass_strength( $( '[name="signonpassword"]' ), false, $( '#bb-register-pass-strength-result' ), [] ); 238 } ); 239 } 240 241 /** 242 * Client side form validation for "forgot password" form 243 */ 244 if ( boombox_forgot_password_form.length > 0 ){ 245 boombox_forgot_password_form.validate( { 246 errorPlacement: function( error, element ) {} 247 } ); 248 } 249 250 /** 251 * Client side form validation for "reset password" form 252 */ 253 if( boombox_reset_password_form.length ) { 254 boombox_reset_password_form.validate( { 255 rules: { 256 rppassword: { 257 required: true 258 }, 259 rpconfirmpassword: { 260 required: true, 261 equalTo: '[name="rppassword"]' 262 } 263 }, 264 errorPlacement: function( error, element ) {} 265 } ); 266 boombox_reset_password_form.on( 'keyup', '[name="rppassword"], [name="rpconfirmpassword"]', function(){ 267 boombox_check_pass_strength( $( '[name="rppassword"]' ), $( '[name="rpconfirmpassword"]' ), $( '#bb-rp-pass-strength-result' ), [] ); 268 } ); 269 } 270 271 /** 272 * Perform AJAX login on form submit 273 */ 274 boombox_login_form.on( 'submit', function (e) { 275 var _this = $( this ), 276 _status = _this.parent().find( 'p.status-msg' ); 277 278 if ( ! _this.valid() ) { 279 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( ajax_auth_object.invalid_message ).show(); 280 return false; 281 } 282 283 var user_email = _this.find( '[name="useremail"]' ).val(), 284 password = _this.find( '[name="password"]' ).val(), 285 rememberField = _this.find( '[name="rememberme"]' ), 286 security = _this.find( '[name="security"]' ).val(), 287 is_nsfw_auth = _this.closest( '.authentication').hasClass( 'is-nsfw-auth' ), 288 redirect_url = is_nsfw_auth ? ajax_auth_object.nsfw_redirect_url : ajax_auth_object.login_redirect_url, 289 data = { 290 action : 'boombox_ajax_login', 291 useremail : user_email, 292 password : password, 293 security : security, 294 redirect : redirect_url 295 }; 296 297 if( rememberField.length ) { 298 data.remember = rememberField.is( ':checked' ) ? 1 : 0; 299 } 300 301 if( ajax_auth_object.enable_login_captcha ) { 302 if( ajax_auth_object.captcha_type === 'image' ) { 303 data.captcha = _this.find('[name="captcha-code"]').val(); 304 } else if( ajax_auth_object.captcha_type === 'google' ) { 305 data.captcha = _this.find( '[name="g-recaptcha-response"]' ).val(); 306 } 307 } 308 309 _status.removeClass( 'msg-success msg-error' ).addClass( 'msg-info' ).html( ajax_auth_object.loading_message ).show(); 310 311 $.post( 312 ajax_auth_object.ajaxurl, 313 data, 314 function ( response ) { 315 if ( response.success == true ) { 316 _status.removeClass( 'msg-error msg-info' ).addClass( 'msg-success' ).html( response.data.message ); 317 window.location.href = redirect_url; 318 } else { 319 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( response.data.message ); 320 if( ajax_auth_object.enable_login_captcha ) { 321 if( ajax_auth_object.captcha_type === 'image' ) { 322 boombox_refresh_captcha(_this, _this.attr('action')); 323 } else if( ajax_auth_object.captcha_type === 'google' ) { 324 grecaptcha.reset( boombox_login_form_captcha ); 325 } 326 } 327 } 328 } 329 ); 330 e.preventDefault(); 331 });
332 333 /** 334 * Perform AJAX register on form submit 335 */ 336 boombox_register_form.on( 'submit', function (e) { 337 var _this = $( this ), 338 _status = _this.parent().find( 'p.status-msg' ); 339 340 if ( ! _this.valid() ) { 341 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( ajax_auth_object.invalid_message ).show(); 342 return false; 343 } 344 345 var username = _this.find( '[name="signonusername"]' ).val(), 346 useremail = _this.find( '[name="signonemail"]' ).val(), 347 password = _this.find( '[name="signonpassword"]' ).val(), 348 gdpr = _this.find( '[name="signongdpr"]' ), 349 security = _this.find( '[name="signonsecurity"]' ).val(), 350 is_nsfw_auth = _this.closest( '.authentication').hasClass( 'is-nsfw-auth' ), 351 redirect_url = is_nsfw_auth ? ajax_auth_object.nsfw_redirect_url : ajax_auth_object.register_redirect_url, 352 data = { 353 action : 'boombox_ajax_register', 354 username : username, 355 useremail : useremail, 356 password : password, 357 security : security, 358 redirect : redirect_url 359 } 360 361 if( gdpr.length ) { 362 data.gdpr = gdpr.is( ':checked' ) ? 1 : 0; 363 } 364 365 if( ajax_auth_object.enable_registration_captcha ) { 366 if( ajax_auth_object.captcha_type === 'image' ) { 367 data.captcha = _this.find( '[name="signoncaptcha"]' ).val(); 368 } else if( ajax_auth_object.captcha_type === 'google' ) { 369 data.captcha = _this.find( '[name="g-recaptcha-response"]' ).val(); 370 } 371 } 372 373 _status.removeClass( 'msg-success msg-error' ).addClass( 'msg-info' ).html( ajax_auth_object.loading_message ).show(); 374 375 $.post( 376 ajax_auth_object.ajaxurl, 377 data, 378 function ( response ) { 379 if ( response.success == true ) { 380 _status.removeClass( 'msg-error msg-info' ).addClass( 'msg-success' ).html( response.data.message ); 381 var _need_activation = response.data.need_activation || false; 382 if( _need_activation == false ) { 383 window.location.href = redirect_url; 384 } else { 385 _this[0].reset(); 386 } 387 }else{ 388 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( response.data.message ); 389 if( ajax_auth_object.enable_registration_captcha ) { 390 if( ajax_auth_object.captcha_type === 'image' ) { 391 boombox_refresh_captcha(_this, _this.attr('action')); 392 } else if( ajax_auth_object.captcha_type === 'google' ) { 393 grecaptcha.reset( boombox_register_form_captcha ); 394 } 395 } 396 } 397 } 398 ); 399 e.preventDefault(); 400 }); 401 402 /** 403 * Perform AJAX forget password on form submit 404 */ 405 boombox_forgot_password_form.on('submit', function (e) { 406 var _this = $( this ), 407 _status = _this.parent().find( 'p.status-msg' ); 408 409 if ( ! _this.valid() ) { 410 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( ajax_auth_object.invalid_message ).show(); 411 return false; 412 } 413 414 var userlogin = _this.find( '[name="userlogin"]' ).val(), 415 security = _this.find( '[name="forgotsecurity"]' ).val(); 416 417 _status.removeClass( 'msg-success msg-error' ).addClass( 'msg-info' ).html( ajax_auth_object.loading_message ).show(); 418 419 $.post( 420 ajax_auth_object.ajaxurl, 421 { 422 action : 'boombox_ajax_forgot_password', 423 userlogin : userlogin, 424 security : security 425 }, 426 function ( response ) { 427 if( response.success ) { 428 _status.removeClass( 'msg-error msg-info' ).addClass( 'msg-success' ).html( response.data.message ); 429 _this.remove(); 430 } else { 431 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( response.data.message ); 432 } 433 } 434 ); 435 e.preventDefault(); 436 return false; 437 438 });
439 440 /** 441 * Perform AJAX reset password on form submit 442 */ 443 boombox_reset_password_form.on( 'submit', function (e) { 444 var _this = $( this ), 445 _status = _this.parent().find( 'p.status-msg' ), 446 userlogin, 447 password, 448 confirm, 449 security; 450 451 if ( ! _this.valid() ) { 452 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( ajax_auth_object.invalid_message ).show(); 453 return false; 454 } 455 456 userlogin = _this.find( '[name="rpuserlogin"]' ).val(); 457 password = _this.find( '[name="rppassword"]' ).val(); 458 confirm = _this.find( '[name="rpconfirmpassword"]' ).val(); 459 security = _this.find( '[name="resetpasswordsecurity"]' ).val(); 460 461 _status.removeClass( 'msg-success msg-error' ).addClass( 'msg-info' ).html( ajax_auth_object.loading_message ).show(); 462 463 $.post( 464 ajax_auth_object.ajaxurl, 465 { 466 action : 'boombox_ajax_reset_password', 467 userlogin : userlogin, 468 password : password, 469 confirm : confirm, 470 security : security 471 }, 472 function ( response ) { 473 if( response.success ) { 474 _status.removeClass( 'msg-error msg-info' ).addClass( 'msg-success' ).html( response.data.message ); 475 window.location.href = ajax_auth_object.reset_password_redirect_url; 476 } else { 477 _status.removeClass( 'msg-success msg-info' ).addClass( 'msg-error' ).html( response.data.message ); 478 } 479 } 480 ); 481 e.preventDefault(); 482 return false; 483 484 } ); 485 486 /** 487 * Refresh Captcha 488 */ 489 $( 'body' ).on( 'click', '.auth-refresh-captcha', function(e){ 490 var form = $( this ).closest( 'form' ), 491 type = form.attr('action'); 492 boombox_refresh_captcha( form, type ); 493 return false; 494 } ); 495 496})(jQuery);
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.