in index.js [771:820]
function _applyFilter (matchingProposals) {
// filter out proposals based on the grouping checkboxes
var allStateCheckboxes = document.querySelector('nav').querySelectorAll('.filter-by-status input:checked')
var selectedStates = [].map.call(allStateCheckboxes, function (checkbox) { return checkbox.value })
var selectedStateNames = [].map.call(allStateCheckboxes, function (checkbox) { return checkbox.nextElementSibling.innerText.trim() })
updateFilterDescription(selectedStateNames)
if (selectedStates.length) {
matchingProposals = matchingProposals
.filter(function (proposal) {
return selectedStates.some(function (state) {
return proposal.status.state.toLowerCase().indexOf(state.split('-')[0]) >= 0
})
})
// handle version-specific filtering options
if (selectedStates.some(function (state) { return state.match(/swift/i) })) {
matchingProposals = matchingProposals
.filter(function (proposal) {
return selectedStates.some(function (state) {
if (!(proposal.status.state === '.implemented')) return true // only filter among Implemented (N.N.N)
if (state === 'swift-swift-Next' && proposal.status.version === 'Next') return true // special case
var version = state.split(/\D+/).filter(function (s) { return s.length }).join('.')
if (!version.length) return false // it's not a state that represents a version number
if (proposal.status.version === version) return true
return false
})
})
}
}
var filteredProposals = proposals.filter(function (proposal) {
return matchingProposals.indexOf(proposal) === -1
})
matchingProposals.forEach(function (proposal) {
var matchingElements = [].concat.apply([], document.querySelectorAll('.' + proposal.id))
matchingElements.forEach(function (element) { element.classList.remove('hidden') })
})
filteredProposals.forEach(function (proposal) {
var filteredElements = [].concat.apply([], document.querySelectorAll('.' + proposal.id))
filteredElements.forEach(function (element) { element.classList.add('hidden') })
})
updateProposalsCount(matchingProposals.length)
}