Restore View Image Button for Google

Restores the 'View Image' button on Google Image search. Beta, report back issues!

Verzia zo dňa 16.02.2018. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name           Restore View Image Button for Google
// @namespace      David Refoua <www.Refoua.me>
// @author         David Refoua
// @description    Restores the 'View Image' button on Google Image search. Beta, report back issues!
// @include        http://*.google.tld/*isch*
// @include        https://*.google.tld/*isch*
// @grant          unsafeWindow
// @run-at         document-start
// @version        0.1.1-beta
// ==/UserScript==

var resetViewBtn = (function() {
	'use strict';

	var getCousins = function(node, selector) {

		var found = null;

		while ( (parent = node.parentNode) && ( parent != node ) ) {

			node = parent;
			var list = node.querySelectorAll(selector);
      
			if ( list.length > 0 ) {
				found = list;
				break;
			}

		}

		return found;

	};

	var getImageLink = function(node) {

		/*
		var image_nodes = getCousins(node, '.irc_mi');

		for (var i in image_nodes) if ( image_nodes.hasOwnProperty(i) ) {
			var image_item = image_nodes[i];

			var image_source = image_item.getAttribute('src');
			if ( !image_source ) return image_source;
		}
		*/

		var related_nodes = getCousins(node, '.irc_rimask');

		for (var j in related_nodes) if ( related_nodes.hasOwnProperty(j) ) {
			var related_item = related_nodes[j];

			if ( related_item.classList.contains('irc_rist') ) {

				var target_image = related_item.querySelector('.target_image');

				var x, the_source;

				if ( target_image && ( x = target_image.parentNode ) && ( the_source = x.getAttribute('href') ) )
				{
					
					var image_match = the_source.match( /imgurl=([^\&]+)\&/i );

					if ( image_match && image_match.length > 0 ) {

						var image_link = image_match[1];
						while ( decodeURIComponent(image_link) != image_link ) image_link = decodeURIComponent(image_link);

						return image_link;

					}

				}

			}

		}

		return null;
		
	};
  
  
  var bottom_buttons = document.querySelectorAll('.irc_but_r');

	for ( var i = 0; i < bottom_buttons.length; i++ ) {

		var the_table = bottom_buttons[i];
		var img_addr = getImageLink(the_table);
		var visit_button_container = the_table.querySelector('.irc_vpl').parentNode;
		var view_image_button = visit_button_container.querySelector('.irc_view_image');
		
		if ( !view_image_button ) {
			var new_button = document.createElement("a");
			view_image_button = visit_button_container.appendChild(new_button);
			view_image_button.classList.add('irc_view_image');
      // TODO: use the waybackmachine to find what google originally used instead of `.irc_view_image`
		}
		
		view_image_button.style.display = ( img_addr ? '' : 'none' );

		// view_image_button.innerText = 'View Image';
		view_image_button.innerHTML = '<span class="_WKw">View Image</span>';

		view_image_button.setAttribute('href', img_addr);

		view_image_button.setAttribute('target', '_blank');
		view_image_button.setAttribute('tabindex', '0');

	}

});

/*
// TODO: find a valid event and don't use an interval
var eventsList = ['mouseup', 'keyup'];

for (var i in eventsList) if ( eventsList.hasOwnProperty(i) ) {
	document.addEventListener(eventsList[i], function(e){
		if (e.target && e.target.classList && e.target.classList.contains('irc_view_image') == false && e.target.parentNode.classList.contains('irc_view_image') == false )
			resetViewBtn();
	});
}
*/

setInterval(resetViewBtn, 500);