// ==UserScript==
// @name Google Search shows 'Cached' again! ('Im Cache'.de_DE)
// @namespace cortex
// @description Provides the 'Cached' button for each searchresult.
// @include http://www.google.*
// @include https://www.google.*
// @include http://webcache.googleusercontent.*
// @include https://webcache.googleusercontent.*
// @version 1.2.0
// @run-at document-start
// @icon https://goo.gl/ZglzYI
// ==/UserScript==
function main(e) {
if (insideCache) casche(e);
else rezultz(e);
}
const bref = "http://webcache.googleusercontent.com/search?ie=UTF-8&q=cache:";
var iconAcnhor, gComemBack, insideCache;
function rezultz(e) {
if (Xel('//a[starts-with(@class,"googCacheComeBack")]')) {
return;
}
if (e) e.preventDefault(), e.stopPropagation();
try {
var rez = Xels('//div[@id="search"]//div[@class="g"]');
for (var i = 0, li = rez.length; i < li; i++) {
var a = Xel('.//a', rez[i]);
a.removeAttribute("onmousedown");
var aref = bref + hesc(a.href); //
var cache = buildEl('span', {
style: 'color: black'
}, null, ' ‣ ');
cache.appendChild(buildEl('a', {
href: aref
, 'class': 'googCacheComeBack fl'
, target: '_blank'
}, null, 'gCache'));
var cite = Xel('.//cite', rez[i]);
cite && cite.appendChild(cache);
}
}
catch (e) {
GM_log('cacherr:\n' + e)
}
}
function casche(e) {
if (Xel('//a[starts-with(@class,"gooCache")]')) {
return;
}
if (runByEsc || runByEscCached) e.preventDefault(), e.stopPropagation();
var hloc = location.href + '';
hloc = hloc.split(/\/?\#|\%23/)[0];
var loc = hloc.match(/[\&\?]q\=cache\:(.*)/);
if (!loc || !loc[1]) {
GM_log('not webcache\n' + hloc);
return;
}
loc = Xel("/html/body/div/div/a").href + '';
var ctr = 0;
var dom = FLD(loc);
var L = unsafeWindow.document.links;
GM_addStyle(iconAcnhor);
for (var i = L.length - 1; i >= 0; i--) {
var ref = L[i].href.split(/\/?\#|\%23/);
if (ref.length > 1 && ref[0] == loc) {
L[i].href = hloc + '#' + ref[1];
L[i].removeAttribute("onmousedown");
L[i].className = (L[i].className ? L[i].className + ' ' : '') + 'gooCacheAnchor';
}
else {
var refdom = FLD(ref[0]);
if (refdom && dom) {
e = buildEl('a', {
'class': (refdom.d == dom.d) ? 'gooCacheLink' : 'gooCacheExt'
, /* */
title: 'cached'
, /* */
href: bref + hesc(L[i].href)
}, null, ''); //'↓'
insAfter(e, L[i]);
}
}
}
}
function hesc(href) {
var hr = href + '';
const re = /^(.+?)([\?\#\&].*)$/;
var m = hr.match(re);
if (m && m.length == 3) {
hr = m[1] + escape(m[2]);
}
return hr;
}
function buildEl(type, attrArray, eL, html) {
var node = document.createElement(type);
for (var attr in attrArray)
if (attrArray.hasOwnProperty(attr)) node.setAttribute(attr, attrArray[attr]);
if (eL) node.addEventListener(eL[0], eL[1], eL[2] ? true : false);
if (html) node.innerHTML = html;
return node;
}
function Xel(XPath, contextNode) {
var a = document.evaluate(XPath, (contextNode || document), null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
return (a.snapshotLength ? a.snapshotItem(0) : null);
}
function Xels(XPath, contextNode) {
var ret = []
, i = 0;
var a = document.evaluate(XPath, (contextNode || document), null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
while (a.snapshotItem(i)) ret.push(a.snapshotItem(i++));
return ret;
}
function FLD(url) {
var dm = url.match(/^(https?\:)\/\/(.+?)\//);
if (!dm || dm.length < 3) return null;
dd = dm[2].split('.');
if (dd.length < 2) return null;
return {
p: dm[1]
, d: dd[dd.length - 2] + '.' + dd[dd.length - 1]
};
}
function insAfter(n, e) {
if (e.nextSibling) {
e.parentNode.insertBefore(n, e.nextSibling);
}
else if (e.nextElementSibling) {
e.parentNode.insertBefore(n, e.nextElementSibling);
}
else e.parentNode.appendChild(n);
}
iconCacheLink = 'content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAABMklEQVQoz42QP0tCYRSHnxuXhjCIigtW4KBRweuU1NDS0lIY9AFaWqItDIy+goM01RAI0ewkCG1BShQuweXqTRwasugS9EejWk6DaPfmTfot73nPOQ+/c46GS+l8Xdz/xPKYRi+l83VxmiIiIk5T5PjcERVPyr8AFU+Kiiclf/0qm0e2L6i3g9EBiK7uYuZSGkBla1uGA/2+Jn3t4MuneFNv+EJaofouewenPfc1JiJkd6KaZ7y1pXmK5SduHxWl2k9zLAwhw8Q+O/HudFV99gDpjXtqD00u7QilGoSMbmcd8ABzk0NMjwdYmX2jctegWP4DcqvtnL1QwCCxcLAbcl4+CRkmoEhkgsTCAK23NZ6Jbfk4LcyMAC3w9yH8pANkDvc7CeUqflhgWzC1uI6ZS3Xy35M8hMl4RkDrAAAAAElFTkSuQmCC)';
iconAcnhor = '.gooCacheAnchor:after{position: relative; top: 6px;content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAYAAACJxx+AAAAAWElEQVR42mNkQAM6vmX/r2zuYoTxGdEl1R1iGW4eWMwAU8RIkgnBvZf/w9hri3XJMAGnApDRMCORFYDE4YIg14MUwRSAJEG+gSsA0SBFMADzKkY4wNgwawC9Qz2rUJ9HmwAAAABJRU5ErkJggg==)}.gooCacheLink:before{position: relative; top: 6px; opacity: 0.8;' + iconCacheLink + '}.gooCacheExt:before{position: relative; bottom: 4px; opacity: 0.8;content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAKCAYAAACJxx+AAAAAkklEQVR42mNkQALbLn76f+PpF4b1u08yvL9zHCzGyIAF9G179h+miBGXZKCrOdgkRmTVICCoYgmWLPKSAssx2hau/w8S4BaTBCuY3FgOVnS4P5AR5CZGHd+y/7n1nWAJZHBlcxfYehQFSZkFYJNAbBQFMAkQ+PrqOcO86RMQCkBuADkQZC8IwNggN4AV4PMFiA8ADbFh5B0GQNAAAAAASUVORK5CYII=)}.googCacheComeBack{}';
// from: [http://userstyles.org/styles/64844/google-search-plain-view-cached-similar-links]
// by luckymouse [http://userstyles.org/users/14255]
gComeBack = '\
.clickable-dropdown-arrow.ab_button\
,a[id^="am-b"].ab_button\
{display: none !important;}\
.action-menu.ab_ctl {\
position: static !important;\
display: inline-block !important;\
margin: 0 !important; \
vertical-align: baseline !important;}\
.action-menu-panel.ab_dropdown {\
visibility: visible !important;\
position: static !important;\
box-shadow: none !important;\
border: none !important;}\
.ab_dropdownitem {display: inline !important;}\
.ab_dropdownitem::before,\
.ab_ctl + a.fl[href*="translate.google.com/"]::before\
{content: "\\00a0\\2023"; color: #000;\
padding-right: 2px; font-size: 14px !important;}\
.ab_dropdownitem:hover {cursor: auto !important; background: transparent !important;}\
.action-menu a[id^="am-b"],/*14-05-20*/\
.action-menu-item div.action-menu-button {display: none !important; }\
.action-menu-item a.fl {\
color: #1122CC !important;\
display: inline !important;\
padding: 0 3px 0 0 !important;\
font-size: 14px !important;\
}\
.action-menu-item a.fl:hover {text-decoration: underline !important;}\
/*2013-06-14*/\
.action-menu-panel.ab_dropdown {background-color: transparent !important;}\
div.f[style*="white-space:nowrap"] {white-space:normal !important;} \
.action-menu-button {display: inline !important; }/**/\
.kv, .slp { display: inline-block !important; padding-left: 4px !important;}\
/*2014-07-14*/\
.s .f.slp:empty{display:none!important;}\
.s span.st {display:inline-block !important;}\
.cr-dwn-arw{margin-left: 2px!important;}\
';
insideCache = location.href.indexOf('webcache') >= 0;
if (!insideCache) GM_addStyle(gComeBack);