message filters #244

merge-requests/208/head
Thomas Lynch 4 years ago
parent 57960b7087
commit 03d8bf7923
  1. 47
      gulp/res/js/filters.js
  2. 2
      gulp/res/js/pugfilters.js
  3. 2
      views/mixins/filters.pug
  4. 1
      views/mixins/modal.pug

@ -14,13 +14,15 @@ const getFiltersFromLocalStorage = () => {
fname: new Set(),
fsub: new Set(),
ftrip: new Set(),
fmsg: new Set(),
fnamer: [],
ftripr: [],
fsubr: [],
fmsgr: [],
});
};
let { single, fid, fname, ftrip, fsub, fnamer, ftripr, fsubr } = getFiltersFromLocalStorage();
let { single, fid, fname, ftrip, fsub, fmsg, fnamer, ftripr, fsubr, fmsgr } = getFiltersFromLocalStorage();
let filtersTable;
const updateFiltersTable = () => {
@ -43,22 +45,28 @@ const updateSavedFilters = () => {
...([...ftrip].map(x => ({type:'ftrip', val:x}))),
...([...fname].map(x => ({type:'fname', val:x}))),
...([...fsub].map(x => ({type:'fsub', val:x}))),
...([...fmsg].map(x => ({type:'fmsg', 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()})),
]));
updateFiltersTable();
};
const anyFilterMatches = (filteringPost) => {
const { board, postId, userId, name, subject, tripcode } = filteringPost.dataset;
const postMessage = filteringPost.querySelector('.post-message');
const message = postMessage ? postMessage.textContent : null;
return fid.has(userId)
|| fname.has(name)
|| ftrip.has(tripcode)
|| fsub.has(tripcode)
|| fmsg.has(message)
|| fnamer.some(r => r.test(name))
|| ftripr.some(r => r.test(tripcode))
|| fsubr.some(r => r.test(subject))
|| fmsgr.some(r => r.test(message))
}
const togglePostsHidden = (posts, state, single) => {
@ -86,6 +94,13 @@ const getPostsByRegex = (attribute, regex) => {
return matches;
};
const getPostsByMessage = (data, regex=false) => {
//you asked for this
const postMessages = [...document.querySelectorAll('.post-container .post-message')];
const matchingMessages = postMessages.filter(m => (regex ? data.test(m.textContent) : m.textContent.includes(data)));
return matchingMessages.map(m => m.closest('.post-container'));
}
const getPostsByFilter = (type, data) => {
let posts = [];
switch (type) {
@ -115,6 +130,12 @@ const getPostsByFilter = (type, data) => {
case 'fsubr':
posts = getPostsByRegex('data-subject', data);
break;
case 'fmsg':
posts = getPostsByMessage(data);
break;
case 'fmsgr':
posts = getPostsByMessage(data, true);
break;
default:
break;
}
@ -156,6 +177,14 @@ const setFilterState = (type, data, state) => {
if (state) {
fsubr.push(data);
}
case 'fmsg':
fmsg[addOrDelete](data);
break;
case 'fmsgr':
fmsgr = fmsgr.filter(r => r.source != data.source);
if (state) {
fmsgr.push(data);
}
break;
default:
break;
@ -212,6 +241,9 @@ const getHiddenElems = () => {
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));
}
@ -224,6 +256,9 @@ const getHiddenElems = () => {
for (let subr of fsubr) {
posts = posts.concat(getPostsByFilter('fsubr', subr));
}
for (let messager of fmsgr) {
posts = posts.concat(getPostsByFilter('fmsgr', messager));
}
return posts;
};
@ -234,11 +269,19 @@ window.addEventListener('addPost', function(e) {
if (anyFilterMatches(newPost)) {
newPost.classList.add('hidden');
}
if (e.detail.hover) { return; }
const menu = newPost.querySelector('.postmenu');
menu.value = '';
menu.addEventListener('change', postMenuChange, false);
});
window.addEventListener('updatePostMessage', function(e) {
const newPost = e.detail.post;
if (anyFilterMatches(newPost)) {
newPost.classList.add('hidden');
}
});
window.addEventListener('settingsReady', function(e) {
filtersTable = document.getElementById('advancedfilters');
@ -260,10 +303,12 @@ window.addEventListener('settingsReady', function(e) {
fid = new Set(),
fname = new Set(),
fsub = new Set(),
fmsg = new Set(),
ftrip = new Set(),
fnamer = [],
ftripr = [],
fsubr = [],
fmsgr = [],
updateFiltersTable();
togglePostsHidden(document.querySelectorAll('.post-container'), false);
updateSavedFilters();

@ -6,7 +6,7 @@ var pug_match_html=/["&<>]/;function filters(locals) {var pug_html = "", pug_mix
(function (filterArr) {
pug_mixins["filters"] = pug_interp = function(filterArr){
var block = (this && this.block), attributes = (this && this.attributes) || {};
const filterTypeMap = { single: 'Single', fid: 'ID', fname: 'Name', ftrip: 'Tripcode', fnamer: 'Name', ftripr: 'Tripcode', fsub: 'Subject', fsubr: 'Subject' }
const filterTypeMap = { single: 'Single', fid: 'ID', fname: 'Name', ftrip: 'Tripcode', fnamer: 'Name', ftripr: 'Tripcode', fsub: 'Subject', fsubr: 'Subject', fmsg: 'Message', fmsgr: 'Message' }
if (filterArr.length > 0) {
// iterate filterArr
;(function(){

@ -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' }
- const filterTypeMap = { single: 'Single', fid: 'ID', fname: 'Name', ftrip: 'Tripcode', fnamer: 'Name', ftripr: 'Tripcode', fsub: 'Subject', fsubr: 'Subject', fmsg: 'Message', fmsgr: 'Message' }
if filterArr.length > 0
each filter in filterArr
tr

@ -157,6 +157,7 @@ mixin modal(data)
option(value='fname') Name
option(value='ftrip') Tripcode
option(value='fsub') Subject
option(value='fmsg') Message
td
input#filter-value-input(required type='text' name='value')
td

Loading…
Cancel
Save