function um_sanitize_value( value, el ) { var element = document.createElement( 'div' ); element.innerText = value; var sanitized_value = element.innerHTML; if ( el ) { jQuery( el ).val( sanitized_value ); } return sanitized_value; } function um_unsanitize_value( input ) { var e = document.createElement( 'textarea' ); e.innerHTML = input; // handle case of empty input return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; } jQuery(document).ready(function() { jQuery( document.body ).on('click', '.um-dropdown a.real_url', function() { window.location = jQuery(this).attr('href'); }); jQuery( document.body ).on( 'click', '.um-trigger-menu-on-click', function() { var menu = jQuery(this).find('.um-dropdown'); UM.dropdown.show( menu ); return false; }); jQuery( document.body ).on('click', '.um-dropdown-hide', function() { UM.dropdown.hideAll(); return false; }); jQuery( document.body ).on('click', 'a.um-manual-trigger', function() { var child = jQuery(this).attr('data-child'); var parent = jQuery(this).attr('data-parent'); jQuery(this).parents( parent ).find( child ).trigger('click'); UM.dropdown.hideAll(); return false; }); jQuery('.um-s1,.um-s2').css({'display':'block'}); /** * Unselect empty option if something is selected * * @since 2.1.16 * @param {object} e * @returns {undefined} */ function unselectEmptyOption( e ) { var $element = jQuery( e.currentTarget ); var $selected = $element.find(':selected'); if ( $selected.length > 1 ) { $selected.each( function ( i, option ) { if ( option.value === '' ) { option.selected = false; $element.trigger( 'change' ); } }); } } if ( typeof( jQuery.fn.select2 ) === 'function' ) { jQuery(".um-s1").each( function( e ) { var obj = jQuery(this); obj.select2({ allowClear: true, dropdownParent: obj.parent() }).on( 'change', unselectEmptyOption ); } ); jQuery(".um-s2").each( function( e ) { var obj = jQuery(this); // fix https://github.com/ultimatemember/ultimatemember/issues/941 // using .um-custom-shortcode-tab class as temporarily solution var atts = {}; if ( obj.parents('.um-custom-shortcode-tab').length ) { atts = { allowClear: false }; } else { atts = { allowClear: false, minimumResultsForSearch: 10, dropdownParent: obj.parent() }; } obj.select2( atts ).on( 'change', unselectEmptyOption ); } ); jQuery(".um-s3").each( function( e ) { var obj = jQuery(this); obj.select2({ allowClear: false, minimumResultsForSearch: -1, dropdownParent: obj.parent() }).on( 'change', unselectEmptyOption ); } ); } if ( typeof( jQuery.fn.um_raty ) === 'function' ) { jQuery('.um-rating').um_raty({ half: false, starType: 'i', number: function() { return jQuery(this).attr('data-number'); }, score: function() { return jQuery(this).attr('data-score'); }, scoreName: function() { return jQuery(this).attr('data-key'); }, hints: false, click: function( score, evt ) { um_live_field = this.id; um_live_value = score; um_apply_conditions( jQuery(this), false ); } }); jQuery('.um-rating-readonly').um_raty({ half: false, starType: 'i', number: function() { return jQuery(this).attr('data-number'); }, score: function() { return jQuery(this).attr('data-score'); }, scoreName: function() { return jQuery(this).attr('data-key'); }, hints: false, readOnly: true }); } jQuery(document).on('change', '.um-field-area input[type="radio"]', function() { var field = jQuery(this).parents('.um-field-area'); var this_field = jQuery(this).parents('label'); field.find('.um-field-radio').removeClass('active'); field.find('.um-field-radio').find('i').removeAttr('class').addClass('um-icon-android-radio-button-off'); this_field.addClass('active'); this_field.find('i').removeAttr('class').addClass('um-icon-android-radio-button-on'); }); jQuery(document).on('change', '.um-field-area input[type="checkbox"]', function() { var this_field = jQuery(this).parents('label'); if ( this_field.hasClass('active') ) { this_field.removeClass('active'); this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline-blank'); } else { this_field.addClass('active'); this_field.find('i').removeAttr('class').addClass('um-icon-android-checkbox-outline'); } }); jQuery(document.body).on('click', '.um-single-image-preview a.cancel', function(e) { e.preventDefault(); let isModal = false; if ( jQuery(this).parents('.um-modal-body').length > 0 ) { isModal = true; } let parent, mode, src, args; if ( ! isModal ) { parent = jQuery(this).parents('.um-field'); mode = parent.data('mode'); src = parent.find('.um-single-image-preview img').attr('src'); let filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val(); args = { data: { mode: mode, filename: filename, src: src, nonce: um_scripts.nonce }, success: function() { parent.find('.um-single-image-preview img').replaceWith(''); parent.find('.um-single-image-preview').removeAttr('style').hide(); parent.find('.um-btn-auto-width').html( parent.data('upload-label') ); parent.find('input[type="hidden"]').val( 'empty_file' ); } }; if ( mode !== 'register' ) { args.data.user_id = jQuery(this).parents('form').find('#user_id').val(); } } else { parent = jQuery(this).parents('.um-modal-body'); mode = parent.find('.um-single-image-upload').data('set_mode'); src = parent.find('.um-single-image-preview img').attr('src'); args = { data: { src: src, mode: mode, nonce: um_scripts.nonce }, success: function() { wp.hooks.doAction( 'um_after_removing_preview' ); parent.find('.um-single-image-preview img').replaceWith(''); // required replaceWith for flushing DOM before re-init Cropper. parent.find('.um-single-image-preview').removeAttr('style').hide(); parent.find('.ajax-upload-dragdrop').show(); parent.find('.um-modal-btn.um-finish-upload').addClass( 'disabled' ); um_modal_responsive(); } }; } wp.ajax.send( 'um_remove_file', args ); }); jQuery(document.body).on('click', '.um-single-file-preview a.cancel', function(e) { e.preventDefault(); let isModal = false; if ( jQuery(this).parents('.um-modal-body').length > 0 ) { isModal = true; } let parent, mode, src, args; if ( ! isModal ) { parent = jQuery(this).parents('.um-field'); src = parent.find('.um-single-fileinfo a').attr('href'); mode = parent.data('mode'); let filename = parent.find( 'input[type="hidden"]#' + parent.data('key') + '-' + jQuery(this).parents('form').find('input[type="hidden"][name="form_id"]').val() ).val(); args = { data: { mode: mode, filename: filename, src: src, nonce: um_scripts.nonce }, success: function() { parent.find('.um-single-file-preview').hide(); parent.find('.um-btn-auto-width').html( parent.data('upload-label') ); parent.find('input[type=hidden]').val( 'empty_file' ); } }; if ( mode !== 'register' ) { args.data.user_id = jQuery(this).parents('form' ).find( '#user_id' ).val(); } } else { parent = jQuery(this).parents('.um-modal-body'); src = parent.find('.um-single-fileinfo a').attr('href'); mode = parent.find('.um-single-file-upload').data('set_mode'); args = { data: { src: src, mode: mode, nonce: um_scripts.nonce }, success: function() { parent.find('.um-single-file-preview').hide(); parent.find('.ajax-upload-dragdrop').show(); parent.find('.um-modal-btn.um-finish-upload').addClass('disabled'); um_modal_responsive(); } }; } wp.ajax.send( 'um_remove_file', args ); }); // @todo deprecate jQuery(document).on('click', '.um-field-group-head:not(.disabled)', function() { var field = jQuery(this).parents('.um-field-group'); var limit = field.data('max_entries'); if ( field.find('.um-field-group-body').is(':hidden')){ field.find('.um-field-group-body').show(); } else { field.find('.um-field-group-body:first').clone().appendTo( field ); } var increase_id = 0; field.find('.um-field-group-body').each(function(){ increase_id++; jQuery(this).find('input').each(function(){ var input = jQuery(this); input.attr('id', input.data('key') + '-' + increase_id ); input.attr('name', input.data('key') + '-' + increase_id ); input.parent().parent().find('label').attr('for', input.data('key') + '-' + increase_id ); }); }); if ( limit > 0 && field.find('.um-field-group-body').length == limit ) { jQuery(this).addClass('disabled'); } }); // @todo deprecate jQuery(document).on('click', '.um-field-group-cancel', function( e ) { e.preventDefault(); var field = jQuery(this).parents('.um-field-group'); var limit = field.data('max_entries'); if ( field.find('.um-field-group-body').length > 1 ) { jQuery(this).parents('.um-field-group-body').remove(); } else { jQuery(this).parents('.um-field-group-body').hide(); } if ( limit > 0 && field.find('.um-field-group-body').length < limit ) { field.find('.um-field-group-head').removeClass('disabled'); } return false; }); jQuery( document.body ).on( 'click', '.um-ajax-paginate', function( e ) { e.preventDefault(); var obj = jQuery(this); var parent = obj.parent(); parent.addClass( 'loading' ); var pages = obj.data('pages')*1; var next_page = obj.data('page')*1 + 1; var hook = obj.data('hook'); if ( 'um_load_posts' === hook ) { jQuery.ajax({ url: wp.ajax.settings.url, type: 'post', data: { action: 'um_ajax_paginate_posts', author: jQuery(this).data('author'), page: next_page, nonce: um_scripts.nonce }, complete: function() { parent.removeClass( 'loading' ); }, success: function( data ) { parent.before( data ); if ( next_page === pages ) { parent.remove(); } else { obj.data( 'page', next_page ); } } }); } else if ( 'um_load_comments' === hook ) { jQuery.ajax({ url: wp.ajax.settings.url, type: 'post', data: { action: 'um_ajax_paginate_comments', user_id: jQuery(this).data('user_id'), page: next_page, nonce: um_scripts.nonce }, complete: function() { parent.removeClass( 'loading' ); }, success: function( data ) { parent.before( data ); if ( next_page === pages ) { parent.remove(); } else { obj.data( 'page', next_page ); } } }); } else { var args = jQuery(this).data('args'); var container = jQuery(this).parents('.um.um-profile.um-viewing').find('.um-ajax-items'); jQuery.ajax({ url: wp.ajax.settings.url, type: 'post', data: { action: 'um_ajax_paginate', hook: hook, args: args, nonce: um_scripts.nonce }, complete: function() { parent.removeClass( 'loading' ); }, success: function(data){ parent.remove(); container.append( data ); } }); } }); jQuery(document).on('click', '.um-ajax-action', function( e ) { e.preventDefault(); var hook = jQuery(this).data('hook'); var user_id = jQuery(this).data('user_id'); var args = jQuery(this).data('args'); if ( jQuery(this).data('js-remove') ){ jQuery(this).parents('.'+jQuery(this).data('js-remove')).fadeOut('fast'); } jQuery.ajax({ url: wp.ajax.settings.url, type: 'post', data: { action: 'um_muted_action', hook: hook, user_id: user_id, arguments: args, nonce: um_scripts.nonce }, success: function(data){ } }); return false; }); jQuery( document.body ).on('click', '#um-search-button', function() { var action = jQuery(this).parents('.um-search-form').data('members_page'); var search_keys = []; jQuery(this).parents('.um-search-form').find('input[name="um-search-keys[]"]').each( function() { search_keys.push( jQuery(this).val() ); }); var search = jQuery(this).parents('.um-search-form').find('.um-search-field').val(); var url; if ( search === '' ) { url = action; } else { var query = '?'; for ( var i = 0; i < search_keys.length; i++ ) { query += search_keys[i] + '=' + search; if ( i !== search_keys.length - 1 ) { query += '&'; } } url = action + query; } window.location = url; }); //make search on Enter click jQuery( document.body ).on( 'keypress', '.um-search-field', function(e) { if ( e.which === 13 ) { var action = jQuery(this).parents('.um-search-form').data('members_page'); var search_keys = []; jQuery(this).parents('.um-search-form').find('input[name="um-search-keys[]"]').each( function() { search_keys.push( jQuery(this).val() ); }); var search = jQuery(this).val(); var url; if ( search === '' ) { url = action; } else { var query = '?'; for ( var i = 0; i < search_keys.length; i++ ) { query += search_keys[i] + '=' + search; if ( i !== search_keys.length - 1 ) { query += '&'; } } url = action + query; } window.location = url; } }); jQuery('.um-form input[class="um-button"][type="submit"]').prop('disabled', false); jQuery(document).one('click', '.um:not(.um-account) .um-form input[class="um-button"][type="submit"]:not(.um-has-recaptcha)', function() { jQuery(this).attr('disabled','disabled'); jQuery(this).parents('form').trigger('submit'); }); var um_select_options_cache = {}; /** * Find all select fields with parent select fields */ jQuery('select[data-um-parent]').each( function() { var me = jQuery(this); var parent_option = me.data('um-parent'); var um_ajax_source = me.data('um-ajax-source'); me.attr('data-um-init-field', true ); jQuery(document).on('change','select[name="' + parent_option + '"]',function() { var parent = jQuery(this); var form_id = parent.closest( 'form' ).find( 'input[type="hidden"][name="form_id"]' ).val(); var arr_key; if ( me.attr( 'data-member-directory' ) === 'yes' ) { var directory = parent.parents('.um-directory'); arr_key = um_get_data_for_directory( directory, 'filter_' + parent_option ); if ( typeof arr_key != 'undefined' ) { arr_key = arr_key.split('||'); } else { arr_key = ''; } } else { arr_key = parent.val(); } if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] !== 'object' ) { if ( typeof( me.um_wait ) === 'undefined' || me.um_wait === false ) { me.um_wait = true; } else { return; } jQuery.ajax({ url: wp.ajax.settings.url, type: 'post', data: { action: 'um_select_options', parent_option_name: parent_option, parent_option: arr_key, child_callback: um_ajax_source, child_name: me.attr('name'), members_directory: me.attr('data-member-directory'), form_id: form_id, nonce: um_scripts.nonce }, success: function( data ) { if ( data.status === 'success' && arr_key !== '' ) { um_select_options_cache[ arr_key ] = data; um_field_populate_child_options( me, data, arr_key ); } if ( typeof data.debug !== 'undefined' ) { console.log( data ); } me.um_wait = false; }, error: function( e ) { console.log( e ); me.um_wait = false; } }); } if ( typeof arr_key != 'undefined' && arr_key !== '' && typeof um_select_options_cache[ arr_key ] == 'object' ) { setTimeout( um_field_populate_child_options, 10, me, um_select_options_cache[ arr_key ], arr_key ); } if ( typeof arr_key != 'undefined' || arr_key === '' ) { me.find('option[value!=""]').remove(); me.val('').trigger('change'); } }); jQuery('select[name="' + parent_option + '"]').trigger('change'); }); /** * Populates child options and cache ajax response * * @param me * @param data * @param arr_key */ function um_field_populate_child_options( me, data, arr_key ) { var directory = me.parents('.um-directory'); var child_name = me.attr('name'); me.find('option[value!=""]').remove(); if ( ! me.hasClass('um-child-option-disabled') ) { me.prop('disabled', false); } var arr_items = [], search_get = ''; if ( data.post.members_directory === 'yes' ) { arr_items.push({id: '', text: '', selected: 1}); } jQuery.each( data.items, function(k,v){ arr_items.push({id: k, text: v, selected: (v === search_get)}); }); me.select2('destroy'); if ( me.hasClass( 'um-s1' ) ) { me.select2({ data: arr_items, allowClear: true, dropdownParent: me.parent() }); } else if ( me.hasClass( 'um-s2' ) ) { me.select2({ data: arr_items, allowClear: true, minimumResultsForSearch: 10, dropdownParent: me.parent() }); } if ( data.post.members_directory === 'yes' ) { me.find('option').each( function() { if ( jQuery(this).html() !== '' ) { jQuery(this).data( 'value_label', jQuery(this).html() ).attr( 'data-value_label', jQuery(this).html() ); } }); var current_filter_val = um_get_data_for_directory( directory, 'filter_' + child_name ); if ( typeof current_filter_val !== 'undefined' ) { current_filter_val = current_filter_val.split('||'); var temp_filter_val = []; jQuery.each( current_filter_val, function(i) { if ( me.find('option[value="' + current_filter_val[ i ] + '"]').length ) { temp_filter_val.push( current_filter_val[ i ] ); } me.find('option[value="' + current_filter_val[ i ] + '"]').prop('disabled', true).hide(); if ( me.find('option:not(:disabled)').length === 1 ) { me.prop('disabled', true); } me.select2('destroy').select2(); me.val('').trigger( 'change' ); }); temp_filter_val = temp_filter_val.join('||'); if ( current_filter_val !== temp_filter_val ) { um_set_url_from_data( directory, 'filter_' + child_name, temp_filter_val ); um_ajax_get_members( directory ); } } um_change_tag( directory ); } if ( data.post.members_directory !== 'yes' ) { if ( typeof data.field.default !== 'undefined' && ! me.data('um-original-value') ) { me.val( data.field.default ).trigger('change'); } else if ( me.data('um-original-value') !== '' ) { me.val( me.data('um-original-value') ).trigger('change'); } if ( data.field.editable == 0 ) { me.addClass('um-child-option-disabled'); me.attr('disabled','disabled'); } } } jQuery( document.body ).on('click', '.um-toggle-password', function (){ let parent = jQuery(this).closest('.um-field-area-password'); let passwordField = parent.find('input'); let type = passwordField.attr('type'); if ( 'text' === type ) { passwordField.attr('type', 'password'); parent.find('i').toggleClass('um-icon-eye um-icon-eye-disabled'); } else { passwordField.attr('type', 'text'); parent.find('i').toggleClass('um-icon-eye um-icon-eye-disabled'); } }); });