0byt3m1n1
Path:
/
var
/
lib
/
vz
/
www
/
clients
/
client6
/
web11
/
web
/
wp-content
/
plugins
/
wp-google-maps
/
js
/
v8
/
[
Home
]
File: marker.js
/** * @namespace WPGMZA * @module Marker * @requires WPGMZA */ jQuery(function($) { /** * Base class for markers. <strong>Please <em>do not</em> call this constructor directly. Always use createInstance rather than instantiating this class directly.</strong> Using createInstance allows this class to be externally extensible. * @class WPGMZA.Marker * @constructor WPGMZA.Marker * @memberof WPGMZA * @param {object} [row] Data to map to this object (eg from the database) * @augments WPGMZA.MapObject */ WPGMZA.Marker = function(row) { var self = this; this._offset = {x: 0, y: 0}; WPGMZA.assertInstanceOf(this, "Marker"); this.lat = "36.778261"; this.lng = "-119.4179323999"; this.address = "California"; this.title = null; this.description = ""; this.link = ""; this.icon = ""; this.approved = 1; this.pic = null; this.disableInfoWindow = false; WPGMZA.MapObject.apply(this, arguments); if(row && row.heatmap) return; // Don't listen for these events on heatmap markers. if(row) this.on("init", function(event) { if(row.position) this.setPosition(row.position); if(row.map) row.map.addMarker(this); }); this.addEventListener("added", function(event) { self.onAdded(event); }); } WPGMZA.Marker.prototype = Object.create(WPGMZA.MapObject.prototype); WPGMZA.Marker.prototype.constructor = WPGMZA.Marker; /** * Returns the contructor to be used by createInstance, depending on the selected maps engine. * @method * @memberof WPGMZA.Marker * @return {function} The appropriate contructor */ WPGMZA.Marker.getConstructor = function() { switch(WPGMZA.settings.engine) { case "open-layers": if(WPGMZA.isProVersion()) return WPGMZA.OLProMarker; return WPGMZA.OLMarker; break; default: if(WPGMZA.isProVersion()) return WPGMZA.GoogleProMarker; return WPGMZA.GoogleMarker; break; } } /** * Creates an instance of a marker, <strong>please <em>always</em> use this function rather than calling the constructor directly</strong>. * @method * @memberof WPGMZA.Marker * @param {object} [row] Data to map to this object (eg from the database) */ WPGMZA.Marker.createInstance = function(row) { var constructor = WPGMZA.Marker.getConstructor(); return new constructor(row); } WPGMZA.Marker.ANIMATION_NONE = "0"; WPGMZA.Marker.ANIMATION_BOUNCE = "1"; WPGMZA.Marker.ANIMATION_DROP = "2"; Object.defineProperty(WPGMZA.Marker.prototype, "offsetX", { get: function() { return this._offset.x; }, set: function(value) { this._offset.x = value; this.updateOffset(); } }); Object.defineProperty(WPGMZA.Marker.prototype, "offsetY", { get: function() { return this._offset.y; }, set: function(value) { this._offset.y = value; this.updateOffset(); } }); /** * Called when the marker has been added to a map * @method * @method * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.onAdded = function(event) { var self = this; this.addEventListener("click", function(event) { self.onClick(event); }); this.addEventListener("mouseover", function(event) { self.onMouseOver(event); }); this.addEventListener("select", function(event) { self.onSelect(event); }); if(this.map.settings.marker == this.id) self.trigger("select"); if(this.infoopen == "1") this.openInfoWindow(); } WPGMZA.Marker.prototype.initInfoWindow = function() { if(this.infoWindow) return; this.infoWindow = WPGMZA.InfoWindow.createInstance(); } /** * Placeholder for future use * @method * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.openInfoWindow = function() { if(!this.map) { console.warn("Cannot open infowindow for marker with no map"); return; } if(this.map.lastInteractedMarker) this.map.lastInteractedMarker.infoWindow.close(); this.map.lastInteractedMarker = this; this.initInfoWindow(); this.infoWindow.open(this.map, this); } /** * Called when the marker has been clicked * @method * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.onClick = function(event) { } /** * Called when the marker has been selected, either by the icon being clicked, or from a marker listing * @method * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.onSelect = function(event) { this.openInfoWindow(); } /** * Called when the user hovers the mouse over this marker * @method * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.onMouseOver = function(event) { if(this.map.settings.info_window_open_by == WPGMZA.InfoWindow.OPEN_BY_HOVER) this.openInfoWindow(); } /** * Gets the marker icon image URL, without the protocol prefix * @method * @memberof WPGMZA.Marker * @return {string} The URL to the markers icon image */ WPGMZA.Marker.prototype.getIcon = function() { function stripProtocol(url) { if(typeof url != "string") return url; return url.replace(/^http(s?):/, ""); } if(WPGMZA.defaultMarkerIcon) return stripProtocol(WPGMZA.defaultMarkerIcon); return stripProtocol(WPGMZA.settings.default_marker_icon); } /** * Gets the position of the marker * @method * @memberof WPGMZA.Marker * @return {object} LatLng literal of this markers position */ WPGMZA.Marker.prototype.getPosition = function() { return new WPGMZA.LatLng({ lat: parseFloat(this.lat), lng: parseFloat(this.lng) }); } /** * Sets the position of the marker. * @method * @memberof WPGMZA.Marker * @param {object|WPGMZA.LatLng} latLng The position either as a LatLng literal or instance of WPGMZA.LatLng. */ WPGMZA.Marker.prototype.setPosition = function(latLng) { if(latLng instanceof WPGMZA.LatLng) { this.lat = latLng.lat; this.lng = latLng.lng; } else { this.lat = parseFloat(latLng.lat); this.lng = parseFloat(latLng.lng); } } WPGMZA.Marker.prototype.setOffset = function(x, y) { this._offset.x = x; this._offset.y = y; this.updateOffset(); } WPGMZA.Marker.prototype.updateOffset = function() { } /** * Returns the animation set on this marker (see WPGMZA.Marker ANIMATION_* constants). * @method * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.getAnimation = function(animation) { return this.settings.animation; } /** * Sets the animation for this marker (see WPGMZA.Marker ANIMATION_* constants). * @method * @memberof WPGMZA.Marker * @param {int} animation The animation to set. */ WPGMZA.Marker.prototype.setAnimation = function(animation) { this.settings.animation = animation; } /** * Get the marker visibility * @method * @todo Implement * @memberof WPGMZA.Marker */ WPGMZA.Marker.prototype.getVisible = function() { } /** * Set the marker visibility. This is used by the store locator etc. and is not a setting. Closes the InfoWindow if the marker is being hidden and the InfoWindow for this marker is open. * @method * @memberof WPGMZA.Marker * @param {bool} visible Whether the marker should be visible or not */ WPGMZA.Marker.prototype.setVisible = function(visible) { if(!visible && this.infoWindow) this.infoWindow.close(); } WPGMZA.Marker.prototype.getMap = function() { return this.map; } /** * Sets the map this marker should be displayed on. If it is already on a map, it will be removed from that map first, before being added to the supplied map. * @method * @memberof WPGMZA.Marker * @param {WPGMZA.Map} map The map to add this markmer to */ WPGMZA.Marker.prototype.setMap = function(map) { if(!map) { if(this.map) this.map.removeMarker(this); } else map.addMarker(this); this.map = map; } /** * Gets whether this marker is draggable or not * @method * @memberof WPGMZA.Marker * @return {bool} True if the marker is draggable */ WPGMZA.Marker.prototype.getDraggable = function() { } /** * Sets whether the marker is draggable * @method * @memberof WPGMZA.Marker * @param {bool} draggable Set to true to make this marker draggable */ WPGMZA.Marker.prototype.setDraggable = function(draggable) { } /** * Sets options on this marker * @method * @memberof WPGMZA.Marker * @param {object} options An object containing the options to be set */ WPGMZA.Marker.prototype.setOptions = function(options) { } WPGMZA.Marker.prototype.setOpacity = function(opacity) { } /** * Centers the map this marker belongs to on this marker * @method * @memberof WPGMZA.Marker * @throws Marker hasn't been added to a map */ WPGMZA.Marker.prototype.panIntoView = function() { if(!this.map) throw new Error("Marker hasn't been added to a map"); this.map.setCenter(this.getPosition()); } /** * Overrides MapObject.toJSON, serializes the marker to a JSON object * @method * @memberof WPGMZA.Marker * @return {object} A JSON representation of this marker */ WPGMZA.Marker.prototype.toJSON = function() { var result = WPGMZA.MapObject.prototype.toJSON.call(this); var position = this.getPosition(); $.extend(result, { lat: position.lat, lng: position.lng, address: this.address, title: this.title, description: this.description, link: this.link, icon: this.icon, pic: this.pic, approved: this.approved }); return result; } });