您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds keyboard shortcuts for navigating forum pages on teamfortress.tv
当前为
// ==UserScript== // @name tftv keyboard shortcuts // @namespace Lense // @description Adds keyboard shortcuts for navigating forum pages on teamfortress.tv // @include http://teamfortress.tv/thread/* // @include http://www.teamfortress.tv/thread/* // @include https://teamfortress.tv/thread/* // @include https://www.teamfortress.tv/thread/* // @version 0.2 // @grant none // ==/UserScript== /* * Helper function to scroll to post by id */ function goto_post(id) { document.getElementById(id).scrollIntoView(); window.scrollBy(0,-40) } /* * Find the number of pages in the thread */ var lastPage = 1; var nodeList = document.querySelectorAll(".page-btn"); for(var i=0; i<nodeList.length; i++) { if(parseInt(nodeList[i].textContent) > lastPage) { lastPage = parseInt(nodeList[i].textContent); } } /* * Find the post number of the top post on the page */ var posts = document.querySelectorAll(".post"); var cur_post = 0; /* * Get and process keypresses */ document.onkeypress = function (e) { // Not entirely sure why this is useful, but it can't break anything that isn't already broken e = e || window.event; // Ignore keypresses in text boxes if(e.target.nodeName != "BODY") { // got keypress, but it's probably in a textbox, so ignore it return; } // Current page number var page = window.location.search == "" || parseInt(window.location.search.match("page=([0-9]*)")[1]); // and yes, I am proud of the logic in that statement. switch(e["key"]) { /* * Pages (left/right) */ case "d": if(page != lastPage) { page = (page+1).toString(); window.location.search = "?page=" + page; } break; case "a": if(page != 1) { page = (page-1).toString(); window.location.search = "?page=" + page; } break; case "D": if(page != lastPage) { window.location.search = "?page=" + lastPage.toString(); } break; case "A": if(page != 1) { window.location.search = "?page=1"; } break; /* * Posts (up/down) */ case "w": if(cur_post > 0) { cur_post--; } goto_post(posts[cur_post].id); break; case "s": if(cur_post < posts.length - 1) { cur_post++; } goto_post(posts[cur_post].id); break; case "W": cur_post = 0; goto_post(posts[cur_post].id); break; case "S": cur_post = posts.length - 1; goto_post(posts[cur_post].id); break; /* * Frags (+/-) */ case "q": $.ajax({ type: 'post', data: {}, url: '/post/frag/' + posts[cur_post].id.slice(8) + '/plus', }); break; case "e": $.ajax({ type: 'post', data: {}, url: '/post/frag/' + posts[cur_post].id.slice(8) + '/minus', }); break; }};