| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- /* global wp_mail_smtp_dashboard_widget, ajaxurl, moment, Chart */
- /**
- * WP Mail SMTP Dashboard Widget function.
- *
- * @since 2.9.0
- */
- 'use strict';
- var WPMailSMTPDashboardWidget = window.WPMailSMTPDashboardWidget || ( function( document, window, $ ) {
- /**
- * Elements reference.
- *
- * @since 2.9.0
- *
- * @type {object}
- */
- var el = {
- $canvas : $( '#wp-mail-smtp-dash-widget-chart' ),
- $settingsBtn : $( '#wp-mail-smtp-dash-widget-settings-button' ),
- $dismissBtn : $( '.wp-mail-smtp-dash-widget-dismiss-chart-upgrade' ),
- $summaryReportEmailBlock : $( '.wp-mail-smtp-dash-widget-summary-report-email-block' ),
- $summaryReportEmailDismissBtn : $( '.wp-mail-smtp-dash-widget-summary-report-email-dismiss' ),
- $summaryReportEmailEnableInput : $( '#wp-mail-smtp-dash-widget-summary-report-email-enable' ),
- };
- /**
- * Chart.js functions and properties.
- *
- * @since 2.9.0
- *
- * @type {object}
- */
- var chart = {
- /**
- * Chart.js instance.
- *
- * @since 2.9.0
- */
- instance: null,
- /**
- * Chart.js settings.
- *
- * @since 2.9.0
- */
- settings: {
- type: 'line',
- data: {
- labels: [],
- datasets: [
- {
- label: '',
- data: [],
- backgroundColor: 'rgba(34, 113, 177, 0.15)',
- borderColor: 'rgba(34, 113, 177, 1)',
- borderWidth: 2,
- pointRadius: 4,
- pointBorderWidth: 1,
- pointBackgroundColor: 'rgba(255, 255, 255, 1)',
- }
- ],
- },
- options: {
- maintainAspectRatio: false,
- scales: {
- xAxes: [ {
- type: 'time',
- time: {
- unit: 'day',
- tooltipFormat: 'MMM D',
- },
- distribution: 'series',
- ticks: {
- beginAtZero: true,
- source: 'labels',
- padding: 10,
- minRotation: 25,
- maxRotation: 25,
- callback: function( value, index, values ) {
- // Distribute the ticks equally starting from a right side of xAxis.
- var gap = Math.floor( values.length / 7 );
- if ( gap < 1 ) {
- return value;
- }
- if ( ( values.length - index - 1 ) % gap === 0 ) {
- return value;
- }
- },
- },
- } ],
- yAxes: [ {
- ticks: {
- beginAtZero: true,
- maxTicksLimit: 6,
- padding: 20,
- callback: function( value ) {
- // Make sure the tick value has no decimals.
- if ( Math.floor( value ) === value ) {
- return value;
- }
- },
- },
- } ],
- },
- elements: {
- line: {
- tension: 0,
- },
- },
- animation: {
- duration: 0,
- },
- hover: {
- animationDuration: 0,
- },
- legend: {
- display: false,
- },
- tooltips: {
- displayColors: false,
- },
- responsiveAnimationDuration: 0,
- },
- },
- /**
- * Init Chart.js.
- *
- * @since 2.9.0
- */
- init: function() {
- var ctx;
- if ( ! el.$canvas.length ) {
- return;
- }
- ctx = el.$canvas[ 0 ].getContext( '2d' );
- chart.instance = new Chart( ctx, chart.settings );
- chart.updateWithDummyData();
- chart.instance.update();
- },
- /**
- * Update Chart.js settings with dummy data.
- *
- * @since 2.9.0
- */
- updateWithDummyData: function() {
- var end = moment().startOf( 'day' ),
- days = 7,
- data = [ 55, 45, 34, 45, 32, 55, 65 ],
- date,
- i;
- for ( i = 1; i <= days; i++ ) {
- date = end.clone().subtract( i, 'days' );
- chart.settings.data.labels.push( date );
- chart.settings.data.datasets[ 0 ].data.push( {
- t: date,
- y: data[ i - 1 ],
- } );
- }
- },
- };
- /**
- * Public functions and properties.
- *
- * @since 2.9.0
- *
- * @type {object}
- */
- var app = {
- /**
- * Publicly accessible Chart.js functions and properties.
- *
- * @since 2.9.0
- */
- chart: chart,
- /**
- * Start the engine.
- *
- * @since 2.9.0
- */
- init: function() {
- $( app.ready );
- },
- /**
- * Document ready.
- *
- * @since 2.9.0
- */
- ready: function() {
- el.$settingsBtn.on( 'click', function() {
- $( this ).siblings( '.wp-mail-smtp-dash-widget-settings-menu' ).toggle();
- } );
- el.$dismissBtn.on( 'click', function( event ) {
- event.preventDefault();
- app.saveWidgetMeta( 'hide_graph', 1 );
- $( this ).closest( '.wp-mail-smtp-dash-widget-chart-block-container' ).remove();
- $( '#wp-mail-smtp-dash-widget-upgrade-footer' ).show();
- } );
- // Hide summary report email block on dismiss icon click.
- el.$summaryReportEmailDismissBtn.on( 'click', function( event ) {
- event.preventDefault();
- app.saveWidgetMeta( 'hide_summary_report_email_block', 1 );
- el.$summaryReportEmailBlock.slideUp();
- } );
- // Enable summary report email on checkbox enable.
- el.$summaryReportEmailEnableInput.on( 'change', function( event ) {
- event.preventDefault();
- var $self = $( this ),
- $loader = $self.next( 'i' );
- $self.hide();
- $loader.show();
- var data = {
- _wpnonce: wp_mail_smtp_dashboard_widget.nonce,
- action : 'wp_mail_smtp_' + wp_mail_smtp_dashboard_widget.slug + '_enable_summary_report_email'
- };
- $.post( ajaxurl, data )
- .done( function() {
- el.$summaryReportEmailBlock.find( '.wp-mail-smtp-dash-widget-summary-report-email-block-setting' )
- .addClass( 'hidden' );
- el.$summaryReportEmailBlock.find( '.wp-mail-smtp-dash-widget-summary-report-email-block-applied' )
- .removeClass( 'hidden' );
- } )
- .fail( function() {
- $self.show();
- $loader.hide();
- } );
- } );
- chart.init();
- app.removeOverlay( el.$canvas );
- },
- /**
- * Save dashboard widget meta in backend.
- *
- * @since 2.9.0
- *
- * @param {string} meta Meta name to save.
- * @param {number} value Value to save.
- */
- saveWidgetMeta: function( meta, value ) {
- var data = {
- _wpnonce: wp_mail_smtp_dashboard_widget.nonce,
- action : 'wp_mail_smtp_' + wp_mail_smtp_dashboard_widget.slug + '_save_widget_meta',
- meta : meta,
- value : value,
- };
- $.post( ajaxurl, data );
- },
- /**
- * Remove an overlay from a widget block containing $el.
- *
- * @since 2.9.0
- *
- * @param {object} $el jQuery element inside a widget block.
- */
- removeOverlay: function( $el ) {
- $el.siblings( '.wp-mail-smtp-dash-widget-overlay' ).remove();
- },
- };
- // Provide access to public functions/properties.
- return app;
- }( document, window, jQuery ) );
- // Initialize.
- WPMailSMTPDashboardWidget.init();
|