/** * This is admin scripts file which contain the admin actions. * * @version 4.0.0 * * @author Expresstech System * */ jQuery( document ).ready( function( jQuery ) { /** * Iframe loader and contents show/hide. */ jQuery('#rmp-preview-iframe').on('load', function() { jQuery( '#rmp-preview-iframe-loader' ).hide(); jQuery( '#rmp-menu-update-notification').remove(); jQuery('#rmp-preview-iframe').show(); jQuery('#rmp-preview-iframe').contents().find( 'a' ).on( 'click', function(e) { e.stopPropagation(); e.preventDefault(); var url = jQuery(this).attr('href'); // Prevent to load the customizer page on preview aria. if ( '#' == url ) { return; } if ( url.indexOf('?') >= 0 ) { url = url + '&rmp_preview_mode=true'; } else { url = url + '?rmp_preview_mode=true'; } jQuery('#rmp-preview-iframe').attr('src', url ); }); }); /** * Save the theme as template. * * @since 4.0.0 * * @fires Click */ jQuery( 'button#rmp-save-theme' ).on( 'click', function( e ) { e.stopPropagation(); e.preventDefault(); const themeName = jQuery( '#rmp-save-theme-name' ).val(); if ( 3 > themeName.length ) { alert( 'Please give meaning full name to this theme' ); return; } jQuery.ajax( { url: rmpObject.ajaxURL, data: { 'action': 'rmp_save_theme', 'ajax_nonce': rmpObject.ajax_nonce, 'theme_name': themeName, 'menu_id': jQuery( '#menu_id' ).val(), 'form': jQuery( '#rmp-editor-form' ).serialize() }, type: 'POST', dataType: 'json', error: function( error ) { console.log( error.statusText ); }, success: function( response ) { jQuery( e.target ).parents( '.rmp-dialog-contents' ) .append( '<div class="notice notice-success settings-error is-dismissible"><p>' + response.data.message + '</p></div>' ); } } ); } ); /** * Ajax call to save the menu settings when click on update. * * @version 4.0.0 * * @fires click */ jQuery(document).on( 'click', 'button#rmp-save-menu-options,#rmp-menu-quick-update-button', function( e ) { jQuery.ajax( { url: rmpObject.ajaxURL, data: { 'action': 'rmp_save_menu_action', 'ajax_nonce': rmpObject.ajax_nonce, 'form': jQuery( '#rmp-editor-form' ).serialize() }, type: 'POST', dataType: 'json', beforeSend: function() { jQuery( '#rmp-preview-iframe-loader' ).show(); }, error: function( error ) { console.log( error.statusText ); jQuery( '#rmp-preview-iframe-loader' ).hide(); }, success: function( response ) { // If options is updated successfully then reload the iframe. if ( response.success ) { const url = jQuery( '#rmp-preview-iframe' ).attr('src'); jQuery('#rmp-preview-iframe').attr('src', url ); } } } ); } ); // Initiate the color picker instances. jQuery( '.rmp-color-input' ).wpColorPicker(); // Fix events glitch on color textbox. jQuery( '.rmp-color-input' ).removeAttr( 'style' ); jQuery( document ).find( '.rmp-color-input' ).off( 'focus' ); // Initiate the tab elements. jQuery( '.tabs,#rmp-setting-tabs' ).tabs( { hide: { effect: 'explode', duration: 1000 }, show: { effect: 'explode', duration: 800 }, active: 0 } ); // Active tabs under ordering elements. jQuery( '.nav-tab-wrapper' ).on( 'click', '.nav-tab', function( e ) { jQuery( '.nav-tab-wrapper .nav-tab' ).removeClass( 'nav-tab-active' ); jQuery( this ) .addClass( 'nav-tab-active' ); } ); /** * Hamburger element selector option hide and show. */ hideShowSelect( '#rmp-menu-button-position-type', '.rmp-menu-hamburger-selector-div', 'show', 'inside-element'); jQuery('#rmp-menu-button-position-type').on( 'change', function() { hideShowSelect( this, '.rmp-menu-hamburger-selector-div', 'show', 'inside-element'); }); /** * select hide show function * @para string select, string show/hide Element, string show/hide */ function hideShowSelect( checkElement, targetElement, condition, value ) { if ( jQuery(checkElement).val() == value ) { if(condition == 'show'){ jQuery(targetElement).show(); }else{ jQuery(targetElement).hide(); } } else { if(condition == 'show'){ jQuery(targetElement).hide(); }else{ jQuery(targetElement).show(); } } } /** * Check open/close of device options switcher. * * @version 4.0.0 * * @fires click */ jQuery( '.rmp-device-switcher' ).on( 'click', function() { var isOpen = jQuery( this ).hasClass( 'open' ); if ( isOpen ) { jQuery( this ).removeClass( 'open' ); } else { jQuery( '.rmp-device-switcher' ).removeClass( 'open' ); jQuery( this ).addClass( 'open' ); } } ); /** * Change the option when select a device. * * @version 4.0.0 * * @fires click */ jQuery( '.rmp-device-switcher li' ).on( 'click', function() { var selectedDevice = jQuery( this ).attr( 'data-device' ); var firstDevice = jQuery( '.rmp-device-switcher li:first-child' ).attr( 'data-device' ); if ( selectedDevice != firstDevice ) { activeDeviceOptions( selectedDevice ); if ( 'desktop' == selectedDevice ) { jQuery( '#rmp-preview-desktop' ).trigger( 'click' ); } else if ( 'tablet' == selectedDevice ) { jQuery( '#rmp-preview-tablet' ).trigger( 'click' ); } else { jQuery( '#rmp-preview-mobile' ).trigger( 'click' ); } } } ); /** * Active all the device options in editor. * * @version 4.0.0; * @param {string} selectedDevice This device name which is active. */ function activeDeviceOptions( selectedDevice ) { const firstDevice = jQuery( '.rmp-device-switcher li:first-child' ).attr( 'data-device' ); const selectedIcon = jQuery( '.rmp-device-switcher li[data-device=' + selectedDevice + ']' ).html(); const firstIcon = jQuery( '.rmp-device-switcher li:first-child' ).html(); jQuery( '.rmp-device-switcher li' ).each( function() { if ( jQuery( this ).attr( 'data-device' ) === selectedDevice ) { jQuery( this ).html( firstIcon ); jQuery( this ).attr( 'data-device', firstDevice ); } else if ( jQuery( this ).attr( 'data-device' ) === firstDevice ) { jQuery( this ).html( selectedIcon ); jQuery( this ).attr( 'data-device', selectedDevice ); } } ); } /** * Close the device switcher when mouseup other places. * * @version 4.0.0 * * @fires mouseup */ jQuery( document ).on( 'mouseup', function( event ) { var target = event.target; var deviceSwitcher = jQuery( '.rmp-device-switcher' ); if ( ! deviceSwitcher.is( target ) && 0 === deviceSwitcher.has( target ).length ) { deviceSwitcher.removeClass( 'open' ); } } ); /** * Active preview as per clicked device. * * @version 4.0.0 * * @fires Click */ jQuery( '#rmp-editor-footer .rmp-preview-device-wrapper' ).on( 'click', 'button', function( e ) { jQuery( '#rmp-editor-footer' ).find( '.rmp-preview-device-wrapper button' ).removeClass( 'active' ); jQuery( '#rmp-editor-footer' ).find( '.rmp-preview-device-wrapper button' ).attr( 'aria-pressed', 'false' ); jQuery( this ).addClass( 'active' ); jQuery( this ).attr( 'aria-pressed', 'true' ); const device = jQuery( this ).data( 'device' ); const deviceEditor = jQuery( '#rmp-editor-wrapper' ); const allClasses = deviceEditor.attr( 'class' ).split( ' ' ); allClasses.forEach( function( value ) { if ( value.includes( 'rmp-preview-' ) ) { deviceEditor.removeClass( value ); } } ); deviceEditor.addClass( 'rmp-preview-' + device ); activeDeviceOptions( device ); } ); /** * Instantiate the accordion elements. * @version 4.0.0 */ jQuery( '.rmp-accordion-container,.rmp-sub-accordion-container' ).accordion( { collapsible: true, heightStyle: 'content', animate: 200, active: 0, } ); /** * Instantiate the draggable and sortable menu item order elements. * @version 4.0.0 */ jQuery( '#rmp-menu-ordering-items' ).accordion().sortable( { placeholder: 'sortable-placeholder', opacity: 0.9, cursor: 'move', delay: 150, forcePlaceholderSize: true, active: false } ); /** * Stop propagating when click on item control element. */ jQuery( '#tab-container .item-controls, #tab-header-bar .item-controls' ).on( 'click', function( event ) { event.stopPropagation(); } ); /** * Show/Hide tooltip for option description. * * @version 4.0.0 * * @fires click,mouseleave */ jQuery( '.rmp-tooltip-icon' ).on( 'click', function(e) { if ( jQuery(this).hasClass('show-tooltip') ) { return; } else { jQuery( this ).addClass('show-tooltip'); } var toolTipContents = jQuery( this ).find( '.rmp-tooltip-content' ); toolTipContents.css({ 'left': e.pageX - ( ( toolTipContents.width() / 100 ) * 60 ), 'position': 'fixed', 'top': ( e.pageY - toolTipContents.height() - 10 ), 'bottom': 'unset' }); toolTipContents.fadeIn(); } ).on( 'mouseleave', function() { jQuery(this).removeClass('show-tooltip'); jQuery( this ).find( '.rmp-tooltip-content' ).fadeOut(); } ); /** * Remove image from image picker * * @version 4.0.0 * * @fires Click */ jQuery( '.rmp-image-picker ' ).on( 'click', '.rmp-image-picker-trash', function( e ) { e.stopPropagation(); e.preventDefault(); jQuery( this ).parent( '.rmp-image-picker' ).siblings( 'input.rmp-image-url-input' ).val( '' ); jQuery( this ).parent( '.rmp-image-picker' ).removeAttr( 'style' ); jQuery( this ).remove(); if ( ! jQuery('#rmp-editor-main').find('#rmp-menu-update-notification').length ) { addUpdateNotification(); } } ); /** * Show/Hide the theme uploader section in theme page. */ jQuery( '#rmp-upload-new-theme' ).on( 'click', function() { jQuery( '#rmp-menu-library-import' ).toggleClass( 'hide' ); } ); /** * Hide theme uploader section when click on cancel. */ jQuery( '#rmp-menu-library-import-form' ).on( 'click', '.cancel', function( e ) { jQuery( '#rmp-menu-library-import' ).addClass( 'hide' ); } ); /** * Upload the theme file using dropzone. * * @version 4.0.0 */ jQuery( '#rmp-menu-library-import-form' ).dropzone( { clickable: true, acceptedFiles: '.zip', uploadMultiple: false, success: function ( file, response ) { location.reload(); }, totaluploadprogress: function() { jQuery('.rmp-page-loader').css( 'display','flex' ); } } ); /** * Open theme options in editor footer. */ jQuery( '#rmp-theme-action' ).on( 'click', function( e ) { jQuery( '#rmp-footer-theme-options' ).toggleClass('open'); } ); /** * Show/Hide the save theme wizard. */ jQuery( '.rmp-theme-save-button, #rmp-menu-save-theme-wizard .rmp-dialog-wrap .close' ).on( 'click', function( e ) { jQuery( '#rmp-menu-save-theme-wizard' ).toggle(); } ); /** * Delete the theme from theme page. */ jQuery( '.rmp-theme-delete' ).on( 'click', function( e ) { e.preventDefault(); /** Ask for delete confirmation */ const isConfirm = confirm( 'Are you sure, You want to delete this theme ?' ); if ( ! isConfirm ) { return; } //Show the loader on deleting theme. const current_theme = jQuery(this); current_theme.append( '<span class="spinner is-active"></span>' ); let themeName = jQuery( this ).attr( 'data-theme' ); let themeType = jQuery( this ).attr( 'data-theme-type' ).toLowerCase(); jQuery.ajax( { url: rmpObject.ajaxURL, data: { 'action': 'rmp_theme_delete', 'ajax_nonce': rmpObject.ajax_nonce, 'theme_name': themeName, 'theme_type': themeType }, type: 'POST', dataType: 'json', error: function( error ) { console.log( error.statusText ); }, success: function( response ) { current_theme.find('.spinner').removeClass('is-active'); if ( response.success ) { location.reload(); } else { alert( response.data.message ); } } } ); } ); /** * Apply the selected theme in current active menu in editor. * * @version 4.0.0 * * @fires click */ jQuery( document ).on( 'click', '.rmp-theme-apply', function( e ) { //Show the overlay with loader. jQuery('.rmp-page-loader').css('display','flex'); jQuery.ajax( { url: rmpObject.ajaxURL, data: { 'action': 'rmp_theme_apply', 'ajax_nonce': rmpObject.ajax_nonce, 'theme_name': jQuery( this ).attr( 'theme-name' ), 'theme_type': jQuery( this ).attr( 'theme-type' ).toLowerCase(), 'menu_id': jQuery( '#menu_id' ).val(), 'menu_to_use' : jQuery('#rmp-menu-to-use').val() }, type: 'POST', dataType: 'json', error: function( error ) { console.log( error.statusText ); jQuery( '.rmp-page-loader' ).hide(); }, success: function( response ) { if ( response.success ) { location.reload(); } else { jQuery( '.rmp-page-loader' ).hide(); alert( response.data.message ); } } } ); } ); /** * Save the global settings on click. * * @version 4.0.0 * * @fires click */ jQuery( '.rmp-save-global-settings-button' ).on( 'click', function( e ) { e.preventDefault(); jQuery.ajax( { url: rmpObject.ajaxURL, data: { 'action': 'rmp_save_global_settings', 'ajax_nonce': rmpObject.ajax_nonce, 'form': jQuery( '#rmp-global-settings' ).serialize() }, type: 'POST', dataType: 'json', beforeSend: function() { jQuery( this ).prop( 'disabled', true ); jQuery( '.spinner' ).addClass( 'is-active' ); }, error: function( error ) { console.log( 'Internal Error !' + error ); }, success: function( response ) { jQuery( '.spinner' ).removeClass( 'is-active' ); jQuery( this ).prop( 'disabled', false ); } } ); } ); /** * Initiate multiple selectize option of editor. */ jQuery( '#rmp-keyboard-shortcut-close-menu,#rmp-keyboard-shortcut-open-menu' ).selectize( { maxItems : 2, plugins: [ 'remove_button' ] } ); /** * Event to linked the group inputs. * * @fires Click */ jQuery( document ).on( 'click', 'button.rmp-group-input-linked', function() { jQuery(this).toggleClass( 'is-linked' ); }); /** * Event to type on all sibblings input if linked. * * @fires keyup */ jQuery( document ).on( 'keyup', 'input.rmp-group-input', function( event ) { var pressedKeys = this.value.toLocaleLowerCase(); const parent = jQuery(this).parents('.rmp-input-group-control'); const isLinked = parent.find( '.is-linked' ); if ( isLinked.length ) { parent.find( 'input.rmp-group-input' ).val( pressedKeys); } else { jQuery( this ).val(pressedKeys); } }); /** * Function to add the notification and update button. */ function addUpdateNotification() { if ( ! jQuery('#rmp-editor-main').find('#rmp-menu-update-notification').length ) { jQuery( '#rmp-editor-main' ).prepend( '<div id="rmp-menu-update-notification" class="rmp-order-item rmp-order-item-description">' + '<span> <span class="rmp-font-icon dashicons dashicons-warning "></span> Update Required </span>' + '<a href="javascript:void(0)" id="rmp-menu-quick-update-button">UPDATE</a>' + '</div>' ); } } jQuery( 'form#rmp-editor-form' ).on( 'keyup change paste', 'input, select, textarea, radio, checkbox', function() { if ( ! jQuery(this).hasClass('no-updates') ) { addUpdateNotification(); } } ); jQuery(document).on( 'click', '#rmp-icon-dialog-select,.media-button-select,.rmp-icon-picker,.rmp-image-picker', function() { if ( ! jQuery('#rmp-editor-main').find('#rmp-menu-update-notification').length ) { addUpdateNotification(); } }); /** * Event to download exported menu settings as json file. * * @version 4.0.0 */ jQuery( '#rmp-export-menu-button' ).on( 'click', function( e ) { e.preventDefault(); let menu_id = jQuery('#rmp_export_menu_list').val(); jQuery.ajax( { url: rmpObject.ajaxURL, data: { 'action': 'rmp_export_menu', 'ajax_nonce': rmpObject.ajax_nonce, 'menu_id': menu_id }, type: 'POST', dataType: 'json', beforeSend: function() { jQuery( '#rmp-export-menu-button' ).prop( 'disabled', true ); }, error: function( error ) { console.log( error.statusText ); jQuery( '#rmp-export-menu-button' ).prop( 'disabled', false ); }, success: function( response ) { jQuery( '#rmp-export-menu-button' ).prop( 'disabled', false ); if ( response.success ) { let menu_name = jQuery('#rmp_export_menu_list').children(":selected").text().trim().toLocaleLowerCase().split(' ').join('-'); download_file( response.data , menu_name + '.json' , 'application/json' ); }else{ jQuery( '#rmp-global-settings' ).before( '<div class="notice notice-error settings-error is-dismissible"> <p>' + response.data.message + '</p></div>' ); setTimeout( function() { jQuery( '#rmp-global-settings' ).parent().find( '.notice' ).remove(); }, 3000 ); } } }); }); /** * Function to download the content as file. * * @since 4.0.0 * * @param {String} content Contents for file * @param {String} name Name of the file. * @param {String} type File type */ function download_file(content, name, type ) { const link = document.body.appendChild( document.createElement('a') ); const file = new Blob([content], { type: type }); link.href = URL.createObjectURL(file); link.download = name; link.click(); } /** * Event to download exported menu settings as json file. * * @version 4.0.0 */ jQuery( '#rmp-import-menu-button' ).on( 'click', function( e ) { e.preventDefault(); let menu_id = jQuery('#rmp_import_menu_list').val(); if( ! menu_id ) { alert( 'Please create menu first ! '); return; } let file_data = jQuery('#rmp_input_import_file')[0].files[0]; if( ! file_data ) { alert( 'Choose export file ! '); return; } var form_data = new FormData(); form_data.append( 'file', file_data ); form_data.append( 'ajax_nonce', rmpObject.ajax_nonce ); form_data.append( 'menu_id', menu_id ); form_data.append( 'action', 'rmp_import_menu' ); jQuery.ajax( { url: rmpObject.ajaxURL, data: form_data, type: 'POST', cache: false, contentType: false, processData: false, dataType: 'json', beforeSend: function() { jQuery( '#rmp-import-menu-button' ).prop( 'disabled', true ); }, error: function( error ) { console.log( error.statusText ); jQuery( '#rmp-import-menu-button' ).prop( 'disabled', false ); }, success: function( response ) { jQuery( '#rmp-import-menu-button' ).prop( 'disabled', false ); noticeClass = 'notice-error'; if ( response.success ) { noticeClass = 'notice-success'; jQuery('#rmp_input_import_file').val(''); } jQuery( '#rmp-global-settings' ).before( '<div class="notice ' + noticeClass + ' settings-error is-dismissible"> <p>' + response.data.message + '</p></div>' ); setTimeout( function() { jQuery( '#rmp-global-settings' ).parent().find( '.notice' ).remove(); }, 3000 ); } }); }); /** * Function to manage menu container animation options. * * @param {String} optionValue */ function updateMenuContainerAnimationOptions( optionValue ) { if ( 'push' === optionValue ) { jQuery( '#rmp-page-wrapper' ).parents('.rmp-input-control-wrapper').fadeIn(); } else { jQuery( '#rmp-page-wrapper' ).parents('.rmp-input-control-wrapper').fadeOut(); } if ( 'fade' === optionValue ) { jQuery('#rmp-menu-appear-from option[value="top"]').hide(); jQuery('#rmp-menu-appear-from option[value="bottom"]').hide(); } else { jQuery('#rmp-menu-appear-from option[value="top"]').show(); jQuery('#rmp-menu-appear-from option[value="bottom"]').show(); } } // Menu container animation type and their options. updateMenuContainerAnimationOptions( jQuery( '#rmp-animation-type' ).val() ); jQuery( '#rmp-editor-wrapper' ).on( 'change', '#rmp-animation-type', function( e ) { const optionValue = jQuery( this ).val(); updateMenuContainerAnimationOptions( optionValue ); }); /** * Event to back on home page under preview screen. * * @since 4.1.0 * * @fires click * * @return void */ jQuery('#rmp-preview-wrapper').on( 'click', () => { let url = window.location.href; url = url.substring( 0, url.indexOf( 'wp-admin' ) ) + '?rmp_preview_mode=true' ; jQuery('#rmp-preview-iframe-loader').show(); jQuery('#rmp-preview-iframe').attr('src', url ); } ); /** Call ajax to hide admin notice permanent. */ jQuery( '.notice-responsive-menu' ).on( 'click', '.notice-dismiss', function( event ) { event.preventDefault(); jQuery.ajax( { type: "POST", url: rmpObject.ajaxURL, data: 'action=rmp_upgrade_admin_notice_dismiss', }); }); } );