/* * ELabel.js - v3.0.2 - 12/08/2010 * https://github.com/erunyon/ELabel * * Copyright (c) 2010 Erik Runyon * Dual licensed under the MIT and GPL licenses. * http://weedygarden.net */ function ELabel(data) { /* data is an object in the following format: new ELabel({ latlng: new google.maps.LatLng(41.700346,-86.238899), label: "Foo", classname: "label", offset: new google.maps.Size(-18, -12), opacity: 100, overlap: true, clicktarget: false }); */ var data = data; // Mandatory parameters this.point = data.latlng; this.html = data.label; // Optional parameters this.classname = data.classname || ""; this.pixelOffset = data.offset || new google.maps.Size(0,0); if (data.opacity) { if(data.opacity < 0){data.opacity = 0;} if(data.opacity > 100){data.opacity = 100;} } this.percentOpacity = data.opacity; this.overlap = data.overlap || false; this.hidden = false; this.clicktarget = (data.clicktarget) ? data.clicktarget : false; } ELabel.prototype = new google.maps.OverlayView; ELabel.prototype.onAdd = function(map) { var div = document.createElement("div"); div.style.position = "absolute"; div.innerHTML = '
' + this.html + '
' ; this.getPanes().floatShadow.appendChild(div); this.map_ = map; this.div_ = div; if(this.percentOpacity) { if(typeof(div.style.filter)=='string'){div.style.filter='alpha(opacity:'+this.percentOpacity+')';} if(typeof(div.style.KHTMLOpacity)=='string'){div.style.KHTMLOpacity=this.percentOpacity/100;} if(typeof(div.style.MozOpacity)=='string'){div.style.MozOpacity=this.percentOpacity/100;} if(typeof(div.style.opacity)=='string'){div.style.opacity=this.percentOpacity/100;} } if(this.overlap) { // This is a work in progress // var z = GOverlay.getZIndex(this.point.lat()); // this.div_.style.zIndex = z; var z = 1000*(90-this.point.lat()); this.div_.style.zIndex = parseInt(z); } if(this.hidden) { this.hide(); } if(this.clicktarget) { var target = this.clicktarget; // Can't get this to work, which would be ideal // google.maps.event.addListener(this.div_, 'click', function() { // google.maps.event.trigger(target, "click"); // }); if (typeof jQuery != 'undefined') { jQuery(this.div_).click(function(){ google.maps.event.trigger(target, "click"); }); } } }; ELabel.prototype.onRemove = function() { this.div_.parentNode.removeChild(this.div_); }; ELabel.prototype.copy = function() { return new ELabel({ latlng: this.point, label: this.html, classname: "label", offset: new google.maps.Size(-18, -12), opacity: 100, overlap: true, clicktarget: false }); }; ELabel.prototype.draw = function() { var proj = this.getProjection(), pos = proj.fromLatLngToDivPixel(this.point); this.div_.style.left = (pos.x + this.pixelOffset.width) + "px"; this.div_.style.top = (pos.y +this.pixelOffset.height) + "px"; }; ELabel.prototype.show = function() { if (this.div_) { this.div_.style.display=""; this.draw(); } this.hidden = false; }; ELabel.prototype.hide = function() { if (this.div_) { this.div_.style.display="none"; } this.hidden = true; }; ELabel.prototype.isHidden = function() { return this.hidden; }; ELabel.prototype.supportsHide = function() { return true; }; ELabel.prototype.setContents = function(html) { this.html = html; this.div_.innerHTML = '
' + this.html + '
' ; this.draw(); }; // ELabel.prototype.setPoint = function(point) { // this.point = point; // if (this.overlap) { // var z = GOverlay.getZIndex(this.point.lat()); // this.div_.style.zIndex = z; // } // this.draw(); // }; ELabel.prototype.setOpacity = function(percentOpacity) { if (percentOpacity) { if(percentOpacity<0){percentOpacity=0;} if(percentOpacity>100){percentOpacity=100;} } this.percentOpacity = percentOpacity; if (this.percentOpacity) { if(typeof(this.div_.style.filter)=='string'){this.div_.style.filter='alpha(opacity:'+this.percentOpacity+')';} if(typeof(this.div_.style.KHTMLOpacity)=='string'){this.div_.style.KHTMLOpacity=this.percentOpacity/100;} if(typeof(this.div_.style.MozOpacity)=='string'){this.div_.style.MozOpacity=this.percentOpacity/100;} if(typeof(this.div_.style.opacity)=='string'){this.div_.style.opacity=this.percentOpacity/100;} } }; ELabel.prototype.getPoint = function() { return this.point; };