| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506 |
- /* globals wp_mail_smtp, jconfirm, ajaxurl */
- 'use strict';
- var WPMailSMTP = window.WPMailSMTP || {};
- WPMailSMTP.Admin = WPMailSMTP.Admin || {};
- /**
- * WP Mail SMTP Admin area module.
- *
- * @since 1.6.0
- */
- WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, window, $ ) {
- /**
- * Public functions and properties.
- *
- * @since 1.6.0
- *
- * @type {object}
- */
- var app = {
- /**
- * State attribute showing if one of the plugin settings
- * changed and was not yet saved.
- *
- * @since 1.9.0
- *
- * @type {boolean}
- */
- pluginSettingsChanged: false,
- /**
- * Start the engine. DOM is not ready yet, use only to init something.
- *
- * @since 1.6.0
- */
- init: function() {
- // Do that when DOM is ready.
- $( app.ready );
- },
- /**
- * DOM is fully loaded.
- *
- * @since 1.6.0
- */
- ready: function() {
- app.pageHolder = $( '.wp-mail-smtp-tab-settings' );
- // If there are screen options we have to move them.
- $( '#screen-meta-links, #screen-meta' ).prependTo( '#wp-mail-smtp-header-temp' ).show();
- app.bindActions();
- app.setJQueryConfirmDefaults();
- // Flyout Menu.
- app.initFlyoutMenu();
- },
- /**
- * Process all generic actions/events, mostly custom that were fired by our API.
- *
- * @since 1.6.0
- */
- bindActions: function() {
- // Mailer selection.
- $( '.wp-mail-smtp-mailer-image', app.pageHolder ).on( 'click', function() {
- $( this ).parents( '.wp-mail-smtp-mailer' ).find( 'input' ).trigger( 'click' );
- } );
- $( '.wp-mail-smtp-mailer input', app.pageHolder ).on( 'click', function() {
- var $input = $( this );
- if ( $input.prop( 'disabled' ) ) {
- // Educational Popup.
- if ( $input.hasClass( 'educate' ) ) {
- app.education.upgradeMailer( $input );
- }
- return false;
- }
- // Deselect the current mailer.
- $( '.wp-mail-smtp-mailer', app.pageHolder ).removeClass( 'active' );
- // Select the correct one.
- $( this ).parents( '.wp-mail-smtp-mailer' ).addClass( 'active' );
- // Hide all mailers options and display for a currently clicked one.
- $( '.wp-mail-smtp-mailer-option', app.pageHolder ).addClass( 'hidden' ).removeClass( 'active' );
- $( '.wp-mail-smtp-mailer-option-' + $( this ).val(), app.pageHolder ).addClass( 'active' ).removeClass( 'hidden' );
- } );
- app.mailers.smtp.bindActions();
- // Dismiss Pro banner at the bottom of the page.
- $( '#wp-mail-smtp-pro-banner-dismiss', app.pageHolder ).on( 'click', function() {
- $.ajax( {
- url: ajaxurl,
- dataType: 'json',
- type: 'POST',
- data: {
- action: 'wp_mail_smtp_ajax',
- task: 'pro_banner_dismiss'
- }
- } )
- .always( function() {
- $( '#wp-mail-smtp-pro-banner', app.pageHolder ).fadeOut( 'fast' );
- } );
- } );
- // Dissmis educational notices for certain mailers.
- $( '.js-wp-mail-smtp-mailer-notice-dismiss', app.pageHolder ).on( 'click', function( e ) {
- e.preventDefault();
- var $btn = $( this ),
- $notice = $btn.parents( '.inline-notice' );
- if ( $btn.hasClass( 'disabled' ) ) {
- return false;
- }
- $.ajax( {
- url: ajaxurl,
- dataType: 'json',
- type: 'POST',
- data: {
- action: 'wp_mail_smtp_ajax',
- task: 'notice_dismiss',
- notice: $notice.data( 'notice' ),
- mailer: $notice.data( 'mailer' )
- },
- beforeSend: function() {
- $btn.addClass( 'disabled' );
- }
- } )
- .always( function() {
- $notice.fadeOut( 'fast', function() {
- $btn.removeClass( 'disabled' );
- } );
- } );
- } );
- // Show/hide debug output.
- $( '#wp-mail-smtp-debug .error-log-toggle' ).on( 'click', function( e ) {
- e.preventDefault();
- $( '#wp-mail-smtp-debug .error-log' ).slideToggle();
- } );
- // Copy debug output to clipboard.
- $( '#wp-mail-smtp-debug .error-log-copy' ).on( 'click', function( e ) {
- e.preventDefault();
- var $self = $( this );
- // Get error log.
- var $content = $( '#wp-mail-smtp-debug .error-log' );
- // Copy to clipboard.
- if ( ! $content.is( ':visible' ) ) {
- $content.addClass( 'error-log-selection' );
- }
- var range = document.createRange();
- range.selectNode( $content[0] );
- window.getSelection().removeAllRanges();
- window.getSelection().addRange( range );
- document.execCommand( 'Copy' );
- window.getSelection().removeAllRanges();
- $content.removeClass( 'error-log-selection' );
- $self.addClass( 'error-log-copy-copied' );
- setTimeout(
- function() {
- $self.removeClass( 'error-log-copy-copied' );
- },
- 1500
- );
- } );
- // Remove mailer connection.
- $( '.js-wp-mail-smtp-provider-remove', app.pageHolder ).on( 'click', function() {
- return confirm( wp_mail_smtp.text_provider_remove );
- } );
- // Copy input text to clipboard.
- $( '.wp-mail-smtp-setting-copy', app.pageHolder ).on( 'click', function( e ) {
- e.preventDefault();
- var target = $( '#' + $( this ).data( 'source_id' ) ).get( 0 );
- target.select();
- document.execCommand( 'Copy' );
- var $buttonIcon = $( this ).find( '.dashicons' );
- $buttonIcon
- .removeClass( 'dashicons-admin-page' )
- .addClass( 'wp-mail-smtp-dashicons-yes-alt-green wp-mail-smtp-success wp-mail-smtp-animate' );
- setTimeout(
- function() {
- $buttonIcon
- .removeClass( 'wp-mail-smtp-dashicons-yes-alt-green wp-mail-smtp-success wp-mail-smtp-animate' )
- .addClass( 'dashicons-admin-page' );
- },
- 1000
- );
- } );
- // Notice bar: click on the dissmiss button.
- $( '#wp-mail-smtp-notice-bar' ).on( 'click', '.dismiss', function() {
- var $notice = $( this ).closest( '#wp-mail-smtp-notice-bar' );
- $notice.addClass( 'out' );
- setTimeout(
- function() {
- $notice.remove();
- },
- 300
- );
- $.post(
- ajaxurl,
- {
- action: 'wp_mail_smtp_notice_bar_dismiss',
- nonce: wp_mail_smtp.nonce,
- }
- );
- } );
- app.triggerExitNotice();
- app.beforeSaveChecks();
- // Register change event to show/hide plugin supported settings for currently selected mailer.
- $( '.js-wp-mail-smtp-setting-mailer-radio-input', app.pageHolder ).on( 'change', this.processMailerSettingsOnChange );
- // Disable multiple click on the Email Test tab submit button and display a loader icon.
- $( '.wp-mail-smtp-tab-tools-test #email-test-form' ).on( 'submit', function() {
- var $button = $( this ).find( '.wp-mail-smtp-btn' );
- $button.attr( 'disabled', true );
- $button.find( 'span' ).hide();
- $button.find( '.wp-mail-smtp-loading' ).show();
- } );
- },
- education: {
- upgradeMailer: function( $input ) {
- $.alert( {
- backgroundDismiss: true,
- escapeKey: true,
- animationBounce: 1,
- type: 'blue',
- closeIcon: true,
- title: wp_mail_smtp.education.upgrade_title.replace( /%name%/g, $input.siblings( 'label' ).text().trim() ),
- icon: '"></i>' + wp_mail_smtp.education.upgrade_icon_lock + '<i class="',
- content: $( '.wp-mail-smtp-mailer-options .wp-mail-smtp-mailer-option-' + $input.val() + ' .wp-mail-smtp-setting-field' ).html(),
- boxWidth: '550px',
- onOpenBefore: function() {
- this.$btnc.after( '<div class="discount-note">' + wp_mail_smtp.education.upgrade_bonus + wp_mail_smtp.education.upgrade_doc + '</div>' );
- this.$body.addClass( 'wp-mail-smtp-upgrade-mailer-education-modal' );
- },
- buttons: {
- confirm: {
- text: wp_mail_smtp.education.upgrade_button,
- btnClass: 'btn-confirm',
- keys: [ 'enter' ],
- action: function() {
- var appendChar = /(\?)/.test( wp_mail_smtp.education.upgrade_url ) ? '&' : '?',
- upgradeURL = wp_mail_smtp.education.upgrade_url + appendChar + 'utm_content=' + encodeURIComponent( $input.val() );
- window.open( upgradeURL, '_blank' );
- }
- }
- }
- } );
- }
- },
- /**
- * Individual mailers specific js code.
- *
- * @since 1.6.0
- */
- mailers: {
- smtp: {
- bindActions: function() {
- // Hide SMTP-specific user/pass when Auth disabled.
- $( '#wp-mail-smtp-setting-smtp-auth' ).on( 'change', function() {
- $( '#wp-mail-smtp-setting-row-smtp-user, #wp-mail-smtp-setting-row-smtp-pass' ).toggleClass( 'inactive' );
- } );
- // Port default values based on encryption type.
- $( '#wp-mail-smtp-setting-row-smtp-encryption input' ).on( 'change', function() {
- var $input = $( this ),
- $smtpPort = $( '#wp-mail-smtp-setting-smtp-port', app.pageHolder );
- if ( 'tls' === $input.val() ) {
- $smtpPort.val( '587' );
- $( '#wp-mail-smtp-setting-row-smtp-autotls' ).addClass( 'inactive' );
- } else if ( 'ssl' === $input.val() ) {
- $smtpPort.val( '465' );
- $( '#wp-mail-smtp-setting-row-smtp-autotls' ).removeClass( 'inactive' );
- } else {
- $smtpPort.val( '25' );
- $( '#wp-mail-smtp-setting-row-smtp-autotls' ).removeClass( 'inactive' );
- }
- } );
- }
- }
- },
- /**
- * Exit notice JS code when plugin settings are not saved.
- *
- * @since 1.9.0
- */
- triggerExitNotice: function() {
- var $settingPages = $( '.wp-mail-smtp-page-general' );
- // Display an exit notice, if settings are not saved.
- $( window ).on( 'beforeunload', function() {
- if ( app.pluginSettingsChanged ) {
- return wp_mail_smtp.text_settings_not_saved;
- }
- } );
- // Set settings changed attribute, if any input was changed.
- $( ':input:not( #wp-mail-smtp-setting-license-key, .wp-mail-smtp-not-form-input )', $settingPages ).on( 'change', function() {
- app.pluginSettingsChanged = true;
- } );
- // Clear the settings changed attribute, if the settings are about to be saved.
- $( 'form', $settingPages ).on( 'submit', function() {
- app.pluginSettingsChanged = false;
- } );
- },
- /**
- * Perform any checks before the settings are saved.
- *
- * Checks:
- * - warn users if they try to save the settings with the default (PHP) mailer selected.
- *
- * @since 2.1.0
- */
- beforeSaveChecks: function() {
- $( 'form', app.pageHolder ).on( 'submit', function() {
- if ( $( '.wp-mail-smtp-mailer input:checked', app.pageHolder ).val() === 'mail' ) {
- var $thisForm = $( this );
- $.alert( {
- backgroundDismiss: false,
- escapeKey: false,
- animationBounce: 1,
- type: 'orange',
- icon: '"></i><img src="' + wp_mail_smtp.plugin_url + '/assets/images/font-awesome/exclamation-circle-solid-orange.svg" style="width: 40px; height: 40px;" alt="' + wp_mail_smtp.default_mailer_notice.icon_alt + '"><i class="',
- title: wp_mail_smtp.default_mailer_notice.title,
- content: wp_mail_smtp.default_mailer_notice.content,
- boxWidth: '550px',
- buttons: {
- confirm: {
- text: wp_mail_smtp.default_mailer_notice.save_button,
- btnClass: 'btn-confirm',
- keys: [ 'enter' ],
- action: function() {
- $thisForm.off( 'submit' ).trigger( 'submit' );
- }
- },
- cancel: {
- text: wp_mail_smtp.default_mailer_notice.cancel_button,
- btnClass: 'btn-cancel',
- },
- }
- } );
- return false;
- }
- } );
- },
- /**
- * On change callback for showing/hiding plugin supported settings for currently selected mailer.
- *
- * @since 2.3.0
- */
- processMailerSettingsOnChange: function() {
- var mailerSupportedSettings = wp_mail_smtp.all_mailers_supports[ $( this ).val() ];
- for ( var setting in mailerSupportedSettings ) {
- // eslint-disable-next-line no-prototype-builtins
- if ( mailerSupportedSettings.hasOwnProperty( setting ) ) {
- $( '.js-wp-mail-smtp-setting-' + setting, app.pageHolder ).toggle( mailerSupportedSettings[ setting ] );
- }
- }
- // Special case: "from email" (group settings).
- var $mainSettingInGroup = $( '.js-wp-mail-smtp-setting-from_email' );
- $mainSettingInGroup.closest( '.wp-mail-smtp-setting-row' ).toggle(
- mailerSupportedSettings['from_email'] || mailerSupportedSettings['from_email_force']
- );
- $mainSettingInGroup.siblings( '.wp-mail-smtp-setting-mid-row-sep' ).toggle(
- mailerSupportedSettings['from_email'] && mailerSupportedSettings['from_email_force']
- );
- // Special case: "from name" (group settings).
- $mainSettingInGroup = $( '.js-wp-mail-smtp-setting-from_name' );
- $mainSettingInGroup.closest( '.wp-mail-smtp-setting-row' ).toggle(
- mailerSupportedSettings['from_name'] || mailerSupportedSettings['from_name_force']
- );
- $mainSettingInGroup.siblings( '.wp-mail-smtp-setting-mid-row-sep' ).toggle(
- mailerSupportedSettings['from_name'] && mailerSupportedSettings['from_name_force']
- );
- },
- /**
- * Set jQuery-Confirm default options.
- *
- * @since 2.9.0
- */
- setJQueryConfirmDefaults: function() {
- jconfirm.defaults = {
- typeAnimated: false,
- draggable: false,
- animateFromElement: false,
- theme: 'modern',
- boxWidth: '400px',
- useBootstrap: false
- };
- },
- /**
- * Flyout Menu (quick links).
- *
- * @since 3.0.0
- */
- initFlyoutMenu: function() {
- // Flyout Menu Elements.
- var $flyoutMenu = $( '#wp-mail-smtp-flyout' );
- if ( $flyoutMenu.length === 0 ) {
- return;
- }
- var $head = $flyoutMenu.find( '.wp-mail-smtp-flyout-head' );
- // Click on the menu head icon.
- $head.on( 'click', function( e ) {
- e.preventDefault();
- $flyoutMenu.toggleClass( 'opened' );
- } );
- // Page elements and other values.
- var $wpfooter = $( '#wpfooter' );
- if ( $wpfooter.length === 0 ) {
- return;
- }
- var $overlap = $( '.wp-mail-smtp-page-logs-archive, .wp-mail-smtp-tab-tools-action-scheduler, .wp-mail-smtp-page-reports, .wp-mail-smtp-tab-tools-debug-events' ),
- wpfooterTop = $wpfooter.offset().top,
- wpfooterBottom = wpfooterTop + $wpfooter.height(),
- overlapBottom = $overlap.length > 0 ? $overlap.offset().top + $overlap.height() + 85 : 0;
- // Hide menu if scrolled down to the bottom of the page or overlap some critical controls.
- $( window ).on( 'resize scroll', _.debounce( function() {
- var viewTop = $( window ).scrollTop(),
- viewBottom = viewTop + $( window ).height();
- if ( wpfooterBottom <= viewBottom && wpfooterTop >= viewTop && overlapBottom > viewBottom ) {
- $flyoutMenu.addClass( 'out' );
- } else {
- $flyoutMenu.removeClass( 'out' );
- }
- }, 50 ) );
- $( window ).trigger( 'scroll' );
- }
- };
- // Provide access to public functions/properties.
- return app;
- }( document, window, jQuery ) );
- // Initialize.
- WPMailSMTP.Admin.Settings.init();
|