@@ -3,14 +3,34 @@ window.setupLanguageFilter = function () {
3
3
$id = $ ( '#language_id' ) ,
4
4
$list = $ ( '#project-list' ) ,
5
5
$message = $ ( '#projects-message' ) ,
6
- defaultMessage = $message . text ( ) ;
6
+ defaultMessage = $message . text ( ) ,
7
+ $refresh = $ ( "#refresh" ) ;
8
+ var current = window . location . href ;
9
+
7
10
8
11
// Handle resetting the filter to all
9
12
function reset ( ) {
10
13
$id . val ( '' ) ;
11
14
change ( ) ;
12
15
}
13
16
17
+ // Handle refreshing issues list
18
+ function refresh ( ) {
19
+ var languageId = $id . val ( ) ;
20
+ if ( languageId == "" ) {
21
+ // no language selected = do nothing
22
+ } else {
23
+ var url = '/languages/projects/' + languageId ;
24
+ $ . ajax ( {
25
+ type : 'GET' ,
26
+ url : url ,
27
+ success : function ( htmlData ) {
28
+ $list . html ( htmlData ) ;
29
+ }
30
+ } ) ;
31
+ }
32
+ }
33
+
14
34
// Handle the filter selection changing
15
35
function change ( ) {
16
36
var languageId = $id . val ( ) ;
@@ -25,13 +45,21 @@ window.setupLanguageFilter = function () {
25
45
// Empty string means 'Select Language'
26
46
if ( languageId === "" ) {
27
47
$reset . removeClass ( 'active' ) ;
48
+ $refresh . removeClass ( 'active' ) ;
28
49
$message . text ( defaultMessage ) ;
50
+ // reset URL to remove original query when filter is removed
51
+ var removeQueryURL = current . split ( "?" ) [ 0 ] ;
52
+ console . log ( removeQueryURL ) ;
53
+ history . pushState ( null , " " , removeQueryURL ) ;
29
54
} else {
30
55
$message . text ( 'Displaying ' + $id . find ( "option:selected" ) . text ( ) + ' projects only' ) ;
31
56
$reset . addClass ( 'active' ) ;
57
+ $refresh . addClass ( 'active' ) ;
58
+ var changed_url = $id . find ( "option:selected" ) . text ( ) ;
59
+ var new_lang_url = changed_url . toLowerCase ( ) ;
60
+ history . pushState ( null , " " , "?language=" + new_lang_url ) ;
32
61
}
33
62
}
34
-
35
63
// Deal with browsers remembering last state of select
36
64
change ( ) ;
37
65
@@ -40,4 +68,91 @@ window.setupLanguageFilter = function () {
40
68
41
69
// Detect the reset button being clicked
42
70
$reset . click ( reset ) ;
43
- } ;
71
+
72
+ // Detect the refresh button being clicked
73
+ $refresh . click ( refresh ) ;
74
+
75
+ ////////// LANGUAGE QUERY PARAM CODE BELOW //////////
76
+
77
+ // take URL turn into string, split after '?', convert any '%20" to whtiespace', trim/remove whitespace
78
+ var convertURL = current . toString ( ) . toLowerCase ( ) . split ( "?" ) [ 1 ] . replace ( / % 2 0 / g, " " ) . trim ( ) . replace ( / \s / g, '' ) ;
79
+ var issues = document . getElementsByClassName ( "lang" ) [ 0 ] ;
80
+ // store converted URL query in variable
81
+ var query_param = convertURL ;
82
+ var lang_select = document . getElementById ( "language_id" ) ;
83
+ var lang_option = document . querySelectorAll ( "option" ) ;
84
+ var textArr = [ ] ;
85
+ var final = [ ] ;
86
+ var count = 0 ;
87
+
88
+ // compare query_param to items in final text array
89
+ function languageURL ( ) {
90
+ for ( var i = 1 ; i < final . length ; i ++ ) {
91
+ //keep track of index of match
92
+ count ++ ;
93
+
94
+ if ( query_param == final [ i ] ) {
95
+ var indexNum = count - 1 ;
96
+ var selectedOption = indexNum ;
97
+
98
+ // set language select option to query param
99
+ lang_select . value = selectedOption ;
100
+
101
+ // scroll to language select section
102
+ issues . scrollIntoView ( ) ;
103
+
104
+ //change URL based on lang query
105
+ var remove_query = current . split ( "?" ) [ 0 ] ;
106
+ var url = new URL ( remove_query ) ;
107
+ var query_string = url . search ;
108
+ var search_params = new URLSearchParams ( query_string ) ;
109
+ search_params . set ( "language" , final [ i ] ) ;
110
+ url . search = search_params . toString ( ) ;
111
+ var new_url = url . toString ( ) ;
112
+ history . pushState ( null , " " , new_url ) ;
113
+
114
+ change ( ) ;
115
+ } else {
116
+ // if no match - do nothing
117
+ }
118
+ //end of else
119
+ }
120
+ //end of loop;
121
+ }
122
+ //end of languageURL function
123
+
124
+ function extractLang ( ) {
125
+ if ( convertURL . includes ( "language=" ) == true ) {
126
+ let extract = convertURL . slice ( 9 ) ;
127
+ query_param = extract ;
128
+ languageURL ( ) ;
129
+ } else {
130
+ // there is no 'language=' in the URL so there is no need to extract the query
131
+ // go straight to calling comparison function
132
+ languageURL ( ) ;
133
+ }
134
+ }
135
+
136
+ function convertText ( ) {
137
+ for ( var k = 0 ; k < textArr . length ; k ++ ) {
138
+ // turn option items into lowercase
139
+ var lowercase_opt = textArr [ k ] . toLowerCase ( ) ;
140
+ // remove any whitespace
141
+ var no_space = lowercase_opt . replace ( / \s / g, '' ) ;
142
+ // final result to compare against query_param
143
+ final . push ( no_space ) ;
144
+ console . log ( final ) ;
145
+ }
146
+ extractLang ( ) ;
147
+ }
148
+
149
+ function storeOptionText ( ) {
150
+ for ( var j = 0 ; j < lang_option . length ; j ++ ) {
151
+ textArr . push ( lang_option [ j ] . text ) ;
152
+ console . log ( textArr ) ;
153
+ }
154
+ convertText ( ) ;
155
+ }
156
+
157
+ storeOptionText ( ) ; // on page load call first function
158
+ }
0 commit comments