您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add keyboard shortcuts to open focusing link of GitHub Notifications. 1) v to open link in new tab. 2) Shift+v to open links from same repository in new tabs.
// ==UserScript== // @name Open notification link to new tab by keyboard for GitHub // @namespace http://kyanny.me/ // @version 1.0.0 // @description Add keyboard shortcuts to open focusing link of GitHub Notifications. 1) v to open link in new tab. 2) Shift+v to open links from same repository in new tabs. // @author Kensuke Nagae // @match https://github.com/notifications // @match https://github.com/notifications/participating // @match https://github.com/*/*/notifications* // @grant none // ==/UserScript== /* For Firefox, browser.tabs.loadDivertedInBackground to true is useful. See https://stackoverflow.com/a/1306963/374851 */ (function() { 'use strict'; var logger = { info: function(msg) { console.log(msg); }, debug: function(msg) { // console.debug(msg); }, }; var findTarget = function(item) { logger.debug('find target'); return item.querySelector('.js-notification-target'); }; var openLink = function(target) { var link = target.href; logger.info('opening ' + link); window.open(link, '_blank'); }; var markAsRead = function(item) { logger.debug('mark as read'); item.setAttribute('class', item.getAttribute('class') + ' read'); }; document.addEventListener('keyup', function(ev) { var key = ev.key.toLowerCase(); var focusingItem = document.querySelector('.navigation-focus'); if (key === 'v' && !!focusingItem) { if (ev.shiftKey === true) { // Shift key is pressed var siblings = focusingItem.parentNode.querySelectorAll('.js-notification'); [].forEach.call(siblings, function(sibling) { var target = findTarget(sibling); openLink(target); markAsRead(sibling); }); } else { var target = findTarget(focusingItem); openLink(target); markAsRead(focusingItem); } } }); })();