1function um_sanitize_value( value, el ) { 2 var element = document.createElement( 'div' ); 3 element.innerText = value; 4 var sanitized_value = element.innerHTML; 5 if ( el ) { 6 jQuery( el ).val( sanitized_value ); 7 } 8 9 return sanitized_value; 10} 11 12function um_unsanitize_value( input ) { 13 var e = document.createElement( 'textarea' ); 14 e.innerHTML = input; 15 // handle case of empty input 16 return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 17} 18 19jQuery(document).ready(function() { 20 21 jQuery( document.body ).on('click', '.um-dropdown a.real_url', function() { 22 window.location = jQuery(this).attr('href'); 23 }); 24 25 jQuery( document.body ).on( 'click', '.um-trigger-menu-on-click', function() { 26 var menu = jQuery(this).find('.um-dropdown'); 27 UM.dropdown.show( menu ); 28 return false; 29 }); 30 31 jQuery( document.body ).on('click', '.um-dropdown-hide', function() { 32 UM.dropdown.hideAll(); 33 return false; 34 }); 35 36 jQuery( document.body ).on('click', 'a.um-manual-trigger', function() { 37 var child = jQuery(this).attr('data-child'); 38 var parent = jQuery(this).attr('data-parent'); 39 jQuery(this).parents( parent ).find( child ).trigger('click'); 40 UM.dropdown.hideAll(); 41 return false; 42 }); 43 44 jQuery('.um-s1,.um-s2').css({'display':'block'}); 45 46 /** 47 * Unselect empty option if something is selected 48 * 49 * @since 2.1.16 50 * @param {object} e 51 * @returns {undefined} 52 */ 53 function unselectEmptyOption( e ) { 54 var $element = jQuery( e.currentTarget ); 55 var $selected = $element.find(':selected'); 56 57 if ( $selected.length > 1 ) { 58 $selected.each( function ( i, option ) { 59 if ( option.value === '' ) { 60 option.selected = false; 61 $element.trigger( 'change' ); 62 } 63 }); 64 } 65 } 66 67 if ( typeof( jQuery.fn.select2 ) === 'function' ) { 68 jQuery(".um-s1").each( function( e ) { 69 var obj = jQuery(this); 70 71 obj.select2({ 72 allowClear: true, 73 dropdownParent: obj.parent() 74 }).on( 'change', unselectEmptyOption ); 75 } ); 76 77 jQuery(".um-s2").each( function( e ) { 78 var obj = jQuery(this); 79 80 // fix https://github.com/ultimatemember/ultimatemember/issues/941 81 // using .um-custom-shortcode-tab class as temporarily solution 82 var atts = {}; 83 if ( obj.parents('.um-custom-shortcode-tab').length ) { 84 atts = { 85 allowClear: false 86 }; 87 } else { 88 atts = { 89 allowClear: false, 90 minimumResultsForSearch: 10, 91 dropdownParent: obj.parent() 92 }; 93 } 94 obj.select2( atts ).on( 'change', unselectEmptyOption ); 95 } ); 96 97 jQuery(".um-s3").each( function( e ) { 98 var obj = jQuery(this); 99 100 obj.select2({ 101 allowClear: false, 102 minimumResultsForSearch: -1, 103 dropdownParent: obj.parent() 104 }).on( 'change', unselectEmptyOption ); 105 } ); 106 } 107 108 if ( typeof( jQuery.fn.um_raty ) === 'function' ) { 109 jQuery('.um-rating').um_raty({ 110 half: false, 111 starType: 'i', 112 number: function() { 113 return jQuery(this).attr('data-number'); 114 }, 115 score: function() { 116 return jQuery(this).attr('data-score'); 117 }, 118 scoreName: function() { 119 return jQuery(this).attr('data-key'); 120 }, 121 hints: false, 122 click: function( score, evt ) { 123 um_live_field = this.id; 124 um_live_value = score; 125 um_apply_conditions( jQuery(this), false ); 126 } 127 }); 128 129 jQuery('.um-rating-readonly').um_raty({ 130 half: false, 131 starType: 'i', 132 number: function() { 133 return jQuery(this).attr('data-number'); 134 }, 135 score: function() { 136 return jQuery(this).attr('data-score'); 137 }, 138 scoreName: function() { 139 return jQuery(this).attr('data-key'); 140 }, 141 hints: false, 142 readOnly: true 143 }); 144 } 145 146 jQuery(document).on('change', '.um-field-area input[type="radio"]', function() { 147 var field = jQuery(this).parents('.um-field-area'); 148 var this_field = jQuery(this).parents('label'); 149 field.find('.um-field-radio').removeClass('active'); 150 field.find('.um-field-radio').find('i').removeAttr('class').addClass('um-icon-android-radio-button-off'); 151 this_field.addClass('active'); 152 this_field.find('i').removeAttr('class').addClass('um-icon-android-radio-button-on'); 153 }); 154 155 jQuery(document).on('change', '.um-field-area input[type="checkbox"]', function() { 156 var this_field = jQuery(this).parents('label'); 157 if ( this_field.hasClass('active') ) { 158 this_field.removeClass('active'); 159 this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline-blank'); 160 } else { 161 this_field.addClass('active'); 162 this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline'); 163 } 164 }); 165 166 jQuery(document.body).on('click', '.um-single-image-preview a.cancel', function(e) { 167 e.preventDefault(); 168 169 let isModal = false;
170 if ( jQuery(this).parents('.um-modal-body').length > 0 ) { 171 isModal = true; 172 } 173 174 let parent, mode, src, args; 175 176 if ( ! isModal ) { 177 parent = jQuery(this).parents('.um-field'); 178 mode = parent.data('mode'); 179 src = parent.find('.um-single-image-preview img').attr('src'); 180 181 let filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val(); 182 183 args = { 184 data: { 185 mode: mode, 186 filename: filename, 187 src: src, 188 nonce: um_scripts.nonce 189 }, 190 success: function() { 191 parent.find('.um-single-image-preview img').replaceWith('<img src="" alt="" />'); 192 parent.find('.um-single-image-preview').removeAttr('style').hide(); 193 parent.find('.um-btn-auto-width').html( parent.data('upload-label') ); 194 parent.find('input[type="hidden"]').val( 'empty_file' ); 195 } 196 }; 197 198 if ( mode !== 'register' ) { 199 args.data.user_id = jQuery(this).parents('form').find('#user_id').val(); 200 } 201 } else { 202 parent = jQuery(this).parents('.um-modal-body'); 203 mode = parent.find('.um-single-image-upload').data('set_mode'); 204 src = parent.find('.um-single-image-preview img').attr('src'); 205 206 args = { 207 data: { 208 src: src, 209 mode: mode, 210 nonce: um_scripts.nonce 211 }, 212 success: function() { 213 wp.hooks.doAction( 'um_after_removing_preview' ); 214 215 parent.find('.um-single-image-preview img').replaceWith('<img src="" alt="" />'); // required replaceWith for flushing DOM before re-init Cropper. 216 parent.find('.um-single-image-preview').removeAttr('style').hide(); 217 parent.find('.ajax-upload-dragdrop').show(); 218 parent.find('.um-modal-btn.um-finish-upload').addClass( 'disabled' ); 219 220 um_modal_responsive(); 221 } 222 }; 223 } 224 225 wp.ajax.send( 'um_remove_file', args ); 226 }); 227 228 jQuery(document.body).on('click', '.um-single-file-preview a.cancel', function(e) { 229 e.preventDefault(); 230 231 let isModal = false; 232 if ( jQuery(this).parents('.um-modal-body').length > 0 ) { 233 isModal = true; 234 } 235 236 let parent, mode, src, args; 237 238 if ( ! isModal ) { 239 parent = jQuery(this).parents('.um-field'); 240 src = parent.find('.um-single-fileinfo a').attr('href'); 241 mode = parent.data('mode'); 242 243 let filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val(); 244 245 args = { 246 data: { 247 mode: mode, 248 filename: filename, 249 src: src, 250 nonce: um_scripts.nonce 251 }, 252 success: function() { 253 parent.find('.um-single-file-preview').hide(); 254 parent.find('.um-btn-auto-width').html( parent.data('upload-label') ); 255 parent.find('input[type=hidden]').val( 'empty_file' ); 256 } 257 }; 258 259 if ( mode !== 'register' ) { 260 args.data.user_id = jQuery(this).parents('form' ).find( '#user_id' ).val(); 261 } 262 } else { 263 parent = jQuery(this).parents('.um-modal-body'); 264 src = parent.find('.um-single-fileinfo a').attr('href'); 265 mode = parent.find('.um-single-file-upload').data('set_mode'); 266 267 args = { 268 data: { 269 src: src, 270 mode: mode, 271 nonce: um_scripts.nonce 272 }, 273 success: function() { 274 parent.find('.um-single-file-preview').hide(); 275 parent.find('.ajax-upload-dragdrop').show(); 276 parent.find('.um-modal-btn.um-finish-upload').addClass('disabled'); 277 um_modal_responsive(); 278 } 279 }; 280 } 281 wp.ajax.send( 'um_remove_file', args ); 282 }); 283 284 // @todo deprecate 285 jQuery(document).on('click', '.um-field-group-head:not(.disabled)', function() { 286 var field = jQuery(this).parents('.um-field-group'); 287 var limit = field.data('max_entries'); 288 289 if ( field.find('.um-field-group-body').is(':hidden')){ 290 field.find('.um-field-group-body').show(); 291 } else { 292 field.find('.um-field-group-body:first').clone().appendTo( field ); 293 } 294 295 var increase_id = 0; 296 field.find('.um-field-group-body').each(function(){ 297 increase_id++; 298 jQuery(this).find('input').each(function(){ 299 var input = jQuery(this); 300 input.attr('id', input.data('key') + '-' + increase_id ); 301 input.attr('name', input.data('key') + '-' + increase_id ); 302 input.parent().parent().find('label').attr('for', input.data('key') + '-' + increase_id ); 303 }); 304 }); 305 306 if ( limit > 0 && field.find('.um-field-group-body').length == limit ) { 307 308 jQuery(this).addClass('disabled'); 309 310 } 311 }); 312 // @todo deprecate 313 jQuery(document).on('click', '.um-field-group-cancel', function( e ) { 314 e.preventDefault(); 315 var field = jQuery(this).parents('.um-field-group'); 316 317 var limit = field.data('max_entries'); 318 319 if ( field.find('.um-field-group-body').length > 1 ) { 320 jQuery(this).parents('.um-field-group-body').remove(); 321 } else { 322 jQuery(this).parents('.um-field-group-body').hide(); 323 } 324 325 if ( limit > 0 && field.find('.um-field-group-body').length < limit ) { 326 field.find('.um-field-group-head').removeClass('disabled'); 327 } 328 329 return false;
330 }); 331 332 333 jQuery( document.body ).on( 'click', '.um-ajax-paginate', function( e ) { 334 e.preventDefault(); 335 336 var obj = jQuery(this); 337 var parent = obj.parent(); 338 parent.addClass( 'loading' ); 339 340 var pages = obj.data('pages')*1; 341 var next_page = obj.data('page')*1 + 1; 342 343 var hook = obj.data('hook'); 344 345 if ( 'um_load_posts' === hook ) { 346 347 jQuery.ajax({ 348 url: wp.ajax.settings.url, 349 type: 'post', 350 data: { 351 action: 'um_ajax_paginate_posts', 352 author: jQuery(this).data('author'), 353 page: next_page, 354 nonce: um_scripts.nonce 355 }, 356 complete: function() { 357 parent.removeClass( 'loading' ); 358 }, 359 success: function( data ) { 360 parent.before( data ); 361 if ( next_page === pages ) { 362 parent.remove(); 363 } else { 364 obj.data( 'page', next_page ); 365 } 366 } 367 }); 368 } else if ( 'um_load_comments' === hook ) { 369 370 jQuery.ajax({ 371 url: wp.ajax.settings.url, 372 type: 'post', 373 data: { 374 action: 'um_ajax_paginate_comments', 375 user_id: jQuery(this).data('user_id'), 376 page: next_page, 377 nonce: um_scripts.nonce 378 }, 379 complete: function() { 380 parent.removeClass( 'loading' ); 381 }, 382 success: function( data ) { 383 parent.before( data ); 384 if ( next_page === pages ) { 385 parent.remove(); 386 } else { 387 obj.data( 'page', next_page ); 388 } 389 } 390 }); 391 } else { 392 var args = jQuery(this).data('args'); 393 var container = jQuery(this).parents('.um.um-profile.um-viewing').find('.um-ajax-items'); 394 395 jQuery.ajax({ 396 url: wp.ajax.settings.url, 397 type: 'post', 398 data: { 399 action: 'um_ajax_paginate', 400 hook: hook, 401 args: args, 402 nonce: um_scripts.nonce 403 }, 404 complete: function() { 405 parent.removeClass( 'loading' ); 406 }, 407 success: function(data){ 408 parent.remove(); 409 container.append( data ); 410 } 411 }); 412 } 413 }); 414 415 416 jQuery(document).on('click', '.um-ajax-action', function( e ) { 417 e.preventDefault(); 418 var hook = jQuery(this).data('hook'); 419 var user_id = jQuery(this).data('user_id'); 420 var args = jQuery(this).data('args'); 421 422 if ( jQuery(this).data('js-remove') ){ 423 jQuery(this).parents('.'+jQuery(this).data('js-remove')).fadeOut('fast'); 424 } 425 426 jQuery.ajax({ 427 url: wp.ajax.settings.url, 428 type: 'post', 429 data: { 430 action: 'um_muted_action', 431 hook: hook, 432 user_id: user_id, 433 arguments: args, 434 nonce: um_scripts.nonce 435 }, 436 success: function(data){ 437 438 } 439 }); 440 return false; 441 }); 442 443 jQuery( document.body ).on('click', '#um-search-button', function() { 444 var action = jQuery(this).parents('.um-search-form').data('members_page'); 445 446 var search_keys = []; 447 jQuery(this).parents('.um-search-form').find('input[name="um-search-keys[]"]').each( function() { 448 search_keys.push( jQuery(this).val() ); 449 }); 450 451 var search = jQuery(this).parents('.um-search-form').find('.um-search-field').val(); 452 453 var url; 454 if ( search === '' ) { 455 url = action; 456 } else { 457 var query = '?'; 458 for ( var i = 0; i < search_keys.length; i++ ) { 459 query += search_keys[i] + '=' + search; 460 if ( i !== search_keys.length - 1 ) { 461 query += '&'; 462 } 463 } 464 465 url = action + query; 466 } 467 window.location = url; 468 }); 469 470 //make search on Enter click 471 jQuery( document.body ).on( 'keypress', '.um-search-field', function(e) { 472 if ( e.which === 13 ) { 473 var action = jQuery(this).parents('.um-search-form').data('members_page'); 474 475 var search_keys = []; 476 jQuery(this).parents('.um-search-form').find('input[name="um-search-keys[]"]').each( function() { 477 search_keys.push( jQuery(this).val() ); 478 }); 479 480 var search = jQuery(this).val(); 481 482 var url; 483 if ( search === '' ) { 484 url = action; 485 } else { 486 var query = '?'; 487 for ( var i = 0; i < search_keys.length; i++ ) { 488 query += search_keys[i] + '=' + search; 489 if ( i !== search_keys.length - 1 ) { 490 query += '&'; 491 } 492 } 493 494 url = action + query; 495 } 496 window.location = url; 497 } 498 }); 499 500 jQuery('.um-form input[class="um-button"][type="submit"]').prop('disabled', false); 501 502 jQuery(document).one('click', '.um:not(.um-account) .um-form input[class="um-button"][type="submit"]:not(.um-has-recaptcha)', function() { 503 jQuery(this).attr('disabled','disabled'); 504 jQuery(this).parents('form').trigger('submit'); 505 }); 506 507 508 var um_select_options_cache = {}; 509 510 /** 511 * Find all select fields with parent select fields 512 */ 513 jQuery('select[data-um-parent]').each( function() { 514 515 var me = jQuery(this); 516 var parent_option = me.data('um-parent'); 517 var um_ajax_source = me.data('um-ajax-source'); 518 519 me.attr('data-um-init-field', true ); 520 521 jQuery(document).on('change','select[name="' + parent_option + '"]',function() { 522 var parent = jQuery(this); 523 var form_id = parent.closest( 'form' ).find( 'input[type="hidden"][name="form_id"]' ).val(); 524 525 var arr_key; 526 if ( me.attr( 'data-member-directory' ) === 'yes' ) { 527 var directory = parent.parents('.um-directory'); 528 arr_key = um_get_data_for_directory( directory, 'filter_' + parent_option ); 529 if ( typeof arr_key != 'undefined' ) { 530 arr_key = arr_key.split('||'); 531 } else { 532 arr_key = ''; 533 } 534 } else { 535 arr_key = parent.val(); 536 } 537 538 if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] !== 'object' ) { 539 540 if ( typeof( me.um_wait ) === 'undefined' || me.um_wait === false ) { 541 me.um_wait = true; 542 } else { 543 return; 544 } 545 546 jQuery.ajax({ 547 url: wp.ajax.settings.url, 548 type: 'post', 549 data: { 550 action: 'um_select_options', 551 parent_option_name: parent_option, 552 parent_option: arr_key, 553 child_callback: um_ajax_source, 554 child_name: me.attr('name'), 555 members_directory: me.attr('data-member-directory'), 556 form_id: form_id, 557 nonce: um_scripts.nonce 558 }, 559 success: function( data ) { 560 if ( data.status === 'success' && arr_key !== '' ) { 561 um_select_options_cache[ arr_key ] = data; 562 um_field_populate_child_options( me, data, arr_key ); 563 } 564 565 if ( typeof data.debug !== 'undefined' ) { 566 console.log( data ); 567 } 568 569 me.um_wait = false;
570 }, 571 error: function( e ) { 572 console.log( e ); 573 me.um_wait = false; 574 } 575 }); 576 577 } 578 579 if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] == 'object' ) { 580 setTimeout( um_field_populate_child_options, 10, me, um_select_options_cache[ arr_key ], arr_key ); 581 } 582 583 if ( typeof arr_key != 'undefined' || arr_key === '' ) { 584 me.find('option[value!=""]').remove(); 585 me.val('').trigger('change'); 586 } 587 588 }); 589 590 jQuery('select[name="' + parent_option + '"]').trigger('change'); 591 592 }); 593 594 595 /** 596 * Populates child options and cache ajax response 597 * 598 * @param me 599 * @param data 600 * @param arr_key 601 */ 602 function um_field_populate_child_options( me, data, arr_key ) { 603 var directory = me.parents('.um-directory'); 604 var child_name = me.attr('name'); 605 me.find('option[value!=""]').remove(); 606 607 if ( ! me.hasClass('um-child-option-disabled') ) { 608 me.prop('disabled', false); 609 } 610 611 var arr_items = [], 612 search_get = ''; 613 614 if ( data.post.members_directory === 'yes' ) { 615 arr_items.push({id: '', text: '', selected: 1}); 616 } 617 jQuery.each( data.items, function(k,v){ 618 arr_items.push({id: k, text: v, selected: (v === search_get)}); 619 }); 620 621 me.select2('destroy'); 622 if ( me.hasClass( 'um-s1' ) ) { 623 me.select2({ 624 data: arr_items, 625 allowClear: true, 626 dropdownParent: me.parent() 627 }); 628 } else if ( me.hasClass( 'um-s2' ) ) { 629 me.select2({ 630 data: arr_items, 631 allowClear: true, 632 minimumResultsForSearch: 10, 633 dropdownParent: me.parent() 634 }); 635 } 636 637 638 639 if ( data.post.members_directory === 'yes' ) { 640 me.find('option').each( function() { 641 if ( jQuery(this).html() !== '' ) { 642 jQuery(this).data( 'value_label', jQuery(this).html() ).attr( 'data-value_label', jQuery(this).html() ); 643 } 644 }); 645 646 var current_filter_val = um_get_data_for_directory( directory, 'filter_' + child_name ); 647 if ( typeof current_filter_val !== 'undefined' ) { 648 current_filter_val = current_filter_val.split('||'); 649 650 var temp_filter_val = []; 651 jQuery.each( current_filter_val, function(i) { 652 if ( me.find('option[value="' + current_filter_val[ i ] + '"]').length ) { 653 temp_filter_val.push( current_filter_val[ i ] ); 654 } 655 me.find('option[value="' + current_filter_val[ i ] + '"]').prop('disabled', true).hide(); 656 if ( me.find('option:not(:disabled)').length === 1 ) { 657 me.prop('disabled', true); 658 } 659 660 me.select2('destroy').select2(); 661 me.val('').trigger( 'change' ); 662 }); 663 664 temp_filter_val = temp_filter_val.join('||'); 665 if ( current_filter_val !== temp_filter_val ) { 666 um_set_url_from_data( directory, 'filter_' + child_name, temp_filter_val ); 667 um_ajax_get_members( directory ); 668 } 669 } 670 671 um_change_tag( directory ); 672 } 673 674 if ( data.post.members_directory !== 'yes' ) { 675 if ( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ) { 676 me.val( data.field.default ).trigger('change'); 677 } else if ( me.data('um-original-value') !== '' ) { 678 me.val( me.data('um-original-value') ).trigger('change'); 679 } 680 681 if ( data.field.editable == 0 ) { 682 me.addClass('um-child-option-disabled'); 683 me.attr('disabled','disabled'); 684 } 685 } 686 } 687 688 jQuery( document.body ).on('click', '.um-toggle-password', function (){ 689 let parent = jQuery(this).closest('.um-field-area-password'); 690 let passwordField = parent.find('input'); 691 let type = passwordField.attr('type'); 692 if ( 'text' === type ) { 693 passwordField.attr('type', 'password'); 694 parent.find('i').toggleClass('um-icon-eye um-icon-eye-disabled'); 695 } else { 696 passwordField.attr('type', 'text'); 697 parent.find('i').toggleClass('um-icon-eye um-icon-eye-disabled'); 698 } 699 }); 700}); 701 702// Makes the honeypot. 703jQuery( window ).on( 'load', function() { 704 let $honeypotField = jQuery('input[name="um_request"]'); 705 if ( $honeypotField.length ) { 706 $honeypotField.val(''); 707 } 708}); 709
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.