Filter jobs based on title and company
// ==UserScript==
// @name LinkedIn jobs filter
// @description Filter jobs based on title and company
// @namespace https://greasyfork.org/en/users/673321-christianmemije
// @version 0.1.0
// @license MIT
// @author christianmemije
// @match *://www.linkedin.com/*
// @grant none
// @supportURL https://github.com/christianmemije/jobfilters
// ==/UserScript==
(function () {
// Configuration starts
var desiredTitles = []; // e.g. ['front end', 'ui engineer']
var undesiredTitles = []; // e.g. ['full stack', 'manager']
var desiredCompanies = []; // e.g. ['Tesla', 'SpaceX']
var undesiredCompanies = []; // e.g. ['Facebook', 'Amazon']
// Configuration ends
var debugMode = false;
var desiredTitlesRegEx = new RegExp(desiredTitles.join('|'), 'i');
var undesiredTitlesRegEx = new RegExp(undesiredTitles.join('|'), 'i');
var desiredCompaniesRegEx = new RegExp(desiredCompanies.join('|'), 'i');
var undesiredCompaniesRegEx = new RegExp(undesiredCompanies.join('|'), 'i');
var jobTileSelector = 'li.artdeco-list__item';
var jobTileTitleSelector = '.job-card-list__title';
var jobCompanySelector = '.job-card-container__company-name';
var jobCardSelector = 'li.card-list__item';
var jobCarouselCardSelector = 'li.artdeco-carousel__item';
var jobCardTitleSelector = '.job-card-square__title';
var ghostCompanySelector = '.ghost-company';
new MutationObserver(function (mutationRecords) {
setTimeout(function () {
mutationRecords.forEach(function (_a) {
var addedNodes = _a.addedNodes;
addedNodes.forEach(function (_a) {
var nodeType = _a.nodeType;
if (nodeType === Node.ELEMENT_NODE) {
document
.querySelectorAll(jobCardSelector + ", " + jobCarouselCardSelector + ", " + jobTileSelector)
.forEach(function (job) {
var title = job.querySelector(jobCardTitleSelector + ", " + jobTileTitleSelector);
var company = job.querySelector("" + jobCompanySelector);
var ghostCompany = !!job.querySelector(ghostCompanySelector);
if (title &&
company &&
(ghostCompany ||
(desiredTitles.length &&
!desiredTitlesRegEx.test(title.textContent)) ||
(undesiredTitles.length &&
undesiredTitlesRegEx.test(title.textContent)) ||
(desiredCompanies.length &&
!desiredCompaniesRegEx.test(company.textContent)) ||
(undesiredCompanies.length &&
undesiredCompaniesRegEx.test(company.textContent)))) {
if (debugMode) {
job.style.border = 'solid red';
}
else {
job.remove();
}
}
});
}
});
});
});
}).observe(document.body, { childList: true, subtree: true });
})();