phantasma/app/static/js/films.js

33 lines
1.2 KiB
JavaScript
Raw Normal View History

2021-10-28 22:47:34 +05:30
// FIXME: move to utils
// From: https://stackoverflow.com/a/175787
function isNumeric (str) {
return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
!isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
}
2021-10-28 22:01:08 +05:30
function selectChanged() {
const sortValue = document.getElementById('sort-select').value
2021-10-28 21:49:16 +05:30
const $films = [...document.querySelectorAll('.film')]
2021-10-28 22:01:08 +05:30
location.hash = sortValue
2021-10-28 21:49:16 +05:30
$films.sort((a, b) => {
2021-10-28 22:47:34 +05:30
let aVal = a.dataset[sortValue]
let bVal = b.dataset[sortValue]
if (isNumeric(aVal) && isNumeric(bVal)) {
aVal = parseFloat(aVal)
bVal = parseFloat(bVal)
}
2021-10-28 21:49:16 +05:30
return aVal < bVal ? -1 : 1
})
2021-10-28 22:03:47 +05:30
document.getElementById('films-list').innerHTML = ''
2021-10-28 21:49:16 +05:30
$films.forEach($film => {
2021-10-28 22:03:47 +05:30
document.getElementById('films-list').appendChild($film)
2021-10-28 21:49:16 +05:30
})
2021-10-28 22:01:08 +05:30
}
document.getElementById('sort-select').addEventListener('change', selectChanged)
const locationHash = location.hash.replace('#', '')
if (locationHash !== '') {
document.getElementById('sort-select').value = locationHash
selectChanged()
}