1- function update_table ( table_id , url , search = null ) {
1+ function updateHeaders ( tableId , url , tableElement ) {
2+ // Get the column header elements.
3+ headerElements = tableElement . getElementsByTagName ( 'TH' ) ;
4+ for ( let x = 0 ; x < headerElements . length ; x ++ ) {
5+ const headerLinks = headerElements [ x ] . getElementsByTagName ( 'A' ) ;
6+ for ( let y = 0 ; y < headerLinks . length ; y ++ ) {
7+ headerLinks [ y ] . onclick = function ( e ) {
8+ e . preventDefault ( ) ;
9+ sortParameters = decodeParameters ( headerLinks [ y ] . getAttribute ( 'href' ) ) ;
10+ urlParameters = decodeParameters ( url ) ;
11+ for ( const [ key , value ] of Object . entries ( sortParameters ) ) {
12+ urlParameters [ key ] = value ;
13+ }
14+ url = clearParameters ( url ) ;
15+ updateTable ( tableId , url + encodeParameters ( urlParameters ) ) ;
16+ } ;
17+ }
18+ }
19+ }
20+
21+ function updateTable ( tableId , url , search = null ) {
222 const xhr = new XMLHttpRequest ( ) ;
323 xhr . onreadystatechange = function ( ) {
424 if ( xhr . readyState == XMLHttpRequest . DONE ) {
525 if ( xhr . status == 200 ) {
626 // Replace the existing table with the table fetched from the request.
7- var table_element = document . getElementById ( table_id ) ;
8- table_element . innerHTML = xhr . responseText ;
27+ var tableElement = document . getElementById ( tableId ) ;
28+ tableElement . innerHTML = xhr . responseText ;
29+ updateHeaders ( tableId , url , tableElement ) ;
930 }
1031 }
1132 } ;
1233 if ( search ) xhr . open ( 'GET' , url + "?search=" + search , true ) ;
1334 else xhr . open ( 'GET' , url , true ) ;
1435 xhr . send ( ) ;
36+ }
37+
38+ function encodeParameters ( params ) {
39+ let result = '?' ;
40+ for ( let i = 0 ; i < Object . keys ( params ) . length ; i ++ ) {
41+ let currentKey = Object . keys ( params ) . at ( i )
42+ result += currentKey + "=" + params [ currentKey ] ;
43+ if ( i < Object . keys ( params ) . length - 1 ) {
44+ result += "&" ;
45+ }
46+ }
47+ return result ;
48+ }
49+
50+ function decodeParameters ( url ) {
51+ let result = { } ;
52+ let parameters = url . split ( "?" ) ;
53+ // If no question mark was found, there were no parameters.
54+ if ( parameters . length <= 1 ) return { } ;
55+ else parameters = parameters [ 1 ] ;
56+ parameters = parameters . split ( "&" ) ;
57+ for ( i in parameters ) {
58+ pair = parameters [ i ] . split ( "=" ) ;
59+ if ( pair . length == 2 ) {
60+ if ( pair [ 1 ] ) {
61+ result [ pair [ 0 ] ] = pair [ 1 ] ;
62+ }
63+ }
64+ }
65+ return result ;
66+ }
67+
68+ function clearParameters ( url ) {
69+ split = url . split ( "?" ) ;
70+ if ( split . length > 1 ) return split [ 0 ] ;
71+ else return url ;
1572}
0 commit comments