Скрытие прочитанных постов - локальное решение

Алгоритм пикабу по скрытию постов работает очень странно. Проблема старая, но раньше сильно жить не мешала. А на режиме ХЗ, пикабу пользуюсь сильно чаще - проблема снова начала давать о себе знать. Накидал скрипт, чтобы локально сохранять 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));

};

})();