(function($){ //Define global functions to use them in other plugins //Sets the current tab in navigation menu window.et_dashboard_set_current_tab = function set_current_tab( $tab_id, $section ) { var tab = $( 'div.' + $tab_id ); var current = $( 'a.current' ); $( current ).removeClass( 'current' ); $( 'a#' + $tab_id ).addClass( 'current' ); $( 'div.et_dashboard_tab_content' ).removeClass( 'et_tab_selected' ); $( tab ).addClass( 'et_tab_selected' ); //If the tab is in opened section, then we don't need to toggle current_section class if ( '' != $section ) { var current_section = $( 'ul.current_section' ); current_section.removeClass( 'current_section' ); } //Hide save button from the header section since there is nothing to save if ( 'header' == $section ) { $( '.et_dashboard_save_changes' ).css( { 'display' : 'none' } ); } if ( 'side' == $section ) { var $parent_menu = $( 'a#' + $tab_id ).parent().parent(), $this_main_menu = $parent_menu.closest( 'li' ); $parent_menu.toggleClass( 'current_section' ); $( '.et_dashboard_save_changes' ).css( { 'display' : 'block' } ); $( '#et_dashboard_navigation > ul > li' ).removeClass( 'et_active_menu' ); $this_main_menu.addClass( 'et_active_menu' ); } $( '#et_dashboard_content' ).removeAttr( 'class' ); $( '#et_dashboard_content' ).addClass( 'current_tab_' + $tab_id ); }; //Generates image upload window window.et_dashboard_image_upload = function image_upload( $upload_button ) { $upload_button.click( function( event ) { var $this_el = $(this); event.preventDefault(); et_file_frame = wp.media.frames.et_file_frame = wp.media({ title: $this_el.data( 'choose' ), library: { type: $this_el.data( 'type' ) }, button: { text: $this_el.data( 'update' ), }, multiple: false }); et_file_frame.on( 'select', function() { var attachment = et_file_frame.state().get( 'selection' ).first().toJSON(); $this_el.siblings( '.et-dashboard-upload-field' ).val( attachment.url ); $this_el.siblings( '.et-dashboard-upload-id' ).val( attachment.id ); et_dashboard_generate_preview_image( $this_el ); }); et_file_frame.open(); } ); } //Generates preview for image upload option window.et_dashboard_generate_preview_image = function generate_preview_image( $upload_button ) { var $upload_field = $upload_button.siblings( '.et-dashboard-upload-field' ), $preview = $( '.et-dashboard-upload-preview' ), image_url = ''; //check wheter we have valid image URL in the input field if ( /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( $upload_field.val().trim() ) ) { image_url = $upload_field.val().trim(); } if ( $upload_button.data( 'type' ) !== 'image' ) return; if ( image_url === '' ) { if ( $preview.length ) $preview.remove(); return; } if ( ! $preview.length ) { $upload_button.after( '
' ); $preview = $upload_field.parent().find( '.et-dashboard-upload-preview' ); } $preview.find( 'img' ).attr( 'src', image_url ); } //Displays warning message. HTML of warning message is input parameter. window.et_dashboard_display_warning = function display_warning( $warn_window ) { if ( '' == $warn_window ){ return; } $( '#wpwrap' ).append( $warn_window ); } //Generates warning pop up window.et_dashboard_generate_warning = function generate_warning( $message, $link, ok_text, custom_btn_text, custom_btn_link, custom_btn_class ){ var link = '' == $link ? '#' : $link; $.ajax({ type: 'POST', url: dashboardSettings.ajaxurl, data: { action : 'et_dashboard_generate_warning', message : $message, ok_link : link, ok_text : ok_text, custom_button_text : custom_btn_text, custom_button_link : custom_btn_link, custom_button_class : custom_btn_class, generate_warning_nonce : dashboardSettings.generate_warning }, success: function( data ){ window.et_dashboard_display_warning( data ); } }); } //Checks conditional options and toggles them window.et_dashboard_check_conditional_options = function check_conditional_options( $current_trigger, $is_load ){ var all_triggers = $current_trigger.data( "enables" ).split( '#' ), option_value = ''; if ( 0 < $current_trigger.find( 'select' ).length ) { option_value = $current_trigger.find( 'select' ).val(); } else { option_value = true == $current_trigger.children( 'input' ).prop( 'checked' ) ? 'true' : 'false'; } $.each( all_triggers, function( index, option_name ){ $option_enabled = false; var current_option = $( '[name="et_dashboard[' + option_name + ']"]' ); if ( current_option.hasClass( 'wp-color-picker' ) || 'radio' == current_option.attr( 'type' ) ) { current_option = current_option.hasClass( 'wp-color-picker' ) ? current_option.parent().parent().parent() : current_option.parent().parent(); } else { current_option = current_option.parent().length ? current_option.parent() : $( '[data-name="et_dashboard[' + option_name + ']"]' ); } var values_array = String( current_option.data( 'condition' ) ).split( '#' ); $.each( values_array, function( key, value ){ if ( value == option_value ) { current_option.removeClass( 'et_dashboard_hidden_option' ).addClass( 'et_dashboard_visible_option' ); increment_triggers = undefined == current_option.data( 'triggers_count' ) ? 0 : parseInt( current_option.data( 'triggers_count' ) ); increment_triggers++; current_option.data( 'triggers_count', increment_triggers ); current_option.data( 'just_enabled', true ); $option_enabled = true; } else { if ( false == $option_enabled && ( ( false == $is_load ) || ( true == $is_load && true != current_option.data( 'just_enabled' ) ) ) ) { var triggers_count = undefined == current_option.data( 'triggers_count' ) ? 0 : parseInt( current_option.data( 'triggers_count' ) ); triggers_count = 0 == triggers_count ? 0 : triggers_count - 1; current_option.data( 'triggers_count', triggers_count ); if ( 0 == triggers_count ) { current_option.addClass( 'et_dashboard_hidden_option' ).removeClass( 'et_dashboard_visible_option' ); } } } }); }); } window.et_dashboard_save = function et_dashboard_save( $button ) { tinyMCE.triggerSave(); var options_fromform = $( '.' + dashboardSettings.plugin_class + ' #et_dashboard_options' ).serialize(); $spinner = $button.parent().find( '.spinner' ); $options_subtitle = $button.data( 'subtitle' ); $.ajax({ type: 'POST', url: dashboardSettings.ajaxurl, data: { action : dashboardSettings.plugin_class + '_save_settings', options : options_fromform, options_sub_title : $options_subtitle, save_settings_nonce : dashboardSettings.save_settings }, beforeSend: function ( xhr ){ $spinner.addClass( 'et_dashboard_spinner_visible' ); }, success: function( data ){ $spinner.removeClass( 'et_dashboard_spinner_visible' ); window.et_dashboard_display_warning( data ); } }); } $( document ).ready( function() { var url = window.location.href, tab_link = url.split( '#tab_' )[1], $et_modal_window; //Check whether tab_id specified in the URL, if not - set the first tab from the navigation as a current tab. if ( undefined != tab_link ) { var section = ( -1 != tab_link.indexOf( 'header' ) ) ? 'header' : 'side'; window.et_dashboard_set_current_tab( tab_link, section ); } else { window.et_dashboard_set_current_tab ( $( 'div#et_dashboard_navigation > ul > li > ul > li > a' ).first().attr( 'id' ), 'side' ); } /* Create checkbox/toggle UI based off form data */ $( 'body' ).on( 'click', 'div.et_dashboard_multi_selectable', function() { var checkbox = $( this ).children( 'input' ); checkbox.prop( 'checked' ) == false ? checkbox.prop( 'checked', true ) : checkbox.prop( 'checked', false ); $( this ).toggleClass( 'et_dashboard_selected et_dashboard_just_selected' ); $( this ).mouseleave( function() { $( this ).removeClass( 'et_dashboard_just_selected' ); }); }); $( 'body' ).on( 'click', 'div.et_dashboard_single_selectable', function() { var tabs = $( this ).parents( '.et_dashboard_row' ).find( 'div.et_dashboard_single_selectable' ), inputs = $( this ).parents( '.et_dashboard_row' ).find( 'input' ); tabs.removeClass( 'et_dashboard_selected' ); inputs.prop( 'checked', false ); $( this ).toggleClass( 'et_dashboard_selected' ); $( this ).children( 'input' ).prop( 'checked', true ); }); /* Tabs System */ // Adding href to tabs of each parent element to store the link of current tab in URL properly $( 'div#et_dashboard_navigation > ul > li > a' ).each( function() { var $this_el = $( this ); $this_el.attr( 'href', '#tab_' + $this_el.parent().find( 'ul > li > a' ).first().attr( 'id' ) ); }); $( 'body' ).on( 'click', 'div#et_dashboard_navigation > ul > li > a', function() { window.et_dashboard_set_current_tab ( $( this ).parent().find( 'ul > li > a' ).first().attr( 'id' ), 'side'); }); $( 'body' ).on( 'click', '#et_dashboard_navigation ul li ul li > a', function() { window.et_dashboard_set_current_tab ( $( this ).attr( 'id' ), '' ); }); $( 'body' ).on( 'click', 'div#et_dashboard_header > ul > li > a', function() { window.et_dashboard_set_current_tab ( $( this ).attr( 'id' ), 'header' ); }); $( 'body' ).on( 'click', '.et_dashboard_close', function(){ var modal_container = $( this ).parent().parent().parent(); //Remove the modal container of warning or hide the modal of networks picker if ( modal_container.hasClass( 'et_dashboard_warning' ) ) { modal_container.remove(); } else { modal_container.css( { 'z-index' : '-1' , 'display' : 'none' } ); } }); //Handle click on the OK button in warning window $( 'body' ).on( 'click', '.et_dashboard_ok', function(){ var this_el = $( this ), link = this_el.attr( 'href' ), main_container = this_el.parent().parent().parent(); main_container.remove(); //If OK button is a tab link, then open the tab if ( -1 != link.indexOf( '#tab' ) ) { var tab_link = link.split( '#tab_' )[1], section = ( -1 != tab_link.indexOf( 'header' ) ) ? 'header' : 'side'; window.et_dashboard_set_current_tab( tab_link, section ); return false; } //Do nothing if there is no link in the OK button if ( '#' == link ) { return false; } }); $( 'body' ).on( 'click', '.et_dashboard_save_changes:not(.et_dashboard_custom_save) button', function() { window.et_dashboard_save( $( this ) ); return false; }); $( '.et-dashboard-color-picker' ).wpColorPicker(); $( 'body' ).on( 'click', '.et_dashboard_conditional input[type="checkbox"]', function() { window.et_dashboard_check_conditional_options( $( this ).parent(), false ); }); $( 'body' ).on( 'change', '.et_dashboard_conditional select', function() { window.et_dashboard_check_conditional_options( $( this ).parent(), false ); }); if ( $( '.et_dashboard_conditional' ).length ) { $( '.et_dashboard_conditional' ).each( function() { window.et_dashboard_check_conditional_options( $( this ), true ); }); } $( 'body' ).on( 'click', '.et_dashboard_form span.et_dashboard_more_info', function() { $( this ).find( '.et_dashboard_more_text' ).fadeToggle( 400 ); }); if ( $('.et-dashboard-upload-button').length ) { var upload_button = $('.et-dashboard-upload-button'); et_dashboard_image_upload( upload_button ); upload_button.siblings( '.et-dashboard-upload-field' ).on( 'input', function() { et_dashboard_generate_preview_image( $(this).siblings( '.et-dashboard-upload-button' ) ); $(this).siblings( '.et-dashboard-upload-id' ).val(''); } ); upload_button.siblings( '.et-dashboard-upload-field' ).each( function() { et_dashboard_generate_preview_image( $(this).siblings( '.et-dashboard-upload-button' ) ); } ); } $( 'body' ).on( 'focusin', '.et_dashboard_search_posts', function() { var $this_input = $( this ); $this_input.closest('.et_dashboard_form').find( '.et_dashboard_live_search_res' ).addClass( 'visible_search_res' ); if ( ! $this_input.hasClass( 'already_triggered' ) ) { $this_input.addClass( 'already_triggered' ); handle_live_search( $this_input, 0, 1, true ); } }); $( document ).click( function() { $( '.et_dashboard_live_search_res' ).removeClass( 'visible_search_res' ); }); $( 'body' ).on( 'click', '.et_dashboard_search_posts', function() { return false; }); $( 'body' ).on( 'input', '.et_dashboard_search_posts', function() { handle_live_search( $( this ), 500, 1, true ); }); $( 'body' ).on( 'click', '.et_dashboard_search_results li', function() { var $this_item = $( this ); if ( ! $this_item.hasClass( 'et_dashboard_no_res' ) ) { var $text = $this_item.text(), $id = $this_item.data( 'post_id' ), $main_container = $this_item.closest('.et_dashboard_form'), $display_box = $main_container.find( '.et_dashboard_selected' ), $value_field = $main_container.find( 'input[type="hidden"]' ), $new_item = '' + $text + ''; if ( -1 === $display_box.html().indexOf( 'data-post_id="' + $id + '"' ) ) { $display_box.append( $new_item ); if ( '' === $value_field.val() ) { $value_field.val( $id ); } else { $value_field.val( function( index, value ) { return value + "," + $id; }); } } } return false; }); $( 'body' ).on( 'mousewheel DOMMouseScroll', '.et_dashboard_search_results', function() { var $this_el = $( this ), $page = typeof $this_el.data( 'page' ) === 'undefined' ? 1 : $this_el.data( 'page' ), $max_scroll = typeof $this_el.data( 'scroll' ) === 'undefined' ? 0 : $this_el.data( 'scroll' ); if ( ( 0 === $this_el.scrollTop() % 200 ) && $this_el.scrollTop() > $max_scroll ) { $this_el.data( 'page', $page + 1 ); $this_el.data( 'scroll', $this_el.scrollTop() ); handle_live_search( $this_el.closest('.et_dashboard_form').find( '.et_dashboard_search_posts' ), 0, $page + 1, false ); } }); $( 'body' ).on( 'click', '.et_dashboard_selected span.et_dashboard_menu_remove', function() { var $this_item = $( this ).parent(), $value_field = $this_item.closest('.et_dashboard_form').find( 'input[type="hidden"]' ), $value_string = $value_field.val(), $id = $this_item.data( 'post_id' ); if ( -1 !== $value_string.indexOf( $id ) ) { var $string_to_replace = -1 !== $value_string.indexOf( ',' + $id ) ? ',' + $id : $id + ',', $string_to_replace = -1 !== $value_string.indexOf( ',' ) ? $string_to_replace : $id, $new_value = $value_string; $new_value = $value_string.replace( $string_to_replace, '' ); $value_field.val( $new_value ); } $this_item.remove(); return false; }); function handle_live_search( $input, $delay, $page, $full_content ) { var $this_input = $input, $search_value = $this_input.val(), $post_type = $this_input.data( 'post_type' ); setTimeout( function(){ if ( $search_value === $this_input.val() ) { $.ajax({ type: 'POST', url: dashboardSettings.ajaxurl, data: { action : 'et_dashboard_execute_live_search', dashboard_search : dashboardSettings.search_nonce, dashboard_live_search : $search_value, dashboard_post_type : $post_type, dashboard_page : $page, dashboard_full_content : $full_content }, beforeSend: function( data ) { $this_input.parent().find( '.spinner' ).addClass( 'et_dashboard_spinner_visible' ); }, success: function( data ) { $this_input.parent().find( '.spinner' ).removeClass( 'et_dashboard_spinner_visible' ); if ( true == $full_content ) { $this_input.closest('.et_dashboard_form').find( '.et_dashboard_search_results' ).replaceWith( data ); } else { $this_input.closest('.et_dashboard_form').find( '.et_dashboard_search_results' ).append( data ); } } }); } }, $delay ); } var $container = $( '#et_dashboard_options' ); var $yes_no_button_wrapper = $container.find( '.et_pb_yes_no_button_wrapper' ); var $yes_no_button = $yes_no_button_wrapper.find( '.et_pb_yes_no_button' ); var $yes_no_select = $yes_no_button.find( 'select' ); $yes_no_button_wrapper.each( function () { var $this_switcher = $(this).find( '.et_pb_yes_no_button' ); var $select = $(this).find( 'select' ); var selected_value = $select.val(); var $button = $(this).closest( '.input' ).find( 'div.et_dashboard_action_button' ); if ( 'on' === selected_value ) { $this_switcher.addClass( 'et_pb_on_state' ); } else { $this_switcher.addClass( 'et_pb_off_state' ); } if ( $button.length > 0 ) { $button.insertBefore( $button.prev() ); $button.on( 'yes_no_button_clicked', function( event, new_value, first_run ) { var delay = first_run ? 0 : 300; if ( 'on' === new_value ) { $(this).show( delay ); } else { $(this).hide( delay ); } }); $button.trigger( 'yes_no_button_clicked', selected_value, true ); } $this_switcher.on( 'click', function () { var new_value = $( this ).hasClass( 'et_pb_off_state' ) ? 'on' : 'off'; if ( $button.length > 0 ) { $button.trigger( 'yes_no_button_clicked', new_value ); } $select.val( new_value ); $select.trigger( 'change' ); $(this).toggleClass( 'et_pb_off_state et_pb_on_state' ); } ); } ); }); })(jQuery);