| 140 | } |
| 141 | |
| 142 | #sortValue(cell, type) { |
| 143 | const raw = (cell?.getAttribute('data-sort-value') || cell?.querySelector('time')?.getAttribute('datetime') || cell?.textContent || '').trim(); |
| 144 | |
| 145 | if (type === 'number') { |
| 146 | const number = Number.parseFloat(raw.replace(/[^0-9.+-]/g, '')); |
| 147 | return Number.isNaN(number) ? Number.NEGATIVE_INFINITY : number; |
| 148 | } |
| 149 | |
| 150 | if (type === 'date') { |
| 151 | const time = Date.parse(raw); |
| 152 | return Number.isNaN(time) ? Number.NEGATIVE_INFINITY : time; |
| 153 | } |
| 154 | |
| 155 | if (type === 'auto') { |
| 156 | const number = Number.parseFloat(raw.replace(/[^0-9.+-]/g, '')); |
| 157 | if (!Number.isNaN(number) && /\d/.test(raw)) { |
| 158 | return number; |
| 159 | } |
| 160 | |
| 161 | const time = Date.parse(raw); |
| 162 | if (!Number.isNaN(time) && /\d{4}|\d{1,2}[:/-]/.test(raw)) { |
| 163 | return time; |
| 164 | } |
| 165 | } |
| 166 | |
| 167 | return raw.toLocaleLowerCase(); |
| 168 | } |
| 169 | |
| 170 | #compare(first, second) { |
| 171 | if (typeof first === 'number' && typeof second === 'number') { |