Index: static/js/main.js |
=================================================================== |
--- a/static/js/main.js |
+++ b/static/js/main.js |
@@ -1,16 +1,27 @@ |
(function(){ |
document.addEventListener("DOMContentLoaded", function() |
{ |
+ /* ****************************************** |
ire
2017/10/04 08:07:40
The document was starting to get really long so I
juliandoucette
2017/10/09 23:14:15
Acknowledged.
We should be consistent about how w
ire
2017/10/10 11:54:18
I think I actually prefer your way so updating tha
|
+ * |
+ * General |
+ * |
+ * ****************************************** */ |
+ |
// Change html class name from "no-js" to "js" |
document.documentElement.className = "js"; |
- // Toggle Navbar Collapse |
+ /* ****************************************** |
+ * |
+ * Navbar |
+ * |
+ * ****************************************** */ |
+ |
function toggleNavbarCollapse() |
{ |
var navbarCollapseEls = this.parentElement.getElementsByClassName("navbar-collapse"); |
for (var i = 0; i < navbarCollapseEls.length; i++) |
{ |
navbarCollapseEls[i] |
.classList.toggle("open") |
} |
@@ -18,36 +29,63 @@ |
var toggleNavbarCollapseEls = document.getElementsByClassName("toggle-navbar-collapse"); |
for (var i = 0; i < toggleNavbarCollapseEls.length; i++) |
{ |
toggleNavbarCollapseEls[i] |
.addEventListener("click", toggleNavbarCollapse, false); |
} |
- // Custom Select |
- function onClickCustomSelect() |
+ /* ****************************************** |
+ * |
+ * CustomSelect |
+ * |
+ * ****************************************** */ |
+ |
+ function CustomSelect(select) |
{ |
- var options = this.nextElementSibling; |
- if (options.getAttribute("aria-hidden") == "true") |
+ this.select = select; |
+ this.close(); |
+ select.addEventListener("click", this._onClick.bind(this), false); |
+ } |
+ |
+ CustomSelect.prototype._onClick = function(event) |
+ { |
+ if (event.target.classList.contains("custom-select-selected")) |
{ |
- options.removeAttribute("aria-hidden"); |
- this.setAttribute("aria-expanded", "true"); |
- } |
- else |
- { |
- options.setAttribute("aria-hidden", "true"); |
- this.setAttribute("aria-expanded", "false"); |
+ var options = this.select.querySelector(".custom-select-options"); |
+ if (options.getAttribute("aria-hidden") == "true") |
+ { |
+ this.open(); |
+ } |
+ else |
+ { |
+ this.close(); |
+ } |
} |
} |
- var customSelectEls = document.getElementsByClassName('custom-select-selected'); |
- for (var i = 0; i < customSelectEls.length; i++) |
+ CustomSelect.prototype.open = function() |
{ |
- customSelectEls[i] |
- .addEventListener("click", onClickCustomSelect, false); |
- customSelectEls[i] |
- .nextElementSibling |
+ this.select |
+ .querySelector(".custom-select-selected") |
+ .setAttribute("aria-expanded", "true"); |
+ |
+ this.select |
+ .querySelector(".custom-select-options") |
+ .removeAttribute("aria-hidden"); |
+ } |
+ |
+ CustomSelect.prototype.close = function() |
+ { |
+ this.select |
+ .querySelector(".custom-select-selected") |
+ .setAttribute("aria-expanded", "false"); |
+ |
+ this.select |
+ .querySelector(".custom-select-options") |
.setAttribute("aria-hidden", "true"); |
} |
+ |
+ new CustomSelect(document.getElementById("language-select")); |
}, false); |
}()); |