load issues on page load, linkable issue labels

This commit is contained in:
Justin Cooper 2019-10-15 15:39:57 -05:00
parent b7ff2c01a5
commit 7142a3287d

View file

@ -1,10 +1,44 @@
document.addEventListener('DOMContentLoaded', function() {
// only load on open issues page for now
var issueSelect = document.querySelector(".open-issues select");
if (!issueSelect) {
return;
}
issueSelect.onchange = issueSelectHandler;
// load issues label when using back button
window.addEventListener('popstate', loadIssues.bind(null, true));
// load issues label on page load
loadIssues();
}, false);
function issueSelectHandler(event) {
var selectedOption = this.options[this.selectedIndex].value;
function loadIssues(isPopState) {
var params = new URLSearchParams(window.location.search);
var label = params.get('label');
if (!label) {
return;
}
issueSelectHandler(label, isPopState);
var issuesList = document.querySelector('.open-issues select');
issuesList.value = label;
}
function issueSelectHandler(event, isPopState) {
if (event.target) {
var selectedOption = this.options[this.selectedIndex].value;
} else {
// page loads will set the event as just the selected label from params
var selectedOption = event;
}
// don't set params on the back button
if (!isPopState) {
setIssueParams(selectedOption);
}
// hide all elements first
[].forEach.call(document.querySelectorAll('.issues-list li'), function (element) {
@ -21,3 +55,9 @@ function issueSelectHandler(event) {
});
}
function setIssueParams(label) {
var params = new URLSearchParams(window.location.search);
params.set("label", label);
var newUrl = `${window.location.protocol}//${window.location.host}${window.location.pathname}?${params.toString()}`;
window.history.pushState({path:newUrl}, '', newUrl);
}