您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tools that restore and introduce new functionalities in the old.reddit interface (Views, vote tallies, etc.)
// ==UserScript== // @name Classic Reddit++ // @namespace https://github.com/SlippingGitty // @version 1.6.3 // @description Tools that restore and introduce new functionalities in the old.reddit interface (Views, vote tallies, etc.) // @author SlippingGitty // @match http://old.reddit.com/notifications // @match https://old.reddit.com/notifications // @match https://sh.reddit.com/notifications* // @match *://*.reddit.com/* // @icon https://files.catbox.moe/6e7371.png // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @license WTFPL // ==/UserScript== (function () { 'use strict'; // // Insures sh.reddit is loaded for notifications, adds old.reddit frontpage button on logo // if (window.location.href.includes("old.reddit.com/notifications")) { window.location.href = window.location.href.replace("old.reddit.com/notifications", "sh.reddit.com/notifications"); } if (window.location.href.includes("sh.reddit.com/notifications")) { window.addEventListener('load', function () { const container = document.createElement('div'); container.style.display = 'flex'; container.style.alignItems = 'center'; container.style.position = 'fixed'; container.style.top = '10px'; container.style.left = '10px'; container.style.zIndex = '9999'; container.style.backgroundColor = 'rgba(255, 255, 255, 0.9)'; container.style.padding = '5px 10px'; container.style.borderRadius = '4px'; container.style.boxShadow = '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)'; const logo = document.createElement('div'); logo.innerHTML = ` <svg width="24" height="24" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <g> <circle fill="#FF4500" cx="10" cy="10" r="10"/> <path fill="#FFF" d="M16.67,10A1.46,1.46,0,0,0,14.2,9a7.12,7.12,0,0,0-3.85-1.23L11,4.65,13.14,5.1a1,1,0,1,0,.13-0.61L10.82,4a0.31,0.31,0,0,0-.37.24L9.71,7.71a7.14,7.14,0,0,0-3.9,1.23A1.46,1.46,0,1,0,4.2,11.33a2.87,2.87,0,0,0,0,.44c0,2.24,2.61,4.06,5.83,4.06s5.83-1.82,5.83-4.06a2.87,2.87,0,0,0,0-.44A1.46,1.46,0,0,0,16.67,10Zm-10,1a1,1,0,1,1,1,1A1,1,0,0,1,6.67,11Zm5.81,2.75a3.84,3.84,0,0,1-2.47.77,3.84,3.84,0,0,1-2.47-.77,0.27,0.27,0,0,1,.38-0.38A3.27,3.27,0,0,0,10,14a3.28,3.28,0,0,0,2.09-.61A0.27,0.27,0,1,1,12.48,13.79Zm-0.18-1.71a1,1,0,1,1,1-1A1,1,0,0,1,12.29,12.08Z"/> </g> </svg> `; logo.style.marginRight = '8px'; const backButton = document.createElement('a'); backButton.innerText = 'Back to Old Reddit'; backButton.href = window.location.href.replace("sh.reddit.com/notifications", "old.reddit.com"); backButton.title = 'Return to Old Reddit'; backButton.style.display = 'inline-block'; backButton.style.padding = '5px 10px'; backButton.style.borderRadius = '4px'; backButton.style.backgroundColor = '#ff4500'; backButton.style.color = 'white'; backButton.style.fontWeight = 'bold'; backButton.style.textDecoration = 'none'; backButton.style.fontSize = '12px'; backButton.onmouseover = function () { this.style.backgroundColor = '#cc3700'; }; backButton.onmouseout = function () { this.style.backgroundColor = '#ff4500'; }; container.appendChild(logo); container.appendChild(backButton); document.body.appendChild(container); document.addEventListener('keydown', function (e) { if (e.key === 'Escape') { window.location.href = backButton.href; } }); }); } // // Classic Reddit++ // ///// Trending Subs Recreation const config = { commentsRange: [20, 50], lastTrendingUpdateKey: 'lastTrendingUpdate', updateInterval: 24 * 60 * 60 * 1000, subredditsPool: [ "/r/AskReddit", "/r/funny", "/r/pics", "/r/gaming", "/r/science", "/r/worldnews", "/r/movies", "/r/videos", "/r/aww", "/r/Music", "/r/todayilearned", "/r/memes", "/r/sports", "/r/technology", "/r/news", "/r/anime", "/r/travel", "/r/food", "/r/space", "/r/interestingasfuck", "/r/worldpolitics", "/r/nfl", "/r/art", "/r/hobbies", "/r/personalfinance", "/r/books", "/r/history", "/r/photography", "/r/gadgets", "/r/television", "/r/wtf", "/r/awfuleverything", "/r/facepalm", "/r/mildlyinteresting", "/r/unexpected", "/r/dankmemes", "/r/publicfreakout", "/r/natureismetal", "/r/rarepuppers", "/r/oldschoolcool", "/r/blessedimages", "/r/madlads", "/r/animalsbeingjerks", "/r/whatcouldgowrong", "/r/instantkarma", "/r/therewasanattempt", "/r/wholesomememes", "/r/trashy", "/r/cringetopia", "/r/insaneparents", "/r/quityourbullshit", "/r/choosingbeggars", "/r/entitledparents", "/r/amitheasshole", "/r/relationship_advice", "/r/legaladvice", "/r/tifu", "/r/raisedbynarcissists", "/r/offmychest", "/r/venting", "/r/selfimprovement", "/r/getmotivated", "/r/loseit", "/r/stopdrinking", "/r/leaves", "/r/meditation", "/r/skincareaddiction", "/r/makeupaddiction", "/r/haircareScience", "/r/malefashionadvice", "/r/femalefashionadvice", "/r/streetwear", "/r/sneakers", "/r/watches", "/r/cars", "/r/buildapc", "/r/pcmasterrace", "/r/android", "/r/apple", "/r/programming", "/r/webdev", "/r/javascript", "/r/python", "/r/gamingnews", "/r/indiegaming", "/r/boardgames", "/r/tabletopgames", "/r/rpg", "/r/dndnext", "/r/pathfinder_rpg", "/r/magicTCG", "/r/yugioh", "/r/pokemontcg", "/r/hearthstone", "/r/gwent", "/r/competitivegaming", "/r/esports", "/r/gamernews", "/r/anime", "/r/manga", "/r/cosplay", "/r/kpop", "/r/jpop", "/r/cpop", "/r/popheads", "/r/indiepop", "/r/hiphopheads", "/r/rnb", "/r/electronicmusic", "/r/edm", "/r/techno", "/r/housemusic", "/r/trance", "/r/dubstep", "/r/jazz", "/r/classicalmusic", "/r/blues", "/r/folk", "/r/countrymusic", "/r/rock", "/r/metal", "/r/punk", "/r/alternativemusic", "/r/indierock", "/r/musicals", "/r/soundtracks", "/r/listentothis", "/r/newmusic", "/r/food", "/r/foodporn", "/r/recipes", "/r/baking", "/r/cooking", "/r/cocktails", "/r/coffee", "/r/tea", "/r/vegan", "/r/vegetarian", "/r/ketorecipes", "/r/paleo", "/r/glutenfree", "/r/healthyeating", "/r/nutrition", "/r/fitness", "/r/loseit", "/r/weightlifting", "/r/running", "/r/yoga", "/r/meditation", "/r/mindfulness", "/r/journaling", "/r/productivity", "/r/getdisciplined", "/r/selfimprovement", "/r/skincareaddiction", "/r/makeupaddiction", "/r/haircareScience", "/r/malefashionadvice", "/r/femalefashionadvice", "/r/streetwear", "/r/sneakers", "/r/watches", "/r/cars", "/r/motorcycles", "/r/aviation", "/r/space", "/r/astronomy", "/r/physics", "/r/chemistry", "/r/biology", "/r/medicine", "/r/science", "/r/technology", "/r/futurology", "/r/singularity", "/r/longevity", "/r/energy", "/r/renewableenergy", "/r/environment", "/r/climatechange", "/r/nature", "/r/earthporn", "/r/wildlifephotography", "/r/aww", "/r/animalsbeingbros", "/r/rarepuppers", "/r/corgi", "/r/goldenretrievers", "/r/cats", "/r/funnyanimals", "/r/mademesmile", "/r/wholesomememes", "/r/humansbeingbros", "/r/oldschoolcool", "/r/thewaywewere", "/r/nostalgia", "/r/retrophotos", "/r/vintagestyle", "/r/oldschoolriders", "/r/classiccars", "/r/classicfilms", "/r/classicrock", "/r/oldmovies", "/r/90s", "/r/80s", "/r/70s", "/r/60s", "/r/50s", "/r/40s", "/r/30s", "/r/20s", "/r/10s", "/r/00s", "/r/y2k", "/r/millennials", "/r/genz", "/r/genx", "/r/babyboomers", "/r/thegreatgeneration", "/r/silentgeneration", "/r/lostgeneration", ], enableTagline: 'enableTagline', enableRenameHome: 'enableRenameHome', enableFavicon: 'enableFavicon', enableTrending: 'enableTrending', viewCounterEnabled: 'viewCounterEnabled', voteEstimatorEnabled: 'voteEstimatorEnabled', hideMultibar: 'hideMultibar', hideBell: 'hideBell', hideChat: 'hideChat', addUserPrefix: 'addUserPrefix', hideArchivedArrows: 'hideArchivedArrows', oldCommentFont: 'oldCommentFont', fullUserScores: 'fullUserScores', oldRedditIcons: 'oldRedditIcons', expandoButtons: 'expandoButtons', classicRESNight: 'classicRESNight', enableSubmitUnderlay: 'enableSubmitUnderlay', classicResBorderHighlight: 'classicResBorderHighlight', classicFlair: 'classicFlair' }; const defaultSettings = { [config.enableTagline]: false, [config.enableRenameHome]: true, [config.enableFavicon]: true, [config.enableTrending]: true, [config.viewCounterEnabled]: true, [config.voteEstimatorEnabled]: true, [config.hideMultibar]: false, [config.hideBell]: true, [config.hideChat]: true, [config.addUserPrefix]: false, [config.hideArchivedArrows]: false, [config.oldCommentFont]: false, [config.fullUserScores]: true, [config.oldRedditIcons]: true, [config.expandoButtons]: false, [config.classicRESNight]: false, [config.enableSubmitUnderlay]: false, [config.classicResBorderHighlight]: true, [config.classicFlair]: false }; for (const key in defaultSettings) { if (GM_getValue(key) === undefined) { GM_setValue(key, defaultSettings[key]); } } // STATIC CSS (ALWAYS LOADS REGARDLESS OF TOGGLES) GM_addStyle(` /* Makes the post info it's classic grey */ .linkinfo { border: 1px solid rgba(12, 10, 10, 0.41); background-color: rgba(134, 130, 130, 0.24); } /* Refered to as "RES" because I originally wanted to see if I could put the toggles in RES Settings */ #res-dashboard-container { display: none; position: fixed; top: 60px; right: 20px; width: 600px; max-height: 500px; background-color: #ffffff; border: 1px solid #5f99cf; /* Classic Reddit blue border */ border-radius: 3px; z-index: 1001; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); font-family: verdana, arial, helvetica, sans-serif; /* Classic Reddit font stack */ font-size: 12px; opacity: 1; margin: 0; padding: 0; overflow-y: auto; } /* Indents Trending Tab */ div.entry:nth-child(1) { margin-left: 75px; } /* Night mode styling */ .res-nightmode #res-dashboard-container { background-color: #262626; /* Classic RES night mode color */ border-color: #4d4d4d; color: #ddd; } #res-dashboard-header { background-color: #cee3f8; /* Classic Reddit header blue */ padding: 5px 8px; border-bottom: 1px solid #5f99cf; display: flex; justify-content: space-between; align-items: center; height: 18px; /* Fixed height like old Reddit */ } /* Night mode header */ .res-nightmode #res-dashboard-header { background-color: #2a2a2a; border-bottom-color: #4d4d4d; } #res-dashboard-title { font-size: 13px; font-weight: bold; color: #336699; /* Classic Reddit blue */ margin: 0; text-transform: none; line-height: 18px; } /* Night mode title */ .res-nightmode #res-dashboard-title { color: #8cb3d9; /* Lighter blue for night mode */ } #res-dashboard-close { cursor: pointer; font-size: 12px; color: #369; font-weight: bold; margin-right: 5px; } #res-dashboard-close:hover { color: #ff4500; /* Classic Reddit orangered */ text-decoration: underline; /* Old Reddit often used underlines on hover */ } /* Night mode close button */ .res-nightmode #res-dashboard-close { color: #8cb3d9; } .res-nightmode #res-dashboard-close:hover { color: #ff7247; /* Lighter orangered for night mode */ } #res-dashboard-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 7px; padding: 8px; background-color: #f6f7f8; /* Very light gray like classic Reddit content areas */ overflow: visible; } /* Night mode content area */ .res-nightmode #res-dashboard-content { background-color: #262626; overflow: visible; } .res-setting-section { background-color: #ffffff; border: 1px solid #c3c3c3; /* Classic light gray border */ border-radius: 0px; /* Old Reddit had square corners */ padding: 8px; margin: 0; position: relative; } /* Night mode setting sections */ .res-nightmode .res-setting-section { background-color: #1a1a1a; border-color: #4d4d4d; } .res-setting-section:hover { border-color: #a5a5a5; /* Subtle hover effect common in old interfaces */ } /* Night mode hover effect */ .res-nightmode .res-setting-section:hover { border-color: #666; } .res-setting-section h3 { font-size: 12px; margin: 0 0 5px 0; padding: 0; color: #222222; /* Dark gray, almost black */ font-weight: bold; } /* Night mode headings */ .res-nightmode .res-setting-section h3 { color: #ddd; } /* Native tooltip styling */ .res-setting-section label { font-size: 11px; color: #222; cursor: pointer; } .res-setting-section label[title] { text-decoration: underline dotted #777; /* Indicate tooltip on hover */ } /* Night mode labels */ .res-nightmode .res-setting-section label { color: #ddd; } .res-nightmode .res-setting-section label[title] { text-decoration: underline dotted #aaa; /* Indicate tooltip on hover for night mode */ } /* Classic toggle switch styling */ .res-toggle-container { position: relative; display: flex; align-items: center; gap: 6px; margin-top: 5px; } .res-toggle-switch { position: relative; display: inline-block; width: 32px; height: 14px; } .res-toggle-switch input { opacity: 0; width: 0; height: 0; } .res-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #c3c3c3; transition: .2s; border-radius: 7px; } /* Night mode slider */ .res-nightmode .res-slider { background-color: #444; } .res-slider:before { position: absolute; content: ""; height: 10px; width: 10px; left: 2px; bottom: 2px; background-color: white; transition: .2s; border-radius: 50%; } input:checked + .res-slider { background-color: #5f99cf; /* Classic Reddit blue */ } input:focus + .res-slider { box-shadow: 0 0 1px #5f99cf; } input:checked + .res-slider:before { transform: translateX(18px); } /* Night mode checked slider */ .res-nightmode input:checked + .res-slider { background-color: #4c7eac; /* Darker blue for night mode */ } /* Classic Reddit button with gradient */ #res-settings-toggle { position: fixed; top: 45px; right: 20px; opacity: 0; z-index: 1000; background: linear-gradient(to bottom, #75abff 0%, #5f99cf 100%); /* Classic button gradient */ border: 1px solid #369; color: #fff; padding: 4px 8px; border-radius: 3px; cursor: pointer; font-size: 11px; font-weight: bold; text-transform: capitalize; } #res-settings-toggle:hover { background: linear-gradient(to bottom, #5f99cf 0%, #3a80c1 100%); opacity: 1; transition: .1s; } /* Night mode toggle button */ .res-nightmode #res-settings-toggle { background: linear-gradient(to bottom, #4c7eac 0%, #36648b 100%); /* Darker gradient for night mode */ border-color: #2c5574; } .res-nightmode #res-settings-toggle:hover { background: linear-gradient(to bottom, #36648b 0%, #2c5574 100%); } #res-dashboard-logo { max-height: 14px; margin-right: 6px; } /* Additional elements to match old Reddit style */ /* Old Reddit-style scrollbars */ #res-dashboard-container::-webkit-scrollbar { width: 12px; background-color: #f5f5f5; } #res-dashboard-container::-webkit-scrollbar-thumb { background-color: #c3c3c3; border: 2px solid #f5f5f5; } #res-dashboard-container::-webkit-scrollbar-track { background-color: #f5f5f5; } /* Night mode scrollbars */ .res-nightmode #res-dashboard-container::-webkit-scrollbar { background-color: #1a1a1a; } .res-nightmode #res-dashboard-container::-webkit-scrollbar-thumb { background-color: #444; border: 2px solid #1a1a1a; } .res-nightmode #res-dashboard-container::-webkit-scrollbar-track { background-color: #1a1a1a; } /* Classic Reddit table styles for structured content if needed */ .res-table { border-collapse: collapse; width: 100%; margin: 5px 0; font-size: 11px; } .res-table th { background-color: #efefef; border: 1px solid #c3c3c3; padding: 3px 5px; text-align: left; font-weight: bold; } .res-table td { border: 1px solid #c3c3c3; padding: 3px 5px; } .res-nightmode .res-table th { background-color: #2a2a2a; border-color: #4d4d4d; } .res-nightmode .res-table td { border-color: #4d4d4d; } `); let dashboardContainer = document.createElement('div'); dashboardContainer.id = 'res-dashboard-container'; let dashboardHeader = document.createElement('div'); dashboardHeader.id = 'res-dashboard-header'; let dashboardTitle = document.createElement('h2'); dashboardTitle.id = 'res-dashboard-title'; dashboardTitle.textContent = 'Classic Reddit++ Settings'; let logoImg = document.createElement('img'); logoImg.id = 'res-dashboard-logo'; logoImg.src = 'https://files.catbox.moe/6e7371.png'; logoImg.alt = 'Classic Reddit++ Logo'; dashboardHeader.appendChild(logoImg); dashboardHeader.appendChild(dashboardTitle); let closeButton = document.createElement('span'); closeButton.id = 'res-dashboard-close'; closeButton.textContent = 'x'; closeButton.addEventListener('click', () => { dashboardContainer.style.display = 'none'; }); dashboardHeader.appendChild(closeButton); dashboardContainer.appendChild(dashboardHeader); let dashboardContent = document.createElement('div'); dashboardContent.id = 'res-dashboard-content'; dashboardContainer.appendChild(dashboardContent); document.body.appendChild(dashboardContainer); function createSettingElement(settingKey, description, updateFunction) { let section = document.createElement('div'); section.classList.add('res-setting-section'); let title = document.createElement('h3'); title.textContent = { enableTagline: "Modify Title Tag", enableRenameHome: "Rename Home Shortcut", enableFavicon: "Restore Classic Favicon", enableTrending: "Simulate Trending Subreddits", viewCounterEnabled: "Display Post View Counts", voteEstimatorEnabled: "Estimate Post Votes", hideMultibar: "Hide Subreddit Multibar", hideBell: "Hide Notification Bell", hideChat: "Hide Reddit Chat", addUserPrefix: "Add Username Prefix", hideArchivedArrows: "Hide Archived Post Arrows", oldCommentFont: "Use Old Comment Font", fullUserScores: "Show Full User Scores", oldRedditIcons: "Restore Old Reddit Icons", expandoButtons: "Use Old Expando Buttons", classicRESNight: "Use Classic RES Night Mode", enableSubmitUnderlay: "Restore Submit Link Tagline", classicResBorderHighlight: "Enable Classic RES Border Highlight", classicFlair: "Remove Flair Colors" }[settingKey] || settingKey; section.appendChild(title); let desc = document.createElement('p'); desc.textContent = description; section.appendChild(desc); let toggleContainer = document.createElement('div'); toggleContainer.classList.add('res-toggle-container'); let toggleLabel = document.createElement('label'); toggleLabel.classList.add('res-toggle-switch'); let toggleInput = document.createElement('input'); toggleInput.type = 'checkbox'; toggleInput.checked = GM_getValue(settingKey, defaultSettings[settingKey]); toggleInput.addEventListener('change', function () { GM_setValue(settingKey, this.checked); if (updateFunction) updateFunction(this.checked); }); let toggleSlider = document.createElement('span'); toggleSlider.classList.add('res-slider'); toggleLabel.appendChild(toggleInput); toggleLabel.appendChild(toggleSlider); toggleContainer.appendChild(toggleLabel); section.appendChild(toggleContainer); return section; } // Populate the dashboard const settingsArray = [ { key: config.enableTagline, description: "Modifies the title tag to say 'reddit: the front page of the internet'", func: setTagline }, { key: config.enableRenameHome, description: "Renames the 'home' shortcut to 'FRONT'. Please Disable subredditManager in RES for time being.", func: renameHomeButton }, { key: config.enableFavicon, description: "Brings back the classic Favicon.", func: changeFavicon }, { key: config.enableTrending, description: "Simulates a collection of 'trending' subreddits to the top of your front page.", func: addTrendingSubreddits }, { key: config.viewCounterEnabled, description: "Displays view counts on posts.", func: initializeViewCounter }, { key: config.voteEstimatorEnabled, description: "Estimates upvotes and downvotes on posts, and adds a counter to every post.", func: initializeVoteEstimator }, { key: config.hideMultibar, description: "Hide the subreddit multibar.", func: toggleHideMultibar }, { key: config.hideBell, description: "Hide the notification bell.", func: toggleHideBell }, { key: config.hideChat, description: "Hide Reddit chat.", func: toggleHideChat }, { key: config.addUserPrefix, description: "Add /u/ before usernames.", func: toggleAddUserPrefix }, { key: config.hideArchivedArrows, description: "Hide arrows on archived posts.", func: toggleHideArchivedArrows }, { key: config.oldCommentFont, description: "Use old comment font sizes.", func: toggleOldCommentFont }, { key: config.fullUserScores, description: "Show full scores on posts.", func: toggleFullUserScores }, { key: config.oldRedditIcons, description: "Use old Reddit icons.", func: toggleOldRedditIcons }, { key: config.expandoButtons, description: "Use old expando buttons.", func: toggleExpandoButtons }, { key: config.classicRESNight, description: "Use Classic RES Night Mode.", func: toggleClassicRESNight }, { key: config.enableSubmitUnderlay, description: "Restore tagline under Submit Link", func: toggleSubmitUnderlay }, { key: config.classicResBorderHighlight, description: "Enable Classic RES Border Highlight", func: toggleClassicResBorderHighlight }, { key: config.classicFlair, description: "Removes colors from flairs on posts. RES support limited.", func: classicFlair } ]; settingsArray.forEach(setting => { dashboardContent.appendChild(createSettingElement(setting.key, setting.description, setting.func)); }); let toggleButton = document.createElement('button'); toggleButton.id = 'res-settings-toggle'; toggleButton.textContent = 'CR++'; toggleButton.addEventListener('click', () => { dashboardContainer.style.display = dashboardContainer.style.display === 'block' ? 'none' : 'block'; }); document.body.appendChild(toggleButton); const refreshButton = document.createElement('button'); refreshButton.textContent = "Refresh Trending"; refreshButton.style.fontSize = "10px"; refreshButton.style.marginTop = "5px"; refreshButton.addEventListener('click', forceUpdateTrending); dashboardHeader.appendChild(refreshButton); function setTagline(enabled) { if (enabled) { document.title = "reddit: the front page of the internet"; } else { const defaultTitle = document.title.split(":")[0]; document.title = defaultTitle; } } function renameHomeButton(enabled) { const homeLink = document.querySelector('ul.flat-list:nth-child(1) > li:nth-child(1) > a:nth-child(1)'); if (homeLink) { homeLink.textContent = enabled ? 'front' : 'home'; homeLink.title = enabled ? 'Go to front page' : 'go to your personal reddit frontpage'; } } function changeFavicon(enabled) { let icon = [...document.querySelectorAll('link[rel~="icon"]')]; icon.forEach(x => x.parentNode.removeChild(x)); if (enabled) { let newfav = `https://b.thumbs.redditmedia.com/JeP1WF0kEiiH1gT8vOr_7kFAwIlHzRBHjLDZIkQP61Q.jpg`; let link = document.createElement('link'); link.rel = 'icon'; link.href = newfav; document.head.appendChild(link); } else { var link = document.createElement('link'); link.rel = 'icon'; link.href = '//www.redditstatic.com/favicon.ico'; document.head.appendChild(link); } } function getRandomSubreddits() { const now = Date.now(); const lastUpdate = GM_getValue(config.lastTrendingUpdateKey, 0); const storedSubreddits = GM_getValue('trendingSubreddits', null); if (now - lastUpdate > config.updateInterval || !storedSubreddits) { const shuffled = [...config.subredditsPool].sort(() => 0.5 - Math.random()); const selected = shuffled.slice(0, 5); const commentCount = Math.floor( Math.random() * (config.commentsRange[1] - config.commentsRange[0] + 1) + config.commentsRange[0] ); const trendingData = { subreddits: selected, commentCount: commentCount + " comments" }; GM_setValue('trendingSubreddits', JSON.stringify(trendingData)); GM_setValue(config.lastTrendingUpdateKey, now); return trendingData; } return JSON.parse(storedSubreddits); } function createTrendingSubredditsElement(trendingData) { const container = document.createElement('div'); container.className = 'thing'; container.style.margin = '0'; container.style.padding = '0'; container.style.marginBottom = '7px'; const content = document.createElement('div'); content.className = 'entry unvoted'; const lineContainer = document.createElement('div'); lineContainer.style.display = 'flex'; lineContainer.style.flexWrap = 'wrap'; lineContainer.style.alignItems = 'center'; lineContainer.style.gap = '5px'; const trendingIcon = document.createElement('span'); trendingIcon.style.backgroundImage = "url(https://web.archive.org/web/20151231010236im_/https://www.redditstatic.com/sprite-reddit.akRjeb2JalM.png)"; trendingIcon.style.backgroundPosition = "-50px -886px"; trendingIcon.style.height = '14px'; trendingIcon.style.width = '14px'; trendingIcon.style.display = 'inline-block'; lineContainer.appendChild(trendingIcon); const headerText = document.createElement('strong'); headerText.textContent = 'trending subreddits'; headerText.style.color = '#222'; headerText.style.marginRight = '10px'; lineContainer.appendChild(headerText); trendingData.subreddits.forEach((subreddit) => { const link = document.createElement('a'); link.href = subreddit; link.textContent = subreddit; link.style.textDecoration = 'none'; link.style.color = '#0079d3'; lineContainer.appendChild(link); }); const commentsLink = document.createElement('a'); commentsLink.href = '/r/trendingsubreddits'; commentsLink.innerHTML = `<b>${trendingData.commentCount}</b>`; commentsLink.style.color = '#888'; commentsLink.style.textDecoration = 'none'; commentsLink.style.fontSize = '11px'; commentsLink.style.marginLeft = '10px'; lineContainer.appendChild(commentsLink); content.appendChild(lineContainer); container.appendChild(content); if (document.body.classList.contains('res-nightmode')) { headerText.style.color = '#A9A9A9'; const links = lineContainer.querySelectorAll('a'); links.forEach(link => { link.style.color = '#89b8e5'; }); commentsLink.style.color = '#b0b0b0'; } return container; } function addTrendingSubreddits(enabled) { const isFrontPage = window.location.pathname === '/' || window.location.pathname === '/index.html'; if (enabled && isFrontPage && (window.location.hostname === 'old.reddit.com' || window.location.hostname === 'www.reddit.com')) { const siteTable = document.getElementById('siteTable'); if (!siteTable) { return; } const trendingData = getRandomSubreddits(); const trendingElement = createTrendingSubredditsElement(trendingData); if (siteTable.firstChild) { siteTable.insertBefore(trendingElement, siteTable.firstChild); } else { siteTable.appendChild(trendingElement); } } else { const trendingElement = document.querySelector('.thing'); if (trendingElement) { trendingElement.remove(); } } } function forceUpdateTrending() { GM_setValue(config.lastTrendingUpdateKey, 0); location.reload(); } function addDebugControls() { const debugBtn = document.createElement('button'); debugBtn.textContent = "Update Trending Subreddits"; debugBtn.style.position = 'fixed'; debugBtn.style.top = '5px'; debugBtn.style.right = '5px'; debugBtn.style.zIndex = '9999'; debugBtn.style.fontSize = '10px'; debugBtn.style.opacity = '0.7'; debugBtn.onclick = forceUpdateTrending; document.body.appendChild(debugBtn); } function addCommas(number) { return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function httpGet(url) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: url, onload: function (response) { if (response.status >= 200 && response.status < 300) { resolve(response.responseText); } else { reject(new Error(`HTTP error! status: ${response.status}`)); } }, onerror: function () { reject(new Error("Network error occurred")); }, }); }); } function getPostId(element) { if (element) { if (element.dataset.fullname) { return element.dataset.fullname.replace('t3_', ''); } const idClass = Array.from(element.classList).find(c => c.startsWith('id-t3_')); if (idClass) { return idClass.replace('id-t3_', ''); } const thingId = element.getAttribute('data-fullname'); if (thingId && thingId.startsWith('t3_')) { return thingId.replace('t3_', ''); } const permalink = element.querySelector('a.permalink'); if (permalink && permalink.href) { const permalinkMatch = permalink.href.match(/\/comments\/([a-z0-9]+)\//i); if (permalinkMatch) { return permalinkMatch[1]; } } } const urlMatch = window.location.pathname.match(/\/comments\/([a-z0-9]+)\//i); return urlMatch ? urlMatch[1] : null; } // // Makes sure the Trending subreddits and Classic tagline only works // on the front page // if ((window.location.hostname === 'old.reddit.com' || window.location.hostname === 'www.reddit.com') && (window.location.pathname === '/' || window.location.pathname === '/index.html')) { setTagline(GM_getValue(config.enableTagline)); renameHomeButton(GM_getValue(config.enableRenameHome)); changeFavicon(GM_getValue(config.enableFavicon)); window.addEventListener('load', () => { addTrendingSubreddits(GM_getValue(config.enableTrending)); }); } // // View Counter Logic // function initializeViewCounter() { if (!GM_getValue(config.viewCounterEnabled)) return; const DEBUG = false; function debugLog(...args) { if (DEBUG) { console.log('[View Counter]', ...args); } } const viewCountCache = {}; function formatNumber(num) { if (num === null || num === undefined || num === 0) return '? views'; if (num >= 1000000) { return (num / 1000000).toFixed(1) + 'M views'; } else if (num >= 1000) { return (num / 1000).toFixed(1) + 'K views'; } else { return num + ' views'; } } function fetchPostData(postId, targetElements) { if (viewCountCache[postId]) { targetElements.forEach(el => { insertViewCount(el, viewCountCache[postId]); }); return; } const jsonUrl = `https://www.reddit.com/by_id/t3_${postId}.json`; debugLog('Fetching data for post', postId, 'from', jsonUrl); GM_xmlhttpRequest({ method: 'GET', url: jsonUrl, headers: { 'User-Agent': 'Mozilla/5.0', 'Accept': 'application/json' }, onload: function (response) { try { const data = JSON.parse(response.responseText); debugLog('Received data for post', postId, data); const postData = data.data.children[0].data; let viewCount = null; if (postData.view_count !== undefined) { viewCount = postData.view_count; } else if (postData.viewed !== undefined) { viewCount = postData.viewed; } else if (postData.num_views !== undefined) { viewCount = postData.num_views; } else if (postData.viewCount !== undefined) { viewCount = postData.viewCount; } else { const score = postData.score || 0; const ratio = postData.upvote_ratio || 0.5; const estimatedUpvotes = Math.round(score / (2 * ratio - 1)); viewCount = estimatedUpvotes * 25; debugLog('Estimated view count:', viewCount, 'based on score:', score, 'and ratio:', ratio); } debugLog('View count for post', postId, ':', viewCount); if (!viewCount || viewCount === 0) { fetchNewRedditViewCount(postId, targetElements); return; } viewCountCache[postId] = viewCount; targetElements.forEach(el => { insertViewCount(el, formatNumber(viewCount)); }); } catch (error) { console.error('Old Reddit View Counter error:', error); fetchNewRedditViewCount(postId, targetElements); } }, onerror: function (error) { console.error('Failed to fetch post data:', error); fetchNewRedditViewCount(postId, targetElements); } }); } function fetchNewRedditViewCount(postId, targetElements) { const newRedditUrl = `https://www.reddit.com/comments/${postId}/.json`; debugLog('Trying new Reddit API for post', postId); GM_xmlhttpRequest({ method: 'GET', url: newRedditUrl, headers: { 'User-Agent': 'Mozilla/5.0', 'Accept': 'application/json' }, onload: function (response) { try { const data = JSON.parse(response.responseText); const postData = data[0].data.children[0].data; let viewCount = null; if (postData.view_count !== undefined && postData.view_count !== null) { viewCount = postData.view_count; } else if (postData.viewCount !== undefined && postData.viewCount !== null) { viewCount = postData.viewCount; } else if (postData.num_views !== undefined && postData.num_views !== null) { viewCount = postData.num_views; } else { const totalVotes = postData.ups + postData.downs; viewCount = totalVotes * 25; debugLog('Estimated view count from votes:', viewCount); } debugLog('New Reddit view count for post', postId, ':', viewCount); if (viewCount) { viewCountCache[postId] = viewCount; targetElements.forEach(el => { insertViewCount(el, formatNumber(viewCount)); }); } else { targetElements.forEach(el => { insertViewCount(el, '? views'); }); } } catch (error) { console.error('New Reddit View Counter error:', error); targetElements.forEach(el => { insertViewCount(el, '? views'); }); } }, onerror: function (error) { console.error('Failed to fetch from New Reddit:', error); targetElements.forEach(el => { insertViewCount(el, '? views'); }); } }); } function insertViewCount(element, formattedViews) { const tagline = element.querySelector('.tagline'); if (!tagline) return; if (tagline.querySelector('.view-count')) return; const viewElement = document.createElement('span'); viewElement.className = 'view-count'; viewElement.textContent = formattedViews; viewElement.style.marginRight = '6px'; viewElement.style.color = '#888'; viewElement.style.fontSize = '0.9em'; tagline.insertBefore(viewElement, tagline.firstChild); } function processPost(postElement) { const postId = getPostId(postElement); if (!postId) { debugLog('Could not find post ID for element', postElement); return; } debugLog('Processing post', postId); fetchPostData(postId, [postElement]); } function processAllPosts() { if (window.location.pathname.includes('/comments/')) { const postId = getPostId(); if (!postId) return; const selfPost = document.querySelector('.thing.self'); if (selfPost) { fetchPostData(postId, [selfPost]); } return; } const posts = document.querySelectorAll('.thing.link:not([data-processed-views])'); posts.forEach(post => { post.setAttribute('data-processed-views', 'true'); processPost(post); }); } function handleResExpando() { document.addEventListener('click', function (e) { setTimeout(() => { const expandedPosts = document.querySelectorAll('.res-expando-box:not([data-processed-views])'); expandedPosts.forEach(post => { post.setAttribute('data-processed-views', 'true'); const parentPost = post.closest('.thing'); if (parentPost) { processPost(parentPost); } }); }, 500); }); } function handleNeverEndingReddit() { const observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { if (mutation.addedNodes && mutation.addedNodes.length > 0) { processAllPosts(); } }); }); const container = document.getElementById('siteTable') || document.body; observer.observe(container, { childList: true, subtree: true }); } function initialize() { debugLog('Initializing View Counter'); processAllPosts(); handleResExpando(); handleNeverEndingReddit(); setInterval(processAllPosts, 2000); } setTimeout(initialize, 500); } // // Vote Estimator Logic // function initializeVoteEstimator() { if (!GM_getValue(config.voteEstimatorEnabled)) return; function addCommas(number) { return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function estimatePostScoreVotes() { document.querySelectorAll('.linkinfo .score').forEach(linkinfoScore => { const numberElement = linkinfoScore.querySelector('.number'); if (!numberElement) return; const points = parseInt(numberElement.textContent.replace(/[^0-9]/g, ''), 10); const percentageMatch = linkinfoScore.textContent.match(/([0-9]{1,3})\s?%/); const percentage = percentageMatch ? parseInt(percentageMatch[1], 10) : 0; if (points !== 50 && percentage !== 50) { const upvotes = Math.round(points * percentage / (2 * percentage - 100)); const downvotes = upvotes - points; const totalVotes = upvotes + downvotes; const css = ` .linkinfo .upvotes { font-size: 80%; color: orangered; margin-left: 5px; } .linkinfo .downvotes { font-size: 80%; color: #5f99cf; margin-left: 5px; } .linkinfo .totalvotes { font-size: 80%; margin-left: 5px; } `; const style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); linkinfoScore.insertAdjacentHTML('afterend', ` <span class="upvotes"><span class="number">${addCommas(upvotes)}</span> <span class="word">${upvotes > 1 ? 'upvotes' : 'upvote'}</span></span> <span class="downvotes"><span class="number">${addCommas(downvotes)}</span> <span class="word">${downvotes > 1 ? 'downvotes' : 'downvote'}</span></span> <span class="totalvotes"><span class="number">${addCommas(totalVotes)}</span> <span class="word">${totalVotes > 1 ? 'votes' : 'vote'}</span></span> `); } }); } async function addUpvoteDownvoteInfo() { const linkListing = document.querySelector(".linklisting") || document.querySelector(".Post")?.parentElement; if (!linkListing) return; const linkDivs = linkListing.getElementsByClassName("link"); const promises = Array.from(linkDivs).map(async (linkDiv) => { const commentsLink = linkDiv.querySelector(".comments"); if (!commentsLink) return; const commentsPage = await httpGet(`${commentsLink.href}?limit=1&depth=1`); const scoreSection = /<div class=(\"|\')score(\"|\')[\s\S]*?<\/div>/.exec(commentsPage); if (!scoreSection) return; const scoreMatch = /<span class=(\"|\')number(\"|\')>([\d\,\.]*)<\/span>/.exec(scoreSection[0]); if (!scoreMatch) return; const score = parseInt(scoreMatch[3].replace(',', '').replace('.', ''), 10); const upvotesPercentageMatch = /\((\d+)\s*\%[^\)]*\)/.exec(scoreSection[0]); if (!upvotesPercentageMatch) return; const upvotesPercentage = parseInt(upvotesPercentageMatch[1], 10); const upvotes = calcUpvotes(score, upvotesPercentage); const downvotes = upvotes !== "--" ? score - upvotes : "--"; updateTagline(linkDiv, upvotes, downvotes, upvotesPercentage); }); await Promise.all(promises); } function calcUpvotes(score, upvotesPercentage) { if (score === 0) return "--"; return Math.round(((upvotesPercentage / 100) * score) / (2 * (upvotesPercentage / 100) - 1)); } function updateTagline(linkDiv, upvotes, downvotes, upvotesPercentage) { const taglineParagraph = linkDiv.querySelector(".tagline") || linkDiv.querySelector(".Post div[data-test-id='post-content']")?.querySelector(".tagline"); if (!taglineParagraph) return; let upvoteSpan = taglineParagraph.querySelector(".res_post_ups"); let downvoteSpan = taglineParagraph.querySelector(".res_post_downs"); let percentageSpan = taglineParagraph.querySelector(".res_post_percentage"); if (!upvoteSpan || !downvoteSpan || !percentageSpan) { const updownInfoSpan = document.createElement("span"); upvoteSpan = createVoteSpan("res_post_ups", upvotes, "#FF8B24"); downvoteSpan = createVoteSpan("res_post_downs", downvotes, "#9494FF"); percentageSpan = createVoteSpan("res_post_percentage", `${upvotesPercentage}%`, "#00A000"); updownInfoSpan.append("(", upvoteSpan, "|", downvoteSpan, "|", percentageSpan, ") "); taglineParagraph.insertBefore(updownInfoSpan, taglineParagraph.firstChild); } else { upvoteSpan.textContent = upvotes; downvoteSpan.textContent = downvotes; percentageSpan.textContent = `${upvotesPercentage}%`; } } function createVoteSpan(className, textContent, color) { const span = document.createElement("span"); span.classList.add(className); span.style.color = color; span.textContent = textContent; return span; } async function httpGet(url) { const response = await fetch(url); return response.text(); } window.addEventListener('load', () => { estimatePostScoreVotes(); addUpvoteDownvoteInfo(); }); window.addEventListener('keydown', (event) => { if (event.shiftKey && event.key === 'P') { estimatePostScoreVotes(); addUpvoteDownvoteInfo(); } }); } // // Classic Reddit Rewrite // const styleIds = { hideMultibar: 'classicRedditMultibar', hideBell: 'classicRedditBell', hideChat: 'classicRedditChat', addUserPrefix: 'classicRedditUserPrefix', hideArchivedArrows: 'classicRedditArchivedArrows', oldCommentFont: 'classicRedditOldCommentFont', fullUserScores: 'classicRedditFullUserScores', oldRedditIcons: 'classicRedditOldRedditIcons', expandoButtons: 'classicRedditExpandoButtons', classicRESNight: 'classicRESNightStyles', submitUnderlay: 'classicRedditSubmitUnderlay', classicResBorderHighlight: 'classicResBorderHighlight', classicFlair: 'classicFlair' }; function toggleHideMultibar(enabled) { GM_setValue(config.hideMultibar, enabled); const styleId = styleIds.hideMultibar; if (enabled) { GM_addStyle(` .listing-chooser { display: none; } .content[role=main] { margin-left: 5px!important; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function classicFlair(enabled) { GM_setValue(config.classicFlair, enabled); const styleId = styleIds.classicFlair; if (enabled) { GM_addStyle(` .flair, .RES-flair { background-color: transparent !important; color: #888 !important; border: 1px solid #ddd !important; font-size: x-small !important; padding: 1px !important; } .res-flairSearch.linkflairlabel > a { position: absolute; inset: 0 0 0 0; background-color: ; color: #e3000000 !important; font-size: x-small !important; padding: 1px !important; } .res-flairSearch.linkflairlabel { cursor: pointer; position: relative; background-color: #f000 !important; font-size: x-small !important; padding: 1px !important; } /* Target link flairs specifically */ .linkflairlabel, .res-linkFlairLabel { background-color: transparent !important; color: #888 !important; border: 1px solid #ddd !important; font-size: x-small !important; padding: 1px !important; } /* Target user flairs */ .author-flair, .res-userFlairText { background-color: transparent !important; color: #888 !important; border: 1px solid #ddd !important; font-size: x-small !important; padding: 1px !important; } /* RES night mode compatibility */ .res-nightmode .flair, .res-nightmode .linkflairlabel, .res-nightmode .author-flair { background-color: transparent !important; color: #aaa !important; font-size: x-small !important; } /* Target RES-specific container elements */ .res .tagline .flair, .res .thing .tagline .flair, .res .entry .tagline .flair { background-color: transparent !important; color: #888 !important; border: 1px solid #ddd !important; font-size: x-small !important; padding: 1px !important; } /* RES user tagger compatibility */ .RESUserTag .flair { background-color: transparent !important; color: #888 !important; border: 1px solid #ddd !important; font-size: x-small !important; padding: 1px !important; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleHideBell(enabled) { GM_setValue(config.hideBell, enabled); const styleId = styleIds.hideBell; if (enabled) { GM_addStyle(` #notifications, span.separator:nth-child(6), span.separator:nth-child(7) { display: none; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleHideChat(enabled) { GM_setValue(config.hideChat, enabled); const styleId = styleIds.hideChat; if (enabled) { GM_addStyle(` #chat-v2, span.separator:nth-child(8), span.separator:nth-child(9) { display: none; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleAddUserPrefix(enabled) { GM_setValue(config.addUserPrefix, enabled); const styleId = styleIds.addUserPrefix; if (enabled) { GM_addStyle(` a.author:before { content: "/u/"; text-transform: none!important; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleHideArchivedArrows(enabled) { GM_setValue(config.hideArchivedArrows, enabled); const styleId = styleIds.hideArchivedArrows; if (enabled) { GM_addStyle(` .archived-infobar ~ #siteTable .arrow, .archived-infobar ~ .commentarea .arrow { visibility: hidden; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleOldCommentFont(enabled) { GM_setValue(config.oldCommentFont, enabled); const styleId = styleIds.oldCommentFont; if (enabled) { GM_addStyle(` .md { font-size: inherit; line-height: normal; } .md p { line-height: normal; } .md pre > code { font-size: small; } .md h1 { font-size: 1.2em; line-height: normal; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleFullUserScores(enabled) { GM_setValue(config.fullUserScores, enabled); const styleId = styleIds.fullUserScores; if (enabled) { GM_addStyle(` .link .score { font-size: 0; } .link .score::before { content: attr(title); font-size: 12px; } .link .score::first-letter { font-size: 12px; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleOldRedditIcons(enabled) { GM_setValue(config.oldRedditIcons, enabled); const styleId = styleIds.oldRedditIcons; if (enabled) { GM_addStyle(` .thumbnail.self { height: 50px; background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png); background-position: 0px -491px; background-repeat: no-repeat; } .thumbnail.default { background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png); background-position: 0px -434px; background-repeat: no-repeat; height: 50px; } .thumbnail.image { background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png); background-position: 0px -434px; background-repeat: no-repeat; height: 50px; } .thumbnail.nsfw { background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png); background-position: 0px -361px; background-repeat: no-repeat; height: 69px; } .thumbnail.spoiler { background-image: url(https://imgoat.com/uploads/679091c5a8/5031.png); background-position: 0px -361px; background-repeat: no-repeat; height: 69px; } .gilded-gid2-icon:before { width: 13px; height: 13px; background-position: -42px -1676px !important; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleExpandoButtons(enabled) { GM_setValue(config.expandoButtons, enabled); const styleId = styleIds.expandoButtons; if (enabled) { GM_addStyle(` .expando-button.selftext.collapsed:hover, .eb-sch { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: -61px -547px; background-repeat: no-repeat; } .expando-button.selftext.collapsed { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: -90px -547px; background-repeat: no-repeat; } .expando-button.video.collapsed {background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: -87px -584px; background-repeat: no-repeat; } .expando-button.video.collapsed:hover, .eb-vch { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: -58px -584px; background-repeat: no-repeat; } .expando-button.selftext.expanded, .eb-se { margin-bottom: 5px; background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: -29px -584px; background-repeat: no-repeat; } .expando-button.selftext.expanded:hover, .eb-seh { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: 0px -584px; background-repeat: no-repeat; } .expando-button.video.expanded, .eb-ve { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: -29px -613px; background-repeat: no-repeat; } .expando-button.video.expanded:hover, .eb-veh { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png); background-position: 0px -613px; background-repeat: no-repeat; } .expando-button.image, .expando-button.video-muted, .expando-button.expando-button-loading, .expando-button.expando-button-requires-permission { vertical-align: top !important; width: 23px; height: 23px; max-width: 23px; max-height: 23px; display: inline-block; background-image: url(https://imgur.com/m2osmrU.png); margin-right: 6px; padding: 0; } .comment .tagline { display: inline-block !important; } .comment .expand { float: right !important; margin: -2px 0 0 2px !important; } .res .expando-button, .res-nightmode .expando-button { background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png) !important; filter: none !important; -webkit-filter: none !important; transform: none !important; background-color: transparent !important; } .res .expando-button:hover, .res-nightmode .expando-button:hover{ background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png) !important; filter: none !important; -webkit-filter: none !important; transform: none !important; background-color: transparent !important; } .res .expando-button.selftext.expanded, .res-nightmode .expando-button.selftext.expanded { background-position: -29px -584px !important; background-repeat: no-repeat !important; margin-bottom: 5px !important; } .res .expando-button.selftext.expanded:hover, .res-nightmode .expando-button.selftext.expanded:hover { background-position: 0px -584px !important; background-repeat: no-repeat !important; } .res .expando-button.video.collapsed, .res-nightmode .expando-button.video.collapsed { background-position: -87px -584px !important; background-repeat: no-repeat !important; } .res .expando-button.video.collapsed:hover, .res-nightmode .expando-button.video.collapsed:hover { background-position: -58px -584px !important; background-repeat: no-repeat !important; } .res .expando-button.video.expanded, .res-nightmode .expando-button.video.expanded { background-position: -29px -613px !important; background-repeat: no-repeat !important; } .res .expando-button.video.expanded:hover, .res-nightmode .expando-button.video.expanded:hover { background-position: 0px -613px !important; background-repeat: no-repeat !important; } .res .expando-button.image, .res .expando-button.video-muted, .res-nightmode .expando-button.image, .res-nightmode .expando-button.video-muted { vertical-align: top !important; width: 23px !important; height: 23px !important; max-width: 23px !important; max-height: 23px !important; display: inline-block !important; background-image: url(https://imgur.com/m2osmrU.png) !important; margin-right: 6px !important; padding: 0 !important; } .res .RESUsersDBIcon, .res-nightmode .RESUsersDBIcon { display: inline-block !important; margin-left: 3px !important; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleClassicRESNight(enabled) { GM_setValue(config.classicRESNight, enabled); const styleId = styleIds.classicRESNight; if (enabled) { GM_addStyle(` /* HEADER */ .res-nightmode div.entry:nth-child(1) > div:nth-child(1) { margin-top: 10px; } .res-floater-visibleAfterScroll { top: 5px !important; z-index: 10000000000 !important; } .res-nightmode #sr-header-area, .res-nightmode #sr-more-link { background-color: rgb(68, 68, 68) !important; color: rgb(222, 222, 222) !important; } .res-nightmode #RESSubredditGroupDropdown a, .res-nightmode #RESSubredditGroupDropdown > .RESShortcutsEditButtons .res-icon, .res-nightmode .RESNotificationContent, .res-nightmode .RESNotificationFooter, .res-nightmode body .sr-bar a { color: rgb(222, 222, 222); } .res-nightmode #header, .res-nightmode .liveupdate-home .content { background-color: rgb(105, 105, 105); border-bottom: 1px solid rgb(160, 160, 160) !important; } .res-nightmode body .tabmenu li.selected a { color: orangered; background-color: white; border: 1px solid rgb(160, 160, 160); border-bottom: 1px solid white; border-bottom-color: rgb(34, 34, 34) !important; z-index: 100; } .res-nightmode div#RESShortcutsEditContainer, .res-nightmode div#RESShortcutsSort, .res-nightmode div#RESShortcutsRight, .res-nightmode div#RESShortcutsLeft, .res-nightmode div#RESShortcutsAdd, .res-nightmode div#RESShortcutsTrash { background: rgb(68, 68, 68) !important; color: rgb(140, 179, 217) !important; } .res-nightmode .pagename a { color: black; } .res-nightmode body.with-listing-chooser #header .pagename { position: inherit; } /* FRONTPAGE */ .res-nightmode .trending-subreddits { background-color: rgb(54, 54, 54) !important; margin-top: 0px !important; margin-left: 0px !important; margin-bottom: 4px !important; padding-bottom: 1px !important; } .res-nightmode body, .res-nightmode body .content, .res-nightmode .modal-body, .res-nightmode .side, .res-nightmode .icon-menu a, .res-nightmode .side .leavemoderator, .res-nightmode .side .leavecontributor-button, .res-nightmode .side .titlebox, .res-nightmode .side .spacer .titlebox .redditname, .res-nightmode .side .titlebox .flairtoggle, .res-nightmode .side .usertext-body .md ol, .res-nightmode .side .usertext-body .md ol ol, .res-nightmode .side .usertext-body .md ol ol li, .res-nightmode .modactionlisting table *, .res-nightmode .side .recommend-box .rec-item, .res-nightmode .side .md ul { background-color: rgb(34, 34, 34) !important; } .res-nightmode .titlebox form.toggle, .leavemoderator { background: rgb(34, 34, 34) none no-repeat scroll center left !important; } .res-nightmode .side .spacer { margin: 7px 0 12px 5px !important; } .res-nightmode .content { margin-left: 0px !important; margin-top: 0px !important; } .res-nightmode body.with-listing-chooser.listing-chooser-collapsed>.content { margin-left: 0px !important; } .res-nightmode body.with-listing-chooser.listing-chooser-collapsed .listing-chooser { padding-right: 0px !important; } .res-nightmode body.with-listing-chooser.listing-chooser-collapsed .listing-chooser .grippy { width: 0px !important; } .res-nightmode .content .spacer { margin-bottom: 0px !important; } .res-nightmode .NERPageMarker { background-color: rgb(24, 24, 24); margin: 0px !important; } .res-nightmode .thing.odd.link { padding: 7px !important; margin: 0; background-color: rgb(34, 34, 34); } .res-nightmode .thing.even.link { background: rgb(24, 24, 24); padding: 7px !important; margin: 0; } .res-nightmode .midcol .score, .res-nightmode .moduleButton:not(.enabled) { color: #c6c6c6 !important; } .res-nightmode .rank .star, .res-nightmode .link .score.likes, .res-nightmode .linkcompressed .score.likes { color: rgb(255, 69, 0) !important; } .res-nightmode .rank .star, .res-nightmode .link .score.dislikes, .res-nightmode .linkcompressed .score.dislikes { color: rgb(140, 179, 217) !important; } .res-nightmode .content { border-color: rgb(17, 17, 17); } .res-nightmode .wiki-page .wiki-page-content .md.wiki > .toc ul, .res-nightmode .tabmenu li a, .res-nightmode .tabmenu li.selected a { background-color: rgb(34, 34, 34) !important; } .res-nightmode .link .rank { color: #c6c6c6 !important; } .res-nightmode .domain a { color: rgb(173, 216, 230) !important; } .res-nightmode .subreddit { color: rgba(20, 150, 220, 0.8) !important; } .res-nightmode .author { color: rgba(20, 150, 220, 0.8) !important; } .res-nightmode .live-timestamp { color: #B3B375 !important; } .res-nightmode .RES-keyNav-activeElement > .tagline, .res-nightmode .RES-keyNav-activeElement .md-container > .md, .res-nightmode .RES-keyNav-activeElement .md-container > .md p { color: rgb(187, 187, 187) !important; } .res-nightmode .flair, .res-nightmode .linkflairlabel { background-color: rgb(187, 187, 187); color: rgb(0, 0, 0); padding: 1px; } .res-nightmode:not(.res-nightMode-coloredLinks) .thing:not(.stickied) .title:visited, .res-nightmode:not(.res-nightMode-coloredLinks) .thing.visited:not(.stickied) .title, .res-nightmode:not(.res-nightMode-coloredLinks).combined-search-page .search-result a:visited, .res-nightmode:not(.res-nightMode-coloredLinks).combined-search-page .search-result a:visited>mark { color: rgb(120, 120, 120); } .res-nightmode .md, .res-nightmode .content .sitetable .thing .md,.res-nightmode .RES-keyNav-activeElement .md-container > .mdp { color: rgb(222, 222, 222) !important; } .res-nightmode .combined-search-page .search-result a { color: rgb(222, 222, 222); } .res-nightmode .entry .buttons li a { color: rgb(150, 150, 150) !important; } .res-nightmode #RESSubredditGroupDropdown, #RESSubredditGroupDropdown > .RESShortcutsEditButtons { background-color: rgb(68, 68, 68) !important; border-color: rgb(128, 128, 128) !important; } .res-nightmode .spoiler-stamp { color: #c76700 !important; } .res-nightmode .entry.res-selected, .res-nightmode .entry.res-selected .md-container { background-color: rgba(0, 0, 0, 0)!important; } /* BUTTONS */ .res-nightmode .thing .expando-button, .res-nightmode .thing .expando-button:hover, .res-nightmode .expando-button, .res-nightmode .expando-button:hover { background-image: url("https://s3.amazonaws.com/a.thumbs.redditmedia.com/PkckcN8_3ijRUVP-GUQ6E-c8Ash_jQ3kCrEAoqKjSC4.png") !important; transform: scale(1); -webkit-filter: grayscale(0%) invert(0%); background-color: transparent; } .res-nightmode .expando-button.video-muted.collapsed { background-position: 0px -384px !important; } .res-nightmode .expando-button.video-muted.collapsed:hover { background-position: 0px -408px !important; } .res-nightmode .expando-button.video-muted.expanded { background-position: 0px -432px !important; } .res-nightmode .expando-button.video-muted.expanded:hover { background-position: 0px -456px !important; } .res-nightmode .expando-button.selftext.collapsed { background-position: 0px -96px !important; } .res-nightmode .expando-button.selftext.collapsed:hover { background-position: 0px -120px !important; } .res-nightmode .expando-button.selftext.expanded { background-position: 0px -144px !important; } .res-nightmode .expando-button.selftext.expanded:hover { background-position: 0px -168px !important; } .res-nightmode .expando-button.image.gallery.collapsed { background-position: 0px -288px !important; } .res-nightmode .expando-button.image.gallery.collapsed:hover { background-position: 0px -312px !important; } .res-nightmode .expando-button.image.gallery.expanded { background-position: 0px -336px !important; } .res-nightmode .expando-button.image.gallery.expanded:hover { background-position: 0px -360px !important; } .res-nightmode .expando-button.video.collapsed { background-position: 0px -192px !important; } .res-nightmode .expando-button.video.collapsed:hover { background-position: 0px -216px !important; } .res-nightmode .expando-button.video.expanded { background-position: 0px -240px !important; } .res-nightmode .expando-button.video.expanded:hover { background-position: 0px -264px !important; } .res-nightmode .expando-button.collapsed.crosspost { background-position: 0px -96px !important; } .res-nightmode .expando-button.collapsed.crosspost:hover { background-position: 0px -120px !important; } .res-nightmode .expando-button.expanded.crosspost { background-position: 0px -144px !important; } .res-nightmode .expando-button.expanded.crosspost:hover { background-position: 0px -168px !important; } .res-nightmode .expando-button.image.collapsed { background-position: 0px 0px !important; } .res-nightmode .expando-button.image.collapsed:hover { background-position: 0px -24px !important; } .res-nightmode .expando-button.image.expanded { background-position: 0px -48px !important; } .res-nightmode .expando-button.image.expanded:hover { background-position: 0px -72px !important; } /* COMMENTS */ .res-nightmode .res-commentBoxes .comment { border-left-width: 0px !important; border-right-width: 0px !important; border-top-width: 0px !important; border-bottom-width: 0px !important; } .res-nightmode .linkflairlabel, .res-nightmode .flair { padding-top: 0px !important; padding-left: 2px !important; padding-right: 2px !important; } .res-nightmode.res-commentBoxes .comment, .res-nightmode.res-commentBoxes .comment .comment .comment, .res-nightmode.res-commentBoxes .comment .comment .comment .comment .comment, .res-nightmode.res-commentBoxes .comment .comment .comment .comment .comment .comment .comment, .res-nightmode.res-commentBoxes .comment .comment .comment .comment .comment .comment .comment .comment .comment { background-color: rgb(24, 24, 24) !important; } .res-nightmode.res-commentBoxes body .comment .comment, .res-nightmode.res-commentBoxes body .comment .comment .comment .comment, .res-nightmode.res-commentBoxes body .comment .comment .comment .comment .comment .comment, .res-nightmode.res-commentBoxes body .comment .comment .comment .comment .comment .comment .comment .comment, .res-nightmode.res-commentBoxes body .comment .comment .comment .comment .comment .comment .comment .comment .comment .comment { background-color: rgb(34, 34, 34) !important; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } function toggleSubmitUnderlay(enabled) { GM_setValue(config.enableSubmitUnderlay, enabled); const styleId = styleIds.submitUnderlay; if (enabled) { GM_addStyle(` .submit-link-underlay { margin-top: 5px; padding: 5px; background-color: transparent; display: flex; align-items: center; font-family: verdana, sans-serif; font-size: 11px; color: dimgray; } .submit-link-underlay img { max-width: 40px; max-height: 40px; margin-right: 5px; } .submit-link-underlay p { margin: 0; } `, { id: styleId }); let underlayAdded = false; function addUnderlay() { const submitLink = document.querySelector('.submit-link'); if (submitLink && !underlayAdded) { const underlay = document.createElement('div'); underlay.className = 'submit-link-underlay'; const image = document.createElement('img'); image.src = 'https://files.catbox.moe/4zv032.png'; const textContainer = document.createElement('div'); textContainer.innerHTML = `<p>to anything interesting: news article, blog entry, video, picture...</p>`; underlay.appendChild(image); underlay.appendChild(textContainer); submitLink.parentNode.insertBefore(underlay, submitLink.nextSibling); underlayAdded = true; } } addUnderlay(); const targetNode = document.body; const config = { childList: true, subtree: true }; const observer = new MutationObserver(function (mutationsList) { for (const mutation of mutationsList) { if (mutation.addedNodes.length && !underlayAdded) { addUnderlay(); } } }); observer.observe(targetNode, config); } else { document.getElementById(styleId)?.remove(); const underlay = document.querySelector('.submit-link-underlay'); if (underlay) { underlay.remove(); } } } function toggleClassicResBorderHighlight(enabled) { GM_setValue(config.classicResBorderHighlight, enabled); const styleId = styleIds.classicResBorderHighlight; if (enabled) { GM_addStyle(` .entry.res-selected { border: dimgray 2px dotted; } `, { id: styleId }); } else { document.getElementById(styleId)?.remove(); } } const headerArea = document.getElementById('sr-header-area'); if (headerArea) { const betaOptin = headerArea.querySelector('.redesign-beta-optin'); const premiumBanner = headerArea.querySelector('.premium-banner-outer'); if (betaOptin) { betaOptin.remove(); } if (premiumBanner) { premiumBanner.remove(); } } const style = document.createElement('style'); style.textContent = ` .premium-banner { display: none !important; } `; document.head.appendChild(style); window.addEventListener('load', () => { toggleHideMultibar(GM_getValue(config.hideMultibar)); toggleHideBell(GM_getValue(config.hideBell)); toggleHideChat(GM_getValue(config.hideChat)); toggleAddUserPrefix(GM_getValue(config.addUserPrefix)); toggleHideArchivedArrows(GM_getValue(config.hideArchivedArrows)); toggleOldCommentFont(GM_getValue(config.oldCommentFont)); toggleFullUserScores(GM_getValue(config.fullUserScores)); toggleOldRedditIcons(GM_getValue(config.oldRedditIcons)); toggleExpandoButtons(GM_getValue(config.expandoButtons)); toggleClassicRESNight(GM_getValue(config.classicRESNight)); toggleSubmitUnderlay(GM_getValue(config.enableSubmitUnderlay)); toggleClassicResBorderHighlight(GM_getValue(config.classicResBorderHighlight)); classicFlair(GM_getValue(config.classicFlair)); // Call classicFlair on load }); if (window.location.hostname === 'old.reddit.com' || window.location.hostname === 'www.reddit.com') { initializeViewCounter(); initializeVoteEstimator(); } })();