@@ -414,6 +414,13 @@ <h1>JSONBench — a Benchmark For Data Analytics On JSON</h1>
414
414
< a class ="selector " id ="selector-metric-quality "> Data Quality</ a >
415
415
</ td >
416
416
</ tr >
417
+ < tr >
418
+ < th > Retain Structure: </ th >
419
+ < td id ="selectors_retain_structure ">
420
+ < a class ="selector selector-active " id ="selector-retain-structure-yes "> Yes</ a >
421
+ < a class ="selector " id ="selector-retain-structure-no "> No</ a >
422
+ </ td >
423
+ </ tr >
417
424
</ table >
418
425
419
426
< table class ="stick-left comparison ">
@@ -457,6 +464,7 @@ <h2>Detailed Comparison</h2>
457
464
"scale" : 1000_000_000 ,
458
465
"metric" : "hot" ,
459
466
"queries" : [ ] ,
467
+ "retain_structure" : { "yes" : true , "no" : false }
460
468
} ;
461
469
462
470
let theme = 'light' ;
@@ -564,6 +572,27 @@ <h2>Detailed Comparison</h2>
564
572
document . getElementById ( 'selector-metric-size' ) . addEventListener ( 'click' , e => { selectors . metric = 'size' ; render ( ) ; updateHistory ( ) ; } ) ;
565
573
document . getElementById ( 'selector-metric-quality' ) . addEventListener ( 'click' , e => { selectors . metric = 'quality' ; render ( ) ; updateHistory ( ) ; } ) ;
566
574
575
+ document . getElementById ( 'selector-retain-structure-yes' ) . addEventListener ( 'click' , e => {
576
+ selectors . retain_structure . yes = ! selectors . retain_structure . yes ;
577
+ if ( selectors . retain_structure . yes ) {
578
+ e . target . classList . add ( 'selector-active' ) ;
579
+ } else {
580
+ e . target . classList . remove ( 'selector-active' ) ;
581
+ }
582
+ render ( ) ;
583
+ updateHistory ( ) ;
584
+ } ) ;
585
+ document . getElementById ( 'selector-retain-structure-no' ) . addEventListener ( 'click' , e => {
586
+ selectors . retain_structure . no = ! selectors . retain_structure . no ;
587
+ if ( selectors . retain_structure . no ) {
588
+ e . target . classList . add ( 'selector-active' ) ;
589
+ } else {
590
+ e . target . classList . remove ( 'selector-active' ) ;
591
+ }
592
+ render ( ) ;
593
+ updateHistory ( ) ;
594
+ } ) ;
595
+
567
596
selectors . queries = queries . map ( ( ) => true ) ;
568
597
569
598
function updateSelectors ( ) {
@@ -574,6 +603,12 @@ <h2>Detailed Comparison</h2>
574
603
[ ...document . getElementById ( 'selectors_run' ) . querySelectorAll ( 'a' ) ] . map ( elem => {
575
604
elem . className = elem . id == 'selector-metric-' + selectors . metric ? 'selector selector-active' : 'selector' } ) ;
576
605
606
+ // Update retain structure buttons state
607
+ document . getElementById ( 'selector-retain-structure-yes' ) . className =
608
+ selectors . retain_structure . yes ? 'selector selector-active' : 'selector' ;
609
+ document . getElementById ( 'selector-retain-structure-no' ) . className =
610
+ selectors . retain_structure . no ? 'selector selector-active' : 'selector' ;
611
+
577
612
[ ...document . querySelectorAll ( '.query-checkbox' ) ] . map ( ( elem , i ) => { elem . checked = selectors . queries [ i ] } ) ;
578
613
}
579
614
@@ -774,7 +809,11 @@ <h2>Detailed Comparison</h2>
774
809
775
810
let filtered_data = data . filter ( elem =>
776
811
( selectors . system [ elem . system ] || ( selectors . metric == 'size' && elem . fake ) ) &&
777
- selectors . scale == elem . dataset_size ) ;
812
+ selectors . scale == elem . dataset_size &&
813
+ (
814
+ ( selectors . retain_structure . yes && elem . retains_structure === "yes" ) ||
815
+ ( selectors . retain_structure . no && elem . retains_structure === "no" )
816
+ ) ) ;
778
817
779
818
let nothing_selected_elem = document . getElementById ( 'nothing-selected' ) ;
780
819
if ( filtered_data . length == 0 ) {
@@ -921,13 +960,21 @@ <h2>Detailed Comparison</h2>
921
960
window . onpopstate = function ( event ) {
922
961
if ( ! event . state ) { return ; }
923
962
selectors = event . state ;
963
+ // Ensure retain_structure exists in loaded state
964
+ if ( ! selectors . retain_structure ) {
965
+ selectors . retain_structure = { "yes" : true , "no" : false } ;
966
+ }
924
967
render ( ) ;
925
968
updateSelectors ( ) ;
926
969
} ;
927
970
928
971
if ( window . location . hash ) {
929
972
try {
930
973
selectors = JSON . parse ( atob ( window . location . hash . substring ( 1 ) ) ) ;
974
+ // Ensure retain_structure exists in loaded state
975
+ if ( ! selectors . retain_structure ) {
976
+ selectors . retain_structure = { "yes" : true , "no" : false } ;
977
+ }
931
978
} catch { }
932
979
}
933
980
0 commit comments