@@ -222,9 +222,16 @@ function countUp(node, target) {
222222 const prev = sumByKey ( prevRows ) ;
223223 return nextRows
224224 . map ( ( row ) => ( { key : row . key , delta : row . count - ( prev [ row . key ] || 0 ) } ) )
225- . filter ( ( row ) => row . delta > 0 )
226- . sort ( ( a , b ) => b . delta - a . delta )
227- . slice ( 0 , 2 ) ;
225+ . filter ( ( row ) => row . delta !== 0 )
226+ . sort ( ( a , b ) => Math . abs ( b . delta ) - Math . abs ( a . delta ) )
227+ . slice ( 0 , 3 ) ;
228+ }
229+
230+ function formatDelta ( delta , baseline = false ) {
231+ if ( baseline ) return "baseline" ;
232+ if ( delta > 0 ) return "+" + delta . toLocaleString ( ) ;
233+ if ( delta < 0 ) return delta . toLocaleString ( ) ;
234+ return "no change" ;
228235 }
229236
230237 function renderHistory ( points ) {
@@ -234,18 +241,19 @@ function countUp(node, target) {
234241 const range = Math . max ( 1 , maxTotal - minTotal ) ;
235242 chartEl . innerHTML = points . map ( ( point ) => {
236243 const pct = 18 + ( ( point . total - minTotal ) / range ) * 82 ;
237- const deltaText = point . delta > 0 ? "+" + point . delta . toLocaleString ( ) : "baseline" ;
244+ const deltaText = formatDelta ( point . delta , point . baseline ) ;
245+ const deltaClass = point . delta < 0 ? " is-negative" : "" ;
238246 return `<a class="history-bar" href="${ esc ( point . url ) } " target="_blank" rel="noopener" style="--h:${ pct . toFixed ( 1 ) } %" title="${ esc ( point . title ) } ">
239247 <span class="history-bar-fill"></span>
240248 <span class="history-bar-total">${ point . total . toLocaleString ( ) } </span>
241- <span class="history-bar-delta">${ esc ( deltaText ) } </span>
249+ <span class="history-bar-delta${ deltaClass } ">${ esc ( deltaText ) } </span>
242250 </a>` ;
243251 } ) . join ( "" ) ;
244252
245253 listEl . innerHTML = points . slice ( ) . reverse ( ) . map ( ( point ) => {
246254 const changes = point . changes . length
247- ? point . changes . map ( ( row ) => `${ shortLabel [ row . key ] } + ${ row . delta . toLocaleString ( ) } ` ) . join ( ", " )
248- : ( point . delta > 0 ? `total + ${ point . delta . toLocaleString ( ) } ` : "baseline snapshot" ) ;
255+ ? point . changes . map ( ( row ) => `${ shortLabel [ row . key ] } ${ formatDelta ( row . delta ) } ` ) . join ( ", " )
256+ : ( point . baseline ? "baseline snapshot" : `total ${ formatDelta ( point . delta ) } ` ) ;
249257 return `<li><span class="history-dot"></span><span>
250258 <a href="${ esc ( point . url ) } " target="_blank" rel="noopener">${ esc ( point . title ) } </a>
251259 <small>${ esc ( point . when ) } - ${ esc ( point . sha ) } - ${ esc ( changes ) } </small>
@@ -296,6 +304,7 @@ function countUp(node, target) {
296304
297305 for ( let i = 0 ; i < points . length ; i ++ ) {
298306 const prev = points [ i - 1 ] ;
307+ points [ i ] . baseline = ! prev ;
299308 points [ i ] . delta = prev ? points [ i ] . total - prev . total : 0 ;
300309 points [ i ] . changes = largestChanges ( prev ?. rows , points [ i ] . rows ) ;
301310 }
0 commit comments