@@ -129,7 +129,7 @@ function updateBaselineDropdown() {
129129
130130function loadData ( ) {
131131 var conf = getConfiguration ( ) ;
132- if ( ! conf . exe || ! conf . ben ) { return ; }
132+ if ( ! conf . exe || ! conf . ben ) { refreshContent ( ) ; return ; }
133133 var cacheKey = conf . exe + "|" + conf . ben ;
134134 if ( dataCache [ cacheKey ] ) {
135135 compdata = dataCache [ cacheKey ] ;
@@ -373,6 +373,49 @@ function init(defaults) {
373373 $ ( "#permalink" ) . click ( function ( ) {
374374 window . location = "?" + $ . param ( getConfiguration ( ) ) ;
375375 } ) ;
376+
377+ $ ( "#exportcsv" ) . click ( function ( e ) {
378+ e . preventDefault ( ) ;
379+ if ( ! compdata ) { return ; }
380+ var conf = getConfiguration ( ) ;
381+ var exes = conf . exe ? conf . exe . split ( "," ) . filter ( Boolean ) : [ ] ;
382+ var enviros = readCheckbox ( "input[name='environments']:checked" ) . split ( "," ) . filter ( Boolean ) ;
383+ var benchmarks = conf . ben ? conf . ben . split ( "," ) . filter ( Boolean ) : [ ] ;
384+
385+ // Header row: benchmark, then one column per exe@env
386+ var header = [ "benchmark" ] ;
387+ for ( var i = 0 ; i < exes . length ; i ++ ) {
388+ for ( var j = 0 ; j < enviros . length ; j ++ ) {
389+ var exeLabel = $ ( "label[for='exe_" + exes [ i ] + "']" ) . text ( ) . trim ( ) ;
390+ var envLabel = $ ( "label[for='env_" + enviros [ j ] + "']" ) . text ( ) . trim ( ) ;
391+ header . push ( enviros . length > 1 ? exeLabel + "@" + envLabel : exeLabel ) ;
392+ }
393+ }
394+
395+ var rows = [ header ] ;
396+ for ( var b = 0 ; b < benchmarks . length ; b ++ ) {
397+ var benchLabel = $ ( "label[for='benchmark_" + benchmarks [ b ] + "']" ) . text ( ) . trim ( ) ;
398+ var row = [ benchLabel ] ;
399+ for ( var i = 0 ; i < exes . length ; i ++ ) {
400+ for ( var j = 0 ; j < enviros . length ; j ++ ) {
401+ var val = compdata [ exes [ i ] ] && compdata [ exes [ i ] ] [ enviros [ j ] ]
402+ ? compdata [ exes [ i ] ] [ enviros [ j ] ] [ benchmarks [ b ] ]
403+ : "" ;
404+ row . push ( val === null || val === undefined ? "" : val ) ;
405+ }
406+ }
407+ rows . push ( row ) ;
408+ }
409+
410+ var csv = rows . map ( function ( r ) { return r . join ( "," ) ; } ) . join ( "\n" ) ;
411+ var blob = new Blob ( [ csv ] , { type : "text/csv" } ) ;
412+ var url = URL . createObjectURL ( blob ) ;
413+ var a = document . createElement ( "a" ) ;
414+ a . href = url ;
415+ a . download = "comparison.csv" ;
416+ a . click ( ) ;
417+ URL . revokeObjectURL ( url ) ;
418+ } ) ;
376419}
377420
378421return {
0 commit comments