catalog filter and sort

merge-requests/208/head
fatchan 4 years ago
parent b5b5c8bdf2
commit 1be5d7615e
  1. 9
      gulp/res/css/style.css
  2. 61
      gulp/res/js/catalog.js
  3. 2
      gulpfile.js
  4. 7
      views/mixins/catalogtile.pug
  5. 18
      views/pages/catalog.pug
  6. 2
      views/pages/thread.pug

@ -205,7 +205,7 @@ pre {
font-weight: bold;
}
.statwrap {
.wrapbar {
display: flex;
justify-content: space-between;
flex-flow: row wrap;
@ -1307,13 +1307,8 @@ row.wrap.sb .col {
}
.catalog-tile {
width: 50%;
margin: 0 0 10px 0;
}
.catalog-tile:nth-child(odd) {
margin-right: 10px;
width: calc(50% - 10px);
margin: 5px;
}
table {

@ -0,0 +1,61 @@
if (isCatalog) {
window.addEventListener('DOMContentLoaded', (event) => {
const getFilterSelector = (filter) => {
filter = filter.replace(/["\\]/g, '\\$&').toLowerCase();
return `.catalog-tile:not([data-filter*="${filter}"])`;
}
const catalogFilter = document.getElementById('catalogfilter');
catalogFilter.value = '';
const filterCatalog = () => {
let existingRule;
let i = 0;
for (; i < renderSheet[rulesKey].length; i++) {
if (renderSheet[rulesKey][i].selectorText.startsWith('.catalog-tile:not([data-filter*=')) {
existingRule = renderSheet[rulesKey][i];
break;
}
}
if (catalogFilter.value.length > 0) {
if (existingRule) {
existingRule.selectorText = getFilterSelector(catalogFilter.value);
} else {
renderSheet.insertRule(getFilterSelector(catalogFilter.value) + ' { display: none; }');
}
} else {
renderSheet.deleteRule(i);
}
}
catalogFilter.addEventListener('input', filterCatalog, false);
const sorts = {
date: (a, b) => {
//date newest first
return new Date(b.dataset.date) - new Date(a.dataset.date);
},
bump: (a, b) => {
//bump date most recent first
return a.dataset.bump - b.dataset.bump;
},
replies: (a, b) => {
//replies most first
return b.dataset.replies - a.dataset.replies;
},
}
const tiles = document.getElementsByClassName('catalog-tile');
const catalogSort = document.getElementById('catalogsort');
catalogSort.value = '';
const sortCatalog = (mode) => {
console.log('sorting catalog', mode);
const tiles = document.getElementsByClassName('catalog-tile');
const tilesArray = Array.from(tiles);
tilesArray
.sort(sorts[mode] || (() => 1))
.forEach((tile, index) => {
tile.style.order = index;
});
}
catalogSort.addEventListener('change', (e) => { sortCatalog(e.target.value) }, false);
});
}

@ -213,6 +213,7 @@ function scripts() {
`${paths.scripts.src}/*.js`,
`!${paths.scripts.src}/dragable.js`,
`!${paths.scripts.src}/hide.js`,
`!${paths.scripts.src}/catalog.js`,
`!${paths.scripts.src}/time.js`,
])
.pipe(concat('all.js'))
@ -221,6 +222,7 @@ function scripts() {
return gulp.src([
`${paths.scripts.src}/dragable.js`,
`${paths.scripts.src}/hide.js`,
`${paths.scripts.src}/catalog.js`,
`${paths.scripts.src}/time.js`,
])
.pipe(concat('render.js'))

@ -1,5 +1,10 @@
mixin catalogtile(board, post, index)
.catalog-tile(data-board=post.board data-post-id=post.postId data-user-id=post.userId)
.catalog-tile(data-board=post.board
data-post-id=post.postId
data-filter=((post.subject+post.nomarkup).toLowerCase() || '')
data-date=post.date
data-replies=post.replyposts
data-bump=post.bumped)
- const postURL = `/${board._id}/thread/${post.postId}.html#${post.postId}`
.post-info
input.left.post-check(type='checkbox', name='checkedposts' value=post.postId)

@ -14,11 +14,19 @@ block content
br
include ../includes/announcements.pug
include ../includes/stickynav.pug
if modview
+managenav('catalog')
else
.pages
+boardnav('catalog', true, false)
.wrapbar
if modview
+managenav('catalog')
else
.pages
+boardnav('catalog', true, false)
.pages.jsonly
input#catalogfilter(type='text' placeholder='Filter')
select.ml-5.right#catalogsort
option(value="" disabled selected hidden) Sort by
option(value="bump") Bump order
option(value="date") Creation date
option(value="replies") Reply count
form(target='_blank' action=`/forms/board/${board._id}/${modview ? 'mod' : ''}actions` method='POST' enctype='application/x-www-form-urlencoded')
if modview
input(type='hidden' name='_csrf' value=csrf)

@ -52,7 +52,7 @@ block content
- uids && post.userId && uids.add(post.userId)
+post(post)
hr(size=1)
.statwrap
.wrapbar
if modview
+managenav(null, true)
else

Loading…
Cancel
Save