// ==UserScript==
// @name Google Hit Hider by Domain
// @namespace JeffersonScher
// @copyright © 2011 Jefferson Scher
// @license CC BY http://creativecommons.org/licenses/by/3.0/
// @description Filter Google search results to hide unwanted sites by domain v0.72 2011-02-03
// @include http://www.google.tld/*
// @include http://news.google.tld/*
// DISCLAIMER: Use at your own risk. Functionality and harmlessness NOT warranteed.
// ==/UserScript==
// Edit these to change the style of the script's buttons and panes, e.g., for accessibility
GM_addStyle("div.ghhider{color:#888;}");
GM_addStyle("button.ghhider{color:#555;background-color:#fcfcfc;font-size:0.85em;margin-left:4px;border:1px solid #ccc;-moz-border-radius:4px;padding:2px 3px;}");
GM_addStyle("button.ghhider:hover{color:#000;background:#ff8;}");
GM_addStyle(".ghh1time{background:#eee;}");
GM_addStyle(".ghhpane{position:absolute;color:#333;background-color:#fcfcfc;border:1px solid #ccc;-moz-border-radius:4px;padding:0.25em 1.5em;display:none}");
GM_addStyle("#ghhsitelist {background:#fff;list-style-type:none;}");
GM_addStyle("#ghhsitelist li{width:95%;line-height:1.5em;padding:0 0.25em;cursor:pointer;}");
GM_addStyle(".ghhdel{text-decoration:line-through;color:#333;}");
var hosts, prefShow, hhd;
if (document.body){
// Retrieve list from settings and stash in the page
hosts = GM_getValue("hideyhosts");
prefShow = GM_getValue("shownotc");
if (!hosts || hosts.length == 0) hosts = "|bigresource.com|";
hhd = document.createElement("div");
hhd.appendChild(document.createTextNode(hosts));
hhd.id = "hideyhostlist";
hhd.style.visibility = "hidden";
if (!prefShow || prefShow.length == 0) {
prefShow = "Y";
}
if (prefShow == "Y") hhd.setAttribute("showbtn","yes");
else hhd.setAttribute("showbtn","no");
document.body.appendChild(hhd);
// Add buttons, hide unwanted domains
hidehits(false);
// Create skeleton of manage form
if (!document.getElementById("ghhmngform")) addManageForm();
// Add manage button
if (!document.getElementById("ghhMngBtn")) addMngBtn();
// Create block form
if (!document.getElementById("ghhblockform")) addBlockForm();
// Watch for changes that could be new instant or AJAX search results
document.body.addEventListener("DOMSubtreeModified", checkOlist, false);
}
function hidehits(ovrd){
if (!document.getElementById("res")) return;
var list = document.getElementById("res").getElementsByTagName("ol")[0];
if (!list) return;
var liels, hosts, showpref, hiders, nhider, i, j, k, hid, ael, dom, dompart, btn, apar;
liels = list.getElementsByTagName("li");
hosts = "";
showpref = document.getElementById("hideyhostlist").getAttribute("showbtn");
for (i=0; i<liels.length; i++){
if (liels[i].parentNode.nodeName.toLowerCase() != "ol") return; // Images, for example
hiders = liels[i].getElementsByClassName("ghhider");
nhider = hiders.length;
if (nhider == 0 || ovrd == true){ // skip if a button is there
if (hosts.length == 0){
hosts = document.getElementById("hideyhostlist").textContent;
if (!hosts || hosts.length == 0) hosts = "|bigresource.com|";
}
hid = false;
ael = liels[i].getElementsByTagName("a")[0]; // first link only (no work in video or book blocks)
if (ael){if(ael.hasAttribute("href")){if (ael.getAttribute("href").indexOf("http")==0){
dom = ael.getAttribute("href").split("/")[2];
dompart = dom;
while (dompart.indexOf(".")> -1) {
if (hosts.indexOf("|"+dompart+"|")>-1) { // These domains suck
if (nhider > 0){
for (k=hiders.length-1; k=0; k--){
hiders[k].parentNode.removeChild(hiders[k]);
nhider = liels[i].getElementsByClassName("ghhider").length;
}
}
if (liels[i].className.indexOf("ghh1time")<0){
if (showpref=="yes") replaceHit(dompart,ael,liels[i],"");
else replaceHit(dompart,ael,liels[i],"none");
for (j=0; j<liels[i].children.length; j++){
if (liels[i].children[j].className.indexOf("ghhider")<0) liels[i].children[j].style.display="none";
}
}
hid = true;
break;
}
else {
dompart = dompart.slice(dom.indexOf(".")+1);
}
}
if (hid == false && nhider > 1) { // Remove previous block
liels[i].removeChild(liels[i].children[0]);
for (j=0; j<liels[i].children.length; j++){
if (liels[i].children[j].style.display=="none") liels[i].children[j].style.display="";
}
}
if (hid == false && nhider == 0) { // These domains are okay
apar = ael.parentNode;
if (apar != undefined) {
btn = document.createElement("button");
btn.appendChild(document.createTextNode("block"));
btn.className="ghhider";
btn.setAttribute("meta",dom);
btn.setAttribute("title","Add "+dom+" to the block list");
btn.addEventListener("click",showbfd,true);
apar.parentNode.insertBefore(btn,apar.nextSibling);
}
}
}}}
}
}
if (!document.getElementById("ghhMngBtn")) addMngBtn();
else if(document.getElementById("ghhMngBtn").parentNode.id != "guser") moveMngBtn();
if (document.getElementsByClassName("unbtn").length > 1) undupMngBtn();
}
function replaceHit(sdomain,oa,oli,ddis){
var fc = oli.firstChild;
if (fc.nodeName.toLowerCase()=="div" && fc.className.indexOf("ghhider")>-1) return;
var dnew = document.createElement("div");
dnew.appendChild(document.createTextNode(oa.textContent+" on "+sdomain));
dnew.className="ghhider ghhd";
dnew.setAttribute("title","Click for available actions");
dnew.style.cursor = "pointer";
dnew.style.display = ddis;
dnew.addEventListener("click",showactions,true);
oli.insertBefore(dnew,oli.firstChild);
var btn = document.createElement("button");
btn.appendChild(document.createTextNode("Show Hit"));
btn.className="ghhider";
btn.setAttribute("title","Show this result, but don't unblock the site");
btn.style.display="none";
btn.addEventListener("click",reshow,true);
dnew.appendChild(btn);
btn = document.createElement("button");
btn.appendChild(document.createTextNode("Unblock"));
btn.className="ghhider";
btn.setAttribute("title","Unblock this site");
btn.style.display="none";
btn.setAttribute("dom",sdomain);
btn.addEventListener("click",unblock,true);
dnew.appendChild(btn);
}
function checkOlist(e){ // Check for new results
// Ignore events on some elements
if (e.target.nodeName == "BODY") return;
if (e.target.hasAttribute("id")){
if (e.target.id == "guser" || e.target.id == "foot" || e.target.id == "showNotcBtn" || e.target.id == "hideyhostlist" ||
e.target.id == "ghhtemp" || e.target.id == "ghhblockform" || e.target.id == "ghhmanageform" || e.target.id == "ghhsitelist") return;
}
if (e.target.hasAttribute("class")){
if (e.target.className.indexOf("ghhider") > -1 || e.target.className.indexOf("goog-date-picker") > -1) return;
}
// Hide hits if list is visible now
var ir = document.getElementById("res");
if (ir){
var olist = ir.getElementsByTagName("ol")[0];
if (olist){
if (window.getComputedStyle(olist,null).getPropertyValue("visibility") == "visible" &&
window.getComputedStyle(olist,null).getPropertyValue("display") != "none"){
//GM_log("Calling hidehits; event target nodeName="+e.target.nodeName+"; id="+e.target.id+"; className="+e.target.className);
if (olist.getElementsByTagName("li").length > 0) hidehits(false);
}
}
}
}
// Show hit without unblocking
function reshow(e){
var liel, k;
liel = e.target.parentNode.parentNode;
while (liel.nodeName.toLowerCase()!= "li"){
liel=liel.parentNode;
if (liel.nodeName.toLowerCase()=="body") return;
}
liel.className += " ghh1time";
for (k=1; k<liel.children.length; k++) liel.children[k].style.display="";
e.target.parentNode.style.display="none"; // Hide div
}
// Hide or Show hit notices
function updtpref(e){
var showstat, btns, j, hds, s;
showstat = document.getElementById("hideyhostlist").getAttribute("showbtn");
if (showstat == "yes"){
if (e.target.id) if (e.target.id == "showNotcBtn") alert("Blocked site notices are displayed");
else {
if (confirm("No longer show titles or buttons for suppressed results?")){
GM_setValue("shownotc","N");
document.getElementById("hideyhostlist").setAttribute("showbtn","no");
if(e.target.className.indexOf("ghhsave")<0) e.target.parentNode.style.display="none";
var btns = e.target.parentNode.getElementsByTagName("button");
for (j=0; j<btns.length; j++) {
if(btns[j].className.indexOf("ghhsave")<0) btns[j].style.display = "none";
}
togHiderDivs("no");
}
}
} else {
if (e.target.id) if (e.target.id == "hideNotcBtn") alert("Blocked site notices are hidden");
else {
hds = document.getElementsByClassName("ghhd");
if (hds.length > 0) s = (hds.length == 1) ? "is 1 blocked hit" : "are "+hds.length+" blocked hits";
else s = "are no blocked hits";
if (confirm("Show titles and buttons for suppressed results? (There "+s+" on this page.)")){
GM_setValue("shownotc","Y");
document.getElementById("hideyhostlist").setAttribute("showbtn","yes");
e.target.parentNode.style.display="";
togHiderDivs("yes");
}
}
}
e.target.blur();
}
function togHiderDivs(sShow){
var dh, i;
dh = document.getElementsByClassName("ghhider");
for(i=0;i<dh.length;i++) {
if (dh[i].nodeName.toLowerCase() == "div") {
if (sShow == "yes") dh[i].style.display = "";
else dh[i].style.display = "none";
}
}
}
function unblock(e){
var tgt, sdom, hlist;
tgt = e.target;
sdom = tgt.getAttribute("dom");
if (sdom.length<4){
alert("Problem with domain to unblock");
return;
}
hlist = GM_getValue("hideyhosts");
hlist = hlist.replace("|"+sdom,"");
GM_setValue("hideyhosts",hlist);
document.getElementById("hideyhostlist").innerHTML = hlist;
hidehits(true);
if (document.getElementById("ghhmngform")){
if(document.getElementById("ghhmngform").style.display=="block") refreshSiteList();
}
}
function showactions(e){
var btns = e.target.getElementsByTagName("button");
for(var i=0; i<btns.length; i++){
btns[i].style.display = "";
}
}
function addMngBtn(){
var mbtn;
mbtn = document.createElement("button");
mbtn.appendChild(document.createTextNode("Manage Hiding"));
mbtn.className="ghhider unbtn";
mbtn.setAttribute("title","Manage Google Hit Hider Settings");
mbtn.id = "ghhMngBtn";
mbtn.addEventListener("click",showManageForm,true);
if (document.getElementById("guser")) {
document.getElementById("guser").appendChild(mbtn);
} else {
mbtn.style.position = "absolute";
mbtn.style.right = "0";
mbtn.style.top = "1.5em";
document.body.appendChild(mbtn);
}
}
function moveMngBtn(){
var newpar, mbtn;
newpar = document.getElementById("guser");
if (!newpar) return;
mbtn = document.getElementById("ghhMngBtn");
mbtn.style.position = "";
newpar.appendChild(mbtn);
}
function undupMngBtn(){
var unbtns = document.getElementsByClassName("unbtn");
while (unbtns.length > 1){
unbtns[unbtns.length - 1].parentNode.removeChild(unbtns[unbtns.length - 1]);
}
}
function addBlockForm(){
var bfd = document.createElement("div");
bfd.id = "ghhblockform";
bfd.className = "ghhpane";
bfd.setAttribute("style","z-index:105;")
bfd.innerHTML = "<form onsubmit=\"return false;\"><p><strong>Add to blocklist:</strong></p><p><label style=\"white-space:pre\"><input type=\"radio\" name=\"ghhdom\" value=\"f\"> <span id=\"ghhfulldom\"></span></label><br>" +
"<label><input type=\"radio\" name=\"ghhdom\" value=\"p\"> <span id=\"ghhpartdom\"></span></label></p><p style=\"text-align:center;white-space:pre\"><button id=\"ghhbf1\">OK</button> <button id=\"ghhbf2\">Cancel</button></p></form>";
document.body.appendChild(bfd);
document.getElementById("ghhbf1").addEventListener("click",addblock,true);
document.getElementById("ghhbf2").addEventListener("click",ghhcloseform,true);
}
function showbfd(e) {
var bbtn, bfdiv, fdom, pdom, fspan, pspan, tdiv, lt;
bbtn = e.target;
fdom = bbtn.getAttribute("meta");
if (!document.getElementById("ghhblockform")) addBlockForm();
fspan = document.getElementById("ghhfulldom");
fspan.textContent = fdom;
fspan.previousElementSibling.checked = true;
pdom = fdom.substr(fdom.indexOf(".")+1);
pspan = document.getElementById("ghhpartdom");
if (pdom.indexOf(".") > -1) {
pspan.textContent = pdom;
pspan.parentNode.style.display = "";
} else {
pspan.parentNode.style.display = "none";
}
bfdiv = document.getElementById("ghhblockform");
tdiv = document.createElement("div");
tdiv.id = "ghhtemp";
lt = bbtn.offsetLeft + bbtn.offsetWidth + 16;
tdiv.setAttribute("style", "position:absolute;left:" + lt + "px;top:-3.5em;z-index:100;");
if (bbtn.nextElementSibling) bbtn.parentNode.insertBefore(tdiv,bbtn.nextElementSibling);
else bbtn.parentNode.appendChild(tdiv);
tdiv.appendChild(bfdiv);
bfdiv.style.display = "block";
document.getElementById("ghhbf1").focus();
}
function addblock(e){
// adds to greasemonkey.scriptvals.JeffersonScher/Google Hit Hider by Domain.hideyhosts
// to repair or reset, use about:config
var hosts, els, i, sdom, useredit, btns, oli;
hosts = GM_getValue("hideyhosts");
if (!hosts || hosts.length == 0) hosts = "|bigresource.com|";
els = e.target.form.getElementsByTagName("input");
for (i=0; i<els.length; i++){
if(els[i].checked == true){
sdom = els[i].nextElementSibling.textContent;
break;
}
}
ghhcloseform(e);
hosts += sdom + "|";
GM_setValue("hideyhosts",hosts);
document.getElementById("hideyhostlist").innerHTML = hosts;
hidehits(true);
if (document.getElementById("ghhmngform")){
if(document.getElementById("ghhmngform").style.display=="block") refreshSiteList();
}
}
function ghhcloseform(e){
if(e.target.id.indexOf("ghhbf") == 0){
var bfdiv = document.getElementById("ghhblockform");
var tdiv = document.getElementById("ghhtemp");
bfdiv.style.display = "none";
document.body.appendChild(bfdiv);
tdiv.parentNode.removeChild(tdiv);
}
if(e.target.id.indexOf("ghhmf") == 0){
document.getElementById("ghhmngform").style.display = "none";
}
}
function addManageForm(){
var mfd = document.createElement("div");
mfd.id = "ghhmngform";
mfd.className = "ghhpane";
mfd.setAttribute("style","position:fixed;top:4px;right:4px;z-index:101;");
mfd.innerHTML = "<form onsubmit=\"return false;\"><div style=\"text-align:center\"><p><strong>Manage Google Hit Hider</strong></p><p style=\"border-bottom:1px solid black;padding-bottom:1em;\">" +
"<button id=\"hideNotcBtn\" title=\"Suppress hidden result titles\" class=\"ghhider ghhsave\">Hide Notices</button>" +
"<button id=\"showNotcBtn\" title=\"UnHide Hidden Hits\" class=\"ghhider ghhsave\">Show Notices</button></p></div>" +
"<p>Click to remove from block list:</p><div style=\"margin-top:1em;height:15em;overflow-y:scroll;border:1px solid #333;\"><ul id=\"ghhsitelist\"></ul></div><p style=\"text-align:center;white-space:pre\">" +
"<button id=\"ghhmf1\">Save Changes</button> <button id=\"ghhmf2\">Close</button></p></form>";
document.body.insertBefore(mfd,document.body.children[0]);
document.getElementById("ghhsitelist").addEventListener("click",togglesite,true);
document.getElementById("ghhmf1").addEventListener("click",saveedits,true);
document.getElementById("ghhmf2").addEventListener("click",ghhcloseform,true);
document.getElementById("hideNotcBtn").addEventListener("click",updtpref,true);
document.getElementById("showNotcBtn").addEventListener("click",updtpref,true);
}
function togglesite(e){
if(e.target.className == "ghhdel") e.target.className = "";
else e.target.className = "ghhdel";
}
function saveedits(e){
var slist, i, stemp, hld, sarray, litem;
slist = document.getElementById("ghhsitelist");
stemp = "";
for (i=0;i<slist.children.length;i++){
if (slist.children[i].nodeName.toLowerCase() == "li") {
if(slist.children[i].className != "ghhdel") stemp += slist.children[i].textContent + "|";
}
}
hld = document.getElementById("hideyhostlist");
hld.innerHTML = "|" + stemp;
GM_setValue("hideyhosts","|" + stemp);
hidehits(true);
refreshSiteList(e);
}
function showManageForm(e){
var mfd;
if (!document.getElementById("ghhmngform")) addManageForm();
mfd = document.getElementById("ghhmngform");
refreshSiteList();
mfd.style.display = "block";
e.target.blur();
}
function refreshSiteList(e){
var hld, sarray, slist, i, litem;
hld = document.getElementById("hideyhostlist");
sarray = hld.innerHTML.substr(1).split("|");
slist = document.getElementById("ghhsitelist");
slist.innerHTML = "";
for (i=0; i<sarray.length-1; i++){
litem = document.createElement("li");
litem.textContent = sarray[i];
litem.value = sarray[i];
if (i % 2 == 0) litem.style.background = "#fcfcaa";
slist.appendChild(litem);
}
}
Mozilla add on,User script,Grease Monkey Script, greasemonkey userscripts, updater userscripts mafia wars userscripts mafia wars autoplayer userscripts mafia wars wall userscripts scripts userscripts travian greasemonkey greasemonkey download greasemonkey facebook greasemonkey tutorial greasemonkey youtube greasemonkey travian greasemonkey chrome greasemonkey mafia wars greasemonkey mafia wars autoplayer
Friday, February 4, 2011
Filter Google search results to hide unwanted sites by domain
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment