Indeed UX+

Removes Saved Job Posts from showing up & Allows select Job Posts via Arrow Keys

目前为 2024-11-11 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Indeed UX+
  3. // @namespace http://tampermonkey.net/
  4. // @version 2024-11-11
  5. // @description Removes Saved Job Posts from showing up & Allows select Job Posts via Arrow Keys
  6. // @author TigerYT
  7. // @include *://*.indeed.tld/jobs?q=*
  8. // @icon https://uk.indeed.com/images/favicon.ico
  9. // @grant none
  10. // @license The Unlicense
  11. // ==/UserScript==
  12.  
  13. // Target element selector
  14. (function checkDocumentReady() { document.readyState === 'complete' ? executeUsercript() : setTimeout(checkDocumentReady, 0); })();
  15.  
  16. function executeUsercript() {
  17. 'use strict';
  18.  
  19. let getViewJobPanelElem = () => document.getElementById('jobsearch-JobFullDetailsTitle')?.nextElementSibling;
  20. let getJobResultsPanelElem = () => document.getElementById('mosaic-provider-jobcards').firstElementChild;
  21. let allPosts = Array.from(getJobResultsPanelElem().children);
  22. let getJobPosts = () => allPosts.filter((jobPost) => jobPost.firstElementChild.classList.contains('tapItem')).map((({firstElementChild}) => firstElementChild));
  23. let getVisiblePosts = () => getJobPosts().filter((jobPostElem) => !jobPostElem.classList.contains('disliked'));
  24. let getCurrentJobPostId = () => getViewJobPanelElem()?.querySelector('.jobsearch-HeaderContainer a').href.split("&fromjk=")[1];
  25. let getCurrentJobPostElem = () => getVisiblePosts().find((jobPostElem) => getCurrentJobPostId() == getjobPostId(jobPostElem));
  26. let getCurrentJobPostElemIndex = () => getVisiblePosts().findIndex((jobPostElem) => getCurrentJobPostId() == getjobPostId(jobPostElem));
  27. let getjobPostId = (jobPostElem) => jobPostElem.className.split(' ').find((classStr) => classStr.startsWith('job_'))?.slice(4);
  28.  
  29. /* Hide All Saved Job Posts */
  30. getJobPosts().forEach((jobPostElem) => {
  31. let jobPostId = getjobPostId(jobPostElem);
  32.  
  33. if (jobPostElem.querySelector('div.underShelfFooter span').textContent.startsWith('Saved ') && !jobPostElem.classList.contains('disliked')) {
  34. jobPostElem.classList.add('disliked');
  35. if (jobPostId == getCurrentJobPostId() || !getCurrentJobPostElem()) getViewJobPanelElem().firstElementChild.click();
  36. } else if (jobPostId == getCurrentJobPostId()) getCurrentJobPostElem().classList.add('vjs-highlight');
  37.  
  38. });
  39.  
  40. /* Allow Arrow Keys to Select Job Posts */
  41.  
  42. let newJobPostElemIndex, currentJobPostElemIndex
  43. newJobPostElemIndex = currentJobPostElemIndex = getCurrentJobPostElemIndex();
  44.  
  45. let jobPostSelector = (e) => {
  46. let upKey = ['ArrowUp', 'ArrowLeft'].includes(e.key);
  47. let downKey = ['ArrowDown', 'ArrowRight'].includes(e.key);
  48.  
  49. if (!getCurrentJobPostElem()) getViewJobPanelElem()?.firstElementChild.click();
  50.  
  51. if (currentJobPostElemIndex > 0 && upKey) newJobPostElemIndex--;
  52. else if (currentJobPostElemIndex < (getVisiblePosts().length - 1) && downKey) newJobPostElemIndex++;
  53. else return;
  54.  
  55. console.log(newJobPostElemIndex);
  56. console.log(getVisiblePosts());
  57. let newJobPostElem = getVisiblePosts()[newJobPostElemIndex];
  58.  
  59. newJobPostElem.scrollIntoView({ behavior: 'auto', block: 'center', inline: 'center' });
  60. console.log(getjobPostId(newJobPostElem));
  61. document.getElementById('sj_' + getjobPostId(newJobPostElem)).click();
  62.  
  63. currentJobPostElemIndex = newJobPostElemIndex;
  64. }
  65.  
  66. window.addEventListener('keydown', (e) => jobPostSelector(e));
  67. }