NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Google View Image
// @namespace http://GoogleViewImage.com/
// @version 0.3
// @description An updated version of laidbackTempo's "Bring back Google View Image!"
// @author laidbackTempo & VitorMM
// @include http*://www.google.*.*/*
// @include http*://google.*.*/*
// @include http*://www.google.*/*
// @include http*://google.*/*
// @license MIT
// @grant none
// ==/UserScript==
(function() {
'use strict';
function userLanguage() {
var url = new URL(window.location.href);
var lang = url.searchParams.get("hl");
if (lang !== null) return lang;
var html = document.getElementsByTagName('html')[0];
lang = html.getAttribute('lang');
if (lang !== null) return lang;
var hostComponents = url.host.split('.');
var tempLang = hostComponents[hostComponents.length-1];
if (tempLang === "br") return "pt-BR";
return "en-US";
}
function localiseSearchByImage(obj, user_language) {
var text = 'Search by image';
if (user_language === "pt-BR") text = 'Pesquisar por imagem';
obj.innerHTML = text;
}
function localiseViewImage(obj, user_language) {
var text = 'View Image';
if (user_language === "pt-BR") text = 'Visualizar imagem';
obj.innerHTML = text;
}
function addLinks(node) {
var user_language = userLanguage();
var viewImageButtonWidth = '150px';
var searchByImageButtonWidth = '150px';
var extClass = "tampermonkey_google_view_image_script_button";
if (node.nodeType === Node.ELEMENT_NODE) {
if ((node.classList.contains('irc_ris')) || (node.classList.contains('irc_mi') || (node.classList.contains('irc_tas')))) {
var object = node.closest('.irc_c');
// Retrive image links, and image url
var imageLinks = object.querySelector('.irc_but_r > tbody > tr');
// Retrive the image URL
var imageURL;
var imageArea = object.querySelector('.irc_t');
var thumbnail = imageArea.querySelector('img[name="' + object.dataset.itemId + '"]');
if (thumbnail) {
var meta = thumbnail.closest('.rg_bx').querySelector('.rg_meta');
var metadata = JSON.parse(meta.innerHTML);
imageURL = metadata.ou;
} else {
imageURL = imageArea.getElementsByClassName('irc_mi')[0].src;
}
// Create Search by image button
var searchByImageTd = document.createElement('td');
searchByImageTd.setAttribute('class', extClass);
if (imageURL) {
// Create Search by image link
var searchByImageLink = document.createElement('a');
searchByImageLink.style.width=searchByImageButtonWidth;
searchByImageLink.setAttribute('href', '/searchbyimage?&image_url=' + imageURL);
searchByImageTd.appendChild(searchByImageLink);
// Insert text into Search by image button
var searchByImageText = document.createElement('span')
localiseSearchByImage(searchByImageText, user_language);
searchByImageLink.appendChild(searchByImageText);
}
// Create View image button
var viewImageTd = document.createElement('td');
viewImageTd.setAttribute('class', extClass);
if (imageURL) {
// Create View image link
var viewImageLink = document.createElement('a');
viewImageLink.style.width=viewImageButtonWidth;
viewImageLink.setAttribute('href', imageURL);
viewImageLink.setAttribute('target', '_blank');
viewImageTd.appendChild(viewImageLink);
// Insert text into View image button
var viewImageText = document.createElement('span')
localiseViewImage(viewImageText, user_language);
viewImageLink.appendChild(viewImageText);
}
imageLinks.innerHTML = viewImageTd.outerHTML + searchByImageTd.outerHTML;
}
}
}
var observer = new MutationObserver(function (mutations) {
mutations.forEach((mutation) => {
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
for (var i = 0; i < mutation.addedNodes.length; i++) {
var newNode = mutation.addedNodes[i];
addLinks(newNode);
}
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
addLinks(document.body);
})();