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