User:JesseW/BookmarkletsUniversal

While there are a lot of good bookmarklets out there, they are seperated onto many different sites, typically by creator. I want to remedy this, by listing all the bookmkarklets that I can find in one place, here. You are welcome to help(this is a wiki, after all.)

I'm going to start by listing all the bookmarklet containing sites that I can find, in the list below. Then I'll copy each of their bookmarklets below. I won't use line divisions, to make copying easier, which will unfortunetly make the page horribly wide. If anyone has a better idea how to handle this, I'd love to hear it. JesseW 03:08, 4 Dec 2004 (UTC)

Note The problem of bookmarklet windows being behind main windows in Mozilla has been solved. It currently requires a few small tweaks. See https://bugzilla.mozilla.org/show_bug.cgi?id=232605 for details. YAY!! JesseW 21:56, 10 Dec 2004 (UTC)

One nice tip I found (on gazingus.org) was regarding calling the bookmarklet from within itself, for various recursive purposes. This can be handled by the form: arguments.callee, which refers to the function being called.

Many bookmarklets
(above, quotes are from ) (above descriptions are from
 * http://www.accessify.com/tools-and-wizards/accessibility-checking-favelets.asp
 * http://centricle.com/tools/favelets/
 * http://stilleye.com/temp/bmarks.html
 * http://www.fjordaan.uklinux.net/moveabletype/fblog/archives/000059.html - a few not from other pages, mostly an index like this page...
 * http://endquote.com/ - currently down, but some are copied at fjordaan, above.
 * http://13thparallel.org/ - no bookmarklets, but one at fjordaan is sourced from here...
 * http://www.squarefree.com/bookmarklets/
 * http://www.worldtimzone.com/bookmarklets/
 * Mark Pilgrim - "Subscribe to blogs using http://diveintomark.org/projects/autorss/amphetadesk.html or http://diveintomark.org/projects/autorss/radio.html."
 * http://bookmarklets.com/ - Done
 * http://web.archive.org/web/http://userpage.fu-berlin.de/~wschwarz/scripts/english.htm - "Web development." Broken
 * http://www.philburns.com/bookmarklets.html Done
 * http://web.archive.org/web/http://a205.ryd.student.liu.se/bookmarklets.html - "Dealing with annoying pages, working with cookies and forms." Broken
 * http://www.smokinggun.com/code/bookmarklets.php - Dealing with annoying pages. IE and Mozilla. Done
 * http://subsimple.com/bookmarklets/ - "General and web development bookmarklets, slightly favoring Internet Explorer." Done
 * http://samrod.com/ - "Search, web development." Done
 * http://sam-i-am.com/work/bookmarklets/dev_debugging.html - "Web development." Done
 * http://www23.brinkster.com/favelets/favelets.htm - "Web development." Broken
 * http://liorean.web-graphics.com/ - "style sheet viewer, script viewer. Powerful but confusing." Done
 * http://grayrest.com/moz/resources/bookmarks.shtml Broken
 * http://www.pixy.cz/pixylophone/favelets/ - "track computed style property, simple dom inspector." Done
 * http://tantek.com/favelets/ Done
 * Stuart Langridge - http://www.kryogenix.org/days/473.html. Done
 * http://dmoz.org/Computers/Software/Internet/Clients/WWW/Browsers/Bookmarklets/ tools by and for the editors
 * http://www.sawks.com/bookmarklets/ opens lots of windows Broken
 * http://www24.brinkster.com/bookmarklets/collection.asp (is now subSimple) Broken
 * http://www.the5k.org/description.asp/entry_id=1041 uses images on page Done
 * http://www.diveintomark.org/archives/2002/05/31.html looks for RSS feed for page
 * http://weblog.infoworld.com/udell/stories/2002/12/11/librarylookup.html tells if a book is available at your library
 * http://www.apple.com/safari/ bookmarklets from *http://www.apple.com/applescript/safari/bookmarks.html and *http://www.macworld.com/2004/02/secrets/marchgeekfactor/
 * How To Create - Bookmarklets - http://www.howtocreate.co.uk/bookmarklets.html
 * http://slayeroffice.com/index.php?c=/scripts/comment_scripts/comments2.php&id=109
 * http://standardbrains.editthispage.com/ edit the pages you see Broken
 * http://www.javascripter.net/faq/index.htm a clock and other examples No bookmarklets
 * http://cleverchimp.com/dev_utilities/macie5lets/ for working with style sheets Broken
 * http://www.gazingus.org Done
 * http://www.w3.org/2000/02/collaboration/annotation/JavaScript/Annotea-JavaScript.html W3C annotation system No longer updated
 * http://www.malevolent.com/downloads/ interesting ways to use IE5+ filters, and more No bookmarklets

One (or so) bookmarklets

 * http://tinyurl.com/ bookmarklet for it's service
 * http://www.onfocus.com/bookwatch/BookPost_info.asp automatically puts in amazon link and acts as a blog posting tool(server based)
 * http://www.dansanderson.com/blogtracker/about.php block tracking system
 * http://makeashorterlink.com/options.php
 * http://www.ukoln.ac.uk/metadata/dcdot/ - dublin core metadata generator
 * http://www.johneklund.com/amazon/ Amazon relinker
 * http://www.dashes.com/anil/2001/01/22/i_was_looking_b Napster search (probably doesn't work anymore)
 * http://impressive.net/people/gerald/2000/12/edit-bookmarklet.html edit a page browser replacement
 * http://bugmenot.com/
 * http://www.google.com/options/buttons.html
 * http://tools.altavista.com/s?spage=help/babel_tool.htm
 * http://www.m-w.com/button/
 * http://www.dictionary.com/help/linking/bookmarklets.html
 * http://www.blogger.com/howto/blogthis.pyra
 * http://www.backflip.com/tour/tour_2.ihtml
 * http://webopedia.internet.com/searchtool/
 * http://www.holovaty.com/blog/archive/2002/11/07/2226/ - content to code ratio finder
 * http://bquot.com - This bookmarklet creates short URL that links directly to a quote on a Web page

IE only
(quotes are from )
 * http://www.q42.nl/demos/colorBlindnessSimulator/
 * http://www.chaoszone.org/misc/aboutphash.html password hash system (IE only)
 * http://milov.nl/entry/738 overlays an application on the page
 * http://milov.nl/?cat=bookmarklets - "Fun bookmarklets for Internet Explorer. Weblog format with discussions."
 * Josh Santangelo - http://endquote.com/content/446/ "for IE."
 * http://www.fjordaan.uklinux.net/moveabletype/fblog/archives/000059.html "Bookmarklets and other useful things for IE's Links bar." *http://tantek.com/favelets/ - "Web development bookmarklets for IE Mac."
 * 1) http://www.trylookinghere.com/bookmarklets/bookmarkletintro.htm - "IE Win and IE Mac. Some bookmarklets are taken from other sites and lack attribution."

Bookmarklets

 * http://donotgo.com/book1.htm

search links
javascript:(function{var x,n,nD,z,i; function htmlEscape(s){s=s.replace(/&amp;/g,'&amp;amp;');s=s.replace(/&gt;/g,'&amp;gt;');s=s.replace(/&lt;/g,'&amp;lt;');return s;} function attrQuoteEscape(s){s=s.replace(/&amp;/g,'&amp;amp;'); s=s.replace(/&quot;/g, '&amp;quot;');return s;} x=prompt(&quot;show links with this word/phrase in link text or target url (leave blank to list all links):&quot;, &quot;&quot;); n=0; if(x!=null) { x=x.toLowerCase; nD = window.open.document; nD.writeln('&lt;html&gt;&lt;head&gt;&lt;title&gt;Links containing &quot;'+htmlEscape(x)+'&quot;&lt;/title&gt;&lt;base target=&quot;_blank&quot;&gt;&lt;/head&gt;&lt;body&gt;'); nD.writeln('Links on &lt;a href=&quot;'+attrQuoteEscape(location.href)+'&quot;&gt;'+htmlEscape(location.href)+'&lt;/a&gt;&lt;br&gt; with link text or target url containing &amp;quot;' + htmlEscape(x) + '&amp;quot;&lt;br&gt;&lt;hr&gt;'); z = document.links; for (i = 0; i &lt; z.length; ++i) { if ((z[i].innerHTML &amp;&amp; z[i].innerHTML.toLowerCase.indexOf(x) != -1) || z[i].href.toLowerCase.indexOf(x) != -1 ) { nD.writeln(++n + '. &lt;a href=&quot;' + attrQuoteEscape(z[i].href) + '&quot;&gt;' + (z[i].innerHTML || htmlEscape(z[i].href)) + '&lt;/a&gt;&lt;br&gt;'); } } nD.writeln('&lt;hr&gt;&lt;/body&gt;&lt;/html&gt;'); nD.close; } });
 * Description : "Lists all links on the page containing the specified text."
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#search_links

linked images
javascript:(function{function I(u){var t=u.split('.'),e=t[t.length-1].toLowerCase;return {gif:1,jpg:1,jpeg:1,png:1,mng:1}[e]}function hE(s){return s.replace(/&amp;/g,'&amp;amp;').replace(/&gt;/g,'&amp;gt;').replace(/&lt;/g,'&amp;lt;').replace(/&quot;/g,'&amp;quot;');}var q,h,i,z=open.document;z.write('&lt;p&gt;Images linked to by '+hE(location.href)+':&lt;/p&gt;&lt;hr&gt;');for(i=0;q=document.links[i];++i){h=q.href;if(h&amp;&amp;I(h))z.write('&lt;p&gt;'+q.innerHTML+' ('+hE(h)+')&lt;br&gt;&lt;img src=&quot;'+hE(h)+'&quot;&gt;');}z.close;})
 * Description : "Opens a window showing all images linked to from the current page. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#linked_images

linked pages
javascript:(function{var dims,dimarray,wid,hei,dimstring,x,i,z,url; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:') return false; if (u.substr(0,11)=='javascript:') return false; return true; } function htmlEscape(s){s=s.replace(/&amp;/g,'&amp;amp;');s=s.replace(/&gt;/g,'&amp;gt;');s=s.replace(/&lt;/g,'&amp;lt;');return s;} dims = prompt('width, height for each frame', '760, 500'); if (dims!=null) { dimarray = dims.split(','); wid = parseInt(dimarray[0]); hei = parseInt(dimarray[1]); dimstring = 'width='+wid+' height='+hei; x = document.links; z = window.open.document; for (i = 0; i &lt; x.length; ++i) { url = x[i].href; if(linkIsSafe(url)) { z.writeln('&lt;p&gt;' + x[i].innerHTML + ' (' + htmlEscape(url) + ')&lt;br&gt;&lt;iframe ' + dimstring + ' src=&quot;' + url.replace(/&quot;/g, '&amp;quot;') + '&quot;&gt;[broken iframe]&lt;/iframe&gt;&lt;/p&gt;'); } } z.close; } });
 * Description : "Opens a window showing all pages linked to from the current page. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#linked_pages

hide visited
javascript:(function{var newSS, styles=':visited {display: none}'; if(document.createStyleSheet) { document.createStyleSheet(&quot;javascript:'&quot;+styles+&quot;'&quot;); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS); } });
 * Description : "Hides visited links."
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#hide_visited

int/ext links
javascript:(function{var i,x; for (i=0;x=document.links[i];++i)x.style.color=[&quot;blue&quot;,&quot;red&quot;,&quot;orange&quot;][sim(x,location)]; function sim(a,b) { if (a.hostname!=b.hostname) return 0; if (fixPath(a.pathname)!=fixPath(b.pathname) || a.search!=b.search) return 1; return 2; } function fixPath(p){ p = (p.charAt(0)==&quot;/&quot; ? &quot;&quot; : &quot;/&quot;) + p;/*many browsers*/ p=p.split(&quot;?&quot;)[0];/*opera*/ return p; } })
 * Description : "Colors internal links red, external links blue, and in-page links orange. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#int/ext_links

open all links
javascript:(function{var n_to_open,dl,dll,i; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:') return false; if (u.substr(0,11)=='javascript:') return false; return true; } n_to_open = 0; dl = document.links; dll = dl.length; for(i = 0; i &lt; dll; ++i) { if (linkIsSafe(dl[i].href)) ++n_to_open; } if (!n_to_open) alert ('no links'); else { if (confirm('Open ' + n_to_open + ' links in new windows?')) for (i = 0; i &lt; dll; ++i) if (linkIsSafe(dl[i].href)) window.open(dl[i].href); } });
 * Description : "Opens each link on the page in a new window. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#open_all_links

open selected links
javascript:(function{var n_to_open,dl,dll,i; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:') return false; if (u.substr(0,11)=='javascript:') return false; return true; } n_to_open = 0; dl = document.links; dll = dl.length; if (window.getSelection &amp;&amp; window.getSelection.containsNode) { /* mozilla */ for(i=0; i&lt;dll; ++i) { if (window.getSelection.containsNode(dl[i], true) &amp;&amp; linkIsSafe(dl[i].href)) ++n_to_open; } if (n_to_open &amp;&amp; confirm('Open ' + n_to_open + ' selected links in new windows?')) { for(i=0; i&lt;dll; ++i) if (window.getSelection.containsNode(dl[i], true) &amp;&amp; linkIsSafe(dl[i].href)) window.open(dl[i].href); } } /* /mozilla */ if (!n_to_open) { /*ie, or mozilla with no links selected: this section matches open_all_links, except for the alert text */ for(i = 0; i &lt; dll; ++i) { if (linkIsSafe(dl[i].href)) ++n_to_open; } if (!n_to_open) alert ('no links'); else { if (confirm('No links selected. Open ' + n_to_open + ' links in new windows?')) for (i = 0; i &lt; dll; ++i) if (linkIsSafe(dl[i].href)) window.open(dl[i].href); } } });
 * Description : "Opens each link within the selection in a new window. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#open_selected_links

target this window
javascript:(function{var x,i; x=document.links; for(i=0;i&lt;x.length;++i) { x[i].target=&quot;_self&quot;; } });
 * Description : "Makes links open in the same window (when you click them). "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#target_this_window

target new windows
javascript:(function{var x,i; x=document.links; for(i=0;i&lt;x.length;++i) { x[i].target=&quot;_blank&quot;; } });
 * Description : "Makes links open in new windows. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#target_new_windows

target new bg windows
javascript:(function{function tn(e){e=e?e:window.event; open(this.href); focus; return false;} var dl=document.links, i; for (i=0;i&lt;dl.length;++i) dl[i].onclick=tn; });
 * Description : "Makes links open in new windows behind the current window. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#target_new_bg_windows

target one new window
javascript:(function{var x,i,r=Math.random; x=document.links; for(i=0;i&lt;x.length;++i) { x[i].target=r; } });
 * Description : "Makes links open in one new window. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#target_one_new_window

remove redirects
javascript:(function{var k,x,t,i,j,p; for(k=0;x=document.links[k];k++){t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');i=t.lastIndexOf('http');if(i&gt;0){ t=t.substring(i); j=t.indexOf('&amp;'); if(j&gt;0)t=t.substring(0,j); p=/https?\:\/\/[^\s]*[^.,;'&quot;&gt;\s\)\]]/.exec(unescape(t)); if(p) x.href=p[0]; } else if (x.onmouseover&amp;&amp;x.onmouseout){x.onmouseover; if (window.status &amp;&amp; window.status.indexOf('://')!=-1)x.href=window.status; x.onmouseout; } x.onmouseover=null; x.onmouseout=null; }});
 * Description : "Changes redirecting links to go directly to the "real" target. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#remove_redirects

hrefs as link text
javascript:(function{var i,c,x,h; for(i=0;x=document.links[i];++i) { h=x.getAttribute(&quot;href&quot;); x.title+=&quot; &quot; + x.innerHTML; while(c=x.firstChild)x.removeChild(c); x.appendChild(document.createTextNode(h)); } })
 * Description : "Changes the text of links to match their hrefs. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#hrefs_as_link_text

full urls as link text
javascript:(function{var i,c,x,h; for(i=0;x=document.links[i];++i) { h=x.href; x.title+=&quot; &quot; + x.innerHTML; while(c=x.firstChild)x.removeChild(c); x.appendChild(document.createTextNode(h)); } })
 * Description : "Changes the text of links to match their absolute urls. "
 * From : http://www.squarefree.com/bookmarklets/pagelinks.html#full_urls_as_link_text

frmget
javascript:(function{var x,i; x = document.forms; for (i = 0; i &lt; x.length; ++i) x[i].method=&quot;get&quot;; alert(&quot;Changed &quot; + x.length + &quot; forms to use the GET method. After submitting a form from this page, you should be able to bookmark the result.&quot;); });
 * Description : "Makes "Post" forms submit to bookmarkable URLs (with ?var=value). "
 * From : http://www.squarefree.com/bookmarklets/forms.html#frmget

toggle checkboxes
javascript:(function{ function toggle(box){ temp=box.onchange; box.onchange=null; box.checked=!box.checked; box.onchange=temp; } var x,k,f,j; x=document.forms; for (k=0; k&lt;x.length; ++k) { f=x[k]; for (j=0;j&lt;f.length;++j) if (f[j].type.toLowerCase == &quot;checkbox&quot;) toggle(f[j]); } });
 * Description : "Toggles the state of each checkbox on the page. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#toggle_checkboxes

next option
javascript:(function{ function rotate(es) { var i,n=es.length; for (i=0; i&lt;n; ++i) { if(es[i].checked) { es[(i+1) % n].checked=true; break; } } if (i==es.length) es[0].checked=true; }  var x,k,f,j,e,B,key; x=document.forms; for (k=0; f=x[k]; ++k) { B=[]; for (j=0;e=f[j];++j) if (e.type &amp;&amp; e.type.toLowerCase == &quot;radio&quot;) { key=&quot; &quot;+e.name; if (!B[key]) B[key]=[]; B[key].push(e); } for(key in B) rotate(B[key]) }})
 * Description : "Selects the next option in each group of option buttons. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#next_option

allow no option
javascript:(function{function down{bmlRadioValue=this.checked;bmlRadioRef=this;} function click {if((window.bmlRadioRef==this)&amp;&amp;window.bmlRadioValue) {this.checked=false;bmlRadioRef=null;}}function mU(radio){radio.onmousedown=down; radio.onkeydown=down;radio.onclick=click;}var x,k,f,j;x=document.forms;for (k=0;k&lt;x.length;++k){f=x[k];for(j=0;j&lt;f.length;++j)if(f[j].type.toLowerCase==&quot;radio&quot;)mU(f[j]);}window.status=&quot;To unselect a selected option button, click on it or press spacebar.&quot;});
 * Description : "Click on a selected option button to clear the selection. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#allow_no_option

remove maxlength
javascript:(function{var x,k,f,j;x=document.forms;for(k=0;k&lt;x.length;++k){f=x[k];for(j=0;j&lt;f.length;++j)f[j].removeAttribute(&quot;maxLength&quot;);}})
 * Description : "Removes maxLength restrictions from textboxes. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#remove_maxlength

enlarge textareas
javascript:(function{var i,x; for(i=0;x=document.getElementsByTagName(&quot;textarea&quot;)[i];++i) x.rows += 5; })
 * Description : "Makes textareas 5 lines taller. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#enlarge_textareas

show hiddens
javascript:(function{var i,f,j,e,div,label,ne; for(i=0;f=document.forms[i];++i)for(j=0;e=f[j];++j)if(e.type==&quot;hidden&quot;){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C(&quot;div&quot;); label=C(&quot;label&quot;); A(div, label); A(label, D.createTextNode(e.name + &quot;: &quot;)); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C(&quot;input&quot;);/*for ie*/ ne.type=&quot;text&quot;; ne.value=e.value; A(label, ne); label.style.MozOpacity=&quot;.6&quot;; --j;/*for moz*/}})
 * Description : "Shows hidden form elements. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#show_hiddens

undisable
javascript:(function{var x,k,f,j;x=document.forms;for (k=0;k&lt;x.length;++k){f=x[k];for(j=0;j&lt;f.length;++j){f[j].disabled=false; f[j].readOnly=false;}}})
 * Description : "Enables all form elements. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#undisable

character count
javascript:(function{var D=document,i,f,j,e;for(i=0;f=D.forms[i];++i)for(j=0;e=f[j];++j)if(e.type==&quot;text&quot;||e.type==&quot;password&quot;||e.tagName.toLowerCase==&quot;textarea&quot;)S(e);function S(e){if(!e.N){var x=D.createElement(&quot;span&quot;),s=x.style;s.color=&quot;green&quot;;s.background=&quot;white&quot;;s.font=&quot;bold 10pt sans-serif&quot;;s.verticalAlign=&quot;top&quot;;e.parentNode.insertBefore(x,e.nextSibling);function u{x.innerHTML=e.value.length;}u;e.onchange=u;e.onkeyup=u;e.oninput=u;e.N=x;}else{e.parentNode.removeChild(e.N);e.N=0;}}})
 * Description : "Displays a running count of the characters in each textbox. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#character_count

view passwords
javascript:(function{var s,F,j,f,i; s = &quot;&quot;; F = document.forms; for(j=0; j&lt;F.length; ++j) { f = F[j]; for (i=0; i&lt;f.length; ++i) { if (f[i].type.toLowerCase == &quot;password&quot;) s += f[i].value + &quot;\n&quot;; } } if (s) alert(&quot;Passwords in forms on this page:\n\n&quot; + s); else alert(&quot;There are no passwords in forms on this page.&quot;);});
 * Description : "Shows the contents of password fields. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#view_passwords

remember password
javascript:(function{var ca,cea,cs,df,dfe,i,j,x,y;function n(i,what){return i+&quot; &quot;+what+((i==1)?&quot;&quot;:&quot;s&quot;)}ca=cea=cs=0;df=document.forms;for(i=0;i&lt;df.length;++i){x=df[i];dfe=x.elements;if(x.onsubmit){x.onsubmit=&quot;&quot;;++cs;}if(x.attributes[&quot;autocomplete&quot;]){x.attributes[&quot;autocomplete&quot;].value=&quot;on&quot;;++ca;}for(j=0;j&lt;dfe.length;++j){y=dfe[j];if(y.attributes[&quot;autocomplete&quot;]){y.attributes[&quot;autocomplete&quot;].value=&quot;on&quot;;++cea;}}}alert(&quot;Removed autocomplete=off from &quot;+n(ca,&quot;form&quot;)+&quot; and from &quot;+n(cea,&quot;form element&quot;)+&quot;, and removed onsubmit from &quot;+n(cs,&quot;form&quot;)+&quot;. After you type your password and submit the form, the browser will offer to remember your password.&quot;)});
 * Description : "Makes the browser ignore web site requests to not remember passwords. "
 * From : http://www.squarefree.com/bookmarklets/forms.html#remember_password

htmlarea ie
javascript:(function{var d=document,i,f,j,t,m,s,u,q;for(i=0;f=d.forms[i];++i)for(j=0;t=f[j];++j)if(t.tagName==&quot;TEXTAREA&quot;&amp;&amp;!t.htmlarea){t.htmlarea=1;t.style.display=&quot;none&quot;;m=d.createElement(&quot;div&quot;);m.contentEditable=true;m.innerHTML=t.value;s=m.style;s.overflow=&quot;scroll&quot;;s.width=500;s.height=250;s.border=&quot;2px inset green&quot;;t.parentNode.insertBefore(m,t);u=U(m,t);setInterval(u,50);f.attachEvent(&quot;onsubmit&quot;,u);if(q=f.posttype)q.selectedIndex=1;}function U(m,t){return function{t.value=m.innerHTML}}})
 * Description : "Lets you edit textareas expecting HTML code as wysiwyg. (IE) "
 * From : http://www.squarefree.com/bookmarklets/forms.html#htmlarea_ie

htmlarea moz
javascript:(function{for(i=0;f=document.forms[i];++i)for(j=0;t=f[j];++j)if(t.tagName==&quot;TEXTAREA&quot;&amp;&amp;!t.midasified){var m=document.createElement(&quot;iframe&quot;);t.parentNode.insertBefore(m,t);Midas(m,t.value);m.style.background=&quot;white&quot;;m.style.width=getComputedStyle(t,&quot;&quot;).getPropertyValue(&quot;width&quot;);m.style.height=getComputedStyle(t,&quot;&quot;).getPropertyValue(&quot;height&quot;);m.style.border=&quot;2px inset green&quot;;m.oldTextarea=t;t.midasified=true;t.style.display=&quot;none&quot;;var U=makeUpdate(m);setInterval(U,50);f.addEventListener(&quot;submit&quot;,U,false);if(q=f.posttype){q.selectedIndex=1;q.style.background=&quot;#dfd&quot;;}}function makeUpdate(M){return function{M.oldTextarea.value=M.contentDocument.body.innerHTML;}}function Midas(M,V){M.onload=function{M.contentDocument.body.innerHTML=V;M.contentDocument.designMode=&quot;on&quot;;this.onload=function{M.contentDocument.body.innerHTML=V;}}}})
 * Description : "Lets you edit textareas expecting HTML code as wysiwyg. (Mozilla) "
 * From : http://www.squarefree.com/bookmarklets/forms.html#htmlarea_moz

highlight
javascript:(function{var count=0, text, dv;text=prompt(&quot;Search phrase:&quot;, &quot;&quot;);if(text==null || text.length==0)return;dv=document.defaultView;function searchWithinNode(node, te, len){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.toUpperCase.indexOf(te);if(pos&gt;=0){spannode=document.createElement(&quot;SPAN&quot;);spannode.style.backgroundColor=&quot;yellow&quot;;middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1&amp;&amp; node.childNodes &amp;&amp; node.tagName.toUpperCase!=&quot;SCRIPT&quot; &amp;&amp; node.tagName.toUpperCase!=&quot;STYLE&quot;){for (var child=0; child &lt; node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status=&quot;Searching for '&quot;+text+&quot;'...&quot;;searchWithinNode(document.body, text.toUpperCase, text.length);window.status=&quot;Found &quot;+count+&quot; occurrence&quot;+(count==1?&quot;&quot;:&quot;s&quot;)+&quot; of '&quot;+text+&quot;'.&quot;;});
 * Description : "Highlights each occurrence of a search phrase. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#highlight

highlight regexp
javascript:(function{var count=0, text, regexp;text=prompt(&quot;Search regexp:&quot;, &quot;&quot;);if(text==null || text.length==0)return;try{regexp=new RegExp(&quot;(&quot; + text +&quot;)&quot;, &quot;i&quot;);}catch(er){alert(&quot;Unable to create regular expression using text '&quot;+text+&quot;'.\n\n&quot;+er);return;}function searchWithinNode(node, re){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.search(re);if(pos&gt;=0){spannode=document.createElement(&quot;SPAN&quot;);spannode.style.backgroundColor=&quot;yellow&quot;;middlebit=node.splitText(pos);endbit=middlebit.splitText(RegExp.$1.length);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1 &amp;&amp; node.childNodes &amp;&amp; node.tagName.toUpperCase!=&quot;SCRIPT&quot; &amp;&amp; node.tagName.toUpperCase!=&quot;STYLE&quot;){for (var child=0; child &lt; node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], re);}}return skip;}window.status=&quot;Searching for &quot;+regexp+&quot;...&quot;;searchWithinNode(document.body, regexp);window.status=&quot;Found &quot;+count+&quot; match&quot;+(count==1?&quot;&quot;:&quot;es&quot;)+&quot; for &quot;+regexp+&quot;.&quot;;});
 * Description : "Highlights each match for a regular expression. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#highlight_regexp

zoom images in
javascript:(function{ function zoomImage(image, amt) { if(image.initialHeight == null) { /* avoid accumulating integer-rounding error */ image.initialHeight=image.height; image.initialWidth=image.width; image.scalingFactor=1; } image.scalingFactor*=amt; image.width=image.scalingFactor*image.initialWidth; image.height=image.scalingFactor*image.initialHeight; } var i,L=document.images.length; for (i=0;i&lt;L;++i) zoomImage(document.images[i], 2); if (!L) alert(&quot;This page contains no images.&quot;); });
 * Description : "Doubles the size of each image on the page. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#zoom_images_in

zoom images out
javascript:(function{ function zoomImage(image, amt) { if(image.initialHeight == null) { /* avoid accumulating integer-rounding error */ image.initialHeight=image.height; image.initialWidth=image.width; image.scalingFactor=1; } image.scalingFactor*=amt; image.width=image.scalingFactor*image.initialWidth; image.height=image.scalingFactor*image.initialHeight; } var i,L=document.images.length; for (i=0;i&lt;L;++i) zoomImage(document.images[i],.5); if (!L) alert(&quot;This page contains no images.&quot;); });
 * Description : "Halves the size of each image on the page. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#zoom_images_out

zoom layout
javascript:factor=Math.sqrt(2); if(!window.scale) { scale=1; zW=[]; zH=[]; unitless=/^[0-9.]+$/; function r(N) { w=N.width; h=N.height; if (unitless.test(w)) zW.push([N,w]); if (unitless.test(h)) zH.push([N,h]); var C=N.childNodes,i; for (i=0;i&lt;C.length;++i) r(C[i]); } r(document.body); } scale*=factor; for(i in zW) zW[i][0].width=zW[i][1]*scale; for(i in zH) zH[i][0].height = zH[i][1]*scale; [].v
 * Description : "Increases the size of fixed-pixel-size layout elements and images. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#zoom_layout

view selection
javascript:(function{ var d=open.document; d.title=&quot;Selection&quot;; if (window.getSelection) { /*Moz*/ var s = getSelection; for(i=0; i&lt;s.rangeCount; ++i) { var a, r = s.getRangeAt(i); if (!r.collapsed) { var x = d.createElement(&quot;div&quot;); x.appendChild(r.cloneContents); while ((a = x.getElementsByTagName(&quot;script&quot;)).length) a[0].parentNode.removeChild(a[0]); d.body.appendChild(x); } } } else { /*IE*/ d.body.innerHTML = document.selection.createRange.htmlText; } });
 * Description : "Displays the selection in a new window. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#view_selection

clone document
javascript:(function{var i,nd; function copyChildren(a,b){for(i=0;i&lt;a.childNodes.length;++i) b.appendChild(a.childNodes[i].cloneNode(true));}; nd=window.open.document; nd.open; nd.close; /*140681*/ copyChildren(document.getElementsByTagName(&quot;head&quot;)[0], nd.getElementsByTagName(&quot;head&quot;)[0]); copyChildren(document.body, nd.body);});
 * Description : "Copies the document into a new window. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#clone_document

sort table
javascript:function toArray (c){var a, k;a=new Array;for (k=0; k&lt;c.length; ++k)a[k]=c[k];return a;}function insAtTop(par,child){if(par.childNodes.length) par.insertBefore(child, par.childNodes[0]);else par.appendChild(child);}function countCols(tab){var nCols, i;nCols=0;for(i=0;i&lt;tab.rows.length;++i)if(tab.rows[i].cells.length&gt;nCols)nCols=tab.rows[i].cells.length;return nCols;}function makeHeaderLink(tableNo, colNo, ord){var link;link=document.createElement('a');link.href='javascript:sortTable('+tableNo+','+colNo+','+ord+');';link.appendChild(document.createTextNode((ord&gt;0)?'a':'d'));return link;}function makeHeader(tableNo,nCols){var header, headerCell, i;header=document.createElement('tr');for(i=0;i&lt;nCols;++i){headerCell=document.createElement('td');headerCell.appendChild(makeHeaderLink(tableNo,i,1));headerCell.appendChild(document.createTextNode('/'));headerCell.appendChild(makeHeaderLink(tableNo,i,-1));header.appendChild(headerCell);}return header;}g_tables=toArray(document.getElementsByTagName('table'));if(!g_tables.length) alert(&quot;This page doesn't contain any tables.&quot;);(function{var j, thead;for(j=0;j&lt;g_tables.length;++j){thead=g_tables[j].createTHead;insAtTop(thead, makeHeader(j,countCols(g_tables[j])))}}) ;function compareRows(a,b){if(a.sortKey==b.sortKey)return 0;return (a.sortKey &lt; b.sortKey) ? g_order : -g_order;}function sortTable(tableNo, colNo, ord){var table, rows, nR, bs, i, j, temp;g_order=ord;g_colNo=colNo;table=g_tables[tableNo];rows=new Array;nR=0;bs=table.tBodies;for(i=0; i&lt;bs.length; ++i)for(j=0; j&lt;bs[i].rows.length; ++j){rows[nR]=bs[i].rows[j];temp=rows[nR].cells[g_colNo];if(temp) rows[nR].sortKey=temp.innerHTML;else rows[nR].sortKey=&quot;&quot;;++nR;}rows.sort(compareRows);for (i=0; i &lt; rows.length; ++i)insAtTop(table.tBodies[0], rows[i]);}
 * Description : "Lets you sort tables in a web page alphabetically. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#sort_table

number rows
javascript:(function{function has(par,ctag){for(var k=0;k&lt;par.childNodes.length;++k)if(par.childNodes[k].tagName==ctag)return true;} function add(par,ctag,text){var c=document.createElement(ctag); c.appendChild(document.createTextNode(text)); par.insertBefore(c,par.childNodes[0]);} var i,ts=document.getElementsByTagName(&quot;TABLE&quot;); for(i=0;i&lt;ts.length;++i) { var n=0,trs=ts[i].rows,j,tr; for(j=0;j&lt;trs.length;++j) {tr=trs[j]; if(has(tr,&quot;TD&quot;))add(tr,&quot;TD&quot;,++n); else if(has(tr,&quot;TH&quot;))add(tr,&quot;TH&quot;,&quot;Row&quot;);}}})
 * Description : "Numbers the rows of each table. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#number_rows

transpose tables
javascript:(function{var d=document,q=&quot;table&quot;,i,j,k,y,r,c,t;for(i=0;t=d.getElementsByTagName(q)[i];++i){var w=0,N=t.cloneNode(0);N.width=&quot;&quot;;N.height=&quot;&quot;;N.border=1;for(j=0;r=t.rows[j];++j)for(y=k=0;c=r.cells[k];++k){var z,a=c.rowSpan,b=c.colSpan,v=c.cloneNode(1);v.rowSpan=b;v.colSpan=a;v.width=&quot;&quot;;v.height=&quot;&quot;;if(!v.bgColor)v.bgColor=r.bgColor;while(w&lt;y+b)N.insertRow(w++).p=0;while(N.rows[y].p&gt;j)++y;N.rows[y].appendChild(v);for(z=0;z&lt;b;++z)N.rows[y+z].p+=a;y+=b;}t.parentNode.replaceChild(N,t);}})
 * Description : "Turns table rows into columns and vice versa. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#transpose_tables

bullets to numbers
javascript:uls=document.getElementsByTagName(&quot;ul&quot;); for (i=uls.length-1; i&gt;=0; --i) { oldul = uls[i]; newol = document.createElement(&quot;ol&quot;); for(j=0;j&lt;oldul.childNodes.length;++j) newol.appendChild(oldul.childNodes[j].cloneNode(true)); oldul.parentNode.replaceChild(newol, oldul); } void 0
 * Description : "Turns bulleted lists into numbered lists. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#bullets_to_numbers

number lines
javascript:(function{var i,p,L,d,j,n; for(i=0; p=document.getElementsByTagName(&quot;pre&quot;)[i]; ++i) { L=p.innerHTML.split(&quot;\r\n&quot;); d=&quot;&quot;+L.length; for(j=0;j&lt;L.length;++j) { n = &quot;&quot;+(j+1)+&quot;. &quot;; while(n.length&lt;d.length+2) n=&quot;0&quot;+n; L[j] = n + L[j]; } p.innerHTML=L.join(&quot;&lt;br&gt;&quot;);/*join with br for ie*/ } })
 * Description : "Numbers lines in &lt;pre&gt; tags or plain-text documents. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#number_lines

rot13 selection
javascript:var coding = &quot;abcdefghijklmnopqrstuvwxyzabcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM&quot;; function rot13(t) { for (var r = &quot;&quot;,i=0;i&lt;t.length;i++) { character = t.charAt(i); position = coding.indexOf(character); if (position &gt; -1) character = coding.charAt(position + 13); r += character; } return r; } S=window.getSelection; function t(N) { return N.nodeType == N.TEXT_NODE; } function r(N) { if (t(N)) N.data = rot13(N.data); } for (j=0;j&lt;S.rangeCount;++j) { var g=S.getRangeAt(j), e=g.startContainer, f=g.endContainer, E=g.startOffset, F=g.endOffset, m=(e==f); if(!m||!t(e)) { /* rot13 each text node between e and f, not including e and f. */ q=document.createTreeWalker(g.commonAncestorContainer, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, null, false); q.currentNode=e; for(N=q.nextNode; N &amp;&amp; N != f; N = q.nextNode) r(N); } if (t(f)) f.splitText(F); if (!m) r(f); if (t(e)) { r(k=e.splitText(E)); if(m)f=k; e=k;} if (t(f)) g.setEnd(f,f.data.length); } void 0
 * Description : "Replaces each letter in the selected text with its rot13 equivalent. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#rot13_selection

zap plugins
javascript:(function{function R(w){try{var d=w.document,j,i,t,T,N,b,r=1,C;for(j=0;t=["object","embed","applet","iframe"][j];++j){T=d.getElementsByTagName(t);for(i=T.length-1;(i+1)&&(N=T[i]);--i)if(j!=3||!R((C=N.contentWindow)?C:N.contentDocument.defaultView)){b=d.createElement("div");b.style.width=N.width; b.style.height=N.height;b.innerHTML=" "+(j==3?"third-party "+t:t)+" ";N.parentNode.replaceChild(b,N);}}}catch(E){r=0}return r}R(self);var i,x;for(i=0;x=frames[i];++i)R(x)})
 * Description : "Removes java, flash, background music, and third-party iframes. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_plugins

zap colors
javascript:(function{var newSS, styles='* { background: white ! important; color: black !important } :link, :link * { color: #0000EE !important } :visited, :visited * { color: #551A8B !important }'; if(document.createStyleSheet) { document.createStyleSheet(&quot;javascript:'&quot;+styles+&quot;'&quot;); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS); } });
 * Description : "Makes text black on a white background, and makes links blue and purple. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_colors

zap cheap effects
javascript:(function{var d=document; function K(N,w) { var nn = d.createElement(w), C = N.childNodes, i; for(i=C.length-1;i>=0;--i) nn.insertBefore(C[i],nn.childNodes[0]); N.parentNode.replaceChild(nn,N); } function Z(t,w) { var T = document.getElementsByTagName(t), j; for (j=T.length-1;j>=0;--j) K(T[j],w); } Z("blink", "span"); Z("marquee", "div"); });
 * Description : "Neutralizes &lt;marquee&gt; and &lt;blink&gt;. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_cheap_effects

zap events
javascript:(function{var H=["mouseover","mouseout","unload","resize"],o=window.opera; if(document.addEventListener/*MOZ*/&&!o) for(j in H)document.addEventListener(H[j],function(e){e.stopPropagation;},true); else if(window.captureEvents/*NS4*/&&!o) { document.captureEvents(-1/*ALL*/);for(j in H)window["on"+H[j]]=null;} else/*IE*/ {function R(N){var i,x;for(j in H)if(N["on"+H[j]]/*NOT TEXTNODE*/)N["on"+H[j]]=null;for(i=0;x=N.childNodes[i];++i)R(x);}R(document);}})
 * Description : "Removes event handlers, killing blind links and exit pop-up ads. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_events

zap timers
javascript:(function { var c, tID, iID; tID = setTimeout(function{}, 0); for (c=1; c<1000 && c<=tID; ++c) clearTimeout(tID - c); iID = setInterval(function{},1000); for (c=0; c<1000 && c<=iID; ++c) clearInterval(iID - c); })
 * Description : "Removes timers that were created with setTimeout or setInterval. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_timers

zap
javascript:(function{function R(w){try{var d=w.document,j,i,t,T,N,b,r=1,C;for(j=0;t=[&quot;object&quot;,&quot;embed&quot;,&quot;applet&quot;,&quot;iframe&quot;][j];++j){T=d.getElementsByTagName(t);for(i=T.length-1;(i+1)&&(N=T[i]);--i)if(j!=3||!R((C=N.contentWindow)?C:N.contentDocument.defaultView)){b=d.createElement(&quot;div&quot;);b.style.width=N.width; b.style.height=N.height;b.innerHTML=&quot; &quot;+(j==3?&quot;third-party &quot;+t:t)+&quot; &quot;;N.parentNode.replaceChild(b,N);}}}catch(E){r=0}return r}R(self);var i,x;for(i=0;x=frames[i];++i)R(x)}); javascript:(function{var newSS, styles='* { background: white ! important; color: black !important } :link, :link * { color: #0000EE !important } :visited, :visited * { color: #551A8B !important }'; if(document.createStyleSheet) { document.createStyleSheet(&quot;javascript:'&quot;+styles+&quot;'&quot;); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS); } }); javascript:(function{var d=document; function K(N,w) { var nn = d.createElement(w), C = N.childNodes, i; for(i=C.length-1;i>=0;--i) nn.insertBefore(C[i],nn.childNodes[0]); N.parentNode.replaceChild(nn,N); } function Z(t,w) { var T = document.getElementsByTagName(t), j; for (j=T.length-1;j>=0;--j) K(T[j],w); } Z(&quot;blink&quot;, &quot;span&quot;); Z(&quot;marquee&quot;, &quot;div&quot;); }); javascript:(function{var H=[&quot;mouseover&quot;,&quot;mouseout&quot;,&quot;unload&quot;,&quot;resize&quot;],o=window.opera; if(document.addEventListener/*MOZ*/&&!o) for(j in H)document.addEventListener(H[j],function(e){e.stopPropagation;},true); else if(window.captureEvents/*NS4*/&&!o) { document.captureEvents(-1/*ALL*/);for(j in H)window[&quot;on&quot;+H[j]]=null;} else/*IE*/ {function R(N){var i,x;for(j in H)if(N[&quot;on&quot;+H[j]]/*NOT TEXTNODE*/)N[&quot;on&quot;+H[j]]=null;for(i=0;x=N.childNodes[i];++i)R(x);}R(document);}}); javascript:(function { var c, tID, iID; tID = setTimeout(function{}, 0); for (c=1; c<1000 && c<=tID; ++c) clearTimeout(tID - c); iID = setInterval(function{},1000); for (c=0; c<1000 && c<=iID; ++c) clearInterval(iID - c); });
 * Description : "Zaps plugins, colors, cheap effects, event handlers, and timers. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap

zap images
javascript:(function{function toArray (c){var a, k;a=new Array;for (k=0; k < c.length; ++k)a[k]=c[k];return a;}var images, img, altText;images=toArray(document.images);for (var i=0; i < images.length; ++i){img=images[i];altText=document.createTextNode(img.alt);img.parentNode.replaceChild(altText, img)}});
 * Description : "Replaces each image with its alternate text. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_images

linearize
javascript:(function{var D=document,e,styles=&quot;table,thead,tbody,tr,th,td{display:block!important;}*{width:auto!important;height:auto!important;position:static!important;float:none!important;margin-left:0!important;margin-right:0!important;} img,iframe,embed,object{display:none;} body {margin:4px!important;}&quot;; e=D.createElement('link'); e.rel='stylesheet'; e.href=window.opera ? &quot;javascript:'&quot;+styles+&quot;'&quot; : &quot;data:text/css,&quot;+styles; D.getElementsByTagName(&quot;head&quot;)[0].appendChild(e)})
 * Description : "Linearizes the text of the page and removes most non-text elements. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#linearize

printer friendly
javascript:(function{function linkIsSafe(h){return(!/^mailto:/.exec(h)&&!/^javascript:/.exec(h));} var i,x,h; for(i=0;x=document.getElementsByTagName('a')[i];i++) { h=x.innerHTML.toLowerCase; if(h.indexOf('print')>-1 && h.indexOf('edition')==-1 && h.indexOf('subscri')==-1 && h.indexOf('reprint')==-1 && h.indexOf('slogan')==-1 && linkIsSafe(x.href)) { x.focus;location=x.href;return; }} alert(&quot;Can't find link to printer friendly version.&quot;);})
 * Description : "Finds and follows a link to a "print-friendly" version of a page. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#printer_friendly

zap presentational html
javascript:(function{var H=["bgcolor","bgColor","background","color","align","text","alink","vlink"],Y={FONT:1,CENTER:1},d=[],p; function R(N){var a,x,i,t; if(t=N.tagName){ t=t.toUpperCase; for (i=0;a=H[i];++i)if(N.getAttribute(a))N.removeAttribute(a); for(i=0;x=N.childNodes[i];++i)R(x); if (Y[t])d.push(N); } } R(document.documentElement); for (i=0;N=d[i];++i) { p=N.parentNode; while(N.firstChild)p.insertBefore(N.firstChild,N); p.removeChild(N); } })
 * Description : "Removes most presentational attributes and tags while leaving style sheets intact. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_presentational_html

zap style sheets
javascript:(function{var i,x;for(i=0;x=document.styleSheets[i];++i)x.disabled=true;});
 * Description : "Disables all style sheets. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_style_sheets

zap cookies
javascript:(function{C=document.cookie.split(&quot;; &quot;);for(d=&quot;.&quot;+location.host;d;d=(&quot;&quot;+d).substr(1).match(/\..*$/))for(sl=0;sl<2;++sl)for(p=&quot;/&quot;+location.pathname;p;p=p.substring(0,p.lastIndexOf('/')))for(i in C)if(c=C[i]){document.cookie=c+&quot;; domain=&quot;+d.slice(sl)+&quot;; path=&quot;+p.slice(1)+&quot;/&quot;+&quot;; expires=&quot;+new Date((new Date).getTime-1e11).toGMTString}})
 * Description : "Removes cookies set by the site, including cookies with paths and domains. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_cookies

zap white backgrounds
javascript:(function{function getRGBColor(node,prop){var rgb=getComputedStyle(node,null).getPropertyValue(prop);var r,g,b;if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(rgb)){r=parseInt(RegExp.$1,10);g=parseInt(RegExp.$2,10);b=parseInt(RegExp.$3,10);return[r/255,g/255,b/255];}return rgb;} R(document.documentElement); function R(n){var i,x,color;if(n.nodeType==Node.ELEMENT_NODE && n.tagName.toLowerCase!="input" && n.tagName.toLowerCase!="select" && n.tagName.toLowerCase!="textarea"){for(i=0;x=n.childNodes[i];++i)R(x); color=getRGBColor(n,"background-color");if( (typeof(color)!="string" && color[0] + color[1] + color[2] >= 2.8) || (n==document.documentElement && color=="transparent")) { n.style.backgroundColor = "tan";/*Moz 1.0*/ n.style.setProperty("background-color", "tan", "important");/*Moz 1.4 after zap colors*/ } }}})
 * Description : "Changes white and near-white backgrounds to tan. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#zap_white_backgrounds

restore context menu
javascript:(function { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R("contextmenu"); R("click"); R("mousedown"); R("mouseup"); })
 * Description : "Fixes pages that disable context menus. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#restore_context_menu

restore selecting
javascript:(function { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R("click"); R("mousedown"); R("mouseup"); R("selectstart"); })
 * Description : "Fixes pages that disable text selection. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#restore_selecting

remove redirects
javascript:(function{var k,x,t,i,j,p; for(k=0;x=document.links[k];k++){t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');i=t.lastIndexOf('http');if(i>0){ t=t.substring(i); j=t.indexOf('&'); if(j>0)t=t.substring(0,j); p=/https?\:\/\/[^\s]*[^.,;'&quot;>\s\)\]]/.exec(unescape(t)); if(p) x.href=p[0]; } else if (x.onmouseover&&x.onmouseout){x.onmouseover; if (window.status && window.status.indexOf('://')!=-1)x.href=window.status; x.onmouseout; } x.onmouseover=null; x.onmouseout=null; }});
 * Description : "Changes redirecting links to go directly to the "real" target. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#remove_redirects

lowercase
javascript:(function{ var i,t,D=document; for(i=0;t=D.getElementsByTagName('textarea')[i];++i)t.value=t.value.toLowerCase;/*(in ie, text-transform only applies to first line of textarea)*/ var newSS,styles='*{text-transform:lowercase}input,textarea{text-transform:none}';if(D.createStyleSheet){D.createStyleSheet(&quot;javascript:'&quot;+styles+&quot;'&quot;);}else{newSS=D.createElement('link'); newSS.rel='stylesheet';newSS.href='data:text/css,'+escape(styles);D.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS);}})
 * Description : "Makes body text and text in textareas all-lowercase. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#lowercase

deleet
javascript:(function{ var T=( "| 1 m /\\/\\ m |\\/| w \\/\\/ w |/\\| h |-| h |~| u |_| m |v| n |\\| n /\\/ d |) f |= h }{ i ][ j _| j _] k |< k |{ l |_ p |> p [* r |2 v \\/ x >< y `/ a @ a 4 b 8 e 3 g 6 g 9 o 0 s 5 s $ t + t 7" ).split(" "),i,x,t; function R(t){t=t.toLowerCase;for(i=0;i1337 5p34|{ somewhat more readable. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#deleet

force wrap
javascript:(function{var D=document; F(D.body); function F(n){var u,r,c,x; if(n.nodeType==3){ u=n.data.search(/\S{45}/); if(u>=0) { r=n.splitText(u+45); n.parentNode.insertBefore(D.createElement("WBR"),r); } }else if(n.tagName!="STYLE" && n.tagName!="SCRIPT"){for (c=0;x=n.childNodes[c];++c){F(x);}} } });
 * Description : "Fixes table layouts expanded by very long words. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#force_wrap

trigger rollovers
javascript:(function{function k(x) { if (x.onmouseover) { x.onmouseover; x.backupmouseover = x.onmouseover; x.backupmouseout = x.onmouseout; x.onmouseover = null; x.onmouseout = null; } else if (x.backupmouseover) { x.onmouseover = x.backupmouseover; x.onmouseout = x.backupmouseout; x.onmouseover;/*for MM_swapImgRestore*/ x.onmouseout; } } var i,x; for(i=0; x=document.links[i]; ++i) k(x); for (i=0; x=document.images[i]; ++i) k(x); })
 * Description : "Triggers JavaScript rollovers, fixing most mystery meat navigation. "
 * From : http://www.squarefree.com/bookmarklets/zap.html#trigger_rollovers

shell
javascript:with(window.open(&quot;&quot;,&quot;_blank&quot;,&quot;width=&quot;+screen.width*.6+&quot;,left=&quot;+screen.width*.35+&quot;,height=&quot;+screen.height*.9+&quot;,resizable,scrollbars=yes&quot;)){document.write(&quot;<!DOCTYPE HTML PUBLIC \&quot;-//W3C//DTD HTML 4.01//EN\&quot; \&quot;http://www.w3.org/TR/html4/strict.dtd\&quot;>\n\n\n \n\n JavaScript Shell 1.3 \n\n\nvar \nhistList = [\&quot;\&quot;], \nhistPos = 0, \n_scope = {}, \n_win, // a top-level context\nquestion,\n_in,\n_out,\ntooManyMatches = null;\n\nfunction refocus\n{\n _in.blur; // Needed for Mozilla to scroll correctly.\n  _in.focus;\n}\n\nfunction init\n{\n  _in = document.getElementById(\&quot;input\&quot;);\n  _out = document.getElementById(\&quot;output\&quot;);\n\n  _win = window;\n\n  if (opener && !opener.closed)\n  {\n    println(\&quot;Using bookmarklet version of shell: commands will run in opener's context.\&quot;, \&quot;message\&quot;);\n    _win = opener;\n  }\n\n  initTarget;\n\n  recalculateInputHeight;\n  refocus;\n}\n\nfunction initTarget\n{\n  _win.Shell = window;\n  _win.print = shellCommands.print;\n}\n\n\n// Unless the user is selected something, refocus the textbox.\n// (requested by caillon, brendan, asa)\nfunction keepFocusInTextbox(e) \n{\n  var g = e.srcElement ? e.srcElement : e.target; // IE vs. standard\n \n  while (!g.tagName)\n    g = g.parentNode;\n  var t = g.tagName.toUpperCase;\n  if (t==\&quot;A\&quot; || t==\&quot;INPUT\&quot;)\n    return;\n    \n  if (window.getSelection) {\n    // Mozilla\n    if (String(window.getSelection))\n      return;\n  }\n  else if (document.getSelection) {\n    // Opera? Netscape 4?\n   if (document.getSelection)\n      return;\n  }\n  else {\n    // IE\n    if ( document.selection.createRange.text )\n      return;\n  }\n  \n  refocus;\n}\n\nfunction inputKeydown(e) {\n  // Use onkeydown because IE doesn't support onkeypress for arrow keys\n\n  //alert(e.keyCode + \&quot; ^ \&quot; + e.keycode);\n\n  if (e.shiftKey && e.keyCode == 13) { // shift-enter\n    // don't do anything; allow the shift-enter to insert a line break as normal\n  } else if (e.keyCode == 13) { // enter\n    // execute the input on enter\n    try { go; } catch(er) { alert(er); };\n    setTimeout(function { _in.value = \&quot;\&quot;; }, 0); // can't preventDefault on input, so clear it later\n  } else if (e.keyCode == 38) { // up\n    // go up in history if at top or ctrl-up\n    if (e.ctrlKey || _in.selectionStart == null || _in.selectionStart == 0)\n      hist(true);\n  } else if (e.keyCode == 40) { // down\n    // go down in history if at end or ctrl-down\n    if (e.ctrlKey || _in.selectionStart == null || _in.selectionEnd == _in.textLength)\n      hist(false);\n  } else if (e.keyCode == 9) { // tab\n    tabcomplete;\n    setTimeout(function { refocus; }, 0); // refocus because tab was hit\n  } else { }\n\n  setTimeout(recalculateInputHeight, 0);\n  \n  //return true;\n};\n\nfunction recalculateInputHeight\n{\n  var rows = _in.value.split(/\\n/).length\n    + 1 // prevent scrollbar flickering in Mozilla\n    + (window.opera ? 1 : 0); // leave room for scrollbar in Opera\n \n  if (_in.rows != rows) // without this check, it is impossible to select text in Opera 7.60 or Opera 8.0.\n    _in.rows = rows;\n}\n\nfunction println(s, type)\n{\n  if((s=String(s)))\n  {\n    var newdiv = document.createElement(\&quot;div\&quot;);\n    newdiv.appendChild(document.createTextNode(s));\n    newdiv.className = type;\n    _out.appendChild(newdiv);\n    return newdiv;\n  }\n}\n\nfunction printWithRunin(h, s, type)\n{\n  var div = println(s, type);\n  var head = document.createElement(\&quot;strong\&quot;);\n  head.appendChild(document.createTextNode(h + \&quot;: \&quot;));\n  div.insertBefore(head, div.firstChild);\n}\n\n\nvar shellCommands = \n{\nload : function load(url)\n{\n  var s = _win.document.createElement(\&quot;script\&quot;);\n  s.type = \&quot;text/javascript\&quot;;\n  s.src = url;\n  _win.document.getElementsByTagName(\&quot;head\&quot;)[0].appendChild(s);\n  println(\&quot;Loading \&quot; + url + \&quot;...\&quot;, \&quot;message\&quot;);\n},\n\nprint : function print(s) { println(s, \&quot;print\&quot;); },\n\n// the normal function, \&quot;print\&quot;, shouldn't return a value\n// (suggested by brendan; later noticed it was a problem when showing others)\npr : function pr(s) \n{ \n  shellCommands.print(s); // need to specify shellCommands so it doesn't try window.print!\n  return s;\n},\n\nprops : function props(e)\n{\n  var ns = [\&quot;Methods\&quot;, \&quot;Fields\&quot;, \&quot;Unreachables\&quot;];\n  var as = ], [], [; // array of (empty) arrays of arrays!\n  var p, j, i; // loop variables, several used multiple times\n\n  var protoLevels = 0;\n\n  for (p = e; p; p = p.__proto__)\n  {\n    for (i=0; i<ns.length; ++i)\n      as[i][protoLevels] = [];\n    ++protoLevels;\n  }\n\n  for(var a in e)\n  {\n    // Shortcoming: doesn't check that VALUES are the same in object and prototype.\n\n    var protoLevel = -1;\n    try\n    {\n      for (p = e; p && (a in p); p = p.__proto__)\n        ++protoLevel;\n    }\n    catch(er) { protoLevel = 0; } // \&quot;in\&quot; operator throws when param to props is a string\n\n    var type = 1;\n    try\n    {\n      if ((typeof e[a]) == \&quot;function\&quot;)\n        type = 0;\n    }\n    catch (er) { type = 2; }\n\n    as[type][protoLevel].push(a);\n  }\n\n  function times(s, n) { return n ? s + times(s, n-1) : \&quot;\&quot;; }\n\n for (j=0; j<protoLevels; ++j)\n    for (i=0;i<ns.length;++i)\n      if (as[i][j].length) \n        printWithRunin(ns[i] + times(\&quot; of prototype\&quot;, j), as[i][j].join(\&quot;, \&quot;), \&quot;propList\&quot;);\n},\n\nblink : function blink(node)\n{\n  if (!node)                     throw(\&quot;blink: argument is null or undefined.\&quot;);\n  if (node.nodeType == null)     throw(\&quot;blink: argument must be a node.\&quot;);\n  if (node.nodeType == 3)        throw(\&quot;blink: argument must not be a text node\&quot;);\n  if (node.documentElement)      throw(\&quot;blink: argument must not be the document object\&quot;);\n\n  function setOutline(o) { \n    return function {\n      if (node.style.outline != node.style.bogusProperty) {\n        // browser supports outline (Firefox 1.1 and newer, CSS3, Opera 8).\n        node.style.outline = o;\n      }\n      else if (node.style.MozOutline != node.style.bogusProperty) {\n        // browser supports MozOutline (Firefox 1.0.x and older)\n        node.style.MozOutline = o;\n      }\n      else {\n        // browser only supports border (IE). border is a fallback because it moves things around.\n       node.style.border = o;\n      }\n    }\n  } \n  \n  function focusIt(a) {\n    return function {\n      a.focus; \n    }\n  }\n\n  if (node.ownerDocument) {\n    var windowToFocusNow = (node.ownerDocument.defaultView || node.ownerDocument.parentWindow); // Moz vs. IE\n    if (windowToFocusNow)\n      setTimeout(focusIt(windowToFocusNow.top), 0);\n  }\n\n  for(var i=1;i<7;++i)\n    setTimeout(setOutline((i%252)?'3px solid red':'none'), i*100);\n\n  setTimeout(focusIt(window), 800);\n  setTimeout(focusIt(_in), 810);\n},\n\nscope : function scope(sc)\n{\n  if (!sc) sc = {};\n  _scope = sc;\n  println(\&quot;Scope is now \&quot; + sc + \&quot;.  If a variable is not found in this scope, window will also be searched.  New variables will still go on window.\&quot;, \&quot;message\&quot;);\n},\n\nmathHelp : function mathHelp\n{\n  printWithRunin(\&quot;Math constants\&quot;, \&quot;E, LN2, LN10, LOG2E, LOG10E, PI, SQRT1_2, SQRT2\&quot;, \&quot;propList\&quot;);\n  printWithRunin(\&quot;Math methods\&quot;, \&quot;abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan\&quot;, \&quot;propList\&quot;);\n},\n\nans : undefined\n};\n\n\nfunction hist(up)\n{\n  // histList[0] = first command entered, [1] = second, etc.\n  // type something, press up --> thing typed is now in \&quot;limbo\&quot;\n  // (last item in histList) and should be reachable by pressing \n  // down again.\n\n  var L = histList.length;\n\n  if (L == 1)\n    return;\n\n  if (up)\n  {\n    if (histPos == L-1)\n    {\n      // Save this entry in case the user hits the down key.\n      histList[histPos] = _in.value;\n    }\n\n    if (histPos > 0)\n    {\n      histPos--;\n      // Use a timeout to prevent up from moving cursor within new text\n      // Set to nothing first for the same reason\n      setTimeout(\n        function {\n          _in.value = ''; \n          _in.value = histList[histPos]; \n          if (_in.setSelectionRange) \n            _in.setSelectionRange(0, 0);\n        },\n        0\n      );\n    }\n  } \n  else // down\n  {\n    if (histPos < L-1)\n    {\n      histPos++;\n      _in.value = histList[histPos];\n    }\n    else if (histPos == L-1)\n    {\n      // Already on the current entry: clear but save\n      if (_in.value)\n      {\n        histList[histPos] = _in.value;\n        ++histPos;\n        _in.value = \&quot;\&quot;;\n      }\n    }\n  }\n}\n\nfunction tabcomplete\n{\n  /*\n   * Working backwards from s[from], find the spot\n   * where this expression starts. It will scan\n  * until it hits a mismatched ( or a space,\n   * but it skips over quoted strings.\n   * If stopAtDot is true, stop at a '.'\n   */\n  function findbeginning(s, from, stopAtDot)\n  {\n    /*\n     *  Complicated function.\n     *\n     *  Return true if s[i] == q BUT ONLY IF\n     *  s[i-1] is not a backslash.\n     */\n    function equalButNotEscaped(s,i,q)\n    {\n      if(s.charAt(i) != q) // not equal go no further\n        return false;\n\n      if(i==0) // beginning of string\n        return true;\n\n      if(s.charAt(i-1) == '\\\\') // escaped?\n        return false;\n\n      return true;\n    }\n\n    var nparens = 0;\n    var i;\n    for(i=from; i>=0; i--)\n    {\n      if(s.charAt(i) == ' ')\n        break;\n\n      if(stopAtDot && s.charAt(i) == '.')\n        break;\n        \n      if(s.charAt(i) == ')')\n        nparens++;\n      else if(s.charAt(i) == '(')\n        nparens--;\n\n      if(nparens < 0)\n        break;\n\n      // skip quoted strings\n      if(s.charAt(i) == '\\'' || s.charAt(i) == '\\\&quot;')\n      {\n        //dump(\&quot;skipping quoted chars: \&quot;);\n        var quot = s.charAt(i);\n        i--;\n        while(i >= 0 && !equalButNotEscaped(s,i,quot)) {\n          //dump(s.charAt(i));\n          i--;\n        }\n        //dump(\&quot;\\n\&quot;);\n      }\n    }\n    return i;\n  }\n\n  function getcaretpos(inp)\n  {\n    if(inp.selectionEnd)\n      return inp.selectionEnd;\n\n    if(inp.createTextRange)\n    {\n      //dump('using createTextRange\\n');\n      var docrange = _win.Shell.document.selection.createRange;\n      var inprange = inp.createTextRange;\n      inprange.setEndPoint('EndToStart', docrange);\n      return inprange.text.length;\n    }\n\n    return inp.value.length; // sucks, punt\n  }\n\n  function setselectionto(inp,pos)\n  {\n    if(inp.selectionStart) {\n      inp.selectionStart = inp.selectionEnd = pos;\n    }\n    else if(inp.createTextRange) {\n      var docrange = _win.Shell.document.selection.createRange;\n      var inprange = inp.createTextRange;\n      inprange.move('character',pos);\n      inprange.select;\n    }\n    else { // err...\n    /*\n      inp.select;\n      if(_win.Shell.document.getSelection)\n        _win.Shell.document.getSelection = \&quot;\&quot;;\n        */\n    }\n  }\n    // get position of cursor within the input box\n    var caret = getcaretpos(_in);\n\n    if(caret) {\n      //dump(\&quot;\\n\&quot;);\n      var dotpos, spacepos, complete, obj;\n      //dump(\&quot;caret pos: \&quot; + caret + \&quot;\\n\&quot;);\n      // see if there's a dot before here\n      dotpos = findbeginning(_in.value, caret-1, true);\n      //dump(\&quot;dot pos: \&quot; + dotpos + \&quot;\\n\&quot;);\n      if(dotpos == -1 || _in.value.charAt(dotpos) != '.') {\n        dotpos = caret;\n//dump(\&quot;changed dot pos: \&quot; + dotpos + \&quot;\\n\&quot;);\n      }\n\n      // look backwards for a non-variable-name character\n      spacepos = findbeginning(_in.value, dotpos-1, false);\n      //dump(\&quot;space pos: \&quot; + spacepos + \&quot;\\n\&quot;);\n      // get the object we're trying to complete on\n      if(spacepos == dotpos || spacepos+1 == dotpos || dotpos == caret)\n      {\n        // try completing function args\n        if(_in.value.charAt(dotpos) == '(' ||\n (_in.value.charAt(spacepos) == '(' && (spacepos+1) == dotpos))\n        {\n          var fn,fname;\n  var from = (_in.value.charAt(dotpos) == '(') ? dotpos : spacepos;\n         spacepos = findbeginning(_in.value, from-1, false);\n\n          fname = _in.value.substr(spacepos+1,from-(spacepos+1));\n  //dump(\&quot;fname: \&quot; + fname + \&quot;\\n\&quot;);\n          try {\n            with(_win.Shell._scope)\n              with(_win)\n                with(Shell.shellCommands)\n                  fn = eval(fname);\n          }\n          catch(er) {\n            //dump('fn is not a valid object\\n');\n            return;\n          }\n          if(fn == undefined) {\n             //dump('fn is undefined');\n             return;\n          }\n          if(fn instanceof Function)\n          {\n            // Print function definition, including argument names, but not function body\n            if(!fn.toString.match(/function .+?\\(\\) +\\{\\n +\\[native code\\]\\n\\}/))\n              println(fn.toString.match(/function .+?\\(.*?\\)/), \&quot;tabcomplete\&quot;);\n          }\n\n          return;\n        }\n        else\n          obj = _win;\n      }\n      else\n      {\n        var objname = _in.value.substr(spacepos+1,dotpos-(spacepos+1));\n        //dump(\&quot;objname: |\&quot; + objname + \&quot;|\\n\&quot;);\n        try {\n          with(_win.Shell._scope)\n            with(_win)\n                obj = eval(objname);\n        }\n        catch(er) {\n          printError(er); \n          return;\n        }\n        if(obj == undefined) {\n          // sometimes this is tabcomplete's fault, so don't print it :(\n          // e.g. completing from \&quot;print(document.getElements\&quot;\n          // println(\&quot;Can't complete from null or undefined expression \&quot; + objname, \&quot;error\&quot;);\n          return;\n        }\n      }\n      //dump(\&quot;obj: \&quot; + obj + \&quot;\\n\&quot;);\n      // get the thing we're trying to complete\n      if(dotpos == caret)\n      {\n        if(spacepos+1 == dotpos || spacepos == dotpos)\n        {\n          // nothing to complete\n          //dump(\&quot;nothing to complete\\n\&quot;);\n          return;\n        }\n\n        complete = _in.value.substr(spacepos+1,dotpos-(spacepos+1));\n      }\n      else {\n        complete = _in.value.substr(dotpos+1,caret-(dotpos+1));\n      }\n      //dump(\&quot;complete: \&quot; + complete + \&quot;\\n\&quot;);\n      // ok, now look at all the props/methods of this obj\n      // and find ones starting with 'complete'\n      var matches = [];\n      var bestmatch = null;\n      for(var a in obj)\n      {\n        //a = a.toString;\n        //XXX: making it lowercase could help some cases,\n        // but screws up my general logic.\n        if(a.substr(0,complete.length) == complete) {\n          matches.push(a);\n          ////dump(\&quot;match: \&quot; + a + \&quot;\\n\&quot;);\n          // if no best match, this is the best match\n          if(bestmatch == null)\n          {\n            bestmatch = a;\n          }\n          else {\n            // the best match is the longest common string\n            function min(a,b){ return ((a<b)?a:b); }\n            var i;\n            for(i=0; i< min(bestmatch.length, a.length); i++)\n            {\n              if(bestmatch.charAt(i) != a.charAt(i))\n                break;\n            }\n            bestmatch = bestmatch.substr(0,i);\n            ////dump(\&quot;bestmatch len: \&quot; + i + \&quot;\\n\&quot;);\n          }\n          ////dump(\&quot;bestmatch: \&quot; + bestmatch + \&quot;\\n\&quot;);\n        }\n      }\n      bestmatch = (bestmatch || \&quot;\&quot;);\n      ////dump(\&quot;matches: \&quot; + matches + \&quot;\\n\&quot;);\n      var objAndComplete = (objname || obj) + \&quot;.\&quot; + bestmatch;\n      //dump(\&quot;matches.length: \&quot; + matches.length + \&quot;, tooManyMatches: \&quot; + tooManyMatches + \&quot;, objAndComplete: \&quot; + objAndComplete + \&quot;\\n\&quot;);\n      if(matches.length > 1 && (tooManyMatches == objAndComplete || matches.length <= 10)) {\n\n        printWithRunin(\&quot;Matches: \&quot;, matches.join(', '), \&quot;tabcomplete\&quot;);\n        tooManyMatches = null;\n      }\n      else if(matches.length > 10)\n      {\n        println(matches.length + \&quot; matches. Press tab again to see them all\&quot;, \&quot;tabcomplete\&quot;);\n       tooManyMatches = objAndComplete;\n      }\n      else {\n        tooManyMatches = null;\n      }\n      if(bestmatch != \&quot;\&quot;)\n      {\n        var sstart;\n        if(dotpos == caret) {\n          sstart = spacepos+1;\n        }\n        else {\n          sstart = dotpos+1;\n        }\n        _in.value = _in.value.substr(0, sstart)\n                  + bestmatch\n                  + _in.value.substr(caret);\n        setselectionto(_in,caret + (bestmatch.length - complete.length));\n      }\n    }\n}\n\nfunction printQuestion(q)\n{\n  println(q, \&quot;input\&quot;);\n}\n\nfunction printAnswer(a)\n{\n  if (a !== undefined) {\n    println(a, \&quot;normalOutput\&quot;);\n    shellCommands.ans = a;\n  }\n}\n\nfunction printError(er)\n{ \n  if (er.name)\n    println(er.name + \&quot;: \&quot; + er.message, \&quot;error\&quot;); // Because IE doesn't have error.toString.\n  else\n    println(er, \&quot;error\&quot;); // Because security errors in Moz /only/ have toString.\n}\n\nfunction go(s)\n{\n  _in.value = question = s ? s : _in.value;\n\n if (question == \&quot;\&quot;)\n    return;\n\n  histList[histList.length-1] = question;\n  histList[histList.length] = \&quot;\&quot;;\n  histPos = histList.length - 1;\n  \n  // Unfortunately, this has to happen *before* the JavaScript is run, so that \n  // print output will go in the right place.\n  _in.value='';\n  recalculateInputHeight;\n  printQuestion(question);\n\n  if (_win.closed) {\n    printError(\&quot;Target window has been closed.\&quot;);\n    return;\n  }\n  \n  try { (\&quot;Shell\&quot; in _win) }\n  catch(er) {\n    printError(\&quot;The JavaScript Shell cannot access variables in the target window.  The most likely reason is that the target window now has a different page loaded and that page has a different hostname than the original page.\&quot;);\n    return;\n  }\n\n  if (!(\&quot;Shell\&quot; in _win))\n    initTarget; // silent\n\n  // Evaluate Shell.question using _win's eval (this is why eval isn't in the |with|, IIRC).\n  _win.location.href = \&quot;javascript:try{ Shell.printAnswer(eval('with(Shell._scope) with(Shell.shellCommands) {' + Shell.question + String.fromCharCode(10) + '}')); } catch(er) { Shell.printError(er); }; setTimeout(Shell.refocus, 0); void 0\&quot;;\n}\n\n \n\n\n \n \n\n\nbody { background: white; color: black; }\n\n#output { white-space: pre; white-space: -moz-pre-wrap; } /* Preserve line breaks, but wrap too if browser supports it */\nh3 { margin-top: 0; margin-bottom: 0em; }\nh3 + div { margin: 0; }\n\nform { margin: 0; padding: 0; }\n#input { width: 100%25; border: none; padding: 0; }\n\n.input { color: blue; background: white; font: inherit; font-weight: bold; margin-top: .5em; /* background: #E6E6FF; */ }\n.normalOutput { color: black; background: white; }\n.print { color: brown; background: white; }\n.error { color: red; background: white; }\n.propList { color: green; background: white; }\n.message { color: green; background: white; }\n.tabcomplete { color: purple; background: white; }\n \n \n\n<body onload=\&quot;init\&quot;>\n\n <div id=\&quot;output\&quot;> JavaScript Shell 1.3 Features: autocompletion of property names with Tab, multiline input with Shift+Enter, input history with (Ctrl+) Up/Down, <a accesskey=M href=\&quot;javascript:go('scope(Math); mathHelp;');\&quot;>Math</a>, <a accesskey=H href=\&quot;http://www.squarefree.com/shell/?ignoreReferrerFrom=shell1.3\&quot;>help</a>  Values and functions: ans, print(string), <a accesskey=P href=\&quot;javascript:go('props(ans)')\&quot;>props(object)</a>, <a accesskey=B href=\&quot;javascript:go('blink(ans)')\&quot;>blink(node)</a>, load(scriptURL), scope(object)  \n\n <textarea id=\&quot;input\&quot; class=\&quot;input\&quot; wrap=\&quot;off\&quot; onkeydown=\&quot;inputKeydown(event)\&quot; rows=\&quot;1\&quot;> \n\n \n\n &quot;);document.close;}void 0
 * Description : "Opens a JavaScript Shell and allows it to access the current page. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#shell

jsenv
javascript:with(window.open(&quot;&quot;,&quot;_blank&quot;,&quot;width=&quot;+screen.width*.6+&quot;,left=&quot;+screen.width*.35+&quot;,height=&quot;+screen.height*.9+&quot;,resizable,scrollbars=yes&quot;)){document.write(&quot; JavaScript Development Environment 2.0  \n\n\n\n\n<frameset rows=\&quot;25,*,*\&quot;>\n\n  <frame name=\&quot;toolbarFrame\&quot; src=\&quot;about:blank\&quot; noresize=\&quot;noresize\&quot;>\n\n  <frame name=\&quot;inputFrame\&quot; src=\&quot;about:blank\&quot;>\n\n  <frame name=\&quot;outputFrame\&quot; src=\&quot;about:blank\&quot;>\n\n \n\n&quot;);document.close; frames[0].document.write(&quot;  toolbarFrame \n\n<style type=\&quot;text/css\&quot;>\nhtml,body { width: 100%25; height: 100%25; border: none; margin: 0px; padding: 0px; }\nbutton { height: 100%25; }\n \n\n<script type=\&quot;text/javascript\&quot;>\n\nvar outputFrame = top.outputFrame;\nvar inputFrame = top.inputFrame;\nvar framesetElement = top.document.documentElement.getElementsByTagName(\&quot;frameset\&quot;)[0];\n\nvar savedRows;\n\n\n// Need to use C-style comments in handleError and print \n// because IE retains them when decompiling a function.\n\n\n\nfunction print(s, c) {\n  var outputFrame = top.outputFrame; /* duplicated here in case this function is elsewhere */\n  var doc = outputFrame.document;\n\n  var newdiv = doc.createElement(\&quot;div\&quot;);\n  newdiv.appendChild(doc.createTextNode(s));\n  if (c)\n    newdiv.style.color = c;\n  doc.body.appendChild(newdiv);\n}\n\nfunction handleError(er, file, lineNumber) \n{\n  print(\&quot;Error on line \&quot; + lineNumber + \&quot;: \&quot; + er, \&quot;red\&quot;); \n    \n  /* Find the character offset for the line */\n  /* (code adapted from blogidate xml well-formedness bookmarklet) */\n  var ta = inputFrame.document.getElementById(\&quot;input\&quot;);\n  var lines = ta.value.split(\&quot;\\n\&quot;);\n  var cc = 0; \n  var i;\n  for(i=0; i < (lineNumber - 1); ++i) \n    cc += lines[i].length + 1;\n\n  /* Hacky(?) workaround for IE's habit of including \\r's in strings */\n  if (ta.value.split(\&quot;\\r\&quot;).length > 1)\n    cc -= lineNumber - 1;\n\n  /* Select the line */\n  if(document.selection) { \n    /* IE (Leonard Lin gave me this code) */\n    var sel = ta.createTextRange; \n    sel.moveStart(\&quot;character\&quot;, cc); \n    sel.collapse; \n    sel.moveEnd(\&quot;character\&quot;, lines[i].length); \n    sel.select;\n  } else { \n    /* Mozilla */\n    ta.selectionStart = cc; \n    ta.selectionEnd = cc + lines[i].length; \n  }\n \n  /* return true; */ /* nah, let the error go through to IE's js consolish thing! */\n}\n\n\n\n\n\nfunction showHideOutput\n{\n if (outputFrame.document.body.clientHeight > 100) {\n    // hide\n    savedRows = framesetElement.rows;    \n    framesetElement.rows = \&quot;25,*,0\&quot;;\n  }\n  else {\n    // show. use the previous size, if possible\n   if (savedRows) {\n      framesetElement.rows = savedRows;\n      savedRows = null;\n    }\n    else {\n      framesetElement.rows = \&quot;25,*,*\&quot;;\n    }\n  }\n}\n\nfunction refocus\n{\n  inputFrame.document.getElementById(\&quot;input\&quot;).focus;\n}\n\n\nfunction clearOutput\n{\n  var b = outputFrame.document.body;\n  while(b.firstChild)\n    b.removeChild(b.firstChild);\n}\n\nfunction stripLineBreaks(s)\n{\n  return s.replace(/\\n/g, \&quot;\&quot;).replace(/\\r/g, \&quot;\&quot;); // stripping \\r is for IE\n}\n\nfunction execute\n{\n  var js = inputFrame.document.getElementById(\&quot;input\&quot;).value;\n\n  var useOpener = top.opener && !top.opener.closed;\n  var oldStyle = !! document.all; // lame but meh.\n \n  print(\&quot;Running\&quot; + (useOpener ? \&quot; in bookmarklet mode\&quot; : \&quot;\&quot;) + (oldStyle ? \&quot; in make-IE-happy mode\&quot; : \&quot;\&quot;) + \&quot;...\&quot;, \&quot;orange\&quot;);\n\n if (useOpener)\n    executeWithJSURL(js, top.opener); // only way to execute against another frame\n  else if (oldStyle)\n    executeWithDW(js, execFrame); // only way to get line numbers in IE\n  else\n    executeWithJSURL(js, execFrame); // faster in Mozilla  \n}\n\n// Advantages: can get line numbers in IE.\nfunction executeWithDW(js, win)\n{\n  win.document.open;\n  win.inputFrame = inputFrame;\n  win.outputFrame = outputFrame;\n  win.document.write(\n    stripLineBreaks(\n        '<!DOCTYPE HTML PUBLIC \&quot;-//W3C//DTD HTML 4.01//EN\&quot; \&quot;http://www.w3.org/TR/html4/strict.dtd\&quot;>' +\n        '   execFrame<\\/title><script type=\&quot;text/javascript\&quot;>'\n      + print         // yay for decompilation!\n      + handleError \n      + \&quot;window.onerror = handleError;\&quot;\n      + \&quot;<\\/script><\\/head>\&quot;\n      ) \n    + ' <script type=\&quot;text/javascript\&quot;>'\n    + js         // should escape it a little to remove the string <\\/script> at least...\n    + \&quot;<\\/script><\\/body><\\/html>\&quot;\n    );\n  win.document.close;\n}\n\n// Advantages: can be used to inject a script into another window, faster in Mozilla.\nfunction executeWithJSURL(js, win)\n{\n  // isolate scope\n  js = \&quot;(function{ \&quot; + js + \&quot; \\n })\&quot;;\n\n  win.print = print;\n  win.onerror = handleError;\n\n  // double encodeURIComponent because javascript: URLs themselves are encoded!\n  win.location.href = 'javascript:eval(decodeURIComponent(\&quot;' + encodeURIComponent(encodeURIComponent(js)) + '\&quot;)); void 0;';\n  \n  refocus;\n}\n\n// Other ideas I haven't tried lately: create a element, eval.\n\n\nfunction makeUserScript(userScriptLink)\n{\n    userScriptLink.href = \n        \&quot;data:text/javascript;charset=utf-8,\&quot; + \n        encodeURIComponent(inputFrame.document.getElementById(\&quot;input\&quot;).value + \&quot;//.user.js\&quot;);\n}\n\n  \n\n \n\n<button accesskey=\&quot;E\&quot; onclick=\&quot;execute; refocus;\&quot;> E xecute \n\n<button accesskey=\&quot;C\&quot; onclick=\&quot;clearOutput; refocus;\&quot;> C lear output \n<button accesskey=\&quot;S\&quot; onclick=\&quot;showHideOutput; refocus;\&quot;> S how/hide output \n\n\n<a href=\&quot;data:text/html,...\&quot; onfocus=\&quot;makeUserScript(this);\&quot; onmouseover=\&quot;makeUserScript(this);\&quot; target=\&quot;_blank\&quot;>Install as user script</a>\n\n<div style=\&quot;visibility: hidden;\&quot;>\n<iframe name=\&quot;execFrame\&quot; src=\&quot;about:blank\&quot; height=\&quot;5\&quot; width=\&quot;5\&quot;> \n \n\n &quot;); frames[0].document.close; frames[1].document.write(&quot;  inputFrame \n\n\n\n<style type=\&quot;text/css\&quot;>\n\nhtml,body,form,textarea { width: 100%25; height: 100%25; border: none; margin: 0px; padding: 0px; }\nhtml,body { overflow: hidden; }\n\n  \n\n<body onload=\&quot;document.getElementById('input').select;\&quot;>\n<textarea style=\&quot;background-color: rgb(221, 238, 255);\&quot; id=\&quot;input\&quot;>// ==UserScript==\n// @namespace     http://www.squarefree.com/jsenv/autogenerated\n// @name          Unnamed script\n// @description   Undescribed script\n// ==/UserScript==\n\nprint(\&quot;Squares of numbers 0 through 4:\&quot;);\nfor (var i = 0; i &lt; 5; ++i)\n  print(i * i);\n  \nthis.line.causes.an.error\n \n &quot;); frames[1].document.close;   }void 0
 * Description : "Opens a <a href="../jsenv/">JavaScript Development Environment</a> and allows it to access the current page. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#jsenv

test styles
javascript:(function{function init{var newline=unescape(&quot;%&quot;+&quot;0A&quot;);dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select;ta.value=&quot;/* Type CSS rules here and they will be applied&quot;+newline+&quot;to pages from '&quot;+location.host+&quot;'&quot;+newline+&quot;immediately as long as you keep this window open. */&quot;+newline+newline;update;}function update{try{if(!x||x.closed){ta.style.backgroundColor=&quot;#ddd&quot;;return;}x.bookmarkletStyleSheet;}catch(er){ta.style.backgroundColor=&quot;#fdc&quot;;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=&quot;&quot;;oldCSS=null;}if(!x.testStyles){var newSS;newSS=x.document.createElement(&quot;link&quot;);newSS.rel=&quot;stylesheet&quot;;newSS.type=&quot;text/css&quot;;x.document.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS);x.testStyles=newSS;oldCSS=null;}if(oldCSS!=ta.value){oldCSS=ta.value;if(window.opera)x.testStyles.href=&quot;javascript:unescape('&quot;+escape(ta.value)+&quot;')&quot;;else if(navigator.userAgent.indexOf(&quot;MSIE&quot;)!=-1)x.testStyles.href=&quot;javascript:unescape('&quot;+escape(escape(ta.value))+&quot;')&quot;;else x.testStyles.href=&quot;data:text/css,&quot;+escape(ta.value);}setTimeout(update,150);}y=window.open(,,'resizable,width=500,height=300');y.document.write(' New CSS Style Sheet .ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; } <body class=&quot;ec&quot;><form name=&quot;f&quot; style=&quot;margin: 0px;&quot; class=&quot;ec&quot;><textarea name=&quot;ta&quot; wrap=&quot;soft&quot; style=&quot;margin: 0px; border: 0px; width:100%; height:100%;&quot; class=&quot;ec&quot;>  '+update+init+'init;<'+'/script>');y.document.close;})
 * Description : "Type in CSS rules to experiment or to create a temporary user style sheet. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#test_styles

edit styles
javascript:(function{function init{var newline=unescape(&quot;%&quot;+&quot;0A&quot;),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select;if(x.editStyles){ta.value=x.editStyles.innerHTML;update;return;}ta.value=&quot;/* Type CSS rules here and they will be applied&quot;+newline+&quot;to pages from '&quot;+location.host+&quot;'&quot;+newline+&quot;immediately as long as you keep this window open. */&quot;+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:&quot;Imported&quot;,inline:false,shorturl:&quot;&quot;,fulltext:&quot;&quot;};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase+&quot;-tag&quot;;if(!s.ownerNode.getAttribute(&quot;src&quot;)&&!s.ownerNode.href)y.inline=true;}if(y.inline){y.label=&quot;Inline &quot;+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)==&quot;data:text/css&quot;){y.shorturl=&quot; contained in a data: URL&quot;;y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext=&quot;@import \&quot;&quot;+s.href+&quot;\&quot;;&quot;;y.shorturl=&quot; &quot;+s.href.split('/').reverse[0];if(!y.readable){y.fulltext=&quot;/* Out-of-domain; imported above. */&quot;;}else if(s.href.substr(0,5)!=&quot;http:&quot;){y.fulltext=&quot;/* Non-http; imported above. */&quot;;}else{var loadingText=&quot;/* Loading (&quot;+(L.length-1)+&quot;) */&quot;;y.fulltext=loadingText;var p=new XMLHttpRequest;p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,&quot;&quot;);y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,&quot;&quot;);};p.open(&quot;GET&quot;,s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&&s.length>1)s=s.slice(1);while((s[s.length-1]==newline)&&s.length>1)s=s.substr(0,s.length-1);s=s.replace(/@import.*;/ig,function{return &quot;/* &quot;+RegExp.lastMatch+&quot; */&quot;;});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports=&quot;&quot;,main=&quot;&quot;;var firstNote=&quot;/**** Style sheets whose contents could be loaded were ****/&quot;+newline+&quot;/**** imported instead. Rule order may be incorrect  ****/&quot;+newline+&quot;/**** as a result. ****/&quot;+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+=&quot;/**** &quot;+ss.label+&quot; style sheet&quot;+ss.shorturl+&quot; ****/&quot;+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update;}function update{try{if(!x||x.closed){ta.style.backgroundColor=&quot;#ddd&quot;;return;}x.editStyles;}catch(er){ta.style.backgroundColor=&quot;#fdc&quot;;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=&quot;&quot;;oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement(&quot;style&quot;);newSS.type=&quot;text/css&quot;;x.document.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open(,,'resizable,scrollbars=yes,width=550,height=520');y.document.write(' Edit Styles .ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; } <body class=&quot;ec&quot;><form name=&quot;f&quot; style=&quot;margin: 0px;&quot; class=&quot;ec&quot;><textarea name=&quot;ta&quot; wrap=&quot;soft&quot; style=&quot;margin: 0px; border: 0px; width:100%; height:100%;&quot; class=&quot;ec&quot;>  '+update+init+'init;<'+'/script>');y.document.close;})
 * Description : "Experiment with changes to the page's style sheet. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#edit_styles

ancestors
javascript:(function{function A(n,g){var p=n.parentNode,t=n.tagName;if(!p)return &quot;&quot;;if(!t)return A(p,g);var T=t.toUpperCase,b=(T!=&quot;TABLE&quot;&&T!=&quot;TBODY&quot;&&T!=&quot;THEAD&quot;&&T!=&quot;TR&quot;),c=n.className,i=n.id;return A(p,' > ')+(b?T:T.toLowerCase)+(c?&quot;.&quot;+c:&quot;&quot;)+(i?&quot;#&quot;+i:&quot;&quot;)+(b?g:' ');}document.onmouseover=function(e){e=e?e:event;var s,g=e.target;g=g?g:e.srcElement;try{s=A(g,);}catch(err){s=err.message;}window.status=s;return true;};window.status=A(document.documentElement,);})
 * Description : "Lists the ancestors of any element you hover over in the status bar. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#ancestors

computed styles
javascript:(function{function A(n,g){var p=n.parentNode,t=n.tagName;if(!p)return &quot;&quot;;if(!t)return A(p,g);var T=t.toUpperCase,b=(T!=&quot;TABLE&quot;&&T!=&quot;TBODY&quot;&&T!=&quot;THEAD&quot;&&T!=&quot;TR&quot;),c=n.className,i=n.id;return A(p,' > ')+(b?T:T.toLowerCase)+(c?&quot;.&quot;+c:&quot;&quot;)+(i?&quot;#&quot;+i:&quot;&quot;)+(b?g:' ');}document.onmouseover=function(e){e=e?e:event;var s,g=e.target;g=g?g:e.srcElement;try{s=A(g,)+&quot; (click for computed styles)&quot;;}catch(err){s=err.message;}window.status=s;return true;};window.status=A(document.documentElement,);var newSS,styles='* { cursor: crosshair; }';newSS=document.createElement('link');newSS.rel='stylesheet';newSS.type='text/css';newSS.href='data:text/css,'+escape(styles);document.getElementsByTagName(&quot;head&quot;)[0].appendChild(newSS);document.onclick=function(e){e=e?e:event;var s,g=e.target;g=g?g:e.srcElement;var x=window.open(,'computedStyles');x.document.open;x.document.close;var d=x.document;x.onunload=function{document.onclick=null;document.onmouseover=null;window.status=null;newSS.href='data:text/css,';};function sp(n,t,col){var r=d.createElement(n);r.appendChild(d.createTextNode(t));if(col)r.style.color=col;return r;}var typeIndex={'top':1,'bottom':1,'height':1,'width':1,'left':1,'right':1,'position':0,'display':0,'-moz-appearance':0,'-moz-box-sizing':0};var colors=[&quot;red&quot;,&quot;green&quot;,&quot;black&quot;];function undirect(v){return v.replace(/\-(left|top|bottom|right)/,&quot;-*&quot;);}function diff(n,p){pcs=p.ownerDocument.defaultView.getComputedStyle(p,&quot;&quot;);ncs=n.ownerDocument.defaultView.getComputedStyle(n,&quot;&quot;);var A=[];var B={};var C={};for(var i=0;i<ncs.length;++i){var e=ncs.item(i),v=ncs.getPropertyValue(e),pv=pcs.getPropertyValue(e);if(v!=pv){var u=undirect(e);if(u.indexOf(&quot;-*&quot;)!=-1){if(!B[u])B[u]=[0,v];if(B[u][1]==v)++(B[u][0]);}A.push([typeIndex[e]!=null?typeIndex[e]:2,e,v]);}}A=A.sort;for(var u in B)if(B[u][0]==4)C[u]=true;for(var i in A){var t=A[i],e=t[1],v=t[2],u=undirect(e);if(C[u]){if(t[1].indexOf(&quot;-left&quot;)!=-1)d.body.appendChild(sp(&quot;div&quot;,u+&quot;: &quot;+v,colors[t[0]]));}else d.body.appendChild(sp(&quot;div&quot;,e+&quot;: &quot;+v,colors[t[0]]));}}function info(n){if(!n)return;if(n.tagName){d.body.appendChild(sp(&quot;h4&quot;,A(n,)));diff(n,n.parentNode.nodeType!='9'?n.parentNode:d.documentElement);}info(n.parentNode);}d.body.appendChild(sp(&quot;p&quot;,&quot;This shows how the computed style of each node differs from the computed style of its parent. The root element, which has no parent, is instead compared against the root of a blank HTML document.&quot;));info(g);x.focus;e.preventDefault;}})
 * Description : "Lists the computed styles of an element and of its ancestors. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#computed_styles

zap style sheets
javascript:(function{var i,x;for(i=0;x=document.styleSheets[i];++i)x.disabled=true;});
 * Description : "Disables all style sheets. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#zap_style_sheets

zap presentational html
javascript:(function{var H=["bgcolor","bgColor","background","color","align","text","alink","vlink"],Y={FONT:1,CENTER:1},d=[],p; function R(N){var a,x,i,t; if(t=N.tagName){ t=t.toUpperCase; for (i=0;a=H[i];++i)if(N.getAttribute(a))N.removeAttribute(a); for(i=0;x=N.childNodes[i];++i)R(x); if (Y[t])d.push(N); } } R(document.documentElement); for (i=0;N=d[i];++i) { p=N.parentNode; while(N.firstChild)p.insertBefore(N.firstChild,N); p.removeChild(N); } })
 * Description : "Removes most presentational attributes and tags while leaving style sheets intact. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#zap_presentational_html

view style sheets
javascript:s=document.getElementsByTagName('STYLE'); ex=document.getElementsByTagName('LINK'); d=window.open.document; /*set base href*/d.open;d.close; b=d.body; function trim(s){return s.replace(/^\s*\n/, ).replace(/\s*$/, ); }; function iff(a,b,c){return b?a+b+c:'';}function add(h){b.appendChild(h);} function makeTag(t){return document.createElement(t);} function makeText(tag,text){t=makeTag(tag);t.appendChild(document.createTextNode(text)); return t;} add(makeText('style', 'iframe{width:100%;height:18em;border:1px solid;')); add(makeText('h3', d.title='Style sheets in ' + location.href)); for(i=0; i<s.length; ++i) { add(makeText('h4','Inline style sheet' + iff(' title=&quot;',s[i].title,'&quot;'))); add(makeText('pre', trim(s[i].innerHTML))); } for (i=0; i<ex.length; ++i) { rs=ex[i].rel.split(' '); for(j=0;j<rs.length;++j) if (rs[j].toLowerCase=='stylesheet') { add(makeText('h4','link rel=&quot;' + ex[i].rel + '&quot; href=&quot;' + ex[i].href + '&quot;' + iff(' title=&quot;',ex[i].title,'&quot;'))); iframe=makeTag('iframe'); iframe.src=ex[i].href; add(iframe); break; } } void 0
 * Description : "Displays linked and embedded style sheets. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#view_style_sheets

view scripts
javascript:s=document.getElementsByTagName('SCRIPT'); d=window.open.document; /*140681*/d.open;d.close; b=d.body; function trim(s){return s.replace(/^\s*\n/, ).replace(/\s*$/, ); }; function add(h){b.appendChild(h);} function makeTag(t){return document.createElement(t);} function makeText(tag,text){t=makeTag(tag);t.appendChild(document.createTextNode(text)); return t;} add(makeText('style', 'iframe{width:100%;height:18em;border:1px solid;')); add(makeText('h3', d.title='Scripts in ' + location.href)); for(i=0; i<s.length; ++i) { if (s[i].src) { add(makeText('h4','script src=&quot;' + s[i].src + '&quot;')); iframe=makeTag('iframe'); iframe.src=s[i].src; add(iframe); } else { add(makeText('h4','Inline script')); add(makeText('pre', trim(s[i].innerHTML))); } } void 0
 * Description : "Displays linked and embedded scripts. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#view_scripts

view variables
javascript:(function{var x,d,i,v,st; x=open; d=x.document; d.open; function hE(s){s=s.replace(/&/g,"&amp;");s=s.replace(/>/g,"&gt;");s=s.replace(/</g,"&lt;");return s;} d.write(" td{vertical-align:top; white-space:pre; } table,td,th { border: 1px solid #ccc; } div.er { color:red } "); d.close; });
 * Description : "Displays all JavaScript variables and functions. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#view_variables

list classes
javascript:(function{var a={},b=[],i,e,c,k,d,s=" ";d=open.document;d.write(s);d.close;})
 * Description : "Lists classes used in the document. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#list_classes

generated source
javascript:(function{ function htmlEscape(s){s=s.replace(/&/g,'&amp;');s=s.replace(/>/g,'&gt;');s=s.replace(/</g,'&lt;');return s;} x=window.open; x.document.write(' ' + htmlEscape(' \n' + document.documentElement.innerHTML + '\n ')); x.document.close; });
 * Description : "Displays the DOM tree of the page as HTML. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#generated_source

partial source
javascript:function getSelSource { x = document.createElement("div"); x.appendChild(window.getSelection.getRangeAt(0).cloneContents); return x.innerHTML; } function makeHR { return document.createElement("hr"); } function makeParagraph(text) { p = document.createElement("p"); p.appendChild(document.createTextNode(text)); return p; } function makePre(text) { p = document.createElement("pre"); p.appendChild(document.createTextNode(text)); return p; } nd = window.open.document; ndb = nd.body; if (!window.getSelection || !window.getSelection.rangeCount || window.getSelection.getRangeAt(0).collapsed) { nd.title="Generated Source of: " + location.href; ndb.appendChild(makeParagraph("No selection, showing generated source of entire document.")); ndb.appendChild(makeHR); ndb.appendChild(makePre(" \n" + document.documentElement.innerHTML + "\n ")); } else { nd.title="Partial Source of: " + location.href; ndb.appendChild(makePre(getSelSource)); }; void 0
 * Description : "Displays the DOM tree of the selection as HTML. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#partial_source

show blocks
javascript:(function{var newSS; newSS=document.createElement("link"); newSS.rel="stylesheet"; newSS.type="text/css"; newSS.href = "http://www.cs.hmc.edu/~jruderma/block-structure.css"; document.getElementsByTagName("head")[0].appendChild(newSS); });
 * Description : "Draws borders to show tables (colors indicate nesting), paragraphs, and divs. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#show_blocks

topographic view
javascript:(function{var s=&quot;body&quot;,c=&quot;&quot;,I=&quot; ! important;&quot;,i,b,f,x,h; for(i=0;i<17;++i) { x = i.toString(16); b = i>15?&quot;FCC&quot;:x+x+x; f = i>9?&quot;000&quot;:&quot;FFF&quot;; c += s + &quot; {background: #&quot; + b + I + &quot;border-color: #&quot; + b + I + &quot;color: #&quot; + f + I + &quot;}\n&quot;; s += &quot; *&quot;; } if(document.createStyleSheet) { document.createStyleSheet(&quot;javascript:'&quot;+c+&quot;'&quot;); } else { h=document.createElement('link'); h.rel='stylesheet'; h.href='data:text/css,'+escape(c); document.getElementsByTagName(&quot;head&quot;)[0].appendChild(h);}})
 * Description : "Shows the nesting level of every element using shading. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#topographic_view

topo with borders
javascript:(function{var s=&quot;body&quot;,c=&quot;&quot;,I=&quot; ! important;&quot;,i,b,f,x,h; for(i=0;i<17;++i) { x = i.toString(16); b = i>15?&quot;FCC&quot;:x+x+x; f = i>9?&quot;000&quot;:&quot;FFF&quot;; c += s + &quot; {background: #&quot; + b + I + &quot;border: 1px outset #&quot; + b + I + &quot;color: #&quot; + f + I + &quot;}\n&quot;; s += &quot; *&quot;; } if(document.createStyleSheet) { document.createStyleSheet(&quot;javascript:'&quot;+c+&quot;'&quot;); } else { h=document.createElement('link'); h.rel='stylesheet'; h.href='data:text/css,'+escape(c); document.getElementsByTagName(&quot;head&quot;)[0].appendChild(h);}})
 * Description : "Shows the nesting level of every element using shading and 3D borders. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#topo_with_borders

make link
javascript:function htmlEscape(s){s=s.replace(/&/g,'&amp;');s=s.replace(/>/g,'&gt;');s=s.replace(/</g,'&lt;');return s;} function linkEscape(s){s=s.replace(/&/g,'&amp;');s=s.replace(/&quot;/,'&quot;');return s} h = '<a href=&quot;' + linkEscape(location.href) + '&quot;>' + htmlEscape(document.title) + '</a>'; with(window.open.document){write(h+' <textarea name=a rows=5 cols=80 wrap=hard>'+htmlEscape(h)+'  '); close; f.a.select; } void 0
 * Description : "Creates the HTML code to link to the current page. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#make_link

named anchors
javascript:(function{var atags,i,name,a; anchs = document.anchors; for(i=0; i<anchs.length; ++i) { a = anchs[i]; name = a.name; a.appendChild(document.createTextNode("#" + name)); a.style.border = "1px solid"; a.href = "#" + name; } });
 * Description : "Makes anchors visible, letting you link to or bookmark a section of a page. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#named_anchors

onerror status
javascript:(function { var i=0; window.onerror = function(m,u,n) { window.status = &quot;JS Error #&quot; + ++i + &quot;: '&quot; + m + &quot;' &quot; + (/^javascript:/(u) ? &quot;(bookmarklet)&quot; : &quot;(line &quot; + n + &quot; of &quot; + u + &quot;)&quot;); return true;/*suppress default error message*/ }});
 * Description : "When a JavaScript error occurs, shows the error message in the status bar. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#onerror_status

onerror alert
javascript:window.onerror = function(m,u,n) { alert("JS error: " + m + (/^javascript:/(u) ? "\n\n(bookmarklet)" : "\n\nLine " + n + " of \n" + u)); return true;/*suppress default error message*/ }; void 0
 * Description : "When a JavaScript error occurs, shows the error message in a dialog. "
 * From : http://www.squarefree.com/bookmarklets/webdevel.html#onerror_alert

validate html
javascript:(function{ function fixFileUrl(u) { var windows,u; windows = (navigator.platform.indexOf("Win") != -1); /* chop off file:///, unescape each %hh, convert / to \ and | to : */  u = u.substr(windows ? 8 : 7); u = unescape(u); if(windows) { u = u.replace(/\//g,"\\"); u = u.replace(/\|/g,":"); } return u; } /* bookmarklet body */ var loc,fileloc; loc = document.location.href; if (loc.length > 9 && loc.substr(0,8)=="file:///") { fileloc = fixFileUrl(loc); if (prompt("Copy filename to clipboard, press enter, paste into validator form", fileloc) != null) { document.location.href = "http://validator.w3.org/file-upload.html" } } else document.location.href = "http://validator.w3.org/check?uri=" + escape(document.location.href); void(0); });
 * Description : "Validates HTML using the <a href="http://www.w3.org/">W3C</a> <a href="http://validator.w3.org/">HTML validator</a>. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#validate_html

quick validate
javascript:location = 'http://validator.w3.org/check?uri=' + escape(location) + ((document.doctype && document.doctype.toString) ? '' : '&doctype=HTML+4.01+Transitional') + '&charset=' + document.characterSet + '&ss=1';
 * Description : "Validates HTML, avoiding "missing doctype" and "missing charset" errors. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#quick_validate

netcraft
javascript:location = 'http://uptime.netcraft.com/up/graph?site='+escape(location); void 0
 * Description : "Tells you what type of server a site uses and displays an uptime graph. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#netcraft

http headers
javascript:document.location.href = 'http://webtools.mozilla.org/web-sniffer/view.cgi?url=' + escape(document.location.href)
 * Description : "Uses <a href="http://webtools.mozilla.org/web-sniffer/">Web Sniffer</a> to display HTTP headers. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#http_headers

grayscale
javascript:document.body.style.filter='gray';void(0);
 * Description : "Applies a "black and white TV" filter to the page. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#grayscale

PDAize
javascript:var s=document.createElement('link');s.setAttribute('href','http://www.ressukka.net/misc/pdaize.css');s.setAttribute('rel','stylesheet');s.setAttribute('type','text/css'); document.getElementsByTagName('head')[0].appendChild(s);var l=document.getElementsByTagName('img');for(var i=0;il.length;i++){if(l[i].width>176){l[i].height*=176/l[i].width;l[i].width=176}else if(l[i].naturalWidth>176){var e=176/l[i].naturalWidth;l[i].height=l[i].naturalHeight*e;l[i].width=176;}}void(0);
 * Description : "Lets you see what a page might look like on a PDA. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#PDAize

linearize
javascript:(function{var D=document,e,styles=&quot;table,thead,tbody,tr,th,td{display:block!important;}*{width:auto!important;height:auto!important;position:static!important;float:none!important;margin-left:0!important;margin-right:0!important;} img,iframe,embed,object{display:none;} body {margin:4px!important;}&quot;; e=D.createElement('link'); e.rel='stylesheet'; e.href=window.opera ? &quot;javascript:'&quot;+styles+&quot;'&quot; : &quot;data:text/css,&quot;+styles; D.getElementsByTagName(&quot;head&quot;)[0].appendChild(e)})
 * Description : "Linearizes the text of the page and removes most non-text elements. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#linearize

check images
javascript:(function{var ims=document.images, brokenCount=0, brokenURLs="", text, i; for(i=0;i<ims.length;++i) if (! (ims[i].naturalHeight || ims[i].fileSize > 0)) { ++brokenCount; brokenURLs += "URL: " + ims[i].src + "\n"; }; text = brokenCount + " broken image" + (brokenCount==1?"":"s"); if(brokenCount) alert(text + ":\n\n" + brokenURLs); else alert("No broken images."); })
 * Description : "Lists the URLs of broken images. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#check_images

zap images
javascript:(function{function toArray (c){var a, k;a=new Array;for (k=0; k < c.length; ++k)a[k]=c[k];return a;}var images, img, altText;images=toArray(document.images);for (var i=0; i < images.length; ++i){img=images[i];altText=document.createTextNode(img.alt);img.parentNode.replaceChild(altText, img)}});
 * Description : "Replaces each image with its <a href="http://ppewww.ph.gla.ac.uk/%7Eflavell/alt/alt-text.html">alternate text</a>. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#zap_images

check alts
javascript:(function{function d(s){return s==null?"missing":"\""+s+"\""}var c=[0,0,0],i,P,a,y,D=document; if(D.createElement("img").getAttribute("alt")!=null)alert("Your browser misreports missing alts as empty alts.");for(i=0;P=D.images[i];++i){a=P.getAttribute("alt");y=!!a+(a!=null);++c[y];P.style.border="2px "+["dotted red","dashed #888","solid green"][y];P.title="Alt: "+d(a)+", Title: "+d(P.getAttribute("title"));}top.status="Image alt texts: "+c[0]+" missing, "+c[1]+" empty, "+c[2]+" present"})
 * Description : "Shows which images have missing and empty alts using borders and tooltips. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#check_alts

list alts
javascript:(function{var A={},B=[],D=document,i,e,a,k,y,s,m,u,t,r,j,v,h,q,c,G;function C(t){return D.createElement(t)}function P(p,c){p.appendChild(c)}function T(t){return D.createTextNode(t)}for(i=0;e=D.images[i];++i){a=e.getAttribute(&quot;alt&quot;);k=escape(e.src)+&quot;%&quot;+(a!=null)+a;if(!A[k]){y=!!a+(a!=null);s=C(&quot;span&quot;);s.style.color=[&quot;red&quot;,&quot;gray&quot;,&quot;green&quot;][y];s.style.fontStyle=[&quot;italic&quot;,&quot;italic&quot;,&quot;&quot;][y];P(s,T([&quot;missing&quot;,&quot;empty&quot;,a][y]));m=e.cloneNode(true);if(m.width>350)m.width=350;B.push([0,7,T(e.src.split('/').reverse[0]),m,s]);A[k]=B.length;}u=B[A[k]-1];u[1]=(T(++u[0]));}t=C(&quot;table&quot;);t.border=1;r=t.createTHead.insertRow(-1);for(j=0;v=[&quot;#&quot;,&quot;Filename&quot;,&quot;Image&quot;,&quot;Alternate text&quot;][j];++j){h=C(&quot;th&quot;);P(h,T(v));P(r,h);}for(i=0;q=B[i];++i){r=t.insertRow(-1);for(j=1;v=q[j];++j){c=r.insertCell(-1);P(c,v);}}G=open.document;G.open;G.close;P(G.body,t);})
 * Description : "Lists images and their alternate text (or "missing" or "empty"). "
 * From : http://www.squarefree.com/bookmarklets/validation.html#list_alts

blogidate html4.01 transitional
javascript:(function{var s,d,f,i,x,u; s='<!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;>     ';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName(&quot;textarea&quot;)[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+=&quot;\n  &quot;; if(!u){alert(&quot;No textareas to validate!&quot;); return; } d=open.document; d.write(' <form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=[&quot;area&quot;,&quot;warnings&quot;,&quot;input&quot;][i];++i) { d.write(&quot;<input type=hidden name=&quot;+x+&quot;>&quot;); f[i].value=[s,&quot;yes&quot;,&quot;yes&quot;][i]; } f.submit; })
 * Description : "Validates HTML fragments in textareas. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#blogidate_html4.01_transitional

blogidate html4.01 strict
javascript:(function{var s,d,f,i,x,u; s='<!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;>     ';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName(&quot;textarea&quot;)[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+=&quot;\n  &quot;; if(!u){alert(&quot;No textareas to validate!&quot;); return; } d=open.document; d.write(' <form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=[&quot;area&quot;,&quot;warnings&quot;,&quot;input&quot;][i];++i) { d.write(&quot;<input type=hidden name=&quot;+x+&quot;>&quot;); f[i].value=[s,&quot;yes&quot;,&quot;yes&quot;][i]; } f.submit; })
 * Description : "Validates HTML fragments in textareas. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#blogidate_html4.01_strict

blogidate xhtml1 transitional
javascript:(function{var s,d,f,i,x,u; s='<!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;>     ';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName(&quot;textarea&quot;)[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+=&quot;\n  &quot;; if(!u){alert(&quot;No textareas to validate!&quot;); return; } d=open.document; d.write(' <form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=[&quot;area&quot;,&quot;warnings&quot;,&quot;input&quot;][i];++i) { d.write(&quot;<input type=hidden name=&quot;+x+&quot;>&quot;); f[i].value=[s,&quot;yes&quot;,&quot;yes&quot;][i]; } f.submit; })
 * Description : "Validates XHTML fragments in textareas. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#blogidate_xhtml1_transitional

blogidate xhtml1 strict
javascript:(function{var s,d,f,i,x,u; s='<!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;>     ';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName(&quot;textarea&quot;)[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+=&quot;\n  &quot;; if(!u){alert(&quot;No textareas to validate!&quot;); return; } d=open.document; d.write(' <form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=[&quot;area&quot;,&quot;warnings&quot;,&quot;input&quot;][i];++i) { d.write(&quot;<input type=hidden name=&quot;+x+&quot;>&quot;); f[i].value=[s,&quot;yes&quot;,&quot;yes&quot;][i]; } f.submit; })
 * Description : "Validates XHTML fragments in textareas. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#blogidate_xhtml1_strict

blogidate xml well-formedness
javascript:(function{var u; function recurse(w){var i,x; for(i=0;x=w.document.getElementsByTagName(&quot;textarea&quot;)[i];++i){checkWellFormedness(x, w.document);u=true;} for(i=0;x=w.frames[i];++i)try{recurse(x)}catch(e){}} recurse(top); if(!u){alert(&quot;No textareas to validate!&quot;); } function changeBackground(ta, c) { ta.style.backgroundColor = c; ta.style.color = &quot;#000&quot;; ta.addEventListener(&quot;input&quot;, f, false); function f { this.removeEventListener(&quot;input&quot;, f, false); this.style.backgroundColor=&quot;#fff&quot;; window.status = &quot;&quot;; } } function checkWellFormedness(ta, doc) { var x,de,error,line,column,lines,cc,i,spot; x=doc.createElement(&quot;iframe&quot;); x.style.display=&quot;none&quot;; x.onload = g; function g { window.status = window.status;/*Prevent &quot;done&quot; for second textarea from overriding error message for first textarea*/ de = x.contentDocument.documentElement; if(de.tagName == &quot;testroot&quot;) { changeBackground(ta, &quot;#bfb&quot;); } else if (de.tagName == &quot;parsererror&quot;) { changeBackground(ta, &quot;#fdd&quot;); de.normalize; error = de.childNodes[0].data.split(&quot;\n&quot;); if(/(\d+)[^\d]+(\d+)/(error[2])) { line = parseInt(RegExp.$1); column = parseInt(RegExp.$2); window.status = &quot;Line &quot; + (line-2) + &quot; column &quot; + column + &quot;: &quot; + error[0]; lines = ta.value.split(&quot;\n&quot;); cc = 0; for(i=0; i < (line-3); ++i) cc += lines[i].length + 1; spot = Math.min(cc + (column - 1), ta.value.length - 1); ta.focus; ta.selectionStart = spot; ta.selectionEnd = spot + 2; } else alert(&quot;No line number information!?&quot;) } else alert(&quot;Unexpected root!? &quot; + de.tagName);}; x.src='data:text/xml;charset=UTF-8,' + encodeURIComponent('<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?>\n \n' + (ta.value) + ' '); doc.body.appendChild(x); } })
 * Description : "Quickly checks the well-formedness of XML fragments in textareas. "
 * From : http://www.squarefree.com/bookmarklets/validation.html#blogidate_xml_well-formedness

up
javascript:if (location.pathname == "/"); else if (location.pathname.charAt(location.pathname.length-1) == "/") location = ".."; else location = "."; void 0
 * Description : "Goes up a directory from the page you're viewing. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#up

top
javascript:location.pathname = ""; void 0
 * Description : "Goes to the top level of the site. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#top

increment
javascript:(function{ var e,s; IB=1; function isDigit(c) { return ("0" <= c && c <= "9") } L = location.href; LL = L.length; for (e=LL-1; e>=0; --e) if (isDigit(L.charAt(e))) { for(s=e-1; s>=0; --s) if (!isDigit(L.charAt(s))) break; break; } ++s; if (e<0) return; oldNum = L.substring(s,e+1); newNum = "" + (parseInt(oldNum,10) + IB); while (newNum.length < oldNum.length) newNum = "0" + newNum; location.href = L.substring(0,s) + newNum + L.slice(e+1); });
 * Description : "Increases the last number in the URL by 1. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#increment

decrement
javascript:(function{ var e,s; IB=-1; function isDigit(c) { return ("0" <= c && c <= "9") } L = location.href; LL = L.length; for (e=LL-1; e>=0; --e) if (isDigit(L.charAt(e))) { for(s=e-1; s>=0; --s) if (!isDigit(L.charAt(s))) break; break; } ++s; if (e<0) return; oldNum = L.substring(s,e+1); newNum = "" + (parseInt(oldNum,10) + IB); while (newNum.length < oldNum.length) newNum = "0" + newNum; location.href = L.substring(0,s) + newNum + L.slice(e+1); });
 * Description : "Decreases the last number in the URL by 1. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#decrement

make numbered list
javascript:(function{ function selectColor(i) { return ["#fdc", "#cdf", "#bfd", "#dbf", "#fbd"] [i%5]; } var u=location.href, ul=u.length; var tparts=[""], zparts=[], nz=0; function isDigit(c) { return ("0" <= c && c <= "9"); } for (i=0; i<ul; ) { for (i<ul && !isDigit(u.charAt(i)); ++i) tparts[nz] += u.charAt(i); if(i<ul) { zparts[nz]=""; for (i<ul && isDigit(u.charAt(i)); ++i) zparts[nz] += u.charAt(i); tparts[nz+1]=""; ++nz; } } if(!nz) { alert("No numbers in URL."); return; } D=window.open.document; D.write; D.close; function a(n) { A(D.body,n); } function A(p,n) { p.appendChild(n); } function E(q) { return D.createElement(q); } function cT(t) { return D.createTextNode(t) } function cBR { return E("br"); } function cS(t,ci) { var s=E("span"); s.style.background=selectColor(ci); s.style.fontWeight="bold"; A(s, cT(t)); return s; } function cTB(v,oc) { var b=E("input"); b.size=6; b.value=v; b.addEventListener("input", oc, false); return b; } function cCB(t,oc) { var L=E("label"), b=E("input"); b.type="checkbox"; b.checked=true; b.onchange=oc; A(L,b); A(L,cT(t)); return L; } function cL(nz,tparts,zparts) { var L=E("a"); var u=""; for (var i=0; i<nz; ++i) { A(L,cT(tparts[i])); A(L,cS(zparts[i], i)); u += tparts[i]+zparts[i]; } A(L,cT(tparts[nz])); u += tparts[nz]; L.href=u; L.target="_blank"; return L; } a(cT("Original URL: ")); a(cBR); a(cL(nz, tparts, zparts)); a(cBR); a(cBR); var fromBoxes=[], toBoxes=[], padChecks=[]; for (i=0; i<nz; ++i) { a(cT("Run ")); a(cS(zparts[i], i)); a(cT(" from ")); a(fromBoxes[i]=cTB(zparts[i], listURLs)); a(cT(" to ")); a(toBoxes[i]=cTB(zparts[i], listURLs)); a(cT(" (")); a(j=cCB(" Pad with zeroes to maintain length", listURLs)); padChecks[i]=j.childNodes[0]; a(cT(")")); a(cBR); } a(cBR); resultDiv=E("div"); a(resultDiv); listURLs; function listURLs { while (resultDiv.childNodes.length) resultDiv.removeChild(resultDiv.childNodes[0]); var lows=[], highs=[]; for (i=0; i<nz; ++i) { lows[i]=parseInt(fromBoxes[i].value, 10); highs[i]=parseInt(toBoxes[i].value, 10); if(highs[i]-lows[i] > 999) { A(resultDiv, cT("Too many")); return; } } urls=[]; function cb(sta) { var newzparts=[]; for (var i=0; i<nz; ++i) { var z=""+sta[i]; if(padChecks[i].checked) while (z.length < zparts[i].length) z="0"+z; newzparts[i]=z; } A(resultDiv, cL(nz, tparts, newzparts)); A(resultDiv, cBR); } fors(nz, cb, lows, highs); } function fors (n, callback, lows, highs) { function fors_inner (states, v) { if(v >= n) callback(states); else for (states[v]=lows[v]; states[v] <= highs[v]; ++(states[v])) fors_inner(states, v+1); } fors_inner ([], 0); } })
 * Description : "Creates a list of URLs with each number looped through a range you specify. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#make_numbered_list

go to referrer
javascript:if(!document.referrer) alert("No referrer!"); else document.location = document.referrer; void 0
 * Description : "Like clicking Back, but works even after opening a link in a new window. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#go_to_referrer

back to first
javascript:for(i=1; i<=history.length; ++i) history.go(-i); void 0
 * Description : "Goes to the first page in this window's history. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#back_to_first

add sidebar
javascript:(function{var x; x=prompt('Sidebar title:', document.title); if (x != null) { window.sidebar.addPanel(x,location.href,''); } });
 * Description : "Adds the page you're viewing as sidebar panel. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#add_sidebar

domain owner
javascript:(function{var h,p; h = location.host.split('.'); p = h.length; if (h[p-1].match(/com$|net$|org$|edu$/i)) { location = 'http://www.netsol.com/cgi-bin/whois/whois?SearchType=do&STRING=' + h[p-2] + '.' + h[p-1]; } else { alert('This bookmarklet can only look up owners for .com, .net, .org, and .edu domains.'); } void(0); });
 * Description : "Tells you who owns the domain of the page you're viewing. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#domain_owner

edit page
javascript:document.body.contentEditable = 'true'; document.designMode='on'; void 0
 * Description : "Lets you edit the page. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#edit_page

view cookies
javascript:alert('Cookies stored by this host or domain:\n\n' + document.cookie.replace(/; /g,'\n'));
 * Description : "Shows the cookies stored by the page you're viewing. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#view_cookies

transfer cookies
javascript:h=location.host;z=&quot;Bookmarklet: <a href=\&quot;javascript:if(location.host!='&quot;+h+&quot;')location='http://&quot;+h;v=document;function s(c,y){v.cookie=a=c+&quot;; domain=&quot;+d+&quot;; path=/; expires=&quot;+new Date((new Date).getTime+y*1e11).toGMTString}C=v.cookie.split(&quot;; &quot;);d=&quot;..&quot;+h;while(d=(&quot;&quot;+d).substr(1).match(/\..*$/))for(i in C)if(c=C[i]){s(c.match(/.*=/)+C,1);q=v.cookie;q.split(&quot;;&quot;).length>C.length?s(c,-1):q.match(C)?(s(c,1),z=a+&quot; &quot;+z+&quot;';document.cookie='&quot;+a):0}v.write(z+&quot;';[].v\&quot;>my &quot;+h+&quot; cookies</a>&quot;)
 * Description : "Creates a bookmarklet you can use to move cookies to another browser. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#transfer_cookies

zap cookies
javascript:(function{C=document.cookie.split(&quot;; &quot;);for(d=&quot;.&quot;+location.host;d;d=(&quot;&quot;+d).substr(1).match(/\..*$/))for(sl=0;sl<2;++sl)for(p=&quot;/&quot;+location.pathname;p;p=p.substring(0,p.lastIndexOf('/')))for(i in C)if(c=C[i]){document.cookie=c+&quot;; domain=&quot;+d.slice(sl)+&quot;; path=&quot;+p.slice(1)+&quot;/&quot;+&quot;; expires=&quot;+new Date((new Date).getTime-1e11).toGMTString}})
 * Description : "Removes cookies set by the site, including cookies with paths and domains. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#zap_cookies

babelfish
javascript:(function { var d,b,f,u,L,i,K,t, LL="zh Chinese-simplified,zt Chinese-traditional,nl Dutch,fr French,de German,el Greek,it Italian,ja Japanese,ko Korean,pt Portuguese,ru Russian,es Spanish".split(","); d=open.document; b=d.body; f=d.createElement("form"); b.appendChild(f); f.action="http://babelfish.altavista.com/babelfish/trurl_pagecontent"; u=d.createElement("input"); u.name="url"; u.style.width="100%"; u.value=location; f.appendChild(u); for (i=0; L=LL[i]; ++i) { K = L.split(" "); f.appendChild(d.createElement("br")); t=d.createElement("button"); t.name="lp"; t.value=K[0]+"_en"; t.innerHTML = "" + K[1] + " to English"; f.appendChild(t); } })
 * Description : "Translates from 11 languages (you choose the language) to English. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#babelfish

google translate
javascript:location='http://translate.google.com/translate?u=' + encodeURIComponent(location);
 * Description : "Translates from 5 languages (it guesses the language) to English. "
 * From : http://www.squarefree.com/bookmarklets/misc.html#google_translate


 * Search Engine Optimization Bookmarklets
 * find links to squarefree
 * google backlinks
 * atw internal backlinks
 * atw external backlinks
 * atw plaintext backlinks
 * google site search: all
 * atw site search: all
 * number google hits
 * open in ie
 * word frequency
 * Log Analysis Bookmarklets
 * linkify
 * query as link text
 * find links to squarefree
 * Keyword Bookmarklets for Scripters
 * j (statement)
 * ja (expression)
 * jb (node)
 * jp (object)
 * jcs (node)
 * Flash Bookmarklets
 * seek bar
 * seek bar for IE
 * pause
 * rewind
 * fast-forward
 * rewind 5s
 * forward 5s
 * Search bookmarklets
 * google
 * google site search
 * google site search: all
 * google site search: title
 * num=100
 * num=10
 * num=1
 * filter=0
 * @google
 * @alltheweb
 * @teoma
 * @msn
 * @altavista
 * wayback newest
 * wayback search

Bookmarklets.com

 * Page Data http://bookmarklets.com/tools/data/index.phtml
 * Page Freshness? - date of last modification
 * List Email Links - mailto
 * Number of Links
 * List All Links
 * Display Images - show all images in a list
 * Find Phone Numbers
 * Document Size in Windowfulls
 * Send Location
 * Send Selected Text
 * Make Page with Selection
 * Edit Copy of Selection
 * Number of Words in Selection
 * List Words in Selected Text
 * Statusbar Shows URL - zap javascript onmouseover handlers
 * Navigation http://bookmarklets.com/tools/navigation/index.phtml
 * Go to Random Link
 * Go to Selected URL - i.e. even non-hyperlinked urls
 * Duplicate Page
 * Previous Page in New Window -referring page actually
 * Up a Directory
 * Set In-Page Bookmark
 * Go To In-Page Bookmark
 * Add Domain to Favorites
 * Find Any in Page...
 * Speed Reader - 3 speeds available
 * Show Occurrences of Word - one after another
 * Go to First Page in Window
 * Go to Previous Page in Website
 * Back All Frames to Beginning
 * Back, Forward, Reload, Home, Find, Stop - standard navigation buttons
 * Back2, Back3
 * Target Links to New
 * Target Links to Special
 * Target Links to Top
 * Target Links to Self
 * Show robots.txt for this Domain
 * Make Link for Page
 * Page Look http://bookmarklets.com/tools/look/index.phtml
 * Page Color - background color
 * Page Color to White
 * Remove Background Image
 * Text Color...
 * Zoom on First Image
 * Hide All Images
 * Hide 468 x 60 Banners
 * Biggest Frame to Top - de-frame websites
 * Scroll Page - auto-scroll
 * Scroll Page... (variable) - auto-scroll
 * Text Font to Verdana
 * Text Font to Arial
 * Split Frames into Windows
 * Underlines Off/On
 * Highlight Links
 * Mega Blink
 * Windowing http://bookmarklets.com/tools/windowing/index.phtml
 * Move Window Behind
 * Center Window
 * Align Window to Nearest Corner
 * Align Window to Nearest Side
 * Resize Window to Narrow
 * Resize Window to 640 x 480, 800 x 600, Full Screen
 * Resize Window to Quarter
 * Setup 2 Windows
 * Setup 4 Windows
 * Make Link to Page & Window
 * Misc http://bookmarklets.com/tools/misc/index.phtml
 * Date and Time
 * Days Left this Year
 * Tile Image or Animation...
 * Backdrop
 * Stop Music
 * Activate New Plugin
 * IP Address
 * Read Cookie for Site
 * Record Comment for Site
 * Read Comment for Site
 * Personal Note...
 * AutoFill Anonymous
 * Make Mailto Bookmarklet...
 * Make Mail Folder Bookmarklet...
 * Executive Dice Roller...
 * Confidence Booster
 * Lyrics for "99 Bottles of Beer"
 * ROT13 Encoder/Decoder
 * Valentine
 * Dancing Netscape Logo
 * Search http://bookmarklets.com/tools/search/index.phtml
 * More Info About - http://bookmarklets.com/moreinfo.phtml - a meta search system
 * Other Search tools
 * Search
 * Search Alta Vista...
 * Search Lycos...
 * Search WebCrawler...
 * Search Google...
 * Search Northern Light...
 * Smart Browsing...
 * Directories
 * Search Yahoo...
 * Search LookSmart...
 * Search Open Directory...
 * Search The Mining Co. ...
 * Metasearch
 * Search MetaCrawler...
 * Search Inference Find...
 * Search SavvySearch...
 * Search Metafind...
 * Search Dogpile...
 * Search Mamma...
 * News
 * Search CNN News...
 * Search Wired News...
 * Search ABC News...
 * Search News.com...
 * Discussion groups
 * Search Discussion Groups...(DejaNews)
 * Search eGroup Discussion Groups...
 * Search Mailing Lists (Reference.com)
 * Discusion Group Author Profile (DejaNews)
 * Search for Mailing List (Vivian)
 * Search for Mailing List (Liszt)
 * Search for Mailing List (Tile.net)
 * Images
 * Icon Search (Icon Bank)
 * Video Search (WebSEEk)
 * Philip Greenspun's Images...
 * AltaVista Photo Finder...
 * Sunsite Image Finder...
 * Lycos Picture Search...
 * Yahoo Picture Search...
 * Words
 * Thesaurus... (Roget)
 * Phrase Finder...
 * English Dictionary... (Dictionary.com)
 * English Dictionary-Thesaurus... (Wordsmyth)
 * Search for Cliche...(Cliche Finder)
 * Search Dictionary...(UCSD Webster)
 * Acronym or Abbreviation...
 * Search American Literature... (HTI)
 * Search TechEncyclopedia...
 * Search the Quran
 * Search the King James Bible
 * Music
 * Search OLGA...
 * Find CD Track Title... (cddb)
 * Song Lyrics... (Lyrics Server)
 * Search for WAV files... (Filez)
 * Design
 * What's that site running? (Netcraft)
 * Validate HTML (W3C)
 * Search PHP list...
 * JavaScript Info...(Sprockets)
 * Developer Info...(DevSearch)
 * Misc
 * Map of (non-U.S.) City... (MapBlast)
 * Stock Quotes (Nasdaq)...
 * Stock quotes - by name (Pathfinder)
 * Search for Movies... (Filez)
 * Find a Recipe... (SOAR)
 * Find a Gourmet Recipe...
 * Home Maintenance and Repair...
 * Search Pathfinder (Time, Life,...)
 * Software
 * Software Metasearch... (Softcrawler)
 * Windows Shareware... (Shareware.com)
 * Search for Windows Files... (Filez)
 * Macintosh Shareware... (Shareware.com)
 * Search for Macintosh Files... (Filez)
 * People
 * Reverse phone lookup... (Infospace)
 * Find somebody's homepage... (Googol)
 * Search Biography...
 * Health
 * Search Virtual Hospital...
 * Search KidsHealth...
 * Search Your Health Daily...
 * Search Merck Manual...
 * Calculator and Converter tools http://bookmarklets.com/tools/convert/index.phtml
 * Calculator...
 * Download Calculator...
 * Salary Calculator...
 * Average...
 * Add to Running Total...
 * Subtract from Running Total...
 * Report Running Total...
 * Clear Running Total
 * Converters
 * Temperature - Fahrenheit to Celsius...
 * Length - Inches to Millimeters...
 * Length - Inches to Centimeters...
 * Length - Yards to Meters...
 * Length - Miles to Kilometers...
 * Area - Square Feet to Square Meters...
 * Area - Square Miles to Square Kilometers...
 * Area - Acres to Hectares...
 * Weight - Fluid Ounces to Grams...
 * Weight - Pounds to Kilograms...
 * Weight - U.S. Tons to Metric Tons...
 * Volume - Ounces to Milliliters...
 * Volume - Pints to Liters...
 * Volume - Quarts to Liters...
 * Volume - Gallons to Liters...
 * (and reverse versions for all of these)
 * Design - developer - http://bookmarklets.com/tools/design/index.phtml
 * 216 Standard Colors
 * RGB to Hex... - and reverse
 * Basic ISO Latin Characters
 * Character to ASCII - and reverse
 * Escape for Symbol
 * Simple Table Code
 * Screen Properties
 * Reformat Form
 * Edit HTML of Page
 * Find and Replace in Source...
 * Bookmarklets Editor
 * Length of String...
 * Ugly Variable Generator
 * Bookmarklet to Function

Gazingus.org

 * http://www.gazingus.org/html/Validation_Bookmarklets.html
 * W3C
 * Validate Markup (W3C Beta)
 * Validate Markup
 * Validate (with options)
 * Validate Stylesheets
 * Web Design Group (htmlhelp.com)
 * Validate Markup
 * Validate Markup (with options)
 * CAST (cast.org)
 * Validate Accessibility
 * http://www.gazingus.org/html/Page_Weight_and_Speed_Bookmarklet.html
 * Page Weight & Speed - determines how big is the current page(and included images) and how long it will take to download (IE/Win only) (uses script on his server)
 * http://www.gazingus.org/html/Anatomy_of_a_Bookmarklet.html
 * Search Google - also includes considerable information on how to make bookmarklets

The ly detector
javascript:function hl(node,word,re){if(node.hasChildNodes) {var hi_cn;for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) {hl(node.childNodes[hi_cn],word,re);}}if (node.nodeType == 3) { tempNodeVal = node.nodeValue.toLowerCase;tempWordVal = word.toLowerCase;if (re.test(tempNodeVal)) {pn = node.parentNode;if (pn.className != word) {nv = node.nodeValue;ni = tempNodeVal.indexOf(tempWordVal);before = document.createTextNode(nv.substr(0,ni));docWordVal = nv.substr(ni,word.length);after = document.createTextNode(nv.substr(ni+word.length));hiwordtext = document.createTextNode(docWordVal);hiword = document.createElement('span');hiword.className=word;hiword.style['backgroundColor']='yellow';hiword.appendChild(hiwordtext);pn.insertBefore(before,node);pn.insertBefore(hiword,node);pn.insertBefore(after,node);pn.removeChild(node);}}}}var lyRE=/(\w)(ly)(\b)/gim;hl(document.getElementsByTagName('body')[0],'ly',lyRE);
 * Description : A bookmarklet ... which will highlight all the words on a web page which end in -ly.
 * From : http://www.scribbling.net/the_ly_detector

Analyze Page Links
javascript:var total = 0;var internal = 0;var external = 0;for (i=0;i<document.links.length;i++) {if (document.links[i].protocol=='http:'){if ( document.links[i].hostname == document.domain)internal++;else {external++;}total++;}}var pctInternal = Math.round((internal*100)/total);var pctExternal = 100-pctInternal;alert(document.location+'\nTotal document links: '+total+'\n'+pctInternal+'% internal links \n'+pctExternal + '% external links');
 * Description : Shows stats for # of links, % external, and % internal.
 * From : http://scribbling.net/analyze-web-page-links

The Passivator
javascript:var verbsRE=/(\b)(i\'m|it\'s|he\'s|here\'s|she\'s|that\'s|there\'s|they\'re|we\'re|what\'s|who\'s|you\'re|is|are|am|are|was|were|be|being|been|go)(\b)/gi;var lyRE=/(\w)(ly)(\b)/gim;function HL(node){if(node.hasChildNodes){var hi_cn;for(hi_cn=0;hi_cn<node.childNodes.length;hi_cn++){HL(node.childNodes[hi_cn]);}}if(node.nodeType==3){var tempNodeVal=node.nodeValue;if(verbsRE.test(tempNodeVal)){tempNodeVal=tempNodeVal.replace(verbsRE,"$1 $2 $3");tempNodeVal=tempNodeVal.replace(lyRE,"$1 $2 $3");newNode=document.createElement('span');newNode.innerHTML=tempNodeVal;pn=node.parentNode;pn.replaceChild(newNode,node);}}}HL(window.document.getElementsByTagName('body')[0]);
 * Description : "A passive verb and adverb flagger for Mozilla-derived browsers, Safari, and Opera 7.5, with caveats." (quoted from source, see page for caveats and more details.)
 * From : http://www.ftrain.com/ThePassivator.html

Kryogenix.org

 * Show applicable styles - http://www.kryogenix.org/days/applicable
 * Show computed styles for element - http://www.kryogenix.org/days/bookmarklet
 * Show DOM Tree II - http://www.kryogenix.org/days/2004/05/17/showdomtreeii
 * Show DOM tree bookmarklet - http://www.kryogenix.org/days/2004/05/09/bookmarkletShow
 * Show anchors - http://www.kryogenix.org/days/2002/09/26/anchors
 * Using del.icio.us - http://www.kryogenix.org/days/2005/03/15/delicious
 * Reverso - reverses the text on the current page - http://www.kryogenix.org/days/2004/02/13/reverso

Multivalidator
javascript:if (0) void('Multivalidator script (c)2002 Tantek Celik - last modified 2002.03.15');var p27=String.fromCharCode(37)+'27',d=document.location,ft='%3Cframe ',fs=ft+'src=',fe='\' scrolling=\'auto\'>',fc=ft+'style=\'border:2px solid #ff0\' src=\'http://',fm='%3C/frameset>';var h=fs+'\'javascript:document.write('+p27+'%3C!DOCTYPE%20HTML%20PUBLIC%20%22-//W3C//DTD%20HTML%204.0//EN%22%3E%3Cbody%20style%3D%22margin:0;padding:2px%206px%22%3E';var h1='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';var e='%3E%3C/body%3E'+p27+')\' scrolling=\'no\' noresize>';var q=String.fromCharCode(34);var r='%20results',v='%20validator'+r,w='validator.w3.org/check';var ds='%3C!DOCTYPE HTML PUBLIC '+q+'-//W3C//DTD HTML 4.0 Frameset//EN'+q+'>%3Chtml>%3Chead>%3Ctitle>Multivalidator%3C/title>%3C/head>%3Cframeset cols=\'50%,50%\'>%3Cframeset rows=\'24,*\'>';ds+=h+'%3Cdiv%3E'+h1+'Page:%3C/h1%3E'+d+'%3C/div'+e;e='%3C/h1'+e;h+='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';ds+=h+'%3Cscript>document.location=%22'+d+'%22%3C/script>'+e+fm+'%3Cframeset rows=\'24,*,24,*,24,*\'>';ds+=h+'HTML'+v+'%3Ca%20title%3D%22Refresh%20to%20remultivalidate.%20Click%20for%20more%20info%20on%20favelets.%20-Tantek%22%20href%3Dhttp://favelets.com/%20target%3Dhelp%20style%3D%22float:right;padding:1px;width:1em;font:10px%20Avant%20Garde,Chicago,Times,Arial,serif;text-decoration:none%22>@%3C/a>'+e;ds+=fc+w+'?uri='+d+fe;ds+=h+'CSS'+v+e;ds+=fc+'jigsaw.w3.org/css-validator/validator?uri='+d+fe;ds+=h+'HREF%20checker'+r+e;ds+=fc+w+'link?url='+d+fe;ds+=fm+fm+'%3C/html>';document.open;document.write(ds);document.close;void(20020315);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Multivalidator Window
javascript:if (0) void('Multivalidator script (c)2002 Tantek Celik - last modified 2002.03.15');var p27=String.fromCharCode(37)+'27',d=document.location,ft='%3Cframe ',fs=ft+'src=',fe='\' scrolling=\'auto\'>',fc=ft+'style=\'border:2px solid #ff0\' src=\'http://',fm='%3C/frameset>';var h=fs+'\'javascript:document.write('+p27+'%3C!DOCTYPE%20HTML%20PUBLIC%20%22-//W3C//DTD%20HTML%204.0//EN%22%3E%3Cbody%20style%3D%22margin:0;padding:2px%206px%22%3E';var h1='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';var e='%3E%3C/body%3E'+p27+')\' scrolling=\'no\' noresize>';var q=String.fromCharCode(34);var r='%20results',v='%20validator'+r,w='validator.w3.org/check';var ds='%3C!DOCTYPE HTML PUBLIC '+q+'-//W3C//DTD HTML 4.0 Frameset//EN'+q+'>%3Chtml>%3Chead>%3Ctitle>Multivalidator%3C/title>%3C/head>%3Cframeset cols=\'50%,50%\'>%3Cframeset rows=\'24,*\'>';ds+=h+'%3Cdiv%3E'+h1+'Page:%3C/h1%3E'+d+'%3C/div'+e;e='%3C/h1'+e;h+='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';ds+=h+'%3Cscript>document.location=%22'+d+'%22%3C/script>'+e+fm+'%3Cframeset rows=\'24,*,24,*,24,*\'>';ds+=h+'HTML'+v+'%3Ca%20title%3D%22Refresh%20to%20remultivalidate.%20Click%20for%20more%20info%20on%20favelets.%20-Tantek%22%20href%3Dhttp://favelets.com/%20target%3Dhelp%20style%3D%22float:right;padding:1px;width:1em;font:10px%20Avant%20Garde,Chicago,Times,Arial,serif;text-decoration:none%22>@%3C/a>'+e;ds+=fc+w+'?uri='+d+fe;ds+=h+'CSS'+v+e;ds+=fc+'jigsaw.w3.org/css-validator/validator?uri='+d+fe;ds+=h+'HREF%20checker'+r+e;ds+=fc+w+'link?url='+d+fe;ds+=fm+fm+'%3C/html>';var w = window.open('about:blank','Multivalidator','toolbar=yes,status=yes,resizable=yes');w.document.write(ds);w.document.close;w.focus;void(20020315);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

W3C beta validator
javascript:void(document.location='http://validator.w3.org:8001/check?uri='+escape(document.location))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

W3C HTML validator
javascript:void(document.location='http://validator.w3.org/check?uri='+document.location)
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

WDG HTML validator
javascript:void(document.location='http://www.htmlhelp.com/cgi-bin/validate.cgi?url='+document.location)
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

W3C HREF validator
javascript:void(document.location='http://validator.w3.org/checklink?url='+document.location)
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

W3C CSS validator
javascript:void(document.location='http://jigsaw.w3.org/css-validator/validator?uri='+document.location)
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Toggle CSS style sheets
javascript:var i=0;if(document.styleSheets.length>0){cs=!document.styleSheets[0].disabled;for(i=0;i<document.styleSheets.length;i++) document.styleSheets[i].disabled=cs;};void(cs=true);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

PocketPC, iPaq 240x320
javascript:void(window.resizeTo(240,320))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

TV safe 544x372
javascript:void(window.resizeTo(544,372))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

VGA 640x480
javascript:void(window.resizeTo(640,480))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

SVGA 800x600
javascript:void(window.resizeTo(800,600))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

XGA 1024x768
javascript:void(window.resizeTo(1024,768))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

SXGA 1280x1024
javascript:void(window.resizeTo(1280,1024))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

UXGA 1600x1200
javascript:void(window.resizeTo(1600,1200))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

View style rules
javascript:if (false)void('View style rules script by Tantek Celik - last modified 1998.10.27');var whn = (window.location.toString.replace(/[^a-z0-9]/gi,'_'))+'_sr';var imn = 0,ln = 0,isn = 0,undefined,r=String.fromCharCode(13),i=0,j=0;var st = '<HTML><HEAD><TITLE>'+document.title+' Style Rules</TITLE></HEAD><BODY STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px\'><PRE STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace\'>'+r;st += '/* Style Rules For '+document.location+' */'+r+r;function appendRules(ti,ss) {st += '/* '+ti+' */'+r+r;var j=0;for (j=0;j<ss.rules.length;j++){st+=ss.rules[j].selectorText + ' { ' + ss.rules[j].style.cssText + ' }'+r; }st += r+r;}function imf(im) { var k=0;for (k=0;k<im.imports.length;k++)void(imf(im.imports[k]));imn++;var imt = 'external (imported) style sheet '+imn+': '+im.href;void(appendRules(imt,im));}for (i=0;i<document.styleSheets.length;i++){var s = document.styleSheets[i];var tt = s.owningElement.title;for (j=0;j<s.imports.length;j++){void(imf(s.imports[j]));}if (s.owningElement.tagName == 'STYLE'){isn++;if (tt== || tt==undefined)tt = 'untitled inline style sheet '+isn;}else if (s.owningElement.tagName == 'LINK'){ln++;if (tt== || tt==undefined)tt = 'persistent external (linked) style sheet '+ln;else if (s.owningElement.rel.toString.indexOf('alternate')==-1)tt = 'preferred external (linked) style sheet \+tt+'\;else if (true)tt = 'alternate external (linked) style sheet \+tt+'\;tt += ': '+ s.href;}void(appendRules(tt,s));}st+=r+' </BODY></HTML>';var w = window.open('about:blank',whn,'menubar,resizable,scrollbars');w.document.write(st);w.document.close;w.focus;void(19981027);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

View style sheets
javascript:if (false)void('View style sheets script by Tantek Celik - last modified 1998.10.20 ');var whn = (window.location.toString.replace(/[^a-z0-9]/gi,'_'))+'_ss';var imn = 0,ln = 0,isn = 0,sn = 0,undefined,i=0,j=0;for (i=0;i<document.styleSheets.length;i++){var s = document.styleSheets[i];var tt = s.owningElement.title;function imf(im) {var k=0;for (k=0;k<im.imports.length;k++)void(imf(im.imports[k]));sn++;imn++;var imt = 'imported style sheet '+imn;var w = window.open(im.href,whn+sn,'status,location,menubar,resizable,scrollbars');w.document.title = imt;w.document.createStyleSheet();w.document.styleSheets[0].addRule('BODY','background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px');w.document.styleSheets[0].addRule('PRE','background:white;color:black;font:9pt FixedSys,Monaco,monospace');w.focus;}for (j=0;j<s.imports.length;j++){void(imf(s.imports[j]));}if (s.owningElement.tagName == 'STYLE'){sn++;isn++;if (tt== || tt==undefined)tt = 'untitled inline style sheet '+isn;var t = '<HTML><HEAD><TITLE>'+tt+'</TITLE></HEAD><BODY STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px\'><PRE STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace\'>';for (j=0;j<s.imports.length;j++){t+='@import url('+s.imports[j].href+')<BR>';}for (j=0;j<s.rules.length;j++){t+=s.rules[j].selectorText + ' { ' + s.rules[j].style.cssText + ' } <BR>'; } t+=' </BODY></HTML>'; var w = window.open('about:blank',whn+sn,'menubar,resizable,scrollbars');w.focus;w.document.write(t);w.document.close;}else if (s.owningElement.tagName == 'LINK'){sn++;ln++;var w = window.open(s.href,whn+sn,'status,location,menubar,resizable,scrollbars');if (tt!= && tt!=undefined) w.document.title = tt;w.document.createStyleSheet();w.document.styleSheets[0].addRule('BODY','background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px');w.document.styleSheets[0].addRule('PRE','background:white;color:black;font:9pt FixedSys,Monaco,monospace');w.focus;}}void(19981020);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

View HTTP headers
javascript:void(document.location='http://www.delorie.com/web/headers.cgi?url='+escape(document.location))
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

View scripts
javascript:if (false)void('View scripts script by Tantek Celik - last modified 1998.10.30');var whn = (window.location.toString.replace(/[^a-z0-9]/gi,'_'))+'_sc';var ln = 0,isn = 0,sn = 0,undefined,i=0,j=0;for (i=0;i<document.scripts.length;i++){var s = document.scripts[i];var tt = s.title;if (s.src== || s.src==undefined){sn++;isn++;if (tt== || tt==undefined)tt = 'untitled inline script '+isn;var t = '<HTML><HEAD><TITLE>'+tt+'</TITLE></HEAD><BODY STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px\'><PLAINTEXT>';t+=s.outerHTML; var w = window.open('about:blank',whn+sn,'menubar,resizable,scrollbars');w.document.write(t);w.document.close;w.focus;}else{sn++;ln++;var w = window.open(s.src,whn+sn,'status,location,menubar,resizable,scrollbars');if (tt!= && tt!=undefined) w.document.title = tt;w.document.createStyleSheet();w.document.styleSheets[0].addRule('BODY','background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px');w.document.styleSheets[0].addRule('PRE,PLAINTEXT','background:white;color:black;font:9pt FixedSys,Monaco,monospace');w.focus;}}void(19981030);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

View images
javascript:if (false)void('View images script by Tantek Celik - modified 2003.02.11');var n = (window.location.toString.replace(/[^a-z0-9]/gi,'_'))+'_im';var sn = 0,ud,i=0,r='\r';var ss = r;l=document.images.length;if (l==0) alert('No images to see here. Move along.');else for (i=0;i<l;i++){var s = document.images[i];var u = s.src;if (u!='' && u!=ud && ss.indexOf(r+u+r)==-1){ ss+=u+r;sn++;var w=window.open(s.src,n+sn,'height='+Math.max(s.height,32)+',width='+Math.max(s.width,32)+',status=no,location,menubar,resizable,scrollbars');w.focus;}}void(20030211);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Babelfish French to English
javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=fr_en&tt=url')
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Babelfish German to English
javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=de_en&tt=url')
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Babelfish Spanish to English
javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=es_en&tt=url')
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Babelfish Italian to English
javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=it_en&tt=url')
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Babelfish Japanese to English
javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=ja_en&tt=url')
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Choose style sheet
javascript:if (false)void('Choose style sheet... script (C)1998-2001 Tantek Celik - last modified 2001.09.13');var undefined,i=0;var sheets = ',',options = '<OPTION selected>document default';for (i=0;i<document.styleSheets.length;i++){var s = document.styleSheets[i];var tt = s.owningElement.title;if (tt != '' && tt != undefined){if (sheets.indexOf(','+tt+',')==-1) {sheets += tt+',';options += '<OPTION>'+tt;}}}var ds = '<!DOCTYPE HTML PUBLIC %22-//W3C//DTD HTML 4.0 Transitional//EN%22 %22http://www.w3.org/TR/REC-html40/loose.dtd%22><HTML><HEAD><TITLE>Choose style sheet</TITLE><STYLE>SELECT{width:144px; border:medium solid #339;background:#DDD;font:menu} BODY{overflow:hidden;margin:0;text-align:center;background:#CCC} .h{position:absolute;right:1px;top:1px;width:1em;text-align:right;font:10px Avant Garde,Chicago,Times,Arial,serif;text-decoration:none}</STYLE><SCRIPT>function choosess(tt) { var undefined; var d = window.opener.document; for (i=0; i<d.styleSheets.length; i++) { var s = d.styleSheets[i]; var ti=s.owningElement.title; if (ti!=\'\' && ti!=undefined && ti!=tt) s.disabled = true; else s.disabled=false; }}</SCRIPT></HEAD><BODY><CENTER>';ds += '<BR><SELECT ID=S1 SIZE=4 ONKEYPRESS=\'var k = event.keyCode; if (k==13 || k==3 || k==27) { window.close;}; \' ONCHANGE=\'if (this.selectedIndex!=-1) choosess(this.options[this.selectedIndex].text);\'>'+options+'</SELECT><BR>';ds += '<a href=\'http://favelets.com/\' target=help class=h>@</a> ';ds += '</CENTER></BODY></HTML> ';var w = window.open('about:blank','ChooseStyleSheet','height=90,width=164');w.document.write(ds);w.document.close;w.focus;w.document.getElementById('S1').focus;void(19981023);
 * From : http://tantek.com/favelets/
 * License : CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Pixy.cz
http://www.pixy.cz/pixylophone/favelets/ (Also includes many bookmarklets from created by others)
 * Checking the Code
 * LynxView of the document
 * Simple Dom inspector of the document
 * Styles and Stylesheets
 * List computed (cascaded) styles - old and new version
 * Page Design
 * Set background to white
 * Clear background
 * Page Info
 * View HTPP (sic) headers
 * View HTPP transaction
 * View passwords on the page (by Jakub Vrana)
 * Browser Window
 * Resize to full screen
 * Create comparing windows (vertical) - i.e. tile two windows
 * Create comparing windows (horizontal) - i.e. tile two windows

Liorean.web-graphics.com

 * http://liorean.web-graphics.com/
 * ViewStyles
 * ViewScripts
 * SwitchStyles
 * GraphicsInfo

Sam-i-am.com

 * http://sam-i-am.com/work/bookmarklets/dev_debugging.html
 * View Source - replacement for the browser view-source command
 * Send as Text - similar, but slightly more so (uses a server at sam-i-am.com)
 * Show Tables - turns on table borders (uses a server at sam-i-am.com)
 * Zoom In - IE only
 * Zoom Out - IE only
 * Element Ancestry - makes everything bring up a dialog listing it's parents
 * View DOM
 * View DOM Fragment
 * Echo Form

Page Title & Url
javascript: void(prompt('link to this page',document.title + '\n' + location.href));
 * Description : Throws a prompt with the current page's title and url, selected for quick copying. Hit escape or return/enter to dismiss the prompt. I find this handy for quickly dropping a url into an email, or compiling a list of pages. compatible: tested in win32, mac NN3+, win32 IE4+; Mac ie5
 * From : http://sam-i-am.com/work/bookmarklets/misc.html

Create Link
javascript: void(prompt('link to this page',unescape('%3Ca href=%22') + location.href + unescape('%22%3e') + document.title + unescape('%3c/a%3e')));
 * Description : In the same vein as Page Title & Url, this throws a prompt with the current page's title and url - formatted as a link ( title</a>), selected for quick copying. Hit escape or return/enter to dismiss the prompt. compatible: tested in win32, mac NN3+, win32 IE4+; Mac ie5
 * From : http://sam-i-am.com/work/bookmarklets/misc.html

Samrod.com
http://samrod.com/
 * Web Search Engines
 * Google
 * Yahoo!
 * First.gov
 * Images
 * Google Images
 * Getty Images
 * Financial
 * Basic Quote
 * Detailed Quote
 * Business.com
 * Currency - convert currencies with Bloomberg.com
 * Shopping
 * Amazon.com
 * Buy.com
 * Shop Yahoo!
 * PriceWatch
 * PriceGrabber
 * PCPhotoReview
 * Software
 * VersionTracker
 * WindowsTracker
 * Shipping
 * UPS
 * FedEx
 * USPS
 * DHL
 * Reference
 * Google Maps
 * Dictionary - dictionary.com
 * Thesaurus - thesaurus.com
 * to French -altavista's babelfish
 * to Spanish -altavista's babelfish
 * to German -altavista's babelfish
 * to Italian -altavista's babelfish
 * ChemFinder - reg req.
 * Entertainment
 * Movies & TV - IMDB
 * Cast & Crew - IMDB
 * Musicians - Gracenote CDDB
 * Albums - Gracenote CDDB
 * Songs - Gracenote CDDB
 * Legal Research
 * U.S. Constitution
 * U.S. Codes
 * RegisterClub - register domains? seems to be broken as of Sat Apr 30 15:53:07 2005
 * TradeMark Search - US registered trademarks
 * Patent Search - US Patent office
 * CalBAR Search - california lawyers
 * Whois
 * Web Development
 * Document Info - like the browser window of the same name
 * Forms - pulls the forms out of the current page and lets you hack on them
 * Images - shows all images in a list including their dimensions
 * Find All - highlight search
 * Images 2a
 * Cookie - displays cookie info
 * Query String
 * Browser Info
 * Links
 * Referrer
 * Last Modified
 * Whois - of current domain
 * Validate - from w3c

Printer
javascript:void(d=document);void(el=d.getElementsByTagName('a'));out='';for(i=0;i<el.length;i++){void(t = el[i].href.toLowerCase); if(t.indexOf('print') > -1 && t.indexOf('edition') < 0) {void(document.location=el[i].href)}};
 * Description : Tries to find the the printer version of an article. Tested on: NY Times, Salon, Washington Post, LA Times, The Guardian, The Economist(May not work in all areas of the site.), SF Gate, and The New Yorker.
 * From : http://www.smokinggun.com/code/bookmarklets.php

Links Only v1.2
javascript:void(d=document);void(el=d.getElementsByTagName('a'));out='';for(i=0;i<el.length;i++){void(out=out+'<a href='+el[i].href+'>'+el[i].innerHTML+'</a> \r\r')};d.outerHTML=el.length+' link on the page  '+out;
 * Description : Shows only the links on a page. Includes a count of all the links.
 * From : http://www.smokinggun.com/code/bookmarklets.php

Clean Read
javascript:void(d=document);void(el=d.getElementsByTagName('p'));out='';for(i=0;i<el.length;i++){void(out=out+' '+el[i].innerHTML+' \r\r')};d.innerHTML=out;
 * Description : Removes non article text from news sites like CNN, NYTimes, Washington Post and News.com. The will not work on all pages
 * From : http://www.smokinggun.com/code/bookmarklets.php

Clean Read v1.2gh
javascript:void(d=document);void(el=d.getElementsByTagName('p'));out='';for(i=0;i<el.length;i++){void(out=out+' '+el[i].innerHTML+' \r\r')};d.innerHTML=out;' ';
 * Description : Removes non article text from news sites like CNN, NYTimes,  Washington Post and News.com. The will not work on all pages.  Also sets the column width to 400 pixels.  Thanks to Ben Winslow rain @ bluecherry o net for sending in a Mozilla compatible version.
 * From : http://www.smokinggun.com/code/bookmarklets.php

Zap v1.1
javascript:void(d=document);void(el=d.getElementsByTagName('iframe'));for(i=0;i<el.length;i++){void(el[i].style.display='none')};void(el=d.getElementsByTagName('img'));for(i=0;i<el.length;i++){void(el[i].style.display='none')};void(el=d.getElementsByTagName('a'));for(i=0;i<el.length;i++){void(el[i].style.textDecoration='none');}
 * Description : Removes underlines from links, images, iframes(these usually hold rich media ads).
 * From : http://www.smokinggun.com/code/bookmarklets.php

PDF
javascript:void(d=document);void(el=d.getElementsByTagName('a'));out='';function go(u){d.location=u};a = new Array;for(i=0;i<el.length;i++){void(t = el[i].href.toLowerCase);if(t.indexOf('.pdf') > -1 && t.indexOf('javascript:') < 0) {void(a[a.length]=el[i].href);void(out=out+'<a href='+el[i].href+'>'+el[i].innerHTML+'</a> | <span style=\'color:#999999\'>'+el[i].href+'  \r\r')}};if (a.length == 0) alert('No PDFs Found');if (a.length == 1) go(a[0]);if (a.length > 1) d.innerHTML = out;
 * Description : Goes to a PDF file on a page, or will create a list of links to PDF's if more than one is on the page.
 * From : http://www.smokinggun.com/code/bookmarklets.php

Subsimple.com

 * http://subsimple.com/bookmarklets/collection_layout.asp
 * Clear Ads
 * Clear Geocities
 * Clear IntelliTxt
 * Clear Trails
 * Clear Layers
 * Allow Right-click
 * Drop-down to List
 * List to Drop-down
 * Bigger Text Areas
 * Resizable Frames
 * Clear - combines Clear Ads, Clear Geocities, Clear IntelliTxt, Clear Trails, Allow Right-click


 * http://subsimple.com/bookmarklets/collection_links.asp
 * List All Links
 * List E-mail Links
 * Links to New - window
 * Open as URL
 * Find Specific URLs
 * Show Links Dest.
 * Show Domains
 * Domains to Clipboard


 * http://subsimple.com/bookmarklets/collection_navigation.asp
 * Page Last Modified
 * Leave Frameset
 * Continuous Reload
 * Continuous Reload (Show Time)
 * Reload Images
 * http://subsimple.com/bookmarklets/collection_debugging.asp
 * Read Global Variable
 * DOM Browser
 * Script Debugger
 * Script Debugger Advanced


 * http://subsimple.com/bookmarklets/collection_developer.asp
 * ASCII Table
 * List Frames
 * List Comments
 * Table Borders
 * Form Borders
 * Form Info
 * List Embedded Objects
 * Execute HTML
 * HTML Tree
 * Generate HTML Table
 * Resize to...
 * List Fonts Used
 * Add Stylesheet...


 * http://subsimple.com/bookmarklets/collection_search.asp
 * Hilite Text
 * Search Google
 * Search Dictionary.com
 * Translate Selection
 * Translate Page
 * Wikipedia Lookup
 * Validate Page (Hitbox)


 * http://subsimple.com/bookmarklets/collection_experimental.asp
 * Replace Banner Ads
 * True Mirror Site
 * Am I Drunk Yet?
 * Am I Stoned?
 * Tile Background


 * http://subsimple.com/bookmarklets/collection_activex.asp
 * Tables to Excel
 * Excel Colors
 * Page to Word
 * List Root Folders
 * List Printers
 * Run Calc

hrefs and name as link text
javascript:(function{var i,c,x,h; for(i=0;x=document.links[i];++i) { h=x.getAttribute(%22href%22)+%22QBREAKQ%22; x.title+=%22 %22 + x.innerHTML; x.appendChild(document.createTextNode(h)); } })
 * Description : Allows copying of name and href more easily. It marks the end of the href with the text "QBREAKQ" for easy spliting.
 * From : http://en.wikipedia.org/wiki/User:JesseW (based on one from squarefree)

Open all Links in New Windows
javascript:void(thislinks=document.links);for(linklen=0;linklen<thislinks.length;linklen++){thislinks[linklen]=open(thislinks[linklen].toString,'','scrollbars,location,toolbar,status,menubar,resizable');void(window.focus)}
 * Description : Opens all the links on the page in new windows and sends them to the background
 * From : http://www.philburns.com/bookmarklets.html

Open Previous in New Window
javascript:void(str=window.history.previous);if(str){open(href=str,'','scrollbars,location,toolbar,status,menubar,resizable')}else{alert('There is no Previous Window......... Doh!')};void(null)
 * Description : Only works if the Previous is in the same domain
 * From : http://www.philburns.com/bookmarklets.html

Open Next in New Window
javascript:void(str=window.history.next);if(str){open(href=str,'','scrollbars,location,toolbar,status,menubar,resizable')}else{alert('There is no next Window......... Doh!')};void(null)
 * Description : Only works if the Next is in the same domain
 * From : http://www.philburns.com/bookmarklets.html

Search this Domain.
javascript:void(str=prompt('String to search for at '+document.domain,''));if(str){void(location=('http://www.google.com/search?as_q='+str+'&as_sitesearch='+document.domain));}
 * Description : Very cool. Promts for a string, then does a Google advanced search in current domain.
 * From : http://www.philburns.com/bookmarklets.html

Search ODP in Background
javascript:void(str=prompt('Search for:','Foobar'));if(str){void(t3Wc6J2N=open('http://207.200.81.135/cgi-bin/search?search='+escape(str).split('%20').join('+'),'','scrollbars,location,toolbar,status,menubar,resizable'));}(t3Wc6J2N.blur);
 * Description : from - Phil Burns.
 * From : http://www.philburns.com/bookmarklets.html

Search Hotbot (New Window)
javascript:void(str=prompt('Search for:','Foobar'));if(str){void(open('http://www.hotbot.lycos.com/?MT='+escape(str).split('%20').join('+'),'','scrollbars,location,toolbar,status,menubar,resizable'));}
 * Description : from - Rijk Van Geijtenbeek.
 * From : http://www.philburns.com/bookmarklets.html

Links To this Page - AltaVista
javascript:location.href='http://www.altavista.com/cgi-bin/query?q=link:' + document.location.href;
 * Description : from - Rijk van Geijtenbeek.
 * From : http://www.philburns.com/bookmarklets.html

Search for current page in www.archive.org
javascript:location.href='http://web.archive.org/archive_request_ng?collection=web&url='+document.location.href+'&Submit=Take+Me+Back%21';
 * Description : from - Tobias Boyd.
 * From : http://www.philburns.com/bookmarklets.html

Search google groups (New window)
javascript:void(str=prompt('Google Groups Search:',''));if(str){void(open('http://groups.google.com/groups?as_q='+str+'&lr=lang_en&num=50&as_scoring=d&hl=en'));}
 * Description : from - An opera.general poster I think
 * From : http://www.philburns.com/bookmarklets.html

Validate at WDG
javascript:location.href='http://www.htmlhelp.com/cgi-bin/validate.cgi?url=' + document.location.href;
 * Description : from - Rijk van Geijtenbeek.
 * From : http://www.philburns.com/bookmarklets.html

Validate HTML at W3C
javascript:location.href='http://validator.w3.org/check?uri=' + document.location.href + '&doctype=Inline';
 * Description : from - Rijk van Geijtenbeek.
 * From : http://www.philburns.com/bookmarklets.html

Validate HTML at W3C (In Background)
javascript:void(str='http://validator.w3.org/check?uri=' + document.location.href);if(str){abc123=open(href=str,'','scrollbars,resizable');}(abc123.blur);
 * Description : from - Me :).
 * From : http://www.philburns.com/bookmarklets.html

Validate all frames HTML W3C
javascript:if(frames.length>0){for (i=0;i<frames.length;i++){fR=frames[i];void(window.open('http://validator.w3.org/check?uri=' + fR.document.location.href +'&doctype=Inline','','scrollbars,resizable'))}}else{alert('No frames!')}
 * Description : from - Me.
 * From : http://www.philburns.com/bookmarklets.html

Validate CSS for page at W3Cjavascript:
javascript:location.href='http://jigsaw.w3.org/css-validator/validator?uri=' + document.location.href;
 * Description : from - Phil Burns. Finally my own one :)
 * From : http://www.philburns.com/bookmarklets.html

Validate CSS for page at W3C (In Background)
javascript:void(str='http://jigsaw.w3.org/css-validator/validator?uri=' + document.location.href);if(str){abc123=open(href=str,'','scrollbars,resizable');}(abc123.blur);
 * Description : from - Phil Burns. Another :)
 * From : http://www.philburns.com/bookmarklets.html

Validate all frames CSS W3C
javascript:if(frames.length>0){for (i=0;i<frames.length;i++){fR=frames[i];void(window.open('http://jigsaw.w3.org/css-validator/validator?uri=' + fR.document.location.href,fR.name+i,'','scrollbars,resizable'))}}else{alert('No frames!')}
 * Description : from - Me.
 * From : http://www.philburns.com/bookmarklets.html

Validate HTML & CSS at W3C (In Background)
javascript:void(str='http://jigsaw.w3.org/css-validator/validator?uri=' + document.location.href);if(str){abc123=open(href=str,,'scrollbars,resizable');}abc123.blur;(str='http://validator.w3.org/check?uri=' + document.location.href + '&doctype=Inline');if(str){abc123=open(href=str,,'scrollbars,resizable');}abc123.blur;
 * Description : Opens two windows from - Phil Burns. Another :)
 * From : http://www.philburns.com/bookmarklets.html

Document Info
javascript:Wn7zG3=open('','Z6','width=400,height=400,scrollbars,resizable,menubar'); with(Wn7zG3.document){write('<basetarget=_blank>');{write(' URL <ahref="',document.URL,'">',document.URL,' Hostname ',document.location.hostname);};write(' Frame URLs ');var pw=parent;var i = 0;while (i<pw.length){aXz=pw.frames[i++].location;write('<a HREF="',aXz,'">',aXz,'</a> ');};{write(' Document last modified ',document.lastModified,' Referrer ',document.referrer,' Cookie ',document.cookie,' Hash ',document.location.hash,' Links ');};var i =0;while(i<document.links.length){aXz=document.links[i++].href;write('<a HREF="',aXz,'">',aXz,'</a> ');};{write(' Images ');};var i =0;while(i<document.images.length){aXz=document.images[i++].src; write('<a HREF="',aXz,'">',aXz,'</a> ');};void(close)}
 * Description : Very nice... shows URL, hostname, the URLs of all frames (clickable), modification date, referrer, hash (both if provided only), lists all links and all images (both clickable), all in a new popup window. By - Roland Reck.
 * From : http://www.philburns.com/bookmarklets.html

Document Info 2
javascript:void(thiswin=top);void(siteinfo=window.open('','Z6','width=400,height=300,scrollbars,resizable,menubar'));with(siteinfo.document){open;write(' <base target=_blank> Information   ');write(' URL <a href="',thiswin.document.URL,'">',thiswin.document.URL,'</a> Hostname ',thiswin.document.location.hostname); write(' Frame URLs '); var pw=thiswin.parent;var i = 0;while (i <pw.length) {aXz=pw.frames[i++].location; write('<a href="',aXz,'">',aXz,'</a> ');}; {write(' Last modified ',thiswin.document.lastModified,' Referrer ',thiswin.document.referrer,' Cookie ',thiswin.document.cookie,' Hash ',thiswin.document.location.hash,' Links ');};var i = 0;while(i<thiswin.document.links.length) {aXz=thiswin.document.links[i++].href;write('<a href="',aXz,'">',aXz,'</a> ');};{write(' Bilder ');}; var i =0;while(i<thiswin.document.images.length){aXz=thiswin.document.images[i++].src; write('<a href="',aXz,'">',aXz,'</a> ');};void(close)}
 * Description : Similar to the above but re-written by Roland for Opera 7
 * From : http://www.philburns.com/bookmarklets.html

Check Document Last Modified
javascript:if (document.lastModified==0) {alert('Date not available!');} else {alert('This document has been modified on: ' + document.lastModified); }
 * Description : from - Maurizio Berti & Rijk van Geijtenbeek.
 * From : http://www.philburns.com/bookmarklets.html

Resize Window to 1024 x 768
javascript:window.resizeTo(1024,768);window.moveTo(0,0);
 * Description : Me.
 * From : http://www.philburns.com/bookmarklets.html

Resize Window to 800 x 600
javascript:window.resizeTo(800,600);window.moveTo(0,0);
 * Description : Me.
 * From : http://www.philburns.com/bookmarklets.html

Resize Window to 640 x 480
javascript:window.resizeTo(640,480);window.moveTo(0,0);
 * Description : Me.
 * From : http://www.philburns.com/bookmarklets.html

Google Translate (English)
javascript:q=location.href;if(q)location.href='http://translate.google.com/translate_c?hl=en&u='+escape(q)
 * Description : from - Partially Correct
 * From : http://www.philburns.com/bookmarklets.html

Show All Images in New Window
javascript:Ai7Mg6P=;for (i7M1bQz=0;i7M1bQz<document.images.length;i7M1bQz++){Ai7Mg6P+='<img src='+document.images[i7M1bQz].src+'> '};if(Ai7Mg6P!=){fg=window.open;with(fg.document){write(' '+Ai7Mg6P+' ')};void(document.close)}else{alert('No images!')}
 * Description : - Modified from bookmarklets.com
 * From : http://www.philburns.com/bookmarklets.html

Wordpress Quick Post
javascript:if(navigator.userAgent.indexOf('Safari') >= 0){Q=getSelection;}else{Q=document.selection?document.selection.createRange.text:document.getSelection;}void(window.open('http://www.blogsite.tld/blog/wp-admin/bookmarklet.php?text='+encodeURIComponent(Q)+'&popupurl='+encodeURIComponent(location.href)+'&popuptitle='+encodeURIComponent(document.title),'WordPress bookmarklet','scrollbars=yes,width=600,height=460,left=100,top=150,status=yes'));
 * Description : opens your wordpress blog's post interface in a popup window; edit the www.blogsite.tld to your wordpress blog installation URI; requires installation of this plugin: http://www.keditasmasi.com/plugins/blogthis.zip


 * From : http://www.keditasmasi.com/blogthis-for-wordpress/ archive.org version

PAS Complaint
javascript:eMlA=;for(iB2M=0;iB2M<document.links.length;iB2M++){if(document.links[iB2M].protocol=='mailto:'){Ju59=document.links[iB2M].toString;eMlA+=Ju59.substring(7,Ju59.length)+','}};if(eMlA!=){javascript:location.href='mailto:'+eMlA+'?SUBJECT=Invalid Code at '+document.title+' - '+location.href+'&BODY=The code on your webpage is not rendering well in my browser. For details please see http://www.htmlhelp.com/cgi-bin/validate.cgi?url='+escape(location.href)}else{alert('No mailto links on page!')}
 * Description : - Send a complaint about a webpages code to all mailto links on a page ;-) from - Me
 * From : http://www.philburns.com/bookmarklets.html

Grants of redistribution

 * | Phil Burns