@@ -28,49 +28,51 @@ const renderStatic = () => {
2828 renderEnvironmentTable ( )
2929}
3030
31+ const addItemToggleListener = ( elem ) => {
32+ elem . addEventListener ( 'click' , ( { target } ) => {
33+ const id = target . parentElement . dataset . id
34+ manager . toggleCollapsedItem ( id )
35+
36+ const collapsedIds = getCollapsedIds ( )
37+ if ( collapsedIds . includes ( id ) ) {
38+ const updated = collapsedIds . filter ( ( item ) => item !== id )
39+ setCollapsedIds ( updated )
40+ } else {
41+ collapsedIds . push ( id )
42+ setCollapsedIds ( collapsedIds )
43+ }
44+ redraw ( )
45+ } )
46+ }
47+
3148const renderContent = ( tests ) => {
3249 const sortAttr = getSort ( manager . initialSort )
3350 const sortAsc = JSON . parse ( getSortDirection ( ) )
3451 const rows = tests . map ( dom . getResultTBody )
3552 const table = document . getElementById ( 'results-table' )
36- const tableHeader = document . getElementById ( 'template_results-table__head' ) . content . cloneNode ( true )
53+ const tableHeader = document . getElementById ( 'results-table-head' )
54+
55+ const newTable = document . createElement ( 'table' )
56+ newTable . id = 'results-table'
3757
38- removeChildren ( table )
58+ // remove all sorting classes and set the relevant
59+ findAll ( '.sortable' , tableHeader ) . forEach ( ( elem ) => elem . classList . remove ( 'asc' , 'desc' ) )
60+ tableHeader . querySelector ( `.sortable[data-column-type="${ sortAttr } "]` ) . classList . add ( sortAsc ? 'desc' : 'asc' )
61+ newTable . appendChild ( tableHeader )
3962
40- tableHeader . querySelector ( `.sortable[data-column-type="${ sortAttr } "]` ) ?. classList . add ( sortAsc ? 'desc' : 'asc' )
41- table . appendChild ( tableHeader )
4263 if ( ! rows . length ) {
4364 const emptyTable = document . getElementById ( 'template_results-table__body--empty' ) . content . cloneNode ( true )
44- table . appendChild ( emptyTable )
45- }
46-
47- rows . forEach ( ( row ) => ! ! row && table . appendChild ( row ) )
48-
49- findAll ( '.sortable' ) . forEach ( ( elem ) => {
50- elem . addEventListener ( 'click' , ( evt ) => {
51- const { target : element } = evt
52- const { columnType } = element . dataset
53- doSort ( columnType )
54- redraw ( )
55- } )
56- } )
57-
58- findAll ( '.collapsible td:not(.col-links' ) . forEach ( ( elem ) => {
59- elem . addEventListener ( 'click' , ( { target } ) => {
60- const id = target . parentElement . dataset . id
61- manager . toggleCollapsedItem ( id )
62-
63- const collapsedIds = getCollapsedIds ( )
64- if ( collapsedIds . includes ( id ) ) {
65- const updated = collapsedIds . filter ( ( item ) => item !== id )
66- setCollapsedIds ( updated )
67- } else {
68- collapsedIds . push ( id )
69- setCollapsedIds ( collapsedIds )
65+ newTable . appendChild ( emptyTable )
66+ } else {
67+ rows . forEach ( ( row ) => {
68+ if ( ! ! row ) {
69+ findAll ( '.collapsible td:not(.col-links' , row ) . forEach ( addItemToggleListener )
70+ newTable . appendChild ( row )
7071 }
71- redraw ( )
7272 } )
73- } )
73+ }
74+
75+ table . replaceWith ( newTable )
7476}
7577
7678const renderDerived = ( ) => {
@@ -108,6 +110,16 @@ const bindEvents = () => {
108110 findAll ( 'input[name="filter_checkbox"]' ) . forEach ( ( elem ) => {
109111 elem . addEventListener ( 'click' , filterColumn )
110112 } )
113+
114+ findAll ( '.sortable' ) . forEach ( ( elem ) => {
115+ elem . addEventListener ( 'click' , ( evt ) => {
116+ const { target : element } = evt
117+ const { columnType } = element . dataset
118+ doSort ( columnType )
119+ redraw ( )
120+ } )
121+ } )
122+
111123 document . getElementById ( 'show_all_details' ) . addEventListener ( 'click' , ( ) => {
112124 manager . allCollapsed = false
113125 setCollapsedIds ( [ ] )
0 commit comments