1
+ <!DOCTYPE html>
2
+ <html lang =" en" data-lt-installed =" true" >
3
+
4
+ <head >
5
+ <meta http-equiv =" content-type" content =" text/html; charset=UTF-8" >
6
+ <meta charset =" UTF-8" >
7
+ <meta name =" viewport" content =" width=device-width, initial-scale=1.0" >
8
+ <style >
9
+ /* Base colors for Altinity */
10
+ :root {
11
+ --altinity-background : #000D45 ;
12
+ --altinity-accent : #189DCF ;
13
+ --altinity-highlight : #FFC600 ;
14
+ --altinity-gray : #6c757d ;
15
+ --altinity-light-gray : #f8f9fa ;
16
+ --altinity-white : #ffffff ;
17
+ }
18
+
19
+ /* Body and heading fonts */
20
+ body {
21
+ font-family : Arimo, " Proxima Nova" , " Helvetica Neue" , Helvetica , Arial , sans-serif ;
22
+ font-size : 1rem ;
23
+ background-color : var (--altinity-background );
24
+ color : var (--altinity-light-gray );
25
+ padding : 2rem ;
26
+ }
27
+
28
+ h1 ,
29
+ h2 ,
30
+ h3 ,
31
+ h4 ,
32
+ h5 ,
33
+ h6 {
34
+ font-family : Figtree, " Proxima Nova" , " Helvetica Neue" , Helvetica , Arial , sans-serif ;
35
+ color : var (--altinity-white );
36
+ }
37
+
38
+ .logo {
39
+ width : auto ;
40
+ height : 5em ;
41
+ }
42
+
43
+ /* General table styling */
44
+ table {
45
+ min-width : min (900px , 98vw );
46
+ margin : 1rem 0 ;
47
+ border-collapse : collapse ;
48
+ background-color : var (--altinity-white );
49
+ border : 1px solid var (--altinity-accent );
50
+ box-shadow : 0 0 8px rgba (0 , 0 , 0 , 0.05 );
51
+ color : var (--altinity-background );
52
+ }
53
+
54
+ /* Table header styling */
55
+ th {
56
+ background-color : var (--altinity-accent );
57
+ color : var (--altinity-white );
58
+ padding : 10px 16px ;
59
+ text-align : left ;
60
+ border : none ;
61
+ border-bottom : 2px solid var (--altinity-background );
62
+ white-space : nowrap ;
63
+ }
64
+
65
+ th .hth {
66
+ border-bottom : 1px solid var (--altinity-accent );
67
+ border-right : 2px solid var (--altinity-background );
68
+ }
69
+
70
+ /* Table header sorting styling */
71
+ th {
72
+ cursor : pointer ;
73
+ }
74
+
75
+ th .no-sort {
76
+ pointer-events : none ;
77
+ }
78
+
79
+ th ::after ,
80
+ th ::before {
81
+ transition : color 0.2s ease-in-out ;
82
+ font-size : 1.2em ;
83
+ color : transparent ;
84
+ }
85
+
86
+ th ::after {
87
+ margin-left : 3px ;
88
+ content : ' \025B8 ' ;
89
+ }
90
+
91
+ th :hover ::after {
92
+ color : inherit ;
93
+ }
94
+
95
+ th .dir-d ::after {
96
+ color : inherit ;
97
+ content : ' \025BE ' ;
98
+ }
99
+
100
+ th .dir-u ::after {
101
+ color : inherit ;
102
+ content : ' \025B4 ' ;
103
+ }
104
+
105
+ /* Table body row styling */
106
+ tr :hover {
107
+ background-color : var (--altinity-light-gray );
108
+ }
109
+
110
+ /* Table cell styling */
111
+ td {
112
+ padding : 8px 8px ;
113
+ border : 1px solid var (--altinity-accent );
114
+ }
115
+
116
+ /* Link styling */
117
+ a {
118
+ color : var (--altinity-accent );
119
+ text-decoration : none ;
120
+ }
121
+
122
+ a :hover {
123
+ color : var (--altinity-highlight );
124
+ text-decoration : underline ;
125
+ }
126
+ </style >
127
+ <title >{{ title }}</title >
128
+ <link rel =" icon" type =" image/svg+xml"
129
+ href='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgaWQ9ImEiCiAgIHZpZXdCb3g9IjAgMCA5MS42NjAwMDYgMTA1Ljk5IgogICB2ZXJzaW9uPSIxLjEiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImxvZ29faWNvbi5zdmciCiAgIHdpZHRoPSI5MS42NjAwMDQiCiAgIGhlaWdodD0iMTA1Ljk5IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMiAoMGEwMGNmNTMzOSwgMjAyMi0wMi0wNCkiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXc0NyIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSI1Ljc5Nzg1NTIiCiAgICAgaW5rc2NhcGU6Y3g9IjkxLjA2ODE1OSIKICAgICBpbmtzY2FwZTpjeT0iNTQuOTM0MTA3IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTg1MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIxNzc0IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNyIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImEiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPHN0eWxlCiAgICAgICBpZD0ic3R5bGUyIj4uYntmaWxsOiNmZmY7fS5je2ZpbGw6IzE5OWRjZjt9PC9zdHlsZT4KICA8L2RlZnM+CiAgPGcKICAgICBpZD0iZzIyIj4KICAgIDxwb2x5Z29uCiAgICAgICBjbGFzcz0iYyIKICAgICAgIHBvaW50cz0iNDUuODgsMCA0NS44OCwwLjA0IDIyLjk0LDEzLjMgMjIuOTMsMTMuMyAyMi45MywxMy4zIDAuMDksMjYuNDkgMC4wOSwyNi40OSAwLjA5LDI2LjQ5IDAsMjYuNTQgMC4wOSwyNi41OSAwLjA5LDUwLjk2IDY2Ljg2LDEyLjEyICIKICAgICAgIGlkPSJwb2x5Z29uNiIgLz4KICAgIDxwb2x5Z29uCiAgICAgICBjbGFzcz0iYyIKICAgICAgIHBvaW50cz0iMjIuOTQsNDIuMjkgNC4yMSw1My4xOSAyMi45NCw2NC4wOCAiCiAgICAgICBpZD0icG9seWdvbjgiIC8+CiAgICA8cG9seWdvbgogICAgICAgY2xhc3M9ImMiCiAgICAgICBwb2ludHM9IjAuMDksNTUuNTkgMC4wOSw3OS40MyAwLDc5LjQ4IDAuMDksNzkuNTQgMC4wOSwxMDUuOTkgMjIuOCw5Mi44OCAyMi44LDkyLjg4IDQzLjc1LDgwLjc5IDAuMjMsNTUuNTEgIgogICAgICAgaWQ9InBvbHlnb24xMCIgLz4KICAgIDxwb2x5Z29uCiAgICAgICBjbGFzcz0iYyIKICAgICAgIHBvaW50cz0iODkuNjEsMjUuMTcgNzAuOTIsMTQuMzggNDguMDMsMjcuNyA2NC4xOCwzNy4wMiA2NC4yMiwzNi45NiA2Ni43OSwzOC40NSAiCiAgICAgICBpZD0icG9seWdvbjEyIiAvPgogICAgPGcKICAgICAgIGlkPSJnMTgiPgogICAgICA8cG9seWdvbgogICAgICAgICBjbGFzcz0iYyIKICAgICAgICAgcG9pbnRzPSI5MS42Niw1Mi44MiA5MS42Myw1Mi44MyA3Ni4zMyw0NCA5MS42Niw1Mi45MiAiCiAgICAgICAgIGlkPSJwb2x5Z29uMTQiIC8+CiAgICAgIDxwb2x5Z29uCiAgICAgICAgIGNsYXNzPSJjIgogICAgICAgICBwb2ludHM9IjkxLjY2LDEwNS43NiA5MS42Niw1Ny41NSA2OC43MSw0NC4yIDY4LjcxLDkyLjUxICIKICAgICAgICAgaWQ9InBvbHlnb24xNiIgLz4KICAgIDwvZz4KICAgIDxwb2x5Z29uCiAgICAgICBjbGFzcz0iYyIKICAgICAgIHBvaW50cz0iOTEuNjYsNTIuODUgOTEuNjYsMjguNjEgNzAuNzcsNDAuNzYgNzYuMjgsNDMuOTcgIgogICAgICAgaWQ9InBvbHlnb24yMCIgLz4KICA8L2c+Cjwvc3ZnPgo='
130
+ />
131
+ </head >
132
+
133
+ <body >
134
+ <p ><img class =" logo"
135
+ src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJhIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjEuNTUgMTA1Ljk5Ij48ZGVmcz48c3R5bGU+LmJ7ZmlsbDojZmZmO30uY3tmaWxsOiMxOTlkY2Y7fTwvc3R5bGU+PC9kZWZzPjxnPjxwb2x5Z29uIGNsYXNzPSJjIiBwb2ludHM9Ii4wOSA1MC45NiA2Ni44NiAxMi4xMiA0NS44OCAwIDQ1Ljg4IC4wNCAyMi45NCAxMy4zIDIyLjkzIDEzLjMgMjIuOTMgMTMuMyAuMDkgMjYuNDkgLjA5IDI2LjQ5IC4wOSAyNi40OSAwIDI2LjU0IC4wOSAyNi41OSAuMDkgNTAuOTYiLz48cG9seWdvbiBjbGFzcz0iYyIgcG9pbnRzPSI0LjIxIDUzLjE5IDIyLjk0IDY0LjA4IDIyLjk0IDQyLjI5IDQuMjEgNTMuMTkiLz48cG9seWdvbiBjbGFzcz0iYyIgcG9pbnRzPSI0My43NSA4MC43OSAuMjMgNTUuNTEgLjA5IDU1LjU5IC4wOSA3OS40MyAwIDc5LjQ4IC4wOSA3OS41NCAuMDkgMTA1Ljk5IDIyLjggOTIuODggMjIuOCA5Mi44OCA0My43NSA4MC43OSIvPjxwb2x5Z29uIGNsYXNzPSJjIiBwb2ludHM9IjY0LjIyIDM2Ljk2IDY2Ljc5IDM4LjQ1IDg5LjYxIDI1LjE3IDcwLjkyIDE0LjM4IDQ4LjAzIDI3LjcgNjQuMTggMzcuMDIgNjQuMjIgMzYuOTYiLz48Zz48cG9seWdvbiBjbGFzcz0iYyIgcG9pbnRzPSI3Ni4zMyA0NCA5MS42NiA1Mi45MiA5MS42NiA1Mi44MiA5MS42MyA1Mi44MyA3Ni4zMyA0NCIvPjxwb2x5Z29uIGNsYXNzPSJjIiBwb2ludHM9IjY4LjcxIDQ0LjIgNjguNzEgOTIuNTEgOTEuNjYgMTA1Ljc2IDkxLjY2IDU3LjU1IDY4LjcxIDQ0LjIiLz48L2c+PHBvbHlnb24gY2xhc3M9ImMiIHBvaW50cz0iNzAuNzcgNDAuNzYgNzYuMjggNDMuOTcgOTEuNjYgNTIuODUgOTEuNjYgMjguNjEgNzAuNzcgNDAuNzYiLz48L2c+PHBhdGggY2xhc3M9ImIiIGQ9Ik0xNDkuOTIsMjkuNjZoMTIuMzhsMTkuNzIsNDYuNjdoLTEzLjc3bC0zLjM4LTguMjdoLTE3Ljg3bC0zLjMxLDguMjdoLTEzLjVsMTkuNzItNDYuNjdabTExLjI1LDI4LjRsLTUuMTYtMTMuMTctNS4yMywxMy4xN2gxMC4zOVoiLz48cGF0aCBjbGFzcz0iYiIgZD0iTTE4Ni41MywyOS45OWgxMi44NHYzNS4wOGgyMi40NHYxMS4yNWgtMzUuMjhWMjkuOTlaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik0yMzAsNDEuMjVoLTEzLjl2LTExLjI1aDQwLjY0djExLjI1aC0xMy45djM1LjA4aC0xMi44NFY0MS4yNVoiLz48cGF0aCBjbGFzcz0iYiIgZD0iTTI2Mi42MywyOS45OWgxMi45MXY0Ni4zM2gtMTIuOTFWMjkuOTlaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik0yODQuMDEsMjkuOTloMTEuOThsMTkuMDYsMjQuNDlWMjkuOTloMTIuNzF2NDYuMzNoLTExLjI1bC0xOS43OS0yNS40MnYyNS40MmgtMTIuNzFWMjkuOTlaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik0zMzYuMjQsMjkuOTloMTIuOTF2NDYuMzNoLTEyLjkxVjI5Ljk5WiIvPjxwYXRoIGNsYXNzPSJiIiBkPSJNMzY4Ljk0LDQxLjI1aC0xMy45di0xMS4yNWg0MC42NHYxMS4yNWgtMTMuOXYzNS4wOGgtMTIuODRWNDEuMjVaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik00MTYuNjgsNTguOThsLTE3LjYxLTI4Ljk5aDE0LjYzbDkuNTMsMTYuODgsOS42LTE2Ljg4aDE0LjM2bC0xNy42MSwyOC43OXYxNy41NGgtMTIuOTF2LTE3LjM0WiIvPjxnPjxwYXRoIGNsYXNzPSJiIiBkPSJNNDU3Ljk5LDM0Ljg5Yy4yOS0uMDksLjU0LS4yNCwuNzMtLjQ0LC4yNS0uMjUsLjM3LS41OCwuMzctMSwwLS40Ny0uMTgtLjg1LS41My0xLjEyLS4zNC0uMjYtLjc5LS40LTEuMzMtLjRoLTIuMDZjLS4wNywwLS4xMiwuMDYtLjEyLC4xMnY0LjYxYzAsLjA3LC4wNiwuMTIsLjEyLC4xMmguNjhjLjA3LDAsLjEyLS4wNiwuMTItLjEydi0xLjYyaC45OWwxLjI5LDEuNjlzLjA2LC4wNSwuMSwuMDVoLjg0cy4wOS0uMDMsLjExLS4wN2MuMDItLjA0LC4wMi0uMDktLjAxLS4xM2wtMS4zMi0xLjcxWm0uMTUtMS40YzAsLjIzLS4wOCwuMzktLjI1LC41MS0uMTgsLjEzLS40MiwuMTktLjcyLC4xOWgtMS4xOXYtMS4zOWgxLjIzYy4zLDAsLjU0LC4wNiwuNywuMTksLjE1LC4xMiwuMjMsLjI4LC4yMywuNVoiLz48cGF0aCBjbGFzcz0iYiIgZD0iTTQ2MS4yLDMyLjY5Yy0uMjQtLjU2LS41Ny0xLjA1LS45OC0xLjQ3LS40MS0uNDItLjktLjc1LTEuNDYtLjk5LS41Ni0uMjQtMS4xNy0uMzYtMS44Mi0uMzZzLTEuMjYsLjEyLTEuODIsLjM3Yy0uNTYsLjI1LTEuMDYsLjU4LTEuNDgsMS0uNDIsLjQyLS43NSwuOTItLjk4LDEuNDctLjI0LC41Ni0uMzYsMS4xNi0uMzYsMS43OXMuMTIsMS4yMywuMzYsMS43OWMuMjQsLjU2LC41NiwxLjA1LC45OCwxLjQ3LC40MSwuNDIsLjksLjc1LDEuNDYsLjk5LC41NiwuMjQsMS4xNywuMzYsMS44MSwuMzZzMS4yNi0uMTIsMS44Mi0uMzdjLjU2LS4yNSwxLjA2LS41OCwxLjQ3LTEsLjQyLS40MiwuNzUtLjkyLC45OC0xLjQ3LC4yNC0uNTYsLjM2LTEuMTYsLjM2LTEuNzlzLS4xMi0xLjIzLS4zNi0xLjc5Wm0tLjMsMS43OWMwLC41NC0uMSwxLjA2LS4zLDEuNTUtLjIsLjQ5LS40OCwuOTEtLjg0LDEuMjctLjM1LC4zNi0uNzgsLjY1LTEuMjcsLjg2LS40OSwuMjEtMS4wMiwuMzItMS41NywuMzJzLTEuMDktLjExLTEuNTYtLjMxYy0uNDgtLjIxLS45LS41LTEuMjUtLjg2LS4zNS0uMzYtLjYzLS43OC0uODMtMS4yNy0uMi0uNDgtLjMtMS0uMy0xLjU0cy4xLTEuMDYsLjMtMS41NWMuMi0uNDgsLjQ4LS45MSwuODQtMS4yNywuMzYtLjM2LC43OC0uNjUsMS4yNi0uODYsLjQ4LS4yMSwxLjAxLS4zMiwxLjU4LS4zMnMxLjA5LC4xMSwxLjU3LC4zMWMuNDgsLjIxLC45LC41LDEuMjUsLjg2LC4zNSwuMzYsLjYzLC43OCwuODMsMS4yNywuMiwuNDgsLjMsMSwuMywxLjU0WiIvPjwvZz48L3N2Zz4="
136
+ alt =" logo" ></p >
137
+
138
+ <h1 >{{ title }}</h1 >
139
+ <table >
140
+ <tbody >
141
+ <tr >
142
+ <th class =" hth no-sort" >Pull Request</th >
143
+ <td >{{ pr_info_html }}</td >
144
+ </tr >
145
+ <tr >
146
+ <th class =" hth no-sort" >Workflow Run</th >
147
+ <td ><a href =" https://github.com/{{ github_repo }}/actions/runs/{{ workflow_id }}" >{{ workflow_id }}</a ></td >
148
+ </tr >
149
+ <tr >
150
+ <th class =" hth no-sort" >Commit</th >
151
+ <td ><a href =" https://github.com/{{ github_repo }}/commit/{{ commit_sha }}" >{{ commit_sha }}</a ></td >
152
+ </tr >
153
+ <tr >
154
+ <th class =" hth no-sort" >Build Report</th >
155
+ <td ><a href =" https://s3.amazonaws.com/{{ s3_bucket }}/{{ pr_number }}/{{ commit_sha }}/builds/report.html" >Build Report</a ></td >
156
+ </tr >
157
+ <tr >
158
+ <th class =" hth no-sort" >Date</th >
159
+ <td > {{ date }}</td >
160
+ </tr >
161
+ </tbody >
162
+ </table >
163
+ {% if is_preview %}
164
+ <p style =" font-weight : bold ;color : red ;" >This is a preview. The workflow is not yet finished.</p >
165
+ {% endif %}
166
+ <h2 >Table of Contents</h2 >
167
+ <ul >
168
+ {% - if pr_number != 0 %} <li ><a href =" #new-fails-pr" >New Fails in PR</a > ({{ counts.pr_new_fails }})</li >{% endif %}
169
+ <li ><a href =" #ci-jobs-status" >CI Jobs Status</a > ({{ counts.jobs_status }})</li >
170
+ <li ><a href =" #checks-errors" >Checks Errors</a > ({{ counts.checks_errors }})</li >
171
+ <li ><a href =" #checks-fails" >Checks New Fails</a > ({{ counts.checks_new_fails }})</li >
172
+ <li ><a href =" #regression-fails" >Regression New Fails</a > ({{ counts.regression_new_fails }})</li >
173
+ <li ><a href =" #docker-images-cves" >Docker Images CVEs</a > ({{ counts.cves }})</li >
174
+ <li ><a href =" #checks-known-fails" >Checks Known Fails</a > ({{ counts.checks_known_fails }})</li >
175
+ </ul >
176
+
177
+ {% - if pr_number != 0 -%}
178
+ <h2 id =" new-fails-pr" >New Fails in PR</h2 >
179
+ <p > Compared with base sha {{ base_sha }} </p >
180
+ {{ new_fails_html }}
181
+ {% - endif %}
182
+
183
+ <h2 id =" ci-jobs-status" >CI Jobs Status</h2 >
184
+ {{ ci_jobs_status_html }}
185
+
186
+ <h2 id =" checks-errors" >Checks Errors</h2 >
187
+ {{ checks_errors_html }}
188
+
189
+ <h2 id =" checks-fails" >Checks New Fails</h2 >
190
+ {{ checks_fails_html }}
191
+
192
+ <h2 id =" regression-fails" >Regression New Fails</h2 >
193
+ {{ regression_fails_html }}
194
+
195
+ <h2 id =" docker-images-cves" >Docker Images CVEs</h2 >
196
+ {{ docker_images_cves_html }}
197
+
198
+ <h2 id =" checks-known-fails" >Checks Known Fails</h2 >
199
+ <p >
200
+ Fail reason conventions:<br />
201
+ KNOWN - Accepted fail and fix is not planned<br />
202
+ INVESTIGATE - We don't know why it fails<br />
203
+ NEEDSFIX - Investigation done and a fix is needed to make it pass<br />
204
+ </p >
205
+ {{ checks_known_fails_html }}
206
+
207
+ <script >
208
+ document .addEventListener (' click' , function (e ) {
209
+ try {
210
+ function findElementRecursive (element , tag ) {
211
+ return element .nodeName === tag ? element :
212
+ findElementRecursive (element .parentNode , tag)
213
+ }
214
+ var descending_th_class = ' dir-d '
215
+ var ascending_th_class = ' dir-u '
216
+ var ascending_table_sort_class = ' asc'
217
+ var regex_dir = / dir-(u| d) /
218
+ var alt_sort = e .shiftKey || e .altKey
219
+ var element = findElementRecursive (e .target , ' TH' )
220
+ var tr = findElementRecursive (element, ' TR' )
221
+ var table = findElementRecursive (tr, ' TABLE' )
222
+ function reClassify (element , dir ) {
223
+ element .className = element .className .replace (regex_dir, ' ' ) + dir
224
+ }
225
+ function getValue (element ) {
226
+ return (
227
+ (alt_sort && element .getAttribute (' data-sort-alt' )) ||
228
+ element .getAttribute (' data-sort' ) || element .innerText
229
+ )
230
+ }
231
+ if (true ) {
232
+ var column_index
233
+ var nodes = tr .cells
234
+ for (var i = 0 ; i < nodes .length ; i++ ) {
235
+ if (nodes[i] === element) {
236
+ column_index = element .getAttribute (' data-sort-col' ) || i
237
+ } else {
238
+ reClassify (nodes[i], ' ' )
239
+ }
240
+ }
241
+ var dir = descending_th_class
242
+ if (
243
+ element .className .indexOf (descending_th_class) !== - 1 ||
244
+ (table .className .indexOf (ascending_table_sort_class) !== - 1 &&
245
+ element .className .indexOf (ascending_th_class) == - 1 )
246
+ ) {
247
+ dir = ascending_th_class
248
+ }
249
+ reClassify (element, dir)
250
+ var org_tbody = table .tBodies [0 ]
251
+ var rows = [].slice .call (org_tbody .rows , 0 )
252
+ var reverse = dir === ascending_th_class
253
+ rows .sort (function (a , b ) {
254
+ var x = getValue ((reverse ? a : b).cells [column_index])
255
+ var y = getValue ((reverse ? b : a).cells [column_index])
256
+ return isNaN (x - y) ? x .localeCompare (y) : x - y
257
+ })
258
+ var clone_tbody = org_tbody .cloneNode ()
259
+ while (rows .length ) {
260
+ clone_tbody .appendChild (rows .splice (0 , 1 )[0 ])
261
+ }
262
+ table .replaceChild (clone_tbody, org_tbody)
263
+ }
264
+ } catch (error) {
265
+ }
266
+ });
267
+ </script >
268
+ </body >
269
+ </html >
0 commit comments