NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Thread Navigating by Arrow keys // @namespace https://greasyfork.org/scripts/6849-thread-navigating-by-arrow-keys // @description Use ← or → and Ctrl to navigate to previous, next, first or last page // @author theheroofvn // @include /^.*(thread|forum|diendan).*$/ // @include http://www.vn-zoom.com/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js // @grant none // @version 5.9 // ==/UserScript== if (frameElement) return; this.$ = this.jQuery = jQuery.noConflict(true); var prev, next, first, last, up, up_sub = '[itemtype="http://data-vocabulary.org/Breadcrumb"] a'; var site_info = [ { host: "www.webtretho.com", prev: "a.arrowPrePage", next: "a.arrowNextPage", first: "a.arrowFstPage", last: "a.arrowLstPage" }, { host: "forum.bkav.com.vn", prev: "a.js-pagenav-prev-button[href]:not([href=''])", next: "a.js-pagenav-next-button[href]:not([href=''])", first: "a[data-page='1']", last: "a.js-pagenav-button[href]:not([href='']):nth-last-child(2)", up: "#breadcrumbs a.crumb-link" } ]; function custom_site(list) { if (list.length === 0) return 0; for (var i = 0; i < list.length; i++) { if (location.hostname == list[i].host) { prev = list[i].prev; next = list[i].next; first = list[i].first; last = list[i].last; up = list[i].up; return 1; } } return 0; } function checkScriptExist(script) { return $('script[src*="' + script + '"]').length > 0 ? true : false; } function detect_forum() { var result = ""; if (checkScriptExist("vbulletin")) result = "vbb"; else if (checkScriptExist("xenforo")) result = "xenforo"; else if (checkScriptExist("general.js")) result = "mybb"; else if (checkScriptExist("forum_fn.js")) result = "phpbb"; return result; } var detect = detect_forum(); if (custom_site(site_info) === 0) { if (detect == "vbb") { prev = 'a[rel="prev"]'; next = 'a[rel="next"]'; first = 'a[rel="start"]'; last = 'a[title^="Last"], a[title*="uối"]'; up = "span.navbar a, li.navbit a"; } else if (detect == "xenforo") { prev = ".PageNav a.text:first-child"; next = ".PageNav a.text:last-child"; last = ".PageNav nav > a:nth-last-child(2)"; first = 'a[rel="start"]'; up = "a.crumb"; } else if (detect == "mybb") { prev = "a.pagination_previous"; next = "a.pagination_next"; first = "a.pagination_first"; last = "a.pagination_last"; up = ".navigation > a"; } else if (detect == "phpbb") { prev = ".display-options a.left-box.left"; next = ".display-options a.right-box.right"; first = ".pagination > span > a:first-child"; last = ".pagination > span > a:last-child"; up = ".navlinks > .icon-home a"; } else return; } var nav = { prev: $(prev)[0], next: $(next)[0], first: $(first)[0], last: $(last)[0], up: function() { return $(up).length > 0 ? $(up).last()[0] : $(up_sub).last()[0]; } }; var allowed = true; $(window).keydown(function(e) { if (!allowed) return; allowed = false; var key = e.keyCode, action = null; if (e.ctrlKey) { allowed = true; if (key == 39) action = "last"; else if (key == 37) action = "first"; else if (key == 8) action = "up"; } else if (key == 39) action = "next"; else if (key == 37) action = "prev"; else return; if (!action || typeof nav[action] === "undefined" || e.target.tagName == "INPUT" || e.target.tagName == "TEXTAREA") return; var link = (typeof nav[action] === "function") ? nav[action]() : nav[action]; window.location = link; }).keyup(function(e) { allowed = true; });