User:Zocky/PictureMapPopups.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.
//<pre><nowiki> // Picture Popups + Google Maps for Mediawiki // (c)2005 [[User:Zocky]] // Released under GPL document.write('<link rel="stylesheet" type="text/css" href="' + 'http://en.wikipedia.org/w/index.php?title=User:Zocky/PicturePopups.css' + '&action=raw&ctype=text/css&dontcountme=s">'); document.write('<'+'script type="text/javascript" src="' + 'http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAcI9V6O8AJatRG-P1Ao7swBQQcp3yHfYdvNF2yMwM3uUI13B9EhSmf_wGb8aYtyczGT_QitbWCJoQFw' + '"></'+'script>'); document.addEventListener('click',firstClick,true); //Handle clicks on document until content is loaded function firstClick(e) { var c=document.getElementById('content')||document.getElementById('article'); if (c) { c.addEventListener('click',imageClick,false); document.removeEventListener('click',firstClick,true); } } //Handle clicks on images function imageClick(e) { if (!e.ctrlKey && !e.shiftKey && !e.metaKey && e.target.tagName=='IMG') { var t=e.target; var caption=t.getAttribute('alt'); while (t.tagName!='A') { t=t.parentNode; } var realurl = t.href; var pictitle = unescape(realurl.match(/\/wiki\/Image:(.*)$/)[1].replace(/_/g," ")); if (caption!='Enlarge') { try { var captiondiv=t.nextSibling.nextSibling; if (captiondiv.getAttribute('class')=='thumbcaption') {caption=captiondiv.innerHTML} } catch (er){} x=Math.round(Math.random()*200); y=Math.round(Math.random()*200); var note_content_div=new_note(x, y, '[<a href="'+realurl+'"> > </a>] '+pictitle, '<blink><small><i>loading...</i></small></blink>',caption); note_content_div.addEventListener('click',noteContentClick,true); var cbSuccess=function(x,c) { note_content_div.innerHTML=''; note_content_div.appendChild(findDescendantById(c,'file')) || (note_content_div.innerHTML="Failed. <a>retry</a>"); try { note_content_div.appendChild(findDescendantById(c,'imageLicense')); } catch(er) {}; return true; } var cbFailure=function(x,c) { note_content_div.innerHTML==x.statusText; return true; } loadText(realurl,cbSuccess,cbFailure); } else { var img = t.parentNode.parentNode.parentNode.firstChild.firstChild; if (img.hasAttribute('thumbwidth')) { var dummy=img.getAttribute('thumbwidth') img.setAttribute('thumbwidth',img.width); img.width=dummy; img.parentNode.parentNode.style.width=(img.width+2) + "px"; var dummy=img.getAttribute('thumbheight') img.setAttribute('thumbheight',img.height); img.height=dummy; } else { img.setAttribute('thumbwidth',img.width); img.setAttribute('thumbheight',img.height); var cbSuccess=function(x,c) { var dummy=findDescendantById(c,'file'); if (dummy.firstChild.tagName=='IMG') { img.src=dummy.firstChild.src; img.width=dummy.firstChild.width; img.height=dummy.firstChild.height; } else { img.width=dummy.firstChild.firstChild.width; img.height=dummy.firstChild.firstChild.height; img.src=dummy.firstChild.firstChild.src; } img.parentNode.parentNode.style.width=(img.width+2) + "px"; return true; } var cbFailure=function(x,c) { return true; } loadText(realurl,cbSuccess,cbFailure); } } e.preventDefault(); } else { t=e.target; while (t.tagName!='A' && t.parentNode && t.id!='content') t=t.parentNode; if (!e.ctrlKey && !e.shiftKey && !e.metaKey && t.tagName=='A' && t.href.match(/geohack\.php\?params=/) && GBrowserIsCompatible()) { var lat=t.href.replace(/^.*?(\-)?([\d\.]+)_(([\d\.]+)_)?(([\d\.]+)_)?([SN]).*$/,convert_coord); var long=t.href.replace(/^.*?(\-)?([\d\.]+)_(([\d\.]+)_)?(([\d\.]+)_)?([EW]).*$/,convert_coord); x=Math.round(Math.random()*200); y=Math.round(Math.random()*200); var note_content_div=new_note(x, y, '[<a href="'+t.href+'"> > </a>]' + long + ',' + lat, '','',true); d=document.createElement('div'); d.style.width="700px"; d.style.height="500px"; note_content_div.appendChild(d); var map = new GMap2(d); map.enableContinuousZoom(); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.addControl(new GScaleControl()); var point=new GLatLng(lat,long); var marker = new GMarker(point); map.setCenter(new GLatLng(lat, long), 5); map.addOverlay(marker); map.setMapType(G_HYBRID_MAP); e.preventDefault(); } } } function convert_coord(p,d1,p1,d2,p2,d3,p3,p4) { c=Math.round((parseFloat(0+p1)+parseFloat(0+p2)/60+parseFloat(0+p3)/3600)*1000000)/1000000; if (d1) c=-c; if (p4=='W' || p4=='S') return -c; return c; } //Stop popup images from linking to hi-res pages function noteContentClick(e) { e.target.tagName=='IMG' && e.preventDefault() ; } //NOTES var note_top=100; var active_note; var note_back='globalWrapper'; function note_icons(n) { return '<nobr>[<a onclick="toggle_note(\''+n+'\')"> - </a>] ' + '[<a onclick="close_note(\''+n+'\')"> x </a>]</nobr>'; } function new_note(x,y,title,content,caption,dragmode) { var note_container=document.getElementById(note_back) note_top++; var note = document.createElement("div"); note.id = "note_" + note_top; note.setAttribute('class', "imagenote"); note.setAttribute('minimized', "0"); x>0 && (note.style.left = x + "px") || (note.style.right = -x + "px"); y>0 && (note.style.top = y + "px") || (note.style.bottom = -y + "px"); note.style.zIndex=note_top; note.innerHTML = '<table><tr class="imagenotetitlebar">' + '<td class="imagenotetitle" id="'+note.id+'_title"><span>' + title + '</span></td>' + '<td class="imagenoteicons" id="'+note.id+'_icons" align="right">' + note_icons(note.id) + '</td></tr>' + '<tr><td class="imagenotecontent" id="'+note.id+'_content" colspan="2">'+content+'</td></tr>' + '<tr><td class="imagenotecaption" id="'+note.id+'_caption" colspan="2">'+caption+'</td></tr></table>'; note_container.appendChild(note); if (dragmode || false) { document.getElementById(note.id+'_title').addEventListener("mousedown", pick_note, true); } else { note.addEventListener("mousedown", pick_note, true); note.addEventListener("click", click_note, true); } active_note=note; return document.getElementById(note.id+'_content'); } function close_note(n) { var note_container=document.getElementById(note_back); note_container.removeChild(document.getElementById(n)); } function toggle_note(n) { var note=document.getElementById(n); note.setAttribute('minimized', 1-note.getAttribute('minimized')); } var note_dragging; function pick_note(e) { active_note=e.target; while (active_note.getAttribute('class')!='imagenote') active_note=active_note.parentNode; note_top++; active_note.style.zIndex = note_top; mouse_x = e.clientX; mouse_y = e.clientY; active_note_top = parseInt(active_note.style.top); active_note_left = parseInt(active_note.style.left); document.addEventListener("mousemove", drag_note, false); document.addEventListener("mouseup", drop_note, false); e.preventDefault(); note_dragging=false; } function drag_note(e) { var x = e.clientX; var y = e.clientY; active_note.style.top = (y - mouse_y + active_note_top) + "px"; active_note.style.left = (x - mouse_x + active_note_left) + "px"; note_dragging=true; } function drop_note(e) { document.removeEventListener("mousemove", drag_note, false); document.removeEventListener("mouseup", drop_note, false); } function click_note(e) { note_dragging && e.preventDefault(); } //DOWNLOADER function loadText(url,cb1,cb2) { var x = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false; var c=document.createElement("div"); if (x) { x.onreadystatechange=function() { x.readyState==4 && textLoaded(x,c,cb1,cb2)}; x.open("GET",url,true); x.setRequestHeader('Accept','text/*'); x.send(null); } } function textLoaded(x,c,cb1,cb2) { x.status==200 && ((c.innerHTML=x.responseText) && cb1 && cb1(x,c)) || ( cb2 && cb2(x,c) || alert(x.statusText)); } //XML helper functions function findDescendantById(node, id) { if (node.id == id) { return node; } var i, c; for (i = node.firstChild; i != null; i=i.nextSibling) { c = findDescendantById(i,id); if (c != null) return c; } return null; } //</nowiki></pre>