By Dan F
—
Last update
Jan 30, 2008
—
Installed
664 times.
// ==UserScript==
// @name Google Maps Walker
// @namespace dan@danfinnie.com
// @description Tells you how long a route will take when walking/biking, etc.
// @include http://maps.google.com*
// ==/UserScript==
// mode spd <-- In units of (whatever is displayed on Google maps) per hour. i.e. kph or mph.
var modes_of_transportation = [ ["walking", 4],
["biking", 12] ];
// YUI yahoo-min.js
if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{isArray:function(B){if(B){var A=YAHOO.lang;return A.isNumber(B.length)&&A.isFunction(B.splice);}return false;},isBoolean:function(A){return typeof A==="boolean";},isFunction:function(A){return typeof A==="function";},isNull:function(A){return A===null;},isNumber:function(A){return typeof A==="number"&&isFinite(A);},isObject:function(A){return(A&&(typeof A==="object"||YAHOO.lang.isFunction(A)))||false;},isString:function(A){return typeof A==="string";},isUndefined:function(A){return typeof A==="undefined";},hasOwnProperty:function(A,B){if(Object.prototype.hasOwnProperty){return A.hasOwnProperty(B);}return !YAHOO.lang.isUndefined(A[B])&&A.constructor.prototype[B]!==A[B];},_IEEnumFix:function(C,B){if(YAHOO.env.ua.ie){var E=["toString","valueOf"],A;for(A=0;A<E.length;A=A+1){var F=E[A],D=B[F];if(YAHOO.lang.isFunction(D)&&D!=Object.prototype[F]){C[F]=D;}}}},extend:function(D,E,C){if(!E||!D){throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");}var B=function(){};B.prototype=E.prototype;D.prototype=new B();D.prototype.constructor=D;D.superclass=E.prototype;if(E.prototype.constructor==Object.prototype.constructor){E.prototype.constructor=E;}if(C){for(var A in C){D.prototype[A]=C[A];}YAHOO.lang._IEEnumFix(D.prototype,C);}},augmentObject:function(E,D){if(!D||!E){throw new Error("Absorb failed, verify dependencies.");}var A=arguments,C,F,B=A[2];if(B&&B!==true){for(C=2;C<A.length;C=C+1){E[A[C]]=D[A[C]];}}else{for(F in D){if(B||!E[F]){E[F]=D[F];}}YAHOO.lang._IEEnumFix(E,D);}},augmentProto:function(D,C){if(!C||!D){throw new Error("Augment failed, verify dependencies.");}var A=[D.prototype,C.prototype];for(var B=2;B<arguments.length;B=B+1){A.push(arguments[B]);}YAHOO.lang.augmentObject.apply(this,A);},dump:function(A,G){var C=YAHOO.lang,D,F,I=[],J="{...}",B="f(){...}",H=", ",E=" => ";if(!C.isObject(A)){return A+"";}else{if(A instanceof Date||("nodeType" in A&&"tagName" in A)){return A;}else{if(C.isFunction(A)){return B;}}}G=(C.isNumber(G))?G:3;if(C.isArray(A)){I.push("[");for(D=0,F=A.length;D<F;D=D+1){if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}if(I.length>1){I.pop();}I.push("]");}else{I.push("{");for(D in A){if(C.hasOwnProperty(A,D)){I.push(D+E);if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}}if(I.length>1){I.pop();}I.push("}");}return I.join("");},substitute:function(Q,B,J){var G,F,E,M,N,P,D=YAHOO.lang,L=[],C,H="dump",K=" ",A="{",O="}";for(;;){G=Q.lastIndexOf(A);if(G<0){break;}F=Q.indexOf(O,G);if(G+1>=F){break;}C=Q.substring(G+1,F);M=C;P=null;E=M.indexOf(K);if(E>-1){P=M.substring(E+1);M=M.substring(0,E);}N=B[M];if(J){N=J(M,N,P);}if(D.isObject(N)){if(D.isArray(N)){N=D.dump(N,parseInt(P,10));}else{P=P||"";var I=P.indexOf(H);if(I>-1){P=P.substring(4);}if(N.toString===Object.prototype.toString||I>-1){N=D.dump(N,parseInt(P,10));}else{N=N.toString();}}}else{if(!D.isString(N)&&!D.isNumber(N)){N="~-"+L.length+"-~";L[L.length]=C;}}Q=Q.substring(0,G)+N+Q.substring(F+1);}for(G=L.length-1;G>=0;G=G-1){Q=Q.replace(new RegExp("~-"+G+"-~"),"{"+L[G]+"}","g");}return Q;},trim:function(A){try{return A.replace(/^\s+|\s+$/g,"");}catch(B){return A;}},merge:function(){var D={},B=arguments;for(var C=0,A=B.length;C<A;C=C+1){YAHOO.lang.augmentObject(D,B[C],true);}return D;},later:function(H,B,I,D,E){H=H||0;B=B||{};var C=I,G=D,F,A;if(YAHOO.lang.isString(I)){C=B[I];}if(!C){throw new TypeError("method undefined");}if(!YAHOO.lang.isArray(G)){G=[D];}F=function(){C.apply(B,G);};A=(E)?setInterval(F,H):setTimeout(F,H);return{interval:E,cancel:function(){if(this.interval){clearInterval(A);}else{clearTimeout(A);}}};},isValue:function(B){var A=YAHOO.lang;return(A.isObject(B)||A.isString(B)||A.isNumber(B)||A.isBoolean(B));}};YAHOO.util.Lang=YAHOO.lang;YAHOO.lang.augment=YAHOO.lang.augmentProto;YAHOO.augment=YAHOO.lang.augmentProto;YAHOO.extend=YAHOO.lang.extend;YAHOO.register("yahoo",YAHOO,{version:"2.4.1",build:"742"});
// YUI selector-min.js
(function(){var U=function(){};var D=YAHOO.util;var E={IDENT:"-?[_a-z]+[-\\w]*",BEGIN:"^",END:"$",OR:"|",SP:"\\s+"};var F={SIMPLE:"-+\\w_\\[\\]\\.\\|\\*\\'\\(\\)#:^~=$!\"",COMBINATORS:",>+~"};E.CAPTURE_IDENT="("+E.IDENT+")";E.BEGIN_SPACE="(?:"+E.BEGIN+E.OR+E.SP+")";E.END_SPACE="(?:"+E.SP+E.OR+E.END+")";E.SELECTOR="^("+E.CAPTURE_IDENT+"?(["+F.SIMPLE+"]*)?\\s*(["+F.COMBINATORS+"]?)?\\s*).*$";E.SIMPLE="("+E.CAPTURE_IDENT+"?(["+F.SIMPLE+"]*)*)?";E.ATTRIBUTES="\\[([a-z]+\\w*)+([~\\|\\^\\$\\*!=]=?)?\"?([^\\]\"]*)\"?\\]";E.CAPTURE_ATTRIBUTES="("+E.ATTRIBUTES+")";E.PSEUDO=":"+E.CAPTURE_IDENT+"(?:\\({1}"+E.SIMPLE+"\\){1})*";E.NTH_CHILD="^(?:(\\d*)(n){1}|(odd|even)$)*([-+]?\\d*)$";E.URL_ATTR="^href|url$";U.prototype={document:window.document,attrAliases:{"for":"htmlFor","class":"className"},shorthand:{"\\#(-?[_a-z]+[-\\w]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w]*)":"[className~=$1]"},operators:{"=":function(W,X){return W===X;},"!=":function(W,X){return W!==X;},"~=":function(W,Y){var X=E.BEGIN_SPACE+Y+E.END_SPACE;S[X]=S[X]||new RegExp(X);return S[X].test(W);},"|=":function(W,X){return H(E.BEGIN+X+"[-]?").test(W);},"^=":function(W,X){return W.indexOf(X)===0;},"$=":function(W,X){return W.lastIndexOf(X)===W.length-X.length;},"*=":function(W,X){return W.indexOf(X)>-1;},"":function(W,X){return W;}},pseudos:{"root":function(W){return W===W.ownerDocument.documentElement;},"nth-child":function(W,X){return R(W,X);},"nth-last-child":function(W,X){return R(W,X,null,true);},"nth-of-type":function(W,X){return R(W,X,W.tagName);},"nth-last-of-type":function(W,X){return R(W,X,W.tagName,true);},"first-child":function(W){return G(W.parentNode)[0]===W;},"last-child":function(X){var W=G(X.parentNode);return W[W.length-1]===X;},"first-of-type":function(W,X){return G(W.parentNode,W.tagName.toLowerCase())[0];},"last-of-type":function(X,Y){var W=G(X.parentNode,X.tagName.toLowerCase());return W[W.length-1];},"only-child":function(X){var W=G(X.parentNode);return W.length===1&&W[0]===X;},"only-of-type":function(W){return G(W.parentNode,W.tagName.toLowerCase()).length===1;},"empty":function(W){return W.childNodes.length===0;},"not":function(W,X){return !U.test(W,X);},"contains":function(W,X){return W.innerHTML.indexOf(X)>-1;},"checked":function(W){return W.checked===true;}},test:function(a,Y){a=U.document.getElementById(a)||a;var X=Y.split(",");if(X.length){for(var Z=0,W=X.length;Z<W;++Z){if(V(a,X[Z])){return true;}}return false;}return V(a,Y);},filter:function(Z,Y){if(!Z||!Y){}var c,a=Z,X=[],d=C(Y);if(!a.item){for(var b=0,W=Z.length;b<W;++b){if(!Z[b].tagName){c=U.document.getElementByid(Z[b]);if(c){a[a.length]=c;}else{}}}}X=Q(a,C(Y)[0]);B();return X;},query:function(X,Y,Z){var W=I(X,Y,Z);return W;}};var I=function(c,h,j,a){if(!c){return[];}var k=[];var Y=c.split(",");if(Y.length>1){for(var d=0,e=Y.length;d<e;++d){k=k.concat(arguments.callee(Y[d],h,j,true));}J();return k;}if(h&&!h.tagName){h=U.document.getElementById(h);if(!h){return[];}}h=h||U.document;var g=C(c);var f=g[N(g)],W=[],Z,X,b=g.pop();if(f){X=O(f.attributes);}if(X){if(X===b.id){W=[U.document.getElementById(X)]||h;}else{Z=U.document.getElementById(X);if(h===U.document||L(Z,h)){if(Z&&V(Z,null,f)){h=Z;}}else{return[];}}}if(h&&!W.length){W=h.getElementsByTagName(b.tag);}if(W.length){k=Q(W,b,j,a);}B();return k;};var L=function(){if(document.documentElement.contains&&!YAHOO.env.ua.webkit<420){return function(X,W){return W.contains(X);};}else{if(document.documentElement.compareDocumentPosition){return function(X,W){return !!(W.compareDocumentPosition(X)&16);};}else{return function(Y,X){var W=Y.parentNode;while(W){if(Y===W){return true;}W=W.parentNode;}return false;};}}}();var Q=function(Z,b,c,Y){var X=[],d;for(var a=0,W=Z.length;a<W;++a){d=Z[a];if(!V(d,null,b)||(Y&&d._found)){continue;}if(c){return[d];}if(Y){d._found=true;M[M.length]=d;}X[X.length]=d;}return X;};var V=function(Y,b,a){a=a||C(b).pop();if(!Y||Y._found||(a.tag!="*"&&Y.tagName.toLowerCase()!=a.tag)){return false;}var X=U.operators,W=U.pseudos,c=a.attributes,f,g=a.pseudos,Z=a.previous;for(var d=0,e=c.length;d<e;++d){f=(H(E.URL_ATTR).test(c[d][0]))?Y.getAttribute(c[d][0],2):Y[c[d][0]];if(X[c[d][1]]&&!X[c[d][1]](f,c[d][2])){return false;}}for(var d=0,e=g.length;d<e;++d){if(W[g[d][0]]&&!W[g[d][0]](Y,g[d][1])){return false;}}if(Z){if(Z.combinator!==","){return P[Z.combinator](Y,a);}}return true;};var M=[];var K=[];var S={};var J=function(){for(var X=0,W=M.length;X<W;++X){try{delete M[X]._found;}catch(Y){M[X].removeAttribute("_found");}}M=[];};var B=function(){if(!document.documentElement.children){return function(){for(var X=0,W=K.length;X<W;++X){delete K[X]._children;}K=[];};}else{return function(){};}}();var H=function(X,W){W=W||"";if(!S[X+W]){S[X+W]=new RegExp(X,W);}return S[X+W];};var T=function(W){return W.replace(H(E.BEGIN+E.SP+E.OR+E.SP+E.END,"g"),"");};var P={" ":function(X,W){X=X.parentNode;while(X&&X.tagName){if(V(X,null,W.previous)){return true;}X=X.parentNode;}return false;},">":function(X,W){return V(X.parentNode,null,W.previous);},"+":function(Y,X){var W=Y.previousSibling;while(W&&W.nodeType!==1){W=W.previousSibling;}if(W&&V(W,null,X.previous)){return true;}return false;},"~":function(Y,X){var W=Y.previousSibling;while(W){if(W.nodeType===1&&V(W,null,X.previous)){return true;}W=W.previousSibling;}return false;}};var G=function(){if(document.documentElement.children){return function(X,W){return W?X.children.tags(W):X.children;};}else{return function(a,X){if(a._children){return a._children;}var Z=[],b=a.childNodes;for(var Y=0,W=b.length;Y<W;++Y){if(b[Y].tagName){if(!X||b[Y].tagName.toLowerCase()===X){Z[Z.length]=b[Y];}}}a._children=Z;K[K.length]=a;return Z;};}}();var R=function(X,h,l,c){if(l){l=l.toLowerCase();}var j=S[E.NTH_CHILD]=S[E.NTH_CHILD]||new RegExp(E.NTH_CHILD);j.test(h);var g=parseInt(RegExp.$1,10),W=RegExp.$2,d=RegExp.$3,e=parseInt(RegExp.$4,10)||0,k=[];if(isNaN(g)){g=(W)?1:0;}if(d){g=2;op="+";W="n";e=(d==="odd")?1:0;}var f=G(X.parentNode,l);if(!f){return false;}if(g===0){if(f[e-1]===X){return true;
}else{return false;}}if(!c){for(var Y=e-1,Z=f.length;Y<Z;Y+=g){if(Y>=0&&f[Y]===X){return true;}}}else{for(var Y=f.length-e,Z=f.length;Y>=0;Y-=g){if(Y<Z&&f[Y]===X){return true;}}}return false;};var O=function(X){for(var Y=0,W=X.length;Y<W;++Y){if(X[Y][0]=="id"&&X[Y][1]==="="){return X[Y][2];}}};var N=function(Y){for(var X=0,W=Y.length;X<W;++X){if(O(Y[X].attributes)){return X;}}return -1;};var C=function(Y){if(!Y){return[];}var a,d=[],X,Z=U.attrAliases,W,c=H(E.ATTRIBUTES,"g"),b=H(E.PSEUDO,"g");Y=A(Y);while(Y.length&&H(E.SELECTOR).test(Y)){a={previous:a,simple:RegExp.$1,tag:RegExp.$2.toLowerCase()||"*",predicate:RegExp.$3,attributes:[],pseudos:[],combinator:RegExp.$4};while(X=b.exec(a.predicate)){a.predicate=a.predicate.replace(X[0],"");a.pseudos[a.pseudos.length]=X.slice(1);}while(X=c.exec(a.predicate)){if(Z[X[1]]){X[1]=Z[X[1]];}W=X.slice(1);if(W[1]===undefined){W[1]="";}a.attributes[a.attributes.length]=W;}a.id=O(a.attributes);if(a.previous){a.previous.combinator=a.previous.combinator||" ";}d[d.length]=a;Y=T(Y.substr(a.simple.length));}return d;};var A=function(X){var Y=U.shorthand;var Z=X.match(H(E.CAPTURE_ATTRIBUTES,"g"));if(Z){X=X.replace(H(E.CAPTURE_ATTRIBUTES,"g"),"REPLACED_ATTRIBUTE");}for(var b in Y){X=X.replace(H(b,"g"),Y[b]);}if(Z){for(var a=0,W=Z.length;a<W;++a){X=X.replace("REPLACED_ATTRIBUTE",Z[a]);}}return X;};U=new U();U.CHARS=F;U.TOKENS=E;D.Selector=U;})();YAHOO.register("selector",YAHOO.util.Selector,{version:"2.4.1",build:"742"});
// Return true if the given index is the last element of the given array
function isLastElement(i, ary)
{
return i == ary.length - 1;
}
var distance_div = YAHOO.util.Selector.query("td.timedist div div")[0];
if (true)
{
var distance = parseFloat(
distance_div
.innerHTML
.match(/^\W*([0-9\,\.]+)/)[1]
.replace(",", "")
);
// Add in our modes of transportation, construct tooltip
var tooltip = ""
for(var i = 0; i < modes_of_transportation.length; i++)
{
var verb = modes_of_transportation[i][0];
var mph = modes_of_transportation[i][1];
var minutes = distance / mph * 60;
var hours = Math.round(minutes / 60);
minutes = Math.round(minutes % 60);
if (hours > 0)
tooltip += hours.toString() + " hours and ";
tooltip += minutes.toString() + " minutes " + verb;
if (!isLastElement(i, modes_of_transportation))
tooltip += ", ";
}
// Attach tooltip
distance_div.setAttribute("title", tooltip);
}