- // ==UserScript==
- // @name Linkify Google Search Results
- // @namespace @namespace Andrew Basta
- // @description When you mouseover the green url below google search results, the url is linkified
- // @include http://www.google.co*/*
- // @version 0.0.1.20140621045118
- // ==/UserScript==
-
- //User variables
- var indent = 1; //set to 0 for no indentation animation
- var marginPix = 8; //number of pixels to indent
- var marginCount = 10; //number of steps that are run to complete indentation
- var whiteSpaces = 2; //number of whitespaces that show up between the links
- var linkColor = "green"; //change to "default" if you're using a custom style and prefer to keep the native color,
- //or if you're not using a custom style but prefer blue links..or change to whatever you want.
- var boldRoot = 1; // set to 0 for no bold on the root domain of the url lists
- var splitOnLoad = 0; // set to 1 to split all the urls on pageload
-
- //fadeInMargin Adapted from www.hesido.com
- function fadeInMargin (element){
- if (element.intFunction)
- window.clearInterval(element.intFunction);
- var count = 0;
- element.intFunction = window.setInterval(
- function() {
- element.currentWidth = easeInOut(0, marginPix, marginCount, count, 0.5);
- element.style.marginLeft = element.currentWidth+"px";
- count++;
- if (count > marginCount) {
- window.clearInterval(element.intFunction);
- }
- }
- , 5);
- }
-
- //fadeOutMargin Adapted from www.hesido.com
- function fadeOutMargin (element){
- if (element.intFunction)
- window.clearInterval(element.intFunction);
- var count = 0;
- element.intFunction = window.setInterval(
- function() {
- element.currentWidth = easeInOut(marginPix, 0, marginCount, count, 0.5);
- element.style.marginLeft = element.currentWidth+"px";
- count++;
- if (count > marginCount) {
- window.clearInterval(element.intFunction);
- }
- }
- , 8);
- }
-
- //Generic Animation Step Value Generator By www.hesido.com
- function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
- var delta = maxValue - minValue;
- var stepp = minValue+(Math.pow(((1 / totalSteps) * actualStep), powr) * delta);
- return Math.ceil(stepp)
- }
-
- function hover(event) {
- var linkText = [];
- var count = 0;
-
- this.innerHTML = "";
- for (var i=0; i<linkListText[this.id].length; i++) {
- if (linkListText[this.id][i] != "...") {
- if (linkColor == "default") this.innerHTML = this.innerHTML.concat("<a href=http://", linkListURL[this.id][i], ">",linkListText[this.id][i],"/</a>");
- else if ((i==0) && (boldRoot==1)) this.innerHTML = this.innerHTML.concat("<em><a href=http://", linkListURL[this.id][i], " style=color:", linkColor, ">",linkListText[this.id][i],"/</a></em>");
- else this.innerHTML = this.innerHTML.concat("<a href=http://", linkListURL[this.id][i], " style=color:", linkColor, ">",linkListText[this.id][i],"/</a>");
-
- for (var j=0; j<whiteSpaces; j++) {
- this.innerHTML = this.innerHTML.concat(" ");
- }
- }
- else break;
- }
- this.removeEventListener('mouseover', hover, false);
- this.addEventListener('mouseout', leave, false);
- if (indent) fadeInMargin(this);
- }
-
- function splitAll() {
- var linkText = [];
- var count = 0;
-
- for (var i=0; i<linkList.length; i++) {
- linkList[i].innerHTML = "";
- for (var j=0; j<linkListText[linkList[i].id].length; j++) {
- if (linkListText[linkList[i].id][j] != "...") {
- if (linkColor == "default") linkList[i].innerHTML = linkList[i].innerHTML.concat("<a href=http://", linkListURL[linkList[i].id][j], ">",linkListText[linkList[i].id][j],"/</a>");
- else if ((j==0) && (boldRoot==1)) linkList[i].innerHTML = linkList[i].innerHTML.concat("<em><a href=http://", linkListURL[linkList[i].id][j], " style=color:", linkColor, ">",linkListText[linkList[i].id][j],"/</a></em>");
- else linkList[i].innerHTML = linkList[i].innerHTML.concat("<a href=http://", linkListURL[linkList[i].id][j], " style=color:", linkColor, ">",linkListText[linkList[i].id][j],"/</a>");
-
- for (var k=0; k<whiteSpaces; k++) {
- linkList[i].innerHTML = linkList[i].innerHTML.concat(" ");
- }
- }
- else break;
- }
- }
- }
-
-
- //contains from mike hall, brainjar.com
- function contains(a, b) {
- // Return true if node a contains node b.
- while (b.parentNode)
- if ((b = b.parentNode) == a)
- return true;
- return false;
- }
-
- //leave adapted from mike hall, brainjar.com
- //basically, this makes sure that the link you just moused out of was the last link moused into...
- function leave(event) {
- if (window.event) {
- current = this;
- related = window.event.toElement;
- }
- else {
- current = event.currentTarget;
- related = event.relatedTarget;
- }
-
- if (current != related && !contains(current, related)) {
- this.textContent = linkListOrig[this.id];
- this.removeEventListener('mouseout', leave, false);
- this.addEventListener('mouseover', hover, false);
- if (indent) fadeOutMargin(this);
- }
- }
-
- var currentLink;
- var linkList = document.getElementsByTagName('cite'); //gets all the green urls
- var linkListText = []; // holds the split text of the green url
- var linkListOrig = []; // holds a copy of the original green url
- var linkListURL = []; // holds the urls of all individual links
-
- for (var i=0; i<linkList.length; i++) {
- //Indices of extraneous clutter, i.e. size of linked document and preceding http:// in green url. I don't like those.
- var trim0 = linkList[i].textContent.indexOf("://");
- var trim1 = linkList[i].textContent.indexOf(" - ");
- var trim2 = linkList[i].textContent.indexOf("/ - ");
- var trim3 = linkList[i].textContent.indexOf("/.../");
- var slashTest = linkList[i].textContent.indexOf("/");
-
- linkList[i].id = i;
-
- if(linkList[i].nextSibling != null && slashTest > -1) { //make sure the url has /'s in it..this is where i split it up
- //Trimming the extraneous clutter here...
- if(trim1>-1){
- linkListText[i] = linkList[i].textContent.substring((trim0==-1)?0:(trim0+3),((trim1==(trim2+1))?trim2:trim1));
- linkListOrig[i] = linkList[i].textContent.substring((trim0==-1)?0:(trim0+3),((trim1==(trim2+1))?(trim2+4):(trim1+3)));
- linkListURL[i] = linkList[i].textContent.substring((trim0==-1)?0:(trim0+3),((trim1==(trim2+1))?trim2:trim1));
- }
- else {
- linkListText[i] = linkList[i].textContent;
- linkListOrig[i] = linkList[i].textContent;
- linkListURL[i] = linkList[i].textContent;
- }
-
- if (trim3 > -1) {
- linkListText[i] = linkList[i].textContent.substring(0,trim3);
- linkListOrig[i] = linkList[i].textContent.substring(0,trim3);
- linkListURL[i] = linkList[i].textContent.substring(0,trim3);
- }
-
- linkList[i].textContent = linkListOrig[i]; //Copy the original green url for safekeeping
-
- linkListText[i] = linkListText[i].split("/"); //Split up the url
- linkListURL[i] = linkListURL[i].split("/"); //Split up the url
-
- //Concatenate the individual links to new urls...
- for (var j=0; j<linkListURL[i].length; j++)
- {
- if (j>0) {
- if (linkListURL[i][j] != null) linkListURL[i][j] = linkListURL[i][j-1].concat("/",linkListURL[i][j]);
- }
- }
-
- if(!splitOnLoad) linkList[i].addEventListener('mouseover', hover, false);
- }
- //If there are /'s in the original url, make sure that it's a valid link, and not just green text that google threw in (like for adverts and such)
- else if (slashTest > -1 || (linkList[i].nextSibling != null && linkList[i].nextSibling.tagName == "BR")) {
- linkListText[i] = linkList[i].textContent;
- linkListOrig[i] = linkList[i].textContent;
- linkListURL[i] = linkList[i].textContent;
-
- linkList[i].textContent = linkListOrig[i];
-
- linkListText[i] = linkListText[i].split("/");
- linkListURL[i] = linkListURL[i].split("/");
-
- for (var j=0; j<linkListURL[i].length; j++)
- {
- if (j>0) {
- if (linkListURL[i][j] != null) linkListURL[i][j] = linkListURL[i][j-1].concat("/",linkListURL[i][j]);
- }
- }
-
- if(!splitOnLoad) linkList[i].addEventListener('mouseover', hover, false);
- }
- else {
- linkListText[i] = linkList[i].textContent;
- linkListOrig[i] = linkList[i].textContent;
- linkListURL[i] = linkList[i].textContent;
-
- linkListText[i] = linkListText[i].split("/");
- linkListURL[i] = linkListURL[i].split("/");
-
- for (var j=0; j<linkListURL[i].length; j++)
- {
- if (j>0) {
- if (linkListURL[i][j] != null) linkListURL[i][j] = linkListURL[i][j-1].concat("/",linkListURL[i][j]);
- }
- }
-
- if(!splitOnLoad) linkList[i].addEventListener('mouseover', hover, false);
- }
- }
-
- if(splitOnLoad) {
- splitAll();
- }