NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name GitHub Title Notification // @version 1.0.7 // @description A userscript that changes the document title if there are unread messages // @license MIT // @author Rob Garrison // @namespace https://github.com/Mottie // @match https://github.com/* // @run-at document-idle // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // @icon https://github.githubassets.com/pinned-octocat.svg // @updateURL https://raw.githubusercontent.com/Mottie/Github-userscripts/master/github-title-notification.user.js // @downloadURL https://raw.githubusercontent.com/Mottie/Github-userscripts/master/github-title-notification.user.js // @supportURL https://github.com/Mottie/GitHub-userscripts/issues // ==/UserScript== (() => { "use strict"; let timer, // indicator added to document title (it will be wrapped in parentheses) indicator = GM_getValue("indicator", "♥"), // check every 30 seconds interval = GM_getValue("interval", 30); function check() { let title = document.title, mail = document.querySelector(".mail-status"), hasUnread = mail ? !mail.hidden : false; // if (!/^\(\d+\)/.test(title)) { title = title.replace(/^(\([^)]+\)\s)*/g, ""); } document.title = hasUnread ? "(" + indicator + ") " + title : title; } function setTimer() { clearInterval(timer); if (document.querySelector(".mail-status")) { timer = setInterval(() => { check(); }, interval * 1000); check(); } } // Add GM options GM_registerMenuCommand("Set GitHub Title Notification Indicator", () => { const val = prompt("Indicator Value (it will be wrapped in parentheses)?", indicator); if (val !== null) { GM_setValue("indicator", val); check(); } }); GM_registerMenuCommand("Set GitHub Title Notification Interval", () => { const val = prompt("Interval Value (in seconds)?", interval); if (val !== null) { GM_setValue("interval", val); setTimer(); } }); setTimer(); })();