diff options
Diffstat (limited to '.config/qutebrowser/greasemonkey/linkedin.js')
-rwxr-xr-x | .config/qutebrowser/greasemonkey/linkedin.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/.config/qutebrowser/greasemonkey/linkedin.js b/.config/qutebrowser/greasemonkey/linkedin.js new file mode 100755 index 0000000..b8468ec --- /dev/null +++ b/.config/qutebrowser/greasemonkey/linkedin.js @@ -0,0 +1,59 @@ +// ==UserScript== +// @name linkedin css +// @match *://*.linkedin.com/* +// @grant none +// @inject-into content +// ==/UserScript== + +(function() { + 'use strict'; + + // Selectors + const storySelector = '.feed-shared-update-v2'; + const descriptionSelector = '.feed-shared-actor__description, .feed-shared-actor__sub-description'; + + // Search strings + const searchStrings = { + 'da': ['Promoveret'], + 'en': ['Promoted'], + 'es': ['Promocionado'], + 'fr': ['Post sponsorisé'] + }; + + const language = searchStrings.hasOwnProperty(document.documentElement.lang) ? document.documentElement.lang : 'en'; + + function blockSponsoredPosts() { + const stories = document.querySelectorAll(storySelector); + for (const story of stories) { + if (story.style.display == 'none') { + continue; + } + + const descriptions = story.querySelectorAll(descriptionSelector); + for (const description of descriptions) { + + const descriptionContent = description.innerText.trim(); + if (searchStrings[language].find(searchString => searchString == descriptionContent)) { + + console.debug('Blocked sponsored story', story); + story.style.display = 'none'; + } + } + } + } + + const observer = new MutationObserver(blockSponsoredPosts); + observer.observe(document.body, { + 'childList': true, + 'subtree': true + }); + + blockSponsoredPosts(); + + GM_addStyle(` + .scaffold-layout__aside { + visibility: hidden; + } + `) + +})(); |