Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- javascript: (function main() {
- const queue = [];
- function startNewEntriesObserver() {
- const target = document.querySelector("#newEntriesCounter");
- const observer = new MutationObserver(() => {
- const loadNewPosts = target.querySelector("a");
- if (loadNewPosts) loadNewPosts.click();
- });
- observer.observe(target, {
- childList: true,
- });
- }
- function startItemsStreamObserver() {
- const target = document.querySelector("#itemsStream");
- const observer = new MutationObserver((mutationList) => {
- const addedNodes = mutationList[0].addedNodes;
- for (let i = addedNodes.length - 1; i >= 0; --i) {
- pushToQueue(extractPostTextFromEntryElement(addedNodes[i]));
- }
- });
- observer.observe(target, {
- childList: true,
- });
- }
- function popQueue() {
- return queue.shift();
- }
- function pushToQueue(post) {
- const cleanedPost = cleanPost(post);
- if (cleanedPost !== "") queue.push(cleanedPost);
- }
- function cleanPost(post) {
- function removeLongPosts(post) {
- if (post.match(/pokaż całość$/)) return "";
- return post;
- }
- function removeTrailingHashTags(post) {
- let beforeTrim = post;
- let trimmedPost = null;
- while ((trimmedPost = beforeTrim.replace(/#\w*$/, "")) !== beforeTrim) {
- beforeTrim = trimmedPost.slice(0, -1);
- }
- return trimmedPost;
- }
- function changeHashTagsToPhoneticForm(post) {
- return post.replaceAll("#", "hasztag ");
- }
- function changeLennyFaceToPhoneticForm(post) {
- const regex =
- /[\(•́̀ ̄ݓ✖・՞﹒︣⌣⁰❛¯͒´`ཀ༎ຶຈO͡◕͠°⇀↼ಥ☯͝ಠೃರ˙◔□⌐▀・◉‾⊙◐◖◗◑ヘ¬≖̿ิʘ̆☉;■º͜’^–xᴼ^˘۞◯๑ᵔσ✪♥ั╥ᵒ̌ಡ̲ᵕିୖଵ்౦್രිᓀᓂ⊡⊚⊘⊗¤☢⚆☭◪Ɵ].{0,4}[_ਊ︿〜〰∧Дڡʖ͜ل‸⌂͟﹏益‿̯Ĺʟдᗜᴥω◞౪◟෴ुرں┏┓ヮ▽▃ₒ̀ε~□◡3◯̫╭╮()▾*ⓞ].{0,4}[•́̀ ̄ݓ✖・՞﹒︣⌣⁰❛¯͒´`ཀ༎ຶຈO͡◕͠°⇀↼ಥ☯͝ಠೃರ˙◔□⌐▀・◉‾⊙◐◖◗◑ヘ¬≖̿ิʘ̆☉;■º͜’^–xᴼ^˘۞◯๑ᵔσ✪♥ั╥ᵒ̌ಡ̲ᵕିୖଵ்౦್രිᓀᓂ⊡⊚⊘⊗¤☢⚆☭◪Ɵ\)]/g;
- return post.replaceAll(regex, "leny fejs ");
- }
- function changeUrlToPhoneticForm(post) {
- const regex =
- /(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;
- return post.replaceAll(regex, "link ");
- }
- const cleaners = [
- removeLongPosts,
- removeTrailingHashTags,
- changeUrlToPhoneticForm,
- changeHashTagsToPhoneticForm,
- changeLennyFaceToPhoneticForm,
- ];
- return cleaners.reduce((prevPost, cleaner) => cleaner(prevPost), post);
- }
- function extractPostTextFromEntryElement(entryElement) {
- const selector = "div > div > div.text > p";
- return entryElement.querySelector(selector).innerText;
- }
- function getAllPosts() {
- const entrySelector = "li.entry";
- const posts = [...document.querySelectorAll(entrySelector)].map(
- extractPostTextFromEntryElement
- );
- return posts;
- }
- function readPost(post, onEnd) {
- const utterance = new SpeechSynthesisUtterance(post);
- utterance.lang = "pl-PL";
- utterance.addEventListener("end", onEnd);
- utterance.rate = 0.9;
- speechSynthesis.speak(utterance);
- }
- function readFromQueue() {
- if (queue.length === 0) {
- setTimeout(readFromQueue, 3000);
- } else {
- const poppedPost = popQueue();
- setTimeout(() => readPost(poppedPost, readFromQueue), 3000);
- }
- }
- const initialPost = getAllPosts()[0];
- pushToQueue(initialPost);
- startItemsStreamObserver();
- startNewEntriesObserver();
- readFromQueue();
- readPost("Zaczynam czytać Mireczku.");
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement