in index.js [530:606]
function addEventListeners () {
var nav = document.querySelector('nav')
// typing in the search field causes the filter to be reapplied.
nav.addEventListener('keyup', filterProposals)
nav.addEventListener('change', filterProposals)
// clearing the search field also hides the X symbol
nav.querySelector('#clear-button').addEventListener('click', function () {
nav.querySelector('#search-filter').value = ''
nav.querySelector('#clear-button').classList.toggle('hidden')
filterProposals()
})
// each of the individual statuses needs to trigger filtering as well
;[].forEach.call(nav.querySelectorAll('.filter-by-status input'), function (element) {
element.addEventListener('change', filterProposals)
})
var expandableArea = document.querySelector('.filter-options')
var implementedToggle = document.querySelector('#filter-by-implemented')
implementedToggle.addEventListener('change', function () {
// hide or show the row of version options depending on the status of the 'Implemented' option
;['#version-options', '#version-options-label'].forEach(function (selector) {
expandableArea.querySelector(selector).classList.toggle('hidden')
})
// don't persist any version selections when the row is hidden
;[].concat.apply([], expandableArea.querySelectorAll('.filter-by-swift-version')).forEach(function (versionCheckbox) {
versionCheckbox.checked = false
})
})
document.querySelector('.filter-button').addEventListener('click', toggleFiltering)
var filterToggle = document.querySelector('.filter-toggle')
filterToggle.querySelector('.toggle-filter-panel').addEventListener('click', toggleFilterPanel)
// Behavior conditional on certain browser features
var CSS = window.CSS
if (CSS) {
// emulate position: sticky when it isn't available.
if (!(CSS.supports('position', 'sticky') || CSS.supports('position', '-webkit-sticky'))) {
window.addEventListener('scroll', function () {
var breakpoint = document.querySelector('header').getBoundingClientRect().bottom
var nav = document.querySelector('nav')
var position = window.getComputedStyle(nav).position
var shadowNav // maintain the main content height when the main 'nav' is removed from the flow
// this is measuring whether or not the header has scrolled offscreen
if (breakpoint <= 0) {
if (position !== 'fixed') {
shadowNav = nav.cloneNode(true)
shadowNav.classList.add('clone')
shadowNav.style.visibility = 'hidden'
nav.parentNode.insertBefore(shadowNav, document.querySelector('main'))
nav.style.position = 'fixed'
}
} else if (position === 'fixed') {
nav.style.position = 'static'
shadowNav = document.querySelector('nav.clone')
if (shadowNav) shadowNav.parentNode.removeChild(shadowNav)
}
})
}
}
// on smaller screens, hide the filter panel when scrolling
if (window.matchMedia('(max-width: 414px)').matches) {
window.addEventListener('scroll', function () {
var breakpoint = document.querySelector('header').getBoundingClientRect().bottom
if (breakpoint <= 0 && document.querySelector('.expandable').classList.contains('expanded')) {
toggleFilterPanel()
}
})
}
}