123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- const START_BTN_TEXT = "Следить";
- const STOP_BTN_TEXT = "Перестать следить";
- const SOUND_ON_TEXT_BTN = "Выкл. звук";
- const SOUND_OFF_TEXT_BTN = "Вкл. звук";
- const DURATION = 0.2; // minute
- let soundON = true;
- const soundFile =
- "https://cdn-prd.sounds.com/sounds/434165816e5346504436a979428f5cabcd7e619a_browser.mp4";
- const defaultStopWords = ["заработай", "курьер", "битрикс", "1с"];
- const defaultKeywords = [
- "python",
- "javascript",
- "js",
- "react",
- "nodejs",
- "telegram",
- "sql",
- "vk",
- "redux",
- "бот",
- "парс",
- "телеграм",
- ];
- if (!localStorage.getItem("keywords")) {
- localStorage.setItem("keywords", defaultKeywords);
- }
- if (!localStorage.getItem("stopwords")) {
- localStorage.setItem("stopwords", defaultStopWords);
- }
- function getWords() {
- const keywords = localStorage.getItem("keywords");
- const stopWords = localStorage.getItem("stopwords");
- return [
- keywords ? keywords.split(",") : [],
- stopWords ? stopWords.split(",") : [],
- ];
- }
- const titleBlock = document.querySelector(".order-list-title");
- const filterBlock = document.querySelector(".order-list-section-header");
- const startBtn = document.createElement("button");
- startBtn.classList.add("wz-button", "filter-button");
- startBtn.innerText = START_BTN_TEXT;
- startBtn.style.marginLeft = "0.5em";
- filterBlock.appendChild(startBtn);
- const settingsBtn = document.createElement("button");
- settingsBtn.classList.add("wz-button", "filter-button");
- settingsBtn.innerText = "Параметры слежения";
- settingsBtn.style.marginLeft = "0.5em";
- filterBlock.appendChild(settingsBtn);
- const setSoundBtn = document.createElement("button");
- setSoundBtn.classList.add("wz-button", "filter-button");
- setSoundBtn.innerText = soundON ? SOUND_ON_TEXT_BTN : SOUND_OFF_TEXT_BTN;
- setSoundBtn.style.backgroundColor = soundON ? "red" : "";
- setSoundBtn.style.marginLeft = "0.5em";
- filterBlock.appendChild(setSoundBtn);
- function setup() {
- let [keywords, stopWords] = getWords();
- keywords = prompt(
- "Введите через пробел или отредактируйте ключевые слова для поиска заданий",
- keywords.join(" ")
- );
- stopWords = prompt(
- "Введите через пробел или отредактируйте стоп слова, которых не должно быть в задании",
- stopWords.join(" ")
- );
- localStorage.setItem("keywords", keywords.split(" "));
- localStorage.setItem("stopwords", stopWords.split(" "));
- }
- settingsBtn.addEventListener("click", setup);
- startBtn.addEventListener("click", startWatching);
- setSoundBtn.addEventListener("click", setSound);
- function setSound(e) {
- if (e.target.innerText === SOUND_ON_TEXT_BTN) {
- setSoundBtn.style.backgroundColor = "";
- setSoundBtn.innerText = SOUND_OFF_TEXT_BTN;
- } else {
- setSoundBtn.style.backgroundColor = "red";
- setSoundBtn.innerText = SOUND_ON_TEXT_BTN;
- }
- soundON = !soundON;
- }
- let interval;
- function startWatching(e = null) {
- if (e && e.target.innerText === STOP_BTN_TEXT) {
- clearInterval(interval);
- startBtn.innerText = START_BTN_TEXT;
- startBtn.style.backgroundColor = "";
- return;
- }
- startBtn.style.backgroundColor = "red";
- startBtn.innerText = STOP_BTN_TEXT;
- interval = setInterval(() => {
- try {
- getMyJobs();
- } catch (error) {
- console.log(error);
- }
- }, 1000 * 60 * DURATION);
- }
- setTimeout(() => startWatching(), 3000);
- // собирает со страницы блоки с заданиями, где есть ключевые слова
- function getMyJobs() {
- const jobs = document.querySelectorAll(".new-order-short-description");
- const jobsFull = document.querySelectorAll(".external-links-wrapper");
- const jobsArray = Array.from(jobs);
- let newJobs = 0;
- let myJobs = 0;
- const [keywords, stopWords] = getWords();
- for (let i = 0; i < jobs.length; i++) {
- if (
- jobs[i].style.border !== "3px solid red" &&
- hasKeywords(jobsFull[i].innerText, keywords) &&
- !hasKeywords(jobsFull[i].innerText, stopWords)
- ) {
- jobs[i].style.border = "3px solid red";
- newJobs++;
- } else if (
- jobs[i].style.border == "3px solid red" &&
- !hasKeywords(jobsFull[i].innerText, keywords)
- ) {
- jobs[i].style.border = "";
- }
- if (jobs[i].style.border == "3px solid red") myJobs++;
- }
- titleBlock.innerHTML = `<span style="color:red; font-style:italic;">${myJobs}</span> jobs`;
- if (newJobs) notifyMe(newJobs);
- }
- function playSound(url) {
- const audio = new Audio(url);
- audio.play();
- }
- // прверяет, есть ли в тексте хотя бы одно ключевое слово
- function hasKeywords(text, wordsArr) {
- for (let w of wordsArr) {
- if (text.toLowerCase().indexOf(w) !== -1) {
- return true;
- }
- }
- return false;
- }
- function notifyMe(count) {
- // Проверка поддержки браузером уведомлений
- if (!("Notification" in window)) {
- alert("This browser does not support desktop notification");
- }
- // Проверка разрешения на отправку уведомлений
- else if (Notification.permission === "granted") {
- // Если разрешено, то создаём уведомление
- var notification = new Notification(`Найдено подходящих заданий: ${count}`);
- if (soundON) playSound(soundFile);
- }
- // В противном случае, запрашиваем разрешение
- else if (Notification.permission !== "denied") {
- Notification.requestPermission(function (permission) {
- // Если пользователь разрешил, то создаём уведомление
- if (permission === "granted") {
- var notification = new Notification(
- `Найдено подходящих заданий: ${count}`
- );
- if (soundON) playSound(soundFile);
- }
- });
- }
- }
|