Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save zatokaa/20880149937178a346ac0a5caafbddc9 to your computer and use it in GitHub Desktop.
Save zatokaa/20880149937178a346ac0a5caafbddc9 to your computer and use it in GitHub Desktop.
Adds buttons to Gmail to quickly toggle the unread filter on the current view. Appears left of the search text input.
// ==UserScript==
// @name Filter Gmail to unread
// @namespace http://tampermonkey.net/
// @version 1.1.1
// @description Adds a button to Gmail to quickly toggle the unread filter on the current view.
// @author jackcarey
// @match https://mail.google.com/mail/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant none
// @run-at document-idle
// @homepageURL https://gist.github.com/jackcarey/b3f65e67b1fe4544096c02d05cc065c6
// @downloadURL https://gist.github.com/jackcarey/b3f65e67b1fe4544096c02d05cc065c6/raw/filter-gmail-unread.user.js
// @updateURL https://gist.github.com/jackcarey/b3f65e67b1fe4544096c02d05cc065c6/raw/filter-gmail-unread.user.js
// ==/UserScript==
function waitForElement(selector) {
return new Promise((resolve) => {
if (document.querySelector(selector)) {
return resolve(document.querySelector(selector));
}
const observer = new MutationObserver(() => {
if (document.querySelector(selector)) {
resolve(document.querySelector(selector));
observer.disconnect();
}
});
observer.observe(document.querySelector("body"), {
childList: true,
subtree: true,
});
});
}
waitForElement(`button[aria-label="Search mail"]`).then(function() {
'use strict';
const searchInputEl = document.querySelector(`*[name="q"]`);
const searchBtnEl = document.querySelector(`button[aria-label="Search mail"]`);
const unreadBtn = document.createElement("button");
const archivedBtn = document.createElement("button");
const btnSize = "1.5em";
const enterEvent = new KeyboardEvent('keydown', {
key: 'Enter',
code: 'Enter',
which: 13,
keyCode: 13,
});
const clickToggler = (querySegment)=>{
return (evt)=>{
evt.preventDefault();
if(!searchInputEl?.value?.includes(querySegment)){
searchInputEl.value+=` ${querySegment}`;
}else{
searchInputEl.value = searchInputEl.value.replace(querySegment,"").trim();
}
while(searchInputEl.value.includes(" ")){
searchInputEl.value = searchInputEl.value.replace(" "," ");
}
searchInputEl.value = searchInputEl.value.replace(new RegExp("\s{2,}","gi")," ");
searchInputEl.value = searchInputEl.value.trim();
searchInputEl.dispatchEvent(enterEvent);
};
};
//Unread button
unreadBtn.style.width=btnSize;
unreadBtn.style.height=btnSize;
unreadBtn.position="relative";
unreadBtn.style.top= "1em";
unreadBtn.style.left= "-2.5em";
unreadBtn.style.backgroundSize = "contain";
unreadBtn.title="Toggle unread messages in current view";
unreadBtn.style.backgroundImage="url(https://ssl.gstatic.com/ui/v1/icons/mail/gm3/1x/stacked_email_baseline_nv700_20dp.png)";
unreadBtn.className = searchBtnEl.className;
unreadBtn.addEventListener("click",clickToggler("-is:read"));
///Archived button
archivedBtn.style.width=btnSize;
archivedBtn.style.height=btnSize;
archivedBtn.position="relative";
archivedBtn.style.top= "1em";
archivedBtn.style.left= "-5em";
archivedBtn.style.backgroundSize = "contain";
archivedBtn.title="Toggle archived messages in current view";
archivedBtn.style.backgroundImage="url(https://ssl.gstatic.com/ui/v1/icons/mail/gm3/1x/inbox_baseline_nv700_20dp.png)";
archivedBtn.className = searchBtnEl.className;
archivedBtn.addEventListener("click",clickToggler("in:inbox"));
//append buttons
searchBtnEl.after(unreadBtn);
searchBtnEl.after(archivedBtn);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment