/** * Modal window functionality. * * @package WPZincDashboardWidget * @author WP Zinc */ /** * Shows the overlay and modal. * * @since 1.0.0 * * @param string title Modal Title * @param string message Modal Message */ function wpzinc_modal_open( title, message ) { // Show overlay and progress UI. jQuery( '.js-notices' ).text( '' ); jQuery( '.wpzinc-modal h2.title div.spinner' ).css( 'display', 'inline-block' ).css( 'visibility', 'visible' ); jQuery( '.wpzinc-modal h2.title div.tick' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); wpzinc_modal_update_title( title ); wpzinc_modal_update_message( message ); jQuery( '.wpzinc-modal div.notices' ).text( '' ); jQuery( '.wpzinc-modal button.close' ).hide(); // If there's no message, show the mini version of the modal. if ( typeof message === 'undefined' || ! message.length ) { jQuery( '.wpzinc-modal' ).addClass( 'wpzinc-modal-mini' ); } // Show. jQuery( '.wpzinc-modal-overlay, .wpzinc-modal' ).show(); } /** * Hides the overlay and modal. * * @since 1.8.3 */ function wpzinc_modal_close() { jQuery( '.wpzinc-modal-overlay, .wpzinc-modal' ).fadeOut( 'fast', function () { jQuery( '.wpzinc-modal h2.title div.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); jQuery( '.wpzinc-modal h2.title div.tick' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); wpzinc_modal_update_title( '' ); wpzinc_modal_update_message( '' ); jQuery( '.wpzinc-modal div.notices' ).text( '' ); jQuery( '.wpzinc-modal button.close' ).hide(); jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); jQuery( '.wpzinc-modal-overlay, .wpzinc-modal' ).hide(); } ); } /** * Update the modal dialog's title * * @since 1.0.0 * * @param string message Modal Title. */ function wpzinc_modal_update_title( title ) { jQuery( '.wpzinc-modal h2.title span.text' ).text( title ); } /** * Update the modal dialog's message * * @since 1.0.0 * * @param string message Modal Message. */ function wpzinc_modal_update_message( message ) { jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); jQuery( '.wpzinc-modal p.message' ).text( message ); } /** * Displays a success message in the modal. * * @since 1.8.3 * * @param string message Message. */ function wpzinc_modal_show_success_message( message ) { jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); jQuery( '.wpzinc-modal h2.title div.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); jQuery( '.wpzinc-modal h2.title div.tick' ).css( 'display', 'inline-block' ).css( 'visibility', 'visible' ); jQuery( '.wpzinc-modal p.message' ).text( '' ); jQuery( '.wpzinc-modal div.notices' ).html( '

' + message + '

' ); jQuery( '.wpzinc-modal button.close' ).show(); } /** * Displays an error message in the modal. * * @since 1.8.3 * * @param string message Message. */ function wpzinc_modal_show_error_message( message ) { jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); jQuery( '.wpzinc-modal h2.title div.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); jQuery( '.wpzinc-modal h2.title div.tick' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); jQuery( '.wpzinc-modal p.message' ).text( '' ); jQuery( '.wpzinc-modal div.notices' ).html( '

' + message + '

' ); jQuery( '.wpzinc-modal button.close' ).show(); } /** * Displays a success message in the main screen, hides the overlay and progress modal * and returns false, to prevent the calling script from making further AJAX calls. * * @since 1.0.0 * * @param string message Message. */ function wpzinc_modal_show_success_message_and_exit( message ) { jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); // If no notice container exists, create one now. if ( ! jQuery( '.js-notices' ).length ) { if ( jQuery( 'hr.wp-header-end' ).length > 0 ) { jQuery( 'hr.wp-header-end' ).after( '
' ); } else if ( jQuery( '.wrap > h1:first' ).length > 0 ) { jQuery( '.wrap > h1:first' ).after( '
' ); } } // Define notice. jQuery( '.js-notices' ).html( '

' + message + '

' ); // Scroll to notice. jQuery( 'html,body' ).animate( { // wp admin bar = ~ 44px height. scrollTop: ( jQuery( '.js-notices' ).offset().top - 44 ) } ); // Close modal. wpzinc_modal_close(); return false; } /** * Displays an error message in the main screen, hides the overlay and progress modal * and returns false, to prevent the calling script from making further AJAX calls. * * @since 1.8.3 * * @param string message Message. */ function wpzinc_modal_show_error_message_and_exit( message ) { jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); // Define notice. jQuery( '.js-notices' ).html( '

' + message + '

' ); // Scroll to notice. jQuery( 'html,body' ).animate( { // wp admin bar = ~ 44px height. scrollTop: ( jQuery( '.js-notices' ).offset().top - 44 ) } ); // Close modal. wpzinc_modal_close(); return false; } /** * Displays a tick on the modal for a second, and then hides the overlay and progress modal * * @since 1.0.0 * * @param string message Message. */ function wpzinc_modal_show_success_and_exit( title, message ) { // Update message. wpzinc_modal_update_title( title ); // If there's no message, show the mini version of the modal. if ( typeof message === 'undefined' || ! message.length ) { jQuery( '.wpzinc-modal' ).addClass( 'wpzinc-modal-mini' ); } else { jQuery( '.wpzinc-modal' ).removeClass( 'wpzinc-modal-mini' ); wpzinc_modal_update_message( message ); } // Hide spinner, show tick. jQuery( '.wpzinc-modal h2.title div.spinner' ).css( 'display', 'none' ).css( 'visibility', 'hidden' ); jQuery( '.wpzinc-modal h2.title div.tick' ).css( 'display', 'inline-block' ).css( 'visibility', 'visible' ); setTimeout( function () { // Close modal. wpzinc_modal_close(); }, 750 ); return false; } jQuery( document ).ready( function ( $ ) { // Close the modal when its close button is clicked. $( 'body' ).on( 'click', '.wpzinc-modal button.close', function ( e ) { wpzinc_modal_close(); } ); // Allow notices added by this file using JS to be dismissed, as WordPress won't recognise // the button.notice-dismiss being clicked for notices added after the page load. $( 'body' ).on( 'click', '.wpzinc-is-dismissible button.notice-dismiss', function ( e ) { e.preventDefault(); $( this ).closest( '.js-notices' ).remove(); } ); } );