您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
reddit themes for the common folk
当前为
- // ==UserScript==
- // @name reddit styles
- // @namespace http://nucular.github.io
- // @version 0.6.1
- // @description reddit themes for the common folk
- // @copyright 2015, nucular
- // @license MIT License
- // @include http://www.reddit.com/*
- // @include https://www.reddit.com/*
- // @run-at document-start
- // @grant GM_getValue
- // @grant GM_setValue
- // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
- // ==/UserScript==
- var featured = [
- "NautClassic",
- "serene",
- "carbon",
- "edurne",
- "mindashq"
- ];
- var activated = GM_getValue("activated", false);
- var subreddit = GM_getValue("subreddit", "");
- var excluded = GM_getValue("excluded", "").split(",");
- var otherpages = GM_getValue("otherpages", true);
- var dontoverride = GM_getValue("dontoverride", false);
- function setActivated(a) {
- activated = a;
- GM_setValue("activated", a);
- }
- function setOtherPages(a) {
- otherpages = a;
- GM_setValue("otherpages", a);
- }
- function setDontOverride(a) {
- dontoverride = a;
- GM_setValue("dontoverride", a);
- }
- function setSubreddit(s) {
- var sane = s.replace(/\/r\/|[^\w]/g, "");
- subreddit = sane;
- if ($("#styles_subreddit").length > 0)
- $("#styles_subreddit").val(sane);
- GM_setValue("subreddit", sane);
- }
- function setExcluded(e) {
- var split = e.split(",");
- var sane = [];
- for (var i = 0; i < split.length; i++) {
- var v = split[i].replace(/\/r\/|[^\w*?+]/g, "");
- if (v)
- sane.push(v);
- }
- excluded = sane;
- sane = sane.join(",");
- if ($("#styles_excluded").length > 0)
- $("#styles_excluded").val(sane);
- GM_setValue("excluded", sane);
- }
- function loadStyle() {
- if (subreddit == "") {
- return;
- }
- // jQuery may not be loaded yet here
- var links = document.getElementsByTagName("link");
- var href = "https://www.reddit.com/r/" + subreddit + "/stylesheet/";
- var done = false;
- for (var i = 0; i < links.length; i++) {
- if (links[i].title == "applied_subreddit_stylesheet") {
- if (links[i].href != href)
- links[i].href = href;
- done = true;
- }
- }
- if (!done) {
- // Assume we're on another page
- var link = document.createElement("link");
- link.title = "applied_subreddit_stylesheet";
- link.rel = "stylesheet";
- link.href = href;
- document.head.appendChild(link);
- }
- }
- function loadPrefs() {
- document.addEventListener("DOMContentLoaded", function() {
- $("<tr><th>reddit styles</th><td class='prefright'>"
- + "<input name='styles_activated' id='styles_activated' type='checkbox'>"
- + "<label class='' for='styles_activated'>activate <a href='https://greasyfork.org/en/scripts/9451-reddit-styles'>reddit styles</a></label> "
- + "<span class='details'>use the custom theme of any subreddit everywhere</span>"
- + "<br>"
- + "use theme from /r/<input name='styles_subreddit' id='styles_subreddit' type='text' style='width: 150px'> "
- + "<span class='details' id='styles_featured'>e.g. </span>"
- + "<br>"
- + "exclude subreddits <input name='styles_excluded' id='styles_excluded' type='text' style='width: 150px'> "
- + "<span class='details'>separated by commas, use * and ? as wildcards</span>"
- + "<br>"
- + "<input name='styles_otherpages' id='styles_otherpages' type='checkbox'>"
- + "<label class='' for='styles_otherpages'>style other pages too (if available)</label> "
- + "<span class='details'>e.g the front, subreddits, compose/messages and explore pages</span>"
- + "<br>"
- + "<input name='styles_dontoverride' id='styles_dontoverride' type='checkbox'>"
- + "<label class='' for='styles_dontoverride'>don't override if a subreddit already has a custom theme</label> "
- + "<span class='details'>this will delay the loading of your custom stylesheet though</span>"
- + "</tr></td>").prependTo(".content.preftable > tbody");
- for (var i = 0; i < featured.length; i++) {
- $("<a></a>")
- .attr("href", "https://www.reddit.com/r/" + featured[i])
- .text(featured[i])
- .appendTo("#styles_featured")
- .on("click", function(e) {
- e.preventDefault();
- setSubreddit($(this).text());
- });
- if (i < featured.length-1)
- $("<span>,</span>").appendTo("#styles_featured");
- }
- $("#styles_activated")
- .on("change", function(e) {
- setActivated(this.checked);
- })[0].checked = activated;
- $("#styles_otherpages")
- .on("change", function(e) {
- setOtherPages(this.checked);
- })[0].checked = otherpages;
- $("#styles_dontoverride")
- .on("change", function(e) {
- setDontOverride(this.checked);
- })[0].checked = dontoverride;
- $("#styles_subreddit")
- .val(subreddit)
- .on("change", function(e) {
- setSubreddit($(this).val());
- });
- $("#styles_excluded")
- .val(excluded.join(","))
- .on("change", function(e) {
- setExcluded($(this).val());
- });
- });
- }
- var page = window.location.pathname.match(/^(\/\w+)/);
- if (!page) page = "/";
- else page = page[1];
- if (activated) {
- // Subreddits
- if (page == "/r") {
- var sub = window.location.pathname.match(/^\/r\/([\w+]+)/)[1];
- // First check if the sub is excluded
- for (var i = 0; i < excluded.length; i++) {
- if (sub.match(new RegExp("^" + excluded[i].replace(/([\*\?])/g, ".$1") + "$")))
- return;
- }
- // Gotta poke the server about this, sadly
- if (dontoverride) {
- var http = new XMLHttpRequest();
- http.open("HEAD", "https://www.reddit.com/r/" + sub + "/stylesheet/");
- http.onreadystatechange = function() {
- if (this.readyState == this.HEADERS_RECEIVED) {
- if (this.status == 403 || this.status == 404) { // 403 = banned/private, 404 = no style
- loadStyle();
- setInterval(loadStyle, 300);
- }
- }
- };
- http.send();
- } else {
- loadStyle();
- setInterval(loadStyle, 300);
- }
- }
- // Other areas
- else if (otherpages && page != "/prefs") { //(page == "/" || page == "/compose" || page == "/subreddits" || page == "/messages" || page == "/explore")) {
- loadStyle();
- setInterval(loadStyle, 300);
- }
- }
- // Preferences
- if (page == "/prefs") {
- loadPrefs();
- }