// ==UserScript== // @name 9gag - Return dislike count // @namespace https://github.com/Procyon-b // @version 0.2 // @description Display the like and dislike counts next to the arrow buttons // @author Achernar // @match https://9gag.com/* // @run-at document-start // @grant none // @downloadURL none // ==/UserScript== (function() { "use strict"; // JSON.parse var JP=JSON.parse; JSON.parse=function(){ var r=JP(...arguments); if (r && r.data && r.data.posts) { for (let v,k=0; v=r.data.posts[k]; k++) { posts[v.id]={id: v.id, up: v.upVoteCount, down: v.downVoteCount}; } } return r; } var posts={}; window._posts=posts; function init() { var obs = new MutationObserver(function(muts){ for (let mut of muts) { if (mut.addedNodes.length) { getBtnV(mut.target); break; } } }); obs.observe(document.body, {subtree: true, childList: true} ); addSt(); getBtnV(); } if (document.readyState != 'loading') init('"already done"', 1); else { document.addEventListener('DOMContentLoaded', (ev) => { init('DOM');} ); window.addEventListener('load', (ev) => { init('wLoad', 1);} ); } function getBtnV(r=document) { var a=r.querySelectorAll(':first-child.btn-vote:not(._fixed), .post-vote:not(.fixed)'); for (let n of a) { n.classList.add('_fixed'); let p=n.closest('article'); if (p) { let id= (p.id || '').split('-').pop(); if (!id) { // mobile let e=p.querySelector(':scope > header > a[href^="/gag/"]'); if (e) id=e.href.split('/').pop(); } if (posts[id]) { n.classList.add('_exists'); n.style='--upvotes: "'+posts[id].up+'"; --downvotes: "'+posts[id].down+'";'; } } } } var ST, iST=` ._fixed._exists li::before, ._fixed._exists .post-vote__btn.upvote::before { content: var(--upvotes); } ._fixed._exists li::after, ._fixed._exists .post-vote__btn.downvote::after { content: var(--downvotes); } ._fixed._exists .post-vote__btn.upvote, ._fixed._exists .post-vote__btn.downvote { display: flex; } `; function addSt() { console.info('addSt()'); if (!iST) { document.documentElement.appendChild(ST); return; } try { ST=document.createElement('style'); document.documentElement.appendChild(ST); ST.textContent=iST; iST=''; }catch(e){ setTimeout(addSt,0); } } })();