There are 15 previous versions of this script.
Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
// ==UserScript==
// @name Scroogle - bookmarkable, pretty, cache links
// @namespace http://khopis.com/scripts
// @description Nicer look, bookmarkable search, better security, cache links
// @include https://*scroogle.org/cgi-bin/nbbw*
// @include http://*scroogle.org/cgi-bin/*
// @include https://ssl.scroogle.org/*
// @author Adam Katz <scriptsATkhopiscom>
// @copyright 2008 by Adam Katz
// @license AGPL v3+
// @version 1.4
// @lastupdated 2009-10-16
// ==/UserScript==
/*
* There are three main features provided here:
* 1. Bookmarkable URLs when in SSL mode.
* 2. Display beautified, now it looks almost exactly like Google
* 3. Helper links added for cache, similar links, and history.
*
* A quick overview of Scroogle - this is an anonymizer service which
* prevents Google, Inc. from connecting your searches to you. They wipe
* logs religiously, there are no cookies, etc. Using SSL also means nobody
* can read your traffic and note your search queries.
* Learn more at www.scroogle.org or http://epic.org/privacy/gmail/faq.html
*
* If using SSL, further searches should be SSL, and it is safe* to use GET,
* making searches bookmarkable (see https://ssl.scroogle.org/sslnote.html )
* If not using SSL, it is not safe to use GET. We ensure we're using POST
* for the reasons outlined at http://www.scroogle.org/scget.html
* (* note: SSL-to-SSL apparently passes referer data. This script uses
* javascript:location.href='https://...' as a workaround.)
*
* Quick Search and Search Bar options for scroogle
* are listed at http://userscripts.org/scripts/show/23529
*
*
* Copyright 2008-9 by Adam Katz <scriptsATkhopiscom>, AGPL 3+
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License at <http://www.gnu.org/licenses>.
*/
var override = false; // set this to true to always use SSL on refined searches
var query = null;
// fix get/post on forms
var forms = document.getElementsByTagName("form");
for (var i = 0, f; (f = forms[i]); i++) {
//if ( /\/nbbw(ssl)?\.cgi$/.test(f.action) ) { // just the search box
if ( f.action.indexOf("/nbbw") !=-1 ) { // just the search box
for (var gw=document.getElementsByName("Gw"), j=0, g; (g = gw[j]); j++) {
if (j == 0) { query = g.value; }
g.setAttribute("spellcheck", "true");
}
// GET is safe only with SSL; see https://ssl.scroogle.org/sslnote.html
if ( override || location.protocol == "https:" ) {
f.method = "get";
urlHead = "https://ssl.";
} else {
f.method = "post";
urlHead = "http://www.";
}
// i see no difference between nbbw.cgi and nbbwssl.cgi
f.action = urlHead + "scroogle.org/cgi-bin/nbbw.cgi";
}
}
// don't do any of this unless the search form exists!
if (query != null) {
// CSS moved to top so that it looks nicer faster
GM_addStyle( "\n" + // better spacing, fonts, colors, placement for new items
// The following multi-line string requires E4X (not supported in IE or Opera)
// Syntax highlighting is almost certainly going to get broken here ...
<style><![CDATA[
.result b[style="background-color: rgb(255, 255, 102);"] /* 1. #ffff66 */
{ border-color:#ed5; background-color:#fffbed!important; }
.result b[style="background-color: rgb(160, 255, 255);"] /* 2. #a0ffff */
{ border-color:#8ee; background-color:#e8f8ff!important; }
.result b[style="background-color: rgb(153, 255, 153);"] /* 3. #99ff99 */
{ border-color:#8e8; background-color:#efe!important; }
.result b[style="background-color: rgb(255, 153, 153);"] /* 4. #ff9999 */
{ border-color:#e88; background-color:#fee!important; }
.result b[style] { border-style:solid; border-width:1px 0; }
body { font-family:sans-serif; }
body.index { text-align:center; background:white; }
ul, blockquote { margin:0; padding:0; }
P[align="right"] b { font-size:1em; display:block; float:left; }
#top { margin:4em 0 0 2em; }
center { text-align:left; }
body.index center { text-align:center; }
.secondSearch, .searchTitle {
display:block; color:#000; background:#ebeff9; border:solid #6b90da; }
.searchTitle {
border-width:1px 0 0 0; line-height:2em; margin-bottom:-2em;
font-size:0.8em; padding:0 0.5em; font-weight:bold; }
.searchTitle div { font-weight:300; }
.secondSearch { border-width:1px 0; padding:1.5em 0; text-align:center; }
.right { float:right; }
.noHits { display:block; margin:3em 0 -2em 0; font-size:1.25em; }
img { border:none; }
#logo img { height:6em!important; margin-top:-1em; }
#top #logo img { height:10em!important; }
form { display:inline; }
input[type="text"] { width:40em; }
span.ftype { font-weight:bold; font-size:x-small; color:blue; }
#title, #title *, center, center * { vertical-align:middle; }
ul { margin-top:0.25em; margin-bottom:0.75em; }
div.hit2 { margin-left:2em; } /* indent subsequent hits within a domain */
.cache { font-size:0.75em; /* padding-left:4em; */ }
.cache a { color:#77c; }
.cache a:visited { color:purple; }
.trans > a { text-decoration:underline; cursor:pointer; } /* not a href */
span.trans div { visibility:hidden; position:absolute;
padding:0.1em 1em; margin:1.2em 0 0 -0.5em; border:solid 1px #88d;
background-color:#eef; -moz-opacity:0.95; -moz-border-radius:4px; }
span.trans:hover div { display:inline; visibility:visible; }
span.trans:hover div a { display:block; text-decoration:none; }
span.trans:hover div a:hover { display:block; text-decoration:underline; }
]]></style> );
// remove the leading number on each hit, put each result in an ID'd <div>
document.body.innerHTML = document.body.innerHTML.replace(
/\n(<font face="[^"]*.>)?([0-9]+)\. (<[^\n]+\n(<.font>)?<ul>[^\n]+<.ul>)/mg,
"\n<div class='result' id='result$2'>$1$3</div>");
// add links to caching sites
function makeCacheLink(href, text, title) {
var link = document.createElement("a");
if (href != null) { link.href = href; }
if (title != null) { link.title = title; }
link.appendChild(document.createTextNode(text));
var cache = document.createElement("span");
cache.appendChild(document.createTextNode(" - "));
cache.appendChild(link);
return cache;
}
var results = document.getElementsByTagName("ul");
var links = document.getElementsByTagName("a");
var lastDomain = 'nowhere';
for (var i=0, j=0, r, l, notHTML; (r=results[j]); j++, i++) {
notHTML = false;
l = links[i];
caches = document.createElement("span");
caches.className = "cache";
r.appendChild(caches);
href = l.href;
// privacy workaround for SSL-to-SSL referer issue (see "* note" above)
if ( href.indexOf("https://") == 0 && location.protocol == "https:" ) {
try {
// pin link's color to initial :visited state before altering its href
l.style.color = getComputedStyle(l,'').
getPropertyValue("color");
// because this can be used to report your history to a 3rd party,
// it might be disabled or blocked in the future (thus the try/catch).
// Learn more at https://bugzilla.mozilla.org/show_bug.cgi?id=147777#c11
} catch(e) { } // ignore errors from missing/prohibited call
l.href = "javascript:location.href='" + href + "'";
}
var hrefPath = href.replace(/(?:^https?:..[^\/]+)/,'');
var hrefDomain = href.replace(/^https?:..([^\/]*).*/,'$1');
// mark secondary hits for this domain (unless this is a site-specific search)
if (hrefDomain == lastDomain && ! /(?:^|\s)\+?site:[a-z]/.test(query) )
{ r.parentNode.className += " hit2"; }
lastDomain = hrefDomain;
if ( /(?:\.(?:p(?:df|pt)|doc|rtf)$)/i.test(href) ) {
notHTML = true; // for google cache text below
if ( /(?:\.pdf$)/i.test(href) ) { // PDFs get an extra cache entry
caches.appendChild( makeCacheLink( // PDF->flash a la Stateless Systems
"http://pdfmenot.com/view/" + href,
"PdfMeNot", "View PDF in Flash Applet") );
l.className += " pdf";
i++; // links[] is dynamic, so we must increment i whenever we add a link
}
var ftype = document.createElement("span");
ftype.className = "ftype";
ftype.appendChild( document.createTextNode(
href.replace(/^.*\.(...)$/,"[$1] ").toUpperCase() ) );
l.parentNode.insertBefore(ftype, l);
}
// skip scroogle and cache/well-seeded links (is this useful?)
if (! /\b(?:scroogle.org|google.com|nyud.net)$/.test(hrefDomain) ) {
caches.appendChild( makeCacheLink( // Coral, the NYU Distribution Network
"http://" + hrefDomain + ".nyud.net:8080" + hrefPath,
"CoralCache") );
i++;
goog = makeCacheLink( // get Google's cache (since it's their search result)
"http://www.google.com/search?q=cache:" + href,
notHTML ? "View as HTML" : "Google Cache" ); // text differs if not HTML
if (notHTML) {
goog.style.fontWeight = "bold";
goog.title = "via Google Cache";
}
caches.appendChild(goog);
i++;
}
// mimic google's related search ... mostly useless
// NOTE - this circumvents the POST-based security in non-ssl searches!
caches.appendChild( makeCacheLink(
forms[0].action + "?Gw=related:" + href.replace(/^https?:../,''),
"Similar pages" ) );
i++;
caches.appendChild( makeCacheLink(
"http://web.archive.org/web/*" + href,
"History") );
i++;
var hrefTLD = hrefDomain.replace(/(?:^.*\.)/g,'');
if (/(?:^..$)/.test(hrefTLD)
// try to exclude pages already translated into English
&& ! /english/i.test(l.innerHTML)
&& ! /(?:english|[/\.]en\b)/i.test(href) ) {
var lang = [];
if (/(?:c[adhim]|fr|b[ef]|m[cg]|ht|lu|ne|sn)/
.test(hrefTLD)) lang.push("fr");
if (/(?:a[nw]|nl|be|sr)/.test(hrefTLD)) lang.push("nl");
if (/(?:cn|hk|tw|m[oy]|sg)/
.test(hrefTLD)) { lang.push("zh"); lang.push("zt"); }
if (/(?:d[ek]|at|be|c[hz]|l[iu]|hu|pl)/.test(hrefTLD)) lang.push("de");
if (/(?:[gt]r|cy|al)/.test(hrefTLD)) lang.push("el"); // greek
if (/(?:it|s[im]|hr|mc|ch|va)/.test(hrefTLD)) lang.push("it");
if (/(?:jp|pw)/.test(hrefTLD)) lang.push("jp");
if (/(?:k[pr])/.test(hrefTLD)) lang.push("ko");
if (/(?:br|[ps]t|g[qw]|m[oz]|ao|cv|tl)/.test(hrefTLD)) lang.push("pt");
if (/(?:ru|ua|k[gyz]|[eg]e|l[tv]|az|by|md)/.test(hrefTLD)) lang.push("ru");
if (/(?:e[cs]|mx|c[loru]|b[oz]|g[qt]|p[ay]|uy|ve|ar|do|hn|ni|sv)/
.test(hrefTLD)) lang.push("es");
function langName(code) {
switch (code) {
case "de" : return "German";
case "fr" : return "French";
case "ru" : return "Russian";
case "es" : return "Spanish";
case "jp" : return "Japanese";
case "zh" : return "Chinese (Simplified)";
case "zt" : return "Chinese (Traditional)";
case "it" : return "Italian";
case "nl" : return "Dutch";
case "el" : return "Greek";
case "ko" : return "Korean";
case "pt" : return "Portuguese";
}
}
if (lang.length >= 1) {
var translations = makeCacheLink(null, "Translate");
translations.className = "trans";
caches.appendChild(translations);
var trList = document.createElement("div");
var trTitle = translations.getElementsByTagName("a")[0];
translations.insertBefore(trList, trTitle);
for (var k=0, la; (la=lang[k]); k++) {
var trLink = document.createElement("a");
trLink.href = "http://babelfish.yahoo.com/translate_url?tt=url&trurl="
+ escape(href) + "&lp=" + la + "_en";
if (lang.length == 1) { trTitle.href = trLink.href; }
trLink.appendChild(document.createTextNode("from "+langName(la)));
trList.appendChild(trLink);
}
i += lang.length + 1; // don't forget the top-level Translate link
}
}
}
/////////////////////////// everything else is for beautification
// create top image (no SSL version of image available)
var img = document.createElement("img");
/*
img.src = "http://scroogle.org/gifs/";
if (Math.random() > 0.6) {
img.src += 'gooburns.gif'; // 40% chance of google logo burning/falling down
} else {
img.src += 'scrooge2.gif'; // 60% chance of scroogle logo
}
*/
img.alt = "S C R O O G L E";
// create top image's link
var title = document.createElement("a");
title.href = "http://scroogle.org";
title.id = "logo";
title.appendChild(img);
// try placing and messing with specific items
try {
var bolds = document.getElementsByTagName("b");
if (bolds.length > 1) {
var searchTitle = bolds[0];
var searchTitleText='';
if (! / results$/.test(searchTitle.innerHTML) ) {
searchTitle.className = "searchTitle"; // mark search title for CSS
numResults = document.getElementsByName("n");
var tot=0;
for(var t; (t=numResults[tot]); tot++) {
if(t.checked) {
tot = t.value;
if(tot == 1) { tot = 100; } else { tot = tot * 10; }
if (tot == results.length) { tot = tot + "+"; }
else tot = results.length;
break;
}
}
// put count of hits in search title bar
if (results.length > 0) {
searchTitleText = '<div class="right">' + "Results <b>1</b>-<b>"
+ results.length + "</b> of <b>" + tot + "</b> for <b>"
+ query + "</b></div>";
}
searchTitle.innerHTML = searchTitleText + "Web - Google Search";
}
var noHits = bolds[bolds.length-2];
if ( /no results for this search.$/.test(noHits.innerHTML) ) {
noHits.className = "noHits"; // mark lack of hits for CSS
searchTitle.parentNode.insertBefore(title, searchTitle); // add top image
} else {
if (forms.length >= 1) {
var f0 = forms[0];
f0.parentNode.insertBefore(title, f0); // insert top image
if (forms.length > 1) {
var f1 = forms[1];
f1.className = "secondSearch"; // mark second search box
var pagelinks = document.getElementsByTagName("a");
var privacy = pagelinks[pagelinks.length-1];
privacy.href = "http://www.eff.org/issues/privacy";
privacy.innerHTML = "protect your privacy";
/*
// create marketwatch link
var marketWatch = document.createElement("a"); // create link element
marketWatch.href = "http://www.scroogle.org/bubble.html";
marketWatch.className = "marketWatch";
var mwimg = document.createElement("img"); // create image
mwimg.src = "http://www.scroogle.org/gifs/evilb.gif";
mwimg.alt = "Don't be evil - Google market cap watcher";
marketWatch.appendChild(mwimg);
f1.parentNode.insertBefore(marketWatch, f1); //insert mw img
GM_addStyle("\n.marketWatch { float:right; margin-top:2em; }\n");
*/
}
}
}
} else {
// put top image at very top of page (we failed to place it above)
document.body.className += "index";
document.body.innerHTML = '<div id="top"></div>' + document.body.innerHTML;
document.getElementById("top").appendChild(title);
}
} catch(e) {
GM_log(e); // this shouldn't fire any more...
}
// I moved this to the end to speed up everything else
img.src = "data:image/gif;base64,"+<base64><![CDATA[
R0lGODlhrABIAPcAAAMNAwEFAQcYBw4fEQsjCw0oDREtEhAhGBU0FRs7Gxc3Fw82DyI5HB89IiE+IiY
8KCs+LxAbLVYUDnMWC28iGHAwKFgwIBlEGBVXFBpoGg5wDh9FISNCJCtFKypDKitENDJKMjVKOjhLOj
NQMSVpJSZ3JTN3MiBgH1ZHEWpaHGhTCH5nD05SOnFMPHlpLRItVBc7bCk6TjpMRT5SRRNCeyNHdkJUR
EZXSk5YS2ldTE1hVlVmWE1qTWdkSXFtV1hqZ1htcWV1amh3d3Z8eXBzZ4QLAYcVCJgVBY8OBqkYBrgY
A6APAJEmGLszHrApFpE1KKo5KLY4JcsaAsQZA9AeBMkkC9Q2G80tFMY5JNM9JY91EbBEM4VgKtdFKsZ
HM9VLM9JOOIV0VLRtWI15baFpXNpbRMhYR9hjTdpoVMZmV+FpVOFvWdd4Z+J6ZeBXQAiDCCeJJTOUMj
qlOiCCH02aS0irR1OzU1u4WlGtUHmEeGe6Znm/eGC3XXTCc6mLGbuYFbGODbOWLqOKKMOcD9CpF+a4G
NKvL+W9LMCfIPPLOO3ELfLBGq6OTpeJdouHdbiYe6+MeLOncaOYV9e5SdGJceaHdeiKds+obvbWWPDO
TPPXbfnhfgpDgxZOlRNPmSpUjhZUoxtcsyNcqyVitlduhHR9hmh5iipszSZnxjhyzDNwz0V51HmDiX2
IknWLqk2C1YWJio2Smpibl5GTiqeai6mcl7aal7OXhpymmaekmralmLWpj5acpIyXoZuiqZ2os6apqb
mrprq2q6asta2zurm4t622qc6Yi+qVhMSliMenmde5mNCwleimmMispce0qdW1qMu7tMa5ttS+t9Sro
+K5rIvKiZHOkJbSk5LPj7XLsvTdivbkl/fgh8rBvNTDvdnFudrGpejKq+bKt/HTu/noqd/Gkbe8w663
xb7DzcPDw8zFxM3MzMbIy9PGw9XJxtTOzNrOy9rJxdfQz9vQztzQxtXT09zU0tza2trX18vO0+HNyOL
RzeLV0uPb2f///yH5BAEAAP8ALAAAAACsAEgAAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGD
Nq3Mixo8ePIEOKHNmxH717/e6xI8mypcuG9/Dx43fy3j17xV7q3EnSXj6b/vzZvCcUJ8+jSDHau0fTm
7d+QfFFvZdPXdKrWBvaO3lSnSNhUOuB2xfUX7+cWdOq/ZdyqUl+92Zp8/ctGSUx30z2s7q279Gl9E7C
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
]]></base64>;
GM_addStyle(".pdf { background:right no-repeat url(" + (""+<base64><![CDATA[
"data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYP
DQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRo
PDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wA
ARCAAQABADASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQFBv/EACQQAAICAQIGAwEAAAAAA
AAAAAEDAgQFABEGEhQhIjFBcaHR/8QAFQEBAQAAAAAAAAAAAAAAAAAAAwX/xAAcEQAABgMAAAAAAAAA
AAAAAAAAAQIRIUESMWH/2gAMAwEAAhEDEQA/AN/i8rlLqGOdeWlUBKUpBAOwG/8ANDwV91BuHx78hAx
kZKchwiJrkIExBO+537feoqMtilUqq7F1i5qMuoq9Mw88uckCREe49dvnT1PK47iHiPEohWW2KpNYRK
qREeG4PlED3+6J9CgomySoomi61D//2Q==" ]]></base64>).replace(/\s/g,'')
+ "); padding-right:20px; }\n");
} // end if (query)
