Filter posts by flag

merge-requests/341/head
disco 10 months ago
parent 232ca84a06
commit 8ad3039b1c
  1. 47
      gulp/res/js/filters.js
  2. 3
      views/mixins/catalogtile.pug
  3. 2
      views/mixins/filters.pug
  4. 1
      views/mixins/modal.pug
  5. 9
      views/mixins/post.pug

@ -13,17 +13,19 @@ const getFiltersFromLocalStorage = () => {
single: new Set(),
fid: new Set(),
fname: new Set(),
fsub: new Set(),
ftrip: new Set(),
fsub: new Set(),
fmsg: new Set(),
fflag: new Set(),
fnamer: [],
ftripr: [],
fsubr: [],
fmsgr: [],
fflagr: [],
});
};
let { single, fid, fname, ftrip, fsub, fmsg, fnamer, ftripr, fsubr, fmsgr } = getFiltersFromLocalStorage();
let { single, fid, fname, ftrip, fsub, fmsg, fflag, fnamer, ftripr, fsubr, fmsgr, fflagr } = getFiltersFromLocalStorage();
let filtersTable;
const updateFiltersTable = () => {
@ -47,28 +49,33 @@ const updateSavedFilters = () => {
...([...fname].map(x => ({type:'fname', val:x}))),
...([...fsub].map(x => ({type:'fsub', val:x}))),
...([...fmsg].map(x => ({type:'fmsg', val:x}))),
...([...fflag].map(x => ({type:'fflag', val:x}))),
...fnamer.map(x => ({type:'fnamer', val:x.source.toString()})),
...ftripr.map(x => ({type:'ftripr', val:x.source.toString()})),
...fsubr.map(x => ({type:'fsubr', val:x.source.toString()})),
...fmsgr.map(x => ({type:'fmsgr', val:x.source.toString()})),
...fflagr.map(x => ({type:'fflagr', val:x.source.toString()})),
]));
updateFiltersTable();
};
const anyFilterMatches = (filteringPost) => {
const { board, postId, userId, name, subject, tripcode } = filteringPost.dataset;
const { board, postId, userId, name, subject, tripcode, country } = filteringPost.dataset;
const postMessage = filteringPost.querySelector('.post-message');
const message = postMessage ? postMessage.textContent : null;
const flag = country ? country.code : null;
return single.has(`${board}-${postId}`)
|| fid.has(userId)
|| fname.has(name)
|| ftrip.has(tripcode)
|| fsub.has(subject)
|| fmsg.has(message)
|| fflag.has(flag)
|| fnamer.some(r => r.test(name))
|| ftripr.some(r => r.test(tripcode))
|| fsubr.some(r => r.test(subject))
|| fmsgr.some(r => r.test(message));
|| fmsgr.some(r => r.test(message))
|| fflag.some(r => r.test(flag));
};
const togglePostsHidden = (posts, state, single) => {
@ -138,6 +145,12 @@ const getPostsByFilter = (type, data) => {
case 'fmsgr':
posts = getPostsByMessage(data, true);
break;
case 'fflag':
posts = document.querySelectorAll(`[data-flag="${CSS.escape(data)}"]`);
break;
case 'fflagr':
posts = getPostsByRegex('data-flag', data);
break;
default:
break;
}
@ -189,6 +202,15 @@ const setFilterState = (type, data, state) => {
fmsgr.push(data);
}
break;
case 'fflag':
fflag[addOrDelete](data);
break;
case 'fflagr':
fflagr = fflagr.filter(r => r.source != data.source);
if (state) {
fflagr.push(data);
}
break;
default:
break;
}
@ -263,6 +285,9 @@ const postMenuChange = function() {
case 'fsub':
filterData = postDataset.subject;
break;
case 'fflag':
filterData = postDataset.flag;
break;
case 'moderate':
return moderatePost(postContainer);
case 'edit':
@ -303,14 +328,17 @@ const getHiddenElems = () => {
for (let name of fname) {
posts = posts.concat(getPostsByFilter('fname', name));
}
for (let tripcode of ftrip) {
posts = posts.concat(getPostsByFilter('ftrip', tripcode));
}
for (let subject of fsub) {
posts = posts.concat(getPostsByFilter('fsub', subject));
}
for (let message of fmsg) {
posts = posts.concat(getPostsByFilter('fmsg', message));
}
for (let tripcode of ftrip) {
posts = posts.concat(getPostsByFilter('ftrip', tripcode));
for (let flag of fflag) {
posts = posts.concat(getPostsByFilter('fflag', flag));
}
for (let namer of fnamer) {
posts = posts.concat(getPostsByFilter('fnamer', namer));
@ -324,6 +352,9 @@ const getHiddenElems = () => {
for (let messager of fmsgr) {
posts = posts.concat(getPostsByFilter('fmsgr', messager));
}
for (let flagr of fflagr) {
posts = posts.concat(getPostsByFilter('fflagr', flagr));
}
return posts;
};
@ -374,13 +405,15 @@ window.addEventListener('settingsReady', function() {
single = new Set(),
fid = new Set(),
fname = new Set(),
ftrip = new Set(),
fsub = new Set(),
fmsg = new Set(),
ftrip = new Set(),
fflag = new Set(),
fnamer = [],
ftripr = [],
fsubr = [],
fmsgr = [],
fflagr = [],
updateFiltersTable();
togglePostsHidden(document.querySelectorAll(`.${isCatalog ? 'catalog-tile': 'post-container' }`), false);
updateSavedFilters();

@ -14,6 +14,7 @@ mixin catalogtile(post, index, overboard=false)
data-tripcode=post.tripcode
data-subject=post.subject
data-filter=((post.subject||'')+(post.nomarkup||'')).toLowerCase()
data-flag=post.country && post.country.code
data-date=post.date
data-replies=post.replyposts
data-bump=post.bumped)
@ -42,6 +43,8 @@ mixin catalogtile(post, index, overboard=false)
option(value='single') #{__('Hide')}
if post.subject
option(value='fsub') #{__('Filter Subject')}
if post.country && post.country.code
option(value='fflag') #{__('Filter Flag')}
if (modview || manage || globalmanage)
option(value='edit') #{__('Edit')}
if !overboard

@ -1,5 +1,5 @@
mixin filters(filterArr)
- const filterTypeMap = { single: __('Single'), fid: __('ID'), fname: __('Name'), ftrip: __('Tripcode'), fnamer: __('Name'), ftripr: __('Tripcode'), fsub: __('Subject'), fsubr: __('Subject'), fmsg: __('Message'), fmsgr: __('Message') }
- const filterTypeMap = { single: __('Single'), fid: __('ID'), fname: __('Name'), ftrip: __('Tripcode'), fnamer: __('Name'), ftripr: __('Tripcode'), fsub: __('Subject'), fsubr: __('Subject'), fmsg: __('Message'), fmsgr: __('Message'), fflag: __('Flag'), fflagr: __('Flag') }
if filterArr.length > 0
each filter in filterArr
tr

@ -192,6 +192,7 @@ mixin modal(data)
option(value='ftrip') #{__('Tripcode')}
option(value='fsub') #{__('Subject')}
option(value='fmsg') #{__('Message')}
option(value='fflag') #{__('Flag')}
td
input#filter-value-input(required type='text' name='value')
td

@ -10,7 +10,8 @@ mixin post(post, truncate, manage=false, globalmanage=false, ban=false, overboar
data-name=post.name
data-tripcode=post.tripcode
data-subject=post.subject
data-email=post.email)
data-email=post.email
data-flag=post.country && post.country.code)
- const postURL = `/${post.board}/${(modview || manage || globalmanage) ? 'manage/' : ''}thread/${post.thread || post.postId}.html`;
.post-info
span
@ -70,10 +71,12 @@ mixin post(post, truncate, manage=false, globalmanage=false, ban=false, overboar
option(value='fid') #{__('Filter ID')}
if post.name
option(value='fname') #{__('Filter Name')}
if post.subject
option(value='fsub') #{__('Filter Subject')}
if post.tripcode
option(value='ftrip') #{__('Filter Tripcode')}
if post.subject
option(value='fsub') #{__('Filter Subject')}
if post.country && post.country.code
option(value='fflag') #{__('Filter Flag')}
if !overboard && !ban
option(value='moderate') #{__('Moderate')}
if !ban && (modview || manage || globalmanage)

Loading…
Cancel
Save