Googlestream
By the DtTvB
—
Last update Apr 18, 2007
—
Installed
2,258 times.
// ==UserScript==
// @name Googlestream
// @namespace http://dttvb.yi.org/
// @description Stream Google Resules
// @include http://www.google.*/search*q=*
// ==/UserScript==
//
// Googlestream - Stream search results...
//
(function() {
var streamEnabled = false;
var streamTimer = 0;
//
// Get the top
//
function t(el) {
var tmp = el.offsetTop;
el = el.offsetParent;
while (el) {
tmp += el.offsetTop;
el = el.offsetParent;
}
return tmp;
}
//
// The hooked element.
//
var hookedElement = false;
//
// Height
//
var addHeight = 0;
//
// Search for it first.
//
var divs = document.getElementsByTagName('div');
for (var i = 0; i < divs.length; i ++) {
if (divs[i].firstChild && divs[i].firstChild.nodeName == 'DIV' && divs[i].firstChild.className == 'g') {
hookedElement = divs[i];
break;
}
}
//
// Scroll effects.
//
function addMoreTo() {
//
// Add the height.
//
addHeight += 1;
//
// Calculate the final height using an equation.
// Note that 3.1846579849 and 9.498435255614 were just a random number!
// So that it gives a unique effect.
//
var ah = Math.pow(addHeight / 3.1846579849, 2.2) * 9.498435255614;
//
// Finally, the height exceeds.... Stop the animation now!!
//
if (ah > hookedElement.firstChild.offsetHeight) {
//
// Start hooking again.
//
hookedElement.style.height = '';
setTimeout (alal, 500);
return;
}
//
// Not yet, set it.
//
hookedElement.style.height = Math.round(ah) + 'px';
setTimeout (addMoreTo, 5);
}
//
// On document loaded:
//
function ndocl(rd) {
//
// Search for the navbar, we need it.
//
var rt = rd.responseText.match(/<div[^>]*?id=navbar[^>]*?>(.*?)<\/table><\/div>/i);
//
// But if IT DOESNT EXISTS!!!! Bye!
//
if (!rt)
return false;
//
// Oops, it exists. However we also need to get the results.
//
var rs = rd.responseText.match(/<!--a--><div>((.|\r|\n)*?)<!--z-->/i);
//
// But if IT DOESNT.. am I shouting too loud?
//
if (!rs)
return false;
//
// Everything is ok, so change the navbar, and then create more...
//
document.getElementById('navbar').innerHTML = rt[1];
//
// Create another div.
//
var newdiv = [document.createElement('div'), document.createElement('div')];
newdiv[0].appendChild (newdiv[1]);
newdiv[0].style.overflow = 'hidden';
newdiv[0].style.height = '0';
newdiv[0].style.paddingTop = '1px';
newdiv[0].style.marginTop = '-1px';
//
// Set its HTML.
//
newdiv[1].innerHTML = rs[1];
//
// Insert it and hook it.
//
hookedElement.parentNode.insertBefore (newdiv[0], hookedElement.nextSibling);
hookedElement = newdiv[0];
//
// Cool scroll effect!
//
addHeight = 0;
setTimeout (addMoreTo, 100);
}
//
// The function..
//
function alal() {
//
// Stream must be enabled
//
if (!streamEnabled)
return;
//
// Get the scroll offset need.
//
var targ = (t(hookedElement) + hookedElement.offsetHeight) - window.innerHeight;
//
// And then compare with the current one.
//
if (window.scrollY > targ) {
//
// Check what we need.
//
if ((!document.getElementById('nn')) || (!document.getElementById('nn').parentNode) || (!document.getElementById('nn').parentNode.href))
return;
//
// Get the next page's URL.
//
var unp = document.getElementById('nn').parentNode.href;
//
// Send the request!
//
GM_xmlhttpRequest ({
'method' : 'GET',
'url' : unp,
'onload' : ndocl
});
//
// Until...
//
return;
}
streamTimer = setTimeout(alal, 200);
}
//
// The element was not found -- was not a google search page.
//
if (hookedElement === false)
return;
//
// Found -- Googlestream ready?
//
var toggler = unsafeWindow.document.createElement('a');
toggler.style.position = 'fixed';
toggler.style.top = '2.4em';
toggler.style.right = '0.8em';
toggler.style.background = '#ffe';
toggler.style.padding = '0.6em';
toggler.style.border = '1px solid #000';
toggler.style.font = '0.75em Verdana, "Bitstream Vera Sans", Helvetica, sans-serif';
toggler.style.color = '#00f';
toggler.href = '#';
toggler.innerHTML = 'Enable Googlestream';
toggler.onclick = function() {
streamEnabled = !streamEnabled;
clearTimeout (streamTimer);
toggler.innerHTML = 'Enable Googlestream';
if (streamEnabled) {
streamTimer = setTimeout(alal, 200);
toggler.innerHTML = 'Disable Googlestream';
GM_setValue ('enabld', '1');
return false;
}
GM_setValue ('enabld', '0');
return false;
}
document.body.appendChild (toggler);
if (GM_getValue('enabld', '0') == '1') {
toggler.onclick ();
}
})();