|
I use this (opera browser) autopager & on second and rest of the pages icons don't appear.
[code]// @include http://www.google.co*/search*
// @exclude http://translate.google.com/*
// ==/UserScript==
(function(){
var enable = true;//Script toggle state
var evPre = "google-pager-userjs-";//Prefix for custom events
var nextDOM; //Contains the DOM for the next page, false if still loading
var nextDOMHref; //Href to the next DOM
var newPageRequest = false;//Has the user scrolled to get more content
addEventListener("DOMContentLoaded", function(){
addScriptStyles();
getNextPageDom(document);
}, false);
addEventListener('scroll', scroll, false);
function scroll(){
if(!enable)return;
var winTop = window.pageYOffset + window.innerHeight;
var scrollRemainder = document.body.clientHeight - winTop;
if(scrollRemainder < 5){
newPageRequest = true;
addNext();
}
}
//Adds the next set of results to the document and call
//getNextPageDom
function addNext(){
if(!nextDOM || !newPageRequest)return;
//Get result numbers and make the separator
var p = xpath(".//div[@id='ssb']/p[1]", nextDOM);
var matches = new RegExp("^.+?[0-9]+.+?[0-9]+").exec(p[0].innerText);
var link = makeElement("a", {"href": nextDOMHref}, matches[0]);
var btn = makeElement("button", {}, "Disable paging");
btn.addEventListener("click", togglePaging, false);
document.addEventListener(evPre+"toggle-paging", function(){btnToggle(btn);}, false);
var separator = makeElement("div", {"class": "pageSeparator"});
separator.appendChild(link);
separator.appendChild(btn);
//Add next page results
var nextRes = xpath(".//div[@id='res']/div[1]", nextDOM)[0];
var box = document.getElementById("res");
box.appendChild(separator);
box.appendChild(nextRes);
//Change the pager
var nextPager = xpath(".//table[@id='nav']", nextDOM)[0].cloneNode(true);
var currPager = document.getElementById("nav");
currPager.parentNode.replaceChild(nextPager, currPager);
newPageRequest = false;
getNextPageDom(nextDOM);
//Event for other scripts to plug into. New DOM elements
//can be referenced by event.target
dispatchCustomEvent("newpage", nextRes);
}
function getNextPageDom(currDOM){
nextDOMHref = xpath(".//td[@class='cur']/following-sibling::td[1]/a/@href", currDOM);
//If there are no more pages
if(nextDOMHref.length == 0){
removeEventListener("scroll", scroll, false);
return;
}
nextDOM = false;
nextDOMHref = nextDOMHref[0].value;
XHRGet(nextDOMHref, function(req){
if(req != false){
var doc = document.createElement("div");
doc.innerHTML = req.responseText;
nextDOM = doc;
addNext();
}else{
opera.postError("google-pager.js: error fetching next page");
removeEventListener("scroll", scroll, false);
}
});
}
function togglePaging(){
enable = !enable;
dispatchCustomEvent("toggle-paging", document);
}
function btnToggle(btn){
var txt = enable?"Disable paging":"Enable paging";
btn.firstChild.nodeValue = txt;
}
function dispatchCustomEvent(type, from){
var evObj = document.createEvent("Events");
evObj.initEvent(evPre+type, true, true);
from.dispatchEvent(evObj);
}
function XHRGet(url, callback, extras){
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = function(){
if(req.readyState != 4)return;
if(req.status == 200){
callback(req, extras);
}else{
callback(false, extras);
}
}
req.send("");
}
function makeElement(elm, propArr, text){
var element = document.createElement(elm);
for(var key in propArr){
element.setAttribute(key, propArr[key]);
}
if(text)element.appendChild(document.createTextNode(text));
return element;
}
function xpath(query, rel){
var r, rtn = [];
var resources = document.evaluate(query, (rel||document), null, XPathResult.ANY_TYPE, null);
while(r = resources.iterateNext())rtn.push(r);
return rtn;
}
var scriptStyles = "div.pageSeparator{background:#f0f7f9;padding:2px;clear:both;}div.pageSeparator a{color:#a7aebd;text-decoration:none;}div.pageSeparator a:hover{text-decoration:underline;}div.pageSeparator button{opacity:0.05;float:right}div.pageSeparator button:hover{opacity:1;}";
function addScriptStyles(){
var style = makeElement("style", {"type":"text/css"}, scriptStyles);
xpath("//head")[0].appendChild(style);
}
//////////////////////////////////
//Compatibility with other scripts
//////////////////////////////////
//2google-preview-1.0.js
if(window["GP_main"]){
addEventListener(evPre+"newpage", function(e){
xpath("//head")[0].removeAttribute("done")
GP_main(false);
},false);
}
//Google SnapShots Preview.user.js
opera.addEventListener('BeforeExternalScript', function(e){
var src = e.element.getAttribute("src");
if(src.match(/ixnp\.com\/shot_main_js\//))
SNAP_COM.shot_config.partial_check.attempts = 999999999;
}, false);
})();
[/code]
|