Skip to content
This repository was archived by the owner on Mar 29, 2022. It is now read-only.

Commit f096559

Browse files
committed
Add functionality for language query filtering and refresh button
1 parent 9d6e86b commit f096559

File tree

1 file changed

+118
-3
lines changed

1 file changed

+118
-3
lines changed

app/assets/javascripts/language_filter.js

Lines changed: 118 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,34 @@ window.setupLanguageFilter = function () {
33
$id = $('#language_id'),
44
$list = $('#project-list'),
55
$message = $('#projects-message'),
6-
defaultMessage = $message.text();
6+
defaultMessage = $message.text(),
7+
$refresh = $("#refresh");
8+
var current = window.location.href;
9+
710

811
// Handle resetting the filter to all
912
function reset() {
1013
$id.val('');
1114
change();
1215
}
1316

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+
1434
// Handle the filter selection changing
1535
function change() {
1636
var languageId = $id.val();
@@ -25,13 +45,21 @@ window.setupLanguageFilter = function () {
2545
// Empty string means 'Select Language'
2646
if (languageId === "") {
2747
$reset.removeClass('active');
48+
$refresh.removeClass('active');
2849
$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);
2954
} else {
3055
$message.text('Displaying ' + $id.find("option:selected").text() + ' projects only');
3156
$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);
3261
}
3362
}
34-
3563
// Deal with browsers remembering last state of select
3664
change();
3765

@@ -40,4 +68,91 @@ window.setupLanguageFilter = function () {
4068

4169
// Detect the reset button being clicked
4270
$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(/%20/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

Comments
 (0)