@@ -36,6 +36,7 @@ type SearchData = {
3636
3737type EmojiData = {
3838 codepoints : string ;
39+ order : number ;
3940 emoji : string ;
4041 description : string ;
4142 tags : string [ ] ;
@@ -242,6 +243,7 @@ async function main() {
242243 return ;
243244 }
244245
246+ var order = 0 ;
245247 for ( const row of rawData . data ) {
246248 const tags = [ row . group . replaceAll ( ' ' , '-' ) , row . subgroup , row . qualification , row . version ] ;
247249 if ( row . description . endsWith ( "skin tone" ) ) {
@@ -254,6 +256,7 @@ async function main() {
254256 }
255257 data . push ( {
256258 codepoints : row . codepoints ,
259+ order : order ++ ,
257260 emoji : row . emoji ,
258261 description : row . description ,
259262 tags,
@@ -264,17 +267,17 @@ async function main() {
264267 console . log ( data [ 0 ] ) ;
265268
266269 const qs = new URLSearchParams ( window . location . search ) ;
267- const sort : Sorter [ ] = [ { column : "codepoints " , dir : "asc" } ] ;
270+ const initialSort : Sorter [ ] = [ { column : "emoji " , dir : "asc" } ] ;
268271 const filters : Filter [ ] = [ ] ;
269272 if ( qs ) {
270273 ;
271274 for ( const [ key , value ] of qs . entries ( ) ) {
272275 if ( key == "sort" ) {
273- sort [ 0 ] . column = value ;
276+ initialSort [ 0 ] . column = value ;
274277 continue ;
275278 }
276279 if ( key == "dir" ) {
277- sort [ 0 ] . dir = ( value == "desc" ) ? "desc" : "asc" ;
280+ initialSort [ 0 ] . dir = value == "desc" ? "desc" : "asc" ;
278281 }
279282 if ( key && value ) {
280283 filters . push ( { field : key , type : "=" , value : value } ) ;
@@ -295,7 +298,7 @@ async function main() {
295298 TooltipModule ,
296299 ] ) ;
297300
298- const table = new Tabulator ( "#achtable " , {
301+ const table = new Tabulator ( "#emojitable " , {
299302 autoResize : true ,
300303 data,
301304 columns : [
@@ -331,9 +334,13 @@ async function main() {
331334 return headerValue == rowValue ;
332335 } ,
333336 headerHozAlign : "center" ,
334- headerSort : false ,
335337 hozAlign : "center" ,
336338 responsive : 0 ,
339+ sorter : ( a , b , aRow , bRow , column , dir , sorterParams ) => {
340+ var aOrder = aRow . getData ( ) . order ;
341+ var bOrder = bRow . getData ( ) . order ;
342+ return aOrder - bOrder ;
343+ } ,
337344 title : "Emoji" ,
338345 width : 150 ,
339346 } ,
@@ -389,7 +396,7 @@ async function main() {
389396 ] ,
390397 height : "100%" ,
391398 initialHeaderFilter : filters ,
392- initialSort : [ { column : "code" , dir : "asc" } ] ,
399+ initialSort,
393400 layout : "fitDataStretch" ,
394401 placeholder : "No matches" ,
395402 responsiveLayout : "hide" ,
@@ -402,31 +409,30 @@ async function main() {
402409
403410 table . on ( "dataFiltered" , function ( filters , rows ) {
404411 var el = document . getElementById ( "rowcount" ) ;
412+ var qs = new URLSearchParams ( window . location . search ) ;
413+ for ( const col of table . getColumns ( ) ) {
414+ qs . delete ( col . getField ( ) ) ;
415+ }
405416 if ( filters && filters . length > 0 ) {
406417 el ! . innerHTML = `Rows: ${ rows . length . toLocaleString ( ) } of ${ data . length . toLocaleString ( ) } ` ;
407- var qs = filters
408- . map ( f => `${ encodeURIComponent ( f . field ) } =${ encodeURIComponent ( f . value ) } ` )
409- . join ( "&" ) ;
410- qs += `&sort=${ table . getSorters ( ) [ 0 ] ?. column . getField ( ) } &dir=${ table . getSorters ( ) [ 0 ] ?. dir } ` ;
411- window . history . replaceState ( null , "" , "?" + qs ) ;
418+ for ( const f of filters ) {
419+ qs . set ( f . field , f . value as string ) ;
420+ }
412421 } else {
413422 el ! . innerHTML = `Rows: ${ data . length . toLocaleString ( ) } ` ;
414423 }
424+ window . history . replaceState ( null , "" , "?" + qs ) ;
415425 } ) ;
416426
417427 table . on ( "dataSorted" , function ( sorters , rows ) {
418- var qs = `sort=${ sorters [ 0 ] ?. column . getField ( ) } &dir=${ sorters [ 0 ] ?. dir } ` ;
419- const filters = table . getFilters ( true ) ;
420- if ( filters && filters . length > 0 ) {
421- qs = filters
422- . map ( f => `${ encodeURIComponent ( f . field ) } =${ encodeURIComponent ( f . value ) } ` )
423- . join ( "&" ) + "&" + qs ;
424- }
428+ var qs = new URLSearchParams ( window . location . search ) ;
429+ qs . set ( "sort" , sorters [ 0 ] ?. column . getField ( ) ) ;
430+ qs . set ( "dir" , sorters [ 0 ] ?. dir ) ;
425431 window . history . replaceState ( null , "" , "?" + qs ) ;
426432 } ) ;
427433
428434 document . getElementById ( "loading" ) ! . style . display = "none" ;
429- document . getElementById ( "achtable " ) ! . style . display = "block" ;
435+ document . getElementById ( "emojitable " ) ! . style . display = "block" ;
430436}
431437
432438main ( ) ;
0 commit comments