By JohnM
Has 5 other scripts.
// ==UserScript==
// @name Google Reader Search
// @namespace http://google.com/reader/userscript
// @description Lets you search using Google's blogsearch directly from Google Reader
// @include http://google.com/reader/*
// @include http://*.google.com/reader/*
// ==/UserScript==
var start=0;
var num=100;
var sort="r";
var searchType=0;
if (document.getElementById('logo')!=null && document.location.search.indexOf("gmail-embed") == -1)
addSearchBox();
function addSearchBox(){
var mybody = document.getElementsByTagName("body")[0];
var globalInfo = document.getElementById("global-info");
var buttonContainer = document.createElement("div");
buttonContainer.setAttribute('id','searchContainer');
var searchInput = document.createElement("input");
searchInput.value = "";
searchInput.setAttribute('id','searchInput');
searchInput.addEventListener('keypress',onSearchKeypress,false);
buttonContainer.appendChild(searchInput);
buttonContainer.className = "buttonContainer";
var searchFeed = document.createElement("button");
searchFeed.appendChild(document.createTextNode("Search Feed"));
searchFeed.className = "searchFeedButton";
searchFeed.addEventListener("click", onSearchFeed, false);
buttonContainer.appendChild(searchFeed);
var searchWebButton = document.createElement("button");
searchWebButton.appendChild(document.createTextNode("Search All Blogs"));
searchWebButton.className = "searchWebButton";
searchWebButton.addEventListener("click", onSearchAll, false);
buttonContainer.appendChild(searchWebButton);
mybody.insertBefore(buttonContainer,globalInfo);
var style="#searchContainer {position: absolute;top: 17px; left: 158px;margin: 0;}";
GM_addStyle(style);
}
function onSearchKeypress(event){
if (event.keyCode==13){
onSearchFeed();
}
}
function onSearchFeed(event){
debug('search feed-'+sort);
searchType=0;
var query=document.getElementById('searchInput').value;
var feed=document.getElementById("chrome-stream-title").firstChild
try{;
if (feed!=null)
feed.getAttribute("href");
else
feed="";
}
catch(e){feed="";}
if (feed!=""){
start=0;
var rss="http://blogsearch.google.com/blogsearch_feeds?q=site:"+feed+"+"+query+"&start="+start+"&num="+num+"&scoring="+sort+"&output=atom";
debug(rss);
GM_xmlhttpRequest({
method: 'GET',
url: rss,
headers: {},
onload: function(responseDetails) {
searchComplete(responseDetails);
}
});
/*
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
'Accept': 'application/atom+xml,application/xml,text/xml',
*/
//window.location=blogsearch;
//var inside = document.getElementById("chrome")
//inside.parentNode.removeChild(inside);//.setAttribute("hidden","true");
}
else
onSearchAll(event,query);
}
function onSearchAll(event,query){
searchType=1;
query=query?query:document.getElementById('searchInput').value;
//var websearch="http://www.google.com/search?q="+query.replace(' ','+');
//window.location=websearch;
start=0;
//http://blogsearch.google.com/blogsearch_feeds?q=Google&num=100&output=atom&scoring=d
var rss="http://blogsearch.google.com/blogsearch_feeds?q="+query+"&start="+start+"&num="+num+"&scoring="+sort+"&output=atom";
debug(rss);
debug('All: '+query);
GM_xmlhttpRequest({
method: 'GET',
url: rss,
headers: {},
onload: function(responseDetails) {
searchComplete(responseDetails);
}
});
}
function searchComplete(details){
//debug(details.statusText);
if (details.status==200){
var parser = new DOMParser();
var dom = parser.parseFromString(details.responseText,
"application/xml");
var viewer=document.createElement("table");
viewer.setAttribute("cellspacing","0");
viewer.setAttribute("cellpadding","0");
viewer.setAttribute("border","0"),
viewer.className="round-box";
viewer.setAttribute("id","viewer-box");
//viewer.setAttribute('style','height: 100% !important;');
var viewerBody=document.createElement('tbody');
var tr=document.createElement("tr");
var td1=document.createElement("td"); td1.className="s tl"; tr.appendChild(td1);
var td2=document.createElement("td"); td2.className="s"; tr.appendChild(td2);
var td3=document.createElement("td"); td3.className="s tr sq"; tr.appendChild(td3);
viewerBody.appendChild(tr);
var tr=document.createElement("tr");
var td1=document.createElement("td"); td1.className="s"; tr.appendChild(td1);
var td2=document.createElement("td"); td2.className="c"; tr.appendChild(td2);
var topLinks=document.createElement('div'); topLinks.setAttribute('id','viewer-top-links');
var spanLinksParent=document.createElement('span'); spanLinksParent.setAttribute('id','viewer-all-new-links-parent');
var spanLinks=document.createElement('span'); spanLinks.setAttribute('id','viewer-new-links');
spanLinks.innerHTML="Sort by: ";
spanLinksParent.appendChild(spanLinks);
var spanRelevance=document.createElement('span'); spanRelevance.setAttribute('id','score-relevance');
spanRelevance.innerHTML="Relevance";
spanRelevance.className='link';
if (sort=='r') spanRelevance.setAttribute('style','font-weight: bold;');
spanRelevance.addEventListener('click',scoreRelevance,false);
spanLinksParent.appendChild(spanRelevance);
var spanDate=document.createElement('span'); spanDate.setAttribute('id','score-date');
spanDate.innerHTML="Date";
spanDate.className='link';
if (sort=='d')
spanDate.setAttribute('style','padding-left: 5px; font-weight: bold;');
else
spanDate.setAttribute('style','padding-left: 5px;');
spanDate.addEventListener('click',scoreDate,false);
spanLinksParent.appendChild(spanDate);
topLinks.appendChild(spanLinksParent);
var hiddenDiv=document.createElement('div'); hiddenDiv.setAttribute('id','message-area-internal'); hiddenDiv.className='hidden';
topLinks.appendChild(hiddenDiv);
td2.appendChild(topLinks);
var searchresults=document.createElement("div");
var height=document.body.clientHeight-160;
searchresults.setAttribute("id","entries");
searchresults.setAttribute('style','height: '+height+'px;width: 100%; visibility: visible;');//height: 240px; //overflow: auto; overflow-x: visible;
searchresults.setAttribute('class','single-source');
var entries=dom.getElementsByTagName("entry");
debug("Entries: "+entries.length);
for (var i=0;i<entries.length;i++){
searchresults.appendChild(getResult(entries[i]));
}
var scrollfiller=document.createElement('div'); scrollfiller.setAttribute('id','scroll-filler'); scrollfiller.setAttribute('style','height: 0px;');
var scrollfillermessage=document.createElement('div'); scrollfillermessage.setAttribute('id','scroll-filler-message'); scrollfillermessage.innerHTML="No more items";
scrollfiller.appendChild(scrollfillermessage);
searchresults.appendChild(scrollfiller);
td2.appendChild(searchresults);
var footer=document.createElement('div'); footer.setAttribute('id','chrome-footer-container');
footer.innerHTML=" "
var btnContainer=document.createElement('div'); btnContainer.className='button-container';
/*var nextpage = document.createElement("button");
nextpage.appendChild(document.createTextNode("Next Page"));
nextpage.className = "searchFeedButton";
//nestpage.addEventListener("click", onSearchFeed, false);
btnContainer.appendChild(nextpage);
*/
footer.appendChild(btnContainer);
td2.appendChild(footer);
tr.appendChild(td2);
var td3=document.createElement("td"); td3.className="cr"; tr.appendChild(td3);
viewerBody.appendChild(tr);
var tr=document.createElement("tr");
var td1=document.createElement("td"); td1.className="cbl"; tr.appendChild(td1);
var td2=document.createElement("td"); td2.className="cb"; tr.appendChild(td2);
var td3=document.createElement("td"); td3.className="cbr"; tr.appendChild(td3);
viewerBody.appendChild(tr);
viewer.appendChild(viewerBody);
var inside = document.getElementById("viewer-box");//chrome
//inside.parentNode.removeChild(inside);//.setAttribute("hidden","true");
inside.parentNode.replaceChild(viewer,inside);
//debug(details.responseText);
}
}
function getResult(entry){
var title=entry.getElementsByTagName("title")[0].firstChild.nodeValue;
var url=entry.getElementsByTagName("link")[0].getAttribute("href");
var content=entry.getElementsByTagName("content")[0].firstChild.nodeValue;
var blogTitle="";
try{
blogTitle=entry.getElementsByTagName("author")[0].getElementsByTagName("uri")[0];
blogTitle=blogTitle.textContent;
}catch(e){}
var result=document.createElement("div");
result.className="entry";
var table=document.createElement("table");
table.className="card";
var tbody=document.createElement("tbody");
var tr1=document.createElement("tr");
var td1=document.createElement("td"); td1.className="ctl"; tr1.appendChild(td1);
var td2=document.createElement("td"); td2.className="ct"; tr1.appendChild(td2);
var td3=document.createElement("td"); td3.className="ctr"; tr1.appendChild(td3);
tbody.appendChild(tr1);
var tr2=document.createElement("tr");
var td12=document.createElement("td"); td12.className="cl"; tr2.appendChild(td12);
var td22=document.createElement("td"); td22.className="cc";
var container=document.createElement('div');
container.className="entry-container";
var main=document.createElement('div');
main.className="entry-main";
var eleDate=document.createElement('div');
eleDate.className="entry-date";
var eleTitle=document.createElement("h2");
eleTitle.className="entry-totle";
var eleTitleLink=document.createElement("a");
eleTitleLink.setAttribute("target","_blank");
eleTitleLink.setAttribute("href",url);
var eleTitleSpan=document.createElement('span');
eleTitleSpan.innerHTML=title;
//eleTitleSpan.appendChild(document.createTextNode(title));
var eleTitleImg=document.createElement("img");
eleTitleImg.setAttribute("width","18");
eleTitleImg.setAttribute("height","18");
eleTitleImg.setAttribute("src","/reader/ui/1416249330-go-to.gif");
eleTitleLink.appendChild(eleTitleSpan);
eleTitle.appendChild(eleTitleLink);
eleTitle.appendChild(eleTitleImg);
main.appendChild(eleTitle);
var body=document.createElement("div");
body.className="entry-body";
body.innerHTML="<P>"+content+"</P>";
main.appendChild(body);
container.appendChild(main);
td22.appendChild(container);
tr2.appendChild(td22);
var td32=document.createElement("td"); td32.className="cr"; tr2.appendChild(td32);
tbody.appendChild(tr2);
var tr3=document.createElement("tr");
var td13=document.createElement("td"); td13.className="cbl"; tr3.appendChild(td13);
var td23=document.createElement("td"); td23.className="cb";
var actions=document.createElement("div"); actions.className="entry-actions";
var blogSpan=document.createElement("span");
blogSpan.innerHTML=blogTitle;
blogSpan.setAttribute('style','padding-left: 20px;');
actions.appendChild(blogSpan);
td23.appendChild(actions);
tr3.appendChild(td23);
var td33=document.createElement("td"); td33.className="cbr"; tr3.appendChild(td33);
tbody.appendChild(tr3);
table.appendChild(tbody);
result.appendChild(table);
return result;
}
function scoreRelevance(){
debug('score rel');
sort='r';
if (searchType==0){
onSearchFeed();
}
else{
onSearchAll();
}
}
function scoreDate(){
debug('score date-'+searchType);
sort='d';
if (searchType==0){
onSearchFeed();
}
else{
onSearchAll();
}
}
function debug(msg){
//GM_log(msg);
}