您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Something Awful Forums functions.
// ==UserScript== // @name SA Buttons // @namespace http://uberg.nu/ // @version 1.44 // @description Something Awful Forums functions. // @author Ubergnu // @match https://forums.somethingawful.com/* // @grant GM_setValue // @grant GM_getValue // ==/UserScript== // Some UI values/constants // var SPOILER_TEXT_COLOR = ""; // Override for spoiler text color. Set this if there's a custom CSS (like SA Dark Redesign) that messes things up. var BUTTON_TEXT_COLOR = "#444444"; var BUTTON_TEXT_COLOR_ACTIVE = "#DDDDDD"; var BUTTON_BACKGROUND = ""; var BUTTON_BACKGROUND_ACTIVE = "#888888"; var ELEM_VISIBLE = 1; var ELEM_HIDDEN = 0; var ELEM_DIMMED = 0.3; var MAX_BAN_MESSAGES = 3; var NO_BANS_IMAGE = "https://i.imgur.com/YQ5tnzB.png"; // Misc globals. var avatarState; var spoilerState; var imageState = false; var videoState = true; // Add Menu buttons. Comment out unwanted ones here. Or set the order. // $("#content #thread .profilelinks").append("<li class='liSAB btnStop'>Stop</li>"); $("#content #thread .profilelinks").append("<li class='liSAB btnFold'>Fold</li>"); $("#content #thread .profilelinks").append("<li class='liSAB btnFade'>Avs</li>"); $("#content #thread .profilelinks").append("<li class='liSAB btnCtrl'>Buts</li>"); $("#content #thread .profilelinks").append("<li class='liSAB btnSplr'>Splr</li>"); $("#content #thread .profilelinks").append("<li class='liSAB btnProb'>Prob</li>"); // Insert CSS into <head> of page. // function addCss() { // Count the number of buttons in use. var buttonCount = $(".postlinks").eq(0).find(".liSAB").length; // Drop shadow for popup. var boxShadow = "box-shadow: 8px 8px 25px 0px rgba(0,0,0,0.75) !important;"; var s = ""; s += ".btnClosePopup {"; s += "font-family: 'Roboto',sans-serif !important;"; s += "font-size: 12px !important;"; s += "border: none;"; s += "outline: 0;"; s += "background-color: #3b6d7d;"; s += "color: #EEEEEE;"; s += "border-radius: 9px !important;"; s += "width: 130px !important;"; s += "height: 30px !important; "; s += "margin-top: 5px;"; s += "float: right;"; s += "cursor: pointer;"; s += boxShadow; s += "}"; s += ".btnClosePopup:hover {"; s += "background: #82b7c7 !important;"; s += "color: #000000! important;"; s += "}"; s += ".SAB-dialog:focus"; s += "{"; s += "outline: none !important;"; s += "}"; s += ".msgContent {"; s += "font-family: 'Roboto',sans-serif;"; s += "font-size: 14px;"; s += "width: 508px;"; //412 s += "height: 258px;"; //154 s += "background-color: #EEEEEE;"; s += "margin: 0 auto;"; s += "padding: 5px;"; s += "overflow: auto;"; s += "border-radius: 5px !important;"; s += "}"; s += "#msgPopupContent::-webkit-scrollbar-track"; s += "{"; s += "-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);"; s += "border-radius: 10px !important;"; s += "background-color: #F5F5F5;"; s += "}"; s += "#msgPopupContent::-webkit-scrollbar"; s += "{"; s += "width: 12px;"; s += "background-color: #F5F5F5;"; s += "}"; s += ""; s += "#msgPopupContent::-webkit-scrollbar-thumb"; s += "{"; s += "border-radius: 10px;"; s += "-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);"; s += "background-color: #bbbcbd;"; s += "}"; //#msgPopupWindow s += ".msgPopup {"; s += "background-color: #3b6d7d;"; s += "border-radius: 10px !important;"; s += "box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75) !important;"; s += "padding-top: 10px;"; s += "display:none;"; s += boxShadow; s += "}"; //s += "#thread ul.profilelinks li:nth-last-of-type(-n+6) { "; // Use this if the buttons count screws up (comment out the row below). s += "#thread ul.profilelinks li:nth-last-of-type(-n+" + buttonCount + ") { "; s += "max-height: 15px !important; "; s += "padding: 0px 13px 10px 13px !important; "; s += "margin: 5px 0px 10px 0px; "; s += "line-height: 25px !important; "; s += "}"; s += ".SAButton {"; s += "border-radius: 11px !important;"; s += "position: relative;"; s += "font-size: 11px;"; s += "height: 22px !important;"; s += "padding: 2px;"; s += "margin: 0px 0 0px 0 !important;"; s += "cursor: pointer;"; s += "color: " + BUTTON_TEXT_COLOR + ";"; s += "}"; s += ".ui-widget-overlay.SAB-custom-overlay"; s += "{"; s += "background-color: black;"; s += "background-image: none;"; s += "opacity: 0.4;"; s += "z-index: 1040; "; s += "}"; s += ".SAB-draggable"; s += "{"; s += "border-top-left-radius: 20px !important;"; s += "border-bottom: none;"; s += "border-top-right-radius: 20px !important;"; s += "box-shadow: inset 0 0 27px #3b6d7d !important;"; s += "width: 96%;"; s += "margin-left: 9px;"; s += "cursor: move;"; s += "}"; // Inject CSS var head = document.getElementsByTagName('head')[0]; var newCss = document.createElement('style'); newCss.type = "text/css"; newCss.innerHTML = s; head.appendChild(newCss); // Get the current text color in use (it can change if a custom CSS is installed). Can be overridden by changing the SPOILER_TEXT_COLOR constant. if (SPOILER_TEXT_COLOR === "") { //var col = $(".postbody").eq(0).attr("color"); var elem = document.getElementsByClassName("postbody")[0]; var col = window.getComputedStyle(elem, null).getPropertyValue("color"); SPOILER_TEXT_COLOR = col; } } addCss(); // Functions that's probably not wanted by everyone. // // Remove special titles. $(".special_title").hide(); // Completly hide ignored users posts. $("a[title=\"DON'T DO IT!!\"]").parents().eq(3).hide(); // Menu buttons layout // var li = $(".postlinks .liSAB"); li.addClass("SAButton"); li.hover( function(){ $(this).css("color", BUTTON_TEXT_COLOR_ACTIVE); $(this).css("height", "20px !important;"); $(this).css("max-height", "20px !important;"); $(this).css("border-radius", "10px !important;"); $(this).animate({backgroundColor: BUTTON_BACKGROUND_ACTIVE}, 'fast', function(){ if (!$(this).is(":hover")) li.css("background-color", BUTTON_BACKGROUND); }); }, function() { li.css("background-color", BUTTON_BACKGROUND); li.css("color", BUTTON_TEXT_COLOR); }); // Init the spoiler texts with saved value. Keep it in global var. // spoilerState = GM_getValue("SAB_spoilers"); toggleSpoilerText(spoilerState); // Toggle play/pause for <video> with a click. // //$(".gfy_video").click(function(){ //$(".gifv_video, .gfy_video").click(function(){ //$(".gfy_video").click(function(){ // $(".gifv_video , .gfy_video").click(function(){ // var tag = $(this).attr("tag"); // alert("tag: " + tag); // if(typeof tag == "undefined") { // tag = "play"; // } // tag = tag === "pause" ? "play" : "pause"; // if (tag === "pause") // { // $(this).find("video")[0].pause(); // $(this).attr("tag", "pause"); // } else { // $(this).find("video")[0].play(); // $(this).attr("tag", "play"); // } // // if (videoState) { // // $(this).find("video")[0].pause(); // // } else { // // $(this).find("video")[0].play(); // // } // // videoState = !videoState; // }); // Shrink images in posts by double clicking them. Click to restore. // $(".postbody").find("img").dblclick(function(){ var tag = $(this).attr("tag"); //alert("img tag: " + tag); if(typeof tag == "undefined") tag = "max"; tag = tag == "min" ? "max" : "min"; if (tag == "min") { $(this).css("height", "20px"); $(this).css("width", "auto"); $(this).attr("tag", "min"); } else { $(this).css("height", ""); $(this).attr("tag", "max"); } }); // Prob button click. // $(".postlinks ul .btnProb").click(function(){ // Older Forums version, keep just in case. //var userID = $(this).parents().eq(2).find('td').eq(0).find('a').eq(1).attr('href'); //var parts = userID.split("="); //var linkAddress = "/banlist.php?userid=" + parts[2]; // Get userID and call showProbInfo() for that user. // var classes = $(this).parents().eq(3).find('tr').eq(0).find('td').eq(0).attr("class"); var userID = classes.replace(/[^0-9]/gi, ''); var linkAddress = "/banlist.php?userid=" + userID; showProbInfo(linkAddress); }); // Show popup with ban/probation reason. // function showProbInfo(address) { // Get the last MAX_BAN_MESSAGES number of entries from the Leper's Colony page. $.get(address, function (data) { $(".result").html(data); var infoText = ""; var rawText = ""; // Assemble the popup text. for(let i=0; i<MAX_BAN_MESSAGES; i++) { var text = ""; var infoRow = $('a[name="list"]', $(data)).nextAll().eq(0).children(":first").children('tr').eq(1+i).children('td'); //.eq(3); var time = $(infoRow).eq(1).text(); var infoField = $(infoRow).eq(3); if (typeof $(infoField).html() != "undefined") text = $(infoField).html(); rawText += text; infoText += "<i><font size='2'>" + time + "</font></i><br/>" + text; if (i<MAX_BAN_MESSAGES) infoText += "<br/><br/>"; } // No probations/bans was found. Show a special message. if (rawText.length === 0) { var img = "<center><img src='" + NO_BANS_IMAGE + "'/></center>"; infoText = "<i><font size='2'>This user is pure as the driven snow.</font></i><br/><br/>" + img; } // HTML for the popup. var win = "<div class='msgPopup' id='msgPopupWindow'>"; win += "<p class='msgContent' id='msgPopupContent'>"; //win += infoText; win += "</p></div>"; // Inject popup HTML into page. var html = $.parseHTML(win); $("#something_awful").append(html); // Open dialog window. $(html).dialog({ autoOpen: true, width: 550, height: 400, modal: true, resizable: true, open: function(event, ui) { // Clear all classes from jquery dialog. var main = $("div[aria-describedby='msgPopupWindow']"); $(main).removeClass(); $(main).addClass("SAB-dialog"); $(main).find("div").not(":eq(0)").removeClass(); $(main).find("button").removeClass(); // Custom title bar var titleBar = $(main).find("div").eq(0); $(titleBar).removeClass(); $(titleBar).addClass("ui-dialog-titlebar SAB-draggable"); // Add own classes and content $(".ui-dialog-titlebar-close", ui.dialog | ui).hide(); $(".msgContent").html(infoText); $("#msgPopupWindow").addClass('msgPopup'); $("#msgPopupContent").addClass('msgContent'); $(main).find("button").addClass('btnClosePopup'); $(main).find("button").eq(0).hide(); $('.ui-widget-overlay').addClass('SAB-custom-overlay'); }, buttons: [ { text: "Close", "class": 'btnClosePopup', click: function () { $(this).dialog("close"); $('.ui-widget-overlay').removeClass('SAB-custom-overlay'); $("#msgPopupWindow").remove(); // Remove the injected HTML when closing popup. } }, ], }); }); } // Stop avatar animations // $(".postlinks ul .btnStop").click(function(){ var avs = $(".title img"); for(i=0; i<avs.length; i++) setFirstFrame(avs[i], i); gmSetValue("SA_animations", false); }); // Toggle dim/hide/show all avatars // $(".postlinks ul .btnFade").click(function(){ if (avatarState == "on"){ $(".title img").animate({opacity: ELEM_DIMMED}); $(".title canvas").animate({opacity: ELEM_DIMMED}); gmSetValue("SA_avatars", "dim"); avatarState = "dim"; } else if(avatarState == "dim"){ $(".title img").animate({opacity: ELEM_HIDDEN}); $(".title canvas").animate({opacity: ELEM_HIDDEN}); gmSetValue("SA_avatars", "off"); avatarState = "off"; } else if(avatarState == "off"){ $(".title img").animate({opacity: ELEM_VISIBLE}); $(".title canvas").animate({opacity: ELEM_VISIBLE}); gmSetValue("SA_avatars", "on"); avatarState = "on"; } }); // Show/hide spoilers. // $(".postlinks ul .btnSplr").click(function() { toggleSpoilerText(!spoilerState); }); function toggleSpoilerText(state) { if (state) { $(".bbc-spoiler").css("background", "transparent"); $(".bbc-spoiler").css("color", SPOILER_TEXT_COLOR); gmSetValue("SAB_spoilers", true); spoilerState = true; } else { $(".bbc-spoiler").css("background", "black"); $(".bbc-spoiler").css("color", "black"); gmSetValue("SAB_spoilers", false); spoilerState = false; } } // Toggle visibility for report/quote buttons // $(".postlinks ul .btnCtrl").toggle( function(){ $(".postlinks .postbuttons").children().animate({opacity: ELEM_VISIBLE}); gmSetValue("SA_reportButtons", true); }, function(){ $(".postlinks .postbuttons").children().animate({opacity: ELEM_HIDDEN}); gmSetValue("SA_reportButtons", false); } ); // Hide/show posts // $(".postlinks ul .btnFold").click(function () { $(this).parents().eq(2).prev().find("dl[class='userinfo']").slideToggle(300); $(this).parents().eq(2).prev().children().last().slideToggle(300); //$(this).parents().eq(2).prev().children().first().children().first().children().slideToggle(500); }); // Stop avatar animations if set // if (!GM_getValue("SA_animations", true)) { var avs = $(".title img"); for(i=0; i<avs.length; i++) { setFirstFrame(avs[i]); //console.log(avs[i]); } } // Hide/show Report/Quote buttons depending on settings // if (GM_getValue("SA_reportButtons", false)) $(".postlinks .postbuttons").children().animate({opacity: ELEM_VISIBLE}); else $(".postlinks .postbuttons").children().animate({opacity: ELEM_HIDDEN}); // Hide/show avatars depending on settings // avatarState = GM_getValue("SA_avatars"); switch(avatarState) { case "on": $(".title img").animate({opacity: ELEM_VISIBLE}); $(".title canvas").animate({opacity: ELEM_VISIBLE}); GM_setValue("SA_avatars", "on"); break; case "off": $(".title img").animate({opacity: ELEM_HIDDEN}); $(".title canvas").animate({opacity: ELEM_HIDDEN}); GM_setValue("SA_avatars", "off"); break; case "dim": $(".title img").animate({opacity: ELEM_DIMMED}); $(".title canvas").animate({opacity: ELEM_DIMMED}); GM_setValue("SA_avatars", "dim"); break; default: $(".title img").animate({opacity: ELEM_VISIBLE}); $(".title canvas").animate({opacity: ELEM_VISIBLE}); GM_setValue("SA_avatars", "on"); break; } // Hide the whole user Title (avatar+text+tags) // $(".postlinks ul .btnText").click(function(){ //var userTitle = $(this).parent().parent().parent().parent().find(".userinfo .title"); var userTitle = $(this).parents().eq(3).find(".userinfo .title"); var opa; if (avatarState == "on"){ opa = ELEM_VISIBLE; } else if(avatarState == "dim"){ opa = ELEM_DIMMED; } else if(avatarState == "off"){ opa = ELEM_HIDDEN; } if (userTitle.css('opacity') == ELEM_HIDDEN) { userTitle.animate({ opacity: opa }); }else{ userTitle.animate({ opacity: ELEM_HIDDEN }); } }); // ------------------------------------------- // Misc stuff // ------------------------------------------- // Stop avatar animations // function setFirstFrame (img, idx) { var newCanvas = document.createElement("canvas"); newCanvas.height = img.height; newCanvas.width = img.width; newCanvas.id = "cnvAv"; newCanvas.getContext("2d").drawImage(img, 0, 0); img.parentNode.replaceChild(newCanvas, img); if (avatarState == "on") $(newCanvas).animate({opacity: ELEM_VISIBLE}); else if(avatarState == "dim") $(newCanvas).animate({opacity: ELEM_DIMMED}); else if(avatarState == "off") $(newCanvas).animate({opacity: ELEM_HIDDEN}); } // Workaround for getting/setting values from inside an event // function gmSetValue(key, val) { setTimeout(function() { GM_setValue(key, val); }, 0); } function gmGetValue(key, defaultval) { setTimeout(function() { avatarState = GM_getValue(key, defaultval); }, 0); return avatarState; }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址