Wykop XS is a helper script for userstyle "Wykop X Style 3" which modifies wykop.pl website and make it easier to use adding enhancements and new features. Check it out here: http://styl.wykopx.pl
You may also like Wykop XS - Lista plusujących, animowane awatary, mikroczat.
// ==UserScript== // @name Wykop XS 3.0 // @name:pl Wykop XS 3.0 // @name:en Wykop XS 3.0 // @version 3.0.81 // @description Wykop XS służy do wspomagania działania stylu "Wykop X Style 3", który jest sugerowany do poprawnego działania niniejszego skryptu. Wykop X Style znajdziesz na http://styl.wykopx.pl // @description:en Wykop XS is a helper script for userstyle "Wykop X Style 3" which modifies wykop.pl website and make it easier to use adding enhancements and new features. Check it out here: http://styl.wykopx.pl // Chcesz wesprzeć projekt Wykop X? Postaw kawkę: // @contributionURL https://buycoffee.to/wykopx // @author Wykop X <[email protected]> // @match https://wykop.pl/* // @match https://github.com/wykopx/* // @supportURL http://wykop.pl/tag/wykopx // @namespace Violentmonkey Scripts // @compatible chrome, firefox, opera, safari, edge // @license No License // @icon https://www.google.com/s2/favicons?sz=64&domain=wykop.pl // @require https://unpkg.com/[email protected]/dist/localforage.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dayjs.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/locale/pl.js // @require https://cdn.jsdelivr.net/npm/[email protected]/plugin/relativeTime.js // ==/UserScript== (async function () { 'use strict'; const currentVersion = "3.0.80"; let dev = false; const promoString = " - Wykop XS / #wykopx"; const root = document.documentElement; const head = document.head; const body = document.body; const bodySection = body.querySelector("section"); dayjs.locale("pl"); dayjs.extend(window.dayjs_plugin_relativeTime); //dayjs.extend(relativeTime); // https://day.js.org/docs/en/plugin/relative-time // https://www.jsdelivr.com/package/npm/dayjs?tab=files&path=plugin // github if (!bodySection) { const openGitHubSidebar = () => { document.querySelector('div#wiki-wrapper div#wiki-content button.js-wiki-more-pages-link')?.click(); }; openGitHubSidebar(); window.addEventListener('load', openGitHubSidebar); window.addEventListener('pageshow', openGitHubSidebar); // window.addEventListener('popstate', openGitHubSidebar); // window.addEventListener('hashchange', openGitHubSidebar); // window.addEventListener('pagehide', openGitHubSidebar); // window.addEventListener('beforeunload', openGitHubSidebar); // window.addEventListener('unload', openGitHubSidebar); if (window.navigation) { window.navigation.addEventListener('navigate', function () { openGitHubSidebar(); }); } } // wykop else { const wykopxSettings = getComputedStyle(head); // getComputedStyle(document.documentElement) -- nie działa, nie wczytuje właściwości z :root const settings = {}; const styleElement = document.createElement('style'); styleElement.id = "wykopxs"; let CSS = ""; function setSettingsValueFromCSSProperty(settingName, defaultValueForWykopXS = true, propertyValueInsteadOfBoolean = false) { if (propertyValueInsteadOfBoolean) settings[settingName] = wykopxSettings.getPropertyValue(`--${settingName}`) ? wykopxSettings.getPropertyValue(`--${settingName}`).trim() : defaultValueForWykopXS; else settings[settingName] = wykopxSettings.getPropertyValue(`--${settingName}`) ? wykopxSettings.getPropertyValue(`--${settingName}`).trim() === '1' : defaultValueForWykopXS; } setSettingsValueFromCSSProperty("WykopXSEnabled"); if (settings.WykopXSEnabled == false) return; /* WYKOP XS HEADER */ let loggedUser = { //data: null, username: null // loggedUser.username -> nazwa zalogowanego uzytkownika }; let wxs_modal = null; let loadTime = dayjs(); // wykop_xs_mikroczat.user.js -MIKROCZAT/LISTA PLUSUJĄCYCH - settings setSettingsValueFromCSSProperty("entryVotersListEnable"); // włącza pokazywanie listy plusujących z Wykop X Style setSettingsValueFromCSSProperty("entryVotersListExpandIfLessThan", 50, true); setSettingsValueFromCSSProperty("hideAds"); // blokuje wszystkie reklamy na wykopie if (settings.entryVotersListEnable) { // entryVotersListExpandIfLessThan - domyślnie Wykop pokazywał 5 osób, które zaplusowały. // Możesz zmienić tę wartość na np. 10 albo 25. Jeśli wpis ma mniej plusów niż ta liczba, zostaną od razu wyświetleni wszyscy plusujący bez przycisku "+15 INNYCH" if (!settings.entryVotersListExpandIfLessThan) settings.entryVotersListExpandIfLessThan = 20; settings.votersFollow = true; // pokazuje 🔔 przed użytkownikami, których obserwujesz settings.votersBlacklist = true; // pokazuje ⛔ przed użytkownikami, których blokujesz settings.votersBanned = true; // pokazuje użytkowników z aktywnym banem w kolorze i z ikonką 🍌 settings.votersSuspended = true; // pokazuje ✖ przed kontami, które są w trakcie usuwania settings.votersRemoved = true; // pokazuje ✖ przed kontami, które są usunięte settings.votersGenderF = false; // pokazuje różową kropkę przed kobietami settings.votersGenderM = false; // pokazuje niebieską kropkę przed mężczyznami settings.votersColorGreen = true; // pokazuje zielonki w kolorze settings.votersColorOrange = false; // pokazuje pomarańczowych użytkowników w kolorze settings.votersColorBurgundy = true; // pokazuje użytkowników bordo w kolorze settings.votersFollowFirst = true; // pokazuje użytkowników, których obserwujesz pierwszych na liście settings.votersBlackFirst = false; // pokazuje plusy od moderacji pierwsze na liście (konta typu @wykop, @m__b, @a__s itd.) settings.votersBurgundyFirst = false; // pokazuje użytkowników bordo pierwszych na liście settings.votersOrangeFirst = false; // pokazuje zielonki pierwszych na liście settings.votersGreenFirst = false; // pokazuje pomarańczki pierwszych na liście settings.votersBlacklistLast = false; // pokazuje użytkowników, których zablokowałeś na końcu listy settings.votersRemovedLast = false; // pokazuje usunięte konta na końcu listy settings.votersBannedLast = false; // pokazuje zbanowanych na końcu listy settings.votersSuspendedLast = false; // pokazuje konta w trakcie usuwania na końcu listy } settings.hideShareButton = true; // ukrywa przycisk "Udostępnij" settings.showFavouriteButton = true; // pokazuje przycisk "Dodaj do ulubionych" (samą gwiazdkę) settings.showFavouriteButtonLabel = true; // pokazuje oprócz gwiazdki także tekst "Ulubione" settings.addCommentPlusWhenVotingOnEntry = false; // gdy plusujesz wpis, dodaje komentarz "+1" settings.addCommentPlusWhenVotingOnComment = false; // gdy plusujesz komentarz, dodaje komentarz "+1" settings.showAnimatedAvatars = true; // pokazuje animowane avatary settings.version = (getComputedStyle(bodySection).getPropertyValue("--version").trim().slice(1, -1)); // "2.48"; settings.versor = (getComputedStyle(bodySection).getPropertyValue("--versor").trim().slice(1, -1)); // "style", "blank", "block" settings.xblocker = (getComputedStyle(bodySection).getPropertyValue("--xblocker").trim().slice(1, -1)); // "2.48"; if (!dev) dev = setSettingsValueFromCSSProperty("wxsDev", false); setSettingsValueFromCSSProperty("WykopXStyleEnabled", false); setSettingsValueFromCSSProperty("hitsInTopNavJS"); setSettingsValueFromCSSProperty("quickLinksEnable"); setSettingsValueFromCSSProperty("myWykopInTopNavJS"); setSettingsValueFromCSSProperty("favoritesInTopNavJS"); setSettingsValueFromCSSProperty("imageUploaderEnable", false); // https://github.com/wykopx/WykopX/wiki/X-Wklejanie-obrazkow-ze-schowka setSettingsValueFromCSSProperty("addNewLinkInTopNavJS"); setSettingsValueFromCSSProperty("disableNewLinkEditorPastedTextLimit"); setSettingsValueFromCSSProperty("autoOpenMoreContentEverywhere"); setSettingsValueFromCSSProperty("autoOpenSpoilersEverywhere"); setSettingsValueFromCSSProperty("observedTagsInRightSidebarEnable"); setSettingsValueFromCSSProperty("linkVoteDownButton"); setSettingsValueFromCSSProperty("infiniteScrollEntriesEnabled"); setSettingsValueFromCSSProperty("infiniteScrollLinksEnabled"); setSettingsValueFromCSSProperty("editorShowMyUsername"); setSettingsValueFromCSSProperty("editorShowMyUsernameOnSendButton"); setSettingsValueFromCSSProperty("haveBanDisableTextarea"); // ARCHIWUM X setSettingsValueFromCSSProperty("wxsArchiveXNewestEntry", false); if (settings.wxsArchiveXNewestEntry) settings.wxsArchiveXNewestEntryRefresh = wykopxSettings.getPropertyValue("--wxsArchiveXNewestEntryRefresh") ? parseInt(wykopxSettings.getPropertyValue("--wxsArchiveXNewestEntryRefresh")) : 15000; // PRZEŁĄCZNIKI setSettingsValueFromCSSProperty("wxsSwitchesEnable", false); if (settings.wxsSwitchesEnable) { setSettingsValueFromCSSProperty("wxsSwitchPhotoViewer"); setSettingsValueFromCSSProperty("wxsSwitchImages"); setSettingsValueFromCSSProperty("wxsSwitchYouTube"); setSettingsValueFromCSSProperty("wxsSwitchAdult"); setSettingsValueFromCSSProperty("wxsSwitchNSFW"); setSettingsValueFromCSSProperty("wxsSwitchTags"); setSettingsValueFromCSSProperty("wxsSwitchByUserColor"); setSettingsValueFromCSSProperty("wxsSwitchByUserGender"); } setSettingsValueFromCSSProperty("removeAnnoyancesEnable"); if (settings.removeAnnoyancesEnable) { setSettingsValueFromCSSProperty("removeAnnoyancesIframes"); setSettingsValueFromCSSProperty("removeAnnoyancesScripts"); setSettingsValueFromCSSProperty("removeAnnoyancesAds"); setSettingsValueFromCSSProperty("removeAnnoyancesGDPR"); } // WYKOP OBJECTS INTERSECTION OBSERVER let IntersectionObserverEnabled = false; setSettingsValueFromCSSProperty("intersectionObserverRootMargin"); setSettingsValueFromCSSProperty("linkToVideoDuration"); setSettingsValueFromCSSProperty("entryWithVideoDuration"); if (settings.linkToVideoDuration || settings.entryWithVideoDuration) { IntersectionObserverEnabled = true; } setSettingsValueFromCSSProperty("checkLinkVotesEnable"); if (settings.checkLinkVotesEnable) { IntersectionObserverEnabled = true; setSettingsValueFromCSSProperty("checkLinkVotesPerHour"); setSettingsValueFromCSSProperty("checkLinkCommentsPerHour"); } // voting explosion setSettingsValueFromCSSProperty("votingExplosionEnable", false); // checkPluses() let votesFetchingLimitMinimumVotes = 1; let votesFetchingLimitMaximumHoursOld = 48; let votesFetchingFirstDelayInSeconds = 1; // seconds let votesFetchingOngoingDelayInSeconds = 990; // seconds let votesFetchingHigherFrequencyLimitMinimumVotes = 30; let votesFetchingHigherFrequencyLimitMaximumHoursOld = 24; let votesFetchingHigherFrequencyDelayInSeconds = 990; // seconds setSettingsValueFromCSSProperty("checkEntryPlusesWhenVoting"); setSettingsValueFromCSSProperty("checkEntryPlusesEnable"); setSettingsValueFromCSSProperty("prefixBeforePlusesCount", "brak", true); // domyslnie puste, dodajemy plus przed liczbą plusów const prefixBeforePlusesCountMap = new Map([ ['brak', ''], ['plus', '+'], // domyslnie ['emoji_serce', '💚'], ['emoji_index_pointing_up', '☝'], ['emoji_thumbs_up', '👍'], ['emoji_backhand_index_pointing_up', '👆'], ['emoji_upwards_button', '🔼'], ['emoji_up_arrow', '⬆'], ['emoji_up_right_arrow', '↗'], ['emoji_up_left_arrow', '↖'], ['emoji_right_arrow_curving_up', '⤴'], ['emoji_heavy_tick', '✔'], ['emoji_plus_sign', '➕'], ['emoji_red_triangle_pointed_up', '🔺'] ]); settings.prefixBeforePlusesCount = prefixBeforePlusesCountMap.get(settings.prefixBeforePlusesCount); setSettingsValueFromCSSProperty("prefixBeforeMinusesCount", "minus", true); // domyślnie minus i tak zostawiamy const prefixBeforeMinusesCountMap = new Map([ ['brak', ''], ['minus', '-'], // domyslnie ['emoji_cross_mark', '❌'], ['emoji_backhand_index_pointing_down', '👇'], ['emoji_thumbs_down', '👎'], ['emoji_downwards_button', '🔽'], ['emoji_down_arrow', '⬇'], ['emoji_down_right_arrow', '↘'], ['emoji_down_left_arrow', '↙'], ['emoji_right_arrow_curving_down', '⤵'], ['emoji_minus_sign', '➖'], ['emoji_red_triangle_pointed_down', '🔻'] ]); settings.prefixBeforeMinusesCount = prefixBeforeMinusesCountMap.get(settings.prefixBeforeMinusesCount); if (settings.checkEntryPlusesEnable) { IntersectionObserverEnabled = true; setSettingsValueFromCSSProperty("checkEntryPlusesPerHour"); setSettingsValueFromCSSProperty("checkEntryCommentsPerHour"); setSettingsValueFromCSSProperty("checkEntryPlusesForVotingGame"); } // SPRAWDZANIE UZYTKOWNIKOW KTORZY CIE BLOKUJA settings.authorBlocksYouCheckingEnable = true; // LOCAL STORAGE let localStorageMirkoukrywacz = null; let localStorageNotatkowator = null; let localStorageUserLabels = null; // LOCALSTORAGE const localStorageFirstDailyIDs = localforage.createInstance({ driver: localforage.LOCALSTORAGE, name: "wykopx", storeName: "firstDailyIDs", }); setSettingsValueFromCSSProperty("linkThumbnail", "poprawej", true); // "poprawej", "polewej", "niepokazuj" setSettingsValueFromCSSProperty("actionBoxEnable"); if (settings.actionBoxEnable) { IntersectionObserverEnabled = true; setSettingsValueFromCSSProperty("filterUserComments"); setSettingsValueFromCSSProperty("filterUserReplies"); setSettingsValueFromCSSProperty("mirkoukrywaczEnable"); if (settings.mirkoukrywaczEnable) { setSettingsValueFromCSSProperty("mirkoukrywaczMinimizedGrayedOut"); setSettingsValueFromCSSProperty("mirkoukrywaczMinimizeEntries"); setSettingsValueFromCSSProperty("mirkoukrywaczMinimizeComments"); setSettingsValueFromCSSProperty("mirkoukrywaczHideEntries"); setSettingsValueFromCSSProperty("mirkoukrywaczHideComments"); setSettingsValueFromCSSProperty("mirkoukrywaczHideLinks"); setSettingsValueFromCSSProperty("mirkoukrywaczSaveEntries"); setSettingsValueFromCSSProperty("mirkoukrywaczSaveComments"); } CSS += ` /* ACTION BOX */ section .wxs_menu_action_box { --buttonsBorderRadius: 5px; width: fit-content; position: absolute; height: 30px; border-style: solid; border-color: var(--blackOpacity01, rgb(125 125 125 / 1)); color: var(--blackOpacity02, rgb(125 125 125 / 1)); display: flex; flex-direction: row; justify-content: space-between; font-size: 11px; z-index: 1; opacity: 1!important; transition: opacity 0.5s linear!important; } section .wxs_menu_action_box:hover { background-color: var(--contentBackgroundColor, rgb(0 0 0 / 0.2)); } @starting-style { section .wxs_menu_action_box { opacity: 0!important; } } /* WE WPISACH I KOMENTARZACH */ section.entry .wxs_menu_action_box { border-radius: 0px 0px var(--buttonsBorderRadius, 4px) var(--buttonsBorderRadius, 4px); border-width: 0px 1px 1px 1px; right: 140px; } section.entry:not(.reply) .wxs_menu_action_box { top: 0px; } /* w znaleziskach */ section.link-block .wxs_menu_action_box { border-color: var(--blackOpacity005, rgb(125 125 125 / 1)); border-radius: var(--buttonsBorderRadius, 4px) var(--buttonsBorderRadius, 4px) 0px 0px; border-width: 1px 1px 0px 1px; bottom: 0px; top: unset; /* zmienione gdy linkThumbnail == "polewej" */ right: 18px; left: unset; } /* kolejność przycisków zmienione gdy linkThumbnail == "polewej" */ section.link-block .wxs_menu_action_box .wxs_filter_off { order: 1; } section.link-block .wxs_menu_action_box .wxs_filter_on_user { order: 2; } section.link-block .wxs_menu_action_box .wxs_hide { order: 3; } /* MOBILE */ @media (max-width: 640px) { /* WXS ACTION MENU BUTTONS */ section.link-block .wxs_menu_action_box { right: unset!important; left: 40%!important; } } `; if (settings.linkThumbnail == "polewej") { CSS += `@media (max-width: 640px) { section.link-block .wxs_menu_action_box .wxs_filter_on_user { order: 2!important; } section.link-block .wxs_menu_action_box .wxs_filter_off { order: 3!important; } section.link-block .wxs_menu_action_box .wxs_hide { order: 1!important; } } /* WERSJA PC */ @media (min-width: 641px) { /* WXS ACTION MENU BUTTONS */ section.link-block .wxs_menu_action_box { right: unset!important; left: 122px!important; } section.link-block .wxs_menu_action_box .wxs_filter_on_user { order: 2!important; } section.link-block .wxs_menu_action_box .wxs_filter_off { order: 3!important; } section.link-block .wxs_menu_action_box .wxs_hide { order: 1!important; } } `; }; CSS += ` section.link-page section.link-block .wxs_menu_action_box { left: unset!important; right: 155px!important; } section.link-page section.entry .wxs_menu_action_box { right: 190px; } /* wpisy w sidebarze */ main.main > section > section.sidebar > section.custom-sidebar > div.content > section.entries > section.entry .wxs_menu_action_box { display: none!important; } section.entry .wxs_menu_action_box:hover { box-shadow: 3px 3px 2px 1px rgba(0, 0, 0, 0.1); border-color: var(--blackOpacity04, rgb(125 125 125 / 1)); } section.link-block .wxs_menu_action_box:hover { box-shadow: 3px -3px 2px 1px rgba(0, 0, 0, 0.1); border-color: var(--blackOpacity04, rgb(125 125 125 / 1)); } section .wxs_menu_action_box button { display: flex; justify-content: center; align-items: center; font-size: inherit; min-width: 20px; width: max-content; padding: 0px 10px; height: 100%; color: inherit; } section .wxs_menu_action_box button:first-child { border-radius: 0px 0px 0px var(--buttonsBorderRadius, 4px)!important; } section .wxs_menu_action_box button:last-child { border-radius: 0px 0px var(--buttonsBorderRadius, 4px) 0px!important; } section .wxs_menu_action_box button span { font-size: inherit; padding: 0px 3px; } @media (max-width: 1350px) { section.entry .wxs_menu_action_box button span { display: none; } } /* ukrycie niepotrzebnych przycisków */ section.wxs_minimized > article > div.wxs_menu_action_box > button.wxs_minimize, section:not(.wxs_minimized) > article > div.wxs_menu_action_box > button.wxs_maximize, section.own > article > .wxs_menu_action_box > .wxs_hide { display: none; } /* ukrycie filtrowania pod wpisem bez komentarzy */ section.entry-page > section.entry > section.stream > div.content > section.entry.detailed:not(:has(div.comments)) .wxs_menu_action_box > button:is(.wxs_filter_on_user, .wxs_filter_off, .wxs_filter_on_replies) section.entry-page > section.entry > section.stream > div.content > section.entry.detailed:not(:has(div.comments)) > article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > button.wxs_filter_on_replies { display: none!important; } section.link-block .wxs_menu_action_box > button.wxs_minimize, section.link-block .wxs_menu_action_box > button.wxs_save, section.link-block .wxs_menu_action_box > button.wxs_filter_on_replies { display: none; } section.entry article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > button.wxs_filter_on_replies { display: inline-block; margin: 1px 2px 1px 3px; padding: 2px 4px 2px 4px; } section.entry article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > button.wxs_filter_on_replies > span { display: none; font-size: 11px; margin: 0px 4px; } section.entry article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > button.wxs_filter_on_replies:hover > span { display: inline; } section.entry article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > button { border: 1px solid var(--athensGray); } section.entry article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > button:hover { background-color: var(--whitish) } /* --- filtrowanie komentarzy użytkownika --- */ section .wxs_menu_action_box button:hover, body[data-wxs_filter="userComments"] .wxs_menu_action_box button.wxs_filter_on_user:hover body[data-wxs_filter="userReplies"] .wxs_menu_action_box button.wxs_filter_on_replies:hover { background-color: var(--blackOpacity005, rgb(0 0 0 / 0.05)); color: var(--blackOpacity1, rgb(125 125 125 / 1)); } body[data-wxs_filter="userComments"] .wxs_menu_action_box button.wxs_filter_on_user, body[data-wxs_filter="userReplies"] .wxs_menu_action_box button.wxs_filter_on_replies { color: var(--blackOpacity05, rgb(125 125 125 / 1)); background-color: var(--blackOpacity002, rgb(0 0 0 / 0.02)); border-bottom: 1px solid var(--blackOpacity05, rgb(125 125 125 / 1)); } /* przyciski filtrowania komentarzy użytkownika */ /* wpisy na stronie glownej */ main.main > section > div.content > section.home-page > section.home > section.stream > div.content > section.entry .wxs_menu_action_box > [class="wxs_filter_on_replies"], /* wpisy z 1 lub 2 komentarzami */ section.entry[wxs_first_load_comments_count="1"] .wxs_menu_action_box > [class^="wxs_filter"], section.entry[wxs_first_load_comments_count="2"] .wxs_menu_action_box > [class^="wxs_filter"], /* wpisy bez komentarzy */ /* main.main > section > div.content > section:not(.link-page) > section section.stream > div.content > section.entry:not(.reply):not(:has(div.comments)) .wxs_menu_action_box > .wxs_filter_on, */ /* main.main > section > div.content > section:not(.link-page) > section section.stream > div.content > section.entry:not(.reply):not(:has(div.comments)) .wxs_menu_action_box > .wxs_filter_off */ { display: none; } .wxs_menu_action_box > .wxs_filter_off { display: none; } /* ----- ZMINIMALIZOWANE WPISY I KOMENTARZE */ /* wpisy */ section.entry.wxs_minimized > article { padding: 0rem var(--entryLeftPadding, 16px;) 0rem 0rem!important; }`; if (settings.mirkoukrywaczMinimizedGrayedOut) { CSS += `section.entry.wxs_minimized > article { filter: grayscale(100%); }`; } CSS += ` /* STRONA ZNALEZISKA - ZWINIĘTE KOMENTARZE */ section.link-page section.entry.wxs_minimized { height: 35px; padding: 0px!important; } section.link-page section.entry.wxs_minimized > article { padding: 0px!important; height: 35px; padding-right: var(--entriesAndCommentsHorizontalPadding, 16px)!important; margin: 0px!important; } section.link-page section.entry.wxs_minimized > div.comments { display: none!important; } section.link-page section.entry.wxs_minimized > article > header, section.link-page section.entry.wxs_minimized > article > header > div { height: 100%!important; } /* czas dodania */ section.entry.wxs_minimized > article > header > div.right > div > span { display: none!important; } /* avatar */ section.entry.wxs_minimized > article > header > div.left { transform: translate(0px, 0px); --avatarSize: 17px; } /* div.right */ section.entry.wxs_minimized > article > header { min-height: unset!important; } section.entry.wxs_minimized > article > header > div.right { height: 35px!important; align-items: center!important; } section.entry.wxs_minimized > article > header > div.right > div { display: flex!important; align-items: center!important; } /* treść */ section.entry.wxs_minimized > article > div.edit-wrapper { display: none!important; } /* ukrycie 2 najlepszych komentarzy pod wpisem w streamie */ main.main > section > div.content > section:is(.bucket-page, .category-page, .favourites-page, .home-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry.wxs_minimized > div.comments { display: none!important; }`; if (settings.mirkoukrywaczEnable) { /* WPISY UKRYWANE PRZEZ MIRKOUKRYWACZ .wxs_hidden should be removed most of the times, but still... */ CSS += ` /* TODO LINK */ main.main > section > div.content > section:is(.category-page, .favourites-page, .home-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry.wxs_hidden main.main > section > div.content > section.search-page > section section.stream > div.content section.entry.wxs_hidden { display: none!important; }` } } else { settings.mirkoukrywaczEnable = false; } if (settings.mirkoukrywaczEnable) { // LOCALSTORAGE localStorageMirkoukrywacz = localforage.createInstance({ driver: localforage.LOCALSTORAGE, name: "wykopx", storeName: "mirkoukrywacz", }); } setSettingsValueFromCSSProperty("notatkowatorEnable", true); if (settings.notatkowatorEnable) { IntersectionObserverEnabled = true; localStorageNotatkowator = localforage.createInstance({ driver: localforage.LOCALSTORAGE, name: "wykopx", storeName: "notatkowator", }); //settings.notatkowatorUpdateInterval = parseFloat(wykopxSettings.getPropertyValue("--notatkowatorUpdateInterval")); // number 0 ... 120 setSettingsValueFromCSSProperty("notatkowatorVerticalBar"); setSettingsValueFromCSSProperty("notatkowatorWebsiteURL"); setSettingsValueFromCSSProperty("notatkowatorStyle", "obok_nicka", true); // obok_nicka, obok_nicka_druga_linia, pod_avatarem } let falszyweRozoweArray = null; let falszyweNiebieskieArray = null; let mapaTrolli = null; setSettingsValueFromCSSProperty("wxsUserLabelsEnable", true); if (settings.wxsUserLabelsEnable) { IntersectionObserverEnabled = true; localStorageUserLabels = localforage.createInstance({ driver: localforage.LOCALSTORAGE, name: "wykopx", storeName: "userlabels", }); setSettingsValueFromCSSProperty("wxsUserLabelsFakeFemales", true); setSettingsValueFromCSSProperty("wxsUserLabelsTrolls", true); if (settings.wxsUserLabelsFakeFemales) { // LISTA FAŁSZYWYCH RÓŻOWYCH PASKÓW fałszywe różowe const listafalszywychrozowych = []; listafalszywychrozowych.push('washington'); listafalszywychrozowych.push('Obrzydzenie'); listafalszywychrozowych.push('Blueweb'); listafalszywychrozowych.push('conamirko'); listafalszywychrozowych.push('i_took_a_pill_in_remiza'); listafalszywychrozowych.push('Riolet'); listafalszywychrozowych.push('ChwilowaPomaranczka'); listafalszywychrozowych.push('RobieZdrowaZupke'); listafalszywychrozowych.push('IlllIlIIIIIIIIIlllllIlIlIlIlIlIlIII'); listafalszywychrozowych.push('Banderoza'); listafalszywychrozowych.push('deiceberg'); listafalszywychrozowych.push('Chodtok'); listafalszywychrozowych.push('kierowcaautobusuofficial'); listafalszywychrozowych.push('ToJestNiepojete'); listafalszywychrozowych.push('model_wygenerowany_na_wykoppl'); listafalszywychrozowych.push('chwilowypaczelok'); listafalszywychrozowych.push('sinls'); listafalszywychrozowych.push('KRZYSZTOF_DZONG_UN'); listafalszywychrozowych.push('miszczu90'); listafalszywychrozowych.push('nenq123'); listafalszywychrozowych.push('domek_drewniany'); listafalszywychrozowych.push('konserwix'); listafalszywychrozowych.push('Diamond'); listafalszywychrozowych.push('BlackBl-kunack'); listafalszywychrozowych.push('Mantusabra'); listafalszywychrozowych.push('ElCidX'); listafalszywychrozowych.push('cword'); listafalszywychrozowych.push('ToJestNiepojete'); listafalszywychrozowych.push('powodzenia'); listafalszywychrozowych.push('washington'); listafalszywychrozowych.push('sipson204'); listafalszywychrozowych.push('36873'); listafalszywychrozowych.push('Defined'); listafalszywychrozowych.push('toniemojebuty'); listafalszywychrozowych.push('DigitalPasztet'); listafalszywychrozowych.push('wcaleniepchamsiewmultikonto'); listafalszywychrozowych.push('Wieczny_Prawiczek'); listafalszywychrozowych.push('Bpnn'); listafalszywychrozowych.push('AndrzejBabinicz'); listafalszywychrozowych.push('bruhmomentow'); listafalszywychrozowych.push('iforgotmypass_'); listafalszywychrozowych.push('kwiat_pustyni626'); listafalszywychrozowych.push('powodzenia'); listafalszywychrozowych.push('simsakPL'); listafalszywychrozowych.push('ramotka'); listafalszywychrozowych.push('bruhmomentow'); // LISTA FAŁSZYWYCH NIEBIESKICH PASKÓW fałszywe niebieskie const listafalszywychniebieskich = []; listafalszywychniebieskich.push("Kantor_wymiany_mysli_i_wrazen"); listafalszywychniebieskich.push("DragonTattoo2404"); listafalszywychniebieskich.push("qksgh"); listafalszywychniebieskich.push("mariusz9922"); listafalszywychniebieskich.push("xoxo900"); listafalszywychniebieskich.push("jutronaobiadznowuryz"); localStorageUserLabels.setItem('falszyweRozowe', listafalszywychrozowych).then(() => { }); localStorageUserLabels.setItem('falszyweNiebieskie', listafalszywychniebieskich).then(() => { }); // get from localstorage falszyweRozoweArray = await localStorageUserLabels.getItem("falszyweRozowe"); falszyweNiebieskieArray = await localStorageUserLabels.getItem("falszyweNiebieskie"); } if (settings.wxsUserLabelsTrolls) { const trollsMap = new Map(); trollsMap.set("WykopX", { "url": "https://github.com/wykopx/WykopX/wiki/X-Notatkowator" }); trollsMap.set("wykop", { "label": "Oficjalne konto", }); trollsMap.set("bakehaus", { "label": "Wypiek", "url": "https://nimble.li/vdr4ajlm" }); trollsMap.set("m__b", { "label": "Michał B.", "url": "https://pl.linkedin.com/in/michalbialek" }); trollsMap.set("paliwoda", { "url": "https://sjp.pwn.pl/sjp/chomato;2448428.html" }); trollsMap.set("autotldr", { "label": "Bot AI", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Boty-na-Wykopie#auto-tldr" }); trollsMap.set("wykop-gpt", { "label": "Bot AI", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Boty-na-Wykopie#wykop-gpt" }); trollsMap.set("Przypomnienie", { "label": "Bot AI", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Boty-na-Wykopie#przypomnienie" }); trollsMap.set("DwieLinieBOTv3", { "label": "Bot AI", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Boty-na-Wykopie#dwie-linie-bot" }); trollsMap.set("ISSTrackerPL", { "label": "Bot", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Boty-na-Wykopie#iss-tracker" }); trollsMap.set("januszowybot", { "label": "Bot", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Boty-na-Wykopie#januszowy-bot" }); trollsMap.set("mirko_anonim", { "label": "Anonim", "url": "https://github.com/wykopx/Aplikacje-wykopowe/wiki/Aplikacje#mirkoanonim" }); // #wykopaka sciana wstydu trollsMap.set("Barneyeos", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("zzbkk", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ZarejestrowanyMimoWoli", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("idainadenshigijutsusha", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("birus", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("anthonysoprano", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ferigone", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("DerMirker", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("viciu03", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("kriss2005r", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Kalinke01", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("maestroPijanyRolnik", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Davidvia0", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Nefree", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Architekt_Chaosu", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("kogut_20", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("mkeeey", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Mirkosoft", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("WodkaGrejfrut", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("notavailable", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("spoko_spoko_na_chillku", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Repcakos", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("3dnow", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ToChybaJakisZart", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("vrraaaz", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Skura_tak_przezU", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Lutekcjusz", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ile-prawdy-jest-w-jednym-slowie", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("kutmen2", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("michal_misiek", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("kartofel322", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ten_co_uciekl", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("NaczelnyHejterWykopu", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("wykopowa_ona", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("s-o-s", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Samowski", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("CynicznySkurczybyk", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("qmox", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("pawel_je", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("PrawdziwyRealista", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("beniu89", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("cranberry250", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("bimbadil", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("PanKajak", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Qontrol", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("RobaUrs", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("PAST", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Szychasekk", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Szatanski_werset", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("matess", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("SSKW", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("silver1", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("CioseK", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("wojt4ss", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Ponta", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("kspr", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("korporacion", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ogrod87", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("Tomek3322", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("dgjkasgr8yl3q", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("dese", { "label": "🤬 #wykopaka", "url": "https://wykopaka.pl/wall-of-shame" }); trollsMap.set("ChwilowaPomaranczka", { "label": "Wykopowy Troll" }); localStorageUserLabels.setItem('mapaTrolli', Object.fromEntries(trollsMap)).then(() => { }); // get from localstorage localStorageUserLabels.getItem('mapaTrolli').then(val => { mapaTrolli = new Map(Object.entries(val)); }) } } // wykop_xs_banned.user.js - START - 1 setSettingsValueFromCSSProperty("infoboxUserBannedInfoOnProfilePage"); // wykop_xs_banned.user.js - END - 1 setSettingsValueFromCSSProperty("infoboxEnable", false); if (settings.infoboxEnable) { IntersectionObserverEnabled = true; setSettingsValueFromCSSProperty("infoboxUserBannedEmoji"); setSettingsValueFromCSSProperty("infoboxUserBannedInfo"); setSettingsValueFromCSSProperty("infoboxUserMemberSince"); setSettingsValueFromCSSProperty("infoboxUserMemberSinceYear"); setSettingsValueFromCSSProperty("infoboxUserSummaryFollowers"); setSettingsValueFromCSSProperty("infoboxUserSummaryActivity"); } setSettingsValueFromCSSProperty("tabChangeEnabled", false); if (settings.tabChangeEnabled) { setSettingsValueFromCSSProperty("tabChangeOnlyOnHiddenState", false); setSettingsValueFromCSSProperty("tabChangeFaviconEnabled", false); if (settings.tabChangeFaviconEnabled) { setSettingsValueFromCSSProperty("tabChangeFaviconSelect", "wykop", true); } setSettingsValueFromCSSProperty("tabChangeTitleEnabled", false); if (settings.tabChangeTitleEnabled) { setSettingsValueFromCSSProperty("tabChangeTitleShowNotificationsEnabled", false); setSettingsValueFromCSSProperty("tabChangeTitleShowNotificationsCountPM", false); setSettingsValueFromCSSProperty("tabChangeTitleShowNotificationsCountEntries", false); setSettingsValueFromCSSProperty("tabChangeTitleShowNotificationsCountSeparated", false); setSettingsValueFromCSSProperty("tabChangeTitleShowNotificationsCountTagsNewLink", false); setSettingsValueFromCSSProperty("tabChangeTitleShowNotificationsCountTagsNewEntry", false); setSettingsValueFromCSSProperty("tabChangeTitlePrefix", false); setSettingsValueFromCSSProperty("tabChangeTitleSelect", "domyslny", true); setSettingsValueFromCSSProperty("tabChangeTitleCustom", "Wykop X", true); setSettingsValueFromCSSProperty("tabChangeTitleSuffix", "domyslny", true); } } // DOMYŚLNIE WYŁĄCZONE BEZ WYKOP X STYLE setSettingsValueFromCSSProperty("votePlusMinusOnHover", false); setSettingsValueFromCSSProperty("observedTagsInRightSidebarSortAlphabetically", false); setSettingsValueFromCSSProperty("topNavHomeButtonClickRefreshOrRedirect", false); setSettingsValueFromCSSProperty("topNavMicroblogButtonClickRefreshOrRedirect", false); setSettingsValueFromCSSProperty("quickLinksEnable", false); // DODATKOWE PRZYCISKI NA GORNEJ BELCE setSettingsValueFromCSSProperty("topNavNightSwitchButton", true); setSettingsValueFromCSSProperty("topNavMyWykopButton", false); setSettingsValueFromCSSProperty("topNavMicroblogButton", false); setSettingsValueFromCSSProperty("topNavMessagesButton", false); setSettingsValueFromCSSProperty("topNavProfileButton", false); setSettingsValueFromCSSProperty("topNavNotificationsButton", false); // DODATKOWE PRZYCISKI NA BELCE MOBILNEJ setSettingsValueFromCSSProperty("mobileNavBarHide", false); if (settings.mobileNavBarHide == false) { setSettingsValueFromCSSProperty("mobileNavBarMyWykopButton", false); setSettingsValueFromCSSProperty("mobileNavBarMessagesButton", false); setSettingsValueFromCSSProperty("mobileNavBarProfileButton", false); setSettingsValueFromCSSProperty("mobileNavBarNotificationsButton", false); } // default numbers settings.observedTagsInRightSidebarUpdateInterval = 12; if (wykopxSettings.getPropertyValue("--observedTagsInRightSidebarUpdateInterval")) settings.observedTagsInRightSidebarUpdateInterval = parseFloat(wykopxSettings.getPropertyValue("--observedTagsInRightSidebarUpdateInterval")); // number // variables from Wykop X Style // TODO stare Wykop X Style "true" settings.wxsDownloadImageButton = (wykopxSettings.getPropertyValue("--wxsDownloadImageButton").trim() == `"true"`); // boolean, default off settings.topNavHamburgerHoverMinimize = (wykopxSettings.getPropertyValue("--topNavHamburgerHoverMinimize").trim() == `"true"`); // boolean settings.tagHeaderEditable = (wykopxSettings.getPropertyValue("--tagHeaderEditable").trim() == `"true"`); // boolean settings.linksAnalyzerEnable = (wykopxSettings.getPropertyValue("--linksAnalyzerEnable").trim() == `"true"`); // boolean settings.fixCaseSensitiveTagsRedirection = (wykopxSettings.getPropertyValue("--fixCaseSensitiveTagsRedirection").trim() == `"true"`); // boolean settings.categoryRedirectToMicroblogButtonEnable = (wykopxSettings.getPropertyValue("--categoryRedirectToMicroblogButtonEnable").trim() == `"true"`); // boolean settings.homepagePinnedEntriesHideBelowLimit = parseFloat(wykopxSettings.getPropertyValue("--homepagePinnedEntriesHideBelowLimit")); // number // boolean — domyslnie WŁĄCZONE bez Wykop X Style setSettingsValueFromCSSProperty("hitsInTopNavJS"); setSettingsValueFromCSSProperty("myWykopInTopNavJS"); setSettingsValueFromCSSProperty("favoritesInTopNavJS"); setSettingsValueFromCSSProperty("addNewLinkInTopNavJS"); setSettingsValueFromCSSProperty("addNewEntryInTopNavJS"); setSettingsValueFromCSSProperty("disableNewLinkEditorPastedTextLimit"); // strings setSettingsValueFromCSSProperty("linksAnalyzerSortBy", "domyslnie", true); setSettingsValueFromCSSProperty("topNavLogoClick", "glowna", true); setSettingsValueFromCSSProperty("editorSendHotkey", "ctrl_enter", true); // "domyslnie", "enter", "ctrl_enter", "ctrl_s" if (settings.editorSendHotkey != "domyslnie") setSettingsValueFromCSSProperty("editorSendHotkeyShowOnSendButton"); settings.categoryRedirectToMicroblogButtonFilter = wykopxSettings.getPropertyValue("--categoryRedirectToMicroblogButtonFilter").replaceAll("_", "/").replaceAll(" ", ""); /* mouseClickOpensImageInNewTab 💻❎🐁 Otwórz obrazek w nowej karcie kliknięciem "nie_otwieraj"-domyslnie "lewy_przycisk_myszy""srodkowy_przycisk_myszy" "prawy_przycisk_myszy" */ settings.mouseClickOpensImageInNewTab = wykopxSettings.getPropertyValue("--mouseClickOpensImageInNewTab") ? wykopxSettings.getPropertyValue("--mouseClickOpensImageInNewTab").replaceAll(" ", "") : "srodkowy_przycisk_myszy"; let localStorageObserved = localforage.createInstance({ driver: localforage.LOCALSTORAGE, name: "wykopx", storeName: "observed", }); const topNavHeaderRightElement = document.querySelector('header.header > .right > nav > ul'); if (dev) consoleX("Settings: ", 1); if (dev) console.log(settings); // przenoszenie na tagi: wykop.pl/#heheszki // i na profile użytkownikow: wykop.pl/@m__b // wyszukiwanie wpisów danej osoby w konkretnym tagu wykop.pl/@m__b/#internet albo wykop.pl/#internet/@m__b/ let currentPageURL = undefined; let pageType = ""; let pageSubtype = ""; let pageObjects = []; // ["znaleziska", "wpisy", "komentarze"] let currentPageTotalVotesUpCount = 0; let hash = new URL(document.URL).hash; let pathname = new URL(document.URL).pathname; let pathnameArray = pathname.split("/"); // ['', 'wpis', '74111643', 'dobranoc-panstwu'] ['', 'wykopalisko'] ['', 'link', '7303053', 'braun-gasi-chanuke-gasnica-mem'] isURLChanged(); newPageURL(); // setInterval(() => // { // if (isURLChanged()) newPageURL() // }, 5000); function isURLChanged() { const newURL = window.location.href; consoleX(`isURLChanged() -> ${newURL}`, 1); //const newURL2 = document.URL; if (newURL != currentPageURL) { consoleX(`isURLChanged() -> URL Changed from ${currentPageURL} to ${newURL}`) currentPageURL = newURL; return true; } else return false; } function newPageURL() { consoleX("newPageURL()", 1); hash = new URL(document.URL).hash; pathname = new URL(document.URL).pathname; pathnameArray = pathname.split("/"); consoleX(`newPageURL() -> document.URL: ${document.URL} hash: ${hash}, pathname: ${pathname}, pathnameArray: `, 1) if (dev) console.log(pathnameArray) currentPageTotalVotesUpCount = 0; if (pathnameArray[1] == "" || pathnameArray[1] == "aktywne" || pathnameArray[1] == "najnowsze" || pathnameArray[1] == "strona") { pageType = "glowna"; pageSubtype = "glowna"; pageObjects = ["wpisy", "znaleziska"]; if (pathnameArray[2] && pathnameArray[2] != "strona") { pageSubtype = pathnameArray[2]; // "aktywne", "najnowsze" } } else if (pathnameArray[1] == "wykopalisko") { pageType = "wykopalisko"; pageSubtype = "wykopalisko"; pageObjects = ["znaleziska"]; if (pathnameArray[2] && pathnameArray[2] != "strona") { pageSubtype = pathnameArray[2]; // "najnowszego", "aktywne", "wykopywane", "komentowane" } } else if (pathnameArray[1] == "ludzie") // profil jakiegoś użytkownika wykop.pl/ludzie/NadiaFrance { pageType = "profil"; pageSubtype = "profil"; pageObjects = ["znaleziska", "wpisy", "komentarze"]; } else if (pathnameArray[1] == "link") { pageType = "znalezisko"; pageSubtype = "znalezisko"; pageObjects = ["komentarze"]; } else if (pathnameArray[1] == "wpis") { pageType = "wpis"; pageSubtype = "wpis"; pageObjects = ["komentarze"]; } else if (pathnameArray[1] == "mikroblog") { pageType = "mikroblog"; pageSubtype = "mikroblog"; pageObjects = ["wpisy", "komentarze"]; } else if (pathnameArray[1] == "tag") { pageType = "tag"; pageSubtype = pathnameArray[2]; // nazwatagu pageObjects = ["znaleziska", "wpisy", "komentarze"]; } consoleX(`Typ strony: ${pageType} ${pageType != pageSubtype ? pageSubtype : ""}`, 1) // if(dev) console.log(`pageObjects:`, pageObjects) } function removeAllDataWXSAttributes() { consoleX(`removeAllDataWXSAttributes()`, 1); document.querySelectorAll(`section[data-wxs_username]`).forEach((el) => { removeWXSAttributes(el) }); } function removeWXSAttributes(sectionObjectElement) { if (dev) console.log(`removeWXSAttributes() from id: ${sectionObjectElement.__vue__.item.id}`, + sectionObjectElement); sectionObjectElement.removeAttribute('style'); // custom css properties removed Object.keys(sectionObjectElement.dataset).forEach(dataKey => { if (dataKey.startsWith('wxs_')) { delete sectionObjectElement.dataset[dataKey]; } }); } (async () => { let at, tag; if (settings.fixCaseSensitiveTagsRedirection) { /* fixing case sensitive tags https://github.com/wykopx/WykopX/issues/21 */ if (pathnameArray[1] == "tag" && /[A-Z]/.test(pathnameArray[2])) { consoleX(`Błędny tag "${pathnameArray[2]}"`); pathnameArray[2] = pathnameArray[2].toLowerCase(); let newPathname = "https://wykop.pl" + pathnameArray.join("/"); consoleX(`Otwieram poprawny adres: ${newPathname}`); window.location.replace(newPathname); } } let excludedPaths = ["szukaj", "wpis", "link", "artykul", "k", "wykopalisko", "mikroblog", "osberwowane", "hity", "powiadomienia", "ustawienia"]; // # przekierowanie URL http://wykop.pl/#heheszki albo http://wykop.pl/#wykop/@m__b ale nie https://wykop.pl/wpis/213123/tresc#123456 if (!excludedPaths.includes(pathnameArray[1]) && hash.length > 0) { let tagWithHash = hash.split("/")[0]; let tagWithoutHash = tagWithHash.slice(1); let tagNumber = Number.parseInt(tagWithoutHash); if (tagWithoutHash.length > 1 && (tagNumber == "NaN" || tagWithoutHash.length < 9) && tagWithoutHash != "dodaj") { if ((tag = getTagFromUrl(tagWithHash))) { } if ((at = getUserFromUrl(hash))) { } } } // @ przekierowanie URL http://wykop.pl/@NadiaFrance albo http://wykop.pl/#wykop/@m__b if (!excludedPaths.includes(pathnameArray[1]) && pathname.length > 2) { if (at || (at = getUserFromUrl(pathname))) { } } if (at || tag) smartRedirectBasedOnUserAndTag(at, tag); })(); function redirectToSearchUserEntriesInTag(user, tag) { window.location.replace(`https://wykop.pl/szukaj/wszystkie/@${user}?tags=${tag}`); } function redirectToTag(tag) { window.location.replace(`https://go.wykopx.pl/#${tag}`); } function redirectToUser(user) { window.location.replace(`https://wykopx.pl/@${user}`); } function smartRedirectBasedOnUserAndTag(user, tag) { consoleX(`smartRedirectBasedOnUserAndTag(user @${user}, tag #${tag})`, 1); if (tag && user) redirectToSearchUserEntriesInTag(user, tag) else if (tag) redirectToTag(tag) else if (user) redirectToUser(user) } // returns 'tag' from /#tag in string function getTagFromUrl(url, splitSeparator = "/", tagSymbol = "#") { consoleX(`getTagFromUrl(url: ${url}, splitSeparator: #${splitSeparator}), tagSymbol: ${tagSymbol}`, 1); let tagArray = url.split(splitSeparator); for (let element of tagArray) { if (element.charAt(0) == "#" || element.charAt(0) == tagSymbol) { element = element.slice(1); return element; } else if (tagSymbol == "" && (/^[0-9a-zA-Z]/i.test(element.charAt(0)))) { return element; } else { continue; } } return false; } function getUserFromUrl(url, splitSeparator = "/", userSymbol = "@") { consoleX(`getUserFromUrl(url: ${url}, splitSeparator: #${splitSeparator}), userSymbol: ${userSymbol}`, 1); let atArray = url.split(splitSeparator); for (let element of atArray) { if (element.charAt(0) == userSymbol) { return element.slice(1); } } return false; } let consoleData = { mirkoukrywacz_hidden: { count: 0, text: "Ukrytych", title: "Mirkoukrywacz ukryte", }, mirkoukrywacz_minimized: { count: 0, text: "Zwiniętych", title: "Mirkoukrywacz zwinął", }, annoyances: { count: 0, text: "Uciążliwych obiektów", title: "Annoyances title", ads: { count: 0, text: "Usuniętych reklam", }, iframe: { count: 0, text: "ads iframes", title: "Annoyances iframes with ads", }, script: { count: 0, text: "ads scripts", title: "Annoyances scripts", }, other: { count: 0, text: "inne", title: "Annoyances other", }, div: { count: 0, text: "inne", title: "Annoyances div", }, }, notatkowator: { count: 0, text: "Dodanych Notatek", title: "Notatki do użytkowników", }, } function buildConsole(jNodeHeaderStreamTop = null) { if (!dev) return; consoleX("buildConsole()", 1) let headerStreamTopElement; if (!jNodeHeaderStreamTop) { headerStreamTopElement = document.getElementById("main.main > section > div.content section.stream > header.stream-top"); } else { headerStreamTopElement = jNodeHeaderStreamTop; } if (headerStreamTopElement) { //return; const wxs_console = document.getElementById("wxs_console"); if (!wxs_console) { const wxs_console_container = document.createElement("aside"); // <aside id="wxs_console_container"> wxs_console_container.id = "wxs_console_container"; wxs_console_container.innerHTML = `<header><span>𝗪𝘆𝗸𝗼𝗽 𝗫</span> <button>▼</button></header>`; wxs_console_container.title = `𝗪𝘆𝗸𝗼𝗽 𝗫`; headerStreamTopElement.appendChild(wxs_console_container); let wxs_console_section = document.createElement("section"); wxs_console_section.id = "wxs_console"; headerStreamTopElement.insertAdjacentElement('afterend', wxs_console_section); } refreshConsole(); } } let wxs_console; function refreshConsole() { consoleX("refresh console()", 1) return; // temp if (!wxs_console) wxs_console = document.getElementById("wxs_console"); if (wxs_console) { wxs_console.innerHTML = ""; for (let field in consoleData) { if (consoleData[field].count > 0) { let div = document.createElement("div"); div.classList.add(`wcs_console_${field}`) div.title = consoleData[field].title; div.innerHTML = `<span class="wxs_console_count"> ${consoleData[field].count} </span> <span class="wxs_console_text"> ${consoleData[field].text} </span>`; wxs_console.appendChild(div); } } for (let field in consoleData.annoyances) { if (consoleData.annoyances[field].count > 0) { let div = document.createElement("div"); div.title = consoleData.annoyances[field].title; div.classList.add(`wcs_console_${field}`) div.innerHTML = `<span class="wxs_console_count"> ${consoleData.annoyances[field].count} </span> <span class="wxs_console_text"> ${consoleData.annoyances[field].text} </span>`; wxs_console.appendChild(div); } } } } /* LENNY FACE let lennyArray = [ `( ͡° ͜ʖ ͡°)`, `( ͡° ʖ̯ ͡°)`, `( ͡º ͜ʖ͡º)`, `( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)`, `(⌐ ͡■ ͜ʖ ͡■)`, `(╥﹏╥)`, `(╯︵╰,)`, `(ʘ‿ʘ)`, `(。◕‿‿◕。)`, `ᕙ(⇀‸↼‶)ᕗ`, `ᕦ(òóˇ)ᕤ`, `(✌ ゚ ∀ ゚)☞`, `ʕ•ᴥ•ʔ`, `ᶘᵒᴥᵒᶅ`, `(⌒(oo)⌒)` ] } */ // <body data-wxs_category_menu_minimized="false"> if (settings.topNavHamburgerHoverMinimize) { waitForKeyElements("body > section > header.header > div.left > button", topNavHamburgerHoverMinimize, true); } function topNavHamburgerHoverMinimize(hamburgerButton) { consoleX(`topNavHamburgerHoverMinimize()`, 1); body.dataset.wxs_category_menu_minimized = 'true'; hamburgerButton.addEventListener("mouseover", () => { if (body.dataset.wxs_category_menu_minimized === 'true') { //delete body.dataset.wxs_category_menu_minimized; body.dataset.wxs_category_menu_minimized = 'false'; } else { body.dataset.wxs_category_menu_minimized = 'true'; } }); } /* QUICK SEARCH */ /* Edytuj nagłówek tagu, aby przejść na inny tag */ function tagHeaderEditableWatcher() { consoleX(`tagHeaderEditableWatcher()`, 1); if (settings.tagHeaderEditable) { waitForKeyElements(".main-content .main aside.tag-top .content header h1", tagHeaderEditable, false); } } function tagHeaderEditable(tagHeaderEditable) { consoleX(`tagHeaderEditable()`, 1); let originalValue = tagHeaderEditable.textContent.toLowerCase(); tagHeaderEditable.className = "wykopx_quick_search"; tagHeaderEditable.setAttribute("data-wykopx-original-value", originalValue); //todo dataset tagHeaderEditable.setAttribute("tabindex", 1); tagHeaderEditable.setAttribute("spellcheck", false); tagHeaderEditable.contentEditable = "true"; tagHeaderEditable.role = "textbox"; let wykopx_quick_search = document.querySelector(".wykopx_quick_search"); if (originalValue != "") { wykopx_quick_search.value = originalValue; wykopx_quick_search.dispatchEvent(new Event('change')); wykopx_quick_search.setAttribute("data-wykopx-original-value", originalValue); } wykopx_quick_search.addEventListener("blur", eventInsertedTagOrUser); wykopx_quick_search.addEventListener("keydown", eventInsertedTagOrUser); } waitForKeyElements("input.wykopx_quick_search", wykopx_quick_search, false); function wykopx_quick_search(wykopxQuickSearch) { consoleX(`wykopx_quick_search()`, 1); wykopxQuickSearch.addEventListener("blur", eventInsertedTagOrUser); wykopxQuickSearch.addEventListener("keydown", eventInsertedTagOrUser); } function eventInsertedTagOrUser(e) { consoleX("eventInsertedTagOrUser(e)", 1); if (e.type === "blur" || (e.type === "keydown" && e.keyCode == 13)) // out of focus or enter { consoleX("eventInsertedTagOrUser() -- event blur || eydown .wykopx_quick_search", 1); e.preventDefault(); if (dev) console.log("Type of the element: " + e.target.tagName); let editedValue; if (e.target.tagName == "INPUT") editedValue = e.target.value.toLowerCase(); else if (e.target.tagName == "H1") editedValue = e.target.textContent.toLowerCase(); if (editedValue != e.target.getAttribute("data-wykopx-original-value")) { smartRedirectBasedOnUserAndTag(getUserFromUrl(editedValue, " "), getTagFromUrl(editedValue, " ", "")); } } } /* RIGHT SIDEBAR — DODAJ LISTE OBSERWOWANYCH TAGÓW */ function addObservedTagsToRightSidebar() { consoleX("addObservedTagsToRightSidebar()", 1) let fetchedValuesArray = []; if (settings.observedTagsInRightSidebarEnable) { // consoleX("addObservedTagsToRightSidebar()", 1) checkLocalForageupdatedDate(localStorageObserved, getObservedTags, settings.observedTagsInRightSidebarUpdateInterval * 3600); // VUE SENSITIVE /* data-v-d5500d78 data-v-38d5cf90 data-v-7befdafc */ let section_html = ` <section class="wykopx_your_observed_tags custom-sidebar tags-sidebar" data-v-d5500d78 data-v-38d5cf90 data-v-0a0cb29b> <header class="" data-v-d5500d78> <h4 data-v-d5500d78>Przejdź na #tag lub @profil</h4> </header> <div class="content wykopx_quick_search_container" data-v-d5500d78> <input type="text" class="wykopx_quick_search" placeholder="#wykopx" title="${promoString}" /> </div> <header data-v-d5500d78> <h4 data-v-d5500d78>Twoje obserwowane tagi</h4> </header> <div class="content" data-v-d5500d78> <section class="tags" data-v-7befdafc data-v-d5500d78> <ul data-v-7befdafc data-v-d5500d78> `; localStorageObserved.getItem('observedTags').then(function (tagsArray) { fetchedValuesArray = tagsArray; if (settings.observedTagsInRightSidebarSortAlphabetically) { fetchedValuesArray.sort(); // sortowanie alfabetyczne tagów } fetchedValuesArray.forEach(function (tag) { section_html += ` <li data-v-7befdafc data-v-d5500d78 title="Przejdź na tag #${tag} ${promoString}"> <span data-v-7befdafc data-v-d5500d78>#</span><a data-v-7befdafc href="https://go.wykopx.pl/#${tag}" class="hybrid" data-v-d5500d78>${tag}</a> </li>`; }); section_html += `</ul></section></div></section>`; document.querySelector(`section.sidebar`).insertAdjacentHTML('beforeend', section_html); }).catch(function (err) { }); } } async function checkLocalForageupdatedDate(wykopxStorageName, updateStorageFunction, updateIntervalSeconds) { consoleX("checkLocalForageupdatedDate()", 1) try { let storageUpdatedDate = await wykopxStorageName.getItem("storageUpdatedDate"); if (storageUpdatedDate == null) { consoleX("Selected info wasn't downloaded. Updating now...", 1) updateStorageFunction(); } else { const date2 = dayjs(storageUpdatedDate) if (loadTime.diff(date2, "second") > parseFloat(updateIntervalSeconds)) { consoleX(`Update interval: ${loadTime.diff(date2, "second")}s > ${updateIntervalSeconds}s`, 1) updateStorageFunction(); } } } catch (err) { if (dev) console.log(err); } } async function getObservedTags() { consoleX(`getObservedTags()`, 1); const apiGetObservedTags = `https://wykop.pl/api/v3/profile/users/${loggedUser.username}/observed/tags`; consoleX(`async function getObservedTags(${loggedUser.username}`, 1); await fetch(apiGetObservedTags, { method: "GET", // or 'PUT' headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.token, }, }) .then((response) => response.json()) .then((responseJSON) => { if (dev) console.log("🟢🟢🟢responseJSON") if (dev) console.log(responseJSON) const responseJSONData = responseJSON.data; // data = [{name: 'wykopwnowymstylu'}, {name: 'wykop'}, {name: 'wykopx'}] const fetchedValuesArray = responseJSONData.map(function (item) { return item.name; }); localStorageObserved.setItem("storageUpdatedDate", loadTime) localStorageObserved.setItem("observedTags", fetchedValuesArray) return true; }); } async function POSTDATATOWYKOPX() { if (dev) console.log(" 🍌🍌🍌🍌 POSTDATATOWYKOPX() ") await getSettingsList("blacklists", "tags"); await getSettingsList("blacklists", "domains"); await getSettingsList("blacklists", "users"); await getSettingsList("observed", "tags"); let settings_list_observed_tags = await localStorageObserved.getItem("settings_list_observed_tags"); let settings_list_blacklists_domains = await localStorageObserved.getItem("settings_list_blacklists_domains"); let settings_list_blacklists_users = await localStorageObserved.getItem("settings_list_blacklists_users"); let settings_list_blacklists_tags = await localStorageObserved.getItem("settings_list_blacklists_tags"); // await getSettingsList("observed", "users", "following"); // await getSettingsList("observed", "users", "followers"); // let settings_list_observed_users_followers = await localStorageObserved.getItem("settings_list_observed_users_followers"); // let settings_list_observed_users_following = await localStorageObserved.getItem("settings_list_observed_users_following"); let dataPOST = {}; // let settings_list_SHA256 = await localStorageObserved.getItem("settings_list_SHA256"); let settings_list_SHA256 = null; if (settings_list_blacklists_tags?.length > 0) { dataPOST.settings_list_blacklists_tags = settings_list_blacklists_tags; dataPOST.sha256 = await SHA256(loggedUser.username + settings_list_blacklists_tags[settings_list_blacklists_tags.length - 1].created_at + settings_list_blacklists_tags[settings_list_blacklists_tags.length - 1].name); // WykopX2023-01-01 23:59:59famemma } if (settings_list_observed_tags?.length > 0) { dataPOST.settings_list_observed_tags = settings_list_observed_tags; if (settings_list_SHA256 == null) dataPOST.sha256 = await SHA256(loggedUser.username + settings_list_observed_tags[settings_list_observed_tags.length - 1].created_at + settings_list_observed_tags[settings_list_observed_tags.length - 1].name); } if (settings_list_blacklists_domains?.length > 0) { dataPOST.settings_list_blacklists_domains = settings_list_blacklists_domains; if (settings_list_SHA256 == null) dataPOST.sha256 = await SHA256(loggedUser.username + settings_list_blacklists_domains[settings_list_blacklists_domains.length - 1].created_at + settings_list_blacklists_domains[settings_list_blacklists_domains.length - 1].domain); } if (settings_list_blacklists_users?.length > 0) { dataPOST.settings_list_blacklists_users = settings_list_blacklists_users; if (settings_list_SHA256 == null) dataPOST.sha256 = await SHA256(loggedUser.username + settings_list_blacklists_users[settings_list_blacklists_users.length - 1].created_at + settings_list_blacklists_users[settings_list_blacklists_users.length - 1].username); } if (Object.keys(dataPOST).length >= 2) { if (dev) console.log(" 🍌🍌🍌🍌 Sending this data to api.wykopx.pl: ", dataPOST) // TODO // fetch('https://api.wykopx.pl/api/v3/', { // method: 'POST', // headers: { // 'Content-Type': 'application/json' // }, // body: JSON.stringify(dataPOST) // }) // .then(response => response.text()) // .then(data => // { // localStorageObserved.setItem(`settings_list_update`, loadTime); // if(dev) console.log(" 🍌🍌🍌🍌 response from api.wykopx.pl: ") // if(dev) console.log(data) // }) // .catch(error => console.error('Error:', error)); } } /* getSettingsList("blacklists", "tags"); getSettingsList("blacklists", "domains"); getSettingsList("blacklists", "users"); getSettingsList("observed", "tags"); getSettingsList("observed", "users", "following"); getSettingsList("observed", "users", "followers"); */ let lastBlacklistTagCreatedAt = null; let lastBlacklistTagCreatedAtSHA256 = null; async function getSettingsList(blacklistsOrObserved, type, subtype) { consoleX(`getSettingsList(blacklistsOrObserved: ${blacklistsOrObserved}, type: ${type}, subtype: ${subtype})`, 1); let page = 1; let totalFetched = 0; let totalRecords = null; let fetchedValuesArray = []; while (totalRecords === null || totalFetched < totalRecords) { let apiGetPaginatedURL = null; if (blacklistsOrObserved == "blacklists") apiGetPaginatedURL = `https://wykop.pl/api/v3/settings/blacklists/${type}?page=${page}`; else if (blacklistsOrObserved == "observed") { if (type == "tags") apiGetPaginatedURL = `https://wykop.pl/api/v3/profile/users/${loggedUser.username}/observed/${type}?page=${page}`; else if (type == "users" && subtype) apiGetPaginatedURL = `https://wykop.pl/api/v3/profile/users/${loggedUser.username}/observed/${type}/${subtype}?page=${page}` } const response = await fetch(apiGetPaginatedURL, { method: "GET", headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.token, }, }); const responseJSON = await response.json(); const responseJSONData = responseJSON.data; // if (blacklistsOrObserved == "blacklists" && type == "tags") // { // lastBlacklistTagCreatedAt = loggedUser.username + responseJSONData[responseJSONData.length - 1].created_at + responseJSONData[responseJSONData.length - 1].name; // WykopX2023-01-01 23:59:59famemma // lastBlacklistTagCreatedAtSHA256 = await SHA256(lastBlacklistTagCreatedAt); // localStorageObserved.setItem(`settings_list_SHA256`, lastBlacklistTagCreatedAtSHA256); // } let valueName = "name"; if (type == "users") valueName = "username" if (type == "domains") valueName = "domain" fetchedValuesArray = fetchedValuesArray.concat(responseJSONData.map(item => item[valueName])); // data = [{ name: 'wykopwnowymstylu' }, { name: 'wykop' }, { name: 'wykopx' }] totalFetched += responseJSONData.length; totalRecords = responseJSON.pagination.total; page++; } if (dev) console.log(`🔻fetchedValuesArray ${blacklistsOrObserved}/${type} FINISHED`) if (dev) console.log(fetchedValuesArray) // localforage localStorageObserved.setItem(`settings_list_${blacklistsOrObserved}_${type}${subtype ? "_" + subtype : ""}`, fetchedValuesArray); // zapisuje jako Array: ["tag1", "tag2", "tag3"] // localstorage //localStorage.setItem(`settings_list_${blacklistsOrObserved}_${type}${subtype ? "_" + subtype : ""}`, JSON.stringify(fetchedValuesArray)); // zapisuje jako Array: ["tag1", "tag2", "tag3"] //localStorage.setItem("blacklisted_tags", fetchedValuesArray); // zapisuje jako string: tag1,tag2,tag3 return true; } function switchChanged(PointerEvent, cssFilterName) { consoleX(`switchChanged(cssFilterName: ${cssFilterName})`, 1); /* this -> clicked element == event.target PointerEvent — even object */ //body.dataset[cssFilterName] = this.value; // <body data-wxs_switch_nsfw="1"] if (this.value == 0) body.dataset[cssFilterName] = "OFF_0"; // <body data-wxs_switch_nsfw="OFF"] else if (this.value > 0) body.dataset[cssFilterName] = `ON_PLUS_${this.value}`; // <body data-wxs_switch_nsfw="ON_PLUS_1"] // "ON_PLUS_1", "ON_PLUS_2", "ON_PLUS_3" else body.dataset[cssFilterName] = `ON_MINUS_${Math.abs(this.value)}`; // <body data-wxs_switch_nsfw="ON_MINUS_1"] <body data-wxs_switch_nsfw="-1"] if (cssFilterName == "wxs_switch_entries_photo_viewer") { const switchImagesInput = document.getElementById("switchImages"); if (this.value > 0 && switchImagesInput.value != 1) { switchImagesInput.value = 1; switchChanged.call(switchImagesInput, null, "wxs_switch_entries_images") } else if (this.value == 0 && switchImagesInput.value != 0) { switchImagesInput.value = 0; switchChanged.call(switchImagesInput, null, "wxs_switch_entries_images") } } if (cssFilterName == "wxs_switch_entries_images" && this.value <= 0) { const switchPhotoViewerInput = document.getElementById("switchPhotoViewer"); if (switchPhotoViewerInput.value != 0) { switchPhotoViewerInput.value = 0; switchChanged.call(switchPhotoViewerInput, null, "wxs_switch_entries_photo_viewer") } } } if (settings.wxsSwitchesEnable) { document.addEventListener("input", (event) => { if (settings.wxsSwitchNSFW && event.target.closest("input#switchNSFW")) switchChanged.call(event.target, event, "wxs_switch_entries_nsfw"); else if (settings.wxsSwitchAdult && event.target.closest("input#switchAdult")) switchChanged.call(event.target, event, "wxs_switch_entries_adult"); else if (settings.wxsSwitchPhotoViewer && event.target.closest("input#switchPhotoViewer")) switchChanged.call(event.target, event, "wxs_switch_entries_photo_viewer"); else if (settings.wxsSwitchImages && event.target.closest("input#switchImages")) switchChanged.call(event.target, event, "wxs_switch_entries_images"); else if (settings.wxsSwitchYouTube && event.target.closest("input#switchYouTube")) switchChanged.call(event.target, event, "wxs_switch_entries_youtube"); else if (settings.wxsSwitchTags && event.target.closest("input#switchTags")) switchChanged.call(event.target, event, "wxs_switch_entries_tags"); else if (settings.wxsSwitchByUserColor && event.target.closest("input#switchByUserColor")) switchChanged.call(event.target, event, "wxs_switch_by_user_color"); else if (settings.wxsSwitchByUserGender && event.target.closest("input#switchByUserGender")) switchChanged.call(event.target, event, "wxs_switch_by_user_gender"); }); } function addSwitchButtons() { consoleX("addSwitchButtons()", 1) let buttonsWrapper = document.createElement("section"); buttonsWrapper.classList.add("wxs_switches_container"); buttonsWrapper.innerHTML = `<datalist id="markers"> <option value="-1" label="OFF"></option> <option value="0" label=""></option> <option value="1" label="ON">ON</option> </datalist>`; if (settings.wxsSwitchNSFW) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchNSFW showOnLinksStream showOnEntriesStream showOnEntryPage"> <div> <label class="label_ON_MINUS_1" title=" Wpisy z tagiem #nsfw są ukryte">Bez #nsfw</label> <label class="label_OFF_0">#nsfw</label> <label class="label_ON_PLUS_1" title=" Wyświetlane są tylko wpisy z tagiem #nsfw">Tylko #nsfw</label> </div> <div> <input type="range" id="switchNSFW" list="markers" name="switchNSFW" min="-1" max="1" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchAdult) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchAdult showOnLinksStream showOnEntriesStream showOnEntryPage"> <div> <label class="label_ON_MINUS_1" title=" Treści oznaczne jako materiały 18+ są ukryte">Bez 18+</label> <label class="label_OFF_0">18+</label> <label class="label_ON_PLUS_1" title=" Wyświetlane są tylko treści oznaczone jako 18+ ">Tylko 18+</label> </div> <div> <input type="range" id="switchAdult" list="markers" name="switchAdult" min="-1" max="1" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchByUserColor) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchByUserColor showOnLinksStream showOnEntriesStream showOnLinkPage showOnEntriesStream showOnEntryPage"> <div> <label class="label_OFF_0">Kolory</label> <label class="label_ON_PLUS_1">Bez zielonek</label> <label class="label_ON_PLUS_2">Tylko bordo</label> </div> <div> <input type="range" id="switchByUserColor" list="markers" name="switchByUserColor" min="0" max="2" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchByUserGender) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchByUserGender showOnLinkPage showOnEntriesStream showOnEntryPage"> <div> <label class="label_ON_MINUS_1" title="">Bez różowych</label> <label class="label_OFF_0">Różowe</label> <label class="label_ON_PLUS_1" title="">Tylko różowe </label> </div> <div> <input type="range" id="switchByUserGender" list="markers" name="switchByUserGender" min="-1" max="1" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchYouTube) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchYouTube showOnLinksStream showOnEntriesStream showOnEntriesStream showOnEntryPage"> <div> <label class="label_ON_MINUS_1" title=" Treści bez filmików YouTube">Bez YT</label> <label class="label_OFF_0">YouTube</label> <label class="label_ON_PLUS_1" title=" Tylko YouTube ">Tylko YT</label> </div> <div> <input type="range" id="switchYouTube" list="markers" name="switchYouTube" min="-1" max="1" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchTags) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchTags showOnEntriesStream"> <div> <label class="label_ON_MINUS_1" title=" Wyświetlane są tylko wpisy nie zawierające w treści żadnych #tagów.\n Wpisy zawierające jakiekolwiek #tagi są ukryte">Tylko nocna 🌙</label> <label class="label_OFF_0">#tagi</label> <label class="label_ON_PLUS_1" title=" Wyświetlane są tylko wpisy zawierające minimum jeden #tag.\n Wpisy bez żadnego #tagu są ukryte.">Tylko #tagi #️⃣</label> </div> <div> <input type="range" id="switchTags" list="markers" name="switchTags" min="-1" max="1" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchImages) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchImages showOnLinkPage showOnEntriesStream showOnEntryPage"> <div> <label class="label_ON_MINUS_2" title=" Pokazuje tylko wpisy, które nie mają obrazków. Ukrywa wszystkie wpisy z obrazkami lub GIF-ami">Bez obr. 🚫</label> <label class="label_ON_MINUS_1" title=" Ukrywa obrazki we wpisach i komentarzach pozostawiając tekst">Ukryj obr.</label> <label class="label_OFF_0">Obrazki</label> <label class="label_ON_PLUS_1" title=" Pokazuje tylko wpisy, które zawierają obrazki">Tylko obr.</label> </div> <div> <input type="range" id="switchImages" list="markers" name="switchImages" min="-2" max="1" step="1" value="0" /> </div> </div>`; } if (settings.wxsSwitchPhotoViewer) { buttonsWrapper.innerHTML += `<div class="wxs_switch switchPhotoViewer showOnEntriesStream"> <div> <label class="label_OFF_0">PhotoViewer</label> <label class="label_ON_PLUS_1">PhotoViewer ✔</label> <label class="label_ON_PLUS_2">PhotoViewer ✅</label> </div> <div> <input type="range" id="switchPhotoViewer" list="markers" name="switchPhotoViewer" min="0" max="2" step="1" value="0" /> </div> </div>`; } const nav = document.querySelector("body header div.right nav"); nav.parentNode.insertBefore(buttonsWrapper, nav); } // ACTION BOX BUTTONS document.addEventListener("click", (event) => { //if (event.target.closest("button.wxsDownVote")) downVoteLink.call(event.target, event); // zakopywanie znaleziska na głównej if (settings.actionBoxEnable) { if (settings.filterUserComments || settings.filterUserReplies) { if (event.target.closest("button.wxs_filter_off")) filterUserOff.call(event.target, event, event.target.closest("button.wxs_filter_off")); if (settings.filterUserComments) { if (event.target.closest("button.wxs_filter_on_user")) filterUserComments.call(event.target, event, event.target.closest("button.wxs_filter_on_user"), "userComments"); } if (settings.filterUserReplies) { if (event.target.closest("button.wxs_filter_on_replies")) filterUserComments.call(event.target, event, event.target.closest("button.wxs_filter_on_replies"), "userReplies"); } } if (settings.mirkoukrywaczEnable) { if (event.target.closest("button.wxs_minimize")) minimizeThisEntry.call(event.target, event); if (event.target.closest("button.wxs_maximize")) maximizeThisEntry.call(event.target, event); if (event.target.closest("button.wxs_hide")) hideThisEntry.call(event.target, event, event.target.closest("button.wxs_hide")); // > (this, arg1, arg2) if (event.target.closest(".wykopx_mirkoukrywacz_unhide")) maximizeThisEntry.call(event.target, event, event.target.dataset.wxs_object_id); } } if (settings.mirkoukrywaczEnable) { if (event.target.closest("#wxs_mirkoukrywacz_delete_all")) mirkoukrywaczRemoveTooOld.call(event.target, event, { days: 0, blockingType: "all", resource: "all", }); if (event.target.closest("#wxs_mirkoukrywacz_delete_older_than_7_days")) { mirkoukrywaczRemoveTooOld.call(event.target, event, { days: document.getElementById("wxs_mirkoukrywacz_delete_timespan").value, blockingType: document.getElementById("wxs_mirkoukrywacz_delete_block_type").value, resource: document.getElementById("wxs_mirkoukrywacz_delete_resource").value, }); } } }); /* ---------------- MIRKOUKRYWACZ MENU ----------------- */ function saveThisEntryContent(PointerEvent) { consoleX("saveThisEntryContent()", 1) let resource = "unknown"; let entry_stream = this?.closest(".stream"); if (entry_stream) { if (entry_stream.classList.contains("microblog")) resource = "entry"; else if (entry_stream.classList.contains("entry-comments")) resource = "entry"; else if (entry_stream.classList.contains("entry-subcomments")) resource = "entry-subcomments"; else if (entry_stream.classList.contains("link-comments")) resource = "link-comments"; let entry = this.closest(".entry"); let comment_id = entry.id.split("-")[1]; let username = entry.querySelector("a.username span").innerText; let text = entry.querySelector("div.content div.wrapper").innerText.replace(/\n/g, " "); let grandcomment_id = comment_id; /* id nad-komentarza */ if (resource == "entry-subcomments") { let entry_grandparent = entry.parentNode.closest(".entry"); grandcomment_id = entry_grandparent.id.split("-")[1]; } mirkoukrywaczBlockNewElement(entry.id, grandcomment_id, username, text, resource, "saved"); } } function filterUserOff(event, buttonElement) { consoleX(`filterUserOff()`, 1); if (body.dataset.wxs_filter) delete body.dataset.wxs_filter // <body data-wxs_filter> if (body.dataset.wxs_filter_style) delete body.dataset.wxs_filter_style if (body.dataset.wxs_filter_username) delete body.dataset.wxs_filter_username // TODO check -> document.getElementById('wxs_css_filter_user_comments')?.parentNode?.removeChild(styleElement); let wxs_css_style_filter_user_comments = head.querySelector("#wxs_css_filter_user_comments"); if (wxs_css_style_filter_user_comments) { wxs_css_style_filter_user_comments.remove(); } } function filterUserComments(event, buttonElement, filterType) { consoleX(`filterUserComments()`, 1); // filterUserComments // filterType => "userComments" / "userReplies" /* this -> clicked element == event.target event — PointerEvent object */ const css_id = "wxs_css_filter_user_comments"; const filterUsername = buttonElement.dataset.wxs_author_username; const filterUserGender = buttonElement.dataset.wxs_author_gender ? buttonElement.dataset.wxs_author_gender : "m"; let filterStyles = [ `border: 3px solid gray!important; opacity: 0.3!important; `, `filter: grayscale(1); `, `display: none!important; `, ] let filterStyleIndex = 0; let wxs_css_style_filter_user_comments = document.getElementById(css_id); if (wxs_css_style_filter_user_comments) // jest już nałożony jakiś filtr { if (body.dataset.wxs_filter == filterType && body.dataset.wxs_filter_username == filterUsername) // ten sam typ filtra i uzytkownik - zmiana stylu { let currentFilterStyleIndex = parseInt(body.dataset.wxs_filter_style); filterStyleIndex = currentFilterStyleIndex + 1; if (filterStyleIndex == filterStyles.length) { filterUserOff(); return false; } } else // zachowujemy ten sam styl bo zmienil sie typ filtra lub filtrowany uzytkownik { filterStyleIndex = parseInt(body.dataset.wxs_filter_style); } } body.dataset.wxs_filter_style = filterStyleIndex.toString() body.dataset.wxs_filter_username = filterUsername; let css = ""; if (filterType == "userComments") { body.dataset.wxs_filter = "userComments"; // <body data-wxs_filter="userComments"> css = `.wxs_menu_action_box > .wxs_filter_off { display: flex!important; } /* odstęp pomiędzy komentarzami */ div.comments > section.stream > div.content { display: flex; flex-direction: column; row-gap: 20px; padding: 20px; } /* odfiltrowane znaleziska */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .home-page, .observed-page, .profile-page, .tag-page, .hits-page, .upcoming-page) > section section.stream > div.content > section.link-block:has(article > div.content > section.info a.username[href="/ludzie/${filterUsername}"]) { border: 1px solid ${filterUserGender == "f" ? "var(--rozowyPasek1, rgba(192, 72, 167, 1))" : "var(--niebieskiPasek1, rgba(67, 131, 175, 1))"} !important; } /* strona wpisu - filtrowane komentarze */ body > section > div.main-content > main.main > section > div.content > section.entry-page > section.entry > section.entry-comments > div.content > section.entry.detailed > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]), /* strona streamu wpisów - wpisy filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]), /* strona streamu wpisów - komentarze filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]), /* strona znaleziska - komentarze i subkomentarze filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content section.entry:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]) { border: 1px solid ${filterUserGender == "f" ? "var(--rozowyPasek1, rgba(192, 72, 167, 1))" : "var(--niebieskiPasek1, rgba(67, 131, 175, 1))"} !important; } /* strony ze znaleziskami oprócz głównej - znaleziska autora, odfiltrowwanie znalezisk innych użytkowników */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .home-page, .observed-page, .profile-page, .tag-page, .hits-page, .upcoming-page) > section section.stream > div.content > section.link-block:not(:has(article > div.content > section.info a.username[href="/ludzie/${filterUsername}"])), /* strona główna - znaleziska autora, odfiltrowwanie znalezisk innych użytkowników a takze wpisow przypietych przez moderacje */ .pub-slot-wrapper:has(section.premium-pub.link-block), body > section > div.main-content > main.main > section > div.content > section.home-page > section section.stream > div.content > section:is(.link-block:not(:has(article > div.content > section.info a.username[href="/ludzie/${filterUsername}"])), .entry:not(:has(> article > header > div.right > div > div.tooltip-slot > span > a.username[href="/ludzie/${filterUsername}"]))), /* strona wpisu-ukrycie komentarzy nie-filtrowanych użytkowników */ body > section > div.main-content > main.main > section > div.content > section.entry-page > section.entry > section.entry-comments > div.content > section.entry.detailed > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:not(:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"])), /* strona streamu wpisów-ukrycie wpisów w ktorych nie ma wypowiedzi filtrowanego uzytkownika-ani wpis, ani komentarz*/ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry:not(:has(article > header > div.right a.username[href="/ludzie/${filterUsername}"])), /* strona streamu wpisów-komentarze pod wpisami na streamach które zawierają komentarz filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry:has(article > header > div.right a.username[href="/ludzie/${filterUsername}"]) > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:not(:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"])), /* strona streamu wpisów-komentarze pod wpisami na streamach które zawierają komentarz filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry:has(article > header > div.right a.username[href="/ludzie/${filterUsername}"]) > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:not(:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"])), /* strona znaleziska-komentarze bez subkomentarzy filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content > section.entry:not(:has(div.right > div a.username[href="/ludzie/${filterUsername}"])), /* strona znaleziska-subkomentarze nie-filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content > section.entry > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:not(:has(> article > header > div.right > div a.username[href="/ludzie/${filterUsername}"])) { ${filterStyles[filterStyleIndex]} }`; } else if (filterType == "userReplies") { body.dataset.wxs_filter = "userReplies"; // <body data-wxs_filter="userReplies"> css = `.wxs_menu_action_box > .wxs_filter_off { display: flex!important; } /* odstęp pomiędzy komentarzami */ div.comments > section.stream > div.content { display: flex; flex-direction: column; row-gap: 20px; padding: 20px; } /* WYRÓŻNIENIE KOMENTARZY FILTROWANEGO UŻYTKOWNIKA */ /* strona wpisu-filtrowane komentarze */ body > section > div.main-content > main.main > section > div.content > section.entry-page > section.entry > section.entry-comments > div.content > section.entry.detailed > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]), /* strona streamu wpisów-wpisy filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]), /* strona streamu wpisów-komentarze filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]), /* strona znaleziska-komentarze i subkomentarze filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content section.entry:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]) { border: 2px solid ${filterUserGender == "f" ? "var(--rozowyPasek1, rgba(192, 72, 167, 1))" : "var(--niebieskiPasek1, rgba(67, 131, 175, 1))"} !important; } /* WYRÓŻNIENIE ODPOWIEDZI Z OZNACZONYM FILTROWANYM UŻYTKOWNIKIEM */ /* strona wpisu - filtrowane komentarze */ body > section > div.main-content > main.main > section > div.content > section.entry-page > section.entry > section.entry-comments > div.content > section.entry.detailed > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:has(> article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > a[href="/ludzie/${filterUsername}"]), /* strona streamu wpisów-komentarze z oznaczonym wołaniem filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:has(> article > div.edit-wrapper > div.content > section.entry-content > div.wrapper a[href="/ludzie/${filterUsername}"]), /* strona znaleziska - komentarze i subkomentarze filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content section.entry:has(> article > header > div.right a.username[href="/ludzie/${filterUsername}"]) { border: 2px solid var(--nicknameOrange1, rgba(255, 89, 23, 1))!important; } /* wyróżnienie tagowanego w odpowiedzi */ section.entry.reply > article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > a[href="/ludzie/${filterUsername}"] { background-color: var(--whiteOpacity1); padding: 0px 5px 0px 5px; margin-right: 5px; border-bottom: 1px solid; font-weight: bolder!important; } /* UKRYCIE KOMENTARZY, KTÓRE NIE SĄ FILTROWANEGO UŻYTKOWNIKA ANI NIE WOŁAJĄ FILTROWANEGO UŻYTKOWNIKA */ /* strona wpisu - ukrycie komentarzy nie-filtrowanych użytkowników */ body > section > div.main-content > main.main > section > div.content > section.entry-page > section.entry > section.entry-comments > div.content > section.entry.detailed > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:not(:has(> article > header a.username[href="/ludzie/${filterUsername}"], > article > div.edit-wrapper > div.content > section.entry-content > div.wrapper a[href="/ludzie/${filterUsername}"])), /* strona streamu wpisów - ukrycie wpisów i komentarzy które nie są wypowiedziami filtrowanego uzytkownika ani nie zawierają w treści otagowanego filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section:is(.bucket-page, .search-page, .category-page, .favourites-page, .observed-page, .profile-page, .tag-page, .microblog-page) > section section.stream > div.content > section.entry:not(:has(div > a[href="/ludzie/${filterUsername}"])), /* strona znaleziska - komentarze bez subkomentarzy filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content > section.entry:not(:has(a.username[href="/ludzie/${filterUsername}"])), /* strona znaleziska-subkomentarze nie-filtrowanego użytkownika */ body > section > div.main-content > main.main > section > div.content > section.link-page > section.link > section.comments > section.stream.link-comments > div.content > section.entry > div.comments > section.stream.entry-subcomments > div.content > section.entry.reply:not(:has(a.username[href="/ludzie/${filterUsername}"])) { ${filterStyles[filterStyleIndex]} }`; } if (dev) console.log("css"); if (dev) console.log(css); if (wxs_css_style_filter_user_comments) { wxs_css_style_filter_user_comments.textContent = css; } else { wxs_css_style_filter_user_comments = document.createElement('style'); wxs_css_style_filter_user_comments.id = css_id; wxs_css_style_filter_user_comments.dataset.wxs_filter_type = filterStyleIndex; wxs_css_style_filter_user_comments.appendChild(document.createTextNode(css)); head.appendChild(wxs_css_style_filter_user_comments); } } function minimizeThisEntry(PointerEvent) // PointerEvent.altKey, .ctrlKey, .shiftKey, .target (Element) { consoleX("minimizeThisEntry()", 1) let sectionEntry = this?.closest('.entry'); if (sectionEntry) { mirkoukrywaczBlockNewElement(sectionEntry, undefined, "minimized"); } } function maximizeThisEntry(PointerEvent, object_id) { consoleX("maximizeThisEntry()", 1) let sectionEntry = this?.closest('.entry'); if (sectionEntry) { mirkoukrywaczUnblockElement(sectionEntry); } else if (object_id) { mirkoukrywaczUnblockElement(undefined, object_id); } } // UKRYWANIE WPISU I KOMENTARZY-DODAWANIE DO MIRKOUKRYWACZA function hideThisEntry(event, buttonElement) { consoleX(`hideThisEntry()`, 1); // console.log("hideThisEntry - event", event); // console.log("hideThisEntry - button", button); // console.log("hideThisEntry - button.dataset.wxs_resource", button.dataset.wxs_resource); // console.log("hideThisEntry - this", this); // this > span let resource = buttonElement.dataset.wxs_resource; let entry_stream = buttonElement?.closest(".stream"); if (entry_stream) { let sectionObject; if (resource == "entry" || resource == "entry_comment" || resource == "link_comment") { sectionObject = buttonElement.closest(".entry"); } else if (resource == "link") { sectionObject = buttonElement.closest('.link-block'); } if (dev) console.log("sectionObject"); if (dev) console.log(sectionObject); if (sectionObjectIntersectionObserver) sectionObjectIntersectionObserver.unobserve(sectionObject); mirkoukrywaczBlockNewElement(sectionObject, null, "hidden"); sectionObject.remove(); } } // getWykopXAPIData("entry", "first-by-date") -> https://archiwum.wykopx.pl/api/entry/first-by-date async function getWykopXAPIData(...pathAPIargs) { if (dev) console.log("❎ getWykopXAPIData", pathAPIargs) try { let apiURL = `https://archiwum.wykopx.pl/api/${pathAPIargs.join('/')}`; if (dev) console.log("❎ getWykopXAPIData apiURL: ", apiURL) const response = await fetch(apiURL, { method: "GET", headers: { "Content-Type": "application/json" }, }); if (dev) console.log("❎ getWykopXAPIData response:", response) let data; try { data = await response.json(); if (dev) console.log("❎ getWykopXAPIData data: ", data) } catch (error) { data = response.status; // 204 if (dev) console.log("❎ getWykopXAPIData-response.status") } return data; } catch (error) { console.error(`❎ call to WykopX API failed: ${error}`); throw error; } } // calls Wykop API url: getWykopAPIData("profile") -> https://wykop.pl/api/v3/profile // getWykopAPIData("profile", "users", username } -> https://wykop.pl/api/v3/profile/users/NadiaFrance // getWykopAPIData("profile"} -> https://wykop.pl/api/v3/profile async function getWykopAPIData(...pathAPIargs) { if (dev) console.log("getWykopAPIData(), pathAPIargs: ", pathAPIargs) try { let data = await callWykopAPI("GET", ...pathAPIargs); return data; } catch (error) { console.error(`Fetch failed: ${error}`); throw error; } } async function postWykopAPIData(...pathAPIargs) { if (dev) console.log("postWykopAPIData(), pathAPIargs: ", pathAPIargs); try { let data = await callWykopAPI("POST", ...pathAPIargs); return data; } catch (error) { console.error(`Fetch failed: ${error}`); throw error; } } async function deleteWykopAPIData(...pathAPIargs) { if (dev) console.log("deleteWykopAPIData(), pathAPIargs: ", pathAPIargs) try { let data = await callWykopAPI("DELETE", ...pathAPIargs); return data; } catch (error) { console.error(`Fetch failed: ${error}`); throw error; } } async function callWykopAPI(method, ...pathAPIargs) { if (dev) console.log(`callWykopAPI() -> method: ${method}, pathAPIargs: `, pathAPIargs) try { const response = await fetch(`https://wykop.pl/api/v3/${pathAPIargs.join('/')}`, { method: method, // "GET", "POST", or 'PUT' headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.token, }, }); if (dev) console.log("callWykopAPI() -> URL: " + `https://wykop.pl/api/v3/${pathAPIargs.join('/')}`) if (dev) console.log(response) // if (!response.ok) // { // throw new Error(`HTTP error! status: ${response.status}`); // } let data; try { data = await response.json(); if (dev) console.log("callWykopAPI() -> data", data) } catch (error) { // if(dev) console.log('No body or not a JSON body:', error); data = response.status; // 204 if (dev) console.log("callWykopAPI() -> response.status", response.status) } return data; } catch (error) { console.error(`call to Wykop API failed: ${error}`); throw error; } } /* INTERSECTION OBSERVER */ // dla każdego wpisu i komentarza // strona wpisu, caly wpis: section:is(.entry:has(> article), .link-block:has(> section > article)):not(.deleted) // tylko czesc wpisu bez komentarzy "section.entry:not(.deleted):has(> article), section.link-block:not(.deleted) > section > article) /// :not(.deleted) if (IntersectionObserverEnabled == true) waitForKeyElements("section.entry:has(> article), section.link-block:not(.premium-pub, .market-pub):has(> section > article)", sectionObjectDetected, false); function sectionObjectDetected(sectionObjectElement) { // consoleX(`sectionObjectDetected()`, 1) sectionObjectIntersectionObserver.observe(sectionObjectElement); } if (settings.linkToVideoDuration || settings.entryWithVideoDuration) { CSS += ` /* WYKOP XS CODE - START */ section.link-block > section > article > figure::before, section.link-page section.link-block[data-wxs_video_duration] > section::before, /* WYKOP XS ONLY */ section.entry[data-wxs_video_duration] > article > div.edit-wrapper > section.embed > section.embed-ghost::before /* WYKOP XS ONLY */ { content: var(--wxs_video_duration); /* WYKOP XS ONLY */ z-index: 1; max-width: 80px; animation-name: fadeIn; animation-duration: 0.4s; animation-delay: 1s; animation-fill-mode: both; animation-timing-function: ease-in-out; position: absolute; bottom: 10%; padding: 4px 25px 4px 25px; display: flex; border-bottom: 1px solid var(--alto); border-radius: 0 var(--borderRadius) var(--borderRadius) 0!important; justify-content: center; align-items: center; color: rgba(180, 180, 180, 1); background-color: rgba(0, 0, 0, 1); opacity: 1; @starting-style { opacity: 0; scale: 0.9; translate: -40px; } } /* WYKOP XS CODE - END */ section.link-page section.link-block[data-wxs_video_duration] > section, section.entry[data-wxs_video_duration] > article > div.edit-wrapper > section.embed > section.embed-ghost { position: relative; } section.link-page section.link-block[data-wxs_video_duration] > section::before { bottom: unset; top: -15px; border-bottom: none; border-radius: 0!important; } section.link-page section.link-block[data-wxs_video_duration] > section { margin-top: 15px; } @keyframes fadeIn { 0% { opacity: 0; scale: 0.8; translate: -40px; } 100% { opacity: 1; scale: 1; translate: 0px; }} `; } // INTERSECTION OBSERVED const sectionObjectsAreIntersecting = async (intersectingObject, observer) => { intersectingObject.forEach(async (IntersectionObserverEntry) => // InterIntersectionObserverEntry { // ----- ANY INTERSECTION CHANGED let sectionObjectElement = IntersectionObserverEntry.target; // element <section class="entry"> let resource = null; // resource="link", "entry", "entry_comment" // if(dev) console.log(`intersectingObject: `, sectionObjectElement) if (!sectionObjectElement?.__vue__?.item) return false; // ----- ONLY ONCE: INTERSECTION CHANGED FOR THE FIRST TIME: if (!sectionObjectElement.dataset.wxs_first_load_time) { // if(dev) console.log("intersectingObject-sectionObjectElement.__vue__.item") // if(dev) console.log(sectionObjectElement) // if(dev) console.log("intersectingObject-sectionObjectElement.__vue__.item") // if(dev) console.log(sectionObjectElement.__vue__) // if(dev) console.log("intersectingObject-sectionObjectElement.__vue__.item") // if(dev) console.log(sectionObjectElement.__vue__.item) // data-wxs_first_load_time="2024-12-12..." sectionObjectElement.dataset.wxs_first_load_time = dayjs().valueOf(); // data unix kiedy przybyly ostatnio odswiezone plusy-tutaj czas załadowania strony resource = sectionObjectElement.__vue__.item.resource; let wxs_votes_up = sectionObjectElement.__vue__.item.votes.up; // liczba wykopów/plusów 10 let wxs_votes_down = sectionObjectElement.__vue__.item.votes.down; // liczba zakopów/minusów 20 let wxs_votes_count = wxs_votes_up - wxs_votes_down; // suma plusów i minusów/ suma wykopów i zakopów -10 let wxs_votes_all = wxs_votes_up - wxs_votes_down; // łączna liczba oddanych głosów 30 let wxs_votes_up_percent = 0; let wxs_votes_down_percent = 0; if (wxs_votes_all > 0) { wxs_votes_down_percent = Math.ceil(wxs_votes_down * 100 / wxs_votes_all); wxs_votes_up_percent = Math.ceil(wxs_votes_up * 100 / wxs_votes_all); } // wpisy i komentarze if (resource != "link") { if (settings.checkEntryPlusesEnable || settings.votingExplosionEnable) { sectionObjectElement.style.setProperty('--votesAll', `"👨${wxs_votes_all}"`); // var(--votesAll) sectionObjectElement.dataset.wxs_votes_all = wxs_votes_all; // data-wxs_votes_all="-10" sectionObjectElement.style.setProperty('--votesUp', `"${wxs_votes_up > 0 ? settings.prefixBeforePlusesCount : ""}${wxs_votes_up}"`); // var(--votesUp); sectionObjectElement.dataset.wxs_votes_up = wxs_votes_up; // data-wxs_votes_all="10" sectionObjectElement.style.setProperty('--votesDown', `"${wxs_votes_down > 0 ? settings.prefixBeforeMinusesCount : ""}${wxs_votes_down}"`); //var(--votesDown) sectionObjectElement.dataset.wxs_votes_down = wxs_votes_down; // data-wxs_votes_all="20" sectionObjectElement.style.setProperty('--votesCount', `"${wxs_votes_up > 0 ? settings.prefixBeforePlusesCount : wxs_votes_up < 0 ? settings.prefixBeforeMinusesCount : ""}${wxs_votes_count}"`); // var(--votesCount) sectionObjectElement.dataset.wxs_votes_count = wxs_votes_count; // data-wxs_votes_all="30" sectionObjectElement.dataset.wxs_voted = sectionObjectElement.__vue__.item.voted; // data-wxs_voted=1 data-wxs_voted=0 if (settings.votingExplosionEnable || settings.checkEntryPlusesPerHour && !sectionObjectElement.dataset.wxs_first_load_votes_count) { // liczba plusow podczas zaladowania strony sectionObjectElement.dataset.wxs_first_load_votes_count = sectionObjectElement.__vue__.item.votes.up - sectionObjectElement.__vue__.item.votes.down; } } if (settings.entryWithVideoDuration && sectionObjectElement?.__vue__?.item?.media?.embed?.video_metadata?.duration_in_seconds) { let wxs_video_duration = timeDurationFromSeconds(sectionObjectElement?.__vue__?.item?.media?.embed?.video_metadata?.duration_in_seconds); sectionObjectElement.dataset.wxs_video_duration = wxs_video_duration; // data-wxs_video_duration="02:34" sectionObjectElement.style.setProperty("--wxs_video_duration", `"${wxs_video_duration}"`); // var(--wxs_video_duration) -> "02:34" } if (settings.filterUserReplies) { sectionObjectElement.querySelectorAll(`article > div.edit-wrapper > div.content > section.entry-content > div.wrapper > a[href^="/ludzie/"]:not([data-wxs_mention_username])`).forEach((a_mention) => { const a_mentions_filter_button = document.createElement("button"); a_mentions_filter_button.classList = "wxs_filter_on_replies"; a_mentions_filter_button.innerHTML = `🔰<span>FILTRUJ</span>` a_mentions_filter_button.type = "button"; const wxs_mention_username = a_mention.href.replace("https://wykop.pl/ludzie/", "") a_mention.dataset.wxs_mention_username = wxs_mention_username; // każdy @mention uzytkownika zmieniamy na <a href="/ludzie/NadiaFrance" data-wxs_author_username="NadiaFrance"> a_mentions_filter_button.dataset.wxs_author_username = wxs_mention_username; a_mentions_filter_button.title = `𝗪𝘆𝗸𝗼𝗽 𝗫 — 𝗳𝗶𝗹𝘁𝗿𝗼𝘄𝗮𝗻𝗶𝗲 𝗱𝘆𝘀𝗸𝘂𝘀𝗷𝗶 𝗶 𝗼𝗱𝗽𝗼𝘄𝗶𝗲𝗱𝘇𝗶 \n \n Pokaż całą dyskusję z użytkownikiem '${wxs_mention_username}'.\n \n Pokazuje: \n — wszystkie komentarze '${wxs_mention_username}' \n — odpowiedzi, które wołają '@${wxs_mention_username}' \n \n Klikając przełączasz tryb filtrowania: \n — Filtr 1: odfiltrowane komentarze półprzezroczyste\n — Filtr 2: odfiltrowane komentarze czarno białe\n — Filtr 3: całkowicie ukrywa odfiltrowane komentarze\n \n "` a_mention.insertAdjacentElement("afterend", a_mentions_filter_button); // if(dev) console.log("=== BUTTON ADDED: a_mentions_filter_button") // if(dev) console.log(a_mentions_filter_button) }) } if (resource == "entry") // TODO komentarze w znaleziskach { if (settings.authorBlocksYouCheckingEnable && loggedUser?.status == "active") { // nie sprawdzamy, gdy ktoś ma bana, bo wtedy nigdzie nie można dodać wpisu // <section data-status="400"> jeśli autor cie blokuje i nie mozna dodac wpisu let blockingStatus = await checkIfYouCanPostCommentInEntry(sectionObjectElement.__vue__.item.id); if (blockingStatus == 400) { sectionObjectElement.dataset.status = blockingStatus; let blockDetectorTitle = `Wykop X: 𝗕𝗹𝗼𝗰𝗸 𝗗𝗲𝘁𝗲𝗰𝘁𝗼𝗿❗\n\n`; if (sectionObjectElement.__vue__.item.author.gender == "f") blockDetectorTitle += `Użytkowniczka @${sectionObjectElement.__vue__.item.author.username} dodała Cię na czarną listę.` else blockDetectorTitle += `Użytkownik @${sectionObjectElement.__vue__.item.author.username} dodał Cię na czarną listę.`; blockDetectorTitle += `\n\nNie możesz dodawać komentarzy w tym wpisie.` sectionObjectElement.title = blockDetectorTitle; // TODO - dodanie autora do listy blokujących } } // sectionObjectElement.title = `Wykop X: 𝗕𝗹𝗼𝗰𝗸 𝗗𝗲𝘁𝗲𝗰𝘁𝗼𝗿❗\n\nUżytkownik @m__b dodał Cię na czarną listę\n\nNie możesz dodawać komentarzy w tym wpisie.`; // sprawdzenie czy wpis zawiera grę w plusowanie if (settings.checkEntryPlusesForVotingGame) { var substrings = ["z plusów", "tnia cyfra", "cyfra powie", "siaj jesteś", "siaj jestes", "niej cyfry", "iczba po zaplus", "yfra po zaplus"]; var containsSubstring = substrings.some(substring => sectionObjectElement.__vue__.item.content.includes(substring)); if (containsSubstring) { sectionObjectElement.dataset.wxs_voting_game = "true"; // string pokazujący zakrytą liczbę plusow - zamiast "1234" -> "12--" //sectionObjectElement.style.setProperty('--votesUpHidden', `"+${replaceDigitsWithDot(sectionObjectElement.__vue__.item.votes.up)}"`); sectionObjectElement.style.setProperty('--votesUpHidden', `"${settings.prefixBeforePlusesCount}` + replaceDigitsWithDot(wxs_votes_up) + `"`); sectionObjectElement.style.wxs_votes_up_hidden = replaceDigitsWithDot(wxs_votes_up); // data-wxs_votes_up_hidden let votingGameLastDigit = wxs_votes_up + 1; // liczba po zaplusowaniu votingGameLastDigit = votingGameLastDigit.toString().slice(-1); // ostatnia cyfra po zaplusowaniu sectionObjectElement.style.setProperty('--votingGameLastDigit', `"` + votingGameLastDigit + `"`); sectionObjectElement.dataset.wxs_voting_game_last_digit = votingGameLastDigit; // data-wxs_voting_game_last_digit="9" } } if (settings.checkEntryCommentsPerHour && !sectionObjectElement.dataset.wxs_first_load_comments_count) { sectionObjectElement.dataset.wxs_first_load_comments_count = sectionObjectElement.__vue__.item.comments.count; } } } // znalezisko else if (resource == "link") { if (settings.linkToVideoDuration && sectionObjectElement?.__vue__?.item?.media?.embed?.video_metadata?.duration_in_seconds) { let wxs_video_duration = timeDurationFromSeconds(sectionObjectElement?.__vue__?.item?.media?.embed?.video_metadata?.duration_in_seconds); sectionObjectElement.dataset.wxs_video_duration = wxs_video_duration; // data-wxs_video_duration="02:34" sectionObjectElement.style.setProperty("--wxs_video_duration", `"${wxs_video_duration}"`); // var(--wxs_video_duration) -> "02:34" } if (settings.checkLinkVotesEnable && settings.checkLinkVotesPerHour && !sectionObjectElement.dataset.wxs_first_load_votes_count) { //sectionObjectElement.style.setProperty('--votesUp', `"${sectionObjectElement.__vue__.item.votes.up}"`); //sectionObjectElement.style.setProperty('--votesDown', `"${sectionObjectElement.__vue__.item.votes.down}"`); sectionObjectElement.dataset.wxs_votes_up = sectionObjectElement.__vue__.item.votes.up; sectionObjectElement.dataset.wxs_votes_down = sectionObjectElement.__vue__.item.votes.down; sectionObjectElement.dataset.wxs_voted = sectionObjectElement.__vue__.item.voted; sectionObjectElement.dataset.wxs_first_load_votes_count = sectionObjectElement.__vue__.item.votes.up - sectionObjectElement.__vue__.item.votes.down; sectionObjectElement.dataset.wxs_votes_count = sectionObjectElement.__vue__.item.votes.up - sectionObjectElement.__vue__.item.votes.down; sectionObjectElement.dataset.wxs_votes_all = sectionObjectElement.__vue__.item.votes.up + sectionObjectElement.__vue__.item.votes.down; } if (settings.checkLinkCommentsPerHour && !sectionObjectElement.dataset.wxs_first_load_comments_count) { if (!sectionObjectElement.dataset.wxs_first_load_time) sectionObjectElement.dataset.wxs_first_load_time = dayjs().valueOf(); // data unix kiedy przybyly ostatnio odswiezone plusy-tutaj czas załadowania strony sectionObjectElement.dataset.wxs_first_load_comments_count = sectionObjectElement.__vue__.item.comments.count; } } currentPageTotalVotesUpCount += sectionObjectElement.__vue__.item.votes.up; } // ----- OBJECT IS VISIBLE -- IS INTERSECTING! if (IntersectionObserverEntry.isIntersecting) { if (!resource) resource = sectionObjectElement.__vue__.item.resource; let object_id = sectionObjectElement.id; // object_id > id="comment-1234567" let id = sectionObjectElement.__vue__.item.id; // id > 1234567 let parent_resource, parent_id; // ZA KAŻDYM RAZEM GDY POJAWIA SIE NA EKRANIE: sectionObjectElement.classList.add("isIntersecting"); sectionObjectElement.classList.remove("notIntersecting"); // ZNALEZISKO WIĘC WŁĄCZAMY ANALIZĘ ZNALEZISKA if (resource == "link") { if (settings.checkLinkVotesEnable) { if ((sectionObjectElement.__vue__.item.votes.up > votesFetchingLimitMinimumVotes || sectionObjectElement.__vue__.item.votes.down > votesFetchingLimitMinimumVotes) && loadTime.diff(dayjs(sectionObjectElement.__vue__.item.created_at), 'hour') < votesFetchingLimitMaximumHoursOld) { let i = 1; let timeoutId = null timeoutId = setTimeout(function checkPlusesAgain() { if (sectionObjectElement?.__vue__?.item) { checkPluses(sectionObjectElement, undefined, true); if (sectionObjectElement.classList.contains("isIntersecting")) { if ((sectionObjectElement.dataset.wxs_votes_fetch_high_frequency) || ((loadTime.diff(dayjs(sectionObjectElement.__vue__.item.created_at), 'hour') < votesFetchingHigherFrequencyLimitMaximumHoursOld) && sectionObjectElement.__vue__.item.votes.up > votesFetchingHigherFrequencyLimitMinimumVotes)) { if (!sectionObjectElement.dataset.wxs_votes_fetch_high_frequency) sectionObjectElement.dataset.wxs_votes_fetch_high_frequency = "true"; setTimeout(checkPlusesAgain, votesFetchingHigherFrequencyDelayInSeconds * 1000) } else { setTimeout(checkPlusesAgain, votesFetchingOngoingDelayInSeconds * 1000) } } } }, votesFetchingFirstDelayInSeconds * 1000); } } } // WPISY I KOMENTARZE else { if (settings.checkEntryPlusesEnable) { // tylko wpisy i komentarze, które mają minimum X plusów i nie są starsze niż Y dni if ((sectionObjectElement.__vue__.item.votes.up > votesFetchingLimitMinimumVotes || sectionObjectElement.__vue__.item.votes.down > votesFetchingLimitMinimumVotes) && loadTime.diff(dayjs(sectionObjectElement.__vue__.item.created_at), 'hour') < votesFetchingLimitMaximumHoursOld) { let timeoutId = null let i = 1; let timeoudId = setTimeout(function checkPlusesAgain() { if (sectionObjectElement?.__vue__?.item) { checkPluses(sectionObjectElement, undefined, true); if (sectionObjectElement.classList.contains("isIntersecting")) { if ((sectionObjectElement.dataset.wxs_votes_fetch_high_frequency) || ((loadTime.diff(dayjs(sectionObjectElement.__vue__.item.created_at), 'hour') < votesFetchingHigherFrequencyLimitMaximumHoursOld) && sectionObjectElement.__vue__.item.votes.up > votesFetchingHigherFrequencyLimitMinimumVotes)) { if (!sectionObjectElement.dataset.wxs_votes_fetch_high_frequency) sectionObjectElement.dataset.wxs_votes_fetch_high_frequency = "true"; setTimeout(checkPlusesAgain, votesFetchingHigherFrequencyDelayInSeconds * 1000) } else { setTimeout(checkPlusesAgain, votesFetchingOngoingDelayInSeconds * 1000) } } } }, votesFetchingFirstDelayInSeconds * 1000); // ZABAWA W PLUSY if (resource == "entry" && settings.checkEntryPlusesForVotingGame) { } } } } // ----- IS VISIBLE FOR THE FIRST TIME // GDY PIERWSZY RAZ WIDZIMY WPIS/KOMENTARZ/ZNALEZISKO if (!sectionObjectElement.classList.contains("wasIntersecting")) { sectionObjectElement.classList.add("wasIntersecting"); // ZNALEZISKO WIĘC WŁĄCZAMY ANALIZĘ ZNALEZISKA if (resource == "link") { if (settings.linksAnalyzerEnable || settings.linkVoteDownButton) { linkSectionIntersected(sectionObjectElement) // waitForKeyElements(`section.link-block[id^="link-"]`, , false); // GM_wrench.waitForKeyElements(`section.link-block[id^="link-"]`, linkSectionIntersected, false); } if (settings.checkLinkVotesEnable && settings.checkLinkVotesPerHour) { const ratingBoxSection = sectionObjectElement.querySelector(".vote-box") if ((sectionObjectElement.__vue__.item.votes.up > votesFetchingLimitMinimumVotes || sectionObjectElement.__vue__.item.votes.down > votesFetchingLimitMinimumVotes) && loadTime.diff(dayjs(sectionObjectElement.__vue__.item.created_at), 'day') < votesFetchingLimitMaximumHoursOld) { let wxs_votes_per_hourDivElement = document.createElement("div"); wxs_votes_per_hourDivElement.title = "Wykop X: Liczba wykopów na godzinę"; wxs_votes_per_hourDivElement.classList = "wxs_votes_per_hour"; ratingBoxSection.appendChild(wxs_votes_per_hourDivElement); } } } // WPISY, KOMENTARZE POD WPISAMI, KOMENTARZE POD ZNALEZISKAMI, else { const ratingBoxSection = sectionObjectElement.querySelector(".rating-box") if (settings.votingExplosionEnable || settings.checkEntryPlusesWhenVoting) { votingEventListener(sectionObjectElement, ratingBoxSection); } if (ratingBoxSection && settings.checkEntryPlusesEnable && settings.checkEntryPlusesPerHour) { if ((sectionObjectElement.__vue__.item.votes.up > votesFetchingLimitMinimumVotes || sectionObjectElement.__vue__.item.votes.down > votesFetchingLimitMinimumVotes) && loadTime.diff(dayjs(sectionObjectElement.__vue__.item.created_at), 'day') < votesFetchingLimitMaximumHoursOld) { let wxs_votes_per_hourDivElement = document.createElement("div"); wxs_votes_per_hourDivElement.title = "Wykop X: Liczba plusów na godzinę"; wxs_votes_per_hourDivElement.classList = "wxs_votes_per_hour"; ratingBoxSection.appendChild(wxs_votes_per_hourDivElement); } } } // podkomentarz if (sectionObjectElement.__vue__.item.parent) { parent_resource = sectionObjectElement.__vue__.item.parent.resource; // data-wxs_parent_resource="entry" parent_id = sectionObjectElement.__vue__.item.parent.id; // data-wxs_parent_id="1234567" } // INFOBOX, NOTATKOWATOR, USER LABELS let userDataObject = sectionObjectElement.__vue__?.item?.author; if (settings.infoboxEnable || settings.notatkowatorEnable || settings.wxsUserLabelsEnable) { // TWORZYMY USERINFOBOX do wszystkich nicków autora tego wpisu/komentarza/linka // pierwszy raz widzimy ten wpis / komentarz użytkownika i nie były do niego dodawane userdata więc dodajemy data-wxs_username="NadiaFrance" if (!sectionObjectElement.dataset.wxs_username && userDataObject.username) { // POBIERAMY INFORMACJE O UŻYTKOWNIKU Z FETCH API if (settings.infoboxEnable) { userDataObject = await getUserDetailsForUsername(userDataObject, undefined, true); // userDataObject, username, forceAPICheck } if (settings.wxsUserLabelsEnable) { if (settings.wxsUserLabelsFakeFemales) { if (falszyweRozoweArray && falszyweRozoweArray.includes(userDataObject.username)) { userDataObject.gender = "m"; sectionObjectElement.__vue__.item.author.gender = "m"; userDataObject.changeSexTo = "male"; } else if (falszyweNiebieskieArray && falszyweNiebieskieArray.includes(userDataObject.username)) { userDataObject.gender = "f"; sectionObjectElement.__vue__.item.author.gender = "f"; userDataObject.changeSexTo = "female"; } } if (settings.wxsUserLabelsTrolls && mapaTrolli) { let wxsUserLabelObject = null; // if(dev) console.log(mapaTrolli.get(userDataObject.username)); if ((wxsUserLabelObject = mapaTrolli.get(userDataObject.username))) { userDataObject.wxsUserLabel = wxsUserLabelObject.label; userDataObject.wxsUserURL = wxsUserLabelObject.url; } } } // SPRAWDZENIE I DODANIE NOTATKI ORAZ DANYCH UZYTKOWNIKA let userNoteObject = null; if (settings.notatkowatorEnable) { // jeszcze nie dodawaliśmy notatki if (userDataObject?.note == true && sectionObjectElement?.dataset?.wxs_note_loaded != true) { // potencjalna zmiana plci przez +m lub +f userNoteObject = await getUserNoteObjectByUsername(sectionObjectElement, undefined, true); // username, forceAPICheck sectionObjectElement.dataset.wxs_note_loaded = "true"; // todo nazwa uzytkownika zamiast true zeby potem sprawdzac <section data-wxs_note_loaded="true" data-wxs_username="NadiaFrance" data-wxs_user_note="true"> if (userNoteObject?.changeSexTo) { userDataObject.changeSexTo = userNoteObject.changeSexTo; userDataObject.gender = userNoteObject.gender; sectionObjectElement.__vue__.item.author.gender = userNoteObject.gender; } } } createInfoboxDivsForUserEverywhere(userDataObject, userNoteObject, undefined); } } // TWORZYMY ACTION BOX if (settings.actionBoxEnable) { const wxs_author_username = sectionObjectElement.__vue__.item.author.username; const wxs_author_gender = sectionObjectElement.__vue__.item.author.gender; let wxs_menu_action_box = document.createElement("div"); wxs_menu_action_box.classList.add("wxs_menu_action_box", "wykopxs"); // 📰📑 🔖 ⎀⎊👁 🖾 🗙 ⌧ ⮽ 🗳 ☒ 🗵 🗷- ‐ ‑ – ‒ — ― _ ﹏🗖 ⎀ ⎊ let wxs_menu_action_box_html = ``; if (settings.filterUserComments || settings.filterUserReplies) { wxs_menu_action_box_html += `<button data-wxs_object_id="${object_id}" data-wxs_id="${id}" data-wxs_resource="${resource}" data-wxs_parent_id="${parent_id}" data-wxs_parent_resource="${parent_resource}" data-wxs_author_username="${wxs_author_username}" data-wxs_author_gender="${wxs_author_gender}" class="wxs_filter_off" title=" Wykop X — wyłącz filtrowanie \n \n Pokaż normalnie wszystkie odfiltrowane komentarze / znaleziska \n \n ">❌<span>Wyłącz filtr</span></button>`; if (settings.filterUserComments) { wxs_menu_action_box_html += `<button data-wxs_object_id="${object_id}" data-wxs_id="${id}" data-wxs_resource="${resource}" data-wxs_parent_id="${parent_id}" data-wxs_parent_resource="${parent_resource}" data-wxs_author_username="${wxs_author_username}" data-wxs_author_gender="${wxs_author_gender}" class="wxs_filter_on_user" title=" 𝗪𝘆𝗸𝗼𝗽 𝗫 — 𝗳𝗶𝗹𝘁𝗿𝗼𝘄𝗮𝗻𝗶𝗲 𝗸𝗼𝗺𝗲𝗻𝘁𝗮𝗿𝘇𝘆/𝘇𝗻𝗮𝗹𝗲𝘇𝗶𝘀𝗸 \n \n Na stronach zawierających 𝗸𝗼𝗺𝗲𝗻𝘁𝗮𝗿𝘇𝗲 (pod wpisami i pod znaleziskami) \n odfiltrowuje 𝗸𝗼𝗺𝗲𝗻𝘁𝗮𝗿𝘇𝗲 innych użytkowników. \n Pozostawia widoczne wyłącznie 𝗸𝗼𝗺𝗲𝗻𝘁𝗮𝗿𝘇𝗲 tego użytkownika. \n \n Na stronach zawierających 𝘇𝗻𝗮𝗹𝗲𝘇𝗶𝘀𝗸𝗮 (np. główna, wykopalisko) \n odfiltrowuje 𝘇𝗻𝗮𝗹𝗲𝘇𝗶𝘀𝗸𝗮 innych użytkowników. \n Pozostawia widoczne wyłącznie 𝘇𝗻𝗮𝗹𝗲𝘇𝗶𝘀𝗸𝗮 tego użytkownika. \n \n \n Klikając przełączasz tryb filtrowania: \n — Filtr 1: całkowicie ukrywa odfiltrowane komentarze \n — Filtr 2: odfiltrowane komentarze półprzezroczyste \n — Filtr 3: odfiltrowane komentarze czarno białe \n \n ">⚜<span>Filtruj</span></button>`; } if (settings.filterUserReplies) { wxs_menu_action_box_html += `<button data-wxs_object_id="${object_id}" data-wxs_id="${id}" data-wxs_resource="${resource}" data-wxs_parent_id="${parent_id}" data-wxs_parent_resource="${parent_resource}" data-wxs_author_username="${wxs_author_username}" data-wxs_author_gender="${wxs_author_gender}" class="wxs_filter_on_replies" title=" 𝗪𝘆𝗸𝗼𝗽 𝗫 — 𝗳𝗶𝗹𝘁𝗿𝗼𝘄𝗮𝗻𝗶𝗲 𝗱𝘆𝘀𝗸𝘂𝘀𝗷𝗶 𝗶 𝗼𝗱𝗽𝗼𝘄𝗶𝗲𝗱𝘇𝗶 \n \n Odfiltrowuje 𝗸𝗼𝗺𝗲𝗻𝘁𝗮𝗿𝘇𝗲, które nie dotyczą tego użytkownika. \n \n Nie ukrywa: \n — komentarzy tego użytkownika \n — odpowiedzi, które zawierają @wołanie tego użytkownika \n \n Klikając przełączasz tryb filtrowania: \n — Filtr 1: całkowicie ukrywa odfiltrowane komentarze \n — Filtr 2: odfiltrowane komentarze półprzezroczyste \n — Filtr 3: odfiltrowane komentarze czarno białe \n \n ">🔰<span>Filtruj</span></button>`; } } if (settings.mirkoukrywaczEnable) { if (settings.mirkoukrywaczHideComments || settings.mirkoukrywaczHideEntries || settings.mirkoukrywaczHideLinks) { wxs_menu_action_box_html += `<button data-wxs_object_id="${object_id}" data-wxs_id="${id}" data-wxs_resource="${resource}" data-wxs_parent_id="${parent_id}" data-wxs_parent_resource="${parent_resource}" data-wxs_author_username="${wxs_author_username}" data-wxs_author_gender="${wxs_author_gender}" class="wxs_minimize" title="Wykop X Krawężnik — zwiń"><span>[ </span>—<span> ]</span></button> <button data-wxs_object_id="${object_id}" data-wxs_id="${id}" data-wxs_resource="${resource}" data-wxs_parent_id="${parent_id}" data-wxs_parent_resource="${parent_resource}" data-wxs_author_username="${wxs_author_username}" data-wxs_author_gender="${wxs_author_gender}" class="wxs_maximize" title="Wykop X Krawężnik — pokaż cały"><span>[ </span>+<span> ]</span></button> <button data-wxs_object_id="${object_id}" data-wxs_id="${id}" data-wxs_resource="${resource}" data-wxs_parent_id="${parent_id}" data-wxs_parent_resource="${parent_resource}" data-wxs_author_username="${wxs_author_username}" data-wxs_author_gender="${wxs_author_gender}" class="wxs_hide" title="Wykop X Mirkoukrywacz — ukryj"><span>Ukryj </span>🗙</button> `; } } // DODAJEMY KRAWĘŻNIK wxs_menu_action_box.innerHTML = wxs_menu_action_box_html; const sectionEntryHeaderElement = sectionObjectElement.querySelector("article > header"); sectionEntryHeaderElement.parentNode.insertBefore(wxs_menu_action_box, sectionEntryHeaderElement); } // TODO // liczba komentarzy autora wpisu if (resource == "entry" && sectionObjectElement.classList.contains("detailed")) // jestesmy na stronie wpisu i ta sekcja to glowny wpis { const wxs_comments_count = sectionObjectElement.__vue__.item.comments.count; sectionObjectElement.dataset.wxs_comments_count = wxs_comments_count; // <section class="entry detailed" data-wxs_comments-count="99" data-wxs_comments_author_count="12" data-comments-author-percent="10%"> if (wxs_comments_count > 0) { const wxs_comments_author_count = sectionObjectElement.__vue__.item.comments.items.filter(comment => comment.author.username === sectionObjectElement.__vue__.item.author.username).length; const wxs_comments_author_percent = Math.round(wxs_comments_author_count / wxs_comments_count * 100); sectionObjectElement.dataset.wxs_comments_author_count = wxs_comments_author_count; sectionObjectElement.dataset.wxs_comments_author_percent = wxs_comments_author_percent; } } } } // ----- OBJECT IS NOT VISIBLE -- SEKCJA ZNIKNĘŁA Z EKRANU else if (sectionObjectElement.classList.contains("isIntersecting")) { // consoleX(`section.entry NOT intersecting: ${id}`, 1) sectionObjectElement.classList.remove("isIntersecting", "plusesAdded", "plusesRemoved", "minusesAdded", "minusesRemoved"); sectionObjectElement.classList.add("notIntersecting"); } }); }; const sectionObjectIntersectionObserverOptions = { root: null, rootMargin: "0px 0px -50px 0px", // rootMargin: "0px 0px -100px 0px", threshold: 0, }; // powiekszenie wczytywania ponizej viewportu if (settings.intersectionObserverRootMargin) sectionObjectIntersectionObserverOptions.rootMargin = "0px 0px 700px 0px"; const sectionObjectIntersectionObserver = new IntersectionObserver(sectionObjectsAreIntersecting, sectionObjectIntersectionObserverOptions) /* __vue__.item. .actions. [create/create_favourite/delete/delete_favourite/report/undo_vote/update/vote_up] .adult .atchive .author .comments [count: int, items: Array] .content: "tresc" .created_at: "2023-12..." .deletable: false .device: "" .editable: false .favourite: false .id: 1234567 .media [embed/photo/survey] .parent .resource: "entry" .slug: "wykop-to-portal" .status: "visible" ,tags: Array .voted: 0 .votes [.down: 1 / .up: 2 / .users: Array[]] __vue__.item. author. .avatar (url jpg) .blacklist: false .color: "orange" .company: false .follow: false .gender: "m" .note: true .online: true .rank [trend/position] .status: ["active"/"banned"/"suspended"] .username: "nick" .verified: false */ async function createInfoboxDivsForUserEverywhere(userDataObject, userNoteObject, username = userDataObject.username) { consoleX(`createInfoboxDivsForUserEverywhere(username: ${username})`, 1); let userInfoElementTitle = ""; const a_usernameAll = document.querySelectorAll(`div.right div.tooltip-slot > span > a.username[href="/ludzie/${username}"]:not(:has([data-wxs_username]))`); let changeSexTo = false; if (userDataObject.changeSexTo) changeSexTo = userDataObject.changeSexTo; // informacja o użytkowniku pobrana z __vue__ lub fetch z API // DIV Z INFOBOXEM i NOTATKAMI let div = document.createElement('div'); { div.classList = `wykopxs wxs_user_info wxs_user_info_year`; // <div class="wykopxs wxs_user_info wxs_user_info_year" let noteVarElement = null; let noteURLsElement = null; let infoboxInnerHTML = ""; // XLABEL if (settings.wxsUserLabelsEnable) { if (userDataObject.changeSexTo == "male") { infoboxInnerHTML += `<span class="wxs_user_label wxs_user_label_fake_gender wxs_user_label_fake_female"><span>#falszywyrozowypasek</span></span>`; } else if (userDataObject.changeSexTo == "female") { infoboxInnerHTML += `<span class="wxs_user_label wxs_user_label_fake_gender wxs_user_label_fake_male"><span>#falszywyniebieskipasek</span></span>`; } if (userDataObject.wxsUserLabel) { infoboxInnerHTML += `<span class="wxs_user_label wxs_user_label_name"><span>${userDataObject.wxsUserLabel}</span></span>`; } if (userDataObject.wxsUserURL) { infoboxInnerHTML += `<span class="wxs_user_label wxs_user_label_url"><a href="${userDataObject.wxsUserURL}" target="_blank">www</a></span> `; } } // NOTATKI if (settings.notatkowatorEnable && userDataObject.note == true && userNoteObject) { // if(dev) console.log("NOTATKI 222: ") // if(dev) console.log("userDataObject.note") // if(dev) console.log(userDataObject.note); // if(dev) console.log("userNoteObject"); // if(dev) console.log(userNoteObject); /* Notes from API: user.data = { username: 'NadiaFrance', content: 'Treść notatki' } user.data = { username: 'NadiaFrance', content: '' } Notes from LocalStorage: userNoteObject -> wykopx/notatkowator/tomek123456789 = { username: "Zenek", usernote: "Notatka | +r", lastUpdate: "2024-01-07T15:55:37.210Z" } */ let usernoteParsedToDisplay = removePlusWords(userNoteObject.usernote); // if(dev) console.log("usernoteParsedToDisplay"); // if(dev) console.log(usernoteParsedToDisplay); if (settings.notatkowatorVerticalBar) { let sepIndex = userNoteObject.usernote.indexOf("|"); if (sepIndex != -1) { usernoteParsedToDisplay = `${usernoteParsedToDisplay.substring(0, sepIndex).trim()}...`; //let remainingPart = usernote.substring(sepIndex + 1).trim(); } } noteVarElement = document.createElement('var'); // <span class="wxs_user_info_usernote wxs_notatkowator_normal"> // <span class="wxs_user_info_usernote wxs_notatkowator_r"> noteVarElement.classList = `wxs_user_info_usernote`; if (userNoteObject.changeSexTo) changeSexTo = userNoteObject.changeSexTo; const plusWordsArray = getPlusWords(userNoteObject.usernote); plusWordsArray.forEach(plusWord => { noteVarElement.classList.add(`wxs_notatkowator_${plusWord}`); // class="wxs_notatkowator_r" }); if (settings.notatkowatorWebsiteURL) { const noteURLsArray = getURLsFromString(usernoteParsedToDisplay, false, false); if (noteURLsArray) { noteURLsElement = document.createElement('span'); noteURLsElement.classList = `wxs_user_label wxs_user_info_usernote_url`; noteURLsArray.forEach((url) => { noteURLsElement.innerHTML += `<a href="${url.startsWith('www.') ? 'https://' + url : url}" target="_blank">www</a>`; usernoteParsedToDisplay = usernoteParsedToDisplay.replace(url, ""); }) } } noteVarElement.innerHTML = `${usernoteParsedToDisplay}`; userInfoElementTitle += ` \n 𝗪𝘆𝗸𝗼𝗽 𝗫 𝗡𝗼𝘁𝗮𝘁𝗸𝗼𝘄𝗮𝘁𝗼𝗿 \n \n ${userNoteObject.usernote} \n \n`; } // INFOBOX if (settings.infoboxEnable) { userInfoElementTitle += ` \n 𝗪𝘆𝗸𝗼𝗽 𝗫 InfoBox \n Informacje o użytkowniku @${userDataObject.username} \n \n ` if (changeSexTo == "male") userInfoElementTitle += ` FAŁSZYWY RÓŻOWY PASEK \n \n `; else if (changeSexTo == "female") userInfoElementTitle += ` FAŁSZYWY NIEBIESKI PASEK \n \n `; if (userDataObject.wxsUserLabel) userInfoElementTitle += ` XLabel: ${userDataObject.wxsUserLabel} \n \n `; // basic data without fetch if (userDataObject.blacklist == true) // basic { infoboxInnerHTML += `<var class="wxs_user_blacklist" title="@${userDataObject.username} jest na Twojej czarnej liście">🚯</var>` } if (userDataObject.follow == true) // basic { infoboxInnerHTML += `<var class="wxs_user_follow" title="Obserwujesz użytkownika @${userDataObject.username}">🔔</var>` } if (userDataObject.status == "banned" || userDataObject.status == "suspended") // basic { if (userDataObject.banned?.wxs_info_text_1) // DETAILS from API { if (settings.infoboxUserBannedEmoji) infoboxInnerHTML += `<var class="wxs_user_banned" title=" 🍌 ${userDataObject.banned.wxs_info_text_1}. \n \n ${userDataObject.banned.wxs_info_text_2} \n \n ${userDataObject.banned.wxs_info_text_3} \n \n">🍌</var>`; userInfoElementTitle += ` 🍌 ${userDataObject.banned.wxs_info_text_1}. \n \n ${userDataObject.banned.wxs_info_text_2} \n \n ${userDataObject.banned.wxs_info_text_3} \n \n`; } } let memberSinceDate = null; let membersSinceInYears = null; let membersSinceInMonths = null; let membersSinceInDays = null; memberSinceDate = dayjs(userDataObject.member_since); membersSinceInYears = loadTime.diff(memberSinceDate, 'year'); membersSinceInMonths = loadTime.diff(memberSinceDate, 'month'); membersSinceInDays = loadTime.diff(memberSinceDate, 'day'); if (settings.infoboxUserMemberSince) { if (userDataObject.member_since) // DETAILS from API { // wyświetlony obok nazwy użytkownika rok założenia konta if (membersSinceInDays < 32) { // konto zalozone dzisiaj if (membersSinceInDays == 0) { let membersSinceInHours = loadTime.diff(memberSinceDate, 'hour'); let membersSinceInMinutes = loadTime.diff(memberSinceDate, 'minute'); if (membersSinceInHours == 0) { infoboxInnerHTML += `<var class="wxs_user_member_since">Konto od ${membersSinceInMinutes} minut </var>`; } else { infoboxInnerHTML += `<var class="wxs_user_member_since">Konto od ${membersSinceInHours} h </var>`; } } // wczoraj else if (membersSinceInDays == 1) { infoboxInnerHTML += `<var class="wxs_user_member_since">Konto od wczoraj</var>`; } else { infoboxInnerHTML += `<var class="wxs_user_member_since">${membersSinceInDays} dni </var>`; } } // mniej niz 12 miesiecy else if (membersSinceInMonths < 12) { infoboxInnerHTML += `<var class="wxs_user_member_since">${membersSinceInMonths} mies. </var>`; } // ponad 11 miesiecy else { if (settings.infoboxUserMemberSinceYear) infoboxInnerHTML += `<var class="wxs_user_member_since">${memberSinceDate.year()}</var>`; // 2011 else { if (membersSinceInYears >= 5) infoboxInnerHTML += `<var class="wxs_user_member_since">${membersSinceInYears} lat</var>`; // 5 lat else if (membersSinceInYears >= 2) infoboxInnerHTML += `<var class="wxs_user_member_since">${membersSinceInYears} lata</var>`; // 2 lata else if (membersSinceInYears == 1) infoboxInnerHTML += `<var class="wxs_user_member_since">1 rok</var>`; // 1 rok } } } } else { infoboxInnerHTML += `<var class="wxs_user_member_since"> ℹ </var>`; // · { i } } userInfoElementTitle += userDataObject.online ? ` \n @${userDataObject.username} jest teraz online 🟢 \n ` : ""; if (userDataObject.name) userInfoElementTitle += userDataObject.name != "" ? `Nazwa: ${userDataObject.name} \n ` : ""; if (userDataObject.city) userInfoElementTitle += userDataObject.city != "" ? `Miasto: ${userDataObject.city} \n ` : ""; if (userDataObject.public_email) userInfoElementTitle += userDataObject.public_email != "" ? `\n E-mail: ${userDataObject.public_email} \n ` : ""; userInfoElementTitle += `\n`; if (userDataObject.gender == "f") { userInfoElementTitle += userDataObject.follow ? `🔔 Obserwujesz tę Mirabelkę. \n ` : ""; userInfoElementTitle += userDataObject.blacklist ? `🚯 Ta Mirabelka jest na Twojej czarnej liście. \n ` : ""; if (userDataObject.summary) // DETAILS from API { userInfoElementTitle += userDataObject.summary.followers > 0 ? ` Jest obserwowana przez ${userDataObject.summary.followers} osób` : "Nikt jej nie obserwuje"; userInfoElementTitle += userDataObject.summary.following_users > 0 ? `, a ona sama obserwuje ${userDataObject.summary.following_users} innych osób oraz ` : `. Nie obserwuje żadnych użytkowników i `; userInfoElementTitle += userDataObject.summary.following_tags > 0 ? `${userDataObject.summary.following_tags} #tagów \n ` : `nie obserwuje żadnych #tagów \n `; } } else { userInfoElementTitle += userDataObject.follow ? `🔔 Obserwujesz tego Mireczka \n ` : ""; userInfoElementTitle += userDataObject.blacklist ? `🚯 Ten Mireczek jest na Twojej czarnej liście \n ` : ""; if (userDataObject.summary) // DETAILS from API { userInfoElementTitle += userDataObject.summary.followers > 0 ? ` Jest obserwowany przez ${userDataObject.summary.followers} osób \n ` : "Nikt go nie obserwuje"; userInfoElementTitle += `\n On sam obserwuje`; userInfoElementTitle += `\n — ${userDataObject.summary.following_users} osób `; userInfoElementTitle += userDataObject.summary.following_tags > 0 ? `\n — ${userDataObject.summary.following_tags} #tagów \n ` : `i nie obserwuje żadnych #tagów \n `; } } if (userDataObject.member_since) { userInfoElementTitle += `\n Na Wykopie od: ${userDataObject.member_since} \n \n `; userInfoElementTitle += `Przez ${membersSinceInYears > 1 ? membersSinceInYears + " lat(a)" : membersSinceInMonths > 1 ? membersSinceInMonths + " miesiące(ęcy)" : membersSinceInDays + " dni"} na Wykopie ${userDataObject.gender == "f" ? "dodała" : "dodał"}: \n `; // Rzeczownik } if (userDataObject.summary) { userInfoElementTitle += `\n Na mikroblogu: \n `; userInfoElementTitle += `- ${userDataObject.summary.entries_details.added} wpisów\n `; userInfoElementTitle += `- ${userDataObject.summary.entries_details.commented} komentarzy pod wpisami \n `; userInfoElementTitle += `- ${userDataObject.summary.entries_details.voted} zaplusowanych wpisów \n `; userInfoElementTitle += `\n Na głównej: \n `; userInfoElementTitle += `- ${userDataObject.summary.links_details.up} wykopanych znalezisk \n `; userInfoElementTitle += `- ${userDataObject.summary.links_details.published} znalezisk na głównej \n `; userInfoElementTitle += `- ${userDataObject.summary.links_details.added} znalezisk \n `; userInfoElementTitle += `- ${userDataObject.summary.links_details.commented} komentarzy pod znaleziskami \n `; userInfoElementTitle += `- ${userDataObject.summary.links_details.related} powiązanych do znalezisk \n `; } if (userDataObject.about) userInfoElementTitle += userDataObject.about != "" ? ` \n \n O sobie: \n ${userDataObject.about} \n \n ` : ""; } if (infoboxInnerHTML !== "") div.innerHTML = infoboxInnerHTML; if (noteVarElement !== null) div.appendChild(noteVarElement); if (noteURLsElement !== null) div.appendChild(noteURLsElement); div.title = `${userInfoElementTitle} \n.`; } // if(dev) console.log("gotowy user infobox div:") // if(dev) console.log(div) // dołączenie info o użytkowniku do każdego wystąpienia jego nicka na stronie a_usernameAll.forEach((a_username) => { // if(dev) console.log(`Dodaję infobox przy każdym linku a.username:`); // if(dev) console.log(a_username); // if(dev) console.log(a_username.parentNode.nodeName); if (a_username.dataset.wxs_username == undefined) { a_username.dataset.wxs_username = userDataObject.username; let a_username_type; if (a_username.parentNode.nodeName == "SPAN") a_username_type = "section_entry_header"; if (a_username.parentNode.nodeName == "LI") a_username_type = "section_entry_voters_li"; // tylko dla section.entry, nie dla listy plusujących if (a_username_type == "section_entry_header") { if (changeSexTo != false) { const figureElement = a_username.parentNode.parentNode.parentNode.parentNode.parentNode.querySelector("div.left > a.avatar > figure"); // header if (changeSexTo == "male") { figureElement.classList.remove("female"); figureElement.classList.add("male"); } else if (changeSexTo == "female") { figureElement.classList.add("female"); figureElement.classList.remove("male"); } } let sectionObjectElement = a_username.closest('section.entry, section.link-block, aside.profile-top'); // section.entry, section.link-block a w profilu <aside class="profile-top wide-top"> if (sectionObjectElement && (!sectionObjectElement.dataset.wxs_username || sectionObjectElement.dataset.wxs_username != userDataObject.username)) { // USER DATA BASIC sectionObjectElement.dataset.wxs_username = userDataObject.username; // <section data-wxs-username="NadiaFrance"> sectionObjectElement.dataset.wxs_user_note = userDataObject.note; // data-wxs_user_note="true" sectionObjectElement.dataset.wxs_user_company = userDataObject.company; // sectionObjectElement.dataset.wxs_user_status = userDataObject.status; // data-wxs_user_status="banned" / "suspended" sectionObjectElement.dataset.wxs_user_color = userDataObject.color; // data-wxs_user_color="orange" sectionObjectElement.dataset.wxs_user_verified = userDataObject.verified; // data-wxs_user_verified="true" sectionObjectElement.dataset.wxs_user_blacklist = userDataObject.blacklist; // data-wxs_user_blacklist="true" sectionObjectElement.dataset.wxs_user_follow = userDataObject.follow; // data-wxs_user_follow="true" sectionObjectElement.dataset.wxs_user_gender = userDataObject.gender; // data-wxs_user_gender="m" sectionObjectElement.dataset.wxs_user_online = userDataObject.online; // data-wxs_user_online="true" sectionObjectElement.dataset.wxs_user_rank_position = userDataObject.rank?.position; // data-wxs_user_rank_position=34 // "null" sectionObjectElement.dataset.wxs_user_rank_trend = userDataObject.rank?.trend; // data-wxs_user_rank_trend=0 if (settings.wxsUserLabelsEnable && userDataObject.wxsUserLabel) { sectionObjectElement.dataset.wxs_user_label = userDataObject.wxsUserLabel; // XLabel } if (userDataObject.summary) { sectionObjectElement.dataset.wxs_user_entries_added = userDataObject.summary.entries_details.added; // <section data-wxs-user-entries-added="12"> sectionObjectElement.dataset.wxs_user_entries_commented = userDataObject.summary.entries_details.commented; // <section data-wxs-user-entries-commented="12"> sectionObjectElement.dataset.wxs_user_entries_voted = userDataObject.summary.entries_details.voted; // <section data-wxs-user-entries-voted="12"> sectionObjectElement.dataset.wxs_user_links_up = userDataObject.summary.links_details.up; // <section data-wxs-user-links-up="12"> sectionObjectElement.dataset.wxs_user_links_published = userDataObject.summary.links_details.published; // <section data-wxs-user-links-published="12"> sectionObjectElement.dataset.wxs_user_links_added = userDataObject.summary.links_details.added; // <section data-wxs-user-links-added="12"> sectionObjectElement.dataset.wxs_user_links_commented = userDataObject.summary.links_details.commented; // <section data-wxs-user-links-commented="12"> sectionObjectElement.dataset.wxs_user_links_related = userDataObject.summary.links_details.related; // <section data-wxs-user-links-related="12"> } // WykopObject // to juz jest dodawane wczesniej //sectionObjectElement.dataset.wxs_id = sectionObjectElement.__vue__.item.id; // <section data-wxs_id="1234567"> //sectionObjectElement.dataset.wxs_resource = sectionObjectElement.__vue__.item.resource; // <section data-wxs_resource="entry_comment"> // if (sectionObjectElement.__vue__.item.parent) // { // sectionObjectElement.dataset.wxs_parent_resource = sectionObjectElement.__vue__.item.parent.resource; // data-wxs_parent_resource="entry" // sectionObjectElement.dataset.wxs_parent_id = sectionObjectElement.__vue__.item.parent.id; // data-wxs_parent_id="1234567" // } // if (sectionObjectElement.__vue__.item.created_at) sectionObjectElement.dataset.wxs_created_at = sectionObjectElement.__vue__.item.created_at; // data-wxs_created_at="2023-12-31 2359" // if (sectionObjectElement.__vue__.item.favourite) sectionObjectElement.dataset.wxs_favourite = sectionObjectElement.__vue__.item.author.favourite; // data-wxs_favourite="true" // if (sectionObjectElement.__vue__.item.voted) // { // sectionObjectElement.dataset.wxs_voted = sectionObjectElement.__vue__.item.voted; // data-wxs_voted="0" / "1" // sectionObjectElement.dataset.wxs_votes_up = sectionObjectElement.__vue__.item.votes.up; // data-wxs_votes-up="23" // sectionObjectElement.dataset.wxs_votes_down = sectionObjectElement.__vue__.item.votes.down; // data-wxs_votes-up="23" // } } } //let div_tooltipSlot = a_username.closest("div.tooltip-slot"); let userInfoboxDiv = div.cloneNode(true); // if(dev) console.log(`userInfoboxDiv`, userInfoboxDiv); // if(dev) console.log(`a_username`, a_username); // if(dev) console.log(`a_username.closest("div.right > div:has(a.username)")`, a_username.closest("div.right > div:has(a.username)")); a_username.closest("div.right > div:has(a.username)").appendChild(userInfoboxDiv); // if (div_tooltipSlot) // { // div_tooltipSlot.insertAdjacentElement('afterend', userInfoboxDiv); // } // else // { // a_username.title = userInfoElementTitle; // a_username.insertAdjacentElement('afterend', userInfoboxDiv); // } } // elementToInsertUserInfo.appendChild(div); // elementToInsertUserInfo.parentNode.insertBefore(div, elementToInsertUserInfo.nextSibling); // -- strona wpisu // — wpis: // section.entry.detailed > article > header > div.right > div > div.tooltip-slot > span > a.username > span // section.entry.detailed > article > header > div.right > div > span > a.current.active > time // — komentarze: // section.entry.detailed > div.comments > section.stream > div.content > section.entry.reply > article > header > div.right > div > div.tooltip-slot > span > a.username > span // section.entry.detailed > div.comments > section.stream > div.content > section.entry.reply > article > header > div.right > div > span > a > time // -- mikroblog wpisy i komentarze: // — wpis: // section.entry > article > header > div.right > div > div.tooltip.slot > span > a.username > span // section.entry > article > header > div.right > div > span > a > time // — komentarze: // section.entry > div.comments > section.stream > div.content > section.entry.reply > article > header > div.right > div > div.tooltip-slot > span > a.username > span // section.entry > div.comments > section.stream > div.content > section.entry.reply > article > header > div.right > div > span > a > time // główna (brak header div.right) // section.link-block > section > article > header > div.content > section.info > span > div.tooltip-slot > span > a.username > span // section.link-block > section > article > header > div.content > section.info > span > div.tooltip-slot (drugi) > span > a.external // domena linku // section.link-block > section > article > header > div.content > section.info > span > time // strona znaleziska (brak header div.right) // main.main > section > div.content > section.link-page > section.link > section.link-block.detailed > section > article > div.content > section.info > span > div.tooltip-slot > span > a.username > span // main.main > section > div.content > section.link-page > section.link > section.link-block.detailed > section > article > div.content > section.info > span > div.tooltip-slot (drugi) > span > a.external // main.main > section > div.content > section.link-page > section.link > section.link-block.detailed > section > article > div.content > section.info > span > time // wpisy na stronie profilu // main.main > section > div.content > section.profile-page > section.profile > section.stream.link-entries > div.content > section.entry > article > header > div.right > div > div.tooltip-slot > span > a.username > span // main.main > section > div.content > section.profile-page > section.profile > section.stream.link-entries > div.content > section.entry > article > header > div.right > div > span > a > time // prawy sidebar (brak .tooltip-slot) //main.main > section > section.sidebar > section > div.content > section.entries > section.entry > header > div.right > div > a.username > span //main.main > section > section.sidebar > section > div.content > section.entries > section.entry > header > div.right > div > span.plus // +16 liczba plusów //main.main > section > section.sidebar > section > div.content > section.entries > section.entry > header > div.right > a > time // strona PROFILU — naglowek profilu uzytkownika (brak .tooltip-slot) // main.main > aside.profile-top > section > header > div > h1 > a.username > span // main.main > aside.profile-top > section > header > div > time }); div.remove(); } /* ------------- NOTATKOWATOR ------------ */ async function getUserNoteObjectByUsername(sectionObjectElement, username = sectionObjectElement.__vue__.item.author.username, forceAPICheck = false) { consoleX(`getUserNoteObjectByUsername(username: ${username}, forceAPICheck: ${forceAPICheck})`, 1) if (settings.notatkowatorEnable && (forceAPICheck || (sectionObjectElement && sectionObjectElement.__vue__.item.author.note))) { // consoleX(`getUserNoteObjectByUsername()`, 1); if (username) { let usernote = ""; let userNoteObject = await localStorageNotatkowator.getItem(username); // consoleX(`getUserNoteObjectByUsername()`, 1); // if(dev) console.log(username); if (forceAPICheck == false) { // TODO check this if (userNoteObject == null || userNoteObject == "") { // if(dev) console.log("typeof userNoteObject", typeof userNoteObject) // if(dev) console.log(userNoteObject); const date2 = dayjs(userNoteObject.lastUpdate); //if (loadTime.diff(date2, "second") > parseFloat(settings.notatkowatorUpdateInterval * 3600)) //{ // userNoteObject = null; /* notatka jest zbyt stara */ //} //else //{ // mamy aktualną notatkę z localforage // consoleX(`Notatkowator wczytał notatkę z LocalStorage. Użytkownik: @${username}`); // if(dev) console.log("userNoteObject") // if(dev) console.log(userNoteObject) // if(dev) console.log("userNoteObject.usernote") // if(dev) console.log(userNoteObject.usernote) usernote = userNoteObject.usernote; return userNoteObject; //} } } if (usernote != "") { return userNoteObject; } else // Notatka z API — brak notatki o tym użytkowniku w localforage lub była zbyt stara lub forceAPICheck = true { try { let jsonResponse = await getWykopAPIData("notes", username); usernote = jsonResponse?.data?.content; /* Notes from API: user.data = { username: 'NadiaFrance', content: 'Treść notatki' } user.data = { username: 'NadiaFrance', content: '' } Notes from LocalStorage: userNoteObject -> wykopx/notatkowator/tomek123456789 = { username: "Zenek", usernote: "Notatka | +r", lastUpdate: "2024-01-07T15:55:37.210Z" gender: "f" / "m" / null changeSexTo: "female" / "male" } */ userNoteObject = { username: jsonResponse?.data?.username, usernote: jsonResponse?.data?.content, gender: sectionObjectElement.__vue__.item.author, lastUpdate: dayjs() } const plusWordsArray = getPlusWords(userNoteObject.usernote); // if(dev) console.log("plusWordsArray") // if(dev) console.log(plusWordsArray) // dodane jakies +przełączniki if (plusWordsArray[0] != "normal") { const femaleChecklistArray = ["k", "f", "female", "kobieta", "dziewczyna", "dziewczynka", "girl", "baba", "różowa", "rozowa", "rózowa", "rożowa"]; const maleChecklistArray = ["m", "mezczyzna", "mężczyzna", "męzczyzna", "meżczyzna", "male", "facet", "boy", "chlopak", "chłopak", "chłopiec", "chłop", "chlop", "niebieski"]; const isFemale = plusWordsArray.filter(item => femaleChecklistArray.includes(item)); const isMale = plusWordsArray.filter(item => maleChecklistArray.includes(item)); if (isFemale.length >= 1) // różowy pasek // +k lub +f { userNoteObject.changeSexTo = "female"; userNoteObject.gender = "f"; //userDataObject.gender="f"; } else if (isMale.length >= 1) // niebieski pasek // +m { userNoteObject.changeSexTo = "male"; userNoteObject.gender = "m"; //userDataObject.gender="m"; } } // if(dev) console.log(jsonResponse); // if(dev) console.log("userNoteObject"); // if(dev) console.log(userNoteObject); if (usernote != "" && userNoteObject.usernote != null && userNoteObject.usernote != "") { // if(dev) console.log(`API zwróciło ${userNoteObject.username} notatkę: ${userNoteObject.usernote}`); consoleData.notatkowator.count++; refreshConsole(); // await displayUserNote(sectionObjectElement, usernote, username) if (localStorageNotatkowator) { localStorageNotatkowator.setItem(username, userNoteObject) .then(function (value) { consoleX(`Notatkowator zapisał notatkę o użytkowniku @${userNoteObject.username}: "${userNoteObject.usernote}"`, 1); }) .catch(function (err) { consoleX(`Notatkowator = error: ` + err, 1); }); // return usernote; return userNoteObject } } else { // consoleX(`Użytkownik ${username} nie ma żadnej notatki`) } } catch (error) { console.error(`Failed to get data: ${error}`); } } } } } /* wyświetlenie danych o autorze z __vue__ lub pobranie z API*/ async function getUserDetailsForUsername(userDataObject = null, username = userDataObject.username, forceAPICheck = false) { consoleX(`getUserDetailsForUsername(username: ${username}, forceAPICheck: ${forceAPICheck})`, 1) if (settings.infoboxEnable && username) { // consoleX(`getUserDetailsForUsername() ${username}`, 1); // if(dev) console.log(`user: ${username}: `) // jesli jest zbanowany lub chcemy wszystkie dane (np. followersi — wysylamy zapytanie do API) if (userDataObject.status == "banned" || userDataObject.status == "suspended" || forceAPICheck == true) { // if(dev) console.log("---- getUserDetailsForUsername — sprawdzanie użytkownika w API: " + username) try { // profile/users/{username} // profile/users/{username}/short // let jsonResponse = await getWykopAPIData("profile", "users", username, "short"); let jsonResponse = await getWykopAPIData("profile", "users", username); if (jsonResponse.data) { let userDataObject = jsonResponse.data; // if(dev) console.log("userData fetched from API"); // if(dev) console.log(userDataObject); return userDataObject; // return the data } } catch (error) { console.error(`Failed to get data: ${error}`); } } // jeśli wystarczą nam podstawowe informacje z __vue__ else { // if(dev) console.log("---- getUserDetailsForUsername — zwracam danej użytkownika z vue: " + username) return userDataObject; } } } // wykop_xs_banned.user.js - START - 2 if (settings.infoboxUserBannedInfoOnProfilePage) { waitForKeyElements("aside.profile-top:has(aside.info-box.red)", bannedUserProfileAside, false); // DODAJEMY INFO NA STRONIE PROFILOWEJ O SZCZEGÓŁACH BANA function bannedUserProfileAside(element) { const bannedUserObject = element?.__vue__?.user; if (!bannedUserObject) return; if (bannedUserObject.status == "banned" || bannedUserObject.status == "suspended") { bannedUserObject.banned.wxs_reason_lowercase = bannedUserObject.banned.reason.toLowerCase(); bannedUserObject.banned.wxs_ban_end_date_string = bannedUserObject.banned.expired; // "2024-01-04 17:22:31" / null if (bannedUserObject.banned.wxs_ban_end_date_string != null) { bannedUserObject.banned.wxs_ban_end_date_object = dayjs(bannedUserObject.banned.wxs_ban_end_date_string); bannedUserObject.banned.wxs_ban_end_in_years = bannedUserObject.banned.wxs_ban_end_date_object.diff(loadTime, 'year'); // 5 > koniec bana za "5" lat bannedUserObject.banned.wxs_ban_end_in_months = bannedUserObject.banned.wxs_ban_end_date_object.diff(loadTime, 'month'); // 3 > koniec bana za: "3" miesiące bannedUserObject.banned.wxs_ban_end_in_days = bannedUserObject.banned.wxs_ban_end_date_object.diff(loadTime, 'day'); // 31 > koniec bana za 31 dni bannedUserObject.banned.wxs_ban_end_in_days = bannedUserObject.banned.wxs_ban_end_date_object.diff(loadTime, 'day'); // 31 > koniec bana za 31 dni // banEndDateDuration = banEndDateObject.toNow() } const bannedRedBox = element.querySelector("aside.info-box.red p"); let bannedRedBoxInnerHTML = `To konto jest ${bannedUserObject.status == "suspended" ? "w trakcie usuwania" : "zbanowane"}. <br/><br/><strong>Informacja z Wykop X - Ban Info:</strong> <br/>`; // Ban permanentny if (bannedUserObject.status == "banned" && (bannedUserObject.banned.wxs_ban_end_date_string == null || bannedUserObject.banned.wxs_ban_end_in_years > 100)) { bannedRedBoxInnerHTML = `To konto jest zbanowane permanentnie. <br/><br/><strong>Wykop XS Ban Info:</strong> <br/>`; } // "Użytkowniczka @NadiaFrance dsotała bana za naruszenie regulaminu" if (bannedUserObject.status == "suspended") { bannedRedBoxInnerHTML += `${bannedUserObject.gender == "f" ? "Użytkowniczka @" + bannedUserObject.username + " rozpoczęła usuwanie konta" : "Użytkownik @" + bannedUserObject.username + " rozpoczął usuwanie konta"}`; } else { bannedRedBoxInnerHTML += `${bannedUserObject.gender == "f" ? "Użytkowniczka @" + bannedUserObject.username + " dostała" : "Użytkownik @" + bannedUserObject.username + " dostał"} bana za <strong>${bannedUserObject.banned.wxs_reason_lowercase}</strong>`; } // Ban permanentny if (bannedUserObject.banned.wxs_ban_end_date_string == null || bannedUserObject.banned.wxs_ban_end_in_years > 100) { // Ban permanentny na 999 lat bannedRedBoxInnerHTML += `<br/><small>Ban permanentny. Śpij słodko aniołku [*] </small>`; } else { // "Koniec bana za 14 dni" bannedRedBoxInnerHTML += `<br/><small title="Czas końca bana dotyczy czasu letniego. \nWykop posiada błąd i nie rozpoznaje czasu zimowego, \ndlatego zimą i jesienią ban trwa o godzinę dłużej niż podany"> Koniec bana ${bannedUserObject.banned.wxs_ban_end_in_years > 1 ? "za <strong>" + bannedUserObject.banned.wxs_ban_end_in_years + " lat(a)" : bannedUserObject.banned.wxs_ban_end_in_months > 1 ? "za <strong>" + bannedUserObject.banned.wxs_ban_end_in_months + " miesiące(ęcy)" : bannedUserObject.banned.wxs_ban_end_in_days > 1 ? "za <strong>" + bannedUserObject.banned.wxs_ban_end_in_days + " dni" : bannedUserObject.banned.wxs_ban_end_date_object.isSame(loadTime, 'day') == true ? " <strong>już dzisiaj! " : " jutro"}</strong><br/>`; // "Ban trwa do 2024-12-12 23:59:59" bannedRedBoxInnerHTML += `Ban trwa do ${bannedUserObject.banned.wxs_ban_end_date_string}<span style="cursor: help; padding: 0px 7px">ℹ</span></small>`; } bannedRedBox.innerHTML = bannedRedBoxInnerHTML; } } } // wykop_xs_banned.user.js - END - 2 // DOPISUJE NOTATKĘ DO UZYTKOWNIKA /*async function displayUserNote(sectionObjectElement = null, usernote, username = sectionObjectElement.__vue__.item.author.username) { if (usernote?.length > 0 && username) { // "⭐ Obok nicka (Notatkowator2000)":"obok_nicka", // "Wyraźna, pod avatarem (Wykop X Style)":"pod_avatarem", let elementToInsertNoteAfter; const sectionObjectElementsAll = document.querySelectorAll(`section[data-wxs_username="${username}"]`) sectionObjectElementsAll.forEach((section) => { if (!section.dataset.wxs_note || section.dataset.wxs_username != username) { section.dataset.wxs_note="true"; // <section data-wxs-note="true" wxs_username="NadiaFrance"> // if(dev) console.log(`Notatkowator — dodaje notatkę: ${ username } / ${usernote}`); let resource = section.__vue__.item.resource; if (resource == "entry" || resource == "entry_comment" || resource == "link_comment") { switch (settings.notatkowatorStyle) { case "pod_avatarem": elementToInsertNoteAfter = section.querySelector(`article > header`); break; case "obok_nicka": elementToInsertNoteAfter = section.querySelector(`article > header > div.right > div > div.tooltip-slot`); break; default: null; } } else if (resource == "link") { elementToInsertNoteAfter = section.querySelector("section > article > div.content > section.info > span > div.tooltip-slot"); } */ // returns objecct-id "comment-1234567", "link-12345678" function getObjectIdFromSectionObjectElement(sectionObjectElement) { consoleX(`getObjectIdFromSectionObjectElement()`, 1); if (sectionObjectElement && sectionObjectElement.__vue__?.item?.resource) { let resource = sectionObjectElement.__vue__.item.resource; if (resource == "link") { return `link-${sectionObjectElement.__vue__.item.id}`; } else if (resource == "entry" || resource == "entry_comment" || resource == "link_comment") { return `comment-${sectionObjectElement.__vue__.item.id}`; } } else { return null; } } // zwraca tytul znaleziska lub fragment poczatku wpisu/komentarza. Maks tytul znaleziska to 80 znakow function getTitleTextFromSectionObjectElement(sectionObjectElement, charLimit = 80) { consoleX(`getTitleTextFromSectionObjectElement(charLimit: ${charLimit})`, 1); if (sectionObjectElement && sectionObjectElement.__vue__?.item?.resource) { let resource = sectionObjectElement.__vue__.item.resource; if (resource == "link" && sectionObjectElement.__vue__?.item?.title) { return sectionObjectElement.__vue__.item.title.substring(0, charLimit); } else if (sectionObjectElement.__vue__?.item?.content && (resource == "entry" || resource == "entry_comment" || resource == "link_comment")) { return sectionObjectElement.__vue__.item.content.replace(/\n/g, " ").substring(0, charLimit); } } else { return null; } } /* MIRKOUKRYWA */ // mirkoukrywaczBlockNewElement(sectionObjectElement, null, "minimized") // mirkoukrywaczBlockNewElement(null, "comment-123456", "hidden") function mirkoukrywaczBlockNewElement(sectionObjectElement = null, object_id = getObjectIdFromSectionObjectElement(sectionObjectElement), blockingType = "hidden") { // console.clear(); consoleX(`mirkoukrywaczBlockNewElement(blockingType: ${blockingType})`, 1); if (localStorageMirkoukrywacz && (sectionObjectElement || object_id)) { if (!sectionObjectElement) { sectionObjectElement = document.getElementById(object_id); } if (blockingType == "minimized") { sectionObjectElement.classList.add('wxs_minimized'); consoleData.mirkoukrywacz_minimized.count++; refreshConsole(); } else if (blockingType == "hidden") { sectionObjectElement.classList.add('wxs_hidden'); consoleData.mirkoukrywacz_hidden.count++; refreshConsole(); } const resource = sectionObjectElement.__vue__.item.resource; const text = getTitleTextFromSectionObjectElement(sectionObjectElement); if (!object_id) object_id = getObjectIdFromSectionObjectElement(sectionObjectElement); // if(dev) console.log("sectionObjectElement") // if(dev) console.log(sectionObjectElement); localStorageMirkoukrywacz .setItem(object_id, { object_id, grandcomment_id: sectionObjectElement.__vue__.item.parent?.id, resource, username: sectionObjectElement.__vue__.item.author?.username, text, blockingType, // "hidden" / "minimized" date: dayjs() }) .then(function (value) { // if(dev) console.log(value); }) .catch(function (err) { if (dev) console.log(`mirkoukrywaczBlockNewElement = error: ` + err); }); // mirkoukrywaczHideAllBlockedElements(); } } function mirkoukrywaczUnblockElement(sectionObjectElement = null, object_id = getObjectIdFromSectionObjectElement(sectionObjectElement)) { // console.clear(); if (dev) console.log(`mirkoukrywaczUnblockElement(${object_id})`) if (localStorageMirkoukrywacz) { localStorageMirkoukrywacz .getItem(object_id) .then(function (value) { if (dev) console.log("getItem: " + object_id) if (dev) console.log(value) localStorageMirkoukrywacz .removeItem(object_id) .then(function () { if (value.blockingType == "minimized") { if (!sectionObjectElement) sectionObjectElement = document.getElementById(object_id); if (sectionObjectElement) { sectionObjectElement.classList.remove(`wxs_minimized`); consoleData.mirkoukrywacz_hidden.count--; refreshConsole(); } } document.getElementById(`wykopx_mirkoukrywacz_element_${object_id}`)?.remove(); }) .catch(function (err) { if (dev) console.log(err); }); }) } } function mirkoukrywaczHideAllBlockedElements() { consoleX(`mirkoukrywaczHideAllBlockedElements()`, 1) if (localStorageMirkoukrywacz) { //consoleX(`mirkoukrywaczHideAllBlockedElements()`, 1); let hiddenElements = 0; let minimizedElements = 0; localStorageMirkoukrywacz.iterate(function (value, key, iterationNumber) { // if(dev) console.log("value"); // if(dev) console.log(value); // if(dev) console.log("key"); // if(dev) console.log(key); let foundElementToHide = document.getElementById(`${key}`); // comment-1234 link-12345 if (foundElementToHide) { if (value.blockingType == "hidden") { if (sectionObjectIntersectionObserver) sectionObjectIntersectionObserver.unobserve(foundElementToHide); foundElementToHide.remove(); hiddenElements++; } else if (value.blockingType == "minimized") { foundElementToHide.classList.add(`wxs_minimized`); // class="wxs_minimized" minimizedElements++; } } }).then(function () { if (hiddenElements + minimizedElements == 0) { consoleData.mirkoukrywacz_hidden.count = 0; consoleData.mirkoukrywacz_minimized.count = 0; refreshConsole(); } else { consoleData.mirkoukrywacz_hidden.count = hiddenElements; consoleData.mirkoukrywacz_minimized.count = minimizedElements; refreshConsole(); } }).catch(function (err) { if (dev) console.log(err); }); } /* value = { "id": "74301447", "grandcomment_id": "74301447", "resource": "entry", "username": "Jadowityssak", "text": "Zawsze jak widzę tego typa z Afromental to mi gość", "date": "2023-12-26T02:44:23.039Z" "blockingType": "minimize"/"hide" }*/ } function mirkoukrywaczAppendOneElementToHideList(value, key, iterationNumber = "⭐") { consoleX(`mirkoukrywaczAppendOneElementToHideList(value: ${value}, key: ${key})`); if (!document.querySelector(`#wxs_modal .wykopx_mirkoukrywacz_list_of_hidden_items #wykopx_mirkoukrywacz_element_${key}`)) { let hidden_element_html = ` <div class="wykopx_mirkoukrywacz_element" id="wykopx_mirkoukrywacz_element_${key}"> <div class="wykopx_mirkoukrywacz_unhide" data-object_id="${key}" title="Przestań ukrywać ten element">❌</div> <div class="wykopx_mirkoukrywacz_lp">${iterationNumber}</div> <div class="wykopx_mirkoukrywacz_text">${value.text}</div> <div class="wykopx_mirkoukrywacz_id">${key}</div> <div class="wykopx_mirkoukrywacz_resource">${value.resource}</div> <div class="wykopx_mirkoukrywacz_date">${dayjs(value.date).format("YYYY-MM-DD HH:mm")}</div> <div class="wykopx_mirkoukrywacz_blocking_type">${value.blockingType}</div> </div>`; document.querySelector("#wxs_modal .wykopx_mirkoukrywacz_list_of_hidden_items").innerHTML += hidden_element_html; } } function mirkoukrywaczRefreshHideList() { if (localStorageMirkoukrywacz) { consoleX(`mirkoukrywaczRefreshHideList()`, 1); localStorageMirkoukrywacz .iterate(function (value, key, iterationNumber) { mirkoukrywaczAppendOneElementToHideList(value, key, iterationNumber); }) .then(function () { }) .catch(function (err) { }); } } function createMenuItemForMirkoukrywacz() { if (settings.mirkoukrywaczEnable) { consoleX(`createMenuItemForMirkoukrywacz()`, 1) if (document.getElementById("wxs_open_modal_mirkoukrywacz_button") == null) { createProfileDropdownMenuItem( { text: `Mirkoukrywacz: Wykop X`, title: "Wykop X — lista elementów ukrytych przez Mirkoukrywacz", className: `mirkoukrywacz`, id: "wxs_open_modal_mirkoukrywacz_button", url: null, target: null, icon: null, number: null }); document.getElementById("wxs_open_modal_mirkoukrywacz_button").onclick = function (event) { event.preventDefault(); if (wxs_modal == null) { createModalBox(); } mirkoukrywaczRefreshHideList(); wxs_modal.style.display = "block"; }; } } } function createMenuItemForNotatkowator() { if (settings.notatkowatorEnable) { consoleX(`createMenuItemForNotatkowator()`, 1) createProfileDropdownMenuItem( { text: `Notatki: Wykop X`, title: "Wykop X — Notatkowator — Twoje notatki do innych użytkowników", className: `notatkowator`, id: "wxs_open_modal_notatkowator_button", url: null, target: null, icon: null, number: null }); document.getElementById("wxs_open_modal_notatkowator_button").onclick = function (event) { //mirkoukrywaczRefreshHideList(); event.preventDefault(); if (wxs_modal == null) createModalBox(); wxs_modal.style.display = "block"; }; } } function createModalBox() { if (wxs_modal == null) { consoleX(`createModalBox()`, 1) let html = ` <div class="wykopxs wykopx_modal" id="wxs_modal"> <div class="wykopx_modal-content"> <aside class="wykopxs_info_bar wykopx_hide_this_if_stylus_is_installed"> Masz już działający skrypt Wykop XS. Aby Mirkoukrywacz działał, musisz zainstalować i włączyć w Stylusie <a href="http://wiki.wykopx.pl" target="_blank">Wykop X</a> </aside> <aside class="wxs_modal_is_turned_off wykopx_hide_this_if_mirkoukrywanie_is_turned_on"> Wykop XS oraz Wykop X są zainstalowane poprawnie, ale Mirkoukrywacz jest wyłączony. Aby Mirkoukrywacz działał, włącz go w ustawieniach Stylusa. <a href="https://github.com/wykopx/WykopX/wiki/Extra#mirkoukrywacz" target="_blank">Zobacz instrukcję obsługi Mirkoukrywacza</a> </aside> <header class="wykopxs"> <span>Mirkoukrywacz:</span> <span>Lista ukrytych elementów</span> </header> <section class="wykopxs wykopx_mirkoukrywacz_list_of_hidden_items"> <span class="wykopx_mirkoukrywacz_hidden_list_is_empty"> Żadne treści nie zostały jeszcze zaznaczone do ukrycia </span> </section> <footer> <span>Usuń z Mirkoukrywacza</span> <section> <select id="wxs_mirkoukrywacz_delete_block_type"> <option value="all" selected>wszystkie</option> <option value="minimized">zwinięte (Krawężnik)</option> <option value="hidden">ukryte (Mirkoukrywacz)</option> </select> <select id="wxs_mirkoukrywacz_delete_resource"> <option value="all" selected>znaleziska, wpisy i komentarze</option> <option value="links">znaleziska</option> <option value="entries">wpisy</option> <option value="comments">komentarze</option> </select> <select id="wxs_mirkoukrywacz_delete_timespan"> <option value="30">starsze niż miesiąc</option> <option value="14">starsze niż 2 tygodnie</option> <option value="7">starsze niż 7 dni</option> <option value="3" selected>starsze niż 3 dni</option> <option value="1">starsze niż 1 dzień</option> <option value="0">wszystkie</option> </select> </section> <button id="wxs_mirkoukrywacz_delete_older_than_7_days">Usuń</button> <button id="wxs_mirkoukrywacz_delete_all" style="color: rgb(255, 60, 60); margin-left: auto;">Usuń wszystkie</button> </footer> </div> </div>`; body.insertAdjacentHTML('afterbegin', html); wxs_modal = document.getElementById("wxs_modal"); window.onclick = function (event) { if (event.target == wxs_modal) { wxs_modal.style.display = "none"; } }; } } function mirkoukrywaczRemoveTooOld(PointerEvent, options) { if (localStorageMirkoukrywacz && options) { consoleX(`mirkoukrywaczRemoveTooOld()`, 1); let numberOfRemovedItems = 0; localStorageMirkoukrywacz.iterate(function (value, id, iterationNumber) { if (value.blockingType == options.blockingType || options.blockingType == "all") // "hidden", "minimized" { const itemDate = dayjs(value.date); const diffInDays = loadTime.diff(itemDate, 'day', true); // true — floating point if (diffInDays >= options.days) { numberOfRemovedItems++; localStorageMirkoukrywacz.removeItem(id).then(function () { document.getElementById(`wykopx_mirkoukrywacz_element_${id}`).remove(); }).catch(function (err) { console.log(err); }); } } }).then(function () { if (numberOfRemovedItems > 0) { if (options.days == 0) alert(`Wykop X Mirkowołacz: Usunięto wszystkie elementy z listy. Od teraz będą się one znów wyświetlać na Wykopie`); else alert(`Wykop X Mirkowołacz: ${numberOfRemovedItems} ukrytych elementów starszych niż ${options.days} dni zostało usuniętych z listy Mirkoukrywacza. Od teraz będą się one znów wyświetlać na Wykopie`); } }).catch(function (err) { if (dev) console.log(err); }); } } /* AUTOMATYCZNIE POKAŻ CAŁOŚĆ DŁUGICH TREŚCI */ function autoOpenMoreContentEverywhere() { if (settings.autoOpenMoreContentEverywhere) { consoleX("autoOpenMoreContentEverywhere()", 1) let showMoreButtons = document.querySelectorAll("div.wrapper button.more"); if (showMoreButtons?.length > 0) { showMoreButtons.forEach(button => { button.click() }); consoleX(`Automatycznie rozwinięto ${showMoreButtons.length} długich wpisów i komentarzy`); } } } /* AUTOMATYCZNIE ROZWIJAJ SPOILERY */ function autoOpenSpoilersEverywhere() { if (settings.autoOpenSpoilersEverywhere) { consoleX("autoOpenMoreContentEverywhere()", 1) let showSpoilerButtons = document.querySelectorAll("div.wrapper section.content-spoiler button"); if (showSpoilerButtons?.length > 0) { showSpoilerButtons.forEach(button => { button.click() }); consoleX(`Automatycznie rozwinięto ${showSpoilerButtons.length} spoilerów`); } } } /* Kliknięcie w stronę główną odświeża stronę główną */ function topNavLogoClick() { if (settings.topNavLogoClick == "mikroblog") { consoleX(`topNavLogoClick()`, 1); refreshOrRedirectOnButtonClick(`body > section > header.header > div.left > a`, `/mikroblog`); } else if (settings.topNavLogoClick == "mikroblog_dodaj") { refreshOrRedirectOnButtonClick(`body > section > header.header > div.left > a`, `/mikroblog#dodaj`); } } /* Kliknięcie w stronę główną odświeża stronę główną */ function topNavHomeButtonClickRefreshOrRedirect() { if (settings.topNavHomeButtonClickRefreshOrRedirect) { consoleX(`topNavHomeButtonClickRefreshOrRedirect()`, 1); refreshOrRedirectOnButtonClick(`body > section > header.header > div.left > nav.main > ul > li > a[href="/"]`, `/`); } } /* Kliknięcie w Mikroblog odświeża stronę */ function topNavMicroblogButtonClickRefreshOrRedirect() { if (settings.topNavMicroblogButtonClickRefreshOrRedirect) { consoleX(`topNavMicroblogButtonClickRefreshOrRedirect()`, 1); refreshOrRedirectOnButtonClick(`body > section > header.header > div.left > nav.main > ul > li > a[href="/mikroblog"]`, `/mikroblog`); } } function refreshOrRedirectOnButtonClick(selector, pathToRefresh = "/") { consoleX(`refreshOrRedirectOnButtonClick(selector: ${selector}, pathToRefresh: ${pathToRefresh})`, 1) document.querySelectorAll(selector).forEach(function (element) { element.addEventListener('click', function (event) { event.preventDefault(); let pathname = new URL(document.URL).pathname; if (pathname == pathToRefresh) window.location.reload(); else window.location.href = pathToRefresh; }); }); } if (settings.categoryRedirectToMicroblogButtonEnable) { waitForKeyElements(`ul.categories`, categoryRedirectToMicroblogButton, false); // waitForKeyElements sends jNode object, not DOM object } // przyciski MIRKO w kategoriach function categoryRedirectToMicroblogButton(ul_category_element) { consoleX("categoryRedirectToMicroblogButton()", 1); /* "Najnowsze":"_mikroblog_najnowsze", "Ostatnio wybrane":"_mikroblog", "Aktywne":"_mikroblog_aktywne", "Gorące (2h)":"_mikroblog_gorace_2", "Gorące (6h)":"_mikroblog_gorace_6", "Gorące (12h)":"_mikroblog_gorace_12", "Gorące (24h)":"_mikroblog_gorace_24" */ if (document.querySelectorAll('section.links div.content ul.categories .wykopx_categories_microblog_a').length == 0) { let listItems = document.querySelectorAll('section.links div.content ul.categories li'); listItems.forEach(function (item) { let kategoria = item.outerText; let href = ""; switch (kategoria) { case "Ciekawostki": href = "/k/ciekawostki"; break; case "Informacje": href = "/k/informacje"; break; case "Rozrywka": href = "/k/rozrywka"; break; case "Sport": href = "/k/sport"; break; case "Motoryzacja": href = "/k/motoryzacja"; break; case "Technologia": href = "/k/technologia"; break; case "Ukraina": href = "/k/ukraina"; break; case "Gospodarka": href = "/k/gospodarka"; break; case "Podróże": href = "/k/podroze"; break; default: null; } href += settings.categoryRedirectToMicroblogButtonFilter; const microblogButtonHtml = `<li class="wykopxs wykopx_categories_microblog_li"><a class="wykopx_categories_microblog_a" href="${href}">M</a></li>`; item.insertAdjacentHTML('afterend', microblogButtonHtml); }); } if (document.querySelectorAll('section.links div.content ul.buckets .wykopx_categories_microblog_a').length == 0) { document.querySelectorAll('section.links div.content ul.buckets li').forEach(function (item) { let href = item.querySelector("a").getAttribute("href"); href = href.replaceAll("/mikroblog", ""); href += settings.categoryRedirectToMicroblogButtonFilter; const microblogButtonHtml = `<li class="wykopxs wykopx_categories_microblog_li"><a class="wykopxs wykopx_categories_microblog_a" href="${href}"></a></li>`; item.insertAdjacentHTML('afterend', microblogButtonHtml); }); } } // otwieranie powiadomienia SPM w nowej karcie // REMOVED in WykopXS 3.0 /* if (wykopxSettings.getPropertyValue("--middleClickOpensNotificationsInNewTab")) { // środkowy przycisk na powiadomieniu otwiera je w nowej karcie body.addEventListener('mousedown', function(e1) { if (e1.target.closest('section.notifications-stream section.notify') && e1.which === 2) { let target = e1.target; target.addEventListener('mouseup', function(e2) { if (e1.target === e2.target) { let url_to_open = target.querySelector('a[href^="/wpis/"]').getAttribute('href'); let tab_handle = window.open(url_to_open, '_blank'); // tab_handle.blur(); //window.focus(); if (window.CustomEvent) { var e3 = new CustomEvent('middleclick', {bubbles: true, cancelable: true}); e2.target.dispatchEvent(e3); } else if (document.createEvent) { var e3 = document.createEvent('HTMLEvents'); e3.initEvent('middleclick', true, true); e2.target.dispatchEvent(e3); } } }, {once: true}); } }); } */ // otwieranie obrazka w nowej karcie klikając wybrany przycisk myszy if (settings.mouseClickOpensImageInNewTab != "nie_otwieraj") { let detected_event_click; let event_trigger_type; if (settings.mouseClickOpensImageInNewTab == "lewy_przycisk_myszy") { detected_event_click = 1; event_trigger_type = "wykopx_leftclick"; } if (settings.mouseClickOpensImageInNewTab == "srodkowy_przycisk_myszy") { detected_event_click = 2; event_trigger_type = "wykopx_middleclick"; } if (settings.mouseClickOpensImageInNewTab == "prawy_przycisk_myszy") { detected_event_click = 3; event_trigger_type = "wykopx_rightclick"; } body.addEventListener('mousedown', function (e1) { if (e1.which === detected_event_click && e1.target?.tagName === 'IMG' && e1.target?.src?.startsWith('https://wykop.pl/cdn/')) { const sectionEntryPhoto = e1.target.closest('section.entry section.entry-photo'); if (sectionEntryPhoto) { e1.preventDefault(); consoleX("Kliknięto przycisk myszy: " + e1.which, 1); e1.target.addEventListener('mouseup', function (e2) { e2.preventDefault(); if (e1.target === e2.target) { let url_to_open = sectionEntryPhoto.querySelector('a[href^="https://wykop.pl/cdn/"]').getAttribute('href'); window.open(url_to_open, '_blank'); if (window.CustomEvent) { var e3 = new CustomEvent(event_trigger_type, { bubbles: true, cancelable: true }); e2.target.dispatchEvent(e3); } else if (document.createEvent) { var e3 = document.createEvent('HTMLEvents'); e3.initEvent(event_trigger_type, true, true); e2.target.dispatchEvent(e3); } } }, { once: true }); } } }); } /* checking for new versions */ // getIntegerVersionNumber("2.50.3") -> 2503 function getIntegerVersionNumber(versionString) { let arr = versionString.split("."); let result = arr[0] * 1000 + arr[1] * 10 + arr[2] * 1; return result; } async function checkVersionForUpdates() { // if (!dev) console.clear(); consoleX("Sprawdzanie aktualizacji Wykop X Style i Wykop XS..."); try { const response = await fetch(`https://update.wykopx.pl/xs/wykopxs?${currentVersion}`); // wykopxs?3.0.0 const newestWykopXSVersion = await response.text(); if (getIntegerVersionNumber(currentVersion) >= getIntegerVersionNumber(newestWykopXSVersion)) { consoleX(`✅ Masz najnowszą wersję skryptu Wykop XS v.${currentVersion}`); } else { addWykopXSNewVersionAvailableToast(); consoleX(`🆕 Dostępna jest nowa wersja Wykop XS v. ${newestWykopXSVersion} Możesz wejść na http://script.wykopx.pl i zaktualizować skrypt. Wersja, którą masz u siebie to Wykop XS v.${currentVersion}`); } } catch (error) { } if (settings.versor == "style" || settings.versor == "blank") { try { const response = await fetch(`https://update.wykopx.pl/xs/wykopx${settings.versor}?${settings.version}`); // wykopxstyle?3.0.0 | wykopxblank?3.0.0 const newestWykopXStyleVersion = await response.text(); if (getIntegerVersionNumber(settings.version) >= getIntegerVersionNumber(newestWykopXStyleVersion)) { consoleX(`✅ Masz najnowszą wersję styli Wykop X ${capitalizeFirstLetter(settings.versor)} v.${settings.version}`); } else { addWykopXStyleNewVersionAvailableToast(); consoleX(`🆕 Dostępna jest nowa wersja styli Wykop X ${capitalizeFirstLetter(settings.versor)} v.${newestWykopXStyleVersion} Możesz wejść na http://${settings.versor}.wykopx.pl i zaktualizować je. Wersja, którą masz u siebie to Wykop X ${capitalizeFirstLetter(settings.versor)} v.${settings.version}`); } } catch (error) { } } } function hideWykopXSPromo() { consoleX("hideWykopXSPromo()", 1) let style = document.createElement('style'); style.innerHTML = `body div.main-content section > section.sidebar::after { display: none !important; }`; head.appendChild(style); } function addWykopXPromoBanner() { consoleX("addWykopXPromoBanner()", 1) let targetElement = document.querySelector('section.sidebar > footer'); if (targetElement) { const wykopxpromo = document.createElement('section'); const wykopxpromolink = document.createElement('a'); wykopxpromolink.href = "http://xstyle.wykopx.pl/" wykopxpromolink.target = "wykopx" wykopxpromo.appendChild(wykopxpromolink); wykopxpromo.classList.add("wykopx_promo", "wykopx_promo_banner"); targetElement.parentNode.insertBefore(wykopxpromo, targetElement); } } function addWykopXSNewVersionAvailableToast() { consoleX("addWykopXSNewVersionAvailableToast()", 1) // <a href="http://script.wykopx.pl" target="_blank" style="color: #fff!important;"> let wykopxsnewversionavailabletoast = ` <aside class="wykopxs_new_version wykopxs_info_bar"> <span class="wykopxs_new_version_first"> Dostępna jest nowa wersja skryptu Wykop XS. </span> <a href="https://greasyfork.org/scripts/458860-wykop-xs/code/Wykop%20XS.user.js" target="_blank" style="color: #fff!important;"> Zaktualizuj Wykop XS </a> <span class="wykopxs_new_version_second"> do najnowszej wersji </span> <footer> Twoja wersja Wykop XS to v.${currentVersion} </footer> </aside>`; document.querySelector('body > section > header.header').insertAdjacentHTML('afterend', wykopxsnewversionavailabletoast); } function addWykopXStyleNewVersionAvailableToast() { consoleX("addWykopXStyleNewVersionAvailableToast()", 1) let wykopxstylenewversionavailabletoast = ""; if (settings.versor == "style") { wykopxstylenewversionavailabletoast = ` <aside class="wykopxs_new_version wykopxs_info_bar"> <span class="wykopxs_new_version_first">Dostępna jest nowa wersja styli Wykop X Style</strong>. </span> <a href="https://userstyles.world/style/8174/wykop-x-style" target="_blank" style="color: #fff!important;"> Zaktualizuj Wykop X Style </a> <span class="wykopxs_new_version_second">do najnowszej wersji</span> <footer>Twoja wersja Wykop X Style to v.${settings.version}</footer> </aside>`; } else if (settings.versor == "blank") { wykopxstylenewversionavailabletoast = ` <aside class="wykopxs_new_version wykopxs_info_bar"> <span class="wykopxs_new_version_first">Dostępna jest nowa wersja styli Wykop X Blank</strong>.</span> <a href="https://userstyles.world/style/8174/wykop-x-style" target="_blank" style="color: #fff!important;"> Zaktualizuj Wykop X Blank </a> <span class="wykopxs_new_version_second">do najnowszej wersji</span> <footer>Twoja wersja Wykop X Style to v.${settings.version}</footer> </aside>`; } let div = document.createElement('div'); div.innerHTML = wykopxstylenewversionavailabletoast; let newElement = div.firstChild; let header = document.querySelector('body > section > header.header'); header.parentNode.insertBefore(newElement, header.nextSibling); } function addWykopXBlockerNewVersionAvailableToast() { consoleX("addWykopXBlockerNewVersionAvailableToast()", 1) let wykopxblockernewversionavailabletoast = ` <aside class="wykopxs_new_version wykopxs_info_bar"> <span class="wykopxs_new_version_first">Dostępna jest nowa wersja styli Wykop X Blocker</strong>. </span> <a href="https://userstyles.world/style/" target="_blank" style="color: #fff!important;"> Zaktualizuj Wykop X Blocker </a> <span class="wykopxs_new_version_second">do najnowszej wersji</span> <footer>Twoja wersja Wykop X Blocker to v.${settings.xblocker}</footer> </aside>`; let div = document.createElement('div'); div.innerHTML = wykopxblockernewversionavailabletoast; let newElement = div.firstChild; let header = document.querySelector('body > section > header.header'); header.parentNode.insertBefore(newElement, header.nextSibling); } const unreadNotifications = { tags: 0, tags_new_entry_with_observed_tag: 0, tags_new_link_with_observed_tag: 0, entries: 0, pm: 0, total: 0, }; // ZLICZA NOWE POWIADOMIENIA Z MENU OD 1 DO 5+ function countNumberOfNotificationsOnDesktop() { consoleX(`countNumberOfNotificationsOnDesktop()`, 1) unreadNotifications.tags = unreadNotifications.tags_new_entry_with_observed_tag = unreadNotifications.tags_new_link_with_observed_tag = unreadNotifications.entries = unreadNotifications.pm = unreadNotifications.total = 0; let elements = document.querySelectorAll('header .right ul li.dropdown'); elements.forEach(function (element) { element.classList.remove('unread_5', 'unread_4', 'unread_3', 'unread_2', 'unread_1'); }); let li_dropdown = document.querySelectorAll("header .right ul li.dropdown:has(a.new)"); li_dropdown.forEach(function (dropdown) { const lastWord = dropdown.className.split(" ").pop(); let numberOfNotifications = 0; let notifies = dropdown.querySelectorAll(".notify:not(.read)"); notifies.forEach(function (notify) { ++numberOfNotifications; notify.classList.add(`unread_${numberOfNotifications}`); if (lastWord == "tags") { ++unreadNotifications["total"]; if (notify.querySelector(`div.content p.new-entry-with-observed-tag`)) { ++unreadNotifications["tags_new_entry_with_observed_tag"]; ++unreadNotifications["tags"]; ++unreadNotifications["total"]; } else if (notify.querySelector(`div.content p.new-link-with-observed-tag`)) { ++unreadNotifications["tags_new_link_with_observed_tag"]; ++unreadNotifications["tags"]; ++unreadNotifications["total"]; } } else if (lastWord == "entries") { ++unreadNotifications["entries"]; ++unreadNotifications["total"]; } }); let parentNotification = dropdown.closest(`.notifications.dropdown`); if (parentNotification) { parentNotification.classList.add(`unread_${numberOfNotifications}`); } }); if (unreadNotifications["tags"] > 0) { consoleX(`Liczba nowych powiadomień z obserwowanych tagów: ${unreadNotifications["tags"]} (w tym ${unreadNotifications["tags_new_entry_with_observed_tag"]} z wpisów i ${unreadNotifications["tags_new_link_with_observed_tag"]} ze znalezisk)`, 1); } if (unreadNotifications["entries"] > 0) { consoleX(`Liczba nowych zawołań: ${unreadNotifications["entries"]}`, 1); } let li_pm_dropdown = document.querySelectorAll("header .right ul li.pm.dropdown"); li_pm_dropdown.forEach(function (dropdown) { if (dropdown.querySelector('a.new')) { let numberOfNotifications = 0; // liczba powiadomień o wiadomościach PM let unreadItems = dropdown.querySelectorAll(".item.unread"); unreadItems.forEach(function (item, index) { ++numberOfNotifications; ++unreadNotifications["total"]; item.classList.add(`unread_${numberOfNotifications}`); }); let parentDropdown = dropdown.closest(`.pm.dropdown`); if (parentDropdown) { parentDropdown.classList.add(`unread_${numberOfNotifications}`); } unreadNotifications["pm"] = numberOfNotifications; // if(dev) console.log(`Liczba nowych wiadomości: ${unreadNotifications["pm"]}`); } }); if (unreadNotifications.tags > 0) { createProfileDropdownMenuItem( { text: `Powiadomienia z #tagów: (${unreadNotifications.tags < 25 ? unreadNotifications.tags : "25+"})`, title: "Masz nowe powiadomienia z obserwowanych #tagów", className: `wykopx_notifications_tags`, id: undefined, url: "/powiadomienia/tagi", target: "_self", icon: null, number: unreadNotifications.tags < 25 ? unreadNotifications.tags : "25+" }) } if (unreadNotifications.entries > 0) { createProfileDropdownMenuItem( { text: `Zawołania w komentarzach: (${unreadNotifications.entries < 25 ? unreadNotifications.entries : "25+"})`, title: "Zawołano Cię w komentarzu", className: `wykopx_notifications_entries`, id: undefined, url: "/powiadomienia/moje", target: "_self", icon: null, number: unreadNotifications.entries < 25 ? unreadNotifications.entries : "25+" }) } if (unreadNotifications.pm > 0) { createProfileDropdownMenuItem( { text: `Nowe wiadomości: (${unreadNotifications.pm < 25 ? unreadNotifications.pm : "25+"})`, title: "Masz nowe, nieprzeczytane wiadomości prywatne", className: `wykopx_notifications_pm`, id: undefined, url: "/wiadomosci", target: "_self", icon: null, number: unreadNotifications.pm < 25 ? unreadNotifications.pm : "25+" }) } if (settings.tabChangeEnabled) executeTabAndFaviconChanges(); } function addWykopXButtonsToNavBar() { consoleX("addWykopXButtonsToNavBar()", 1) // createNewNavBarButton({ // position: "left", // text: "Czat", // title: `Otwórz mikroczat.pl ${promoString}`, // class: "open_mikroczat", // wykopx_open_mikroczat_li // hideWithoutXStyle: false, // url: mikroczatDomain, // target: "mikroczat", // icon: "https://i.imgur.com/9PvHlaA.png", // number: null, // }) if (settings.myWykopInTopNavJS) { createNewNavBarButton({ position: "left", text: "Mój Wykop", title: `Mój Wykop ${promoString}`, class: "mywykop", // wykopx_mywykop_li hideWithoutXStyle: false, url: "/obserwowane", target: "_self", icon: null, number: null, data: "data-v-5182b5f6", }) } if (settings.hitsInTopNavJS) { createNewNavBarButton({ position: "left", text: "Hity", title: `Hity ${promoString}`, class: "hits", hideWithoutXStyle: false, url: "/hity", target: "_self", icon: null, number: null, data: "data-v-5182b5f6", }) } if (settings.favoritesInTopNavJS) { createNewNavBarButton({ position: "left", text: "Ulubione", title: `Ulubione ${promoString}`, class: "favorites", hideWithoutXStyle: false, url: "/ulubione", target: "_self", icon: null, number: null, data: "data-v-5182b5f6", }) } if (settings.addNewLinkInTopNavJS) { createNewNavBarButton({ position: "left", text: "+", title: `Dodaj nowe Znalezisko ${promoString}`, class: ["add_new_link", "plus"], // wykopx_add_new_link_li wykopx_plus_li // a > wykopx_add_new_link wykopx_plus_button hideWithoutXStyle: false, url: "/dodaj-link", target: "_self", icon: null, number: null, data: "data-v-5182b5f6", insertAfter: `li:has(a[href="/wykopalisko"])` }) } if (settings.addNewEntryInTopNavJS) { createNewNavBarButton({ position: "left", text: "+", title: `Dodaj nowy wpis na Mirko ${promoString}`, class: ["add_new_entry", "plus"], // wykopx_add_new_entry_li wykopx_plus_li // a > wykopx_add_new_entry wykopx_plus_button hideWithoutXStyle: false, url: "/mikroblog/#dodaj", target: "_self", icon: null, number: null, data: "data-v-5182b5f6", insertAfter: `li:has(a[href="/mikroblog"])` }) } // TODO IF /* createNewNavBarButton({ position: "left", text: "Wykop X Style", title: `Zainstaluj style CSS "𝗪𝘆𝗸𝗼𝗽 𝗫 𝗦𝘁𝘆𝗹𝗲" w rozszerzeniu Stylus i odkryj setki dodatkowych funkcji zmieniających i naprawiających Wykop`, class: ["promo", "install_wykopx"], // wykopx_promo (ukrywane przez X Style) wykopx_install_wykopx_li hybrid" | a > wykopx_promo wykopx_install_wykopx_button hybrid hideWithoutXStyle: false, url: "https://userstyles.world/search?q=Wykop+X+Style+3&category=&sort=mostinstalls", target: "_blank", icon: null, number: null, data: "data-v-5182b5f6", }) */ addQuickLinksToNavBar(); } // QUICK LINKS function addQuickLinksToNavBar() { consoleX("addQuickLinksToNavBar()", 1) if (settings.quickLinksEnable == true) { let wxs_quick_links = document.getElementById("wxs_quick_links"); if (wxs_quick_links == null) { wxs_quick_links = document.createElement('div'); wxs_quick_links.id = "wxs_quick_links"; // wxs_quick_links.classList.add("wykopxs"); // nie dodajemy bo domyslnie wlaczone wxs_quick_links.innerHTML = ` <nav class="home"> <section> <span> <a href="/" target="_self" title="Wykop X: Przejdź na stronę główną Wykopu">Główna</a> </span> <div> <a href="/najnowsze" target="_self" title="Wykop X: Najnowsze znaleziska, które dostały się na główną">Najnowsze</a> <a href="/aktywne" target="_self" title="Wykop X: Najpopularniejsze znaleziska na stronie głównej z ostatnich 24 godzin">Aktywne</a> </div> </section> <section> <span> <a href="/hity" target="_self">Hity</a> </span> <div> <a href="/hity/dnia" target="_self">Dnia</a> <a href="/hity/tygodnia" target="_self">Tygodnia</a> <a href="/hity/miesiaca" target="_self">Miesiąca</a> <a href="/hity/roku" target="_self">Roku</a> </div> </section> <section> <span>Ulubione</span> <div> <a href="/ulubione/znaleziska" target="_self" title="Wykop X: Znaleziska dodane przez Ciebie do Ulubionych">Znaleziska</a> <a href="/ulubione/komentarze-znaleziska" target="_self" title="Wykop X: Komentarze pod znaleziskami dodane przez Ciebie do Ulubionych">Komentarze do znalezisk</a> </div> </section> </nav> <nav class="upcoming"> <section> <span>Dodaj</span> <div> <a href="/dodaj-link" target="_self" title="Wykop X: Dodaj nowe znalezisko (link do strony internetowej)">Nowe znalezisko</a> </div> </section> <section> <span>Wykopalisko</span> <div> <a href="/wykopalisko/najnowsze" target="_self">Najnowsze</a> <a href="/wykopalisko/aktywne" target="_self">Aktywne</a> <a href="/wykopalisko/wykopywane" target="_self">Wykopywane</a> <a href="/wykopalisko/komentowane" target="_self">Komentowane</a> </div> <span>Moja aktywność</span> <div> <a href="/ludzie/${loggedUser.username}/znaleziska/dodane" target="_self">Moje znaleziska</a> <a href="/ludzie/${loggedUser.username}/znaleziska/komentowane" target="_self">Komentowane</a> <a href="/ludzie/${loggedUser.username}/znaleziska/wykopane" target="_self">Wykopane</a> <a href="/ludzie/${loggedUser.username}/znaleziska/zakopane" target="_self">Zakopane</a> </div> </section> <section> <span>Ulubione</span> <div> <a href="/ulubione/znaleziska" target="_self" title="Wykop X: Znaleziska dodane przez Ciebie do Ulubionych">Znaleziska</a> <a href="/ulubione/komentarze-znaleziska" target="_self" title="Wykop X: Komentarze pod znaleziskami dodane przez Ciebie do Ulubionych">Komentarze do znalezisk</a> </div> </section> </nav> <nav class="hits"> <section> <span>Hity</span> <div> <a href="/hity/dnia" target="_self">Dnia</a> <a href="/hity/tygodnia" target="_self">Tygodnia</a> <a href="/hity/miesiaca" target="_self">Miesiąca</a> <a href="/hity/roku" target="_self">Roku</a> </div> </section> <section> <span>Archiwum</span> <div> <a href="/hity/2020" target="_self">2020</a> <a href="/hity/2021" target="_self">2021</a> <a href="/hity/2022" target="_self">2022</a> <a href="/hity/2023" target="_self">2023</a> </div> </section> </nav> <nav class="microblog"> <section> <span>Dodaj</span> <div> <a href="/mikroblog/#dodaj" target="_self" title="Wykop X: Dodaj nowy wpis na Mikroblogu">Nowy wpis na Mirko</a> </div> </section> <section> <span>Mikroblog</span> <div> <a href="/mikroblog/najnowsze" target="_self" title="Wykop X: Najnowsze wpisy na Mikroblogu">Najnowsze</a> <a href="/mikroblog/aktywne" target="_self" title="Wykop X: Nowe, angażujące wpisy na Mikroblogu">Aktywne</a> </div> </section> <section> <span> <a href="/mikroblog/gorace" target="_self" title="Wykop X: Przejdź na ostatnio wybrane gorące">Gorące</a> </span> <div> <a href="/mikroblog/gorace/2" class="wxs_quicklink_short" target="_self" title="Wykop X: Najbardziej gorące wpisy z ostatnich 2 godzin">2h</a> <a href="/mikroblog/gorace/6" class="wxs_quicklink_short" target="_self" title="Wykop X: Najbardziej gorące wpisy z ostatnich 6 godzin">6h</a> <a href="/mikroblog/gorace/12" class="wxs_quicklink_short" target="_self" title="Wykop X: Najbardziej gorące wpisy z ostatnich 12 godzin">12h</a> <a href="/mikroblog/gorace/24" class="wxs_quicklink_short" target="_self" title="Wykop X: Najbardziej gorące wpisy z ostatnich 24 godzin">24h</a> </div> </section> <section> <span> Moje Mirko </span> <div> <a href="/ludzie/${loggedUser.username}/wpisy/dodane" target="_self">Moje wpisy</a> <a href="/ludzie/${loggedUser.username}/wpisy/komentowane" target="_self">Komentowane</a> <a href="/ludzie/${loggedUser.username}/wpisy/plusowane" target="_self">Zaplusowane</a> </div> </section> <section> <span>Ulubione</span> <div> <a href="/ulubione/wpisy" target="_self">Wpisy</a> <a href="/ulubione/komentarze-wpisy" target="_self">Komentarze do wpisów</a> </div> </section> </nav> <nav class="mywykop"> <section> <span>Mój Wykop</span> <div> <a href="/obserwowane/" target="_self">Wszystko</a> <a href="/obserwowane/tagi" target="_self">#Tagi</a> <a href="/obserwowane/profile" target="_self">@Profile</a> </div> </section> <section> <span>Moja aktywność</span> <span>Mikroblog</span> <div> <a href="/ludzie/${loggedUser.username}/wpisy/dodane" target="_self">Moje wpisy</a> <a href="/ludzie/${loggedUser.username}/wpisy/komentowane" target="_self">Moje komentarze</a> <a href="/ludzie/${loggedUser.username}/wpisy/plusowane" target="_self">Moje plusy</a> </div> </section> <section> <span>Znaleziska</span> <div> <a href="/ludzie/${loggedUser.username}/znaleziska/dodane" target="_self">Moje znaleziska</a> <a href="/ludzie/${loggedUser.username}/znaleziska/komentowane" target="_self">Moje komentarze</a> <a href="/ludzie/${loggedUser.username}/znaleziska/wykopane" target="_self">Wykopane</a> <a href="/ludzie/${loggedUser.username}/znaleziska/zakopane" target="_self">Zakopane</a> </div> </section> </nav> <nav class="favorites"> <section> <span>Ulubione</span> <div> <a href="/ulubione" target="_self">Wszystko</a> <a href="/ulubione/znaleziska" target="_self">Znaleziska</a> <a href="/ulubione/komentarze-znaleziska" target="_self">Komentarze do znalezisk</a> <a href="/ulubione/wpisy" target="_self">Wpisy</a> <a href="/ulubione/komentarze-wpisy" target="_self">Komentarze do wpisów</a> </div> </section> </nav> <nav class="profile_links"> <section> <span>Mój profil</span> <div> <a href="/ludzie/${loggedUser.username}" target="_self">Profil</a> <a href="/ludzie/${loggedUser.username}/znaleziska/dodane" target="_self">Dodane znaleziska</a> <a href="/ludzie/${loggedUser.username}/znaleziska/komentowane" target="_self">Komentowane znaleziska</a> <a href="/ludzie/${loggedUser.username}/znaleziska/wykopane" target="_self">Wykopane</a> <a href="/ludzie/${loggedUser.username}/znaleziska/zakopane" target="_self">Zakopane</a> </div> </section> </nav> <nav class="profile_entries"> <section> <span>Mój profil</span> <div> <a href="/ludzie/${loggedUser.username}/wpisy/dodane" target="_self">Dodane wpisy</a> <a href="/ludzie/${loggedUser.username}/wpisy/komentowane" target="_self">Komentowane wpisy</a> <a href="/ludzie/${loggedUser.username}/wpisy/plusowane" target="_self">Zaplusowane</a> </div> </section> </nav> <nav class="profile_observed"> <section> <span>Mój profil</span> <div> <a href="/ludzie/${loggedUser.username}/obserwowane/profile" target="_self">Obserwowani @użytkownicy</a> <a href="/ludzie/${loggedUser.username}/obserwowane/tagi" target="_self">Obserwowane #tagi</a> </div> </section> </nav> <nav class="add_new"> <section> <span>Dodaj</span> <div> <a href="/dodaj-link" target="_self" title="Wykop X: Dodaj nowe znalezisko (link do strony internetowej)">Nowe znalezisko</a> <a href="/mikroblog/#dodaj" target="_self" title="Wykop X: Dodaj nowy wpis na Mikroblogu">Nowy wpis na Mirko</a> </div> </section> </nav> `; document.querySelector('body > section > header.header > div.left').appendChild(wxs_quick_links); } } } // options: { position: "left", "right", "center", // text: ``, title: ``, : ``, id: null, url: null, // target: "_blank", icon: null, number: null, // insertAfter: selectorQuery, showWithoutXStyle: true // data: "data-v-5182b5f6" // data-v-5182b5f6 // number-nieuzwane function createNewNavBarButton(options) { consoleX(`createNewNavBarButton()`, 1) let nav_ul; if (options.position == "left") nav_ul = document.querySelector("body header div.left nav.main ul"); else if (options.position == "center") nav_ul = document.querySelector("body header div.right nav aside"); // doodle /*<aside title="Komentuj ważne wydarzenia" class="doodle"> <div class="v-portal"></div> <a href="/tag/sejm/wpisy"> <div class="vue-portal-target"> <img src="/static/img/svg/doodles/gov.svg" alt=""> Komentuj ważne wydarzenia </div> </a> </aside>*/ else nav_ul = document.querySelector("body header div.right nav ul"); // brak na wersji mobilnej if (nav_ul) { let nav_ul_li = nav_ul.querySelector(`li.wykopx_${options.class}_li`); if (!nav_ul_li) { nav_ul_li = document.createElement("li"); if (options.data) nav_ul_li.setAttribute(options.data, null); if (options.hideWithoutXStyle == true) nav_ul_li.classList.add("wykopxs"); addWykopXSClassesToElement(nav_ul_li, options.class, "li") // class="wykopx_aaaaaa_li" let nav_ul_li_a = document.createElement("a"); nav_ul_li.dataset["v-6c2d0fdd"] = ""; nav_ul_li_a.dataset["v-6c2d0fdd"] = ""; if (options.url) nav_ul_li_a.setAttribute("href", options.url); if (options.href) nav_ul_li_a.setAttribute("href", options.href); if (options.target) nav_ul_li_a.setAttribute("target", options.target); if (options.title) nav_ul_li_a.setAttribute("title", options.title); if (options.data) nav_ul_li_a.setAttribute(options.data, null); nav_ul_li_a.classList.add("hybrid"); if (options.class) addWykopXSClassesToElement(nav_ul_li_a, options.class); let nav_ul_li_a_span = document.createElement("span"); nav_ul_li_a_span.innerHTML = options.text; nav_ul_li_a.appendChild(nav_ul_li_a_span); nav_ul_li.appendChild(nav_ul_li_a); if (options.insertAfter != null) { let section = nav_ul.querySelector(options.insertAfter); section.insertAdjacentElement('afterend', nav_ul_li); } else { nav_ul.appendChild(nav_ul_li); } } } } // returnWykopXSClassesString("klasa", "li") >> class="wykopx_klasa_li" // returnWykopXSClassesString(["klasa1", "klasa2"]) class="wykopx_klasa1 wykopx_klasa2" function addWykopXSClassesToElement(element, inputClassOrArray, suffix = null) { consoleX("addWykopXSClassesToElement()", 1) if (inputClassOrArray) { if (typeof inputClassOrArray === 'string') { element.classList.add(`wykopx_${inputClassOrArray}${suffix != null ? "_" + suffix : ""}`); } else if (Array.isArray(inputClassOrArray) && inputClassOrArray.every(item => typeof item === 'string')) { inputClassOrArray.map(item => { element.classList.add(`wykopx_${item}${suffix != null ? "_" + suffix : ""}`); }); } } } // options: { text: null, title: null, className: ``, id: null, url: null, target: "_blank", icon: null, number: null function createProfileDropdownMenuItem(options) { consoleX(`createProfileDropdownMenuItem()`, 1) let dropdownBody = document.querySelector("body header div.right nav ul li.account.dropdown ul.dropdown-body"); if (dropdownBody) { let dropdownItem = dropdownBody.querySelector(`li.${options.className}_li`); if (!dropdownItem) { // dropdownItem.remove(); let clonedDropdownItem = dropdownBody.querySelector("li.settings").cloneNode(true); if (options.className) { clonedDropdownItem.setAttribute("class", `${options.className}_li`); let clonedDropdownItemLink = clonedDropdownItem.querySelector("a"); clonedDropdownItemLink.setAttribute("class", `${options.className}_button`); if (options.url) clonedDropdownItemLink.setAttribute("href", options.url); else if (options.href) clonedDropdownItemLink.setAttribute("href", options.href); else clonedDropdownItemLink.removeAttribute("href"); if (options.target) clonedDropdownItemLink.setAttribute("target", options.target); if (options.id) clonedDropdownItemLink.setAttribute("id", options.id); if (options.title) clonedDropdownItemLink.setAttribute("title", options.title); if (options.text) clonedDropdownItemLink.textContent = options.text; dropdownBody.appendChild(clonedDropdownItem); } } } else // niezalogowany brak menu, zamiast tego przyciski Zaloguj/Zarejestruj { createNewNavBarButton({ position: "left", text: options.text, title: options.title, class: options.className, hideWithoutXStyle: options.hideWithoutXStyle, url: options.url, target: options.target, icon: options.icon, number: options.number }) } } // wyswietla sie tylko 25 powiadomien, wiec powinno byc 25+ function addNotificationSummaryButtonToNavBar() { consoleX("addNotificationSummaryButtonToNavBar()", 1) let mojeLubTagi = document.querySelector('header .right ul li.account.dropdown ul.dropdown-body li.notifications.new a')?.getAttribute('href'); let wykopx_notification_summary_url = "/powiadomienia/"; if (typeof mojeLubTagi == "string") { mojeLubTagi = mojeLubTagi.split("/").pop(); if (mojeLubTagi == "tagi") { createProfileDropdownMenuItem( { text: `Powiadomienia z #tagów`, title: "Masz nowe powiadomienia z obserwowanych #tagów", className: `wykopx_notifications_tags`, id: undefined, url: "/powiadomienia/tagi", target: "_self", icon: null, number: null }) } if (mojeLubTagi == "moje") { createProfileDropdownMenuItem( { text: `Powiadomienia z #tagów`, title: "Masz nowe powiadomienia z obserwowanych #tagów", className: `wykopx_notifications_tags`, id: undefined, url: "/powiadomienia/tagi", target: "_self", icon: null, number: null }) createProfileDropdownMenuItem( { text: `Zawołania w komentarzach`, title: "Zawołano Cię w komentarzu", className: `wykopx_notifications_entries`, id: undefined, url: "/powiadomienia/moje", target: "_self", icon: null, number: null }) } wykopx_notification_summary_url += mojeLubTagi; } let li = document.createElement("li"); li.setAttribute("class", "wykopxs wykopx_notification_summary notifications dropdown"); li.setAttribute("title", `Nowe powiadomienia ${promoString}`); let a = document.createElement("a"); a.setAttribute("href", wykopx_notification_summary_url); let figure = document.createElement("figure"); a.appendChild(figure); li.appendChild(a); topNavHeaderRightElement.insertAdjacentElement("afterbegin", li); } // TRYB NOCNY W BELCE NAWIGACYJNEJ function addNightModeButtonToNavBar() { if (settings.topNavNightSwitchButton) { consoleX("addNightModeButtonToNavBar()", 1) const wykopx_night_mode = `<li class="wykopxs wykopx_night_mode notifications dropdown" title="Przełącz pomiędzy trybem nocnym/dziennym ${promoString}"><a href="#"><figure></figure></a></li>`; topNavHeaderRightElement.insertAdjacentHTML('afterbegin', wykopx_night_mode); document.querySelector('.wykopx_night_mode').addEventListener('click', function () { const currentMode = localStorage.getItem('nightMode'); if (currentMode === null || currentMode === '0') { body.setAttribute('data-night-mode', 'true'); localStorage.setItem('nightMode', 1); if (mikroczatWindow && mikroczatDomain) mikroczatWindow.postMessage({ type: "nightMode", value: 1 }, mikroczatDomain); } else { body.removeAttribute('data-night-mode'); localStorage.setItem('nightMode', 0); if (mikroczatWindow && mikroczatDomain) mikroczatWindow.postMessage({ type: "nightMode", value: 0 }, mikroczatDomain); } }); } } function addExtraButtons() { consoleX("addExtraButtons()", 1) /* Przyciski dodawane tylko na górną belkę nawigacyjną */ const wykopx_wykopwnowymstylu_li = `<li class="wykopx_wykopwnowymstylu_li dropdown"><a href="/tag/wykopx" class="wykopx_wykopwnowymstylu_button" title="Przejdź na #wykopx"><span>#</span></a></li>`; const wykopx_microblog_mobile_li = `<li class="wykopx_microblog_mobile_li dropdown"><a href="/mikroblog" class="wykopx_microblog_mobile_button" title="Mikroblog ${promoString}"><figure> </figure></a></li>`; /* Te przyciski także na belce mobilnej */ const wykopx_mywykop_mobile_li = `<li data-v-1adb6cc8 class="wykopx_mywykop_mobile_li dropdown"><a data-v-1adb6cc8 href="/obserwowane" class="wykopx_mywykop_mobile_button" title="Mój Wykop ${promoString}"><span data-v-1adb6cc8><i data-v-1adb6cc8>Mój Wykop</i></span></a></li>`; const wykopx_profile_mobile_li = `<li data-v-1adb6cc8 class="wykopx_profile_mobile_li dropdown ${loggedUser.username}"><a data-v-1adb6cc8 href="/ludzie/${loggedUser.username}" class="wykopx wykopx_profile_button" title="Przejdź na swój profil ${loggedUser.username} ${promoString}"><span data-v-1adb6cc8><i data-v-1adb6cc8>Profil</i></span></a></li>`; const wykopx_messages_mobile_li = `<li data-v-1adb6cc8 class="wykopx_messages_mobile_li dropdown"><a data-v-1adb6cc8 href="/wiadomosci" class="wykopx wykopx_messages_button" title="Wiadomości ${promoString}"><span data-v-1adb6cc8><i data-v-1adb6cc8>Wiadomości</i></span></a></li>`; const wykopx_notifications_mobile_li = `<li data-v-1adb6cc8 class="wykopx_notifications_mobile_li dropdown"><a data-v-1adb6cc8 href="/powiadomienia" class="wykopx wykopx_notifications_button" title="Powiadomienia ${promoString}"><span data-v-1adb6cc8><i data-v-1adb6cc8>Powiadomienia</i></span></a></li>`; if (topNavHeaderRightElement) { topNavHeaderRightElement.insertAdjacentHTML('beforeend', wykopx_wykopwnowymstylu_li); if (settings.topNavMicroblogButton) topNavHeaderRightElement.insertAdjacentHTML('beforeend', wykopx_microblog_mobile_li); if (loggedUser !== null) { if (settings.topNavMyWykopButton) topNavHeaderRightElement.insertAdjacentHTML('beforeend', wykopx_mywykop_mobile_li); if (settings.topNavMessagesButton) topNavHeaderRightElement.insertAdjacentHTML('beforeend', wykopx_messages_mobile_li); if (settings.topNavNotificationsButton) topNavHeaderRightElement.insertAdjacentHTML('beforeend', wykopx_notifications_mobile_li); if (settings.topNavProfileButton) topNavHeaderRightElement.insertAdjacentHTML('beforeend', wykopx_profile_mobile_li); } } /* dolna belka mobilna */ if (settings.mobileNavBarHide == false) { const mobileNavbarUlElement = document.querySelector('body > section > nav.mobile-navbar > ul') if (mobileNavbarUlElement) { if (loggedUser !== null) { if (settings.mobileNavBarMyWykopButton) mobileNavbarUlElement.insertAdjacentHTML('beforeend', wykopx_mywykop_mobile_li); if (settings.mobileNavBarNotificationsButton) mobileNavbarUlElement.insertAdjacentHTML('beforeend', wykopx_notifications_mobile_li); if (settings.mobileNavBarMessagesButton) mobileNavbarUlElement.insertAdjacentHTML('beforeend', wykopx_messages_mobile_li); if (settings.mobileNavBarProfileButton) mobileNavbarUlElement.insertAdjacentHTML('beforeend', wykopx_profile_mobile_li); } } } } CSS += ` /* ikona extra MW Mój Wykop w panelu powiadomień */ header.header > .right > nav > ul > li { display: flex!important; height: 100%!important; justify-content: center; align-items: center; } ul > li.wykopx_microblog_mobile_li > a > figure, ul > li.wykopx_mywykop_mobile_li > a > span, ul > li.wykopx_profile_mobile_li > a > span, ul > li.wykopx_notifications_mobile_li > a > span, ul > li.wykopx_messages_mobile_li > a > span { display: flex!important; background-repeat: no-repeat; background-position: 0 10px; width: 20px; height: 100%; } ul > li.wykopx_microblog_mobile_li > a > figure { background-image: url('https://i.imgur.com/F8BqeCx.png'); } /* mój wykop */ ul > li.wykopx_mywykop_mobile_li > a > span { background-image: url('https://i.imgur.com/4oQuftz.png'); /* 20p */ background-image: url('https://i.imgur.com/qtGPe78.png'); /* 20p */ /*background-image: url('https://i.imgur.com/GoTmF0m.png'); background-image: url('https://i.imgur.com/7DArcw6.png'); */ } [data-night-mode] ul > li.wykopx_mywykop_mobile_li > a > span { background-image: url('https://i.imgur.com/qtGPe78.png'); } /* profile */ ul > li.wykopx_profile_mobile_li > a > span { background-image: url('https://i.imgur.com/XD7q4hY.png'); /* black*/ background-image: url('https://i.imgur.com/EpytPvb.png'); /* white*/ } [data-night-mode] ul > li.wykopx_profile_mobile_li > a > span { background-image: url('https://i.imgur.com/EpytPvb.png'); } /* wiadomosci */ ul > li.wykopx_messages_mobile_li > a > span { background-image: url('https://i.imgur.com/Yx1ZAYt.png'); /* black*/ background-image: url('https://i.imgur.com/dE4f85B.png'); /* white*/ } [data-night-mode] ul > li.wykopx_messages_mobile_li > a > figure { background-image: url('https://i.imgur.com/dE4f85B.png'); } /* powiadomienia */ ul > li.wykopx_notifications_mobile_li > a > span { background-image: url('https://i.imgur.com/UpYMDtr.png'); } header.header > .right > nav > ul > li > a > span > i { display: none; } /* wykopwnowymstylu */ header.header > .right > nav > ul > li.wykopx_wykopwnowymstylu_li > a > span { font-size: 1.2em; color: var(--x-inactive-button, rgba(255,255,255,0.3)); } header.header > .right > nav > ul > li.wykopx_wykopwnowymstylu_li > a:hover > span { color: white; } header.header > .right > nav > ul > li.wykopx_wykopwnowymstylu_li { display: none!important; }`; if (settings.topNavNightSwitchButton) { CSS += ` /* PRZYCISK TRYB NOCNY W BELCE NAWIGACYJNEJ */ header.header > .right > nav > ul > li.wykopx_night_mode figure { width: 20px!important; height: 20px!important; background: url("/static/img/svg/night-mode.svg") no-repeat center; } [data-night-mode] header.header > .right > nav > ul > li.wykopx_night_mode figure { background: url("/static/img/svg/day-mode.svg") no-repeat center; } `; } // DODAJ NOWY WPIS NA MIRKO /mikroblog/#dodaj function focusOnAddingNewMicroblogEntry() { consoleX(`focusOnAddingNewMicroblogEntry()`, 1) let wykop_url = new URL(document.URL); if (wykop_url.hash == "#dodaj") { // consoleX(`focusOnAddingNewMicroblogEntry()`, 1); document.querySelector(`section.microblog-page section.microblog section.editor div.content textarea`).focus(); } } /* ------ TAB TITLE AND WEBSITE FAVICON CHANGES --------- */ let pageTabTitleOriginal = document.title; let pageTabTitleProcessed = pageTabTitleOriginal; let tabTitles = new Map([ ["domyslny", " "], ["adres_url", " "], ["pusty_tytul", "ᅟᅟ"], ["wlasny", settings.tabChangeTitleCustom], ["wykop", "Wykop"], ["wykopx", "Wykop X"], ["digg", "News and Trending Stories Around the Internet | Digg"], ["google", "Google"], ["interia", "Interia — Polska i świat: informacje, sport, gwiazdy."], ["onet", "Onet – Jesteś na bieżąco"], ["reddit", "Reddit — Dive into anything"], ["wp", "Wirtualna Polska — Wszystko co ważne"], ["x", "Home / X"], ["youtube", "YouTube"], ]) const defaultWykopFaviconURL = "https://wykop.pl/static/img/favicons/favicon.png"; let tabFaviconsMap = new Map([ ["wykop", defaultWykopFaviconURL], ["wykop_white", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/W_white.png"], ["wykop_gray", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/W_black.png"], ["digg", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/digg.png"], ["google", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/google.svg"], ["interia", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/interia.ico"], ["onet", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/onet.png"], ["reddit", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/reddit.png"], ["wp", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/wp.png"], ["x", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/x.png"], ["youtube", "https://raw.githubusercontent.com/wykopx/wykopx-png/main/icons/favicons/youtube.ico"], ]) let tabSuffixesMap = new Map([ ["domyslny", ":: Wykop.pl"], ["dashwykoppl", "- Wykop.pl"], ["dashwykop", "- Wykop"], ["dashwykopx", "- Wykop X"], ["", ""], ]) /* TAB TITLE changeDocumentTitle() changeDocumentTitle("youtube") changeDocumentTitle("Example new title") */ function changeDocumentTitle(new_document_title) { consoleX(`changeDocumentTitle(${new_document_title})`, 1) // if(dev) console.log(`changeDocumentTitle() > start: document.title:`); // if(dev) console.log(document.title); // if(dev) console.log(`changeDocumentTitle() > start: pageTabTitleOriginal`); // if(dev) console.log(pageTabTitleOriginal); pageTabTitleProcessed = pageTabTitleOriginal; // sufix :: Wykop.pl if (settings.tabChangeTitleSuffix) pageTabTitleProcessed = pageTabTitleProcessed.replace(":: Wykop.pl", tabSuffixesMap.get(settings.tabChangeTitleSuffix)); // prefix if (settings.tabChangeTitlePrefix) pageTabTitleProcessed = `Wykop X - ${pageTabTitleProcessed}`; let tabTitleNotifications = ""; if (settings.tabChangeTitleShowNotificationsEnabled == true) { let notificationsTotalCount = 0; let tabNotificationsSeparated = ""; if (unreadNotifications["total"] > 0) { if (settings.tabChangeTitleShowNotificationsCountPM && unreadNotifications["pm"] > 0 || settings.tabChangeTitleShowNotificationsCountTagsNewLink && unreadNotifications["tags_new_link_with_observed_tag"] > 0 || settings.tabChangeTitleShowNotificationsCountTagsNewEntry && unreadNotifications["tags_new_entry_with_observed_tag"] > 0 || settings.tabChangeTitleShowNotificationsCountEntries && unreadNotifications["entries"] > 0) { let notificationsEmoji = ""; if (settings.tabChangeTitleShowNotificationsCountPM && unreadNotifications["pm"] > 0) { notificationsTotalCount += unreadNotifications["pm"]; notificationsEmoji = "✉"; // 🔗✉📧📩✉ 🖂 🖃 🖄 🖅 🖆 tabNotificationsSeparated += `${notificationsEmoji}${unreadNotifications["pm"]} `; } if (settings.tabChangeTitleShowNotificationsCountEntries && unreadNotifications["entries"] > 0) { notificationsTotalCount += unreadNotifications["entries"]; notificationsEmoji = "🕭"; // 🕭🔔 tabNotificationsSeparated += `${notificationsEmoji}${unreadNotifications["entries"]} `; } if (unreadNotifications["tags"] && settings.tabChangeTitleShowNotificationsCountTagsNewLink || settings.tabChangeTitleShowNotificationsCountTagsNewEntry) { notificationsEmoji = "#"; // #🏷 if (settings.tabChangeTitleShowNotificationsCountTagsNewLink && unreadNotifications["tags_new_link_with_observed_tag"] > 0) { notificationsTotalCount += unreadNotifications["tags_new_link_with_observed_tag"]; } if (settings.tabChangeTitleShowNotificationsCountTagsNewEntry && unreadNotifications["tags_new_entry_with_observed_tag"] > 0) { notificationsTotalCount += unreadNotifications["tags_new_entry_with_observed_tag"]; } tabNotificationsSeparated += `${notificationsEmoji}${unreadNotifications["tags"]} `; } if (settings.tabChangeTitleShowNotificationsCountSeparated) { tabTitleNotifications = tabNotificationsSeparated; // 📧 2 🔔 3 # 14 } else { tabTitleNotifications = notificationsTotalCount; // 19 } if (new_document_title == "pusty_tytul") // jesli pusty tytul — ikonki powiadomien bez nawiasow { tabTitleNotifications = `${tabTitleNotifications} ` // 📧 2 🔔 3 # 14 albo 19 } else { tabTitleNotifications = `${tabTitleNotifications} | ` // 📧 2 🔔 3 # 14 | albo 19 | } } } } let documentTitle = tabTitleNotifications; if (new_document_title != "domyslny") { if (tabTitles.has(new_document_title)) // selected title from Map { documentTitle += `${tabTitles.get(new_document_title)}`; } else { documentTitle += `${new_document_title}`; } } else { documentTitle += pageTabTitleProcessed; } document.title = documentTitle; // if(dev) console.log("changeDocumentTitle() > zmieniam document.title na: " + documentTitle); } // FAVICON ICO function changeDocumentFavicon(new_favicon = defaultWykopFaviconURL) { consoleX(`changeDocumentFavicon(new_favicon: "${new_favicon}")`, 1) let selectedFaviconURL = new_favicon; if (tabFaviconsMap.has(new_favicon)) selectedFaviconURL = tabFaviconsMap.get(new_favicon); // <link rel="icon" type="image/svg+xml" href="/static/img/favicons/favicon.svg"> // <link rel="alternate icon" type="image/png" href="/static/img/favicons/favicon.png"> const oldFaviconElement = head.querySelector('link[rel="icon"]'); if (oldFaviconElement && !oldFaviconElement.href.startsWith(selectedFaviconURL)) { head.removeChild(oldFaviconElement); const faviconLinkElement = document.createElement('link'); faviconLinkElement.rel = 'icon'; faviconLinkElement.type = 'image/x-icon'; // "image/svg+xml" "image/png" faviconLinkElement.href = selectedFaviconURL + '?=' + Math.random(); head.appendChild(faviconLinkElement); } const alternateFaviconElement = head.querySelector('link[rel="alternate icon"]'); if (alternateFaviconElement) { head.removeChild(alternateFaviconElement); } } function executeTabAndFaviconChanges() { consoleX(`executeTabAndFaviconChanges()`, 1); if (document.hidden || !settings.tabChangeOnlyOnHiddenState) { if (settings.tabChangeFaviconEnabled) changeDocumentFavicon(settings.tabChangeFaviconSelect); if (settings.tabChangeTitleEnabled) changeDocumentTitle(settings.tabChangeTitleSelect); } } // EVENT: KARTA JEST W TLE document.hidden == true // https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API // https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event function browserTabVisibilityChanged() { consoleX(`browserTabVisibilityChanged() -> ${document.visibilityState}`, 1); // if(dev) console.log("browserTabVisibilityChanged(): " + document.visibilityState) // document.visibilityState > "visible"/"hidden" // document.hidden > true/false if (document.hidden == false) { if (settings.wxsArchiveXNewestEntry && (wxs_newest_entry == 1 || wxs_newest_entry == 3)) runWithDelay(3000, getNewestEntryFromAPI); } if (settings.tabChangeEnabled) { if (document.hidden) { executeTabAndFaviconChanges(); // if(dev) console.log(`document.hidden -> true > document.visibilityState: ${document.visibilityState}`); } else { if (settings.tabChangeOnlyOnHiddenState) { if (settings.tabChangeTitleEnabled) changeDocumentTitle(pageTabTitleOriginal); if (settings.tabChangeFaviconEnabled) changeDocumentFavicon(); } } } } // EVENT LISTENER document.addEventListener("visibilitychange", browserTabVisibilityChanged, false); // ICO PNG GIF JPEG SVG // TITLE MUTATION let titleMutationObserver = new MutationObserver(mutationsList => { if (dev) console.log("titleMutationObserver ->") if (dev) console.log(mutationsList); for (let mutation of mutationsList) { if (mutation.type === 'childList') { let mutatedTitle = mutation.addedNodes[0].textContent; consoleX(`titleMutationObserver -> Nowy tytuł strony: ${mutatedTitle}`, 1); // if (mutatedTitle.endsWith(":: Wykop.pl")) // { // pageTabTitleOriginal = mutatedTitle; // if(dev) console.log(`mutatedTitle.endsWith(":: Wykop.pl")`); // } // if (!mutatedTitle.includes(specialCharacter)) // tytul nie zostal jeszcze zmieniony i dodane są liczby powiadomien zeby sie nie powtarzalo (1)(1) // { // pageTabTitleProcessed = mutatedTitle; // // if(dev) console.log(`!mutatedTitle.includes("specialCharacter")`); // } // titleMutationObserver.disconnect(); // executeTabAndFaviconChanges(); // titleMutationObserver.observe(document.querySelector('title'), { childList: true, }) // if(dev) console.log("pageTabTitleProcessed: " + pageTabTitleProcessed) } } }); // MUTATION OBSERVER titleMutationObserver.observe(document.querySelector('title'), { childList: true, }) // PLUSES OBSERVER function getVotesObject(sectionObjectElement, ratingBoxSection) { consoleX(`getVotesObject()`, 1); /* returns: { separated: false, votesUp: 50, votesUpPercent: 100, votesDown: 5, votesDownPercent: 0, votesCount: 45, votesAll: 55, voted: 0 votesUpPrevious: 49 votesDownPrevious: 4, plusesDelta: 1 minusesDelta: 1 commentsCount: 100, // liczba komentarzy dla znalezisk, wpisów i main-comments pod znaleziskami commentsHot: true // dla gorących znalezisk } { resource: "link" sectionObjectElement: <DOMElement>, ratingBox: <DOMElement>, link: <DOMElement>, id: 123456, link_id: 123456, } { resource: "entry" sectionObjectElement: <DOMElement>, ratingBox: <DOMElement>, entry: <DOMElement>, id: 123456, entry_id: 123456, } or { resource: "entry_comment" sectionObjectElement: <DOMElement> ratingBox: <DOMElement>, entry: <DOMElement>, // parent comment: DOMElement, id: 12345678, entry_id: 123456, // parent comment_id: 12345678, } or { resource: "link_subcomment" sectionObjectElement: DOMElement ratingBox: <DOMElement>, entry: <DOMElement>, id: 12345678, entry_id: 123456, link_id: 12345678, comment_id: 12345678123 parent_id: 1234567 // znalezisko parent_comment_id: 123456 // komentarz pod znaleziskiem parent_element: <DOMElement>, // komentarz fetchURL: 'https://wykop.pl/api/v3...' } ratingBoxSection.__vue__ { voted: 0 // czy zaglosowane down: 0 up: 278 value: 278 formattedValue: "278", separated: false id: 23456789 idParent: 1234567 linkId: 1234567 users: [{}, {}...], type: "entryComment" / "???" deleted: null author: "NadiaFrance" showBtn: true / false } */ let votesObject = { separated: false, votesUp: 0, votesDown: 0, votesCount: 0, votesAll: 0, votesCount: 0, votesAll: 0, votesDownPercent: 0, votesUpPercent: 100, voted: 0, commentsCount: 0, commentsHot: false, }; votesObject.sectionObjectElement = sectionObjectElement; // returns the section element above .rating-box votesObject.ratingBoxSection = ratingBoxSection; // returns .rating-box section //blocks.id = blocks.sectionObjectElement.__vue__.item.id; votesObject.id = ratingBoxSection.__vue__.id; votesObject.separated = ratingBoxSection.__vue__.separated; votesObject.votesUp = ratingBoxSection.__vue__.up; if (dev) console.log(votesObject.votesUp) votesObject.votesDown = ratingBoxSection.__vue__.down; votesObject.votesCount = votesObject.votesUp - votesObject.votesDown; // -10 (suma plusów i minusów nie dotyczy entry, entry_comment) votesObject.votesAll = votesObject.votesUp + votesObject.votesDown; // 30 (łączna liczba głosów nie dotyczy entry, entry_comment) votesObject.votesDownPercent = Math.ceil(votesObject.votesDown * 100 / votesObject.votesAll); // nie dotyczy entry, entry_comment votesObject.votesUpPercent = Math.ceil(votesObject.votesUp * 100 / votesObject.votesAll); // nie dotyczy entry, entry_comment zawsze 100% votesObject.voted = ratingBoxSection.__vue__.voted; /* block.commentsCount __vue__.item.comments = - znalezisko na stronie głównej i stronie znaleziska comments = { count: 42, hot: false } - na stronie mikrobloga i wpisie (na stronie Mikrobloga Array[2]) comments = { count: 142, items: Array[50] } komentarze nie mają "comments" */ if (votesObject?.sectionObjectElement?.__vue__?.item?.comments?.count) votesObject.commentsCount = votesObject.sectionObjectElement.__vue__.item.comments.count; if (votesObject?.sectionObjectElement?.__vue__?.item?.comments?.hot) votesObject.commentsHot = votesObject.sectionObjectElement.__vue__.item.comments.hot; if (votesObject.sectionObjectElement.__vue__.item.resource == "link") // znalezisko { votesObject.resource = "link"; votesObject.fetchURL = `https://wykop.pl/api/v3/links/${votesObject.id}`; // TODO votesObject.link_id = votesObject.id; votesObject.link = votesObject.sectionObjectElement; // parent = this votesObject.parent_element = votesObject.sectionObjectElement; // parent = this votesObject.parent_id = votesObject.id; votesObject.sectionObjectElement.dataset.wxs_resource = "link"; } else { if (votesObject.sectionObjectElement.__vue__.item.resource == "link_comment") { votesObject.comment_element = votesObject.sectionObjectElement; if (votesObject.comment_element.__vue__.item.parent.resource == "link_comment") // subkomentarz { votesObject.resource = "link_subcomment"; votesObject.comment_element.dataset.wxs_resource = "link_subcomment"; votesObject.comment_id = votesObject.comment_element.__vue__.item.id; votesObject.parent_id = votesObject.comment_element.__vue__.item.parent.link.id; // id znaleziska votesObject.parent_comment_id = votesObject.comment_element.__vue__.item.parent.id; // id nadkomentarza votesObject.parent_element = document.getElementById(`comment-${votesObject.parent_comment_id}`) // nadkomentarz votesObject.fetchURL = `https://wykop.pl/api/v3/links/${votesObject.parent_id}/comments/${votesObject.parent_comment_id}/comments`; // TODO } else { votesObject.resource = "link_comment"; votesObject.comment_element.dataset.wxs_resource = "link_comment"; votesObject.comment_id = votesObject.comment_element.__vue__.item.id; votesObject.parent_id = votesObject.comment_element.__vue__.item.parent.id; votesObject.parent_element = document.getElementById(`link-${votesObject.parent_id}`) // section.link-block votesObject.fetchURL = `https://wykop.pl/api/v3/links/${votesObject.parent_id}/comments/${votesObject.comment_id}`; } } // KOMENTARZ POD WPISEM else if (votesObject.sectionObjectElement.__vue__.item.resource == "entry_comment") { votesObject.comment_element = votesObject.sectionObjectElement; if (votesObject.comment_element.parentNode) { votesObject.resource = "entry_comment"; // komentarz pod wpisem votesObject.comment_element.dataset.wxs_resource = "entry_comment"; votesObject.parent_element = votesObject.comment_element.parentNode.closest('section.entry'); votesObject.parent_id = votesObject.parent_element.__vue__.item.id; votesObject.comment_id = votesObject.comment_element.__vue__.item.id; votesObject.fetchURL = `https://wykop.pl/api/v3/entries/${votesObject.parent_id}/comments/${votesObject.comment_id}`; } else { return null; } } // WPIS NA MIKROBLOGU else if (votesObject.sectionObjectElement.__vue__.item.resource == "entry") { votesObject.parent_element = votesObject.sectionObjectElement; // parent = this votesObject.parent_id = votesObject.id; votesObject.resource = "entry"; votesObject.fetchURL = `https://wykop.pl/api/v3/entries/${votesObject.id}`; votesObject.parent_element.dataset.wxs_resource = "entry"; } } // votesObject.sectionObjectElement.dataset.wxs_votes_up = votesObject.votesUp; // <section data-wxs_votes_up="1" data_wxs_votes_down="8"> // votesObject.sectionObjectElement.dataset.wxs_votes_down = votesObject.votesDown; if (dev) console.log("votesObject"); if (dev) console.log(votesObject); return votesObject; } function checkPluses(sectionObjectElement, ratingBoxSection, showUpdatedValues = true) { // console.clear(); consoleX(`checkPluses(showUpdatedValues: ${showUpdatedValues})`, 0); if (sectionObjectElement == null && ratingBoxSection?.__vue__?.$parent) { if (ratingBoxSection?.__vue__?.$parent.item.resource == "link") { sectionObjectElement = ratingBoxSection.closest("section.link-block") } else { sectionObjectElement = ratingBoxSection.closest("section.entry") } } if (sectionObjectElement && sectionObjectElement.__vue__ && sectionObjectElement.__vue__.item.deleted == null) { if (!ratingBoxSection) { if (sectionObjectElement.__vue__.item.resource == "link") { ratingBoxSection = sectionObjectElement.querySelector("section.vote-box"); } else { ratingBoxSection = sectionObjectElement.querySelector("section.rating-box"); } } if (dev) console.log("checkPluses() -> sectionObjectElement: ", sectionObjectElement) if (dev) console.log("checkPluses() -> ratingBoxSection: ", ratingBoxSection) const votesObject = getVotesObject(sectionObjectElement, ratingBoxSection); if (votesObject) // TODO subkomentarze { if (dev) console.log("checkPluses() -> votesObject", votesObject); // let sectionObjectElement = votesObject.sectionObjectElement; sectionObjectElement.classList.remove("plusesAdded", "plusesRemoved", "minusesAdded", "minusesRemoved"); sectionObjectElement.style.removeProperty('--plusesAdded'); sectionObjectElement.style.removeProperty('--plusesRemoved'); sectionObjectElement.style.removeProperty('--minusesAdded'); sectionObjectElement.style.removeProperty('--minusesRemoved'); fetch(votesObject.fetchURL, { method: "GET", headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.token, }, }) .then(x => x.json()) .then(data => { if (!data.data) return false; let data_fetched; if (Array.isArray(data.data) && data.data.length > 0) data_fetched = data.data.find(item => item.id === votesObject.id); // array from subcomments /api/v3/links/a/comments/b/comments => [array of subcomment objects] else if (data.data && data.data.id === votesObject.id) data_fetched = data.data; else { return false; } if (dev) console.log(`checkPluses() -> data_fetched from ${votesObject.fetchURL}`, data_fetched); votesObject.votesUpPrevious = votesObject.votesUp; // sectionObjectElement.dataset.wxs_votes_up; votesObject.votesDownPrevious = votesObject.votesDown; // sectionObjectElement.dataset.wxs_votes_down; votesObject.votesUp = data_fetched.votes.up; votesObject.votesDown = data_fetched.votes.down; votesObject.votesCount = data_fetched.votes.up - data_fetched.votes.down; // -10 (suma plusów i minusów nie dotyczy entry, entry_comment) votesObject.votesAll = data_fetched.votes.up + data_fetched.votes.down; // 30 (liczba głosów nie dotyczy entry, entry_comment) votesObject.votesUpPercent = 0; // nie dotyczy entry, entry_comment zawsze 100% votesObject.votesDownPercent = 0; // nie dotyczy entry, entry_comment if (data_fetched?.comments?.count) votesObject.commentsCount = data_fetched.comments.count; if (data_fetched?.comments?.hot) votesObject.commentsHot = data_fetched.comments.hot; // ile plusów przybyło/ubyło od ostatniego sprawdzenia votesObject.plusesDelta = votesObject.votesUp - votesObject.votesUpPrevious; votesObject.minusesDelta = votesObject.votesDown - votesObject.votesDownPrevious; votesObject.votesCountChanged = (votesObject.plusesDelta != 0 || votesObject.minusesDelta != 0); // if(dev) console.log("dataset.votesup: " + sectionObjectElement.dataset.wxs_votes_up + " / votesObject.plusesDelta: " + votesObject.plusesDelta) // if(dev) console.log("sectionObjectElement.dataset") // if(dev) console.log(sectionObjectElement.dataset) // if(dev) console.log(sectionObjectElement) // ZMIENIŁA SIĘ LICZBA PLUSÓW / WYKOPÓW if (votesObject.votesCountChanged) { //alert("votesCountChanged") if (dev) console.log("checkPluses() -> --------------------"); if (dev) console.log("checkPluses() -> VOTES COUNT CHANGED", sectionObjectElement) sectionObjectElement.dataset.wxs_votes_up = votesObject.votesUp; // 10 sectionObjectElement.dataset.wxs_votes_down = votesObject.votesDown; // 20 — dodatnia nie dotyczy entry, entry_comment sectionObjectElement.dataset.wxs_votes_count = votesObject.votesCount; // -10 (suma plusów i minusów nie dotyczy entry, entry_comment) sectionObjectElement.dataset.wxs_votes_all = votesObject.votesAll; // 30 (łączna liczba głosów nie dotyczy entry, entry_comment) sectionObjectElement.dataset.wxs_voted = votesObject.voted; // czy zaglosowano sectionObjectElement.dataset.wxs_votes_separated = votesObject.separated || true; updateFetchedVotesData(sectionObjectElement, votesObject, showUpdatedValues); } }); } } } function updateFetchedVotesData(sectionObjectElement, votesObject, showUpdatedValues = true, onlyPluses = false) { consoleX(`updateFetchedVotesData() -> updateVisibleLinkVotesCount(showUpdatedValues: ${showUpdatedValues}, onlyPluses: ${onlyPluses})`, 1); let ratingBoxSection; let ratingBoxVotesUpCountElement; let ratingBoxVotesDownCountElement; let ratingBoxVotesDownPercentElement; let ratingBoxVotesPerHourElement; if (sectionObjectElement.__vue__.item.resource == "link") { ratingBoxSection = sectionObjectElement.querySelector("section.vote-box"); ratingBoxVotesUpCountElement = ratingBoxSection.querySelector("div.dig > p > span"); ratingBoxVotesDownCountElement = ratingBoxSection.querySelector(".wykopx_votesDownCount"); ratingBoxVotesDownPercentElement = ratingBoxSection.querySelector(".wykopx_votesDownPercent"); ratingBoxVotesPerHourElement = ratingBoxSection.querySelector(".wxs_votes_per_hour"); } else { ratingBoxSection = sectionObjectElement.querySelector("section.rating-box"); sectionObjectElement.dataset.wxs_votes_separated = ratingBoxSection.__vue__.separated; if (ratingBoxSection.__vue__.separated) { ratingBoxVotesUpCountElement = ratingBoxSection.querySelector("li.plus"); // li.plus.zero ratingBoxVotesDownCountElement = ratingBoxSection.querySelector("li.minus"); // tylko przy komentarzach pod znaleziskiem } else { ratingBoxVotesUpCountElement = ratingBoxSection.querySelector("ul > li"); } ratingBoxVotesPerHourElement = ratingBoxSection.querySelector(".wxs_votes_per_hour"); } if (!votesObject && ratingBoxSection) { votesObject = getVotesObject(sectionObjectElement, ratingBoxSection); } // VOTES PER HOUR CALCULATION if ((votesObject.resource == "link" && settings.checkLinkVotesEnable && settings.checkLinkVotesPerHour) || (votesObject.resource != "link" && settings.checkEntryPlusesEnable && settings.checkEntryPlusesPerHour)) { const timeSinceFirtsLoad = (dayjs().valueOf() - sectionObjectElement.dataset.wxs_first_load_time) / 1000; // liczba sekund od zaladowania strony if (timeSinceFirtsLoad > votesFetchingFirstDelayInSeconds + 5) { let votesPerHour = (votesObject.votesCount - sectionObjectElement.dataset.wxs_first_load_votes_count) * 3600 / timeSinceFirtsLoad; let votesPerHourString; // PLUSÓW NA GODZINE if (votesPerHour == 0) { votesPerHourString = "0"; } else if (votesPerHour > 0 && votesPerHour < 0.9) { votesPerHourString = "< 1"; } else { let suffix_text; if (votesObject.resource == "link") { suffix_text = "/h"; votesPerHour = votesPerHour.toFixed(0); } else { suffix_text = " plusa / h"; votesPerHour = votesPerHour.toFixed(1); } //votesPerHour = Math.round(votesPerHour) votesPerHourString = `${votesPerHour}${suffix_text}`; } if (ratingBoxVotesPerHourElement) ratingBoxVotesPerHourElement.dataset.wxs_votes_per_hour = votesPerHourString; // data-wxs_votes_per_hour } } // VOTES DOWN PERCENT if (votesObject.votesAll > 0) { votesObject.votesDownPercent = Math.ceil(votesObject.votesDown * 100 / votesObject.votesAll); sectionObjectElement.dataset.wxs_votes_down_percent = votesObject.votesDownPercent; if (ratingBoxVotesDownPercentElement) { ratingBoxVotesDownPercentElement.dataset.wxs_votes_down_percent = votesObject.votesDownPercent; ratingBoxVotesDownPercentElement.textContent = `(${votesObject.votesDownPercent}%)`; } } // COMMENTS COUNT // if (votesObject.resource == "link" || votesObject.resource == "entry" || votesObject.resource == "link_comment") // { // sectionObjectElement.dataset.wxs_comment_count = votesObject.commentsCount; // } // if(dev) console.log("votesObject:"); // if(dev) console.log(votesObject); // if(dev) console.log("sectionObjectElement.dataset:"); // if(dev) console.log(sectionObjectElement.dataset); if (onlyPluses == false) { const votesDown = sectionObjectElement.dataset.wxs_votes_down; sectionObjectElement.style.setProperty('--votesDown', `"${settings.prefixBeforeMinusesCount}` + votesDown + `"`); // zbytek let minusLi = sectionObjectElement.querySelector("section.rating-box > ul > li.minus"); if (minusLi) minusLi.textContent = votesDown; } // PRZYBYŁY PLUSY if (votesObject.plusesDelta != 0) { ratingBoxVotesUpCountElement.dataset.wxs_votes_up = votesObject.votesUp; if (votesObject.resource == "link") { ratingBoxVotesUpCountElement.textContent = votesObject.votesUp; } else { const separated = sectionObjectElement.dataset.wxs_votes_separated || true; let votesCountDisplayValue = ((separated === "true" || separated === true) ? votesObject.votesCount : votesObject.votesUp); if (votesCountDisplayValue > 0) votesCountDisplayValue = `${settings.prefixBeforePlusesCount}${votesCountDisplayValue}` else if (votesCountDisplayValue < 0) votesCountDisplayValue = `${settings.prefixBeforeMinusesCount}${votesCountDisplayValue}`; } if (votesObject.plusesDelta > 0) { sectionObjectElement.classList.add("plusesAdded"); ratingBoxSection.dataset.wxs_pluses_delta = `+${votesObject.plusesDelta}`; //sectionObjectElement.style.setProperty('--plusesAdded', `"+${votesObject.plusesDelta}"`); } else { sectionObjectElement.classList.add("plusesRemoved"); ratingBoxSection.dataset.wxs_pluses_delta = `${votesObject.plusesDelta}`; //sectionObjectElement.style.setProperty('--plusesRemoved', `"${votesObject.plusesDelta}"`); // jest z minusem } } // PRZYBYŁY MINUSY POD KOMENTARZEM W ZNALEZISKU if (votesObject.minusesDelta != 0 && ratingBoxVotesDownCountElement) { ratingBoxVotesDownCountElement.dataset.wxs_votes_down = votesObject.votesDown; if (votesObject.resource == "link") { ratingBoxVotesDownCountElement.textContent = votesObject.votesDown; } else { const separated = sectionObjectElement.dataset.wxs_votes_separated || true; if (separated) // minusy i plusy są osobno, więc zmieniamy minusy { let votesCountDisplayValue = votesObject.votesDown; if (votesCountDisplayValue < 0) votesCountDisplayValue = `${settings.prefixBeforeMinusesCount}${votesCountDisplayValue}`; ratingBoxVotesDownCountElement.textContent = votesCountDisplayValue; } else // minusy i plusy są razem, więc zmieniamy plusy { let votesCountDisplayValue = votesObject.votesCount; if (votesCountDisplayValue > 0) votesCountDisplayValue = `${settings.prefixBeforePlusesCount}${votesCountDisplayValue}` else if (votesCountDisplayValue < 0) votesCountDisplayValue = `${settings.prefixBeforeMinusesCount}${votesCountDisplayValue}`; ratingBoxVotesUpCountElement.textContent = votesCountDisplayValue; } } if (votesObject.minusesDelta > 0) { sectionObjectElement.classList.add("minusesAdded"); ratingBoxSection.dataset.wxs_minuses_delta = `-${votesObject.minusesDelta}`; //sectionObjectElement.style.setProperty('--minusesAdded', `"-${votesObject.minusesDelta}"`); } else { sectionObjectElement.classList.add("minusesRemoved"); ratingBoxSection.dataset.wxs_minuses_delta = `+${votesObject.minusesDelta}`; //sectionObjectElement.style.setProperty('--minusesRemoved', `"+${votesObject.minusesDelta}"`); } } } // <section class="rating-box" data-wxs_pluses="269" data-wxs_minuses="0" data-wxs_pluses_minuses_total="269" data-wxs_pluses_below_limit="true"> function parseRatingBoxCurrentContentAndCreateDataValues(ratingBoxSection) { // dodanie data-wxs_pluses na podstawie aktualnych wartosci plusow w HTML // if(dev) console.log("parseRatingBoxCurrentContentAndCreateDataValues(ratingBoxSection)") consoleX(`parseRatingBoxCurrentContentAndCreateDataValues()`, 1); const minusLi = ratingBoxSection.querySelector('li.minus'); let plusLi = ratingBoxSection.querySelector('li.plus'); if (!plusLi) plusLi = ratingBoxSection.querySelector('li.zero') let votesUp = plusLi ? plusLi.textContent : 0; // 5liczba plusów let votesDown = minusLi ? -1 * minusLi.textContent : 0; // 15 liczba minusów (dodatnia) let votesCount = votesUp - votesDown; // -10 suma plusów i minusów let votesAll = votesUp + votesDown; // 20 liczba glosow ratingBoxSection.dataset.wxs_votes_up = votesUp; ratingBoxSection.dataset.wxs_votes_down = votesDown; ratingBoxSection.dataset.wxs_votes_count = votesCount; ratingBoxSection.dataset.wxs_votes_all = votesAll; // limit ukrywania wpisow przypietych na glownej const homepagePinnedEntriesPlusesLimit = settings.homepagePinnedEntriesHideBelowLimit; if (homepagePinnedEntriesPlusesLimit > 0) { // czy wpis jest poniżej limitu ukrywania wpisow przypietych na glownej let plusesBelowLimit = (votesCount < homepagePinnedEntriesPlusesLimit ? true : false); ratingBoxSection.dataset.wxs_pluses_below_limit = plusesBelowLimit; } } // VOTING REAL UPDATE, VOTING EXPLOSION function votingEventListener(sectionObjectElement, ratingBoxSection) { consoleX(`votingEventListener()`, 1); if (sectionObjectElement && ratingBoxSection) { if (settings.checkEntryPlusesWhenVoting) { ratingBoxSection.addEventListener('mouseenter', function (event) { //var clickedButton = event.target; if (dev) console.log("mouseenter rating box") checkPluses(sectionObjectElement, ratingBoxSection, false); }); } /* ratingBoxSection.__vue__ { voted: 0 // czy zaglosowane down: 0 up: 278 value: 278 formattedValue: "278", separated: false id: 23456789 idParent: 1234567 linkId: 1234567 users: [{}, {}...], type: "entryComment" / "???" deleted: null author: "NadiaFrance" showBtn: true / false } */ if (settings.votePlusMinusOnHover) { ratingBoxSection.addEventListener('mouseover', function (event) { if (event.target.matches('button:not(.voted)')) { event.target.click(); } }); } ratingBoxSection.addEventListener('click', function (event) { var clickedButton = event.target; let up = 0; let down = 0; let count = 0; let all = 0; let vote = "voted"; // "voted", "unvoted" let action = "plused"; // "plused", "minused" let sign = "+"; // let votesUp = ratingBoxSection.__vue__.up; // let votesDown = ratingBoxSection.__vue__.down; //let votesUp = sectionObjectElement.dataset.wxs_votes_up; //let votesDown = sectionObjectElement.dataset.wxs_votes_down; if (clickedButton.matches('button.plus.voted')) // dodano plusa { action = "plused"; vote = "voted"; // count = votesUp; up = Number(sectionObjectElement.dataset.wxs_votes_up) + 1; count = Number(sectionObjectElement.dataset.wxs_votes_count) + 1; all = Number(sectionObjectElement.dataset.wxs_votes_all) + 1; } else if (clickedButton.matches('button.plus:not(.voted)')) // usunieto plusa { action = "plused"; vote = "unvoted"; //count = votesUp; up = Number(sectionObjectElement.dataset.wxs_votes_up) - 1; count = Number(sectionObjectElement.dataset.wxs_votes_count) - 1; all = Number(sectionObjectElement.dataset.wxs_votes_all) - 1; } else if (clickedButton.matches('button.minus.voted')) // dodano minusa { action = "minused"; vote = "voted"; sign = "-"; down = Number(sectionObjectElement.dataset.wxs_votes_down) - 1; count = Number(sectionObjectElement.dataset.wxs_votes_count) - 1; all = Number(sectionObjectElement.dataset.wxs_votes_all) + 1; // liczba głosów } else if (clickedButton.matches('button.minus:not(.voted)')) // usunięto minusa { action = "minused"; vote = "unvoted"; sign = "-"; //count = votesDown; down = Number(sectionObjectElement.dataset.wxs_votes_down) + 1; count = Number(sectionObjectElement.dataset.wxs_votes_count) + 1; all = Number(sectionObjectElement.dataset.wxs_votes_all) - 1; // liczba głosów } sectionObjectElement.dataset.wxs_votes_up = up; sectionObjectElement.dataset.wxs_votes_down = down; sectionObjectElement.dataset.wxs_votes_all = all; sectionObjectElement.dataset.wxs_votes_count = count; updateFetchedVotesData(sectionObjectElement); // voting explosion if (settings.votingExplosionEnable && vote == "voted") { let maximumExpliosionTime = 1300; // default 0 delay, 1300 duration let min_x = -60; let max_x = 60; let min_y = -60; let max_y = -20; if (count > 30) max_y = 60; if (count > 300) { min_x = -90; max_x = 90; } // let particlesCount = (count > 110 ? Math.ceil(count / 10) : count); let particlesCount = count; if (particlesCount > 2000) particlesCount = 200; else if (particlesCount > 690) particlesCount = particlesCount / 10; else if (particlesCount > 345) particlesCount = particlesCount / 5; else if (particlesCount > 39) particlesCount = 39; var newDivs = []; for (var i = 0; i < particlesCount; i++) { var newDiv = document.createElement('div'); newDiv.textContent = sign; newDiv.classList.add(`wykopxs_vote_animation`, `wykopxs_${vote}`, `wykopxs_${action}`); // class="wykopxs_vote_animation wykopxs_voted wykopxs_plused" let color = (sign === "+" ? "green" : "red"); if (sign === "+") { if (count >= 666 && getRandomInt(1, 10) == 1) color = "golden"; if (count > 100 && count < 666 && getRandomInt(1, 80) == 1) newDiv.textContent = "💚";; } if (count > 100 && getRandomInt(1, 30) == 1) { min_x += getRandomInt(-30, 30); max_x += getRandomInt(-30, 30) min_y -= getRandomInt(-30, 30); max_y -= getRandomInt(-30, 30); } newDiv.classList.add(`wykopxs_${color}`); newDiv.style.setProperty('--position_x', getRandomInt(min_x, max_x, "px")); newDiv.style.setProperty('--position_y', getRandomInt(min_y, max_y, "px")); newDiv.style.setProperty('--position_z', 0); if (count > 30) { newDiv.style.setProperty('--explosionTiming', getRandomString("linear", "ease", "ease-in-out", "ease-in", "ease-out")); // "cubic-bezier(0.1, 0.7, 1, 0.1)" newDiv.style.setProperty('--explosionDelay', getRandomInt(0, getRandomInt(0, Math.max(800, count)), "ms")); newDiv.style.setProperty('--explosionDuration', getRandomInt(900, 1300), "ms"); maximumExpliosionTime = Math.max(800, count) + 1300; } clickedButton.after(newDiv); newDivs.push(newDiv); } parseRatingBoxCurrentContentAndCreateDataValues(ratingBoxSection); // TODO setTimeout(function () { for (var i = 0; i < newDivs.length; i++) { newDivs[i].parentNode.removeChild(newDivs[i]); } }, maximumExpliosionTime); } }); } } const apiGetLink = "https://wykop.pl/api/v3/links/"; /* <section id="link-7288349" class="link-block" data-wxs_votes_up="183" data-wxs_votes_down="5" data-wxs_votes_count="178" data-voted="0" data-comments-count="10" data-comments-hot="false" data-hot="false" data-adult="false" data-wxs_created_at="2023-11-27 21:12:49" data-published-at="2023-11-28 15:22:38" data-title="Dwie awarie..." data-slug="dwie-awarie-w-ec-bedzin-wznowienie-dostaw-ciepla-w-koncu-tygodnia-rmf-24" data-wxs_description="Dwie awarie w (...)" data-wxs_source_label="www.rmf24.pl" data-source-u-r-l="https://www.rmf24.pl/regiony/slaskie/news..." data-wxs_source_type="anchor" data-tags="slaskie,bedzin,awaria,wydarzenia"> */ function linkSectionIntersected(linkBlock) { if (dev) console.log("linkSectionIntersected(linkBlock)", linkBlock) // const linkBlock = jNodeLinkBlock[0]; // jNode => DOMElement //const link_id = linkBlock.id.replace("link-", ""); // 78643212 const link_id = linkBlock.__vue__.item.id; const fetchURL = apiGetLink + link_id; if (dev) console.log(fetchURL); let link_data; let sectionVoteBox = linkBlock.querySelector('section.vote-box'); if (sectionVoteBox) { if (settings.linksAnalyzerEnable) { fetch(fetchURL, { method: "GET", // or 'PUT' headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.token, }, }) .then(x => x.json()) .then(data => { link_data = data.data; if (dev) console.log("link_data"); if (dev) console.log(link_data); linkBlock.dataset.wxs_votes_up = link_data.votes.up; // liczba wykopów/plusów 10 linkBlock.dataset.wxs_votes_down = link_data.votes.down; // liczba zakopów/minusów 20 linkBlock.dataset.wxs_votes_count = link_data.votes.count; // suma plusów i minusów/ suma wykopów i zakopów -10 linkBlock.dataset.wxs_votes_all = link_data.votes.up + link_data.votes.down; // łączna liczba oddanych głosów 30 link_data.votes.votesDownPercent = 0; link_data.votes.votesUpPercent = 0; if (linkBlock.dataset.wxs_votes_all > 0) { link_data.votes.votesDownPercent = Math.ceil(link_data.votes.down * 100 / linkBlock.dataset.wxs_votes_all); link_data.votes.votesUpPercent = Math.ceil(link_data.votes.up * 100 / linkBlock.dataset.wxs_votes_all); } linkBlock.dataset.wxs_hot = link_data.hot; linkBlock.dataset.wxs_slug = link_data.slug; linkBlock.dataset.wxs_adult = link_data.adult; linkBlock.dataset.wxs_tags = link_data.tags; linkBlock.dataset.wxs_title = link_data.title; linkBlock.dataset.wxs_voted = link_data.voted; linkBlock.dataset.wxs_source_url = link_data.source.url; linkBlock.dataset.wxs_source_type = link_data.source.type; linkBlock.dataset.wxs_comments_hot = link_data.comments.hot; linkBlock.dataset.wxs_description = link_data.description; linkBlock.dataset.wxs_source_label = link_data.source.label; linkBlock.dataset.wxs_comment_count = link_data.comments.count; const linkBlockInfoSpan = linkBlock.querySelector("section > article > div.content > section.info > span"); if (link_data.created_at) { linkBlock.dataset.wxs_created_at = link_data.created_at; const timeCreatedAt = document.createElement("time"); // timeCreatedAt.setAttribute("data-v-441f7cc5", null); timeCreatedAt.innerHTML = `Dodane: ${link_data.created_at}`; linkBlockInfoSpan.appendChild(timeCreatedAt); } if (link_data.published_at) { linkBlock.dataset.wxs_published_at = link_data.published_at; const timePublishedAt = document.createElement("time"); // timePublishedAt.setAttribute("data-v-441f7cc5", null); timePublishedAt.innerHTML = `Na głównej od: ${link_data.published_at}`; linkBlockInfoSpan.appendChild(timePublishedAt); } // SORTOWANIE ZNALEZISK NA GŁÓWNEJ WEDŁUG if (typeof settings.linksAnalyzerSortBy === "string" && settings.linksAnalyzerSortBy != "" && settings.linksAnalyzerSortBy != "domyslnie") { if (settings.linksAnalyzerSortBy == "by_votes_count") linkBlock.style.order = -1 * link_data.votes.count; // 🔽 Sortuj wg liczby wykopów style="order: -321" else if (settings.linksAnalyzerSortBy == "by_comments_count") linkBlock.style.order = -1 * link_data.comments.count; // 🔽 Sortuj wg liczby komentarzy else if (settings.linksAnalyzerSortBy == "by_created_oldest") { linkBlock.style.order = Math.floor(new Date(link_data.created_at).getTime() / 1000); // ⏬ Sortuj wg daty dodania (od najstarszego) } else if (settings.linksAnalyzerSortBy == "by_created_newest") { linkBlock.style.order = -1 * Math.floor(new Date(link_data.created_at).getTime() / 1000); // ⏫ Sortuj wg daty dodania (od najnowszego) } else if (link_data.published_at != null && settings.linksAnalyzerSortBy == "by_published_oldest") { linkBlock.style.order = Math.floor(new Date(link_data.published_at).getTime() / 1000); // ⏬ Sortuj wg czasu na głównej (od najstarszego) } else if (link_data.published_at != null && settings.linksAnalyzerSortBy == "by_published_newest") { linkBlock.style.order = -1 * Math.floor(new Date(link_data.published_at).getTime() / 1000); // ⏫ Sortuj wg czasu na głównej (od najnowszego) } } const votesMeter = document.createElement('progress'); votesMeter.className = "wykopxs wykopx_votesMeter"; votesMeter.setAttribute('value', link_data.votes.up); votesMeter.setAttribute('max', link_data.votes.up + link_data.votes.down); const votesDownInfo = document.createElement('div'); votesDownInfo.className = "burry active wykopxVotesDownInfo"; const span = document.createElement('span'); span.className = "wykopxs wykopx_votesDown"; // VUE SENSITIVE data-v-5bb34f93 span.setAttribute('data-v-5bb34f93', ''); span.setAttribute('data-dropdown', `buried-${link_id}`); span.setAttribute('title', `Statystyki Wykop X: Liczba wykopujących: ${link_data.votes.up} Liczba zakopujących: ${link_data.votes.down} (${link_data.votes.votesDownPercent}%)`); const spanVotesDownCount = document.createElement('span'); spanVotesDownCount.className = "wykopxs wykopx_votesDownCount"; spanVotesDownCount.textContent = `${link_data.votes.down}`; const spanVotesDownPercent = document.createElement('span'); spanVotesDownPercent.className = "wykopxs wykopx_votesDownPercent"; spanVotesDownPercent.textContent = `(${link_data.votes.votesDownPercent}%)`; span.appendChild(spanVotesDownCount); span.appendChild(spanVotesDownPercent); votesDownInfo.appendChild(span); sectionVoteBox.appendChild(votesDownInfo); if (linkBlock.dataset.wxs_votes_all > 0) { sectionVoteBox.appendChild(votesMeter); } }); } // if (settings.linkVoteDownButton && pageType != "wykopalisko") if (settings.linkVoteDownButton && !sectionVoteBox.querySelector("div.burry")) { const downVoteElement = document.createElement("div"); downVoteElement.classList = "wxsDownVoteWrapper"; downVoteElement.style = "justify-content: center; display: flex; margin-top: 5px;" let downVoteButtonHtml = `<button class="wxsDownVote" data-id="${link_id}" data-vote="down" data-reason="5" style="color: var(--blackish); font-size: 11px;">ZAKOP</button>`; //1-duplikat, 2-spam, 3-informacja nieprawidłowa, 4-treść nieodpowiednia, 5-nie nadaje się downVoteElement.innerHTML = downVoteButtonHtml; sectionVoteBox.appendChild(downVoteElement); downVoteElement.addEventListener("click", async function () { const downVoteButton = downVoteElement.children[0]; if (dev) console.log(downVoteButton); let data = null; if (downVoteButton.dataset.vote == "down") { data = await postWykopAPIData("links", downVoteButton.dataset.id, "votes", "down", downVoteButton.dataset.reason) // "/api/v3/links/1234567/votes/down/5" // znalezisko zakopano if (data == 204) { downVoteButton.dataset.vote = "undo"; downVoteButton.innerText = "odkop"; linkBlock.classList.add("wxsVotedDown"); sectionVoteBox.classList.add("voted", "buried"); } } else if (downVoteButton.dataset.vote == "undo") { data = await deleteWykopAPIData("links", downVoteButton.dataset.id, "votes") // "/api/v3/links/1234567/votes" -- cofniecie wykopu/zakopu // cofnięto wykop/zakop if (data == 204) { downVoteButton.dataset.vote = "down"; downVoteButton.innerText = "ZAKOP"; linkBlock.classList.remove("wxsVotedDown"); sectionVoteBox.classList.remove("voted", "buried"); } } if (dev) console.log("downVoteLink data:"); if (dev) console.log(data); }) } } } /* ------ ZNIESIENIE LIMITÓW W TEXTAREA I INPUT PODCZAS WKLEJANIA TEKSTU ------ */ // <input data-v-6486857b="" data-v-99298700="" type="text" placeholder="Wpisz tytuł Znaleziska..." maxlength="80" class=""> // <textarea data-v-8f9e192e="" data-v-99298700="" placeholder="Wpisz opis Znaleziska..." maxlength="300" class=""></textarea> // <input data-v-714efcd5="" id="title" type="text" placeholder="Wpisz tytuł..." maxlength="80" class="highlight"> if (settings.disableNewLinkEditorPastedTextLimit) { waitForKeyElements("[maxlength]", disableNewLinkEditorPastedTextLimit, false); } function disableNewLinkEditorPastedTextLimit(input) { consoleX(`disableNewLinkEditorPastedTextLimit()`, 1) const maxLength = input.getAttribute('maxlength'); input.removeAttribute('maxlength'); let divElement = document.createElement('div'); divElement.className = 'wykopxs_textinput_limit_info'; divElement.style.color = 'rgba(120, 120, 120, 1)'; divElement.style.fontSize = '14px'; divElement.style.margin = '10px 0px 10px 0px'; input.parentNode.appendChild(divElement, input); function handleInputEvent() { let charCount = input.value.length; divElement.innerHTML = ` Wykop X: wprowadzono: <span class="${charCount > maxLength ? 'overLimit' : 'withinLimit'}" style="color: ${charCount > maxLength ? 'red' : 'inherit'}"> <strong>${charCount}</strong> / <strong>${maxLength}</strong> </span> znaków`; } input.addEventListener('change', handleInputEvent); input.addEventListener('focus', handleInputEvent); input.addEventListener('paste', handleInputEvent); let timeout = null; input.addEventListener('keyup', function (e) { if (e.key === ' ' || e.key === '.') { handleInputEvent(e); } else { clearTimeout(timeout); timeout = setTimeout(function () { handleInputEvent(e); }, 2000); } }); } /* ------ HELPER FUNCTIONS --------- */ // consoleX("TEXT") // consoleX("TEXT", false) // consoleX("TEXT", 1) -- wyświetla tylko w trybie dev function consoleX(text, only_on_dev_mode = false) { if (only_on_dev_mode == false || dev == true) { let tpl = `background-color:black; border:1px solid rgba(244, 244, 244, 0.4); font-weight: bolder; padding: 0px 9px; font-family: "Segoe UI", "Open Sans", sans-serif; margin-right: 10px;`; if (only_on_dev_mode) tpl += `color:rgba(43, 255, 75, 1);`; else tpl += `color:rgba(255, 255, 255, 0.8);`; if (dev) console.log(`%cWykop X%c` + text, `${tpl}`, `font-family: "Segoe UI", "Open Sans"`); } } // DEV RUN WITH DELAY function runWithDelay(time, f) { // consoleX(`runWithDelay(f , ${time})`, 1); setTimeout(function () { f(); }, time); } function replaceDigitsWithDot(num) { if (num < 100) { return num.toString().slice(0, -1) + " ·"; } else { return num.toString().slice(0, -2) + " · ·"; } } // SHA256("WykopX") => "f5583a1d5d6044951722fe4b08d534af2b571efc065c8b73d07689d25d8a6175" async function SHA256(message) { const encoder = new TextEncoder(); const data = encoder.encode(message); // 8,87,121,107,111,112,88 const hashBuffer = await crypto.subtle.digest("SHA-256", data); const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string f5583a1d5d6044951722fe4b08d534af2b571efc065c8b73d07689d25d8a6175 consoleX(`SHA256 hash: ${hashHex}`, 1); return hashHex; } // getRandomInt(-30, 20, "px") function getRandomInt(min, max, unit) { min = Math.ceil(min); max = Math.floor(max); let randomValue = Math.floor(Math.random() * (max - min + 1)) + min; if (unit != null) randomValue = randomValue + unit; return randomValue; } // getRandomString("string1", "string2", "string3", "string4", "string5"); function getRandomString(...stringsArray) { let randomString = stringsArray[Math.floor(Math.random() * stringsArray.length)]; return randomString; } // FUNKCJA SKOPIOWANA DO TS W WykopX Drop function isValidURL(string) { try { new URL(string); return true; } catch (err) { return false; } } // FUNKCJA SKOPIOWANA DO TS W WykopX Drop function isValidImageURL(string) { if (isValidURL(string)) { let lowerCaseString = string.toLowerCase(); if (lowerCaseString.endsWith(".png") || lowerCaseString.endsWith(".jpeg") || lowerCaseString.endsWith(".jpg") || lowerCaseString.endsWith(".webp")) { return true; } } return false; } // FUNKCJA SKOPIOWANA DO TS W WykopX Drop // returns array of valid URL's from a given string // returns ["http://onet.pl", "https://www.wp.pl"] // returns null // getURLsFromString("string") // getURLsFromString("string with img urls", true) function getURLsFromString(string, onlyImagesURLs = false, appendHttpsForBeforeWww = true) { let urlRegex = /(https?:\/\/[^\s]+)|(www\.[^\s]+)/g; let urlImagesRegex = /(https?:\/\/[^\s]+(\.png|\.jpg|\.jpeg|\.webp))|(www\.[^\s]+(\.png|\.jpg|\.jpeg|\.webp))/g; let urls = string.match(onlyImagesURLs ? urlImagesRegex : urlRegex); if (urls && appendHttpsForBeforeWww) { urls = urls.map(url => url.startsWith('www.') ? 'https://' + url : url); } return urls; } // FUNKCJA SKOPIOWANA DO TS W WykopX Drop function bytesToKB(bytes, decimalDigits = 2) { return (bytes / 1024).toFixed(decimalDigits) + ' KB'; } // FUNKCJA SKOPIOWANA DO TS W WykopX Drop function bytesToMB(bytes, decimalDigits = 2) { return (bytes / (1024 * 1024)).toFixed(decimalDigits) + ' MB'; } // returns array of words prefixed with + in string // Output: ["r", "b", "f"] // Output: ["normal"] function getPlusWords(str) { // if(dev) console.log("getPlusWords(string): " + str) let matches = str.match(/\+\p{L}+/gu); // diacritics characters, nie działa dla: str.match(/\+\w+/g); if (matches) { return matches.map(word => word.slice(1)); // } else { return ["normal"]; } } function removePlusWords(str) { let words = str.split(' '); let filteredWords = words.filter(word => word[0] !== '+'); let stringWithout = filteredWords.join(' '); return stringWithout; } function capitalizeFirstLetter(str) { return str.charAt(0).toUpperCase() + str.slice(1); } function timeDurationFromSeconds(seconds) { const hours = Math.floor(seconds / 3600); seconds %= 3600; const minutes = String(Math.floor(seconds / 60)).padStart(2, '0'); seconds = String(Math.floor(seconds % 60)).padStart(2, '0'); return `${hours > 0 ? hours + ":" : ""}${minutes}:${seconds}`; } /* ARCHIWUM X */ let newestEntrySection = null; let newestEntryID = null; let wxs_newest_entry = 1; async function archiveXNewestEntry() { let newestEntrySectionElem = document.createElement("div"); newestEntrySectionElem.id = "wxs_newest_entry"; newestEntrySectionElem.classList.add("hidden"); // .hidden newestEntrySectionElem.innerHTML = ` <section data-v-2aacfeb5="" data-v-7693ae52="" class="entry" data-v-0a84d0a4=""><!-- id="comment-75364841" --> <article data-v-2aacfeb5=""> <header data-v-2aacfeb5=""> <div data-v-2aacfeb5="" class="left"> <a data-v-fb64f4be="" data-v-2aacfeb5="" class="avatar active" style="width: 40px; height: 40px;"> <!-- href="/ludzie/NICK" --> <figure data-v-fb64f4be="" class="male orange-profile wxs_newest_entry_author_color wxs_newest_entry_author_gender"> <img class="wxs_newest_entry_author_avatar" data-v-ecb5ea3e="" data-v-fb64f4be="" loading="lazy" src="https://wykop.pl/cdn/c0834752/3f55ec16859056965fb5ef04e080527497a9abce924d2edb171680c11e34ce1c,q80.png" alt="NICK"> </figure> </a> </div> <div data-v-2aacfeb5="" class="right"> <div data-v-2aacfeb5=""> <div data-v-0908378b="" data-v-2aacfeb5="" class="tooltip-slot"> <span data-v-0908378b=""> <a class="wxs_newest_entry_author_username_ahref wxs_newest_entry_author_color username orange-profile active" href="/ludzie/WykopX" data-v-ed9f6c56="" data-v-2aacfeb5=""> <span class="wxs_newest_entry_author_username" data-v-ed9f6c56="">WykopX</span> </a> </span> </div> <span data-v-0908378b=""> <span data-v-2aacfeb5=""> <a class="wxs_newest_entry_ahref" data-v-2aacfeb5="" href=""> <time class="date wxs_newest_entry_created_at" data-v-0132bb98="" data-v-2aacfeb5="" title="2024-03-09 18:42:19" datetime="2024-03-09 18:42:19">przed chwilą</time> </a> </span> </a> </span> </div> <div data-v-2aacfeb5=""> <section data-v-76790450="" data-v-2aacfeb5="" class="rating-box"> <ul data-v-76790450="" class=""> <li data-v-76790450="" class="zero">0</li> </ul> <div data-v-76790450="" class="buttons"> <button data-v-76790450="" data-no-bubble="" class="plus">+</button> </div> </section> </div> </div> </header> <div data-v-2aacfeb5="" class="edit-wrapper"> <div data-v-2aacfeb5="" data-selectable="" class="content"> <section data-v-725caa02="" data-v-2aacfeb5="" class="entry-content"> <div data-v-725caa02="" class="wxs_newest_entry_content wrapper">Ładowanie...</div> </section> </div> </div> </article> <div class="timer"> <div class="mask"></div> </div> </section> `; bodySection.appendChild(newestEntrySectionElem); newestEntrySection = bodySection.querySelector("#wxs_newest_entry"); if (wxs_newest_entry && wxs_newest_entry != 0) getNewestEntryFromAPI(newestEntrySection); } let firstInDayID = { entry: null, link: null } // getEntryDailyNumber(wykopObjectData, "2023-01-01") -> 678 - zwraca który wpis tego dnia async function getEntryDailyNumber(objectData) // "2024-03-14 21:34:51", { // if(dev) console.log(`getEntryDailyNumber(objectData.id: ${objectData.id}, createdAtDate: ${objectData.created_at})`); // if(dev) console.log(`getEntryDailyNumber() - firstInDayID[${objectData.resource}]: `, firstInDayID[objectData.resource]); const dateToCheck = dayjs(objectData.created_at).format("YYYY-MM-DD"); if (firstInDayID[objectData.resource] != null) { // if(dev) console.log(`mapa firstInDayID[${objectData.resource}] = null, sprawdzamy localstorage`); await localStorageFirstDailyIDs.getItem(`${objectData.resource}FirstInDayIDsMap`).then(val => // localstorage: entryFirstInDayIDsMap / linkFirstInDayIDsMap { if (val !== null) { firstInDayID[objectData.resource] = new Map(Object.entries(val)); // if(dev) console.log("znaleziono w localstorage val=", val); // if(dev) console.log("znaleziono w localstorage firstInDayID[objectData.resource]=", firstInDayID[objectData.resource]); } else { // if(dev) console.log('Mapa nie istniała, a w localstorage nie było zapisanych danych'); firstInDayID[objectData.resource] = new Map(); } }).catch(err => { console.error(err); }); } if (firstInDayID[objectData.resource]) { // if(dev) console.log('Mapa już istnieje: firstInDayID[objectData.resource]', firstInDayID[objectData.resource]); if (firstInDayID[objectData.resource].has(dateToCheck)) { // if(dev) console.log(`Mapa posiada dla daty ${dateToCheck}, wartość: ${firstInDayID[objectData.resource].get(dateToCheck)}`); // if(dev) console.log("firstInDayID[objectData.resource]", firstInDayID[objectData.resource]) return (objectData.id - firstInDayID[objectData.resource].get(dateToCheck)) / 2; } else { // if(dev) console.log(`Mapa istnieje, ale dla daty ${dateToCheck} nie posiada jeszcze wartości`); } } else { firstInDayID[objectData.resource] = new Map(); } // if(dev) console.log('Mapa przed wyslaniem zapytania do API WykopX: firstInDayID[objectData.resource]', firstInDayID[objectData.resource]); const firstEntryData = await getWykopXAPIData(objectData.resource, "first-by-date") // https://archiwum.wykopx.pl/api/entry/first-by-date // https://archiwum.wykopx.pl/api/link/first-by-date // if(dev) console.log('Pobrano z Archiwum Wykop X: firstEntryData, ', firstEntryData); if (firstEntryData && firstEntryData.id != null) { firstInDayID[objectData.resource].set(dateToCheck, firstEntryData.id); localStorageFirstDailyIDs.setItem(`${objectData.resource}FirstInDayIDsMap`, Object.fromEntries(firstInDayID[objectData.resource]));//.then(() => { }); // if(dev) console.log("firstInDayID[objectData.resource]", firstInDayID[objectData.resource]) return (objectData.id - firstEntryData.id) / 2; } return false; } // zmodyfikowana funkcja z mikroczatu // zwraca 400 jesli autor cię blokuje, 409 jeśli nie async function checkIfYouCanPostCommentInEntry(entry_id) { if (dev) console.log(`checkIfYouCanPostCommentInEntry() entry_id: ${entry_id}`); let newMessageBody = { resource: "entry_comment", entry_id: entry_id, content: "" } if (dev) console.log(`checkIfYouCanPostCommentInEntry() newMessageBody:`, newMessageBody); //try //{ if (dev) console.log(`try > postNewMessageToChannel, entry_id: ${entry_id}`); return await postNewMessageToChannel(newMessageBody) //} // catch (error) // { // let httpError = error; // switch (httpError.status) // { // case 400: // // UZYTKOWNIK CIĘ BLOKUJE // return false; // break; // case 409: // // MOZED ODPISYWAĆ - WSZYSTKO OK (po prostu za krotka wiadomosc) // return true; // break; // case 429: // // INNY BLAD - ZA DUZO REQUESTOW // break; // default: // // Other status codes // } // } } /* POST */ // funkcja z mikroczatu async function postNewMessageToChannel(message) { if (dev) console.log(`postNewMessageToChannel: message: `, message); /* { "data": { "content": "**foobar** __foobar__ [lorem](https://www.wykop.pl) impsum!!! #nsfw #wykop", "photo": "e07843ss3fbe9cb4saeed0asdfsdfc64b9a4df6084199b39d2", "embed": "1fde707843ss3fbe9cb4eed0asdfsdfc64ab9a4df6084199b39d2", "survey": "qErgdjp5K0xz", "adult": false } } */ // nowy wpis (domyślnie) let apiURL = "https://wykop.pl/api/v3/entries"; // nowy komentarz pod wpisem if (message.resource && message.resource == "entry_comment" && message.entry_id) { apiURL = `https://wykop.pl/api/v3/entries/${message.entry_id}/comments`; } let bodyData = {}; message.content ? bodyData.content = message.content : ""; message.photo ? bodyData.photo = message.photo : ""; message.embed ? bodyData.embed = message.embed : ""; message.survey ? bodyData.survey = message.survey : ""; message.adult ? bodyData.adult = message.adult : ""; if (dev) console.log("bodyData to send: ", bodyData); if (dev) console.log("apiURL: ", apiURL); return new Promise(async (resolve, reject) => { try { await fetch(apiURL, { method: "POST", headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.getItem("token"), }, body: JSON.stringify( { "data": bodyData }) }) .then((response) => { if (dev) console.log("response", response) if (!response.ok) { // zwraca error.status = 400 (jestes blokowany) albo error.status = 409 (pusta tresc) if (dev) console.log(`HTTP error! status: ${response.status}`); resolve(response.status); // throw new T.HTTPError(`HTTP error! status: ${response.status}`, response.status); } }) .then(async (responseJSON) => { if (dev) console.log("responseJSON") if (dev) console.log(responseJSON) resolve(responseJSON.data); }).catch((error) => { if (error instanceof TypeError) { //console.error('xxx Network error:', error); // AWARIA SERWERA } else { //console.error('Other error:', error); } reject(error); }); } catch (error) { //console.error('Other catched error:', error); reject(error); } }); } async function getNewestEntryFromAPI(sectionElement = newestEntrySection) { sectionElement.classList.remove("animationRunning"); let newestEntryObject = await getWykopAPIData(`entries?sort=newest&limit=1`); // https://wykop.pl/api/v3/entries?sort=newest&limit=1 newestEntryObject = newestEntryObject.data[0] if (newestEntryObject.id != newestEntryID) { newestEntryID = newestEntryObject.id sectionElement.classList.add("animationRunning"); let entries_today_count = await getEntryDailyNumber(newestEntryObject); if (entries_today_count) { sectionElement.querySelectorAll(".entry").forEach((el) => { el.dataset.entries_today_count = entries_today_count; }); } sectionElement.querySelectorAll(".wxs_newest_entry_author_username_ahref").forEach((el) => { el.href = `/ludzie/${newestEntryObject.author.username}`; }); sectionElement.querySelectorAll(".wxs_newest_entry_author_gender").forEach((el) => { el.classList.remove("male", "female"); if (newestEntryObject.author.gender == "m") el.classList.add(`male`); else if (newestEntryObject.author.gender == "f") el.classList.add(`female`); }); sectionElement.querySelectorAll(".wxs_newest_entry_author_color").forEach((el) => { el.classList.remove("orange-profile", "green-profile", "burgundy-progile"); el.classList.add(`${newestEntryObject.author.color}-profile`); }); sectionElement.querySelectorAll(".wxs_newest_entry_author_username").forEach((el) => { el.innerHTML = newestEntryObject.author.username; }); sectionElement.querySelectorAll(".wxs_newest_entry_author_avatar").forEach((el) => { if (newestEntryObject.author.avatar) el.src = newestEntryObject.author.avatar; else el.src = "/static/img/svg/avatar-default.svg"; el.alt = newestEntryObject.author.username; }); sectionElement.querySelectorAll(".wxs_newest_entry_ahref").forEach((el) => { el.href = `https://wykop.pl/wpis/${newestEntryObject.id}/wykopx`; }); sectionElement.querySelectorAll(".wxs_newest_entry_created_at").forEach((el) => { el.title = newestEntryObject.created_at; el.datetime = newestEntryObject.created_at; }); sectionElement.querySelectorAll(".wxs_newest_entry_content").forEach((el) => { el.innerHTML = newestEntryObject.content; }); } sectionElement.classList.remove("hidden"); if (document.hidden == false) runWithDelay(2000 + (settings.wxsArchiveXNewestEntryRefresh * 1000), getNewestEntryFromAPI); } if (settings.wxsArchiveXNewestEntry) { CSS += ` body[data-wxs_newest_entry="0"] #wxs_newest_entry { display: none!important; } body[data-wxs_newest_entry="1"] .wykopx_newest_entry_switcher { background: linear-gradient(to bottom right, transparent 0%, transparent 50%, rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0.1) 100%); } body[data-wxs_newest_entry="2"] .wykopx_newest_entry_switcher { background: linear-gradient(to top left, transparent 0%, transparent 50%, rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0.1) 100%); } body[data-wxs_newest_entry="3"] .wykopx_newest_entry_switcher { background: rgba(255, 255, 255, 0.1); } #wxs_newest_entry { right: 40px; width: 400px; height: auto; max-height: 50%; --border-radius: 0px; border-radius: var(--border-radius)!important; position: fixed; bottom: 15px; z-index: 9999; display: grid; color: var(--blackish); background-color: var(--alta); background: linear-gradient(145deg, var(--whitish), var(--alta)); box-shadow: 5px 5px 10px var(--porcelain), -5px -5px 10px var(--porcelain); } #wxs_newest_entry > .entry { border-radius: var(--border-radius)!important; } #wxs_newest_entry > .entry::after { bottom: 10px; left: 20px; content: attr(data-entries_today_count); position: absolute; font-size: 15px; opacity: 0.2; }`; } // TRYB NOCNY W BELCE NAWIGACYJNEJ function addNewestEntryTopNavButton() { if (settings.wxsArchiveXNewestEntry) { wxs_newest_entry = localStorage.getItem('wxs_newest_entry'); if (!wxs_newest_entry) wxs_newest_entry = 1; body.dataset.wxs_newest_entry = wxs_newest_entry; // wykopx_newest_entry_switcher_status_0 - wylaczone // wykopx_newest_entry_switcher_status_1 - wpisy // wykopx_newest_entry_switcher_status_2 - linki // wykopx_newest_entry_switcher_status_3 - oba const wykopx_newest_entry_switcher_button = document.createElement("li"); wykopx_newest_entry_switcher_button.insertAdjacentHTML('afterbegin', `<a href="#"><figure>🤍</figure></a>`); wykopx_newest_entry_switcher_button.classList.add("wykopx_newest_entry_switcher", "notifications", "dropdown"); wykopx_newest_entry_switcher_button.title = `Włącz/wyłącz powiadomienia o najnowszych wpisach na Mikroblogu ${promoString}`; wykopx_newest_entry_switcher_button.addEventListener('click', function () { wxs_newest_entry = localStorage.getItem('wxs_newest_entry'); // 0 - wylaczone // 1 - wpisy // 2 - linki // 3 - wpisy + linki if (wxs_newest_entry === null) { wxs_newest_entry = 1; } else if (wxs_newest_entry == 1) // przy linkach zmienić na == 3 { wxs_newest_entry = 0; } else { wxs_newest_entry++; } if (wxs_newest_entry > 0) getNewestEntryFromAPI(); localStorage.setItem('wxs_newest_entry', wxs_newest_entry); body.dataset.wxs_newest_entry = wxs_newest_entry; }); topNavHeaderRightElement.appendChild(wykopx_newest_entry_switcher_button); } } /* ------ PRZYCISK DO POBIERANIA OBRAZKÓW --------- */ if (settings.wxsDownloadImageButton) { waitForKeyElements("section.entry section.entry-photo figure", wxsDownloadImageButton, false); function wxsDownloadImageButton(entryPhotoFigureElement) { consoleX(`wxsDownloadImageButton()`, 1); let html = `<div class="wykopxs wxs_download_image_button"><a title="Pobierz ten obrazek w pełnej rozdzielczości ${promoString}" href="${entryPhotoFigureElement.querySelector('figcaption a').getAttribute('href')} " download>Pobierz ten obrazek</a></div>`; entryPhotoFigureElement.insertAdjacentHTML('beforeend', html); } } /* ------ IMAGE UPLOADER CTRL+V --------- */ waitForKeyElements("section.editor", sectionEditor, false); function sectionEditor(sectionEditorElement) { consoleX("sectionEditor", 1) const textareaEditorElement = sectionEditorElement.querySelector("textarea"); if (settings.editorSendHotkey != "domyslnie") { sendOnCTRL_ENTER(sectionEditorElement); } if (settings.imageUploaderEnable) { imagePasteFromClipboardListener(sectionEditorElement); } } function sendOnCTRL_ENTER(sectionEditorElement) { consoleX("sendOnCTRL_ENTER", 1) const textareaEditorElement = sectionEditorElement.querySelector("textarea"); const buttonSendElement = sectionEditorElement.querySelector("div.button.send > button"); if (settings.editorSendHotkey == "ctrl_enter") { sectionEditorElement.style.setProperty('--editorSendHotkey', `"CTRL+ENTER"`); buttonSendElement.title = "Wykop X: Wciśnij CTRL + ENTER, aby wysłać " } else if (settings.editorSendHotkey == "enter") { sectionEditorElement.style.setProperty('--editorSendHotkey', `"ENTER"`); buttonSendElement.title = "Wykop X: Wciśnij ENTER, aby wysłać " } else if (settings.editorSendHotkey == "ctrl_s") { sectionEditorElement.style.setProperty('--editorSendHotkey', `"CTRL+S"`); buttonSendElement.title = "Wykop X: Wciśnij CTRL + S, aby wysłać "; } textareaEditorElement.addEventListener('keydown', function (e) { if (settings.editorSendHotkey == "ctrl_enter" && e.ctrlKey && e.key === 'Enter') { e.preventDefault(); buttonSendElement.dispatchEvent(new Event('click')); } else if (settings.editorSendHotkey == "enter" && e.key === 'Enter') { e.preventDefault(); buttonSendElement.dispatchEvent(new Event('click')); } else if (settings.editorSendHotkey == "ctrl_s" && e.ctrlKey && e.key === 's') { e.preventDefault(); buttonSendElement.dispatchEvent(new Event('click')); } }); } function imagePasteFromClipboardListener(sectionEditorElement) { consoleX(`imagePasteFromClipboardListener()`, 1); const textarea = sectionEditorElement.querySelector("textarea"); // if(dev) console.log(textarea); const imageUploadPreview = document.createElement('figure'); imageUploadPreview.classList.add("wxs_uploaded_image_placeholder"); textarea.parentNode.appendChild(imageUploadPreview); const imageUploaderCaption = document.createElement('div'); imageUploaderCaption.classList.add("wxs_uploader_caption"); imageUploaderCaption.innerHTML = `<span class="wxs_upload_first_image">CTRL + V - wklej obrazek ze schowka</span><span class="wxs_upload_and_replace_current_image">CTRL + V - wklej kolejny obrazek, aby zastąpić aktualnie dodany</span>`; textarea.parentNode.appendChild(imageUploaderCaption); // PASTE EVENT document.addEventListener('paste', async (e) => { // e.preventDefault(); // e.stopPropagation(); console.clear(); // if(dev) console.log("e.clipboardData.items") // object DataTransferItemList {0: DataTransferItem, 1: DataTransferItem, ...} // if(dev) console.log(e.clipboardData.items) // if(dev) console.log("clipboardData.types") // if(dev) console.log(e.clipboardData.types) // Array: ['Files', 'text/plain', 'text/html', 'application/vnd.code.copymetadata', 'vscode-editor-data'] // if(dev) console.log("clipboardData.files") // if(dev) console.log(e.clipboardData.files) /* FileList = { 0: File, length: 1 } FileList = { 0: { lastModified: timestamp // 1702989703658 lastModifiedDate: DateTime name: "image.png"; size: 1230133 type: "image/png" webkitRelativePath: "" }, length: 1 } */ // items ->text files -> pliki png const uploadModal = document.querySelector('#modals-container div[data-modal="entryPhoto"] section.modal.entryPhoto'); let fileInput, urlInput; if (uploadModal) { fileInput = uploadModal.querySelector('form div.upload section.file div.upload input'); urlInput = uploadModal.querySelector('form div.field input[inputmode="url"]'); } // W SCHOWKU BYŁ OBRAZEK if (e.clipboardData.files.length > 0) { if (dev) console.log(e.clipboardData.files[0]); let imageFile = e.clipboardData.files[0]; if (dev) console.log("imageFile (original)"); if (dev) console.log(imageFile); // próba konwersji z WEBP na PNG // if (imageFile.type == "image/webp") // image/gif // image/png // image/jpeg // image/webp // { // let reader = new FileReader(); // reader.onload = function (event) // { // let img = new Image(); // img.onload = function () // { // let canvas = document.createElement('canvas'); // canvas.width = this.width; // canvas.height = this.height; // let ctx = canvas.getContext('2d'); // ctx.drawImage(this, 0, 0); // canvas.toBlob(function (blob) // { // imageFile = new File([blob], "test.png", { type: "image/png" }); // if(dev) console.log(imageFile); // }, 'image/png'); // }; // img.src = event.target.result; // }; // reader.readAsDataURL(imageFile); // } if (imageFile.name === "image.png") { imageFile = new File([imageFile], "WykopX", { type: imageFile.type }); } if (dev) console.log("imageFile"); if (dev) console.log(imageFile); const bitmap = await createImageBitmap(imageFile) let canvas = document.createElement('canvas'); canvas.width = bitmap.width; canvas.height = bitmap.height; canvas.style.width = "100%"; canvas.style.maxWidth = "400px"; canvas.classList.add("wxs_uploaded_image_preview", `wxs_uploaded_image_${imageFile.type.split("/")[1]}`); // class="wxs_uploaded_image_png", class="wxs_uploaded_image_jpeg" canvas.title = `WykopX: Plik ${imageFile.type.split("/")[1].toUpperCase()} o wielkości ${imageFile.size < 1048576 ? bytesToKB(imageFile.size, 2) : bytesToMB(imageFile.size)} i rozmiarach ${bitmap.width} x ${bitmap.height}` canvas.getContext('2d').drawImage(bitmap, 0, 0, bitmap.width, bitmap.height); imageUploadPreview.appendChild(canvas); if (dev) console.log("bitmap"); if (dev) console.log(bitmap); if (!fileInput) { let fakeDropEvent = new DragEvent('drop'); Object.defineProperty(fakeDropEvent, 'dataTransfer', { value: { files: [imageFile], // 'file' is the File object you want to drop types: ['Files'], effectAllowed: 'all', dropEffect: 'move', items: [ { kind: 'file', type: imageFile.type, getAsFile: function () { return imageFile; } } ], getData: function () { return ''; }, setData: function () { }, clearData: function () { }, setDragImage: function () { } } }); // Dispatch the fake drop event sectionEditorElement.dispatchEvent(fakeDropEvent); } else { } } // wklejono tekst else if (e.clipboardData.files.length == 0 && e.clipboardData.items.length > 0) { if (dev) console.log("e.clipboardData.items.length > 0"); let textPlainFromClipboard = e.clipboardData.getData('text/plain'); if (dev) console.log("Clipboard text/plain: " + textPlainFromClipboard); let urlsArray = getURLsFromString(textPlainFromClipboard, true); if (urlsArray && urlsArray.length > 0) { urlsArray.forEach((urlFromClipboard) => { if (urlFromClipboard.endsWith(".webp")) { } if (dev) console.log("probuje pobrać plik: " + urlFromClipboard); let img = new Image(); img.src = urlFromClipboard; img.onload = function () { let canvas = document.createElement('canvas'); canvas.width = this.width; canvas.height = this.height; canvas.style.width = "100%"; let ctx = canvas.getContext('2d'); ctx.drawImage(this, 0, 0); imageUploadPreview.appendChild(canvas); /* CORS POLICY ERROR: canvas.toBlob(function (blob) { let imageFile = new File([blob], "test.png", { type: "image/png" }); // You now have a PNG File object, 'newFile', with image data from the original WebP file }, 'image/png'); */ }; // img.crossOrigin = 'anonymous'; CORS }); // e.preventDefault(); } else { // wklejono tekst bez okna modalnego (wiekszosc wypadkow) } } }); } // IMAGE UPLOADER END /* ------------- EVENTS ------------ */ // LOADED PAGE window.onload = function (event) { consoleX("windows.onload", 1) loadTime = dayjs(); browserExecuteOnPageLoad(); browserExecuteOnPageLoadAndPageChange(); }; /* NEW WYKOP PAGE REDIRECTION */ if (window?.navigation != null) /* Firefox nadal tego nie obsluguje */ { navigation.addEventListener("navigate", (event) => { consoleX(`🎈 Event: "navigate"`) loadTime = dayjs(); browserExecuteOnPageChange(event); browserExecuteOnPageLoadAndPageChange(); }); } function handleWindowEvent(event) { if (dev) console.log(`handleWindowEvent() -> event.type: ${event.type} was fired`); // if(dev) console.log(event); } // window.addEventListener('load', handleWindowEvent); // 1. // window.addEventListener('pageshow', handleWindowEvent); // 2. // window.addEventListener('popstate', handleWindowEvent); // window.addEventListener('hashchange', handleWindowEvent); // window.addEventListener('pagehide', handleWindowEvent); // window.addEventListener('beforeunload', handleWindowEvent); // window.addEventListener('unload', handleWindowEvent); /* events in Wykop podczas ladowania strony: 1. window.addEventListener('load', callback); (Event) event.srcElement.URL > "https://wykop.pl/wpis/74180083/pytanie#comment-261404235" 2. window.addEventListener('pageshow', callback); (PageTransitionEvent) firefox: - load, pageshow - OK - brak wykrytych eventów podczas przechodzenia miedzy stronami - brak obiektu window.navigator przejscie na nowa strone, do innego #anchora po kliknieciu w permalink komentarza we wpisie 3. navigation.addEventListener("navigate", callback) (NavigateEvent) “popstate”: This event is fired when the active history entry changes, either by the user navigating to a different state, or by the code calling the history.pushState() or history.replaceState() methods. This event can be used to update the page content according to the new state. “hashchange”: This event is fired when the fragment identifier of the URL (the part after the “#”) changes. This event can be used to implement single-page applications that use different hash values to load different views. “pushstate”: This event is fired when the history.pushState() method is called, which adds a new state to the history stack. This event can be used to perform some actions when a new state is created. “replacestate”: This event is fired when the history.replaceState() method is called, which modifies the current state in the history stack. This event can be used to perform some actions when the current state is changed. */ // ---- PAGE OPENED 1st TIME async function browserExecuteOnPageLoad() { // awariaSerwera(); // consoleX(`browserExecuteOnPageLoad`, 1); if (isURLChanged()) newPageURL() const loggedUserJSON = await getWykopAPIData("profile") // -> https://wykop.pl/api/v3/profile loggedUser = loggedUserJSON.data; //ser.username = user.data.username; if (!(loggedUser?.username)) { const topHeaderProfileButton = document.querySelector("body header > div.right > nav > ul > li.account a.avatar"); if (topHeaderProfileButton) { loggedUser.username = topHeaderProfileButton.getAttribute("href").split('/')[2]; } } if (loggedUser?.username) { if (settings.editorShowMyUsername) { bodySection.style.setProperty('--myUsername', `"${loggedUser.username}"`); bodySection.style.setProperty('--myUsernameAs', `"jako ${loggedUser.username}"`); bodySection.style.setProperty('--myUsernameAS', `"JAKO ${loggedUser.username}"`); bodySection.style.setProperty('--myUsernameAddingAs', `"Dodajesz z konta ${loggedUser.username}"`); } // UŻYTKOWNIK MA BANA if (loggedUser?.status && loggedUser.status == "banned") { settings.authorBlocksYouCheckingEnable = false; // BlockDetector off for banned user settings.editorSendHotkey = "domyslnie"; settings.editorSendHotkeyShowOnSendButton = false; body.dataset.userBanned = "true"; // <body data-user-banned="true"> if (settings.haveBanDisableTextarea) { // 🍌 Pokaż informację o banie w edytorze nowego wpisu/komentarza bodySection.style.setProperty('--myUsernameAddingAs', `"🍌 ${loggedUser.username}, masz bana. Nie możesz dodawać wpisów i komentarzy"`); } } } else { // niezalogowany } // if (loggedUser.username == null) consoleX(`Cześć Anon.Nie jesteś zalogowany na Wykopie(⌐ ͡■ ͜ʖ ͡■)`); // else consoleX(`Cześć ${ loggedUser.username }(⌐ ͡■ ͜ʖ ͡■)`); focusOnAddingNewMicroblogEntry(); addWykopXButtonsToNavBar(); if (settings.wxsSwitchesEnable) { runWithDelay(200, function () { addSwitchButtons(); }); } if (settings.observedTagsInRightSidebarEnable) { runWithDelay(500, function () { addObservedTagsToRightSidebar(); }); } runWithDelay(400, function () { addExtraButtons(); }); // 8s runWithDelay(8000, function () { if (settings.topNavNightSwitchButton) addNightModeButtonToNavBar(); hideWykopXSPromo(); topNavLogoClick(); topNavHomeButtonClickRefreshOrRedirect(); addNotificationSummaryButtonToNavBar(); topNavMicroblogButtonClickRefreshOrRedirect(); }); if (settings.notatkowatorEnable) { runWithDelay(17000, function () { createMenuItemForNotatkowator(); }); } if (settings.mirkoukrywaczEnable) { runWithDelay(17000, function () { createMenuItemForMirkoukrywacz(); }); } // 20s //runWithDelay(25000, function () runWithDelay(1000, function () { checkVersionForUpdates(); createProfileDropdownMenuItem( { text: `Pomoc: Wykop X`, title: "Otwórz stronę Wiki z informacjami o dodatku Wykop X", className: `wykopx_wiki`, id: undefined, url: "http://wiki.wykopx.pl/", target: "wykopx", icon: null, number: null }); addWykopXPromoBanner(); }); runWithDelay(30000, async function () { if (loggedUser?.username) { try { let settings_list_update = await localStorageObserved.getItem("settings_list_update"); if (settings_list_update == null) { POSTDATATOWYKOPX(); } else { if (loadTime.diff(dayjs(settings_list_update), "days") > 1) { POSTDATATOWYKOPX(); } else { return true; } } } catch (err) { if (dev) console.log(err); } } }); if (settings.wxsArchiveXNewestEntry) { addNewestEntryTopNavButton(); archiveXNewestEntry(); } } // ----- PAGE NAVIGATION async function browserExecuteOnPageChange(event) { consoleX(`browserExecuteOnPageChange() -> navigation -> navigate event — ${event.type}`, 1); consoleX(`browserExecuteOnPageChange() -> document.title: ${document.title}`, 1); // if(dev) console.log(event); pageTabTitleOriginal = document.title; pageTabTitleProcessed = pageTabTitleOriginal; //visiblePlusesObserver.disconnect(); //if (sectionObjectIntersectionObserver) sectionObjectIntersectionObserver.disconnect(); //if (settings.actionBoxEnable && (settings.filterUserComments || settings.filterUserReplies)) filterUserOff(); // usuniecie filtra komentarzy runWithDelay(500, function () { if (isURLChanged()) { const previousPageSubtype = pageSubtype; newPageURL(); if (pageSubtype == previousPageSubtype) removeAllDataWXSAttributes(); } }); // 7s if (!settings.tabChangeOnlyOnHiddenState) runWithDelay(7000, () => { executeTabAndFaviconChanges() }) } // ---- PAGE OPENED 1st TIME + PAGE NAVIGATION async function browserExecuteOnPageLoadAndPageChange() { consoleX(`browserExecuteOnPageLoadAndPageChange()`, 1); runWithDelay(100, function () { countNumberOfNotificationsOnDesktop(); }); if (settings.mirkoukrywaczEnable) { runWithDelay(3000, function () { mirkoukrywaczHideAllBlockedElements(); // ukrycie elementow blokowanych przez Mirkowolacz oraz actionBox }); } if (pageType == "tag" && settings.tagHeaderEditable) { runWithDelay(2200, function () { tagHeaderEditableWatcher(); }) } if (pageType == "profil") // info o blokadzie { // runWithDelay(100, function () // { // }) } if (settings.autoOpenMoreContentEverywhere) { runWithDelay(6000, function () { autoOpenMoreContentEverywhere(); }) } // 10s if (settings.autoOpenSpoilersEverywhere) { runWithDelay(10000, function () { autoOpenSpoilersEverywhere(); }); } if (settings.removeAnnoyancesEnable) { runWithDelay(18000, function () { if (settings.removeAnnoyancesIframes) waitForKeyElements(`html > iframe, html > body > iframe`, removeFromDOM, false); if (settings.removeAnnoyancesScripts) waitForKeyElements(`html > head > script[src^="https://"]`, removeFromDOM, false); }) runWithDelay(3000, function () { removeAnnoyances() }) } // waitForKeyElements("main.main > section > div.content section.stream > header.stream-top", buildConsole, false) // buildConsole(); // refreshConsole(); } // async function awariaSerwera() // { // let awaria = document.querySelector(`body > section > footer > a[onclick="window.location.href = reloadURL"`); // if (awaria) alert("AWARIA"); // } // XHR BLOCKER // Wykop XS-XHR Blocker // https://greasyfork.org/en/scripts/486722-wykop-xs-xhr-blocker setSettingsValueFromCSSProperty("wxsBlockXHREnable"); if (settings.wxsBlockXHREnable) { setSettingsValueFromCSSProperty("wxsBlockXHRExternal"); setSettingsValueFromCSSProperty("wxsBlockXHRInternalAds"); setSettingsValueFromCSSProperty("wxsBlockXHRConsoleLogAllowed", false); setSettingsValueFromCSSProperty("wxsBlockXHRConsoleLogBlocked", false); setSettingsValueFromCSSProperty("rightSidebarHidePopularTags", false); setSettingsValueFromCSSProperty("rightSidebarHideRelatedTags", false); setSettingsValueFromCSSProperty("rightSidebarHideHits", false); setSettingsValueFromCSSProperty("rightSidebarHideEntriesHot", false); setSettingsValueFromCSSProperty("rightSidebarHideEntriesActive", false); setSettingsValueFromCSSProperty("rightSidebarHideEntriesPopular", false); setSettingsValueFromCSSProperty("rightSidebarHideUpcomingActive", false); setSettingsValueFromCSSProperty("rightSidebarHideLinksNewest", false); setSettingsValueFromCSSProperty("rightSidebarHideLinksActive", false); setSettingsValueFromCSSProperty("rightSidebarHideLinksPopular", false); } let xhook = null; if (settings.infiniteScrollEntriesEnabled || settings.infiniteScrollLinksEnabled || settings.wxsBlockXHREnable) { //XHook-v1.6.2-https://github.com/jpillora/xhook //Jaime Pillora <[email protected]>-MIT Copyright 2023 xhook = function () { "use strict"; const e = (e, t) => Array.prototype.slice.call(e, t); let t = null; "undefined" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ? t = self : "undefined" != typeof global ? t = global : window && (t = window); const n = t, o = t.document, r = ["load", "loadend", "loadstart"], s = ["progress", "abort", "error", "timeout"], a = e => ["returnValue", "totalSize", "position"].includes(e), i = function (e, t) { for (let n in e) { if (a(n)) continue; const o = e[n]; try { t[n] = o } catch (e) { } } return t }, c = function (e, t, n) { const o = e => function (o) { const r = {}; for (let e in o) { if (a(e)) continue; const s = o[e]; r[e] = s === t ? n : s } return n.dispatchEvent(e, r) }; for (let r of Array.from(e)) n._has(r) && (t[`on${r}`] = o(r)) }, u = function (e) { if (o && null != o.createEventObject) { const t = o.createEventObject(); return t.type = e, t } try { return new Event(e) } catch (t) { return { type: e } } }, l = function (t) { let n = {}; const o = e => n[e] || [], r = { addEventListener: function (e, t, r) { n[e] = o(e), n[e].indexOf(t) >= 0 || (r = void 0 === r ? n[e].length : r, n[e].splice(r, 0, t)) }, removeEventListener: function (e, t) { if (void 0 === e) return void (n = {}); void 0 === t && (n[e] = []); const r = o(e).indexOf(t); -1 !== r && o(e).splice(r, 1) }, dispatchEvent: function () { const n = e(arguments), s = n.shift(); t || (n[0] = i(n[0], u(s)), Object.defineProperty(n[0], "target", { writable: !1, value: this })); const a = r[`on${s}`]; a && a.apply(r, n); const c = o(s).concat(o("*")); for (let e = 0; e < c.length; e++) { c[e].apply(r, n) } }, _has: e => !(!n[e] && !r[`on${e}`]) }; return t && (r.listeners = t => e(o(t)), r.on = r.addEventListener, r.off = r.removeEventListener, r.fire = r.dispatchEvent, r.once = function (e, t) { var n = function () { return r.off(e, n), t.apply(null, arguments) }; return r.on(e, n) }, r.destroy = () => n = {}), r }; var f = function (e, t) { switch (typeof e) { case "object": return n = e, Object.entries(n).map((([e, t]) => `${e.toLowerCase()}: ${t}`)).join("\r\n"); case "string": return function (e, t) { const n = e.split("\r\n"); null == t && (t = {}); for (let e of n) if (/([^:]+):\s*(.+)/.test(e)) { const e = null != RegExp.$1 ? RegExp.$1.toLowerCase() : void 0, n = RegExp.$2; null == t[e] && (t[e] = n) } return t }(e, t) }var n; return [] }; const d = l(!0), p = e => void 0 === e ? null : e, h = n.XMLHttpRequest, y = function () { const e = new h, t = {}; let n, o, a, u = null; var y = 0; const v = function () { if (a.status = u || e.status, -1 !== u && (a.statusText = e.statusText), -1 === u); else { const t = f(e.getAllResponseHeaders()); for (let e in t) { const n = t[e]; if (!a.headers[e]) { const t = e.toLowerCase(); a.headers[t] = n } } } }, b = function () { x.status = a.status, x.statusText = a.statusText }, g = function () { n || x.dispatchEvent("load", {}), x.dispatchEvent("loadend", {}), n && (x.readyState = 0) }, E = function (e) { for (; e > y && y < 4;)x.readyState = ++y, 1 === y && x.dispatchEvent("loadstart", {}), 2 === y && b(), 4 === y && (b(), "text" in a && (x.responseText = a.text), "xml" in a && (x.responseXML = a.xml), "data" in a && (x.response = a.data), "finalUrl" in a && (x.responseURL = a.finalUrl)), x.dispatchEvent("readystatechange", {}), 4 === y && (!1 === t.async ? g() : setTimeout(g, 0)) }, m = function (e) { if (4 !== e) return void E(e); const n = d.listeners("after"); var o = function () { if (n.length > 0) { const e = n.shift(); 2 === e.length ? (e(t, a), o()) : 3 === e.length && t.async ? e(t, a, o) : o() } else E(4) }; o() }; var x = l(); t.xhr = x, e.onreadystatechange = function (t) { try { 2 === e.readyState && v() } catch (e) { } 4 === e.readyState && (o = !1, v(), function () { if (e.responseType && "text" !== e.responseType) "document" === e.responseType ? (a.xml = e.responseXML, a.data = e.responseXML) : a.data = e.response; else { a.text = e.responseText, a.data = e.responseText; try { a.xml = e.responseXML } catch (e) { } } "responseURL" in e && (a.finalUrl = e.responseURL) }()), m(e.readyState) }; const w = function () { n = !0 }; x.addEventListener("error", w), x.addEventListener("timeout", w), x.addEventListener("abort", w), x.addEventListener("progress", (function (t) { y < 3 ? m(3) : e.readyState <= 3 && x.dispatchEvent("readystatechange", {}) })), "withCredentials" in e && (x.withCredentials = !1), x.status = 0; for (let e of Array.from(s.concat(r))) x[`on${e}`] = null; if (x.open = function (e, r, s, i, c) { y = 0, n = !1, o = !1, t.headers = {}, t.headerNames = {}, t.status = 0, t.method = e, t.url = r, t.async = !1 !== s, t.user = i, t.pass = c, a = {}, a.headers = {}, m(1) }, x.send = function (n) { let u, l; for (u of ["type", "timeout", "withCredentials"]) l = "type" === u ? "responseType" : u, l in x && (t[u] = x[l]); t.body = n; const f = d.listeners("before"); var p = function () { if (!f.length) return function () { for (u of (c(s, e, x), x.upload && c(s.concat(r), e.upload, x.upload), o = !0, e.open(t.method, t.url, t.async, t.user, t.pass), ["type", "timeout", "withCredentials"])) l = "type" === u ? "responseType" : u, u in t && (e[l] = t[u]); for (let n in t.headers) { const o = t.headers[n]; n && e.setRequestHeader(n, o) } e.send(t.body) }(); const n = function (e) { if ("object" == typeof e && ("number" == typeof e.status || "number" == typeof a.status)) return i(e, a), "data" in e || (e.data = e.response || e.text), void m(4); p() }; n.head = function (e) { i(e, a), m(2) }, n.progress = function (e) { i(e, a), m(3) }; const d = f.shift(); 1 === d.length ? n(d(t)) : 2 === d.length && t.async ? d(t, n) : n() }; p() }, x.abort = function () { u = -1, o ? e.abort() : x.dispatchEvent("abort", {}) }, x.setRequestHeader = function (e, n) { const o = null != e ? e.toLowerCase() : void 0, r = t.headerNames[o] = t.headerNames[o] || e; t.headers[r] && (n = t.headers[r] + ", " + n), t.headers[r] = n }, x.getResponseHeader = e => p(a.headers[e ? e.toLowerCase() : void 0]), x.getAllResponseHeaders = () => p(f(a.headers)), e.overrideMimeType && (x.overrideMimeType = function () { e.overrideMimeType.apply(e, arguments) }), e.upload) { let e = l(); x.upload = e, t.upload = e } return x.UNSENT = 0, x.OPENED = 1, x.HEADERS_RECEIVED = 2, x.LOADING = 3, x.DONE = 4, x.response = "", x.responseText = "", x.responseXML = null, x.readyState = 0, x.statusText = "", x }; y.UNSENT = 0, y.OPENED = 1, y.HEADERS_RECEIVED = 2, y.LOADING = 3, y.DONE = 4; var v = { patch() { h && (n.XMLHttpRequest = y) }, unpatch() { h && (n.XMLHttpRequest = h) }, Native: h, Xhook: y }; function b(e, t, n, o) { return new (n || (n = Promise))((function (r, s) { function a(e) { try { c(o.next(e)) } catch (e) { s(e) } } function i(e) { try { c(o.throw(e)) } catch (e) { s(e) } } function c(e) { var t; e.done ? r(e.value) : (t = e.value, t instanceof n ? t : new n((function (e) { e(t) }))).then(a, i) } c((o = o.apply(e, t || [])).next()) })) } const g = n.fetch; function E(e) { return e instanceof Headers ? m([...e.entries()]) : Array.isArray(e) ? m(e) : e } function m(e) { return e.reduce(((e, [t, n]) => (e[t] = n, e)), {}) } const x = function (e, t = { headers: {} }) { let n = Object.assign(Object.assign({}, t), { isFetch: !0 }); if (e instanceof Request) { const o = function (e) { let t = {}; return ["method", "headers", "body", "mode", "credentials", "cache", "redirect", "referrer", "referrerPolicy", "integrity", "keepalive", "signal", "url"].forEach((n => t[n] = e[n])), t }(e), r = Object.assign(Object.assign({}, E(o.headers)), E(n.headers)); n = Object.assign(Object.assign(Object.assign({}, o), t), { headers: r, acceptedRequest: !0 }) } else n.url = e; const o = d.listeners("before"), r = d.listeners("after"); return new Promise((function (t, s) { let a = t; const i = function (e) { if (!r.length) return a(e); const t = r.shift(); return 2 === t.length ? (t(n, e), i(e)) : 3 === t.length ? t(n, e, i) : i(e) }, c = function (e) { if (void 0 !== e) { const n = new Response(e.body || e.text, e); return t(n), void i(n) } u() }, u = function () { if (!o.length) return void l(); const e = o.shift(); return 1 === e.length ? c(e(n)) : 2 === e.length ? e(n, c) : void 0 }, l = () => b(this, void 0, void 0, (function* () { const { url: t, isFetch: o, acceptedRequest: r } = n, c = function (e, t) { var n = {}; for (var o in e) Object.prototype.hasOwnProperty.call(e, o) && t.indexOf(o) < 0 && (n[o] = e[o]); if (null != e && "function" == typeof Object.getOwnPropertySymbols) { var r = 0; for (o = Object.getOwnPropertySymbols(e); r < o.length; r++)t.indexOf(o[r]) < 0 && Object.prototype.propertyIsEnumerable.call(e, o[r]) && (n[o[r]] = e[o[r]]) } return n }(n, ["url", "isFetch", "acceptedRequest"]); return e instanceof Request && c.body instanceof ReadableStream && (c.body = yield new Response(c.body).text()), g(t, c).then((e => i(e))).catch((function (e) { return a = s, i(e), s(e) })) })); u() })) }; var w = { patch() { g && (n.fetch = x) }, unpatch() { g && (n.fetch = g) }, Native: g, Xhook: x }; const O = d; return O.EventEmitter = l, O.before = function (e, t) { if (e.length < 1 || e.length > 2) throw "invalid hook"; return O.on("before", e, t) }, O.after = function (e, t) { if (e.length < 2 || e.length > 3) throw "invalid hook"; return O.on("after", e, t) }, O.enable = function () { v.patch(), w.patch() }, O.disable = function () { v.unpatch(), w.unpatch() }, O.XMLHttpRequest = v.Native, O.fetch = w.Native, O.headers = f, O.enable(), O }(); } if (xhook != null && settings.wxsBlockXHREnable) { if (!dev) dev = wykopxSettings.getPropertyValue("--wxsDev") ? wykopxSettings.getPropertyValue("--wxsDev") === '1' : false; const allowed = ['https://wykop.pl/api/', 'https://raw.githubusercontent.com/wykopx/', 'wykopx.pl']; // allowed.push(); if (settings.wxsBlockXHRExternal) { } const prohibited = []; if (settings.wxsBlockXHRInternalAds) prohibited.push("https://wykop.pl/api/v3/ads"); if (settings.rightSidebarHidePopularTags) prohibited.push("https://wykop.pl/api/v3/tags/popular?sidebar=true"); if (settings.rightSidebarHideRelatedTags) prohibited.push("/related?sidebar=true"); //if (settings.rightSidebarHideEntriesHot) prohibited.push("https://wykop.pl/api/v3/entries?sort=hot&last_update=6"); if (settings.rightSidebarHideEntriesActive) prohibited.push("https://wykop.pl/api/v3/entries?sort=active&sidebar=true"); if (settings.rightSidebarHideEntriesPopular) prohibited.push("https://wykop.pl/api/v3/entries?sort=hot&last_update=12&sidebar=true"); if (settings.rightSidebarHideUpcomingActive) prohibited.push("https://wykop.pl/api/v3/links?type=upcoming&sort=active&sidebar=true"); if (settings.rightSidebarHideHits) prohibited.push("https://wykop.pl/api/v3/hits/links?sort=day&sidebar=true"); if (settings.rightSidebarHideLinksNewest) prohibited.push("&sort=newest&sidebar=true"); if (settings.rightSidebarHideLinksActive) prohibited.push("&sort=active&sidebar=true"); // if (settings.rightSidebarHideLinksPopular) prohibited.push(""); // popularne w kategorii https://wykop.pl/api/v3/search/links?sort=popular&category=rozrywka&date_from=2024-02-16+24:30:06&sidebar=true // https://wykop.pl/api/v3/entries?sort=active&sidebar=true // https://wykop.pl/api/v3/entries?sort=hot&last_update=24&sidebar=true // https://wykop.pl/api/v3/entries?sort=hot&last_update=12&sidebar=true // https://wykop.pl/api/v3/hits/links?sort=day&sidebar=true // https://wykop.pl/api/v3/hits/links?sort=week&sidebar=true // https://wykop.pl/api/v3/links?type=homepage&sort=newest&sidebar=true // https://wykop.pl/api/v3/links?type=upcoming&sort=newest&sidebar=true // https://wykop.pl/api/v3/links?type=upcoming&sort=active&sidebar=true // https://wykop.pl/api/v3/links?type=homepage&sort=active&sidebar=true // https://wykop.pl/api/v3/links/stats/upcoming // https://wykop.pl/api/v3/search/links?sort=popular&bucket=17c344d6871fcac52893&sidebar=true // https://wykop.pl/api/v3/search/entries?sort=popular&bucket=17c344d6871fcac52893&sidebar=true // https://wykop.pl/api/v3/search/links?sort=popular&category=rozrywka&date_from=2024-02-16+24:30:06&sidebar=true // https://wykop.pl/api/v3/tags/polska/related?sidebar=true // https://wykop.pl/api/v3/tags/popular?sidebar=true // https://wykop.pl/api/v3/buckets/status // https://wykop.pl/api/v3/notifications/status // https://wykop.pl/api/v3/notifications/tags?page=1 // https://wykop.pl/api/v3/notifications/entries?page=1 // https://wykop.pl/api/v3/pm/conversations xhook.before((request, callback) => { if (allowed.some(str => request.url.includes(str)) && !prohibited.some(str => request.url.includes(str))) { if (settings.wxsBlockXHRConsoleLogAllowed) console.log("Wykop XS: XHR Blocker | XHR: 🌍 " + request.url); callback(); } else { if (settings.wxsBlockXHRConsoleLogBlocked) console.log("Wykop XS: XHR Blocker | XHR: ⛔ " + request.url + " (BLOCKED)"); } }); } if (xhook != null && (settings.infiniteScrollEntriesEnabled || settings.infiniteScrollLinksEnabled)) { xhook.after((request, response) => { // if(dev) console.log("✔ xhook.after-request: " + request.url); // if(dev) console.log(request); // if(dev) console.log("✔ xhook.after-response"); // if(dev) console.log(response); if (response.status == 200 && request.url.endsWith("page=1")) { // if(dev) console.log("request.url.endsWith(page = 1)") if ((settings.infiniteScrollEntriesEnabled && pageType == "wpis") || (settings.infiniteScrollLinksEnabled && pageType == "znalezisko")) { let url = null; try { url = new URL(request.url); } catch { return } // if(dev) console.log("xhook.after-request.url"); // if(dev) console.log(request.url); // if(dev) console.log(url); //if (url.host == "wykop.pl") if (1) { let searchParams = new URLSearchParams(url.searchParams) // if(dev) console.log("✔ xhook.after-url.href"); // if(dev) console.log(url.href); // if(dev) console.log("✔ xhook.after-searchParams"); // if(dev) console.log(searchParams); // if(dev) console.log(`✔ xhook.after-${url.href} searchParams.has('page'): ` + searchParams.has('page')) // if(dev) console.log(`✔ xhook.after-${url.href} searchParams.get('page'): ` + searchParams.get('page')) if (searchParams.has('page') && searchParams.get('page') == 1) { // if(dev) console.log("✔ xhook.after-INFINITE SCROLL"); let regex = /\/api\/v3\/entries\/\d+\/comments$/; if (pageType == "znalezisko") regex = /\/api\/v3\/links\/\d+\/comments$/; // if(dev) console.log("url.pathname"); // if(dev) console.log(url.pathname); if (regex.test(url.pathname)) { let json = JSON.parse(response.text) // if(dev) console.log("json") // if(dev) console.log(json) for (let page = 2; page <= Math.ceil(json['pagination']['total'] / json['pagination']['per_page']); ++page) { searchParams.set('page', page.toString()) let req = new XMLHttpRequest(); req.open('GET', `${url.pathname} ? ${searchParams.toString()}`, false) for (let key of Object.keys(request.headers)) { req.setRequestHeader(key, request.headers[key]) } req.send(null) if (req.status !== 200) { break } let data = JSON.parse(req.responseText)['data'] if (data.length === 0) { break } json['data'] = json['data'].concat(data) } // Hide pagination json['pagination']['total'] = 0 // Override response text response.text = JSON.stringify(json) } } } } } }); } // USUWANIE NATARCZYWYCH IFRAME, REKLAM I GDPR function removeAnnoyances() { consoleX("removeAnnoyances()", 1) if (settings.removeAnnoyancesIframes) { document.querySelectorAll("html > iframe, html > body > iframe").forEach((el) => { removeFromDOM(el) }); } if (settings.removeAnnoyancesAds) { /* removing .pub-slot-wrapper without .top .sidebar-1 oraz .screening - causes Node not found error when loading further pages */ /* .pub.slot-wrapper classes: .stream-bottom`.stream-1 .stream-2 .stream-3 .stream-4 .stream-5 .stream-6 .stream-7 .stream-8 .market-1 .sidebar-2 .sidebar-3 .sponsored-1 .sponsored-2 */ /* removing .pub-slot-wrapper without .top oraz .screening - causes Node not found error when loading further pages */ document.querySelectorAll(`.pub-slot-wrapper:not(.sidebar-1):not(.screening):not(.top):not(:has(section.premium-pub.link-block))`).forEach((el) => { if (dev) console.log(`🧧 removeAnnoyancesAds - `, el) consoleData.annoyances.ads.count++; removeFromDOM(el); }); } if (settings.removeAnnoyancesGDPR) { document.querySelectorAll(`div[class^="app_gdpr"]`).forEach((el) => { document.querySelector("body").style = "overflow: initial!important;"; consoleData.annoyances.other.count++; removeFromDOM(el); }); } if (settings.removeAnnoyancesScripts) { document.querySelectorAll(`html > head > script[src^="https://"]`).forEach((el) => { removeFromDOM(el); }); document.querySelectorAll(`html > head > script[src^="//"]`).forEach((el) => { removeFromDOM(el); }); } } function removeFromDOM(Node) { if (Node) { consoleX(`removeFromDOM()`, 1); if (Node instanceof Element) { consoleX("removeFromDOM(): REMOVING DOM Node", 1); // if(dev) console.log(Node) let nodeName = Node.nodeName; nodeName = nodeName.toLowerCase() // if(dev) console.log("nodeName:" + nodeName) if (!consoleData.annoyances[nodeName]) { consoleData.annoyances[nodeName] = { count: 0 }; } consoleData.annoyances[nodeName].count++; Node.remove(); } consoleData.annoyances.count++; // if(dev) console.log("removeFromDOM(): REMOVED TOTAL: ", consoleData.annoyances.count) // if(dev) console.log("removeFromDOM(): consoleData:"); // if(dev) console.log(consoleData); refreshConsole(); } } /* CSS STYLES */ CSS += ` body small { font-size: 0.8em; line-height: 0.9em; } .hidden { display: none!important; } section.editor>header>ul>li>i, /* napisy przy ikonkach edytora */ aside.profile-top>section>header>ul li, /* ikonki "Zgłoś", "Zablokuj" */ aside.profile-top>section>header>ul li a, /* ikonka "Napisz do użytkownika"*/ section.editor div.enter label, /* przycisk wysyłania enterem */ aside.tag-top aside ul > li.edit > a, /* edycja tagu autorskiego */ section.popper > section.tooltip > footer > ul.icons > li, /* ikonki w menu kontekstowym */ section.popper > section.tooltip > footer > ul.icons > li > a, /* ikonki w menu kontekstowym */ section.link-page > section.link > section.link-block > section > article > section.actions > ul > li > ul > li > a /* action menu znaleziska nadpisane przez a, span { font-size: 14px; } */ { font-size: 0; } aside.profile-top > section > header > div h1 /* nazwa nicku na profilu */ { display: flex; align-items: center; } `; if (settings.editorSendHotkey != "domyslnie") { if (settings.editorSendHotkeyShowOnSendButton) { CSS += ` section.editor > footer > div.buttons > div.button.send > button.target { display: flex; flex-wrap: nowrap; flex-direction: row; column-gap: 4px; text-transform: capitalize; } section.editor > footer > div.buttons > div.button.send > button.target::before { content: var(--editorSendHotkey); text-transform: initial; border-right: 1px solid var(--gullGray); padding-right: 4px; }`; } } if (settings.imageUploaderEnable) { CSS += ` /* IMAGE UPLOADER */ section.editor figure.wxs_uploaded_image_placeholder { display: flex; position: relative; } section.editor div.wxs_uploader_caption > span { display: none; font-size: 15px; color: var(--gullGray); text-transform: initial; position: relative; margin-top: 15px; padding-top: 15px; margin-bottom: 15px; border-top: 1px dotted rgba(120, 120, 120, 0.3); } section.editor:has(aside li.photo) div.wxs_uploader_caption > span.wxs_upload_and_replace_current_image, section.editor:not(:has(aside li.photo)) div.wxs_uploader_caption > span.wxs_upload_first_image { display: flex; } section.editor figure.wxs_uploaded_image_placeholder:has(canvas) { margin: 20px 0px; border-radius: 4px!important; display: flex; flex-direction: row-reverse; flex-wrap: wrap-reverse; justify-content: start; align-content: start; gap: 10px; } section.editor figure.wxs_uploaded_image_placeholder > canvas { display: none; } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder > canvas { display: flex; max-width: 400px!important; border: 1px solid var(--whiteOpacity07, rgba(128, 128, 128, 0.7))!important; border-radius: 4px!important; box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3), -3px -3px 12px rgba(0, 0, 0, 0.3), 0px 0px 22px rgba(0, 0, 0, 0.3); opacity: 0.7; filter: brightness(0.8) grayscale(0.6); } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder > canvas:hover { max-width: 400px!important; opacity: 1; filter: brightness(1.3) grayscale(0)!important; border: 1px solid var(--whiteOpacity07, rgba(128, 128, 128, 0.7))!important; } /* ten plik zostanie wysłany (ostatni na liscie) */ section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder > canvas:nth-last-child(1 of canvas) { opacity: 1; filter: brightness(1.1) grayscale(0); border-color: rgba(21, 138, 255, .89)!important; border: 20px solid red; } /* lista wgranych plików wraz z nazwami */ section.editor > aside > ul > li.photo > span { line-height: 24px; } section.editor > aside > ul > li.photo::before { top: unset!important; left: unset!important; } section.editor > aside > ul > li.photo { padding: 8px 0px 8px 10px; border-radius: 4px; background-color: rgba(255, 0, 0, 0.1); opacity: 0.6; } section.editor > aside > ul > li:nth-last-child(1 of li.photo) { opacity: 1; background-color: rgba(21, 138, 255, .01); } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder canvas.wxs_uploaded_image_preview::after { display: flex; font-size: 14px; color: rgba(254, 255, 255, 0.3); background-color: rgba(0, 0, 0, 0.7); border: 1px solid rgba(0, 0, 0, 1); position: absolute; left: 10px; bottom: 10rem; padding: 4px 11px; border-radius: 3px; } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder canvas.wxs_uploaded_image_png::after { content: "PNG"; } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder canvas.wxs_uploaded_image_jpeg::after, section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder canvas.wxs_uploaded_image_jpeg::after { content: "JPEG"; } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder canvas.wxs_uploaded_image_gif::after { content: "GIF"; } section.editor:has(aside li.photo) figure.wxs_uploaded_image_placeholder canvas.wxs_uploaded_image_webp::after { content: "WEBP"; } /* IMAGE UPLOADER - END */ `; } if (settings.haveBanDisableTextarea) { CSS += ` section.editor > div.content::before { content: var(--myUsernameAddingAs); display: flex; position: relative; color: var(--gullGray); font-size: 15px; text-transform: initial; margin-top: 15px; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px dotted rgba(120, 120, 120, 0.3); } `; } if (settings.editorShowMyUsername) { CSS += ` header.stream-top:has(+ section.editor) > h1::after { margin-left: 5px; content: var(--myUsernameAS); text-transform: initial; } section.editor > div.content::before { content: var(--myUsernameAddingAs); display: flex; position: relative; color: var(--gullGray); font-size: 15px; text-transform: initial; margin-top: 15px; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px dotted rgba(120, 120, 120, 0.3); } `; if (settings.editorShowMyUsernameOnSendButton) { CSS += ` section.editor > footer > div.buttons > div.button.send > button.target { display: flex; flex-wrap: nowrap; flex-direction: row; column-gap: 4px; text-transform: capitalize; } section.editor > footer > div.buttons > div.button.send > button.target::after { content: var(--myUsernameAs); text-transform: initial; } `; } } if (settings.observedTagsInRightSidebarEnable) { CSS += ` main.main > section > section.sidebar { display: flex; flex-direction: column; } section.wykopx_your_observed_tags { order: -9999; display: flex!important; flex-direction: column; gap: 16px; } section.wykopx_your_observed_tags div.wykopx_quick_search_container { display: flex!important; width: 100%; position: relative; } section.wykopx_your_observed_tags .wykopx_quick_search_container, section.wykopx_your_observed_tags > div.content { margin-top: 0px!important; } section.wykopx_your_observed_tags .wykopx_quick_search_container input.wykopx_quick_search { box-sizing: border-box; width: 100%; height: 25px; /*25px;*/ font-size: 15px; /* 15px; */ padding: 17px 10px 17px 34px; opacity: 0.5; color: var(--colorLinkTag, rgba(47, 174, 255, 1)); border: 1px solid var(--blackOpacity05, rgba(175, 175, 175, 0.5)); background-color: var(--whiteOpacity01, rgba(175, 175, 175, 0.1)); } section.wykopx_your_observed_tags .wykopx_quick_search_container:hover input.wykopx_quick_search, section.wykopx_your_observed_tags .wykopx_quick_search_container input.wykopx_quick_search:focus, section.wykopx_your_observed_tags .wykopx_quick_search_container input.wykopx_quick_search:not(:placeholder-shown) { opacity: 1; background-color: var(--whiteOpacity03, rgba(175, 175, 175, 0.1)); } section.wykopx_your_observed_tags .wykopx_quick_search_container::before { content: "🔍"; font-size: 16px; display: block; position: absolute; left: 8px; top: 6px; min-width: 20px; min-height: 20px; max-height: 20px; max-width: 20px; }`; } if (settings.quickLinksEnable) { CSS += `:root { --quickLinksAFontSize: var(--textFontSize13, 13px); --quickLinksSpanFontSize: var(--textFontSize11, 11px); } header.header > div.left > #wxs_quick_links > nav { font-size: var(--quickLinksAFontSize, 13px); } header.header > div.left > #wxs_quick_links > nav > section span { font-size: var(--quickLinksSpanFontSize, 11px); } header.header > div.left > #wxs_quick_links { display: flex; top: calc(var(--topNavHeigh, 48px) - 1px); position: absolute; left: -1px; width: 100vw; height: 1px; z-index: -100; } @keyframes quickLinksAnimationOn { 0% { display: none; top: -20px; opacity: 1; } 1% { display: flex; top: -20px; opacity: 0; } 99% { display: flex; top: -20px; opacity: 0; } 100% { display: flex; top: 0px; opacity: 1; } } @keyframes quickLinksAnimationOff { 0% { display: flex; top: 0px; opacity: 1; } 50% { display: flex; top: 0px; opacity: 0; } 99% { display: flex; top: -20px; opacity: 0; } 100% { display: none; top: -20px; opacity: 0; } } header.header > div.left > #wxs_quick_links > nav { z-index: -999; column-gap: 0px; flex-wrap: nowrap; position: absolute; left: 0px; width: 100%; } @starting-style { header.header > div.left > #wxs_quick_links > nav:hover { } } header.header > div.left > #wxs_quick_links > nav:not(:hover) { z-index: -1000!important; display: none; transition: display 1s ease-out allow-discrete; /* animation-name: quickLinksAnimationOff!important; animation-duration: 0s; animation-delay: 0.4s; animation-iteration-count: 1; animation-direction: normal; animation-fill-mode: forwards;*/ } header.header > div.left > #wxs_quick_links > nav:hover { z-index: 999!important; display: flex!important; animation-name: quickLinksAnimationOn!important; animation-duration: 0s!important; animation-delay: 0s!important; animation-direction: normal!important; animation-fill-mode: forwards!important; } header.header > div.left > #wxs_quick_links > nav > section { display: flex; flex-wrap: nowrap; align-items: center; } header.header > div.left > #wxs_quick_links > nav > section div { display: flex; height: 100%; } header.header > div.left > #wxs_quick_links > nav > section a, header.header > div.left > #wxs_quick_links > nav > section span { display: flex; align-items: center; justify-content: center; } header.header > div.left:has(a[href="/"]:hover) > #wxs_quick_links > nav.home, header.header > div.left:has(> nav.main > ul > li:hover a[href="/"]) > #wxs_quick_links > nav.home, header.header > div.left:has(> nav.main > ul > li a[href="/"]:hover) > #wxs_quick_links > nav.home, header.header > div.left:has(> nav.main > ul > li:hover a[href="/wykopalisko"]) > #wxs_quick_links > nav.upcoming, header.header > div.left:has(> nav.main > ul > li:hover a[href="/mikroblog"]) > #wxs_quick_links > nav.microblog, header.header > div.left:has(> nav.main > ul > li:hover a[href="/obserwowane"]) > #wxs_quick_links > nav.mywykop, header.header > div.left:has(> nav.main > ul > li:hover a[href="/hity"]) > #wxs_quick_links > nav.hits, header.header > div.left:has(> nav.main > ul > li:hover a[href="/ulubione"]) > #wxs_quick_links > nav.favorites, header.header > div.left:has(> nav.main > ul > li:hover a[href="/dodaj-link"]) > #wxs_quick_links > nav.add_new, header.header > div.left:has(> nav.main > ul > li:hover a[href="/mikroblog/#dodaj"]) > #wxs_quick_links > nav.add_new { z-index: 999; display: flex!important; animation-name: quickLinksAnimationOn!important; animation-duration: 2s; animation-delay: 0s; animation-direction: normal; animation-fill-mode: forwards; } /* colors */ header.header > div.left > #wxs_quick_links > nav { height: 37px; color: var(--blackOpacity07, rgba(255, 255, 255, 0.7)); border-bottom: 1px solid var(--blackOpacity03, rgba(255, 255, 255, 0.3)); box-shadow: 0px 4px 4px var(--whiteOpacity04, rgba(0, 0, 0, 0.4)); } header.header > div.left > #wxs_quick_links > nav:hover { } header.header > div.left > #wxs_quick_links > nav > section { background-color: var(--whiteOpacity1, rgba(18, 18, 20, 1)); column-gap: 5px; padding-left: 20px; padding-right: 0px; border-left: 1px solid rgba(120, 120, 120, 0.2); } header.header > div.left > #wxs_quick_links > nav > section:hover { background-color: var(--whiteOpacity1, rgba(18, 18, 20, 1)); } header.header > div.left > #wxs_quick_links > nav > section:hover span { color: var(--blackOpacity1, rgba(255, 255, 255, 1)); } header.header > div.left > #wxs_quick_links > nav > section span { padding-right: 10px; text-transform: uppercase; font-weight: bolder; cursor: default ; width: max-content; } header.header > div.left > #wxs_quick_links > nav > section a, header.header > div.left > #wxs_quick_links > nav > section span { height: 100%; min-width: 70px; width: max-content; } header.header > div.left > #wxs_quick_links > nav > section.wxs_quicklink_short { min-width: 20px; } header.header > div.left > #wxs_quick_links > nav > section a { text-decoration: none; padding: 0px 14px 0px 14px; } header.header > div.left > #wxs_quick_links > nav > section a:hover { color: var(--blackOpacity09, rgba(255, 255, 255, 1)); background-color: var(--blackOpacity01, rgba(255, 255, 255, 0.2)); } /* MOBILE */ @media(max-width: 600px) { header.header > div.left > #wxs_quick_links > nav:not(:hover) { animation-name: quickLinksAnimationOff!important; animation-delay: 4s; } header.header > div.left > #wxs_quick_links > nav, header.header > div.left > #wxs_quick_links > nav > section, header.header > div.left > #wxs_quick_links > nav > section > div { flex-direction: column!important; align-items: start!important; } header.header > div.left > #wxs_quick_links > nav, header.header > div.left > #wxs_quick_links > nav > section, header.header > div.left > #wxs_quick_links > nav > section > div, header.header > div.left > #wxs_quick_links > nav > section > span, header.header > div.left > #wxs_quick_links > nav > section a { width: 100%; justify-content: start; } header.header > div.left > #wxs_quick_links > nav > section { border-top: 1px solid rgba(120, 120, 120, 0.3); } header.header > div.left > #wxs_quick_links > nav > section, header.header > div.left > #wxs_quick_links > nav > section > div, header.header > div.left > #wxs_quick_links > nav > section > span, header.header > div.left > #wxs_quick_links > nav > section a { padding: 10px; } } } `; } /* HIDE ADS ALWAYS */ CSS += ` .pub-slot-wrapper { display: none!important; } .pub-slot-wrapper:has(section.premium-pub.link-block) { display: flex!important; border: 1px solid rgba(255, 0, 0, 0.3)!important; } .pub-slot-wrapper:has(section.premium-pub.link-block)::before { display: flex!important; content: "Aby ukryć Wykopy Sponsorowane i Reklamowane zainstaluj 𝗪𝘆𝗸𝗼𝗽 𝗫 𝗦𝘁𝘆𝗹𝗲 lub 𝗪𝘆𝗸𝗼𝗽 𝗫 𝗕𝗹𝗼𝗰𝗸𝗲𝗿"; font-size: 13px; color: var(--blackish); margin: 9px 14px; align-self: self-start; }`; /* HIDE WYKOP XS PROMO FROM STYLUS */ CSS += `body div.main-content[class] section > section.sidebar::after { display: none!important; }`; /* ----- Wykop X Style promo banners ON */ CSS += `.wykopx_promo_banner a { width: 100%; display: block!important; height: 300px!important; background: url('https://raw.githubusercontent.com/wykopx/wykopx-png/main/promo-images/wykopx-install-sidebar-day.png'); } [data-night-mode] .wykopx_promo_banner a { background: url('https://raw.githubusercontent.com/wykopx/wykopx-png/main/promo-images/wykopx-install-sidebar-night.png'); } .wykopx_promo_banner:hover { filter: brightness(0.98) drop-shadow(0px 0px 3px rgba(0, 0, 0, 0.2)); } [data-night-mode] .wykopx_promo_banner:hover { filter: brightness(1.2); } body > section > header.header > div.left > nav.main > ul > li { white-space: nowrap!important; height: calc(100%-12px)!important; position: relative!important; } body > section > header.header > div.left > nav.main > ul > li > a { text-decoration: none!important; height: 100% !important; display: flex!important; flex-direction: column!important; justify-content: center!important; position: relative!important; font-weight: 400!important; padding: 0 12px!important; } body > section > header.header > div.left > nav.main > ul > li:hover a { background: rgba(255, 255, 255, 0.2)!important; } body > section > header.header > div.left > nav.main > ul > li > a > span { white-space: nowrap!important; } body > section > header.header > div.left > nav.main > ul > li.wykopx_promo_li > a > span { color: rgba(255, 255, 255, 1)!important; font-size: 14px; } section.editor.expand section.inline-autocomplete section.inline-autocomplete-stream div.content::after, header.header div.right section.search-input section.inline-autocomplete section.inline-autocomplete-stream div.content::after { display: none!important; } /* ----- WykopXS new version available */ .wykopxs_info_bar { display: flex; align-items: center; border-bottom: 1px solid rgba(128, 128, 128, 0.2); color: rgba(128, 128, 128, 1); padding: 8px 20px; font-size: 14px; } aside.wykopxs_info_bar a { display: inline-block; background: rgb(0, 85, 0); color: white; display: inline-block; background-color: #005200; padding: .3em 0.7em; margin: 0 10px; } aside.wykopxs_info_bar a:hover { background: rgba(0, 85, 0, 0.7); text-decoration: none!important; } aside.wykopxs_info_bar footer { opacity: 0.6; margin-left: auto; } @media(max-width: 640px) { body > section > aside.wykopxs_info_bar { flex-direction: column; padding-top: 30px; } body > section > aside.wykopxs_info_bar a { margin: 11px; padding: 14px; width: 100%; text-align: center; } body > section > aside.wykopxs_info_bar span.wykopxs_new_version_second, body > section > aside.wykopxs_info_bar > footer { display: none; } } `; // XS MIKROCZAT -- START let wykopDomain = "https://wykop.pl"; let wxDomain = "https://wykopx.pl"; const mikroczatDomain = "https://mikroczat.pl"; const mikroczatPath = "/"; /* /czat */ // let mikroczatChannel="/"; let mikroczatWindow = null; const mikroczatButtonOpenTitle = "Otwórz wykopowy MikroCzat"; const mikroczatButtonOpenLabel = "Czat"; function openMikroczat(channel, windowOptions, target = "mikroczat") { if (bodySection.dataset.key_shift) delete bodySection.dataset.key_shift; if (bodySection.dataset.key_ctrl) delete bodySection.dataset.key_ctrl; if (bodySection.dataset.key_alt) delete bodySection.dataset.key_alt; let mikroczatURL = `${mikroczatDomain}`; mikroczatURL += `${mikroczatPath}${channel}`; mikroczatWindow = window.open(mikroczatURL, target, windowOptions); } // OTWIERANIE MIKROCZATU Z PRZYCISKU document.addEventListener("mousedown", wykopx_open_mikroczat_event_listener); function wykopx_open_mikroczat_event_listener(e) { if (!e.target.closest(".wykopx_open_mikroczat")) return; e.preventDefault(); let windowOptions = ""; let channel = ""; if (e.shiftKey || e.ctrlKey || e.altKey || e.button === 2) { windowOptions = "popup"; } // WykopXS unique const pathnameArray = new URL(document.URL).pathname.split("/"); if (pathnameArray[1] == "tag") { channel = "/" + pathnameArray[2]; // nazwatagu } openMikroczat(channel, windowOptions); } // PREVENT DEFAULT EVENT function preventDefaultEvent(e) { e.preventDefault(); } document.addEventListener("click", (e) => { if (!e.target.closest(".wykopx_open_mikroczat")) return; e.preventDefault(); }); let keys = {}; document.addEventListener("keydown", (e) => { if (e.target.tagName.toLowerCase() === 'textarea') return; if (!keys["SHIFT"] && e.key == "Shift") { keys["SHIFT"] = true; bodySection.dataset.key_shift = "true"; } else if (!keys["ALT"] && (e.key == "Alt" || e.key == "AltGraph")) { keys["ALT"] = true; bodySection.dataset.key_alt = "true"; } }); document.addEventListener("keyup", (e) => { if (e.target.tagName.toLowerCase() === 'textarea') return; if (keys["SHIFT"] && e.key == "Shift") { keys["SHIFT"] = false; delete bodySection.dataset.key_shift; } else if (keys["ALT"] && (e.key == "Alt" || e.key == "AltGraph")) { keys["ALT"] = false; delete bodySection.dataset.key_alt; } }); document.addEventListener("mouseover", (e) => { if (e.target.matches(`a[href^="/tag/"]`)) { e.target.title = `Wciśnij klawisz ⇧ 𝗦𝗛𝗜𝗙𝗧 lub ⎇ 𝗔𝗟𝗧 (⌥ 𝗢𝗽𝘁𝗶𝗼𝗻 na Mac) klikając na tag,\naby otworzyć kanał #${e.target.innerText} na 🗯 Mikroczacie\n\n⎇ 𝗔𝗟𝗧 - mikroczat w nowej karcie\n⇧ 𝗦𝗛𝗜𝗙𝗧 - mikroczat w nowym oknie`; e.target.addEventListener("click", preventDefaultEvent, true); e.target.addEventListener("mousedown", tagHrefEventListenerWithShift, true); e.target.addEventListener("mouseup", preventDefaultEvent, true); } }); document.addEventListener("mouseout", (e) => { if (e.target.matches(`a[href^="/tag/"]`)) { e.target.removeEventListener("click", preventDefaultEvent, true); e.target.removeEventListener("mousedown", tagHrefEventListenerWithShift, true); e.target.removeEventListener("mouseup", preventDefaultEvent, true); } }); function tagHrefEventListenerWithShift(e) { const channel = e.target.href.split("tag/").pop(); if (e.ctrlKey || e.altKey) // || e.button === 2) { e.preventDefault(); openMikroczat(channel, null, "_blank"); } else if (e.shiftKey) { e.preventDefault(); openMikroczat(channel, "popup"); } else if (e.button === 2) // PPM { } else if (e.button === 1) // ŚPM { } else if (e.button === 0) // LPM { window.location.href = e.target.href; } } // WIADOMOŚCI OD MIKROCZAT.PL window.addEventListener('message', function (event) { if (event.origin !== mikroczatDomain) return; if (dev) console.log('Wiadomość z mikroczat.pl', event.data); //if (event.data == "MikroCzatOpened") mikroczatWindow.postMessage({ type: "token", token: window.localStorage.getItem("token") }, mikroczatDomain); if (event.data == "MikroCzatOpened") { mikroczatWindow.postMessage({ type: "TokensObject", token: window.localStorage.getItem("token"), userKeep: window.localStorage.getItem("userKeep") }, mikroczatDomain); } if (event.data == "MikroCzatLoggedIn") { if (dev) console.log("event.data", event.data) bodySection.dataset.mikroczatLogged = true; } if (event.data == "MikroCzatClosed") { bodySection.dataset.mikroczatLogged = false; mikroczatWindow = null; } }, false); function createLeftPanelButton() { if (dev) console.log("createLeftPanelButton"); const aside_section_div_ul = document.querySelector("body aside.left-panel > section.buttons ul"); if (!aside_section_div_ul) return; let aside_section_div_ul_li = aside_section_div_ul.querySelector("li.mikroczat"); if (aside_section_div_ul_li) return; aside_section_div_ul_li = document.createElement('li'); aside_section_div_ul_li.classList.add('wykopx_open_mikroczat', 'mikroczat'); aside_section_div_ul_li.title = mikroczatButtonOpenTitle; aside_section_div_ul_li.innerHTML = ` <div class="popper-button"> <span> <span class="button"> <a target="_mikroczat" class="hybrid"> <span>${mikroczatButtonOpenLabel}</span> </a> </span> </span> </div>`; aside_section_div_ul.appendChild(aside_section_div_ul_li); } { CSS += ` /* LEFT MENU MIKROCZAT BUTTON - START */ body aside.left-panel:not(.mini) > section.buttons > div.content > ul { display: flex; flex-wrap: wrap; justify-content: space-around; column-gap: 0px; } body aside.left-panel:not(.mini) > section.buttons > div.content > ul > li { flex-basis: 47%; box-sizing: border-box; padding: 0px; margin-top: 7px; } body aside.left-panel > section > div.content > ul > li { position: relative; cursor: pointer; } body aside.left-panel.mini > section > div.content > ul > li:hover, body aside.left-panel:not(.mini) > section.buttons > div.content > ul > li:hover a::before { background: var(--squeeze); } aside.left-panel>section.links>.content ul li a /* [data-v-5687662b] */ { padding: 0 6px; display: block; -webkit-box-sizing: border-box; box-sizing: border-box; font-weight: 400; text-decoration: none; font-size: 16px; line-height: 36px; height: 36px; } aside.left-panel>section.buttons>.content ul li a /* [data-v-5687662b] */ { display: block; position: relative; color: var(--steelBluish); font-size: 0; } aside.left-panel>section.buttons>.content ul li.active a, /* [data-v-5687662b] */ aside.left-panel>section.buttons>.content ul li:hover a /* [data-v-5687662b] */ { color: var(--tuna); font-weight: 600; } aside.left-panel>section.buttons>.content ul li a:before /* [data-v-5687662b] */ { content: ''; display: block; width: 100%; height: 36px; border: 1px solid var(--porcelain); border-radius: 6px; box-sizing: border-box; transition: background .2s ease, border .2s ease; } [data-night-mode] aside.left-panel>section.buttons>.content ul li a:before /* [data-v-5687662b] */ { border-color: #303032; } aside.left-panel:not(.mini)>section.buttons>.content ul li:hover a:before, [data-night-mode] aside.left-panel:not(.mini)>section.buttons>.content ul li:hover a:before { border-color: var(--tuna); } aside.left-panel:not(.mini)>section.buttons>.content ul li a:after /* [data-v-5687662b] */ { content: ''; display: block; position: absolute; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; background: var(--gullGray); height: 34px; width: 100%; top: 0; left: 0; -webkit-transition: background .2s ease; transition: background .2s ease; } aside.left-panel:not(.mini)>section.buttons>.content ul li.mikroczat a:after /* [data-v-5687662b] */ { -webkit-mask-image: url(https://i.imgur.com/82a9CyK.png); mask-image: url(https://i.imgur.com/82a9CyK.png); -webkit-mask-size: 22px 22px; mask-size: 22px 22px; } /* ZWINIETE MENU PO LEWEJ */ aside.left-panel>section.links>.content ul li a:before /* [data-v-5687662b] */ { content: ''; display: block; position: absolute; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: cover; mask-size: cover; background: var(--gullGray); -webkit-transform: translateX(-50%) translateY(-50%); transform: translateX(-50%) translateY(-50%); top: 50%; left: 24px; -webkit-transition: background .2s ease; transition: background .2s ease; z-index: 1; } aside.left-panel.mini > section.links > .content ul li.mikroczat a:before { -webkit-mask-image: url(https://i.imgur.com/82a9CyK.png); mask-image: url(https://i.imgur.com/82a9CyK.png); -webkit-mask-size: 22px 22px; mask-size: 22px 22px; mask-size: 22px 22px; width: 22px; height: 22px; margin-top: 0px; } aside.left-panel:not(.mini)>section.buttons>.content ul li a>span /*[data-v-5687662b] */ { position: relative; display: inline-block; font-size: 11px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); white-space: nowrap; margin-top: 2px; line-height: 16px; height: 16px; } aside.left-panel.mini > section.links > .content ul li a > span { display: none; } /* LEFT MENU MIKROCZAT BUTTON - END */ /* MIKROCZAT TAG LINKS */ section:is(.entry-content, .link-block)[class] { overflow: visible!important; } section:is(.entry-content, .link-block) a[href^="/tag/"] { padding-right: 2px !important; margin-right: 1px; transition: none!important; } section:is(.entry-content, .link-block) a[href^="https://mikroczat.pl/"] { padding-right: 2px!important; padding-left: 2px!important; } section:is(.entry-content, .link-block) a[href^="/tag/"], section.entry-content .wrapper a[href^="https://mikroczat.pl/"] { border: 1px solid transparent!important; position: relative!important; } body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"] *, body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"] *, body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"] *, body > section[data-key_shift="true"] section.entry-content a[href^="https://mikroczat.pl/"], body > section[data-key_alt="true"] section.entry-content a[href^="https://mikroczat.pl/"], body > section[data-key_ctrl="true"] section.entry-content a[href^="https://mikroczat.pl/"], body > section[data-key_shift="true"] section.entry-content a[href^="https://mikroczat.pl/"] *, body > section[data-key_alt="true"] section.entry-content a[href^="https://mikroczat.pl/"] *, body > section[data-key_ctrl="true"] section.entry-content a[href^="https://mikroczat.pl/"] * { color: var(--tagChannelColor)!important; } body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_shift="true"] section.entry-content a[href^="https://mikroczat.pl/"], body > section[data-key_alt="true"] section.entry-content a[href^="https://mikroczat.pl/"], body > section[data-key_ctrl="true"] section.entry-content a[href^="https://mikroczat.pl/"] { border-color: var(--tagChannelColor)!important; background-color: color-mix(in srgb, var(--whitish) 90%, var(--tagChannelColor))!important; border-radius: var(--smallBorderRadius)!important; } body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]:hover, body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]:hover, body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]:hover, body > section[data-key_shift="true"] section.entry-content a[href^="https://mikroczat.pl/"]:hover, body > section[data-key_alt="true"] section.entry-content a[href^="https://mikroczat.pl/"]:hover, body > section[data-key_ctrl="true"] section.entry-content a[href^="https://mikroczat.pl/"]:hover { background-color: color-mix(in srgb, var(--whitish) 60%, var(--tagChannelColor))!important; } body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"], body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"] { padding-left: 3px !important; margin-left: -12px !important; } body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]:hover, body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]:hover, body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]:hover { text-decoration: none!important; } body > section[data-key_shift="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]::before, body > section[data-key_alt="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]::before, body > section[data-key_ctrl="true"] section:is(.entry-content, .link-block) a[href^="/tag/"]::before { content: "#"; } body > section[data-key_shift="true"] section.entry-content a[href^="/tag/"]::after, body > section[data-key_alt="true"] section.entry-content a[href^="/tag/"]::after, body > section[data-key_ctrl="true"] section.entry-content a[href^="/tag/"]::after, body > section[data-key_shift="true"] section.entry-content a[href^="https://mikroczat.pl/"]::after, body > section[data-key_alt="true"] section.entry-content a[href^="https://mikroczat.pl/"]::after, body > section[data-key_ctrl="true"] section.entry-content a[href^="https://mikroczat.pl/"]::after { color: white; content: "🗯"; position: absolute; top: -1em; right: -0.5em; } body > section[data-mikroczat-logged="true"] li.wykopx_open_mikroczat_li span:after { content: "•"; color: white; position: absolute; top: 4px; right: 5px; } body > section[data-mikroczat-logged="false"] li.wykopx_open_mikroczat_li span:after { content: "•"; color: rgb(255, 255, 255, 0.3); position: absolute; top: 4px; right: 5px; }`; } createLeftPanelButton(); createNewNavBarButton({ position: "left", // text: "Mikro<strong>czat</strong>", text: mikroczatButtonOpenLabel, title: mikroczatButtonOpenTitle, class: "open_mikroczat", // wykopx_open_mikroczat_li hideWithoutXStyle: false, url: mikroczatDomain, target: "_mikroczat", number: null, }); function throttle(func, delay) { let promise = Promise.resolve(); return function (...args) { promise = promise.then(() => { return new Promise((resolve) => { setTimeout(() => { func(...args); resolve(); }, delay); }); }); }; } const throttledAddVotersList = throttle(addVotersList, 200); let observer = new MutationObserver((mutations) => { if (dev) console.log(`--- ${mutations.length} mutations`, mutations); mutations.forEach((mutation) => { if (dev) { console.log("---------- new mutation -----"); console.log(mutation); if (mutation.type) { console.log(`⭐ mutation.type: `, mutation.type) } if (mutation.attributeName) { console.log(`⭐ mutation.attributeName: ${mutation.attributeName}`, mutation.attributeName) } if (mutation.addedNodes.length > 0 && mutation.addedNodes[0] && mutation.addedNodes[0] instanceof Element) { console.log(`⭐ mutation.addedNodes.length: ${mutation.addedNodes.length}`, mutation.addedNodes[0]) } if (mutation.target) { console.log(`⭐ mutation.target: ${mutation.target.tagName}`, mutation.target) if (mutation.target.tagName === "SECTION") { } } } // ADDED NODES if (mutation.addedNodes.length > 0 && mutation.addedNodes[0] && mutation.addedNodes[0] instanceof Element) { if (mutation.addedNodes[0].matches("section.entry[id]")) { const sectionEntry = mutation.addedNodes[0]; if (dev) console.log("mutation 1", sectionEntry); processSectionEntry(sectionEntry) const sectionCommentsArray = sectionEntry.querySelectorAll("section.entry[id]"); if (dev) console.log("mutation 1 - forEach: sectionEntryArray", sectionCommentsArray); sectionCommentsArray.forEach((sectionComment) => { processSectionEntry(sectionComment) }) } else if (mutation.addedNodes[0].matches("div.content:has(>section.entry[id])")) { const sectionEntriesArray = mutation.addedNodes[0].querySelectorAll("section.entry[id]"); if (dev) console.log("mutation 2 - forEach: sectionEntriesArray", sectionEntriesArray); sectionEntriesArray.forEach((sectionEntry) => { processSectionEntry(sectionEntry) }) } else if (mutation.target.tagName === "SECTION" && mutation.target.matches("section.entry.detailed[id]")) { const sectionEntry = mutation.target; if (dev) console.log("mutation 3", sectionEntry) if (dev) console.log("mutation 3: mutation.target", mutation.target); processSectionEntry(sectionEntry); const sectionCommentsArray = sectionEntry.querySelectorAll("section.entry[id]"); if (dev) console.log("mutation 3 - forEach: sectionEntryArray", sectionCommentsArray); sectionCommentsArray.forEach((sectionComment) => { processSectionEntry(sectionComment) }) } else if (settings.showAnimatedAvatars && mutation.addedNodes[0].matches("aside.profile-top")) { animatedAvatar(mutation.addedNodes[0]); } // LEFT SIDE CATEGORY MENU OPENED else if (mutation.addedNodes[0].matches("aside.left-panel.thin-scrollbar")) { createLeftPanelButton(); } } }); }); // CONTENT LOADED let mainSection; document.addEventListener('readystatechange', (event) => { if (dev) console.log('readyState:' + document.readyState); mainSection = document.querySelector('body > section'); if (mainSection) { const sectionEntryArray = mainSection.querySelectorAll("section.entry[id]"); // if (dev) console.log("sectionEntryArray", sectionEntryArray); sectionEntryArray.forEach((sectionEntry) => { processSectionEntry(sectionEntry) }) const config = { childList: true, subtree: true, }; observer.observe(mainSection, config); if (settings.showAnimatedAvatars) { const asideProfileTop = mainSection.querySelector("aside.profile-top"); if (asideProfileTop) animatedAvatar(asideProfileTop); } } }); function processSectionEntry(sectionEntry) { if (dev) console.log("processSectionEntry()", sectionEntry) if (!sectionEntry) return; if (settings.showAnimatedAvatars) animatedAvatar(sectionEntry); if (settings.showFavouriteButton) addFavouriteButton(sectionEntry); if (settings.entryVotersListEnable && sectionEntry?.__vue__?.item) { if (dev) console.log("sectionEntry?.__vue__.item.id", sectionEntry?.__vue__.item.id); if (dev) console.log("sectionEntry.dataset?.votersLoaded", sectionEntry.dataset?.votersLoaded); if (sectionEntry.dataset?.votersLoaded == sectionEntry?.__vue__.item.id) return; if (sectionEntry?.__vue__.item.votes.up == 0) { removeVotersListWhenNoVoters(sectionEntry); return; } if (settings.entryVotersListExpandIfLessThan > 5 && sectionEntry?.__vue__.item.votes.up <= settings.entryVotersListExpandIfLessThan && sectionEntry?.__vue__.item.votes.up > 5) { if (dev) console.log(`processSectionEntry() wybrano 💛throttledAddVotersList ${sectionEntry.__vue__.item.id} | plusow: ${sectionEntry.__vue__.item.votes.up}`,) throttledAddVotersList(sectionEntry); } else { if (dev) console.log(`processSectionEntry() wybrano 🤎addVotersList ${sectionEntry.__vue__.item.id} | plusow: ${sectionEntry.__vue__.item.votes.up}`,) addVotersList(sectionEntry) } } } function animatedAvatar(sectionEntry) { const image = sectionEntry.querySelector('a.avatar figure img'); // Replace with your actual selector if (image) { if (dev) console.log("image", image) const currentSrc = image.getAttribute('src'); if (dev) console.log("currentSrc", currentSrc) if (currentSrc.endsWith('.gif')) { const modifiedSrc = currentSrc.replace(/,.*?\./, '.'); image.setAttribute('src', modifiedSrc); if (dev) console.log("image.src", image.src) } } } function removeVotersListWhenNoVoters(sectionEntry) { if (sectionEntry) { delete sectionEntry.dataset?.votersLoaded; sectionEntry.querySelector("section.entry-voters")?.remove(); } } async function addVotersList(sectionEntry) { if (dev) console.log(`addVotersList precheck: `, sectionEntry) if (!sectionEntry || !sectionEntry.__vue__) return; if (sectionEntry.dataset?.votersLoaded == sectionEntry?.__vue__.item.id) return; if (dev) console.log(`addVotersList execute: `, sectionEntry) if (sectionEntry?.__vue__ && sectionEntry?.__vue__.item.votes.up > 0) { if (sectionEntry?.__vue__ && settings.entryVotersListExpandIfLessThan > 5 && sectionEntry?.__vue__.item.votes.up <= settings.entryVotersListExpandIfLessThan && sectionEntry?.__vue__.item.votes.up > 5) { let entryId, commentId; if (sectionEntry?.__vue__?.item.resource == "entry") { entryId = sectionEntry?.__vue__?.item.id; } else if (sectionEntry?.__vue__?.item.resource == "entry_comment") { entryId = sectionEntry?.__vue__?.item.parent.id; commentId = sectionEntry?.__vue__?.item.id; } let voters = await fetchAllVotersFromAPI(entryId, commentId); appendVotersToEntry(sectionEntry, voters); } else { appendVotersToEntry(sectionEntry, sectionEntry?.__vue__?.item?.votes?.users); } } } function addFavouriteButton(sectionEntry) { if (sectionEntry && sectionEntry?.__vue__) { const sectionActionsUL = sectionEntry.querySelector("section.actions:not(:has(li.favourite)) > ul"); if (!sectionActionsUL) return; let entryId, commentId; let isFavourite = sectionEntry?.__vue__?.item.favourite; if (sectionEntry?.__vue__?.item.resource == "entry") { entryId = sectionEntry?.__vue__?.item.id; } else if (sectionEntry?.__vue__?.item.resource == "entry_comment") { entryId = sectionEntry?.__vue__?.item.parent.id; commentId = sectionEntry?.__vue__?.item.id; } const favButtonLI = document.createElement("li"); favButtonLI.classList.add("favourite", "icon", "icon-favourite"); if (isFavourite) { favButtonLI.classList.add("active"); } const favButtonSpan = document.createElement("span"); favButtonSpan.classList.add("favouriteButton"); // VUE SENSITIVE /* data-v-90179052 */ favButtonLI.setAttribute('data-v-90179052', ''); favButtonSpan.setAttribute('data-v-90179052', ''); favButtonSpan.dataset.isFavourite = isFavourite; favButtonSpan.dataset.entryId = entryId; if (commentId) favButtonSpan.dataset.commentId = commentId; if (settings.showFavouriteButtonLabel) favButtonSpan.innerText = `Ulubione`; favButtonLI.appendChild(favButtonSpan); const sharingElement = sectionActionsUL.querySelector(".sharing"); if (sharingElement) sharingElement.insertAdjacentElement("afterend", favButtonLI); } } function appendVotersToEntry(sectionEntry, voters) { if (!sectionEntry) return; const divEditWrapperElement = sectionEntry.querySelector('article > div.edit-wrapper'); if (!divEditWrapperElement) return; if (dev) console.log(`💚 appendVotersToEntry start`, sectionEntry) sectionEntry.dataset.votersLoaded = sectionEntry?.__vue__?.item.id; if (dev) console.log(`appendVotersToEntry: ${sectionEntry?.__vue__?.item.id}`, voters) const fiveVoters = voters; if (!fiveVoters || fiveVoters.length < 1) return false; let sectionEntryVotersHTML = `<ul>`; fiveVoters.forEach(voter => { sectionEntryVotersHTML += getListItemForUser(voter); }); // <li class="more"> if (sectionEntry?.__vue__?.item?.votes.up > settings.entryVotersListExpandIfLessThan && voters.length <= settings.entryVotersListExpandIfLessThan) { sectionEntryVotersHTML += ` <li data-no-bubble="" class="more"> <span data-votes-up="${sectionEntry?.__vue__?.item?.votes.up}"`; if (sectionEntry?.__vue__?.item.resource == "entry") { sectionEntryVotersHTML += `data-entry-id="${sectionEntry?.__vue__?.item.id}"`; } else if (sectionEntry?.__vue__?.item.resource == "entry_comment") { sectionEntryVotersHTML += `data-entry-id="${sectionEntry?.__vue__?.item.parent.id}"`; sectionEntryVotersHTML += `data-comment-id="${sectionEntry?.__vue__?.item.id}"`; } sectionEntryVotersHTML += `>+${sectionEntry?.__vue__?.item?.votes.up - 5} innych</span></li>`; } sectionEntryVotersHTML += `</ul>`; const sectionEntryVoters = document.createElement("section"); sectionEntryVoters.classList.add("entry-voters"); // sectionEntryVoters.setAttribute('data-v-6e6ed6ee', ''); // sectionEntryVoters.setAttribute('data-v-2aacfeb5', ''); sectionEntryVoters.innerHTML = sectionEntryVotersHTML; const sectionEntryVotersElement = divEditWrapperElement.querySelector('section.entry-voters'); if (sectionEntryVotersElement) { let parentElement = sectionEntryVotersElement.parentNode; parentElement.replaceChild(sectionEntryVoters, sectionEntryVotersElement); } else { const editWrapper = sectionEntry.querySelector(".edit-wrapper"); if (editWrapper) editWrapper.appendChild(sectionEntryVoters); } } function getListItemForUser(voter) { let userHTML = `<li> <a href="/ludzie/${voter.username}" class="username`; userHTML += ` ${voter.color}-profile`; // orange-profile green-profile burgundy-profile userHTML += ` ${voter.status}`; // active banned suspended removed userHTML += ` follow-${voter.follow}`; // follow-true follow-false userHTML += ` verified-${voter.verified}`; // verified-false userHTML += ` blacklist-${voter.blacklist}`;// blacklist-true blacklist-false userHTML += ` online-${voter.online}`; // online-true online-false userHTML += ` ${voter.gender}-gender`; // m-gender, f-gender, null-gender if (voter.gender == "m") userHTML += ` male`; else if (voter.gender == "f") userHTML += ` female`; userHTML += `">`; if (settings?.votersFollow && voter.follow) userHTML += `<i class="follow-true" title="Obserwujesz tego użytkownika"></i>`; if (settings?.votersVerified && voter.verified) userHTML += `<i class="verified-true" title="Ten użytkownik jest zweryfikowany"></i>`; if (settings?.votersBlacklist && voter.blacklist) userHTML += `<i class="blacklist-true" title="Ten użytkownik jest na Twojej czarnej liście"></i>`; if (settings?.votersOffline && !voter.online) userHTML += `<i class="online-false" title="Ten uzytkownik jest teraz offline"></i>`; if (settings?.votersOnline && voter.online) userHTML += `<i class="online-true" title="Ten uzytkownik jest teraz online"></i>`; if (settings?.votersBanned && voter.status == "banned") userHTML += `<i class="banned" title="Użytkownik dostał bana. Z dodatkiem Wykop XS - Ban Info możesz szybko sprawdzić przyczynę i długość trwania bana."></i>`; if (settings?.votersSuspended && voter.status == "suspended") userHTML += `<i class="suspended" title="To konto jest w trakcie usuwania."></i>`; if (settings?.votersRemoved && voter.status == "removed") userHTML += `<i class="removed" title="Konto usunięte"></i>`; if (settings?.votersGenderM && voter.gender == "m") userHTML += `<i class="${voter.gender}-gender" title="Wpis od niebieskiego"></i>`; if (settings?.votersGenderF && voter.gender == "f") userHTML += `<i class="${voter.gender}-gender" title="Plus od różowej"></i>`; userHTML += `<span>${voter.username}</span> </a> </li>`; return userHTML; } /* <section data-v-6e6ed6ee="" data-v-2aacfeb5="" class="entry-voters"> <ul data-v-6e6ed6ee=""> <li data-v-6e6ed6ee="" class=""> <a data-v-ed9f6c56="" data-v-6e6ed6ee="" href="/ludzie/NaczelnyAgnostyk" class="username orange-profile active"> <span data-v-ed9f6c56=""> NaczelnyAgnostyk<!----> </span> </a> </li> <li data-v-6e6ed6ee="" data-no-bubble="" class="more"> <span data-v-6e6ed6ee="">+5 innych</span> </li> </ul> </section> */ function fetchAllVotersFromAPI(entryId, commentId) { if (dev) console.log(`fetchAllVotersFromAPI: ${entryId}, ${commentId}`) let apiURL = `https://wykop.pl/api/v3/entries/${entryId}/votes?page=1` if (commentId) apiURL = `https://wykop.pl/api/v3/entries/${entryId}/comments/${commentId}/votes`; return new Promise(async (resolve, reject) => { await fetch(apiURL, { method: "GET", headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.getItem("token"), }, }) .then((response) => { if (!response.ok) { if (dev) console.log("HTTP error! status: ${response.status}"); // throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(async (responseJSON) => { resolve(responseJSON.data); }).catch((error) => { if (error instanceof TypeError) { console.error('Network error:', error); // AWARIA SERWERA WYPOKU } else { console.error('Other error:', error); } reject(error); }); }); } function postFavouriteToAPI(favourite, resource, id) { let apiURL = `https://wykop.pl/api/v3/favourites`; const method = favourite ? "POST" : "DELETE"; const body = { data: { type: resource, source_id: id } } return new Promise(async (resolve, reject) => { await fetch(apiURL, { method: method, headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.getItem("token"), }, body: JSON.stringify(body) }) .then((response) => { if (!response.ok) { if (dev) console.log("HTTP error! status: ${response.status}"); // throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(async (responseJSON) => { resolve(responseJSON.data); }).catch((error) => { if (error instanceof TypeError) { console.error('Network error:', error); // AWARIA SERWERA WYPOKU } else { console.error('Other error:', error); } reject(error); }); }); } function postCommentPlus1ToAPI(sectionEntry) { if (!sectionEntry || !sectionEntry.__vue__) return; const resource = sectionEntry.__vue__.item.resource; let entryId; let authorUsername = sectionEntry.__vue__.item.author.username; if (resource === "entry") entryId = sectionEntry.__vue__.item.id; else if (resource === "entry_comment") entryId = sectionEntry.__vue__.item.parent.id; // TODO ZNALEZISKA let apiURL = `https://wykop.pl/api/v3/entries/${entryId}/comments`; const method = "POST"; const body = { data: { "content": `@${authorUsername} [+](https://greasyfork.org/en/scripts/489949)1`, "adult": false } } /* "data": { "content": "**foobar** __foobar__ [lorem](https://www.wykop.pl) impsum!!! #nsfw #wykop", "embed": "1fde707843ss3fbe9cb4eed0asdfsdfc64ab9a4df6084199b39d2", "photo": "e07843ss3fbe9cb4saeed0asdfsdfc64b9a4df6084199b39d2", "adult": false } } */ return new Promise(async (resolve, reject) => { await fetch(apiURL, { method: method, headers: { "Content-Type": "application/json", Authorization: "Bearer " + window.localStorage.getItem("token"), }, body: JSON.stringify(body) }) .then((response) => { if (!response.ok) { if (dev) console.log("HTTP error! status: ${response.status}"); // throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(async (responseJSON) => { resolve(responseJSON.data); }).catch((error) => { if (error instanceof TypeError) { console.error('Network error:', error); // AWARIA SERWERA WYPOKU } else { console.error('Other error:', error); } reject(error); }); }); } // li.more click document.addEventListener("click", async function (e) { if (e.target.closest("div.buttons button.plus")) { const sectionEntry = e.target.closest("section.entry[id]"); if (sectionEntry.__vue__?.item?.voted == 1) { if (settings.addCommentPlusWhenVotingOnEntry && sectionEntry && sectionEntry.__vue__?.item?.resource == "entry") { postCommentPlus1ToAPI(sectionEntry); } else if (settings.addCommentPlusWhenVotingOnComment && sectionEntry && sectionEntry.__vue__?.item?.resource == "entry_comment") { postCommentPlus1ToAPI(sectionEntry); } } } if (e.target.matches("li.more span")) { e.preventDefault(); let sectionEntry = e.target.closest("section.entry"); const entryId = e.target.dataset.entryId; const commentId = e.target.dataset.commentId; if (dev) console.log(`Wykop XS pobiera listę ${e.target.dataset.votesUp} plusujących`); e.target.closest("section.entry-voters").innerHTML = `<span>(Wykop X: wczytywanie ${e.target.dataset.votesUp} plusujących...)</span>`; let voters = await fetchAllVotersFromAPI(entryId, commentId); appendVotersToEntry(sectionEntry, voters); return; } if (e.target.matches("span.favouriteButton")) { e.preventDefault(); if (e.target.dataset.isFavourite == "true") { if (e.target.dataset.commentId) postFavouriteToAPI(false, "entry_comment", e.target.dataset.commentId); else postFavouriteToAPI(false, "entry", e.target.dataset.entryId); e.target.parentElement.classList.remove("active"); e.target.dataset.isFavourite = "false"; } else if (e.target.dataset.isFavourite == "false") { if (e.target.dataset.commentId) postFavouriteToAPI(true, "entry_comment", e.target.dataset.commentId); else postFavouriteToAPI(true, "entry", e.target.dataset.entryId); e.target.parentElement.classList.add("active"); e.target.dataset.isFavourite = "true"; } return; } }, false); /* CSS WYKOP XS MIKROCZAT */ if (settings?.hideShareButton) CSS += `section.actions ul li.sharing { display: none!important; }`; /* Wykop X Style 3.0 */ CSS += ` :root { --kolorBananowy1: rgba(255, 185, 0, 1); --tagChannelColor: rgba(0, 183, 255, 1); --smallBorderRadius: 4px; } div[data-modal="entryVoters"] section.entry-voters::after {content: none!important;} /* Wykop X Style PROMO */ `; /* LISTA PLUSUJĄCYCH CSS, PRZYCISK DODAJ DO ULUBIONYCH */ if (settings?.entryVotersListEnable) { CSS += ` /* Chrome 109, Firefox 115 */ @supports not (display: block flex) { section.entry-voters ul { display: flex; } } section.entry-voters ul { display: block flex; row-gap: 0px; flex-wrap: wrap; align-items: baseline; padding: 0 0 0 0; margin: 0; margin-top: 8px; list-style-type: none; position: relative; } section.entry-voters ul, section.entry-voters > span { font-size: var(--entryVotersTextFontSize, 12px); color: var(--gullGray); } section.entry-voters ul::before { content: "Plusujący: "; margin-right: 0.2em; } section.entry-voters ul li.more { cursor: pointer; font-weight: 700; text-transform: uppercase; } section.entry-voters ul li::after { content: " • "; margin: 0px 0.2em 0px 0em; } section.entry-voters ul li.more::after, section.entry-voters ul li:only-child::after { content: none; } section.entry-voters ul li a.username span { font-weight: normal; } section.entry-voters ul li a.username i { display: none; font-size: 0.8em; font-style: normal; bottom: 0px; position: relative; } section.entry-voters ul li a.username i:has(+span) { margin-right: 1px; } section.entry-voters ul li a.username i.follow-true, section.entry-voters ul li a.username i.blacklist-true, section.entry-voters ul li a.username i.banned , section.entry-voters ul li a.username i.suspended, section.entry-voters ul li a.username i.removed, section.entry-voters ul li a.username i.f-gender, section.entry-voters ul li a.username i.m-gender { display: inline flex;} section.entry-voters ul li a.username i.follow-true::before { content: '🔔'; } section.entry-voters ul li a.username i.blacklist-true::before { content: '⛔'; } section.entry-voters ul li a.username i.banned::before { content: '🍌'; } section.entry-voters ul li a.username i.suspended::before { content: '✖'; } section.entry-voters ul li a.username i.removed::before { content: '❌'; } section.entry-voters ul li a.username i.f-gender::before { content: '🟣'; font-size: 0.7em; bottom: 3px; } section.entry-voters ul li:has(a.username) { order: 6; } section.entry-voters ul li.more { order: 100; } `; if (settings?.votersFollowFirst) CSS += `section.entry-voters ul li:has(a.username.follow-true) { order: 1; }`; if (settings?.votersBlackFirst) CSS += `section.entry-voters ul li:has(a.username.burgundy-profile) { order: 3; }`; if (settings?.votersOrangeFirst) CSS += `section.entry-voters ul li:has(a.username.orange-profile) { order: 4; }`; if (settings?.votersGreenFirst) CSS += `section.entry-voters ul li:has(a.username.green-profile) { order: 5; }`; if (settings?.votersBlacklistLast) CSS += `section.entry-voters ul li:has(a.username.blacklist-true) { order: 7; }`; if (settings?.votersBannedLast) CSS += `section.entry-voters ul li:has(a.username.banned) { order: 8; }`; if (settings?.votersSuspendedLast) CSS += `section.entry-voters ul li:has(a.username.banned) { order: 9; }`; if (settings?.votersRemovedLast) CSS += `section.entry-voters ul li:has(a.username.removed) { order: 10; }`; if (!settings?.votersColorOrange) CSS += `section.entry-voters ul li a.username.orange-profile { color: var(--gullGray); }`; if (!settings?.votersColorGreen) CSS += `section.entry-voters ul li a.username.green-profile { color: var(--gullGray); }`; if (!settings?.votersColorBurgundy) CSS += `section.entry-voters ul li a.username.burgundy-profile { color: var(--gullGray); }`; CSS += ` section.entry-voters ul li a.username.banned:not(.removed) span { color: var(--kolorBananowy1); }; section.entry-voters ul li a.username.suspended:not(.removed) span { color: var(--heather); } section.entry-voters ul li a.username.removed span { color: var(--heather); } [data-night-mode] section.entry-voters ul li a.username.removed span { background-color: rgba(255, 255, 255, 0.1); padding-left: 5px; padding-right: 5px; } `; } /* ULUBIONE */ CSS += ` section.actions > ul > li.favourite { cursor: pointer; user-select: none; color: var(--gullGray); font-size: 14px; padding-left: 26px; transition: color .2s ease, opacity .2s ease; } .actions li.favourite span::before { content: ''; width: 18px; height: 18px; display: block; position: absolute; left: 0; background: var(--gullGray); transition: background .2s ease; -webkit-mask-size: 18px 18px; mask-size: 18px 18px; -webkit-mask: url(/static/img/svg/favourite.svg) no-repeat center; mask-image: url(/static/img/svg/favourite.svg); } .actions li.favourite.active span::before { background: var(--orange); -webkit-mask: url(/static/img/svg/favourite-filled.svg) no-repeat center; mask-image: url(/static/img/svg/favourite-filled.svg); } `; /* fixNotificationBadgeBug */ // if (settings.fixNotificationBadgeBug) // { // CSS += ` // :root // { // /* brak nowych powiadomień */ // --notificationIconWithoutUnreadNotificationsColor: rgba(255, 255, 255, 0.2); /* ikonka powiadomienia ✉ 🕭 #, jesli nie ma nowych powiadomien */ // --notificationIconWithoutUnreadNotificationsBackgroundColor: rgba(0, 0, 0, 0); /* tło powiadomienia ✉ 🕭 #, jesli nie ma nowych powiadomien */ // --notificationIconWithoutUnreadNotificationsHoverColor: rgba(255, 255, 255, 0.8); // --notificationIconWithoutUnreadNotificationsHoverBackgroundColor: rgba(255, 255, 255, 0.3); // --notificationIconWithoutUnreadNotificationsActiveColor: rgba(255, 255, 255, 0.4); // --notificationIconWithoutUnreadNotificationsActiveBackgroundColor: rgba(255, 255, 255, 0.2); // } // `; // } /* ------------- NOTATKOWATOR + INFOBOX + USER LABELS ----------------- */ if (settings.infoboxEnable || settings.notatkowatorEnable || settings.wxsUserLabelsEnable) { CSS += ` /* infobox wrapper */ .wxs_user_info { display: flex!important; align-items: baseline!important; gap: 6px!important; font-size: 11px!important; cursor: help!important; } /* wpisy {} */ section.entry > article.wxs_user_info { } /* znaleziska {} */ section.link-block article.wxs_user_info { margin-right: 5px; } /* kropka online w naglowku profilu uzytkownika */ aside.profile-top > section > header > div > h1 > a.online > span > i { display: block; top: 0px; left: -18px; } /* 🟢 zielona ikonka statusu online */ section header div.wxs_user_info.wxs_user_online { order: 1; font-size: 5px; } /* notatka na profilu użytkownika */ aside.profile-top > section > header > div > h1 { align-items: baseline!important; } aside.profile-top > section > header > div > h1 > div.wxs_user_info { margin-left: 8px; position: relative; bottom: 2px; } .wxs_user_info var { font-style: normal; font-size: 12px; opacity: 1; } .wxs_user_label { border-radius: 4px; } .wxs_user_label: hover { filter: brightness(1.2); } .wxs_user_label > *, .wxs_user_member_since { border-radius: 4px; padding: 1px 9px; font-size: 12px; font-weight: bolder; background-color: var(--alto); } .wxs_user_label { order: 10; } .wxs_user_label_fake_gender { order: 1; } .wxs_user_label_fake_female { color: var(--rozowyPasek1, rgba(192, 72, 167, 1)); } .wxs_user_label_fake_male { color: var(--niebieskiPasek1, rgba(67, 131, 175, 1)); } /* XLabel troll/bot */ .wxs_user_label_name { order: 2; color: var(--persianRed); } /* LINKI-adresy URL w notatce */ .wxs_user_label_url, .wxs_user_info_usernote_url { order: 3; } .wxs_user_label_url > a { background-color: var(--alto); color: var(--userCustomColorLinkExternal, rgb(52, 125, 219)); } .wxs_user_info_usernote_url > a { background-color: var(--alto); color: var(--userCustomColorLinkInternal, rgb(23, 71, 140)); } .wxs_user_info_usernote_url { order: 4; display: flex; gap: 4px; } /* ban */ .wxs_user_banned { order: 9; } /* 🔔 obserwujesz użytkownika */ .wxs_user_follow, .wxs_user_blacklist { order: 10; } .wxs_user_member_since { order: 20; background-color: var(--alto); } .wxs_user_info_usernote { order: 40; border-radius: 4px; padding: 1px 9px; font-size: 12px; background-color: rgba(196, 183, 123, .2); background-color: var(--alto); } /* ukrycie dodanego roku oraz notatki do nazwy uzytkownika na liście plusujących */ section.entry-voters > ul > li > div.wxs_user_info > .wxs_user_info_usernote, section.entry-voters > ul > li > div.wxs_user_info > .wxs_user_member_since { display: none!important; } /* NOTATKA DO UŻYTKOWNIKA */ .wxs_user_info { --notatkowator_color_red: rgb(255, 0, 0); --notatkowator_color_green: rgb(14, 137, 39); --notatkowator_color_blue: rgb(66, 141, 255); --notatkowator_color_orange: rgb(179, 89, 30); --notatkowator_color_pink: rgb(219, 14, 191); --notatkowator_color_yellow: rgb(253, 246, 50); } .wxs_user_info_usernote.wxs_notatkowator_c { color: var(--notatkowator_color_red); } .wxs_user_info_usernote.wxs_notatkowator_z { color: var(--notatkowator_color_green); } .wxs_user_info_usernote.wxs_notatkowator_n { color: var(--notatkowator_color_blue); } .wxs_user_info_usernote.wxs_notatkowator_p { color: var(--notatkowator_color_orange); } .wxs_user_info_usernote.wxs_notatkowator_r { color: var(--notatkowator_color_pink); } .wxs_user_info_usernote.wxs_notatkowator_ż { color: var(--notatkowator_color_yellow); } /* notatka pod avatarem */ section.entry > article > header + .wxs_user_info_usernote { display: flex!important; border-bottom: 1px solid rgba(128, 128, 128, 0.1); background-color: var(--whiteOpacity06); border-radius: 4px; padding: 10px; margin-top: 16px; margin-bottom: 4px; font-size: 13px; color: var(--blackOpacity09, rgba(255, 255, 255, 1)); } section.entry > article > header + .wxs_user_info_usernote { color: var(--blackOpacity07, rgba(255, 255, 255, 1)); }`; } /* HIDE ADS ALWAYS */ if (settings.hideAds) { CSS += `.pub-slot-wrapper { display: none!important; }`; } styleElement.textContent = CSS; document.head.appendChild(styleElement); } })(); // https://cdn.jsdelivr.net/gh/CoeJoder/waitForKeyElements.js@latest/waitForKeyElements.js /** * A utility function for userscripts that detects and handles AJAXed content. * * @example * waitForKeyElements("div.comments", (element) => { * element.innerHTML ="This text inserted by waitForKeyElements()."; * }); * * waitForKeyElements(() => { * const iframe = document.querySelector('iframe'); * if (iframe) { * const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; * return iframeDoc.querySelectorAll("div.comments"); * } * return null; * }, callbackFunc); * * @param {(string|function)} selectorOrFunction - The selector string or function. * @param {function} callback - The callback function; takes a single DOM element as parameter. * If returns true, element will be processed again on subsequent iterations. * @param {boolean} [waitOnce=true] - Whether to stop after the first elements are found. * @param {number} [interval=300] - The time (ms) to wait between iterations. * @param {number} [maxIntervals=-1] - The max number of intervals to run (negative number for unlimited). */ function waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals) { if (typeof waitOnce === "undefined") { waitOnce = true; } if (typeof interval === "undefined") { interval = 300; } if (typeof maxIntervals === "undefined") { maxIntervals = -1; } if (typeof waitForKeyElements.namespace === "undefined") { waitForKeyElements.namespace = Date.now().toString(); } var targetNodes = (typeof selectorOrFunction === "function") ? selectorOrFunction() : document.querySelectorAll(selectorOrFunction); var targetsFound = targetNodes && targetNodes.length > 0; if (targetsFound) { targetNodes.forEach(function (targetNode) { var attrAlreadyFound = `data-userscript-${waitForKeyElements.namespace}-alreadyFound`; var alreadyFound = targetNode.getAttribute(attrAlreadyFound) || false; if (!alreadyFound) { var cancelFound = callback(targetNode); if (cancelFound) { targetsFound = false; } else { targetNode.setAttribute(attrAlreadyFound, true); } } }); } if (maxIntervals !== 0 && !(targetsFound && waitOnce)) { maxIntervals -= 1; setTimeout(function () { waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals); }, interval); } }