NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name LinkedIn Enhancer
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Enhance your LinkedIn Experience!
// @author Simon Gardner
// @match https://www.linkedin.com/feed*
// @license MIT
// @copyright Simon Gardner (http://holisticsystems.co.uk/)
// @grant none
// @require http://code.jquery.com/jquery-latest.js
// @require https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/simplemodal/jquery.simplemodal.1.4.4.min.js
// ==/UserScript==
(function() {
'use strict';
var settings = parseSettings();
var interval = 0;
$(document).ready(function(){
addStyles();
setInterval(addMenuItem, 200); //foil naughty linkedIn devs trying to stop modifications to the DOM?
interval = 200; processFeed();
});
$(window).scroll(function(){
//wait a short while after scrolling for linkedin to de-occlude then process
if (interval > 0) return;
interval = 200;
setTimeout(processFeed, interval);
});
function processFeed() {
console.log("filtering feed", interval);
if (interval == 0) return;
if ($("#voyager-feed .core-rail div.relative.ember-view article").length == 0) {
//LinkedIn isn't ready yet so try again shortly
interval *= 1.5;
setTimeout(processFeed, interval);
return;
}
$("#voyager-feed .core-rail div.relative.ember-view article:not(.enhanced)").each(function(i, ele){
processElement(ele, settings);
});
interval = 0;
}
function processElement(ele, settings) {
$(ele).addClass("enhanced");
if (matchFilters($(ele).text(), settings)) {
$(ele).addClass("feed-update-collapsed");
var btn = $("<button class=\"collapse-button\">filtered</button>")
.on("click", function(event) {
$(ele).toggleClass("feed-update-collapsed");
});
$(ele).find(".feed-shared-top-bar .tap-target").before(btn);
} else {
console.log("not matched");
}
/*if (settings.preventVideoAutoplay === true) {
console.log("trying to prevent autoplay");
$(".video-embedded .video-player .embedly", ele).remove();
}*/
}
function matchFilters(str, settings) {
for (var i=0; i < settings.feedText.length; i++) {
var filter = settings.feedText[i];
if (str.match(filter[0])) {
if (filter[1]) {
var m = Math.random();
if (m >= filter[1]) {
return true; //only match sometimes, allowing "volume adjustment"
}
} else {
return true; //no volume set, so always return true if matched
}
}
}
return false;
}
function parseSettings() {
var settings = {};
settings.feedText = (localStorage.getItem("linkedInEnhancer-filter-settings") || "").split("\n");
settings.feedText = settings.feedText.map(function(f) {
var t = f.split("=");
if (t[1]) t[1] = parseFloat(t[1]);
return t;
}).filter(function(f){
return (f[0].length > 0);
});
if (localStorage.getItem("linkedInEnhancer-prevent-autoplay") == "true"){
settings.preventVideoAutoplay = true;
} else {
settings.preventVideoAutoplay = false;
}
return settings;
}
function addMenuItem() {
if ($("#linkedInEnhancerMenuLink").length > 0) return;//already added, so don't do again //TODO: don't keep checking this for every single DOM mutation
$("#profile-nav-item .nav-settings__dropdown-options--manage ul")
.append("<li id=\"linkedInEnhancerMenuLink\" class=\"nav-dropdown__item\"><a href=\"javascript:return false;\" class=\"block pv1 ph5 ember-view\">LinkedIn Enhancer</a></li>")
.on("click", "#linkedInEnhancerMenuLink", function(event) {
$.modal(filterSettingsHtml(),{
minHeight:400,
minWidth: 600,
overlayClose:true,
focus:false,
onShow:function(dialog){
$("#LinkedInEnhancer-filter-settings").val(localStorage.getItem("linkedInEnhancer-filter-settings"));
if (localStorage.getItem("linkedInEnhancer-prevent-autoplay") == "true") {
$("#LinkedInEnhancer-prevent-autoplay").attr("checked", true);
}
$(".ok", dialog.data).click(function(){
$.modal.close();
});
},
onClose:function(dialog){
localStorage.setItem("linkedInEnhancer-filter-settings", $("#LinkedInEnhancer-filter-settings").val() );
if ($("#LinkedInEnhancer-prevent-autoplay").is(":checked")) {
localStorage.setItem("linkedInEnhancer-prevent-autoplay", true);
} else {
localStorage.setItem("linkedInEnhancer-prevent-autoplay", false);
}
$.modal.close(); // seems to be a bug because dialog doesn't actually close until second click
}
});
});
}
function filterSettingsHtml() {
return [
"<div class=\"LinkedInEnhancerSettings\">",
"<h1>LinkedIn Enhancer v.0.2</h1>",
"<div><label for=\"LinkedInEnhancer-filter-settings\">News Feed Filters</label>",
"<textarea rows=\"10\" class=\"mentions-input\" id=\"LinkedInEnhancer-filter-settings\" id=\"LinkedInEnhancer-filter-settings\"></textarea></div>",
//"<div class=\"inline\"><label for=\"LinkInEnhancer-prevent-autoplay\">Prevent Video Autoplay</label> <input type=\"checkbox\" id=\"LinkedInEnhancer-prevent-autoplay\" /></div>",
"<div class=\"actions\"><a href=\"https://openuserjs.org/scripts/simg/LinkedIn_Enhancer\" target=\"_blank\">Help</a> <button class=\"ok\">OK</button></div>",
"</div>"
].join("");
}
function addStyles() {
var styles = [
"<style>",
".feed-update-collapsed section,",
".feed-update-collapsed .feed-shared-update__social-info,",
".feed-update-collapsed .feed-shared-update__comments,",
".feed-update-collapsed .feed-shared-update__social-actions,",
".feed-update-collapsed .feed-shared-update__comments-container,",
".feed-update-collapsed .feed-shared-hero-entity,",
/*".feed-update-collapsed .image,",
".feed-update-collapsed .text-entity,",
".feed-update-collapsed .shared-image,",
".feed-update-collapsed .content .content,",
".feed-update-collapsed ul.actions,",
".feed-update-collapsed .content .social-summary,",
".feed-update-collapsed .content .comment-box,",
".feed-update-collapsed .content .comment-list,",
".feed-update-collapsed .side-article,",
".feed-update-collapsed .show-previous-comments,",
".feed-update-collapsed ul.rollup,",
".feed-update-collapsed .video,",
".feed-update-collapsed .recommendations,",
".feed-update-collapsed .group-activity,",
".feed-update-collapsed .show-more-updates,",
".feed-update-collapsed .see-more-container,",*/
".feed-update-collapsed .header .meta {display:none !important;}",
".collapse-button {background:none; border:none; color:orange; font-size:10px; font-weight:bold; cursor:pointer; margin-right:15px; display:inline-block;}",
//".feed-update .collapse-button:after {content:\"\\e027\"; font-family:\"LinkedIn-Glyphs-2.0.7\",\"LinkedIn-Glyphs\"; color:#999;}",
//".feed-update-collapsed .collapse-button:after {content:\"\\e026\";}",
"#linkedInEnhancerMenuLink {cursor:pointer}",
"#simplemodal-overlay {background-color:#000;}",
"#simplemodal-container {background-color:#fff; border:8px solid #444; padding:12px;}",
".LinkedInEnhancerSettings {position:relative;}",
".LinkedInEnhancerSettings .help {position:absolute; bottom:10px; left:10px;}",
".LinkedInEnhancerSettings h1 {margin-bottom:1em;}",
".LinkedInEnhancerSettings label {font-size:80%; display:block; color:#666; margin-bottom:2px;}",
".LinkedInEnhancerSettings .inline {margin-top:10px;}",
".LinkedInEnhancerSettings .inline label {display:inline; color:#000;}",
".LinkedInEnhancerSettings .inline input {vertical-align:bottom;}",
".LinkedInEnhancerSettings textarea {width:95%; min-height:100px; font-size:85%; padding:0.5em; line-height:125%;}",
".LinkedInEnhancerSettings .actions {text-align:right; margin:1em 0.5em;}",
".LinkedInEnhancerSettings button {border-radius:2px;}",
"#LinkedInEnhancer-prevent-autoplay {opacity:1; margin:0; position:static;}",
"</style>"];
$("head").append(styles.join(""));
}
})();