您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Makes citing threads convenient and useful!
// ==UserScript== // @name HF Thread Citing // @author Emylbus // @namespace sublyme.net // @description Makes citing threads convenient and useful! // @include *.hackforums.net/showthread.php* // @exclude *.hackforums.net/showthread.php*&* // @version 1 // @grant none // ==/UserScript== function getThreadTitle(){ // Grab the title from the navigation menu. var navArray = document.getElementsByClassName('navigation')[0].innerHTML.split('\n'); for(i = 0; i < navArray.length; i++){ // The open page is given an "active" class, coupled with my @include I can know that this will give me the thread name. if(navArray[i].indexOf('class="active"') != -1) { // Screw regex, yay ugly string splitting! is the character between thread tags and their title. var threadTitle = navArray[i].split('class="active">')[1].split('</span>')[0].replace(' ',' '); var threadString = "[url="+window.location+"][b]"+threadTitle+"[/b][/url]"; return threadString; } } return "ERROR: Could not determine the thread name! :("; } function getThreadOP(){ // Grab the user name and profile link from the first post. Coupled with my @exclude I know that this will only get the first post on the first page, hence OP. var authorArray = document.getElementsByClassName("post_author")[0].getElementsByClassName("largetext")[0]; var authorProfile = authorArray.getElementsByTagName("a")[0]; // For some reason trying to parse a staff member's name, I would constantly get fucked up by this strong tag. Don't need it for my purposes anyway. var authorName = authorProfile.innerHTML.replace("<strong>",""); // Again, screw regex! authorName = authorName.replace(">","<").split("<"); // Some tricksy stuff to grab the name from the middle of tags. authorName = authorName[Math.floor(authorName.length/2)]; var authorString = "[url="+authorProfile+"]"+authorName+"[/url]"; return authorString; } function generateCitation(){ var citation = getThreadTitle()+" by "+getThreadOP(); window.prompt("Press Ctrl+C to copy thread citation!",citation); } function main(){ // This took me forever to figure out, turns out userscripts aren't directly injected into the site code so you need to use an event listener. document.getElementsByClassName('navigation')[0].innerHTML = document.getElementsByClassName('navigation')[0].innerHTML + '<small><a title="Cite this thread!" href="javascript:void(0);" id="citer">[cite]</a></small>'; var elementLink = document.getElementById('citer'); elementLink.addEventListener("click", generateCitation, true); } main(); // Dunno if I should be putting javascript in a main() function, but that's how I grew up with other languages so :P
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址