返回首頁 

Greasy Fork is available in English.

Old new reddit redirect

Gets rid of Reddit's new December 2023 layout.

// ==UserScript==// @name Old new reddit redirect// @namespace https://reddit.com/// @description Gets rid of Reddit's new December 2023 layout.// @version 1.2// @author nitro2k01// @license MIT// @match https://reddit.com/*// @match https://www.reddit.com/*// @match https://new.reddit.com/*// @exclude https://www.reddit.com/account/sso/*// @grant none// ==/UserScript==(function() {var reddit_regex = /^https:\/\/(www\.)?reddit.com\/(?!media)/;var current_url = document.location.href;console.log("Old new reddit redirect running on: " + current_url);function install_event_listener(body_element){body_element.addEventListener("mouseover",(function(e){//console.log(e.srcElement);var el = e.srcElement;//console.log("BONK!");for (var i=0; i<5; i++){//console.log(i);//console.log(el);if(el.tagName=='A' && typeof el.href !== 'undefined' && el.href){el.href=el.href.replace(reddit_regex,"http://new.reddit.com/");return;}if(el.parentNode==null){break;}el=el.parentNode;}// Needed for patching new new Reddit. (Media page.) Sigh...el=e.srcElement;if(el.tagName=="LEFT-NAV-COMMUNITY-ITEM"){//console.log(el);//console.log(el.shadowRoot.children[0].children[0]);//var sub_el=el.shadowRoot.getElementsByTagName("A")[0]; // NOPE!var sub_el=el.shadowRoot.children[0].children[0];sub_el.href=sub_el.href.replace(reddit_regex,"http://new.reddit.com/");}}));}if(null != document.getElementById("login-button") ){// If we're not logged in, do nothing, in order to prevent infinite redirects.console.log("Skipping redirect because we're not logged in.");return;}if(reddit_regex.test(current_url)){// If we're on "new new" reddit, redirect to "old new" reddit. (Except /media/)var new_url = current_url.replace(reddit_regex,"http://new.reddit.com/");console.log("Redirecting now...");console.log("From: " + current_url);console.log("To: " + new_url);location.replace(new_url);}// Set up an event listener to rewrite all links on demand. This listens to mouseover events that bubble down to the body element, then patch the links as needed.// We need to do it this way because a one time replace wouldn't catch links generated in notifications.console.log("Installing event listener.");install_event_listener(document.body)var shadowroot_tag_names=["post-bottom-bar", "left-nav-communities-controller"];function install_event_listener_shadowroot(tag_name){// This is used purely for patching the links on the media page (which is always on new new Reddit.)// Some elements in the new new layout are localized inside a "shadow root" which is basically a separate DOM. This causes events to not bubble down to the parent DOM, so we need to patch these DOMs separately.// Wait for shadow root of the widget to be loaded, the install the event listener.// Since this is an edge case I'm not wasting a bunch of time to do this properly...var tries=30;function wait_for_shadow_root(){var probe_el = document.getElementsByTagName(tag_name);if(probe_el.length && probe_el[0].shadowRoot != null){console.log("Found shadow root. " + tag_name);install_event_listener(probe_el[0].shadowRoot);}else{if(--tries){console.log("Waiting for shadow root...");setTimeout(wait_for_shadow_root, 50);}else{console.log("Giving up... " + tag_name);}}}setTimeout(wait_for_shadow_root, 50);}install_event_listener_shadowroot("post-bottom-bar");// Patch items in the hamburger menu.document.getElementById("navbar-menu-button").addEventListener("click",function(){install_event_listener_shadowroot("left-nav-top-section");install_event_listener_shadowroot("reddit-recent-pages");install_event_listener_shadowroot("left-nav-communities-controller");});})();