Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/wpforms-.../assets/js/admin/payments
File: overview.js
if ( dateStr ) {
[500] Fix | Delete
// Update filter button label when date range specified.
[501] Fix | Delete
el.$filterBtn.text( instance.altInput.value );
[502] Fix | Delete
}
[503] Fix | Delete
},
[504] Fix | Delete
} );
[505] Fix | Delete
[506] Fix | Delete
// Determine if a custom date range was provided or selected.
[507] Fix | Delete
this.handleOnUpdateDatepicker( {}, el.$filterForm.find( 'input[value="custom"]' ).prop( 'checked' ) );
[508] Fix | Delete
},
[509] Fix | Delete
[510] Fix | Delete
/**
[511] Fix | Delete
* Callback which is called when the filter form gets submitted.
[512] Fix | Delete
*
[513] Fix | Delete
* @since 1.8.2
[514] Fix | Delete
*/
[515] Fix | Delete
handleOnSubmitDatepicker() {
[516] Fix | Delete
// Exclude radio inputs from the form submission.
[517] Fix | Delete
$( this ).find( 'input[type="radio"]' ).attr( 'name', '' );
[518] Fix | Delete
[519] Fix | Delete
// Remove the popover from the view.
[520] Fix | Delete
// When the dropdown is closed, aria-expended="false".
[521] Fix | Delete
app.hideElm( el.$filterBtn.next() );
[522] Fix | Delete
},
[523] Fix | Delete
[524] Fix | Delete
/**
[525] Fix | Delete
* Callback for the bulk action.
[526] Fix | Delete
*
[527] Fix | Delete
* @since 1.8.4
[528] Fix | Delete
*
[529] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[530] Fix | Delete
*/
[531] Fix | Delete
handleOnBulkAction( event ) {
[532] Fix | Delete
event.preventDefault();
[533] Fix | Delete
[534] Fix | Delete
// Get the selected value for the name="action" select element.
[535] Fix | Delete
const $action = el.$wrapper.find( 'select[name="action"]' );
[536] Fix | Delete
const selectedAction = $action.val();
[537] Fix | Delete
const actionsToExclude = [ 'trash', 'delete' ];
[538] Fix | Delete
[539] Fix | Delete
// Leave early if delete/trash is not selected.
[540] Fix | Delete
// Trash is happening when you move payment to the trash. Delete is when you delete it permanently.
[541] Fix | Delete
if ( ! actionsToExclude.includes( selectedAction ) ) {
[542] Fix | Delete
el.$form.submit();
[543] Fix | Delete
return;
[544] Fix | Delete
}
[545] Fix | Delete
[546] Fix | Delete
// Get the selected checkboxes.
[547] Fix | Delete
const $checkboxes = el.$wrapper.find( 'input[name="payment_id[]"]:checked' );
[548] Fix | Delete
[549] Fix | Delete
// Leave early if no checkboxes are selected.
[550] Fix | Delete
if ( ! $checkboxes.length ) {
[551] Fix | Delete
el.$form.submit();
[552] Fix | Delete
return;
[553] Fix | Delete
}
[554] Fix | Delete
[555] Fix | Delete
// Determine whether the selected payment has a renewal.
[556] Fix | Delete
const hasRenewal = $checkboxes.closest( 'tr' ).hasClass( 'subscription-has-renewal' );
[557] Fix | Delete
[558] Fix | Delete
if ( ! hasRenewal ) {
[559] Fix | Delete
el.$form.submit();
[560] Fix | Delete
return;
[561] Fix | Delete
}
[562] Fix | Delete
[563] Fix | Delete
const { i18n: { subscription_delete_confirm: message, delete_button: buttonText } } = vars;
[564] Fix | Delete
[565] Fix | Delete
// Warn the user that the selected payment has a renewal.
[566] Fix | Delete
$.confirm( {
[567] Fix | Delete
title: wpforms_admin.heads_up,
[568] Fix | Delete
content: message,
[569] Fix | Delete
icon: 'fa fa-exclamation-circle',
[570] Fix | Delete
type: 'orange',
[571] Fix | Delete
buttons: {
[572] Fix | Delete
confirm: {
[573] Fix | Delete
text: buttonText,
[574] Fix | Delete
btnClass: 'btn-confirm',
[575] Fix | Delete
keys: [ 'enter' ],
[576] Fix | Delete
action() {
[577] Fix | Delete
el.$form.submit();
[578] Fix | Delete
},
[579] Fix | Delete
},
[580] Fix | Delete
cancel: {
[581] Fix | Delete
text: wpforms_admin.cancel,
[582] Fix | Delete
keys: [ 'esc' ],
[583] Fix | Delete
action() {
[584] Fix | Delete
el.$form.trigger( 'reset' );
[585] Fix | Delete
},
[586] Fix | Delete
},
[587] Fix | Delete
},
[588] Fix | Delete
} );
[589] Fix | Delete
},
[590] Fix | Delete
[591] Fix | Delete
/**
[592] Fix | Delete
* Callback which is called when the overview table gets submitted.
[593] Fix | Delete
*
[594] Fix | Delete
* @since 1.8.4
[595] Fix | Delete
*/
[596] Fix | Delete
handleOnSubmitOverviewTable() {
[597] Fix | Delete
// Leave early if the multi-select element is not present.
[598] Fix | Delete
if ( ! el.$multiSelect.length ) {
[599] Fix | Delete
return;
[600] Fix | Delete
}
[601] Fix | Delete
[602] Fix | Delete
// Prevent empty or unspecified values from being submitted.
[603] Fix | Delete
// This is to avoid having empty values in the $_GET array for aesthetic reasons.
[604] Fix | Delete
$( '.wpforms-multiselect-checkbox-input[value=""]' ).removeAttr( 'name' );
[605] Fix | Delete
},
[606] Fix | Delete
[607] Fix | Delete
/**
[608] Fix | Delete
* Callback which is called when the datepicker "Cancel" button clicked.
[609] Fix | Delete
*
[610] Fix | Delete
* @since 1.8.2
[611] Fix | Delete
*
[612] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[613] Fix | Delete
*/
[614] Fix | Delete
handleOnResetDatepicker( event ) {
[615] Fix | Delete
event.preventDefault();
[616] Fix | Delete
[617] Fix | Delete
// To return the form to its original state, manually reset it.
[618] Fix | Delete
el.$filterForm.get( 0 ).reset();
[619] Fix | Delete
[620] Fix | Delete
// Remove the popover from the view.
[621] Fix | Delete
// When the dropdown is closed, aria-expended="false".
[622] Fix | Delete
app.hideElm( el.$filterBtn.next() );
[623] Fix | Delete
[624] Fix | Delete
app.handleOnUpdateDatepicker();
[625] Fix | Delete
},
[626] Fix | Delete
[627] Fix | Delete
/**
[628] Fix | Delete
* Callback which is called when the filter form elements change.
[629] Fix | Delete
*
[630] Fix | Delete
* @since 1.8.2
[631] Fix | Delete
*
[632] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[633] Fix | Delete
* @param {boolean} isCustomDates Determine whether a custom date range is provided.
[634] Fix | Delete
*/
[635] Fix | Delete
// eslint-disable-next-line no-unused-vars
[636] Fix | Delete
handleOnUpdateDatepicker( event = {}, isCustomDates = false ) {
[637] Fix | Delete
const $selected = el.$filterForm.find( 'input:checked' );
[638] Fix | Delete
const $parent = $selected.parent();
[639] Fix | Delete
const $target = isCustomDates ? el.$datepicker : $selected;
[640] Fix | Delete
const dates = $target.val().split( vars.delimiter );
[641] Fix | Delete
[642] Fix | Delete
el.$filterBtn.text( isCustomDates ? $target.next().val() : $parent.text() );
[643] Fix | Delete
[644] Fix | Delete
app.selectDatepickerChoice( $parent );
[645] Fix | Delete
[646] Fix | Delete
if ( Array.isArray( dates ) && dates.length === 2 ) {
[647] Fix | Delete
// Sets the current selected date(s).
[648] Fix | Delete
vars.datepicker.setDate( dates );
[649] Fix | Delete
return;
[650] Fix | Delete
}
[651] Fix | Delete
[652] Fix | Delete
vars.datepicker.clear(); // Reset the datepicker.
[653] Fix | Delete
},
[654] Fix | Delete
[655] Fix | Delete
/**
[656] Fix | Delete
* Create an instance of chart.
[657] Fix | Delete
*
[658] Fix | Delete
* @since 1.8.2
[659] Fix | Delete
*/
[660] Fix | Delete
initChart() {
[661] Fix | Delete
if ( ! el.$canvas.length ) {
[662] Fix | Delete
return;
[663] Fix | Delete
}
[664] Fix | Delete
[665] Fix | Delete
const elm = el.$canvas.get( 0 ).getContext( '2d' );
[666] Fix | Delete
const $selected = el.$reports.find( `.${ vars.classNames.selected }` );
[667] Fix | Delete
[668] Fix | Delete
vars.report = $selected.data( 'stats' );
[669] Fix | Delete
vars.isAmount = $selected.hasClass( 'is-amount' );
[670] Fix | Delete
vars.chart = new Chart( elm, vars.settings );
[671] Fix | Delete
[672] Fix | Delete
this.updateChartByReport();
[673] Fix | Delete
},
[674] Fix | Delete
[675] Fix | Delete
/**
[676] Fix | Delete
* Create instances of multi-select.
[677] Fix | Delete
*
[678] Fix | Delete
* @since 1.8.4
[679] Fix | Delete
*/
[680] Fix | Delete
initMultiSelect() {
[681] Fix | Delete
// Check if multi-select elements and required class are present
[682] Fix | Delete
if ( ! el.$multiSelect.length || ! window.WPFormsMultiSelectCheckbox ) {
[683] Fix | Delete
return;
[684] Fix | Delete
}
[685] Fix | Delete
[686] Fix | Delete
// Initialize each multi-select element.
[687] Fix | Delete
el.$multiSelect.each( function() {
[688] Fix | Delete
const multiSelectCheckbox = new window.WPFormsMultiSelectCheckbox(
[689] Fix | Delete
this,
[690] Fix | Delete
{
[691] Fix | Delete
showMask: true,
[692] Fix | Delete
delimiter: '|',
[693] Fix | Delete
}
[694] Fix | Delete
);
[695] Fix | Delete
multiSelectCheckbox.init();
[696] Fix | Delete
} );
[697] Fix | Delete
},
[698] Fix | Delete
[699] Fix | Delete
/**
[700] Fix | Delete
* Updates main chart stats when user switches between different stat card.
[701] Fix | Delete
*
[702] Fix | Delete
* @since 1.8.2
[703] Fix | Delete
*
[704] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[705] Fix | Delete
*/
[706] Fix | Delete
handleOnChangeStatCard( event ) {
[707] Fix | Delete
event.preventDefault();
[708] Fix | Delete
[709] Fix | Delete
const $this = $( this );
[710] Fix | Delete
[711] Fix | Delete
// If the already selected stat card is clicked, don't process the dataset.
[712] Fix | Delete
if ( $this.hasClass( vars.classNames.selected ) || $this.hasClass( 'disabled' ) ) {
[713] Fix | Delete
return;
[714] Fix | Delete
}
[715] Fix | Delete
[716] Fix | Delete
app.spinner();
[717] Fix | Delete
[718] Fix | Delete
vars.report = $this.data( 'stats' );
[719] Fix | Delete
vars.isAmount = $this.hasClass( 'is-amount' );
[720] Fix | Delete
[721] Fix | Delete
el.$reports.find( 'button' ).removeClass( vars.classNames.selected );
[722] Fix | Delete
$this.addClass( vars.classNames.selected );
[723] Fix | Delete
[724] Fix | Delete
// If the `statcard` field is not present, create it.
[725] Fix | Delete
if ( ! el.$activeStat.length ) {
[726] Fix | Delete
// Append a hidden input field for the statcard.
[727] Fix | Delete
el.$filterForm.append( '<input type="hidden" name="statcard">' );
[728] Fix | Delete
[729] Fix | Delete
// Update the reference to the activeStat element.
[730] Fix | Delete
el.$activeStat = el.$filterForm.find( 'input[name="statcard"]' );
[731] Fix | Delete
}
[732] Fix | Delete
[733] Fix | Delete
// Update the value of the statcard field with the selected report.
[734] Fix | Delete
el.$activeStat.val( vars.report );
[735] Fix | Delete
[736] Fix | Delete
// Update the chart stats with consideration to possible form stats being viewed.
[737] Fix | Delete
app.updateChartByReport();
[738] Fix | Delete
},
[739] Fix | Delete
[740] Fix | Delete
/**
[741] Fix | Delete
* Save the user's preferred graph style and color scheme.
[742] Fix | Delete
*
[743] Fix | Delete
* @since 1.8.2
[744] Fix | Delete
*
[745] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[746] Fix | Delete
*/
[747] Fix | Delete
handleOnSaveSettings( event ) {
[748] Fix | Delete
event.preventDefault();
[749] Fix | Delete
[750] Fix | Delete
const $wrapper = $( this ).closest( '.wpforms-dash-widget-settings-container' );
[751] Fix | Delete
const graphStyle = $wrapper.find( 'input[name="wpforms-style"]:checked' ).val();
[752] Fix | Delete
[753] Fix | Delete
vars.type = Number( graphStyle ) === 1 ? 'bar' : 'line';
[754] Fix | Delete
[755] Fix | Delete
const options = Object.assign( {}, vars.settings );
[756] Fix | Delete
options.data.labels = vars.chart.data.labels;
[757] Fix | Delete
options.data.datasets[ 0 ].data = vars.chart.data.datasets[ 0 ].data;
[758] Fix | Delete
[759] Fix | Delete
vars.chart.destroy();
[760] Fix | Delete
[761] Fix | Delete
const elm = el.$canvas.get( 0 ).getContext( '2d' );
[762] Fix | Delete
vars.chart = new Chart( elm, options );
[763] Fix | Delete
[764] Fix | Delete
$.post(
[765] Fix | Delete
ajaxurl,
[766] Fix | Delete
{
[767] Fix | Delete
graphStyle,
[768] Fix | Delete
_ajax_nonce: vars.nonce,
[769] Fix | Delete
action: 'wpforms_payments_overview_save_chart_preference_settings',
[770] Fix | Delete
}
[771] Fix | Delete
).done( function() {
[772] Fix | Delete
el.$wrapper.find( '.wpforms-dash-widget-settings-menu' ).hide();
[773] Fix | Delete
} );
[774] Fix | Delete
},
[775] Fix | Delete
[776] Fix | Delete
/**
[777] Fix | Delete
* Callback which is called when the "Toggle Mode" button clicked.
[778] Fix | Delete
*
[779] Fix | Delete
* @since 1.8.2
[780] Fix | Delete
*/
[781] Fix | Delete
handleOnToggleMode() {
[782] Fix | Delete
const { currentPageUri: url } = vars;
[783] Fix | Delete
[784] Fix | Delete
url.searchParams.set( 'mode', this.checked ? 'test' : 'live' );
[785] Fix | Delete
[786] Fix | Delete
window.location.href = url.href;
[787] Fix | Delete
},
[788] Fix | Delete
[789] Fix | Delete
/**
[790] Fix | Delete
* Display or hide the matched elements.
[791] Fix | Delete
*
[792] Fix | Delete
* @since 1.8.2
[793] Fix | Delete
*
[794] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[795] Fix | Delete
*/
[796] Fix | Delete
handleOnToggle( event ) {
[797] Fix | Delete
event.preventDefault();
[798] Fix | Delete
[799] Fix | Delete
event.stopPropagation();
[800] Fix | Delete
[801] Fix | Delete
const { data: { selector, hide } } = event;
[802] Fix | Delete
[803] Fix | Delete
// Toggle the visibility of the matched element.
[804] Fix | Delete
el.$wrapper.find( selector ).toggle( 0, function() {
[805] Fix | Delete
const $selector = $( selector );
[806] Fix | Delete
[807] Fix | Delete
// When the dropdown is open, aria-expended="true".
[808] Fix | Delete
$selector.attr( 'aria-expanded', $selector.is( ':visible' ) );
[809] Fix | Delete
} );
[810] Fix | Delete
[811] Fix | Delete
// In case the other popover is open, let’s hide it to avoid clutter.
[812] Fix | Delete
// When the dropdown is closed, aria-expended="false".
[813] Fix | Delete
app.hideElm( el.$wrapper.find( hide ) );
[814] Fix | Delete
},
[815] Fix | Delete
[816] Fix | Delete
/**
[817] Fix | Delete
* Hide the matched elements when clicked outside their container.
[818] Fix | Delete
*
[819] Fix | Delete
* @since 1.8.2
[820] Fix | Delete
*
[821] Fix | Delete
* @param {Object} event An event which takes place in the DOM.
[822] Fix | Delete
*/
[823] Fix | Delete
handleOnClickOutside( event ) {
[824] Fix | Delete
const { target, data: { selectors } } = event;
[825] Fix | Delete
[826] Fix | Delete
$.each( selectors, function( index, selector ) {
[827] Fix | Delete
if ( ! $( target ).closest( `${ selector }:visible` ).length ) {
[828] Fix | Delete
app.hideElm( el.$wrapper.find( selector ) );
[829] Fix | Delete
}
[830] Fix | Delete
} );
[831] Fix | Delete
},
[832] Fix | Delete
[833] Fix | Delete
/**
[834] Fix | Delete
* Either fills the container with placeholder data or determines
[835] Fix | Delete
* whether actual data is available to process the chart dataset.
[836] Fix | Delete
*
[837] Fix | Delete
* @since 1.8.2
[838] Fix | Delete
*
[839] Fix | Delete
* @param {Object} data Chart dataset data.
[840] Fix | Delete
*
[841] Fix | Delete
* @return {Object} Labels and dataset data object.
[842] Fix | Delete
*/
[843] Fix | Delete
processDatasetData( data ) {
[844] Fix | Delete
const labels = [];
[845] Fix | Delete
const datasets = [];
[846] Fix | Delete
[847] Fix | Delete
if ( $.isPlainObject( data ) && Object.keys( data ).length > 0 ) {
[848] Fix | Delete
el.$notice.addClass( vars.classNames.hide );
[849] Fix | Delete
[850] Fix | Delete
$.each( data || [], function( index, item ) {
[851] Fix | Delete
const date = moment( item.day );
[852] Fix | Delete
[853] Fix | Delete
labels.push( date );
[854] Fix | Delete
datasets.push( {
[855] Fix | Delete
t: date,
[856] Fix | Delete
y: item?.count || 0,
[857] Fix | Delete
} );
[858] Fix | Delete
} );
[859] Fix | Delete
[860] Fix | Delete
return { labels, datasets };
[861] Fix | Delete
}
[862] Fix | Delete
[863] Fix | Delete
const { i18n: { no_dataset: placeholderText } } = vars;
[864] Fix | Delete
[865] Fix | Delete
// If there is a placeholder text for the current report, use it.
[866] Fix | Delete
if ( placeholderText?.[ vars.report ] ) {
[867] Fix | Delete
el.$notice.find( 'h2' ).text( placeholderText[ vars.report ] );
[868] Fix | Delete
}
[869] Fix | Delete
[870] Fix | Delete
el.$notice.removeClass( vars.classNames.hide );
[871] Fix | Delete
[872] Fix | Delete
let date;
[873] Fix | Delete
const end = moment().startOf( 'day' );
[874] Fix | Delete
const days = 30;
[875] Fix | Delete
const minY = 5;
[876] Fix | Delete
const maxY = 20;
[877] Fix | Delete
[878] Fix | Delete
for ( let i = 1; i <= days; i++ ) {
[879] Fix | Delete
date = end.clone().subtract( i, 'days' );
[880] Fix | Delete
[881] Fix | Delete
labels.push( date );
[882] Fix | Delete
datasets.push( {
[883] Fix | Delete
t: date,
[884] Fix | Delete
y: Math.floor( Math.random() * ( maxY - minY + 1 ) ) + minY, // NOSONAR not used in secure contexts.
[885] Fix | Delete
} );
[886] Fix | Delete
}
[887] Fix | Delete
[888] Fix | Delete
return { labels, datasets };
[889] Fix | Delete
},
[890] Fix | Delete
[891] Fix | Delete
/**
[892] Fix | Delete
* Populate the chart with a fresh set of dataset data.
[893] Fix | Delete
*
[894] Fix | Delete
* @since 1.8.2
[895] Fix | Delete
*
[896] Fix | Delete
* @param {Array} data Chart dataset data.
[897] Fix | Delete
*/
[898] Fix | Delete
updateChart( data ) {
[899] Fix | Delete
const { labels, datasets } = app.processDatasetData( data || [] );
[900] Fix | Delete
[901] Fix | Delete
vars.chart.data.labels = labels;
[902] Fix | Delete
vars.chart.data.datasets[ 0 ] = vars.settings.data.datasets[ 0 ];
[903] Fix | Delete
vars.chart.data.datasets[ 0 ].data = datasets;
[904] Fix | Delete
vars.chart.update();
[905] Fix | Delete
[906] Fix | Delete
el.$spinner.addClass( vars.classNames.hide );
[907] Fix | Delete
},
[908] Fix | Delete
[909] Fix | Delete
/**
[910] Fix | Delete
* Fetch and process the chart dataset data for the selected stat card.
[911] Fix | Delete
*
[912] Fix | Delete
* @since 1.8.2
[913] Fix | Delete
*
[914] Fix | Delete
* @param {Object} args Optional. Additional arguments provided for the Ajax request.
[915] Fix | Delete
*/
[916] Fix | Delete
updateChartByReport( args ) {
[917] Fix | Delete
// Cache dataset of payments for the chart stats.
[918] Fix | Delete
if ( vars.report && Object.hasOwn( vars.data, vars.report ) ) {
[919] Fix | Delete
app.updateChart( vars.data[ vars.report ]?.data || [] );
[920] Fix | Delete
return;
[921] Fix | Delete
}
[922] Fix | Delete
[923] Fix | Delete
// Add a class name indicating that the chart is fetching data.
[924] Fix | Delete
// This is mainly to avoid fast clicking on the stat cards to avoid multiple Ajax requests.
[925] Fix | Delete
el.$reports.addClass( vars.classNames.fetching );
[926] Fix | Delete
[927] Fix | Delete
$.post(
[928] Fix | Delete
ajaxurl,
[929] Fix | Delete
$.extend(
[930] Fix | Delete
{},
[931] Fix | Delete
{
[932] Fix | Delete
report: vars.report,
[933] Fix | Delete
dates: vars.timespan,
[934] Fix | Delete
_ajax_nonce: vars.nonce,
[935] Fix | Delete
action: 'wpforms_payments_overview_refresh_chart_dataset_data',
[936] Fix | Delete
},
[937] Fix | Delete
args
[938] Fix | Delete
),
[939] Fix | Delete
function( { data } ) {
[940] Fix | Delete
vars.data = Object.assign( { [ vars.report ]: data }, vars.data );
[941] Fix | Delete
[942] Fix | Delete
app.updateChart( data?.data || [] );
[943] Fix | Delete
app.updateReports( data?.reports || {} );
[944] Fix | Delete
}
[945] Fix | Delete
).done(
[946] Fix | Delete
function() {
[947] Fix | Delete
el.$reports.addClass( vars.classNames.ready );
[948] Fix | Delete
el.$reports.removeClass( vars.classNames.fetching );
[949] Fix | Delete
}
[950] Fix | Delete
);
[951] Fix | Delete
},
[952] Fix | Delete
[953] Fix | Delete
/**
[954] Fix | Delete
* Reflect payments summary stats in their corresponding areas (elements).
[955] Fix | Delete
*
[956] Fix | Delete
* @since 1.8.2
[957] Fix | Delete
*
[958] Fix | Delete
* @param {Object} reports Reports summary stats queried from the database.
[959] Fix | Delete
*/
[960] Fix | Delete
updateReports( reports ) {
[961] Fix | Delete
// Bail early, in case given reports object is empty.
[962] Fix | Delete
if ( $.isEmptyObject( reports ) ) {
[963] Fix | Delete
return;
[964] Fix | Delete
}
[965] Fix | Delete
[966] Fix | Delete
el.$reports
[967] Fix | Delete
.find( 'li' ).each(
[968] Fix | Delete
// eslint-disable-next-line complexity
[969] Fix | Delete
function() {
[970] Fix | Delete
const $this = $( this );
[971] Fix | Delete
const $button = $this.find( 'button' );
[972] Fix | Delete
[973] Fix | Delete
// Skip iterating over stat cards that are disabled.
[974] Fix | Delete
if ( $button.hasClass( 'disabled' ) ) {
[975] Fix | Delete
return true; // This is the same as 'continue'.
[976] Fix | Delete
}
[977] Fix | Delete
[978] Fix | Delete
const stats = $button.data( 'stats' );
[979] Fix | Delete
const value = reports[ stats ] || 0;
[980] Fix | Delete
const delta = Number( reports[ `${ stats }_delta` ] ) || 0;
[981] Fix | Delete
const $value = $this.find( '.statcard-value' );
[982] Fix | Delete
const $delta = $this.find( '.statcard-delta' );
[983] Fix | Delete
[984] Fix | Delete
$value.addClass( vars.classNames.calculated ).html( value );
[985] Fix | Delete
$delta.addClass( vars.classNames.calculated ).html( Math.abs( delta ) );
[986] Fix | Delete
[987] Fix | Delete
if ( delta !== 0 ) {
[988] Fix | Delete
$delta.addClass( Number( delta > 0 ) ? 'is-upward' : 'is-downward' );
[989] Fix | Delete
}
[990] Fix | Delete
[991] Fix | Delete
// Skip iterating over stat cards that do not represent an amount.
[992] Fix | Delete
if ( ! $button.hasClass( 'is-amount' ) ) {
[993] Fix | Delete
return; // This is the same as 'continue'.
[994] Fix | Delete
}
[995] Fix | Delete
[996] Fix | Delete
// Add a title attribute to the stat card value if it does not have one.
[997] Fix | Delete
$value.attr( 'title', $value.text() );
[998] Fix | Delete
}
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function