Removes offers from businessfrance search page from location given by the user
// ==UserScript==
// @name Job Filter businessfrance
// @namespace http://tampermonkey.net/
// @version 2024-10-21
// @license MIT
// @description Removes offers from businessfrance search page from location given by the user
// @author Thomas Abecassis
// @match https://mon-vie-via.businessfrance.fr/offres/recherche?*
// @icon https://www.google.com/s2/favicons?sz=64&domain=businessfrance.fr
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// ==/UserScript==
(function() {
'use strict';
const removedJobOfferArray = [];
function removeJobOfferDiv(div){
div.style.display = 'none';
removedJobOfferArray.push(div);
}
function resetHiddenJobOffers(){
removedJobOfferArray.forEach(div=>div.style.display = 'block')
removedJobOfferArray.length = 0;
}
function getKeywords() {
return GM_getValue('jobFilterKeywords', ['bruxelles', 'luxembourg', '(inactif)']);
}
function saveKeywords(keywords) {
GM_setValue('jobFilterKeywords', keywords);
}
function promptForKeywords() {
const currentKeywords = getKeywords();
const input = prompt('Enter the keywords to be filtered, separated by commas:', currentKeywords.join(', '));
if (input !== null) {
const newKeywords = input.split(',').map(keyword => keyword.trim()).filter(keyword => keyword !== '');
saveKeywords(newKeywords);
resetHiddenJobOffers();
removeOfferByKeywords(getKeywords());
}
}
GM_registerMenuCommand('Edit filter keywords', promptForKeywords);
function removeOfferByKeywords(keywords) {
const jobOfferDivs = document.querySelectorAll('.latest_offers div');
jobOfferDivs.forEach(div => {
const locationElement = div.querySelector('.location');
if (locationElement) {
const location = locationElement.textContent;
if (keywords.some(keyword => location.toLowerCase().includes(keyword.toLowerCase())))
removeJobOfferDiv(div);
}
});
}
function observeJobOffersChanges() {
const observer = new MutationObserver(() => {
removeOfferByKeywords(getKeywords());
});
const JobOffersContainer = document.querySelector('.home_offre');
if(JobOffersContainer){
observer.observe(JobOffersContainer, {
childList: true,
subtree: true
});
}else {
console.error('The job offers container hasn\'t been found.');
}
}
document.readyState === 'complete' ? observeJobOffersChanges() : window.addEventListener('load', observeJobOffersChanges());
})();