text:
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(/&/g,'&amp;');s=s.replace(/>/g,'&gt;');s=s.replace(/</g,'&lt;');return s;} function attrQuoteEscape(s){s=s.replace(/&/g,'&amp;'); s=s.replace(/"/g, '&quot;');return s;} x=prompt("show links with this word/phrase in link text or target url (leave blank to list all links):", ""); n=0; if(x!=null) { x=x.toLowerCase; nD = window.open.document; nD.writeln('<title>Links containing "'+htmlEscape(x)+'"</title><base target="_blank">'); nD.writeln('Links on '+htmlEscape(location.href)+'
 with link text or target url containing &quot;' + htmlEscape(x) + '&quot;

'); z = document.links; for (i = 0; i < z.length; ++i) { if ((z[i].innerHTML && z[i].innerHTML.toLowerCase.indexOf(x) != -1) || z[i].href.toLowerCase.indexOf(x) != -1 ) { nD.writeln(++n + '. ' + (z[i].innerHTML || htmlEscape(z[i].href)) + '
'); } } nD.writeln('
'); 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(/&/g,'&amp;').replace(/>/g,'&gt;').replace(/</g,'&lt;').replace(/"/g,'&quot;');}var q,h,i,z=open.document;z.write('
Images linked to by '+hE(location.href)+':

');for(i=0;q=document.links[i];++i){h=q.href;if(h&&I(h))z.write('
'+q.innerHTML+' ('+hE(h)+')
');}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(/&/g,'&amp;');s=s.replace(/>/g,'&gt;');s=s.replace(/</g,'&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 < x.length; ++i) { url = x[i].href; if(linkIsSafe(url)) { z.writeln('
' + x[i].innerHTML + ' (' + htmlEscape(url) + ')
[broken iframe]
'); } } 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("javascript:'"+styles+"'"); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName("head")[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=["blue","red","orange"][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)=="/" ? "" : "/") + p;/*many browsers*/ p=p.split("?")[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 < 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 < 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 && window.getSelection.containsNode) { /* mozilla */ for(i=0; i<dll; ++i) { if (window.getSelection.containsNode(dl[i], true) && linkIsSafe(dl[i].href)) ++n_to_open; } if (n_to_open && confirm('Open ' + n_to_open + ' selected links in new windows?')) { for(i=0; i<dll; ++i) if (window.getSelection.containsNode(dl[i], true) && 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 < 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 < 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<x.length;++i) { x[i].target="_self"; } });
 * 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<x.length;++i) { x[i].target="_blank"; } });
 * 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<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<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>0){ t=t.substring(i); j=t.indexOf('&'); if(j>0)t=t.substring(0,j); p=/https?\:\/\/[^\s]*[^.,;'">\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/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("href"); x.title+=" " + 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+=" " + 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 < x.length; ++i) x[i].method="get"; alert("Changed " + x.length + " forms to use the GET method. After submitting a form from this page, you should be able to bookmark the result."); });
 * 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<x.length; ++k) { f=x[k]; for (j=0;j<f.length;++j) if (f[j].type.toLowerCase == "checkbox") 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<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 && e.type.toLowerCase == "radio") { key=" "+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)&&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<x.length;++k){f=x[k];for(j=0;j<f.length;++j)if(f[j].type.toLowerCase=="radio")mU(f[j]);}window.status="To unselect a selected option button, click on it or press spacebar."});
 * 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<x.length;++k){f=x[k];for(j=0;j<f.length;++j)f[j].removeAttribute("maxLength");}})
 * 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("textarea")[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=="hidden"){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C("div"); label=C("label"); A(div, label); A(label, D.createTextNode(e.name + ": ")); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C("input");/*for ie*/ ne.type="text"; ne.value=e.value; A(label, ne); label.style.MozOpacity=".6"; --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<x.length;++k){f=x[k];for(j=0;j<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=="text"||e.type=="password"||e.tagName.toLowerCase=="textarea")S(e);function S(e){if(!e.N){var x=D.createElement("span"),s=x.style;s.color="green";s.background="white";s.font="bold 10pt sans-serif";s.verticalAlign="top";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 = ""; F = document.forms; for(j=0; j<F.length; ++j) { f = F[j]; for (i=0; i<f.length; ++i) { if (f[i].type.toLowerCase == "password") s += f[i].value + "\n"; } } if (s) alert("Passwords in forms on this page:\n\n" + s); else alert("There are no passwords in forms on this page.");});
 * 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+" "+what+((i==1)?"":"s")}ca=cea=cs=0;df=document.forms;for(i=0;i<df.length;++i){x=df[i];dfe=x.elements;if(x.onsubmit){x.onsubmit="";++cs;}if(x.attributes["autocomplete"]){x.attributes["autocomplete"].value="on";++ca;}for(j=0;j<dfe.length;++j){y=dfe[j];if(y.attributes["autocomplete"]){y.attributes["autocomplete"].value="on";++cea;}}}alert("Removed autocomplete=off from "+n(ca,"form")+" and from "+n(cea,"form element")+", and removed onsubmit from "+n(cs,"form")+". After you type your password and submit the form, the browser will offer to remember your password.")});
 * 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=="TEXTAREA"&&!t.htmlarea){t.htmlarea=1;t.style.display="none";m=d.createElement("div");m.contentEditable=true;m.innerHTML=t.value;s=m.style;s.overflow="scroll";s.width=500;s.height=250;s.border="2px inset green";t.parentNode.insertBefore(m,t);u=U(m,t);setInterval(u,50);f.attachEvent("onsubmit",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=="TEXTAREA"&&!t.midasified){var m=document.createElement("iframe");t.parentNode.insertBefore(m,t);Midas(m,t.value);m.style.background="white";m.style.width=getComputedStyle(t,"").getPropertyValue("width");m.style.height=getComputedStyle(t,"").getPropertyValue("height");m.style.border="2px inset green";m.oldTextarea=t;t.midasified=true;t.style.display="none";var U=makeUpdate(m);setInterval(U,50);f.addEventListener("submit",U,false);if(q=f.posttype){q.selectedIndex=1;q.style.background="#dfd";}}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="on";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("Search phrase:", "");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>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor="yellow";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&& node.childNodes && node.tagName.toUpperCase!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status="Searching for '"+text+"'...";searchWithinNode(document.body, text.toUpperCase, text.length);window.status="Found "+count+" occurrence"+(count==1?"":"s")+" of '"+text+"'.";});
 * 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("Search regexp:", "");if(text==null || text.length==0)return;try{regexp=new RegExp("(" + text +")", "i");}catch(er){alert("Unable to create regular expression using text '"+text+"'.\n\n"+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>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor="yellow";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 && node.childNodes && node.tagName.toUpperCase!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], re);}}return skip;}window.status="Searching for "+regexp+"...";searchWithinNode(document.body, regexp);window.status="Found "+count+" match"+(count==1?"":"es")+" for "+regexp+".";});
 * 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<L;++i) zoomImage(document.images[i], 2); if (!L) alert("This page contains no images."); });
 * 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<L;++i) zoomImage(document.images[i],.5); if (!L) alert("This page contains no images."); });
 * 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<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="Selection"; if (window.getSelection) { /*Moz*/ var s = getSelection; for(i=0; i<s.rangeCount; ++i) { var a, r = s.getRangeAt(i); if (!r.collapsed) { var x = d.createElement("div"); x.appendChild(r.cloneContents); while ((a = x.getElementsByTagName("script")).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<a.childNodes.length;++i) b.appendChild(a.childNodes[i].cloneNode(true));}; nd=window.open.document; nd.open; nd.close; /*140681*/ copyChildren(document.getElementsByTagName("head")[0], nd.getElementsByTagName("head")[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<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<tab.rows.length;++i)if(tab.rows[i].cells.length>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>0)?'a':'d'));return link;}function makeHeader(tableNo,nCols){var header, headerCell, i;header=document.createElement('tr');for(i=0;i<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("This page doesn't contain any tables.");(function{var j, thead;for(j=0;j<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 < 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<bs.length; ++i)for(j=0; j<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="";++nR;}rows.sort(compareRows);for (i=0; i < 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<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("TABLE"); for(i=0;i<ts.length;++i) { var n=0,trs=ts[i].rows,j,tr; for(j=0;j<trs.length;++j) {tr=trs[j]; if(has(tr,"TD"))add(tr,"TD",++n); else if(has(tr,"TH"))add(tr,"TH","Row");}}})
 * 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="table",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="";N.height="";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="";v.height="";if(!v.bgColor)v.bgColor=r.bgColor;while(w<y+b)N.insertRow(w++).p=0;while(N.rows[y].p>j)++y;N.rows[y].appendChild(v);for(z=0;z=0; --i) { oldul = uls[i]; newol = document.createElement("ol"); for(j=0;j<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("pre")[i]; ++i) { L=p.innerHTML.split("\r\n"); d=""+L.length; for(j=0;j<L.length;++j) { n = ""+(j+1)+". "; while(n.length<d.length+2) n="0"+n; L[j] = n + L[j]; } p.innerHTML=L.join("
");/*join with br for ie*/ } })
 * Description : "Numbers lines in
 tags or plain-text documents. "
 * From : http://www.squarefree.com/bookmarklets/pagedata.html#number_lines

rot13 selection
javascript:var coding = "abcdefghijklmnopqrstuvwxyzabcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM"; function rot13(t) { for (var r = "",i=0;i<t.length;i++) { character = t.charAt(i); position = coding.indexOf(character); if (position > -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<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 && 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("javascript:'"+styles+"'"); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName("head")[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 <marquee> and <blink>. "
 * 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=["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)}); 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("javascript:'"+styles+"'"); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName("head")[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("blink", "span"); Z("marquee", "div"); }); 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);}}); 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="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;}"; e=D.createElement('link'); e.rel='stylesheet'; e.href=window.opera ? "javascript:'"+styles+"'" : "data:text/css,"+styles; D.getElementsByTagName("head")[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("Can't find link to printer friendly version.");})
 * 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("; ");for(d="."+location.host;d;d=(""+d).substr(1).match(/\..*$/))for(sl=0;sl<2;++sl)for(p="/"+location.pathname;p;p=p.substring(0,p.lastIndexOf('/')))for(i in C)if(c=C[i]){document.cookie=c+"; domain="+d.slice(sl)+"; path="+p.slice(1)+"/"+"; expires="+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]*[^.,;'">\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("javascript:'"+styles+"'");}else{newSS=D.createElement('link'); newSS.rel='stylesheet';newSS.href='data:text/css,'+escape(styles);D.getElementsByTagName("head")[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("","_blank","width="+screen.width*.6+",left="+screen.width*.35+",height="+screen.height*.9+",resizable,scrollbars=yes")){document.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n\n\n \n\n JavaScript Shell 1.3 \n\n\nvar \nhistList = [\"\"], \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(\"input\");\n  _out = document.getElementById(\"output\");\n\n  _win = window;\n\n  if (opener && !opener.closed)\n  {\n    println(\"Using bookmarklet version of shell: commands will run in opener's context.\", \"message\");\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==\"A\" || t==\"INPUT\")\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 + \" ^ \" + 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 = \"\"; }, 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(\"div\");\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(\"strong\");\n  head.appendChild(document.createTextNode(h + \": \"));\n  div.insertBefore(head, div.firstChild);\n}\n\n\nvar shellCommands = \n{\nload : function load(url)\n{\n  var s = _win.document.createElement(\"script\");\n  s.type = \"text/javascript\";\n  s.src = url;\n  _win.document.getElementsByTagName(\"head\")[0].appendChild(s);\n  println(\"Loading \" + url + \"...\", \"message\");\n},\n\nprint : function print(s) { println(s, \"print\"); },\n\n// the normal function, \"print\", 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 = [\"Methods\", \"Fields\", \"Unreachables\"];\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; } // \"in\" operator throws when param to props is a string\n\n    var type = 1;\n    try\n    {\n      if ((typeof e[a]) == \"function\")\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) : \"\"; }\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(\" of prototype\", j), as[i][j].join(\", \"), \"propList\");\n},\n\nblink : function blink(node)\n{\n  if (!node)                     throw(\"blink: argument is null or undefined.\");\n  if (node.nodeType == null)     throw(\"blink: argument must be a node.\");\n  if (node.nodeType == 3)        throw(\"blink: argument must not be a text node\");\n  if (node.documentElement)      throw(\"blink: argument must not be the document object\");\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(\"Scope is now \" + sc + \".  If a variable is not found in this scope, window will also be searched.  New variables will still go on window.\", \"message\");\n},\n\nmathHelp : function mathHelp\n{\n  printWithRunin(\"Math constants\", \"E, LN2, LN10, LOG2E, LOG10E, PI, SQRT1_2, SQRT2\", \"propList\");\n  printWithRunin(\"Math methods\", \"abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan\", \"propList\");\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 \"limbo\"\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 = \"\";\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) == '\\\"')\n      {\n        //dump(\"skipping quoted chars: \");\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(\"\\n\");\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 = \"\";\n        */\n    }\n  }\n    // get position of cursor within the input box\n    var caret = getcaretpos(_in);\n\n    if(caret) {\n      //dump(\"\\n\");\n      var dotpos, spacepos, complete, obj;\n      //dump(\"caret pos: \" + caret + \"\\n\");\n      // see if there's a dot before here\n      dotpos = findbeginning(_in.value, caret-1, true);\n      //dump(\"dot pos: \" + dotpos + \"\\n\");\n      if(dotpos == -1 || _in.value.charAt(dotpos) != '.') {\n        dotpos = caret;\n//dump(\"changed dot pos: \" + dotpos + \"\\n\");\n      }\n\n      // look backwards for a non-variable-name character\n      spacepos = findbeginning(_in.value, dotpos-1, false);\n      //dump(\"space pos: \" + spacepos + \"\\n\");\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(\"fname: \" + fname + \"\\n\");\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 .+?\\(.*?\\)/), \"tabcomplete\");\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(\"objname: |\" + objname + \"|\\n\");\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 \"print(document.getElements\"\n          // println(\"Can't complete from null or undefined expression \" + objname, \"error\");\n          return;\n        }\n      }\n      //dump(\"obj: \" + obj + \"\\n\");\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(\"nothing to complete\\n\");\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(\"complete: \" + complete + \"\\n\");\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(\"match: \" + a + \"\\n\");\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(\"bestmatch len: \" + i + \"\\n\");\n          }\n          ////dump(\"bestmatch: \" + bestmatch + \"\\n\");\n        }\n      }\n      bestmatch = (bestmatch || \"\");\n      ////dump(\"matches: \" + matches + \"\\n\");\n      var objAndComplete = (objname || obj) + \".\" + bestmatch;\n      //dump(\"matches.length: \" + matches.length + \", tooManyMatches: \" + tooManyMatches + \", objAndComplete: \" + objAndComplete + \"\\n\");\n      if(matches.length > 1 && (tooManyMatches == objAndComplete || matches.length <= 10)) {\n\n        printWithRunin(\"Matches: \", matches.join(', '), \"tabcomplete\");\n        tooManyMatches = null;\n      }\n      else if(matches.length > 10)\n      {\n        println(matches.length + \" matches. Press tab again to see them all\", \"tabcomplete\");\n       tooManyMatches = objAndComplete;\n      }\n      else {\n        tooManyMatches = null;\n      }\n      if(bestmatch != \"\")\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, \"input\");\n}\n\nfunction printAnswer(a)\n{\n  if (a !== undefined) {\n    println(a, \"normalOutput\");\n    shellCommands.ans = a;\n  }\n}\n\nfunction printError(er)\n{ \n  if (er.name)\n    println(er.name + \": \" + er.message, \"error\"); // Because IE doesn't have error.toString.\n  else\n    println(er, \"error\"); // 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 == \"\")\n    return;\n\n  histList[histList.length-1] = question;\n  histList[histList.length] = \"\";\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(\"Target window has been closed.\");\n    return;\n  }\n  \n  try { (\"Shell\" in _win) }\n  catch(er) {\n    printError(\"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.\");\n    return;\n  }\n\n  if (!(\"Shell\" 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 = \"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\";\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\n\n
 JavaScript Shell 1.3 Features: autocompletion of property names with Tab, multiline input with Shift+Enter, input history with (Ctrl+) Up/Down, Math, help  Values and functions: ans, print(string), props(object), blink(node), load(scriptURL), scope(object)  \n\n <textarea id=\"input\" class=\"input\" wrap=\"off\" onkeydown=\"inputKeydown(event)\" rows=\"1\"> \n\n \n\n ");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("","_blank","width="+screen.width*.6+",left="+screen.width*.35+",height="+screen.height*.9+",resizable,scrollbars=yes")){document.write(" JavaScript Development Environment 2.0  \n\n\n\n\n<frameset rows=\"25,*,*\">\n\n  <frame name=\"toolbarFrame\" src=\"about:blank\" noresize=\"noresize\">\n\n  <frame name=\"inputFrame\" src=\"about:blank\">\n\n  <frame name=\"outputFrame\" src=\"about:blank\">\n\n \n\n");document.close; frames[0].document.write("  toolbarFrame \n\n

title: User:JesseW/BookmarkletsUniversal


text:
Hen and Chicken Islands

The Hen and Chicken Islands, usually known as the Hen and Chickens, lie to the east of the North Auckland Peninsula off the coast of northern New Zealand. They lie 12 km east of Bream Head and 40 km south-east of Whangārei with a total area of 8.44 km2.

History
Approximately 18,000 years ago during the Last Glacial Maximum when sea levels were over 100 metres lower than present day levels, the islands were hilly features surrounded by a vast coastal plain. Sea levels began to rise 7,000 years ago, after which the islands separated from the rest of New Zealand.

These islands were given their European name by Captain James Cook, who first sighted them on 25 November 1769. It has been suggested that the name was inspired by an old name for the star cluster usually known as the Pleiades.

Originally owned by the Māori Ngā Puhi iwi, they were sold to the New Zealand Government in 1883. The islands were made a scenic reserve in 1908 owing to the rarity of their flora and fauna, and became a wildlife refuge in 1953. Hen Island had actually passed from Māori hands a few years earlier, being bought by Thomas Outhwaite in 1872. It was bequeathed to the nation by his daughter Isa Outhwaite in 1927, and it too was named as a scenic reserve.

In June 1940, the Canadian-Australasian ship RMS Niagara sank off the islands after hitting a mine. Most of the cargo, which included gold bullion, was later salvaged.

Environment
The islands are noted for their bird life with colonies of seabirds as well as forest birds which have become scarce or extinct on the mainland. The islands have been identified as an Important Bird Area, by BirdLife International because they are home to a breeding population of about 500 pairs of Pycroft's petrels. There are also native reptiles on the islands, including tuatara, geckos and skinks.

The islands
Hen Island, or Taranga, lies 7 km to the southwest from the rest of the archipelago. It is also considerably larger than the Chicken Islands, or Marotiri, which comprise a chain of six small islands running north-west to south-east to the north of Hen Island. The chain consists of Wareware and Muriwhenua Islands (together called North West Chicken), Mauitaha (West Chicken), Lady Alice Island or Motu Muka (Big Chicken), Whatupuke (Middle Chicken), and Coppermine Island (Eastern Chicken).

Taranga (Hen) Island
Taranga is the largest island by some considerable margin, totalling 4.7 km2. Long and thin, it has a length of 6 km and an average width of less than 1000 m. A remnant of a four-million-year-old volcano, the island is dominated by a rocky ridge reaching to about 417 m at its highest point, called The Pinnacles. Sail Rock, a stack, rises from the ocean 3 km to the south of Hen Island, and is a prominent navigational point for yachts.

By the late 1800s, Hen Island was the only place in New Zealand with a surviving population of North Island saddleback. The once common species of forest bird found in the North Island, was nearly wiped out by the human introduction of mammalian predators, such as rats and stoats. In the 1960s translocations of saddleback from Hen Island to other island sanctuaries around New Zealand began.

Wareware and Muriwhenua
Two small rocky islands with a combined area of 3 ha.

Mauitaha
This 20 ha, rugged, scrub-covered rock lies 1 km to the south of Muriwhenua. It rises to 125 m. An unofficial name until 1970 was West Chicken Island.

The New Zealand Department of Conservation and the Ngati Wai iwi have entered into partnership to set up a sanctuary for the Polynesian rat, or kiore, on the islands Mauitaha and Araara. A spokesman for Ngati Wai said the kiore heritage will be protected as the movement of the kiore through the Pacific paralleled the migration of the New Zealand Maori. A spokesman for the Department of Conservation said the department's policy change from eradication would assist scientific research.

Lady Alice Island
Named after Lady Alice Fergusson (wife of Governor General Sir Charles Fergusson), it is the largest of the five Chickens and is of particular significance because of its flora and fauna. The island covers 1.4 km2 and is surrounded by rocky reefs. It was occupied by Māori until the 1820s, and was used as a base for fishermen in the 1890s. Cattle were introduced at about this time, but were removed in the 1920s.

Whatupuke
Formerly known as Whakahau this island is composed of a large eastern section and a peninsula to the southwest. The coast of the peninsula forms one of the chain's main land features, a 300 m wide bay (Starfish Bay). The island covers 1 km2, and is steep, rising to 234 m.

Coppermine Island
Coppermine island formerly known as Mauipane covers an area of 75 ha. It is composed of two sections joined by a short isthmus. As the name suggests, there are copper deposits on the island, but attempts at mining them in 1849 and 1898 proved unprofitable.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: Hen and Chicken Islands


text: Category:Hamlets in New York (state)

title: Category:Hamlets in New York (state)


text:
Assyrian flag

The Assyrian flag ( or ܐܬܐ ܕܐܬܘܪ )  is the flag widely used to represent the Assyrian nation in the homeland and in the diaspora.

Its two components, the star of Utu/Shamash, which was a symbol for the god Shamash, and is combined with the ancient symbol of the god Ashur.

George Bit Atanus first designed the flag in 1968; the Assyrian Universal Alliance, Assyrian National Federation and Bet-Nahrain Democratic Party all adopted the flag in 1971. The flag has a white background with a golden circle at the center, surrounded by a four-pointed star in blue. Four triple-colored (red-white-blue), widening, wavy stripes connect the center to the four corners of the flag. The figure of pre-Christian Assyrian God Ashur, known from Iron Age iconography, features above the centre.

Symbolism
The golden circle at the center represents the sun, which, by its exploding and leaping flames, generates heat and light to sustain the earth and all its living things. The four-pointed star surrounding the sun symbolizes the land, its light blue color symbolizing tranquility.

The wavy stripes extending from the center to the four corners of the flag represent the three major rivers of the Assyrian homeland: the Tigris, the Euphrates, and the Great Zab. The lines are small at the center and become wider as they spread out from the circle. The dark blue represents the Euphrates. The red stripes, whose blood-red hue stands for courage, glory, and pride, represent the Tigris. The white lines in between the two great rivers symbolize the Great Zab; its white color stands for tranquility and peace. Some interpret the red, white, and blue will gather all the Assyrians back to their homeland to stand strong and fight for what they want and what they have gained.

The star on the flag is the old star symbol associated with Shamash, also known as Utu, the sun deity also associated with the planet Saturn. He was worshipped in the ancient Mesopotamian region. He was apparently the deity who provided leaders like Hammurabi, Ur-Nammu, and Gudea with divine laws.

The archer figure symbolizes the pre-Christian god Ashur.

Previous flags
Prior to World War I, Western Assyrians from the Tur Abdin region of Turkey designed an Assyrian flag consisting of a horizontal tricolor with the colors pink, white, and red, with three white stars at the upper hoist. The pink, white, and red bars represented the loyalty, purity, and determination of the Assyrian people, and the three white stars represent the three names or components of the Assyrian nation, Assyrians, Syriacs, and Chaldeans. This flag was used during delegation meetings with Assyrian politicians and Western powers post World War I. It was also in use by the Assyrian National Federation, later renamed the Assyrian American Federation and the Assyrian American National Federation, from its founding in 1933 until 1975 when they adopted the current Assyrian flag.

During the First World War, the Assyrian volunteers commanded by Agha Petros used a red flag with a white cross. Agha Petros' personal standard was the flag of the Volunteers but made of silk, with a golden fringe added, and the words "Trust God and follow the Cross" written in Assyrian above the cross.

Gallery
Variants

title: Assyrian flag


text:
Talk:Billy

I've made no changes to the content (as opposed to format) of this page other than adding one link, but I wonder whether the links to Billy (dog) and Sport Billy should stay, they both seem to have been missing with no action to create them for some time. Andrewa 03:11, 4 Dec 2004 (UTC)

It seems somebody has had his or her share of fun adding the "Billy Clary, a king of kings" link... Perhaps it makes sense to remove it again? —Preceding unsigned comment added by 90.185.163.243 (talk) 18:59, 8 January 2011 (UTC)

title: Talk:Billy


text:
Category:Canal engineers

Canal engineers are civil engineers who specialize in the construction of canals.

title: Category:Canal engineers


text:
User:Stevent/myskin.css

font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, sans-serif; }

title: User:Stevent/myskin.css


text:
Ralph Friedgen

Ralph Harry Friedgen (born April 4, 1947) is a former American football coach. He was most recently the special assistant coach for Rutgers in 2015 after serving as their offensive coordinator in the 2014 season. He was the head coach at the University of Maryland, College Park from 2000 to 2010. Friedgen was previously an offensive coordinator at Maryland, Georgia Tech, and in the National Football League (NFL) with the San Diego Chargers.

Early life and education
Friedgen was born on April 4, 1947, in Harrison, New York. His father, "Big Ralph" Friedgen, attended Fordham University, where he played from 1938 to 1939, and coached high school football for 30 years. The younger Friedgen worked under his father as a water boy and manager, and the two often attended New York Giants and Jets games together. He attended Harrison High School where he played quarterback on his father's team. John Nugent, the head coach of Harrison's rival Rye High School, recommended that his brother, Maryland head coach Tom Nugent, recruit Friedgen. His recruitment was handled by Lee Corso, then an assistant coach at the school. After his first season at Maryland, Nugent was fired as head coach, and his successor Lou Saban moved Friedgen to fullback to fill in for an injured teammate. The following year, Maryland had a new coach, and Bob Ward again changed Friedgen's position, this time to offensive guard, although he had never blocked before. Upset about the constant turnover at head coach and position changes, Friedgen received a favorable recommendation to transfer from coach Ward, but his father said, "You can transfer, but when you get home, the key you have is not going to fit the door because we're changing the lock. Quitters don't live here." He remained at Maryland as a guard and later said the experience taught him a lesson in perseverance. As an undergraduate, he was a member of Phi Delta Theta fraternity. After completion of his bachelor's degree in physical education in 1970, Friedgen served as a graduate assistant at his alma mater, before later accepting positions on the staffs of The Citadel, William and Mary, and Murray State. Joining him on many of these coaching stops was Frank Beamer, who later served as head coach at Virginia Tech.

Assistant coaching career
Friedgen returned to the University of Maryland in 1982 to serve as offensive coordinator under head coach Bobby Ross, who was his mentor during his tenure at The Citadel. During this time period, he had a hand in the development of quarterbacks Stan Gelbaugh and Frank Reich, and most notably Boomer Esiason. It was also during this time that the University of Maryland football program was a perennial top-20 team, winning three consecutive Atlantic Coast Conference championships from 1983 to 1985 and appearing in prominent bowl games. Following a sub-par 1986 season, and amidst an athletic department quagmire due in large part to the Len Bias incident, Friedgen followed Ross to Georgia Tech, a period lasting four years. In 1990, Georgia Tech went from being unranked in the preseason to achieving an 11-0-1 record and a share of the national championship with Colorado. In 1992, Friedgen followed Ross again, this time to the NFL's San Diego Chargers, where he orchestrated an offense that led the franchise to an appearance in Super Bowl XXIX. In 1997, Friedgen returned to Georgia Tech, where, as offensive coordinator, he developed the balanced offensive attack (200 yards on the ground, 200 yards through the air) that would become his trademark. During his second year, the Yellow Jackets were co-champions of the ACC, defeated Notre Dame in the Gator Bowl, and ended the season ranked among the nation's top 10 teams. In 1999, he was the winner and awarded the Frank Broyles Award, given to the nation's top assistant coach. Friedgen brought 32 years of assistant coaching experience (including 21 years as an offensive coordinator either in college or the NFL) with him upon his return to College Park.

Head coaching career
In November 2000, Friedgen was named the head coach of the University of Maryland football team. He was charged with rebuilding a struggling program that had only one winning season and no bowl game appearances since 1990.

2001 season
Friedgen's tenure opened against North Carolina, and early in the first quarter, running back Willie Parker ran 77 yards for a touchdown. Maryland came back to win, 23–7, which made Friedgen the first Terrapins coach to win his opener since Tom Nugent in 1959. During the season, Friedgen led Maryland to a surprising 10–2 record, a top 10 national ranking, the first outright Atlantic Coast Conference (ACC) title by a team other than Florida State since the Seminoles entered the league in 1992 and the school's first conference title since 1985, and an appearance in the 2002 Orange Bowl—the Terrapins' first major bowl bid in more than two decades. Friedgen received numerous "Coach of the Year" plaudits including the Bobby Dodd Coach of the Year Award, the Eddie Robinson Coach of the Year, The Home Depot Coach of the Year Award, and the Walter Camp Coach of the Year.

Throughout the year, Friedgen had challenged his players with the phrase "Are you in or are you out?" After the dramatic first-year turnaround, he was a high-profile candidate for an NFL position, and his players repeated his question. He remained at Maryland and said, "Last year the kids made a commitment to me and I realized it was my turn. We've got plenty left to do. This program has not yet arrived."

2002 season
Friedgen's second year began with a 1–2 record, and he implored his team to consider it the start of a "new season". Maryland then won nine of its remaining ten regular season games, including a come-from-behind homecoming victory against the Philip Rivers-led 15th-ranked NC State team. Sports Illustrated credited a "stifling defense", dynamic special teams play, and an offense that thrived under quarterback Scott McBrien and a simplified playbook despite the loss of leading rusher Bruce Perry to injury. Maryland ended the season with a 30–3 victory over Tennessee in the 2002 Peach Bowl, the school's first bowl victory since the Cherry Bowl in 1985. The team achieved a final record of 11–3, matching the school record for wins in a season first set by the 1976 team.

2003 season
In 2003, the Terrapins finished with a 10–3 record, including a 41–7 victory over rival West Virginia in the 2004 Gator Bowl. The University of Maryland football team became one of five programs nationally to reach the ten-win plateau from 2001 to 2003, and Friedgen became the first coach in ACC history to win ten or more games in his first three seasons as a head coach.

2004 season
The 2004 season was the first disappointment of Friedgen's tenure, and the team failed to qualify for a bowl game. Highlights included, on October 30, an upset of fifth-ranked Florida State to take away the first-ever Maryland win in that series, as well as the first defeat of a top-five team since 1982. On November 27, a 13–7 win over Wake Forest gave Friedgen his 36th win as head coach, which made him the winningest fourth-year coach in conference history.

2005 season
The 2005 season again saw Maryland fail to qualify for a bowl game. Friedgen's team started out with a 4–2 start, but a lack of offensive efficiency and a propensity for unforced turnovers—both of which may be attributed in part to an injury sustained by quarterback Sam Hollenbach—caused the team to win only one of its last five games to finish with a 5–6 record for a second consecutive season. The 2005 season did see the first Crab Bowl Classic game since 1965.

2006 season
After two losing seasons, Friedgen led a Maryland resurgence in 2006 and ended speculation on his job security. The Baltimore Sun surmised that Friedgen would have repeated as ACC Coach of the Year had it not been for Wake Forest's impressive season under Jim Grobe. Maryland qualified for a bowl game for the first time since 2003. Despite being outgained by every one of its eleven Division I FBS opponents, the Terrapins started the season 8–2, highlighted by a 28–26 victory over Virginia in which the team stormed back from a 20–0 halftime deficit to defeat the Cavaliers. Maryland also became the first team since 1985 to defeat both Florida State and Miami in the same year. The Terrapins defeated Purdue 24–7 in the Champs Sports Bowl to give Friedgen his 50th win as Maryland's head coach. Friedgen's 50 wins in six seasons ties him with former North Carolina head coach Dick Crum for the second most wins by a sixth-year coach in the ACC (former Clemson head coach Danny Ford holds the record with 52 wins in his first six seasons.)

2007 season
The 2007 season saw Maryland defeat tenth-ranked Rutgers on the road, as well as eighth-ranked Boston College in the regular-season home finale. This marked the first time in history that the school had beaten two top-10 teams in the same season. Maryland joined Kentucky, LSU, and Illinois as the only teams to accomplish this feat in 2007. A 37–0 shutout of NC State allowed the Terrapins to qualify for postseason play for the fifth time in Friedgen's seven seasons.

On December 28, Maryland played Oregon State in the Emerald Bowl and scored on the first drive. The Terrapins eventually lost, 21–14.

2008 season
Maryland entered the 2008 season with 30 senior players, the largest class since Friedgen took over as head coach in 2001. Despite the experienced team, expectations were low and the ACC's preseason poll projected Maryland to finish fifth among the six teams in the Atlantic Division. At the end of summer training, and amidst some controversy, senior Jordan Steffy was named the starting quarterback over junior Chris Turner who had finished the 2007 campaign atop the depth chart.

In the season-opener, Maryland used all three of its quarterbacks to edge Division I FCS Delaware, 14–7. The following week, the Terrapins were beaten decisively by Middle Tennessee State, 24–14, and some pundits predicted Friedgen was on the coaching "hot seat" and that his job was in peril. Maryland rebounded to record wins against four Top-25 ranked opponents. In week twelve, the Terrapins possessed a 7–3 record and were ranked first in the Atlantic Division with two regular season games remaining. Maryland lost both, however, and the team's standing fell. The Humanitarian Bowl in Boise, Idaho, selected the Terrapins to play the Western Athletic Conference's number-two team, Nevada. In an offensive shoot-out against the nation's number-five offensive team, Maryland triumphed with a final result of 42–35. The Terrapins posted an 8–5 (4–4 ACC) record and Friedgen extended his postseason tally to 4–2, with twice as many bowl wins as any other coach in school history.

2009 season
The Terrapins finished the season 2–10, with narrow victories against the James Madison Dukes and Clemson Tigers. Turnovers, a lack of talent, injuries, inexperience, and poor offensive line play were cited as causes for the poor season.

Friedgen's job security was questioned, but with a $1.75 million salary, there was some question as to whether the University of Maryland could afford to buy out his remaining contract. According to contracts, Friedgen was to retire after the 2011 season and James Franklin would have become the new head coach. The Baltimore Sun chronicled fans frustrations with Friedgen, his staff, and the arrangement with Franklin.

In November 2009, The Washington Post quoted anonymous sources that a buyout of Friedgen's contract of over $4 million was possible. Friedgen's attorney, Jack Reale, said that neither he nor Friedgen had been approached about a buyout. The article also said that Friedgen "privately resented" the athletic department naming Franklin his successor, due to how it affects other members of the coaching staff. It was also reported that Friedgen had support from the leaders of the Terrapin Club and the Maryland Gridiron Network booster groups. Two former Terp basketball players and prominent members of the State University system, Len Elmore and Tom McMillen, expressed doubt that public funds would be used to buy out Friedgen's contract, and boosters of the program said they knew of no effort to raise private funds for that purpose.

On December 1, 2009, Maryland announced Friedgen would return for the 2010 season.

2010 season
Maryland went 8–4 during the regular season. For the turnaround, the Atlantic Coast Conference named Friedgen the ACC Coach of the Year.

After Maryland won seven of its first 10 games, questions about Friedgen's job security diminished. On November 19, 2010, Maryland athletic director Kevin Anderson announced that Friedgen would return for the 2011 season, the final year of his contract. Despite this announcement, after offensive coordinator James Franklin accepted a job at Vanderbilt and offered positions to four other members of the staff, Anderson did not answer questions about Friedgen's future on December 17.

On December 18, 2010, it was reported in The Washington Post that the school was terminating him as head coach and offered a buyout of his remaining contract valued at $2,000,000. On December 20, 2010, athletic director Kevin Anderson made an official announcement that Friedgen would not be returning for the 2011 season. In an interview with WNST radio in Baltimore, Friedgen said he was so angry over the firing that he burned his Maryland diploma and was "flying a Georgia Tech flag right now," though he later clarified that he was joking and had not actually burned his diploma.

Personal life
Friedgen has been married to his wife Gloria (née Spina) since 1973. They have three daughters.

title: Ralph Friedgen