11import { librariesElement , librariesSelect } from "./dom-elements.js" ;
22
3+ import queryString from "querystring" ;
34import Isotope from "isotope-layout" ;
45
56const librariesGrid = new Isotope ( librariesElement , {
7+ initLayout : false ,
68 layoutMode : "fitRows" ,
79 itemSelector : "article" ,
810 percentPosition : true ,
@@ -11,10 +13,44 @@ const librariesGrid = new Isotope(librariesElement, {
1113 } ,
1214} ) ;
1315
16+ function setQueryStringParameter ( name , value ) {
17+ if ( value ) {
18+ const params = new URLSearchParams ( window . location . search ) ;
19+ params . set ( name , value ) ;
20+ window . history . replaceState ( { } , '' , decodeURIComponent ( `${ window . location . pathname } ?${ params } ` ) ) ;
21+ } else {
22+ window . history . replaceState ( { } , '' , decodeURIComponent ( window . location . pathname ) ) ;
23+ }
24+ }
25+
1426export function setupLibraries ( ) {
1527 librariesSelect . addEventListener ( "change" , ( event ) => {
1628 librariesGrid . arrange ( {
1729 filter : event . target . value ,
1830 } ) ;
31+ if ( event . target . value === '*' ) {
32+ setQueryStringParameter ( 'language' , '' )
33+ } else {
34+ setQueryStringParameter ( 'language' , document . querySelector ( `#libraries-select > option[value="${ event . target . value } "]` ) . innerHTML )
35+ }
1936 } ) ;
20- }
37+
38+ const { language : preselect } = {
39+ ...queryString . parse ( document . location . search . substr ( 1 ) ) ,
40+ ...queryString . parse ( document . location . hash . substr ( 1 ) )
41+ }
42+
43+ let select ;
44+
45+ if ( preselect ) {
46+ try {
47+ select = document . querySelector ( `#libraries-select > option[value=".${ preselect } "]` )
48+ || [ ...document . querySelectorAll ( '#libraries-select > option' ) ] . find ( ( el ) => preselect === el . innerHTML )
49+ } catch ( err ) { }
50+ }
51+
52+ select || ( select = document . querySelector ( '#libraries-select > option[value="*"]' ) )
53+
54+ librariesGrid . arrange ( { filter : select . value } ) ;
55+ select . selected = 'selected' ;
56+ }
0 commit comments