NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Fix Gmail Email Search // @namespace https://github.com/gserafini/fix-gmail-email-search-userscript/ // @version 1.3.1 // @description Improved version of the old "Emails" quick search functionality in Gmail, one click to view all emails you've sent or received from any address // @author Gabriel Serafini // @license MIT // @donate If you like this, PayPal a little love to gserafini@gmail.com // @screenshot https://github.com/gserafini/fix-gmail-email-search-userscript/raw/master/fix-gmail-email-search-screenshot.png // @updateURL https://github.com/gserafini/fix-gmail-email-search-userscript/raw/master/fix_gmail_email_search.user.js // @match *://mail.google.com/* // @match *://contacts.google.com/widget/hovercard/* // @match *://gmail.com/* // @include *gmail.com/* // @include *mail.google.com/* // @include *contacts.google.com/widget/hovercard/* // @grant none // @require https://code.jquery.com/jquery-3.3.1.min.js // ==/UserScript== (function() { 'use strict'; $(function() { // Handler for .ready() called. $('body').prepend('<style>.email_search_icon {outline: none; ' + 'position: relative; z-index: 0; padding: 0 4px; margin: 0; top: 2px;} ' + '.email_search_icon svg {fill: #600;} .email_search_icon svg:hover {fill: #f00;} ' + '.email_search_icon {cursor: pointer;} </style>'); function get_email_search_icon_link(email_address) { var icon = '<span style=""' + 'class="email_search_icon" title="Click to search for all emails with ' + email_address + '" email="' + email_address + '">' + '<svg focusable="false" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg">' + '<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 ' + '4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span>'; return icon; } function insert_email_search_icon() { // This may change over time, so will need to update it periodically most likely $('.gD').not('.email_search_icon+.gD') .each( function (index) { console.log("Found email for possible searching: " + $(this).attr('email')); $(this) .before(get_email_search_icon_link($(this).attr('email'))) } ); // Find all emails in pop-up contact cards and also inside emails $('a[href^="mailto:"]').not('.email_search_icon+a[href^="mailto:"]') .each( function (index) { var email_address = $(this).attr('href').replace("mailto:",""); console.log("Found email for possible searching: " + email_address); $(this) .before(get_email_search_icon_link(email_address)); } ); } // Poll periodically for newly created divs setInterval(insert_email_search_icon, 300); $('body').on('click', '.email_search_icon', function() { event.stopPropagation(); if (window.self==window.top) { $('input[name="q"]').val($(this).attr('email')); $('button[aria-label="Search Mail"]').click(); console.log("Search icon clicked! Searching for " + $(this).attr('email') + "..."); } else { console.log("Search email for " + $(this).attr('email') + " link clicked in hovercard"); window.parent.postMessage("searchForEmail="+$(this).attr('email'),"*"); } }); if (window.self==window.top) { $(window).on("message onmessage", function(e) { var event = e.originalEvent; if (event.origin === "https://contacts.google.com" && event.data.indexOf("searchForEmail=") != -1) { console.log(event.data); var email_address = event.data; email_address = email_address.replace("searchForEmail=",""); console.log("Found email to search for: " + email_address); $('input[name="q"]').val(email_address); $('button[aria-label="Search Mail"]').click(); console.log("Search icon clicked in hovercard! Searching for " + email_address + "..."); } }); } }); })();