@@ -257,7 +257,7 @@ function calculate_keyword_stats(keyword, isTag = false, excludeKeyword = null,
257257 }
258258 }
259259
260- const stats = { matchCount : filteredData . length , bestStreak : 0 } ;
260+ const stats = { matchCount : filteredData . length , bestStreak : 0 , averageScore : 0 } ;
261261 if ( filteredData . length > 0 ) {
262262 const uniqueDates = Array . from ( new Set ( filteredData . map ( entry => normalize_date ( entry . date ) ) ) ) . sort ( ) ;
263263 let bestStreak = 1 ;
@@ -275,6 +275,12 @@ function calculate_keyword_stats(keyword, isTag = false, excludeKeyword = null,
275275 }
276276 }
277277 stats . bestStreak = bestStreak ;
278+
279+ // Calculate average score
280+ const allScores = filteredData . flatMap ( pixel => pixel . scores || [ ] ) ;
281+ if ( allScores . length > 0 ) {
282+ stats . averageScore = average ( allScores ) ;
283+ }
278284 }
279285 return stats ;
280286} ;
@@ -883,21 +889,28 @@ async function generate_pixels_PNG() {
883889 // display filter stats above the image if filters are applied
884890 if ( value1 || value2 ) {
885891
886- const generate_stats_div_results = ( value , nbMatches , bestStreak ) => {
887- return `<div class="stat-item">
888- <strong>${ value } </strong>: ${ nbMatches } matches, best streak: ${ bestStreak } days
889- </div>` ;
892+ const generate_stats_div_results = ( value , nbMatches , bestStreak , averageScore ) => {
893+ if ( nbMatches === 0 ) {
894+ return `<div class="stat-item">
895+ <strong>${ value } </strong>- no matches found.
896+ </div>` ;
897+ }
898+ else {
899+ return `<div class="stat-item">
900+ <strong>${ value } </strong>- ${ ( nbMatches > 1 ) ? "matches" : "match" } : ${ nbMatches } (${ ( ( nbMatches / nbTotalDays ) * 100 ) . toFixed ( 2 ) } %), avg score: ${ averageScore . toFixed ( 2 ) } , best streak: ${ bestStreak } d
901+ </div>` ;
902+ }
890903 } ;
891904 let statsHTML = "" ;
892905
893906 if ( isCompareMode ) {
894- statsHTML = generate_stats_div_results ( value1 , stats_filter_1 . matchCount , stats_filter_1 . bestStreak ) + generate_stats_div_results ( value2 , stats_filter_2 . matchCount , stats_filter_2 . bestStreak ) ;
907+ statsHTML = generate_stats_div_results ( value1 , stats_filter_1 . matchCount , stats_filter_1 . bestStreak , stats_filter_1 . averageScore ) + generate_stats_div_results ( value2 , stats_filter_2 . matchCount , stats_filter_2 . bestStreak , stats_filter_2 . averageScore ) ;
895908 }
896909 else {
897910 let keyword = value1 ? value1 : value2 ;
898911 let stats = value1 ? stats_filter_1 : stats_filter_2 ;
899912
900- statsHTML = generate_stats_div_results ( keyword , stats . matchCount , stats . bestStreak ) ;
913+ statsHTML = generate_stats_div_results ( keyword , stats . matchCount , stats . bestStreak , stats . averageScore ) ;
901914 }
902915
903916 filter_stats_display . innerHTML = statsHTML ;
@@ -924,7 +937,7 @@ async function download_pixels_PNG() {
924937
925938
926939function filter_pixels_by_keyword ( keyword , isTag = false ) {
927- if ( ! keyword || ( keyword . trim ( ) === "" ) || ( current_data . length === 0 ) ) { return [ ] ; }
940+ if ( ! keyword || ( keyword . trim ( ) === "" ) || ( nbTotalDays === 0 ) ) { return [ ] ; }
928941 const result = [ ] ;
929942 const firstDate = normalize_date ( current_data [ 0 ] . date ) ;
930943 const lastDate = normalize_date ( current_data [ current_data . length - 1 ] . date ) ;
@@ -966,7 +979,7 @@ function filter_pixels_by_two_keywords(keyword1, keyword2, isTag1 = false, isTag
966979 if (
967980 ! keyword1 || keyword1 . trim ( ) === "" ||
968981 ! keyword2 || keyword2 . trim ( ) === "" ||
969- current_data . length === 0
982+ nbTotalDays === 0
970983 ) { return [ ] ; }
971984 const result = [ ] ;
972985 const firstDate = normalize_date ( current_data [ 0 ] . date ) ;
0 commit comments