Скрытие прочитанных постов - локальное решение
Алгоритм пикабу по скрытию постов работает очень странно. Проблема старая, но раньше сильно жить не мешала. А на режиме ХЗ, пикабу пользуюсь сильно чаще - проблема снова начала давать о себе знать. Накидал скрипт, чтобы локально сохранять id просмотренных постов и скрывать их.
Инструкция:
Скачиваете расширение для хрома или фаерфокса по внедрению своего кода и для страниц https://pikabu.ru и https://pikabu.ru/new добавляете следующий скрипт (дисклеймер - говнокод за 20 минут):
console.log('readed ext');
(function() {
var proxied = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
let params =arguments[0];
var pointer = this
var intervalId = window.setInterval(function(){
if(pointer.readyState != 4){
return;
}
console.log( pointer.responseURL );
if(pointer.responseURL==="https://pikabu.ru/ajax/save_stories_stat.php")
{
let ids = decodeURIComponent(params).split('=')[1].split(',');
console.log('mark as readed:',ids);
let readedPosts = localStorage.getItem('readedPosts');
if(readedPosts === null)
{
readedPosts='{}';
}
readedPosts = JSON.parse(readedPosts);
for(let i=0;i<ids.length;i++)
{
readedPosts[ids[i]]=true;
}
localStorage.setItem('readedPosts', JSON.stringify(readedPosts));
}
if(pointer.responseURL.indexOf('https://pikabu.ru/?twitmode') === 0)
{
let readedPosts = localStorage.getItem('readedPosts');
if(readedPosts === null)
{
readedPosts='{}';
}
readedPosts = JSON.parse(readedPosts);
let hidePosts = [];
let posts = JSON.parse(pointer.response).data.stories;
for(let i=0;i<posts.length;i++)
{
if(posts[i].id in readedPosts)
{
hidePosts.push(posts[i].id);
}
}
console.log(hidePosts);
setTimeout(()=> {
for(let i=0;i<hidePosts.length;i++)
{
let el = document.querySelector("article[data-story-id='"+hidePosts[i]+"']");
if(el !== null)
{
// console.log('hide el', el);
console.log('hide',el.querySelector('h2.story__title').innerText);
el.hidden = true;
}
}
}, 1000);
}
clearInterval(intervalId);
}, 1);
return proxied.apply(this, [].slice.call(arguments));
};
})();