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 nonce = jQuery(this).data('nonce'); 175 176 let parent, mode, src, args; 177 178 if ( ! isModal ) { 179 parent = jQuery(this).parents('.um-field'); 180 mode = parent.data('mode'); 181 src = parent.find('.um-single-image-preview img').attr('src'); 182 183 let filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val(); 184 185 args = { 186 data: { 187 mode: mode, 188 filename: filename, 189 src: src, 190 key: parent.data('key'), 191 _wpnonce: nonce 192 }, 193 success: function() { 194 parent.find('.um-single-image-preview img').replaceWith('<img src="" alt="" />'); 195 parent.find('.um-single-image-preview').removeAttr('style').hide(); 196 parent.find('.um-btn-auto-width').html( parent.data('upload-label') ); 197 parent.find('input[type="hidden"]').val( 'empty_file' ); 198 } 199 }; 200 201 if ( mode !== 'register' ) { 202 args.data.user_id = jQuery(this).parents('form').find('#user_id').val(); 203 } 204 } else { 205 parent = jQuery(this).parents('.um-modal-body'); 206 mode = parent.find('.um-single-image-upload').data('set_mode'); 207 src = parent.find('.um-single-image-preview img').attr('src'); 208 209 args = { 210 data: { 211 src: src, 212 mode: mode, 213 key: parent.find('.um-single-image-upload').data('key'), 214 _wpnonce: nonce 215 }, 216 success: function() { 217 wp.hooks.doAction( 'um_after_removing_preview' ); 218 219 parent.find('.um-single-image-preview img').replaceWith('<img src="" alt="" />'); // required replaceWith for flushing DOM before re-init Cropper. 220 parent.find('.um-single-image-preview').removeAttr('style').hide(); 221 parent.find('.ajax-upload-dragdrop').show(); 222 parent.find('.um-modal-btn.um-finish-upload').addClass( 'disabled' ); 223 224 um_modal_responsive(); 225 } 226 }; 227 } 228 229 wp.ajax.send( 'um_remove_file', args ); 230 }); 231 232 jQuery(document.body).on('click', '.um-single-file-preview a.cancel', function(e) { 233 e.preventDefault(); 234 235 let isModal = false; 236 if ( jQuery(this).parents('.um-modal-body').length > 0 ) { 237 isModal = true; 238 } 239 240 let nonce = jQuery(this).data('nonce'); 241 242 let parent, mode, src, args; 243 244 if ( ! isModal ) { 245 parent = jQuery(this).parents('.um-field'); 246 src = parent.find('.um-single-fileinfo a').attr('href'); 247 mode = parent.data('mode'); 248 249 let filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val(); 250 251 args = { 252 data: { 253 mode: mode, 254 filename: filename, 255 src: src, 256 key: parent.data('key'), 257 _wpnonce: nonce 258 }, 259 success: function() { 260 parent.find('.um-single-file-preview').hide(); 261 parent.find('.um-btn-auto-width').html( parent.data('upload-label') ); 262 parent.find('input[type=hidden]').val( 'empty_file' ); 263 } 264 }; 265 266 if ( mode !== 'register' ) { 267 args.data.user_id = jQuery(this).parents('form' ).find( '#user_id' ).val(); 268 } 269 } else { 270 parent = jQuery(this).parents('.um-modal-body'); 271 src = parent.find('.um-single-fileinfo a').attr('href'); 272 mode = parent.find('.um-single-file-upload').data('set_mode'); 273 274 args = { 275 data: { 276 src: src, 277 mode: mode, 278 key: parent.find('.um-single-file-upload').data('key'), 279 _wpnonce: nonce 280 }, 281 success: function() { 282 parent.find('.um-single-file-preview').hide(); 283 parent.find('.ajax-upload-dragdrop').show(); 284 parent.find('.um-modal-btn.um-finish-upload').addClass('disabled'); 285 um_modal_responsive(); 286 } 287 }; 288 } 289 wp.ajax.send( 'um_remove_file', args ); 290 }); 291 292 // @todo deprecate 293 jQuery(document).on('click', '.um-field-group-head:not(.disabled)', function() { 294 var field = jQuery(this).parents('.um-field-group'); 295 var limit = field.data('max_entries'); 296 297 if ( field.find('.um-field-group-body').is(':hidden')){ 298 field.find('.um-field-group-body').show(); 299 } else { 300 field.find('.um-field-group-body:first').clone().appendTo( field ); 301 } 302 303 var increase_id = 0; 304 field.find('.um-field-group-body').each(function(){ 305 increase_id++; 306 jQuery(this).find('input').each(function(){ 307 var input = jQuery(this); 308 input.attr('id', input.data('key') + '-' + increase_id ); 309 input.attr('name', input.data('key') + '-' + increase_id ); 310 input.parent().parent().find('label').attr('for', input.data('key') + '-' + increase_id ); 311 }); 312 }); 313 314 if ( limit > 0 && field.find('.um-field-group-body').length == limit ) { 315 316 jQuery(this).addClass('disabled'); 317 318 } 319 }); 320 // @todo deprecate 321 jQuery(document).on('click', '.um-field-group-cancel', function( e ) { 322 e.preventDefault(); 323 var field = jQuery(this).parents('.um-field-group'); 324 325 var limit = field.data('max_entries'); 326 327 if ( field.find('.um-field-group-body').length > 1 ) { 328 jQuery(this).parents('.um-field-group-body').remove(); 329 } else { 330 jQuery(this).parents('.um-field-group-body').hide(); 331 } 332 333 if ( limit > 0 && field.find('.um-field-group-body').length < limit ) { 334 field.find('.um-field-group-head').removeClass('disabled'); 335 } 336 337 return false;
338 }); 339 340 341 jQuery( document.body ).on( 'click', '.um-ajax-paginate', function( e ) { 342 e.preventDefault(); 343 344 var obj = jQuery(this); 345 var parent = obj.parent(); 346 parent.addClass( 'loading' ); 347 348 var pages = obj.data('pages')*1; 349 var next_page = obj.data('page')*1 + 1; 350 351 var hook = obj.data('hook'); 352 let nonce = obj.data('nonce'); 353 354 if ( 'um_load_posts' === hook ) { 355 356 jQuery.ajax({ 357 url: wp.ajax.settings.url, 358 type: 'post', 359 data: { 360 action: 'um_ajax_paginate_posts', 361 author: jQuery(this).data('author'), 362 page: next_page, 363 _wpnonce: nonce 364 }, 365 complete: function() { 366 parent.removeClass( 'loading' ); 367 }, 368 success: function( data ) { 369 parent.before( data ); 370 if ( next_page === pages ) { 371 parent.remove(); 372 } else { 373 obj.data( 'page', next_page ); 374 } 375 } 376 }); 377 } else if ( 'um_load_comments' === hook ) { 378 379 jQuery.ajax({ 380 url: wp.ajax.settings.url, 381 type: 'post', 382 data: { 383 action: 'um_ajax_paginate_comments', 384 user_id: jQuery(this).data('user_id'), 385 page: next_page, 386 _wpnonce: nonce 387 }, 388 complete: function() { 389 parent.removeClass( 'loading' ); 390 }, 391 success: function( data ) { 392 parent.before( data ); 393 if ( next_page === pages ) { 394 parent.remove(); 395 } else { 396 obj.data( 'page', next_page ); 397 } 398 } 399 }); 400 } else { 401 var args = jQuery(this).data('args'); 402 var user_id = jQuery(this).data('user_id'); 403 var container = jQuery(this).parents('.um.um-profile.um-viewing').find('.um-ajax-items'); 404 405 jQuery.ajax({ 406 url: wp.ajax.settings.url, 407 type: 'post', 408 data: { 409 action: 'um_ajax_paginate', 410 hook: hook, 411 user_id: user_id, 412 args: args, 413 _wpnonce: nonce 414 }, 415 complete: function() { 416 parent.removeClass( 'loading' ); 417 }, 418 success: function(data){ 419 parent.remove(); 420 container.append( data ); 421 } 422 }); 423 } 424 }); 425 426 jQuery( document.body ).on('click', '#um-search-button', function(e) { 427 e.preventDefault(); 428 429 let $btn = jQuery(this); 430 if ( $btn.hasClass( 'um-disabled' ) ) { 431 return; 432 } 433 434 let $form = $btn.parents('.um-search-form'); 435 let search = $form.find('.um-search-field').val(); 436 let nonce = $form.data('nonce'); 437 438 $btn.addClass('um-disabled'); 439 wp.ajax.send( 'um_search_widget_request', { 440 data: { 441 search: search, 442 _wpnonce: nonce 443 }, 444 success: function(response) { 445 $btn.removeClass('um-disabled'); 446 window.location = response.url; 447 }, 448 error: function(e) { 449 console.log(e); 450 $btn.removeClass('um-disabled'); 451 } 452 }); 453 }); 454 455 //make search on Enter click 456 jQuery( document.body ).on( 'keypress', '.um-search-field', function(e) { 457 if ( e.which === 13 ) { 458 let $field = jQuery(this); 459 let $form = $field.parents('.um-search-form'); 460 461 let $btn = $form.find('#um-search-button'); 462 if ( $btn.hasClass( 'um-disabled' ) ) { 463 return; 464 } 465 let search = $field.val(); 466 let nonce = $form.data('nonce'); 467 468 $btn.addClass('um-disabled'); 469 wp.ajax.send( 'um_search_widget_request', { 470 data: { 471 search: search, 472 _wpnonce: nonce 473 }, 474 success: function(response) { 475 $btn.removeClass('um-disabled'); 476 window.location = response.url; 477 }, 478 error: function(e) { 479 console.log(e); 480 $btn.removeClass('um-disabled'); 481 } 482 }); 483 } 484 }); 485 486 jQuery('.um-form input[class="um-button"][type="submit"]').prop('disabled', false); 487 488 jQuery(document).one('click', '.um:not(.um-account) .um-form input[class="um-button"][type="submit"]:not(.um-has-recaptcha)', function() { 489 jQuery(this).attr('disabled','disabled'); 490 jQuery(this).parents('form').trigger('submit'); 491 }); 492 493 494 var um_select_options_cache = {}; 495 496 /** 497 * Find all select fields with parent select fields 498 */ 499 jQuery('select[data-um-parent]').each( function() { 500 501 var me = jQuery(this); 502 var parent_option = me.data('um-parent'); 503 let parent_nonce = me.data('parent-nonce'); 504 var um_ajax_source = me.data('um-ajax-source'); 505 506 me.attr('data-um-init-field', true ); 507 508 jQuery(document).on('change','select[name="' + parent_option + '"]',function() { 509 var parent = jQuery(this); 510 var form_id = parent.closest( 'form' ).find( 'input[type="hidden"][name="form_id"]' ).val(); 511 512 var arr_key; 513 if ( me.attr( 'data-member-directory' ) === 'yes' ) { 514 var directory = parent.parents('.um-directory'); 515 arr_key = um_get_data_for_directory( directory, 'filter_' + parent_option ); 516 if ( typeof arr_key != 'undefined' ) { 517 arr_key = arr_key.split('||'); 518 } else { 519 arr_key = ''; 520 } 521 } else { 522 arr_key = parent.val(); 523 } 524 525 if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] !== 'object' ) { 526 527 if ( typeof( me.um_wait ) === 'undefined' || me.um_wait === false ) { 528 me.um_wait = true; 529 } else { 530 return; 531 } 532 533 jQuery.ajax({ 534 url: wp.ajax.settings.url, 535 type: 'post', 536 data: { 537 action: 'um_select_options', 538 parent_option_name: parent_option, 539 parent_option: arr_key, 540 child_callback: um_ajax_source, 541 child_name: me.attr('name'), 542 members_directory: me.attr('data-member-directory'), 543 form_id: form_id, 544 _wpnonce: parent_nonce 545 }, 546 success: function( data ) { 547 if ( data.status === 'success' && arr_key !== '' ) { 548 um_select_options_cache[ arr_key ] = data; 549 um_field_populate_child_options( me, data, arr_key ); 550 } 551 552 if ( typeof data.debug !== 'undefined' ) { 553 console.log( data ); 554 } 555 556 me.um_wait = false;
557 }, 558 error: function( e ) { 559 console.log( e ); 560 me.um_wait = false; 561 } 562 }); 563 564 } 565 566 if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] == 'object' ) { 567 setTimeout( um_field_populate_child_options, 10, me, um_select_options_cache[ arr_key ], arr_key ); 568 } 569 570 if ( typeof arr_key != 'undefined' || arr_key === '' ) { 571 me.find('option[value!=""]').remove(); 572 me.val('').trigger('change'); 573 } 574 575 }); 576 577 jQuery('select[name="' + parent_option + '"]').trigger('change'); 578 579 }); 580 581 582 /** 583 * Populates child options and cache ajax response 584 * 585 * @param me 586 * @param data 587 * @param arr_key 588 */ 589 function um_field_populate_child_options( me, data, arr_key ) { 590 var directory = me.parents('.um-directory'); 591 var child_name = me.attr('name'); 592 me.find('option[value!=""]').remove(); 593 594 if ( ! me.hasClass('um-child-option-disabled') ) { 595 me.prop('disabled', false); 596 } 597 598 var arr_items = [], 599 search_get = ''; 600 601 if ( data.post.members_directory === 'yes' ) { 602 arr_items.push({id: '', text: '', selected: 1}); 603 } 604 jQuery.each( data.items, function(k,v){ 605 arr_items.push({id: k, text: v, selected: (v === search_get)}); 606 }); 607 608 me.select2('destroy'); 609 if ( me.hasClass( 'um-s1' ) ) { 610 me.select2({ 611 data: arr_items, 612 allowClear: true, 613 dropdownParent: me.parent() 614 }); 615 } else if ( me.hasClass( 'um-s2' ) ) { 616 me.select2({ 617 data: arr_items, 618 allowClear: true, 619 minimumResultsForSearch: 10, 620 dropdownParent: me.parent() 621 }); 622 } 623 624 625 626 if ( data.post.members_directory === 'yes' ) { 627 me.find('option').each( function() { 628 if ( jQuery(this).html() !== '' ) { 629 jQuery(this).data( 'value_label', jQuery(this).html() ).attr( 'data-value_label', jQuery(this).html() ); 630 } 631 }); 632 633 var current_filter_val = um_get_data_for_directory( directory, 'filter_' + child_name ); 634 if ( typeof current_filter_val !== 'undefined' ) { 635 current_filter_val = current_filter_val.split('||'); 636 637 var temp_filter_val = []; 638 jQuery.each( current_filter_val, function(i) { 639 if ( me.find('option[value="' + current_filter_val[ i ] + '"]').length ) { 640 temp_filter_val.push( current_filter_val[ i ] ); 641 } 642 me.find('option[value="' + current_filter_val[ i ] + '"]').prop('disabled', true).hide(); 643 if ( me.find('option:not(:disabled)').length === 1 ) { 644 me.prop('disabled', true); 645 } 646 647 me.select2('destroy').select2(); 648 me.val('').trigger( 'change' ); 649 }); 650 651 temp_filter_val = temp_filter_val.join('||'); 652 if ( current_filter_val !== temp_filter_val ) { 653 um_set_url_from_data( directory, 'filter_' + child_name, temp_filter_val ); 654 um_ajax_get_members( directory ); 655 } 656 } 657 658 um_change_tag( directory ); 659 } 660 661 if ( data.post.members_directory !== 'yes' ) { 662 if ( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ) { 663 me.val( data.field.default ).trigger('change'); 664 } else if ( me.data('um-original-value') !== '' ) { 665 me.val( me.data('um-original-value') ).trigger('change'); 666 } 667 668 if ( data.field.editable == 0 ) { 669 me.addClass('um-child-option-disabled'); 670 me.attr('disabled','disabled'); 671 } 672 } 673 } 674 675 jQuery( document.body ).on('click', '.um-toggle-password', function (){ 676 let parent = jQuery(this).closest('.um-field-area-password'); 677 let passwordField = parent.find('input'); 678 let type = passwordField.attr('type'); 679 if ( 'text' === type ) { 680 passwordField.attr('type', 'password'); 681 parent.find('i').toggleClass('um-icon-eye um-icon-eye-disabled'); 682 } else { 683 passwordField.attr('type', 'text'); 684 parent.find('i').toggleClass('um-icon-eye um-icon-eye-disabled'); 685 } 686 }); 687}); 688 689// Makes the honeypot. 690jQuery( window ).on( 'load', function() { 691 let $honeypotField = jQuery('input[name="um_request"]'); 692 if ( $honeypotField.length ) { 693 $honeypotField.val(''); 694 } 695}); 696
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.