Advertisement
Guest User

Untitled

a guest
Nov 19th, 2022
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. javascript: (function main() {
  2.   const queue = [];
  3.  
  4.   function startNewEntriesObserver() {
  5.     const target = document.querySelector("#newEntriesCounter");
  6.     const observer = new MutationObserver(() => {
  7.       const loadNewPosts = target.querySelector("a");
  8.       if (loadNewPosts) loadNewPosts.click();
  9.     });
  10.     observer.observe(target, {
  11.       childList: true,
  12.     });
  13.   }
  14.  
  15.   function startItemsStreamObserver() {
  16.     const target = document.querySelector("#itemsStream");
  17.     const observer = new MutationObserver((mutationList) => {
  18.       const addedNodes = mutationList[0].addedNodes;
  19.       for (let i = addedNodes.length - 1; i >= 0; --i) {
  20.         pushToQueue(extractPostTextFromEntryElement(addedNodes[i]));
  21.       }
  22.     });
  23.     observer.observe(target, {
  24.       childList: true,
  25.     });
  26.   }
  27.  
  28.   function popQueue() {
  29.     return queue.shift();
  30.   }
  31.  
  32.   function pushToQueue(post) {
  33.     const cleanedPost = cleanPost(post);
  34.     if (cleanedPost !== "") queue.push(cleanedPost);
  35.   }
  36.  
  37.   function cleanPost(post) {
  38.     function removeLongPosts(post) {
  39.       if (post.match(/pokaż całość$/)) return "";
  40.       return post;
  41.     }
  42.  
  43.     function removeTrailingHashTags(post) {
  44.       let beforeTrim = post;
  45.       let trimmedPost = null;
  46.       while ((trimmedPost = beforeTrim.replace(/#\w*$/, "")) !== beforeTrim) {
  47.         beforeTrim = trimmedPost.slice(0, -1);
  48.       }
  49.       return trimmedPost;
  50.     }
  51.  
  52.     function changeHashTagsToPhoneticForm(post) {
  53.       return post.replaceAll("#", "hasztag ");
  54.     }
  55.  
  56.     function changeLennyFaceToPhoneticForm(post) {
  57.       const regex =
  58.         /[\(•́̀ ̄ݓ✖・՞﹒︣⌣⁰❛¯͒´`ཀ༎ຶຈO͡◕͠°⇀↼ಥ☯͝ಠೃರ˙◔□⌐▀・◉‾⊙◐◖◗◑ヘ¬≖̿ิʘ̆☉;■º͜’^–xᴼ^˘۞◯๑ᵔσ✪♥ั╥ᵒ̌ಡ̲ᵕିୖଵ்౦್രිᓀᓂ⊡⊚⊘⊗¤☢⚆☭◪Ɵ].{0,4}[_ਊ︿〜〰∧Д۝ڡʖ͜ل‸⌂͟﹏益‿̯Ĺʟдᗜᴥω◞౪◟෴ुرں┏┓ヮ▽▃ₒ̀ε~□◡3◯̫╭╮()▾*ⓞ].{0,4}[•́̀ ̄ݓ✖・՞﹒︣⌣⁰❛¯͒´`ཀ༎ຶຈO͡◕͠°⇀↼ಥ☯͝ಠೃರ˙◔□⌐▀・◉‾⊙◐◖◗◑ヘ¬≖̿ิʘ̆☉;■º͜’^–xᴼ^˘۞◯๑ᵔσ✪♥ั╥ᵒ̌ಡ̲ᵕିୖଵ்౦್രිᓀᓂ⊡⊚⊘⊗¤☢⚆☭◪Ɵ\)]/g;
  59.       return post.replaceAll(regex, "leny fejs ");
  60.     }
  61.  
  62.     function changeUrlToPhoneticForm(post) {
  63.       const regex =
  64.         /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/g;
  65.       return post.replaceAll(regex, "link ");
  66.     }
  67.  
  68.     const cleaners = [
  69.       removeLongPosts,
  70.       removeTrailingHashTags,
  71.       changeUrlToPhoneticForm,
  72.       changeHashTagsToPhoneticForm,
  73.       changeLennyFaceToPhoneticForm,
  74.     ];
  75.  
  76.     return cleaners.reduce((prevPost, cleaner) => cleaner(prevPost), post);
  77.   }
  78.  
  79.   function extractPostTextFromEntryElement(entryElement) {
  80.     const selector = "div > div > div.text > p";
  81.     return entryElement.querySelector(selector).innerText;
  82.   }
  83.  
  84.   function getAllPosts() {
  85.     const entrySelector = "li.entry";
  86.     const posts = [...document.querySelectorAll(entrySelector)].map(
  87.       extractPostTextFromEntryElement
  88.     );
  89.     return posts;
  90.   }
  91.  
  92.   function readPost(post, onEnd) {
  93.     const utterance = new SpeechSynthesisUtterance(post);
  94.     utterance.lang = "pl-PL";
  95.     utterance.addEventListener("end", onEnd);
  96.     utterance.rate = 0.9;
  97.     speechSynthesis.speak(utterance);
  98.   }
  99.  
  100.   function readFromQueue() {
  101.     if (queue.length === 0) {
  102.       setTimeout(readFromQueue, 3000);
  103.     } else {
  104.       const poppedPost = popQueue();
  105.       setTimeout(() => readPost(poppedPost, readFromQueue), 3000);
  106.     }
  107.   }
  108.  
  109.   const initialPost = getAllPosts()[0];
  110.   pushToQueue(initialPost);
  111.  
  112.   startItemsStreamObserver();
  113.   startNewEntriesObserver();
  114.   readFromQueue();
  115.  
  116.   readPost("Zaczynam czytać Mireczku.");
  117. })();
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement