您的位置:首页 > Web前端 > JQuery

javascript: jquery.gomap-1.3.3.js

2016-01-18 12:40 706 查看
from:http://www.pittss.lv/jquery/gomap/solutions.php

jquery.gomap-1.3.3.js:

/**
* jQuery goMap
*
* @url	 http://www.pittss.lv/jquery/gomap/ * @author	Jevgenijs Shtrauss <pittss@gmail.com>
* @version	1.3.3 2014.11.27
* This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/

(function($) {
var geocoder = new google.maps.Geocoder();

function MyOverlay(map) { this.setMap(map); };
MyOverlay.prototype = new google.maps.OverlayView();
MyOverlay.prototype.onAdd = function() { };
MyOverlay.prototype.onRemove = function() { };
MyOverlay.prototype.draw = function() { };

$.goMap = {};

$.fn.goMap = function(options) {
return this.each(function() {
var goMap = $(this).data('goMap');
if(!goMap) {
var goMapBase = $.extend(true, {}, $.goMapBase);
$(this).data('goMap', goMapBase.init(this, options));
$.goMap = goMapBase;
}
else {
$.goMap = goMap;
}
});
};

$.goMapBase = {
defaults: {
address:					'', // Street, City, Country
latitude:					56.9,
longitude:					24.1,
zoom:						4,
delay:						200,
hideByClick:				true,
oneInfoWindow:				true,
prefixId:					'gomarker',
polyId:						'gopoly',
groupId:					'gogroup',
navigationControl:			true, // Show or hide navigation control
navigationControlOptions:	{
position:	'TOP_LEFT', // TOP, TOP_LEFT, TOP_RIGHT, BOTTOM, BOTTOM_LEFT, BOTTOM_RIGHT, LEFT, RIGHT
style:		'DEFAULT' 	// DEFAULT, SMALL, LARGE
},
mapTypeControl: 			true, // Show or hide map control
mapTypeControlOptions:		{
position: 	'TOP_RIGHT', // TOP, TOP_LEFT, TOP_RIGHT, BOTTOM, BOTTOM_LEFT, BOTTOM_RIGHT, LEFT, RIGHT
style: 		'DEFAULT'// DEFAULT, DROPDOWN_MENU, HORIZONTAL_BAR
},
scaleControl: 				false, // Show or hide scale
scrollwheel:				true, // Mouse scroll whell
directions: 				false,
directionsResult: 			null,
disableDoubleClickZoom:		false,
streetViewControl:			false,
markers:					[],
overlays:					[],
polyline:					{
color:		'#FF0000',
opacity:	1.0,
weight:		2
},
polygon:					{
color:			'#FF0000',
opacity:		1.0,
weight:			2,
fillColor:		'#FF0000',
fillOpacity:	0.2
},
circle:						{
color:			'#FF0000',
opacity:		1.0,
weight:			2,
fillColor:		'#FF0000',
fillOpacity:	0.2
},
rectangle:					{
color:			'#FF0000',
opacity:		1.0,
weight:			2,
fillColor:		'#FF0000',
fillOpacity:	0.2
},
maptype:					'HYBRID', // Map type - HYBRID, ROADMAP, SATELLITE, TERRAIN
html_prepend:				'<div class="gomapMarker">',
html_append:				'</div>',
addMarker:					false
},
map:			null,
count:			0,
markers:		[],
polylines:		[],
polygons:		[],
circles:		[],
rectangles:		[],
tmpMarkers:		[],
geoMarkers:		[],
lockGeocode:	false,
bounds:			null,
overlays:		null,
overlay:		null,
mapId:			null,
plId:			null,
pgId:			null,
cId:			null,
rId:			null,
opts:			null,
centerLatLng:	null,

init: function(el, options) {
var opts 	= $.extend(true, {}, $.goMapBase.defaults, options);
this.mapId	= $(el);
this.opts	= opts;

if (opts.address)
this.geocode({address: opts.address, center: true});
//			else if (opts.latitude != $.goMapBase.defaults.latitude && opts.longitude != $.goMapBase.defaults.longitude)
//				this.centerLatLng = new google.maps.LatLng(opts.latitude, opts.longitude);
else if ($.isArray(opts.markers) && opts.markers.length > 0) {
if (opts.markers[0].address)
this.geocode({address: opts.markers[0].address, center: true});
else
this.centerLatLng = new google.maps.LatLng(opts.markers[0].latitude, opts.markers[0].longitude);
}
else
this.centerLatLng = new google.maps.LatLng(opts.latitude, opts.longitude);

var myOptions = {
center: 				this.centerLatLng,
disableDoubleClickZoom:	opts.disableDoubleClickZoom,
mapTypeControl:			opts.mapTypeControl,
streetViewControl:		opts.streetViewControl,
mapTypeControlOptions:  {
position:	google.maps.ControlPosition[opts.mapTypeControlOptions.position.toUpperCase()],
style:		google.maps.MapTypeControlStyle[opts.mapTypeControlOptions.style.toUpperCase()]
},
mapTypeId:				google.maps.MapTypeId[opts.maptype.toUpperCase()],
panControl: 			opts.navigationControl,
zoomControl:			opts.navigationControl,
panControlOptions: {
position:	google.maps.ControlPosition[opts.navigationControlOptions.position.toUpperCase()]
},
zoomControlOptions: {
position:	google.maps.ControlPosition[opts.navigationControlOptions.position.toUpperCase()],
style:		google.maps.ZoomControlStyle[opts.navigationControlOptions.style.toUpperCase()]
},
scaleControl:			opts.scaleControl,
scrollwheel:			opts.scrollwheel,
zoom:					opts.zoom
};

this.map 		= new google.maps.Map(el, myOptions);
this.overlay	= new MyOverlay(this.map);

this.overlays = {
polyline:	{ id: 'plId', array: 'polylines', 	create: 'createPolyline' },
polygon:	{ id: 'pgId', array: 'polygons', 	create: 'createPolygon' },
circle:		{ id: 'cId',  array: 'circles',		create: 'createCircle' },
rectangle:	{ id: 'rId',  array: 'rectangles',	create: 'createRectangle' }
};

this.plId = $('<div style="display:none;"/>').appendTo(this.mapId);
this.pgId = $('<div style="display:none;"/>').appendTo(this.mapId);
this.cId  = $('<div style="display:none;"/>').appendTo(this.mapId);
this.rId  = $('<div style="display:none;"/>').appendTo(this.mapId);

for (var j = 0, l = opts.markers.length; j < l; j++)
this.createMarker(opts.markers[j]);

for (var j = 0, l = opts.overlays.length; j < l; j++)
this[this.overlays[opts.overlays[j].type].create](opts.overlays[j]);

var goMap = this;
if (opts.addMarker == true || opts.addMarker == 'multi') {
google.maps.event.addListener(goMap.map, 'click', function(event) {
var options = {
position:  event.latLng,
draggable: true
};

var marker = goMap.createMarker(options);

google.maps.event.addListener(marker, 'dblclick', function(event) {
marker.setMap(null);
goMap.removeMarker(marker.id);
});

});
}
else if (opts.addMarker == 'single') {
google.maps.event.addListener(goMap.map, 'click', function(event) {
if(!goMap.singleMarker) {
var options = {
position:  event.latLng,
draggable: true
};

var marker = goMap.createMarker(options);
goMap.singleMarker = true;

google.maps.event.addListener(marker, 'dblclick', function(event) {
marker.setMap(null);
goMap.removeMarker(marker.id);
goMap.singleMarker = false;
});
}
});
}
delete opts.markers;
delete opts.overlays;

return this;
},

ready: function(f) {
google.maps.event.addListenerOnce(this.map, 'bounds_changed', function() {
return f();
});
},

geocode: function(address, options) {
var goMap = this;
setTimeout(function() {
geocoder.geocode({'address': address.address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK && address.center)
goMap.map.setCenter(results[0].geometry.location);

if (status == google.maps.GeocoderStatus.OK && options && options.markerId)
options.markerId.setPosition(results[0].geometry.location);

else if (status == google.maps.GeocoderStatus.OK && options) {
if(goMap.lockGeocode) {
goMap.lockGeocode = false;
options.position  = results[0].geometry.location;
options.geocode   = true;
goMap.createMarker(options);
}
}
else if(status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
goMap.geocode(address, options);
}
});
}, this.opts.delay);
},

geoMarker: function() {
if(this.geoMarkers.length > 0 && !this.lockGeocode) {
this.lockGeocode = true;
var current = this.geoMarkers.splice(0, 1);
this.geocode({address:current[0].address}, current[0]);
}
else if(this.lockGeocode) {
var goMap = this;
setTimeout(function() {
goMap.geoMarker();
}, this.opts.delay);
}
},

setMap: function(options) {
delete options.mapTypeId;

if (options.address) {
this.geocode({address: options.address, center: true});
delete options.address;
}
else if (options.latitude && options.longitude) {
options.center = new google.maps.LatLng(options.latitude, options.longitude);
delete options.longitude;
delete options.latitude;
}

if(options.mapTypeControlOptions && options.mapTypeControlOptions.position)
options.mapTypeControlOptions.position = google.maps.ControlPosition[options.mapTypeControlOptions.position.toUpperCase()];

if(options.mapTypeControlOptions && options.mapTypeControlOptions.style)
options.mapTypeControlOptions.style = google.maps.MapTypeControlStyle[options.mapTypeControlOptions.style.toUpperCase()];

if(typeof options.navigationControl !== 'undefined') {
options.panControl = options.navigationControl;
options.zoomControl = options.navigationControl;
}

if(options.navigationControlOptions && options.navigationControlOptions.position) {
options.panControlOptions = {position: google.maps.ControlPosition[options.navigationControlOptions.position.toUpperCase()]};
options.zoomControlOptions = {position: google.maps.ControlPosition[options.navigationControlOptions.position.toUpperCase()]};
}

if(options.navigationControlOptions && options.navigationControlOptions.style) {
if(typeof options.zoomControlOptions === 'undefined')
options.zoomControlOptions = {style: google.maps.ZoomControlStyle[options.navigationControlOptions.style.toUpperCase()]};
else
options.zoomControlOptions.style = google.maps.ZoomControlStyle[options.navigationControlOptions.style.toUpperCase()];
}
this.map.setOptions(options);
},

getMap: function() {
return this.map;
},

createListener: function(type, event, data) {
var target;

if(typeof type != 'object')
type = {type:type};

if(type.type == 'map')
target = this.map;
else if(type.type == 'marker' && type.marker)
target = $(this.mapId).data(type.marker);
else if(type.type == 'info' && type.marker)
target = $(this.mapId).data(type.marker + 'info');

if(target)
return google.maps.event.addListener(target, event, data);
else if((type.type == 'marker' || type.type == 'info') && this.getMarkerCount() != this.getTmpMarkerCount())
var goMap = this;
setTimeout(function() {
goMap.createListener(type, event, data);
}, this.opts.delay);
},

removeListener: function(listener) {
google.maps.event.removeListener(listener);
},

setInfoWindow: function(marker, html) {
var goMap = this;
html.content    = goMap.opts.html_prepend + html.content + goMap.opts.html_append;
var infowindow  = new google.maps.InfoWindow(html);
infowindow.show = false;

$(goMap.mapId).data(marker.id + 'info',infowindow);

if (html.popup) {
goMap.openWindow(infowindow, marker, html);
infowindow.show = true;
}

google.maps.event.addListener(marker, 'click', function() {
if (infowindow.show && goMap.opts.hideByClick) {
infowindow.close();
infowindow.show = false;
}
else {
goMap.openWindow(infowindow, marker, html);
infowindow.show = true;
}
});
},

openWindow: function(infowindow, marker, html) {
var goMap = this;
if(this.opts.oneInfoWindow)
this.clearInfo();

if (html.ajax) {
infowindow.open(this.map, marker);
$.ajax({
url: html.ajax,
success: function(html) {
infowindow.setContent(goMap.opts.html_prepend + html + goMap.opts.html_append);
}
});
}
else if (html.id) {
infowindow.setContent(goMap.opts.html_prepend + $(html.id).html() + goMap.opts.html_append);
infowindow.open(this.map, marker);
}
else
infowindow.open(this.map, marker);
},

setInfo: function(id, text) {
var info = $(this.mapId).data(id + 'info');

if(typeof text == 'object')
info.setOptions(goMap.opts.html_prepend + text + goMap.opts.html_append);
else
info.setContent(goMap.opts.html_prepend + text  + goMap.opts.html_append);
},

getInfo: function(id, hideDiv) {
var info = $(this.mapId).data(id + 'info').getContent();
if(hideDiv)
return $(info).html();
else
return info;
},

clearInfo: function() {
for (var i = 0, l = this.markers.length; i < l; i++) {
var info = $(this.mapId).data(this.markers[i] + 'info');
if(info) {
info.close();
info.show = false;
}
}
},

fitBounds: function(type, markers) {
var goMap = this;
if(this.getMarkerCount() != this.getTmpMarkerCount())
setTimeout(function() {
goMap.fitBounds(type, markers);
}, this.opts.delay);
else {
this.bounds = new google.maps.LatLngBounds();

if(!type || (type && type == 'all')) {
for (var i = 0, l = this.markers.length; i < l; i++) {
this.bounds.extend($(this.mapId).data(this.markers[i]).position);
}
}
else if (type && type == 'visible') {
for (var i = 0, l = this.markers.length; i < l; i++) {
if(this.getVisibleMarker(this.markers[i]))
this.bounds.extend($(this.mapId).data(this.markers[i]).position);
}

}
else if (type && type == 'markers' && $.isArray(markers)) {
for (var i = 0, l = markers.length; i < l; i++) {
this.bounds.extend($(this.mapId).data(markers[i]).position);
}
}
this.map.fitBounds(this.bounds);
}
},

getBounds: function() {
return this.map.getBounds();
},

createPolyline: function(poly) {
poly.type = 'polyline';
return this.createOverlay(poly);
},

createPolygon: function(poly) {
poly.type = 'polygon';
return this.createOverlay(poly);
},

createCircle: function(poly) {
poly.type = 'circle';
return this.createOverlay(poly);
},

createRectangle: function(poly) {
poly.type = 'rectangle';
return this.createOverlay(poly);
},

createOverlay: function(poly) {
var overlay = [];
if (!poly.id) {
this.count++;
poly.id = this.opts.polyId + this.count;
}
switch(poly.type) {
case 'polyline':
if (poly.coords.length > 0) {
for (var j = 0, l = poly.coords.length; j < l; j++)
overlay.push(new google.maps.LatLng(poly.coords[j].latitude, poly.coords[j].longitude));

overlay = new google.maps.Polyline({
map: this.map,
path: overlay,
strokeColor: 	poly.color ? poly.color : this.opts.polyline.color,
strokeOpacity:	poly.opacity ? poly.opacity : this.opts.polyline.opacity,
strokeWeight:	poly.weight ? poly.weight : this.opts.polyline.weight
});
}
else
return false;
break;
case 'polygon':
if (poly.coords.length > 0) {
for (var j = 0, l = poly.coords.length; j < l; j++)
overlay.push(new google.maps.LatLng(poly.coords[j].latitude, poly.coords[j].longitude));

overlay = new google.maps.Polygon({
map: this.map,
path: overlay,
strokeColor: poly.color ? poly.color : this.opts.polygon.color,
strokeOpacity: poly.opacity ? poly.opacity : this.opts.polygon.opacity,
strokeWeight: poly.weight ? poly.weight : this.opts.polygon.weight,
fillColor: poly.fillColor ? poly.fillColor : this.opts.polygon.fillColor,
fillOpacity: poly.fillOpacity ? poly.fillOpacity : this.opts.polygon.fillOpacity
});
}
else
return false;
break;
case 'circle':
overlay = new google.maps.Circle({
map: this.map,
center: new google.maps.LatLng(poly.latitude, poly.longitude),
radius: poly.radius,
strokeColor: poly.color ? poly.color : this.opts.circle.color,
strokeOpacity: poly.opacity ? poly.opacity : this.opts.circle.opacity,
strokeWeight: poly.weight ? poly.weight : this.opts.circle.weight,
fillColor: poly.fillColor ? poly.fillColor : this.opts.circle.fillColor,
fillOpacity: poly.fillOpacity ? poly.fillOpacity : this.opts.circle.fillOpacity
});
break;
case 'rectangle':
overlay = new google.maps.Rectangle({
map: this.map,
bounds: new google.maps.LatLngBounds(new google.maps.LatLng(poly.sw.latitude, poly.sw.longitude), new google.maps.LatLng(poly.ne.latitude, poly.ne.longitude)),
strokeColor: poly.color ? poly.color : this.opts.circle.color,
strokeOpacity: poly.opacity ? poly.opacity : this.opts.circle.opacity,
strokeWeight: poly.weight ? poly.weight : this.opts.circle.weight,
fillColor: poly.fillColor ? poly.fillColor : this.opts.circle.fillColor,
fillOpacity: poly.fillOpacity ? poly.fillOpacity : this.opts.circle.fillOpacity
});
break;
default:
return false;
break;
}
this.addOverlay(poly, overlay);
return overlay;
},

addOverlay: function(poly, overlay) {
$(this[this.overlays[poly.type].id]).data(poly.id, overlay);
this[this.overlays[poly.type].array].push(poly.id);
},

setOverlay: function(type, overlay, options) {
overlay = $(this[this.overlays[type].id]).data(overlay);

if (options.coords && options.coords.length > 0) {
var array = [];
for (var j = 0, l = options.coords.length; j < l; j++)
array.push(new google.maps.LatLng(options.coords[j].latitude, options.coords[j].longitude));

options.path = array;
delete options.coords;
}
else if (options.ne && options.sw) {
options.bounds = new google.maps.LatLngBounds(new google.maps.LatLng(options.sw.latitude, options.sw.longitude), new google.maps.LatLng(options.ne.latitude, options.ne.longitude));
delete options.ne;
delete options.sw;
}
else if (options.latitude && options.longitude) {

options.center = new google.maps.LatLng(options.latitude, options.longitude);
delete options.latitude;
delete options.longitude;
}
overlay.setOptions(options);
},

showHideOverlay: function(type, overlay, display) {
if(typeof display === 'undefined') {
if(this.getVisibleOverlay(type, overlay))
display = false;
else
display = true;
}

if(display)
$(this[this.overlays[type].id]).data(overlay).setMap(this.map);
else
$(this[this.overlays[type].id]).data(overlay).setMap(null);
},

getVisibleOverlay: function(type, overlay) {
if($(this[this.overlays[type].id]).data(overlay).getMap())
return true;
else
return false;
},

getOverlaysCount: function(type) {
return this[this.overlays[type].array].length;
},

removeOverlay: function(type, overlay) {
var index = $.inArray(overlay, this[this.overlays[type].array]), current;
if (index > -1) {
current = this[this.overlays[type].array].splice(index, 1);
var markerId = current[0];
$(this[this.overlays[type].id]).data(markerId).setMap(null);
$(this[this.overlays[type].id]).removeData(markerId);

return true;
}
return false;
},

clearOverlays: function(type) {
for (var i = 0, l = this[this.overlays[type].array].length; i < l; i++) {
var markerId = this[this.overlays[type].array][i];
$(this[this.overlays[type].id]).data(markerId).setMap(null);
$(this[this.overlays[type].id]).removeData(markerId);
}
this[this.overlays[type].array] = [];
},

showHideMarker: function(marker, display) {
if(typeof display === 'undefined') {
if(this.getVisibleMarker(marker)) {
$(this.mapId).data(marker).setVisible(false);
var info = $(this.mapId).data(marker + 'info');
if(info && info.show) {
info.close();
info.show = false;
}
}
else
$(this.mapId).data(marker).setVisible(true);
}
else
$(this.mapId).data(marker).setVisible(display);
},

showHideMarkerByGroup: function(group, display) {
for (var i = 0, l = this.markers.length; i < l; i++) {
var markerId = this.markers[i];
var marker	 = $(this.mapId).data(markerId);
if(marker.group == group) {
if(typeof display === 'undefined') {
if(this.getVisibleMarker(markerId)) {
marker.setVisible(false);
var info = $(this.mapId).data(markerId + 'info');
if(info && info.show) {
info.close();
info.show = false;
}
}
else
marker.setVisible(true);
}
else
marker.setVisible(display);
}
}
},

getVisibleMarker: function(marker) {
return $(this.mapId).data(marker).getVisible();
},

getMarkerCount: function() {
return this.markers.length;
},

getTmpMarkerCount: function() {
return this.tmpMarkers.length;
},

getVisibleMarkerCount: function() {
return this.getMarkers('visiblesInMap').length;
},

getMarkerByGroupCount: function(group) {
return this.getMarkers('group', group).length;
},

getMarkers: function(type, name) {
var array = [];
switch(type) {
case "json":
for (var i = 0, l = this.markers.length; i < l; i++) {
var temp = "'" + i + "': '" + $(this.mapId).data(this.markers[i]).getPosition().toUrlValue() + "'";
array.push(temp);
}
array = "{'markers':{" + array.join(",") + "}}";
break;
case "data":
for (var i = 0, l = this.markers.length; i < l; i++) {
var temp = "marker[" + i + "]=" + $(this.mapId).data(this.markers[i]).getPosition().toUrlValue();
array.push(temp);
}
array = array.join("&");
break;
case "visiblesInBounds":
for (var i = 0, l = this.markers.length; i < l; i++) {
if (this.isVisible($(this.mapId).data(this.markers[i]).getPosition()))
array.push(this.markers[i]);
}
break;
case "visiblesInMap":
for (var i = 0, l = this.markers.length; i < l; i++) {
if(this.getVisibleMarker(this.markers[i]))
array.push(this.markers[i]);
}
break;
case "group":
if(name)
for (var i = 0, l = this.markers.length; i < l; i++) {
if($(this.mapId).data(this.markers[i]).group == name)
array.push(this.markers[i]);
}
break;
case "markers":
for (var i = 0, l = this.markers.length; i < l; i++) {
var temp = $(this.mapId).data(this.markers[i]);
array.push(temp);
}
break;
default:
for (var i = 0, l = this.markers.length; i < l; i++) {
var temp = $(this.mapId).data(this.markers[i]).getPosition().toUrlValue();
array.push(temp);
}
break;
}
return array;
},

getVisibleMarkers: function() {
return this.getMarkers('visiblesInBounds');
},

createMarker: function(marker) {
if (!marker.geocode) {
this.count++;
if (!marker.id)
marker.id = this.opts.prefixId + this.count;
this.tmpMarkers.push(marker.id);
}
if (marker.address && !marker.geocode) {
this.geoMarkers.push(marker);
this.geoMarker();
}
else if (marker.latitude && marker.longitude || marker.position) {
var options = { map:this.map };
options.id 			= marker.id;
options.group		= marker.group ? marker.group : this.opts.groupId;
options.zIndex 		= marker.zIndex ? marker.zIndex : 0;
options.zIndexOrg	= marker.zIndexOrg ? marker.zIndexOrg : 0;

if (marker.visible == false)
options.visible = marker.visible;

if (marker.title)
options.title = marker.title;

if (marker.draggable)
options.draggable = marker.draggable;

if (marker.icon && marker.icon.image) {
options.icon = marker.icon.image;
if (marker.icon.shadow)
options.shadow = marker.icon.shadow;
}
else if (marker.icon)
options.icon = marker.icon;

else if (this.opts.icon && this.opts.icon.image) {
options.icon = this.opts.icon.image;
if (this.opts.icon.shadow)
options.shadow = this.opts.icon.shadow;
}
else if (this.opts.icon)
options.icon = this.opts.icon;

options.position = marker.position ? marker.position : new google.maps.LatLng(marker.latitude, marker.longitude);

var cmarker = new google.maps.Marker(options);

if (marker.html) {
if (!marker.html.content && !marker.html.ajax && !marker.html.id)
marker.html = { content:marker.html };
else if (!marker.html.content)
marker.html.content = null;

this.setInfoWindow(cmarker, marker.html);
}
this.addMarker(cmarker);
return cmarker;
}
},

addMarker: function(marker) {
$(this.mapId).data(marker.id, marker);
this.markers.push(marker.id);
},

setMarker: function(marker, options) {
var tmarker = $(this.mapId).data(marker);

delete options.id;
delete options.visible;

if(options.icon) {
var toption = options.icon;
delete options.icon;

if(toption && toption == 'default') {
if (this.opts.icon && this.opts.icon.image) {
options.icon = this.opts.icon.image;
if (this.opts.icon.shadow)
options.shadow = this.opts.icon.shadow;
}
else if (this.opts.icon)
options.icon = this.opts.icon;
}
else if(toption && toption.image) {
options.icon = toption.image;
if (toption.shadow)
options.shadow = toption.shadow;
}
else if (toption)
options.icon = toption;
}

if (options.address) {
this.geocode({address: options.address}, {markerId:tmarker});
delete options.address;
delete options.latitude;
delete options.longitude;
delete options.position;
}
else if (options.latitude && options.longitude || options.position) {
if (!options.position)
options.position = new google.maps.LatLng(options.latitude, options.longitude);
}
tmarker.setOptions(options);
},

removeMarker: function(marker) {
var index = $.inArray(marker, this.markers), current;
if (index > -1) {
this.tmpMarkers.splice(index,1);
current = this.markers.splice(index,1);
var markerId = current[0];
var marker   = $(this.mapId).data(markerId);
var info     = $(this.mapId).data(markerId + 'info');

marker.setVisible(false);
marker.setMap(null);
$(this.mapId).removeData(markerId);

if(info) {
info.close();
info.show = false;
$(this.mapId).removeData(markerId + 'info');
}
return true;
}
return false;
},

clearMarkers: function() {
for (var i = 0, l = this.markers.length; i < l; i++) {
var markerId = this.markers[i];
var marker   = $(this.mapId).data(markerId);
var info     = $(this.mapId).data(markerId + 'info');

marker.setVisible(false);
marker.setMap(null);
$(this.mapId).removeData(markerId);

if(info) {
info.close();
info.show = false;
$(this.mapId).removeData(markerId + 'info');
}
}
this.singleMarker = false;
this.lockGeocode = false;
this.markers = [];
this.tmpMarkers = [];
this.geoMarkers = [];
},

isVisible: function(latlng) {
return this.map.getBounds().contains(latlng);
}
}
})(jQuery);


  jquery.dump.js:

/**
* jquery.dump.js
* @author Torkild Dyvik Olsen
* @version 1.0
*
* A simple debug function to gather information about an object.
* Returns a nested tree with information.
*
*/
(function($) {

$.fn.dump = function() {
return $.dump(this);
}

$.dump = function(object) {
var recursion = function(obj, level) {
if(!level) level = 0;
var dump = '', p = '';
for(i = 0; i < level; i++) p += "\t";

t = type(obj);
switch(t) {
case "string":
return '"' + obj + '"';
break;
case "number":
return obj.toString();
break;
case "boolean":
return obj ? 'true' : 'false';
case "date":
return "Date: " + obj.toLocaleString();
case "array":
dump += 'Array ( \n';
$.each(obj, function(k,v) {
dump += p +'\t' + k + ' => ' + recursion(v, level + 1) + '\n';
});
dump += p + ')';
break;
case "object":
dump += 'Object { \n';
$.each(obj, function(k,v) {
dump += p + '\t' + k + ': ' + recursion(v, level + 1) + '\n';
});
dump += p + '}';
break;
case "jquery":
dump += 'jQuery Object { \n';
$.each(obj, function(k,v) {
dump += p + '\t' + k + ' = ' + recursion(v, level + 1) + '\n';
});
dump += p + '}';
break;
case "regexp":
return "RegExp: " + obj.toString();
case "error":
return obj.toString();
case "document":
case "domelement":
dump += 'DOMElement [ \n'
+ p + '\tnodeName: ' + obj.nodeName + '\n'
+ p + '\tnodeValue: ' + obj.nodeValue + '\n'
+ p + '\tinnerHTML: [ \n';
$.each(obj.childNodes, function(k,v) {
if(k < 1) var r = 0;
if(type(v) == "string") {
if(v.textContent.match(/[^\s]/)) {
dump += p + '\t\t' + (k - (r||0)) + ' = String: ' + trim(v.textContent) + '\n';
} else {
r--;
}
} else {
dump += p + '\t\t' + (k - (r||0)) + ' = ' + recursion(v, level + 2) + '\n';
}
});
dump += p + '\t]\n'
+ p + ']';
break;
case "function":
var match = obj.toString().match(/^(.*)\(([^\)]*)\)/im);
match[1] = trim(match[1].replace(new RegExp("[\\s]+", "g"), " "));
match[2] = trim(match[2].replace(new RegExp("[\\s]+", "g"), " "));
return match[1] + "(" + match[2] + ")";
case "window":
default:
dump += 'N/A: ' + t;
break;
}

return dump;
}

var type = function(obj) {
var type = typeof(obj);

if(type != "object") {
return type;
}

switch(obj) {
case null:
return 'null';
case window:
return 'window';
case document:
return 'document';
case window.event:
return 'event';
default:
break;
}

if(obj.jquery) {
return 'jquery';
}

switch(obj.constructor) {
case Array:
return 'array';
case Boolean:
return 'boolean';
case Date:
return 'date';
case Object:
return 'object';
case RegExp:
return 'regexp';
case ReferenceError:
case Error:
return 'error';
case null:
default:
break;
}

switch(obj.nodeType) {
case 1:
return 'domelement';
case 3:
return 'string';
case null:
default:
break;
}

return 'Unknown';
}

return recursion(object);
}

function trim(str) {
return ltrim(rtrim(str));
}

function ltrim(str) {
return str.replace(new RegExp("^[\\s]+", "g"), "");
}

function rtrim(str) {
return str.replace(new RegExp("[\\s]+$", "g"), "");
}

})(jQuery);


  jquery.chili-2.2.js

/*
===============================================================================
Chili is the jQuery code highlighter plugin
...............................................................................
LICENSE: http://www.opensource.org/licenses/mit-license.php WEBSITE: http://noteslog.com/chili/ 
Copyright 2008 / Andrea Ercolino
===============================================================================
*/

( function($) {

ChiliBook = { //implied global

version:            "2.2" // 2008-07-06

// options --------------------------------------------------------------------

, automatic:          true
, automaticSelector:  "code"

, lineNumbers:        !true

, codeLanguage:       function( el ) {
var recipeName = $( el ).attr( "class" );
return recipeName ? recipeName : '';
}

, recipeLoading:      true
, recipeFolder:       "" // used like: recipeFolder + recipeName + '.js'

// IE and FF convert   to " ", Safari and Opera do not
, replaceSpace:       " "
, replaceTab:         "    "
, replaceNewLine:     " <br/>"

, selectionStyle:     [ "position:absolute; z-index:3000; overflow:scroll;"
, "width:16em;"
, "height:9em;"
, "border:1px solid gray;"
, "padding:15px;"
, "background-color:yellow;"
].join( ' ' )

// ------------------------------------------------------------- end of options

, defaultReplacement: '<span class="$0">$$</span>' // TODO: make this an option again
, recipes:            {} //repository
, queue:              {} //registry

, unique:             function() {
return (new Date()).valueOf();
}
};

$.fn.chili = function( options ) {
var book = $.extend( {}, ChiliBook, options || {} );

function cook( ingredients, recipe, blockName ) {

function prepareBlock( recipe, blockName ) {
var steps = [];
for( var stepName in recipe[ blockName ] ) {
steps.push( prepareStep( recipe, blockName, stepName ) );
}
return steps;
} // prepareBlock

function prepareStep( recipe, blockName, stepName ) {
var step = recipe[ blockName ][ stepName ];
var exp = ( typeof step._match == "string" ) ? step._match : step._match.source;
return {
recipe: recipe
, blockName: blockName
, stepName: stepName
, exp: "(" + exp + ")"
, length: 1                         // add 1 to account for the newly added parentheses
+ (exp                          // count number of submatches in here
.replace( /\\./g, "%" )     // disable any escaped character
.replace( /\[.*?\]/g, "%" ) // disable any character class
.match( /\((?!\?)/g )       // match any open parenthesis, not followed by a ?
|| []                           // make sure it is an empty array if there are no matches
).length                        // get the number of matches
, replacement: step._replace ? step._replace : book.defaultReplacement
};
} // prepareStep

function knowHow( steps ) {
var prevLength = 1;
var exps = [];
for (var i = 0; i < steps.length; i++) {
var exp = steps[ i ].exp;
// adjust backreferences
exp = exp.replace( /\\\\|\\(\d+)/g, function( m, aNum ) {
return !aNum ? m : "\\" + ( prevLength + 1 + parseInt( aNum, 10 ) );
} );
exps.push( exp );
prevLength += steps[ i ].length;
}
var prolog = '((?:\\s|\\S)*?)';
var epilog = '((?:\\s|\\S)+)';
var source = '(?:' + exps.join( "|" ) + ')';
source = prolog + source + '|' + epilog;
return new RegExp( source, recipe._case ? "g" : "gi" );
} // knowHow

function escapeHTML( str ) {
return str.replace( /&/g, "&" ).replace( /</g, "<" );
} // escapeHTML

function replaceSpaces( str ) {
return str.replace( / +/g, function( spaces ) {
return spaces.replace( / /g, replaceSpace );
} );
} // replaceSpaces

function filter( str ) {
str = escapeHTML( str );
if( replaceSpace ) {
str = replaceSpaces( str );
}
return str;
} // filter

function applyRecipe( subject, recipe ) {
return cook( subject, recipe );
} // applyRecipe

function applyBlock( subject, recipe, blockName ) {
return cook( subject, recipe, blockName );
} // applyBlock

function applyStep( subject, recipe, blockName, stepName ) {
var replaceSpace       = book.replaceSpace;

var step = prepareStep( recipe, blockName, stepName );
var steps = [step];

var perfect = subject.replace( knowHow( steps ), function() {
return chef.apply( { steps: steps }, arguments );
} );
return perfect;
} // applyStep

function applyModule( subject, module, context ) {
if( ! module ) {
return filter( subject );
}

var sub = module.split( '/' );
var recipeName = '';
var blockName  = '';
var stepName   = '';
switch( sub.length ) {
case 1:
recipeName = sub[0];
break;
case 2:
recipeName = sub[0]; blockName = sub[1];
break;
case 3:
recipeName = sub[0]; blockName = sub[1]; stepName = sub[2];
break;
default:
return filter( subject );
}

function getRecipe( recipeName ) {
var path = getPath( recipeName );
var recipe = book.recipes[ path ];
if( ! recipe ) {
throw {msg:"recipe not available"};
}
return recipe;
}

try {
var recipe;
if ( '' == stepName ) {
if ( '' == blockName ) {
if ( '' == recipeName ) {
//nothing to do
}
else { // ( '' != recipeName )
recipe = getRecipe( recipeName );
return applyRecipe( subject, recipe );
}
}
else { // ( '' != blockName )
if( '' == recipeName ) {
recipe = context.recipe;
}
else {
recipe = getRecipe( recipeName );
}
if( ! (blockName in recipe) ) {
return filter( subject );
}
return applyBlock( subject, recipe, blockName );
}
}
else { // ( '' != stepName )
if( '' == recipeName ) {
recipe = context.recipe;
}
else {
recipe = getRecipe( recipeName );
}
if( '' == blockName ) {
blockName = context.blockName;
}
if( ! (blockName in recipe) ) {
return filter( subject );
}
if( ! (stepName in recipe[blockName]) ) {
return filter( subject );
}
return applyStep( subject, recipe, blockName, stepName );
}
}
catch( e ) {
if (e.msg && e.msg == "recipe not available") {
var cue = 'chili_' + book.unique();
if( book.recipeLoading ) {
var path = getPath( recipeName );
if( ! book.queue[ path ] ) {
/* this is a new recipe to download */
try {
book.queue[ path ] = [ {cue: cue, subject: subject, module: module, context: context} ];
$.getJSON( path, function( recipeLoaded ) {
book.recipes[ path ] = recipeLoaded;
var q = book.queue[ path ];
for( var i = 0, iTop = q.length; i < iTop; i++ ) {
var replacement = applyModule( q[ i ].subject, q[ i ].module, q[ i ].context );
if( book.replaceTab ) {
replacement = replacement.replace( /\t/g, book.replaceTab );
}
if( book.replaceNewLine ) {
replacement = replacement.replace( /\n/g, book.replaceNewLine );
}
$( '#' + q[ i ].cue ).replaceWith( replacement );
}
} );
}
catch( recipeNotAvailable ) {
alert( "the recipe for '" + recipeName + "' was not found in '" + path + "'" );
}
}
else {
/* not a new recipe, so just enqueue this element */
book.queue[ path ].push( {cue: cue, subject: subject, module: module, context: context} );
}
return '<span id="' + cue + '">' + filter( subject ) + '</span>';
}
return filter( subject );
}
else {
return filter( subject );
}
}
} // applyModule

function addPrefix( prefix, replacement ) {
var aux = replacement.replace( /(<span\s+class\s*=\s*(["']))((?:(?!__)\w)+\2\s*>)/ig, "$1" + prefix + "__$3" );
return aux;
} // addPrefix

function chef() {
if (! arguments[ 0 ]) {
return '';
}
var steps = this.steps;
var i = 0;  // iterate steps
var j = 2;	// iterate chef's arguments
var prolog = arguments[ 1 ];
var epilog = arguments[ arguments.length - 3 ];
if (! epilog) {
var step;
while( step = steps[ i++ ] ) {
var aux = arguments; // this unmasks chef's arguments inside the next function
if( aux[ j ] ) {
var replacement = '';
if( $.isFunction( step.replacement ) ) {
var matches = []; //Array.slice.call( aux, j, step.length );
for (var k = 0, kTop = step.length; k < kTop; k++) {
matches.push( aux[ j + k ] );
}
matches.push( aux[ aux.length - 2 ] );
matches.push( aux[ aux.length - 1 ] );
replacement = step.replacement
.apply( {
x: function() {
var subject = arguments[0];
var module  = arguments[1];
var context = {
recipe:    step.recipe
, blockName: step.blockName
};
return applyModule( subject, module, context );
}
}, matches );
}
else { //we expect step.replacement to be a string
replacement = step.replacement
.replace( /(\\\$)|(?:\$\$)|(?:\$(\d+))/g, function( m, escaped, K ) {
if( escaped ) {       /* \$ */
return "$";
}
else if( !K ) {       /* $$ */
return filter( aux[ j ] );
}
else if( K == "0" ) { /* $0 */
return step.stepName;
}
else {                /* $K */
return filter( aux[ j + parseInt( K, 10 ) ] );
}
} );
}
replacement = addPrefix( step.recipe._name, replacement );
return filter( prolog ) + replacement;
}
else {
j+= step.length;
}
}
}
else {
return filter( epilog );
}
} // chef

if( ! blockName ) {
blockName = '_main';
checkSpices( recipe );
}
if( ! (blockName in recipe) ) {
return filter( ingredients );
}
var replaceSpace = book.replaceSpace;
var steps = prepareBlock( recipe, blockName );
var kh = knowHow( steps );
var perfect = ingredients.replace( kh, function() {
return chef.apply( { steps: steps }, arguments );
} );
return perfect;

} // cook

function loadStylesheetInline( sourceCode ) {
if( document.createElement ) {
var e = document.createElement( "style" );
e.type = "text/css";
if( e.styleSheet ) { // IE
e.styleSheet.cssText = sourceCode;
}
else {
var t = document.createTextNode( sourceCode );
e.appendChild( t );
}
document.getElementsByTagName( "head" )[0].appendChild( e );
}
} // loadStylesheetInline

function checkSpices( recipe ) {
var name = recipe._name;
if( ! book.queue[ name ] ) {

var content = ['/* Chili -- ' + name + ' */'];
for (var blockName in recipe) {
if( blockName.search( /^_(?!main\b)/ ) < 0 ) {
for (var stepName in recipe[ blockName ]) {
var step = recipe[ blockName ][ stepName ];
if( '_style' in step ) {
if( step[ '_style' ].constructor == String ) {
content.push( '.' + name + '__' + stepName + ' { ' + step[ '_style' ] + ' }' );
}
else {
for (var className in step[ '_style' ]) {
content.push( '.' + name + '__' + className + ' { ' + step[ '_style' ][ className ] + ' }' );
}
}
}
}
}
}
content = content.join('\n');

loadStylesheetInline( content );

book.queue[ name ] = true;
}
} // checkSpices

function askDish( el ) {
var recipeName = book.codeLanguage( el );
if( '' != recipeName ) {
var path = getPath( recipeName );
if( book.recipeLoading ) {
/* dynamic setups come here */
if( ! book.queue[ path ] ) {
/* this is a new recipe to download */
try {
book.queue[ path ] = [ el ];
$.getJSON( path, function( recipeLoaded ) {
book.recipes[ path ] = recipeLoaded;
var q = book.queue[ path ];
for( var i = 0, iTop = q.length; i < iTop; i++ ) {
makeDish( q[ i ], path );
}
} );
}
catch( recipeNotAvailable ) {
alert( "the recipe for '" + recipeName + "' was not found in '" + path + "'" );
}
}
else {
/* not a new recipe, so just enqueue this element */
book.queue[ path ].push( el );
}
/* a recipe could have been already downloaded */
makeDish( el, path );
}
else {
/* static setups come here */
makeDish( el, path );
}
}
} // askDish

function makeDish( el, recipePath ) {
var recipe = book.recipes[ recipePath ];
if( ! recipe ) {
return;
}
var $el = $( el );
var ingredients = $el.text();
if( ! ingredients ) {
return;
}

//fix for msie: \r (13) is used instead of \n (10)
//fix for opera: \r\n is used instead of \n
ingredients = ingredients.replace(/\r\n?/g, "\n");

//reverse fix for safari: msie, mozilla and opera render the initial \n
if( $el.parent().is('pre') ) {
/*
if( ! $.browser.safari ) {
ingredients = ingredients.replace(/^\n/g, "");
}
*/
}

var dish = cook( ingredients, recipe ); // all happens here

if( book.replaceTab ) {
dish = dish.replace( /\t/g, book.replaceTab );
}
if( book.replaceNewLine ) {
dish = dish.replace( /\n/g, book.replaceNewLine );
}

el.innerHTML = dish; //much faster than $el.html( dish );
//tried also the function replaceHtml from http://blog.stevenlevithan.com/archives/faster-than-innerhtml //but it was not faster nor without sideffects (it was not possible to count spans into el)

//opera and safari select PRE text correctly
/*
if( $.browser.msie || $.browser.mozilla ) {
enableSelectionHelper( el );
}
*/
var $that = $el.parent();
var classes = $that.attr( 'class' );
var ln = /ln-(\d+)-([\w][\w\-]*)|ln-(\d+)|ln-/.exec( classes );
if( ln ) {
addLineNumbers( el );
var start = 0;
if( ln[1] ) {
start = parseInt( ln[1], 10 );
var $pieces = $( '.ln-' + ln[1] + '-' + ln[2] );
var pos = $pieces.index( $that[0] );
$pieces.slice( 0, pos ).each( function() {
start += $( this ).find( 'li' ).length;
} );
}
else if( ln[3] ) {
start = parseInt( ln[3], 10 );
}
else {
start = 1;
}
$el.find( 'ol' )[0].start = start;
$('body').width( $('body').width() - 1 ).width( $('body').width() + 1 );
}
else if( book.lineNumbers ) {
addLineNumbers( el );
}

} // makeDish

function enableSelectionHelper( el ) {
return false; //disable the selection helper
var element = null;
$( el )
.parents()
.filter( "pre" )
.bind( "mousedown", function() {
element = this;
if( $.browser.msie ) {
document.selection.empty();
}
else {
window.getSelection().removeAllRanges();
}
} )
.bind( "mouseup", function( event ) {
if( element && (element == this) ) {
element = null;
var selected = '';
if( $.browser.msie ) {
selected = document.selection.createRange().htmlText;
if( '' == selected ) {
return;
}
selected = preserveNewLines( selected );
var container_tag = '<textarea style="STYLE">';
}
else {
selected = window.getSelection().toString(); //opera doesn't select new lines
if( '' == selected ) {
return;
}
selected = selected
.replace( /\r/g, '' )
.replace( /^# ?/g, '' )
.replace( /\n# ?/g, '\n' )
;
var container_tag = '<pre style="STYLE">';
}
var $container = $( container_tag.replace( /\bSTYLE\b/, ChiliBook.selectionStyle ) )
.appendTo( 'body' )
.text( selected )
.attr( 'id', 'chili_selection' )
.click( function() { $(this).remove(); } )
;
var top  = event.pageY - Math.round( $container.height() / 2 ) + "px";
var left = event.pageX - Math.round( $container.width() / 2 ) + "px";
$container.css( { top: top, left: left } );
if( $.browser.msie ) {
//					window.clipboardData.setData( 'Text', selected ); //I couldn't find anything similar for Mozilla
$container[0].focus();
$container[0].select();
}
else {
var s = window.getSelection();
s.removeAllRanges();
var r = document.createRange();
r.selectNodeContents( $container[0] );
s.addRange( r );
}
}
} )
;
} // enableSelectionHelper

function getPath( recipeName ) {
return book.recipeFolder + recipeName + ".js";
} // getPath

function getSelectedText() {
var text = '';
if( $.browser.msie ) {
text = document.selection.createRange().htmlText;
}
else {
text = window.getSelection().toString();
}
return text;
} // getSelectedText

function preserveNewLines( html ) {
do {
var newline_flag = ChiliBook.unique();
}
while( html.indexOf( newline_flag ) > -1 );
var text = '';
if (/<br/i.test(html) || /<li/i.test(html)) {
if (/<br/i.test(html)) {
html = html.replace( /\<br[^>]*?\>/ig, newline_flag );
}
else if (/<li/i.test(html)) {
html = html.replace( /<ol[^>]*?>|<\/ol>|<li[^>]*?>/ig, '' ).replace( /<\/li>/ig, newline_flag );
}
var el = $( '<pre>' ).appendTo( 'body' ).hide()[0];
el.innerHTML = html;
text = $( el ).text().replace( new RegExp( newline_flag, "g" ), '\r\n' );
$( el ).remove();
}
return text;
} // preserveNewLines

function addLineNumbers( el ) {

function makeListItem1( not_last_line, not_last, last, open ) {
var close = open ? '</span>' : '';
var aux = '';
if( not_last_line ) {
aux = '<li>' + open + not_last + close + '</li>';
}
else if( last ) {
aux = '<li>' + open + last + close + '</li>';
}
return aux;
} // makeListItem1

function makeListItem2( not_last_line, not_last, last, prev_li ) {
var aux = '';
if( prev_li ) {
aux = prev_li;
}
else {
aux = makeListItem1( not_last_line, not_last, last, '' )
}
return aux;
} // makeListItem2

var html = $( el ).html();
var br = /<br>/.test(html) ? '<br>' : '<BR>';
var empty_line = '<li>' + book.replaceSpace + '</li>';
var list_items = html
//extract newlines at the beginning of a span
.replace( /(<span [^>]+>)((?:(?: |\xA0)<br>)+)(.*?)(<\/span>)/ig, '$2$1$3$4' ) // I don't know why <span .*?> does not work here
//transform newlines inside of a span
.replace( /(.*?)(<span .*?>)(.*?)(?:<\/span>(?: |\xA0)<br>|<\/span>)/ig,       // but here it does
function( all, before, open, content ) {
if (/<br>/i.test(content)) {
var pieces = before.split( br );
var lastPiece = pieces.pop();
before = pieces.join( br );
var aux = (before ? before + br : '') //+ replace1( lastPiece + content, open );
+ (lastPiece + content).replace( /((.*?)(?: |\xA0)<br>)|(.*)/ig,
function( tmp, not_last_line, not_last, last ) {
var aux2 = makeListItem1( not_last_line, not_last, last, open );
return aux2;
}
);
return aux;
}
else {
return all;
}
}
)
//transform newlines outside of a span
.replace( /(<li>.*?<\/li>)|((.*?)(?: |\xA0)<br>)|(.+)/ig,
function( tmp, prev_li, not_last_line, not_last, last ) {
var aux2 = makeListItem2( not_last_line, not_last, last, prev_li );
return aux2;
}
)
//fix empty lines for Opera
.replace( /<li><\/li>/ig, empty_line )
;

el.innerHTML = '<ol>' + list_items + '</ol>';
} // addLineNumbers

function revealChars( tmp ) {
return $
.map( tmp.split(''),
function(n, i) {
return ' ' + n + ' ' + n.charCodeAt( 0 ) + ' ';
} )
.join(' ');
} // revealChars

//-----------------------------------------------------------------------------
// the coloring starts here
this
.each( function() {
var $this = $( this );
$this.trigger( 'chili.before_coloring' );
askDish( this );
$this.trigger( 'chili.after_coloring' );
} );

return this;
//-----------------------------------------------------------------------------
};

//main
$( function() {

if( ChiliBook.automatic ) {
$( ChiliBook.automaticSelector ).chili();
}

} );

} ) ( jQuery );


  recipes.js

/*
===============================================================================
Chili is the jQuery code highlighter plugin
...............................................................................
LICENSE: http://www.opensource.org/licenses/mit-license.php WEBSITE: http://noteslog.com/chili/ 
Copyright 2008 / Andrea Ercolino
===============================================================================
*/

ChiliBook.recipeLoading = false;

ChiliBook.recipes[ "php.js" ] =
/* ----------------------------------------------------------------------------
* this recipe uses a little trick for highlighting php code
*   1: replace each php snippet with a placeholder
*   2: highlight html without php and php snippets apart
*   3: replace each placeholder with its highlighted php snippet
*
* the trick is not perfect only if the html without php is broken
* however, in such a case many highlighters get fooled but Chili does not
*
* ---
* this recipe has been adapted for working with Safari
* in fact, Safari cannot match more than 101236 characters with a lazy star
* --------------------------------------------------------------------------*/
{
_name: "php"
, _case: true
, _main: {
all: {
_match: /[\w\W]*/
, _replace: function( all ) {
var placeholder = String.fromCharCode(0);
var blocks = [];
var that = this;
var no_php_1 = all.replace( /<\?[^?]*\?+(?:[^>][^?]*\?+)*>/g, function( block ) {
blocks.push( that.x( block, '/block/php_1' ) );
return placeholder;
} );
var no_php_2 = no_php_1.replace( /^[^?]*\?+(?:[^>][^?]*\?+)*>|<\?[\w\W]*$/g, function( block ) {
blocks.push( that.x( block, '/block/php_2' ) );
return placeholder;
} );
if( blocks.length ) {
var html = this.x( no_php_2, 'html' );
var count = 0;
return html.replace( new RegExp( placeholder, "g" ), function() {
return blocks[ count++ ];
} );
}
else {
return this.x( all, '/php' );
}
}
}
}
, block: {
php_1: { // --- <? +++ ?> ---
_match: /(<\?(?:php\b)?)([^?]*\?+(?:[^>][^?]*\?+)*>)/
, _replace: function( all, open, content ) {
return "<span class='start'>" + this.x( open ) + "</span>"
+ this.x( content.replace( /\?>$/, '' ), '/php' )
+ "<span class='end'>" + this.x( '?>' ) + "</span>";
}
, _style: {
start: "color: red; font-weight: bold"
, end:   "color: red;"
}
}
, php_2: { // +++ ?> --- <? +++
_match: /([^?]*\?+(?:[^>][^?]*\?+)*>)|(<\?(?:php\b)?)([\w\W]*)/
, _replace: function( all, content, open2, content2 ) {
if( open2 ) {
return "<span class='start'>" + this.x( open2 ) + "</span>"
+ this.x( content2, '/php' );
}
else {
return this.x( content.replace( /\?>$/, '' ), '/php' )
+ "<span class='end'>" + this.x( '?>' ) + "</span>";
}
}
, _style: {
start: "color: red; font-weight: bold"
, end:   "color: red;"
}
}
}
, php: {
mlcom: {
_match: /\/\*[^*]*\*+([^\/][^*]*\*+)*\//
, _style: "color: gray;"
}
, com: {
_match: /(?:\/\/.*)|(?:[^\\]\#.*)/
, _style: "color: green;"
}
, string1: {
_match: /\'[^\'\\]*(?:\\.[^\'\\]*)*\'/
, _style: "color: purple;"
}
, string2: {
_match: /\"[^\"\\]*(?:\\.[^\"\\]*)*\"/
, _style: "color: fuchsia;"
}
, value: {
_match: /\b(?:[Nn][Uu][Ll][Ll]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])\b/
, _style: "color: gray; font-weight: bold;"
}
, number: {
_match: /\b[+-]?(\d*\.?\d+|\d+\.?\d*)([eE][+-]?\d+)?\b/
, _style: "color: red;"
}
, const1: {
_match: /\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\b/
, _style: "color: red;"
}
, const2: {
_match: /\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR))\b/
, _style: "color: red;"
}
, global: {
_match: /(?:\$GLOBALS|\$_COOKIE|\$_ENV|\$_FILES|\$_GET|\$_POST|\$_REQUEST|\$_SERVER|\$_SESSION|\$php_errormsg)\b/
, _style: "color: red;"
}
, keyword: {
_match: /\b(?:__CLASS__|__FILE__|__FUNCTION__|__LINE__|__METHOD__|abstract|and|array|as|break|case|catch|cfunction|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exception|exit|extends|extends|final|for|foreach|function|global|if|implements|include|include_once|interface|isset|list|new|old_function|or|php_user_filter|print|private|protected|public|require|require_once|return|static|switch|this|throw|try|unset|use|var|while|xor)\b/
, _style: "color: navy; font-weight: bold;"
}
, variable: {
_match: /\$(\w+)/
, _replace: '<span class="keyword">$</span><span class="variable">$1</span>'
, _style: "color: #4040c2;"
}
, heredoc: {
_match: /(\<\<\<\s*)(\w+)((?:(?!\2).*\n)+)(\2)\b/
, _replace: '<span class="keyword">$1</span><span class="string1">$2</span><span class="string2">$3</span><span class="string1">$4</span>'
}
}
}

ChiliBook.recipes[ "html.js" ] =
{
_name: 'html'
, _case: false
, _main: {
doctype: {
_match: /<!DOCTYPE\b[\w\W]*?>/
, _style: "color: #CC6600;"
}
, ie_style: {
_match: /(<!--\[[^\]]*\]>)([\w\W]*?)(<!\[[^\]]*\]-->)/
, _replace: function( all, open, content, close ) {
return "<span class='ie_style'>" + this.x( open ) + "</span>"
+ this.x( content, '//style' )
+ "<span class='ie_style'>" + this.x( close ) + "</span>";
}
, _style: "color: DarkSlateGray; font-weight: bold;"
}
, comment: {
_match: /<!--[\w\W]*?-->/
, _style: "color: #4040c2;"
}
, script: {
_match: /(<script\s+[^>]*>)([\w\W]*?)(<\/script\s*>)/
, _replace: function( all, open, content, close ) {
return this.x( open, '//tag_start' )
+ this.x( content, 'js' )
+ this.x( close, '//tag_end' );
}
}
, style: {
_match: /(<style\s+[^>]*>)([\w\W]*?)(<\/style\s*>)/
, _replace: function( all, open, content, close ) {
return this.x( open, '//tag_start' )
+ this.x( content, 'css' )
+ this.x( close, '//tag_end' );
}
}
// matches a starting tag of an element (with attrs)
// like "<div ... >" or "<img ... />"
, tag_start: {
_match: /(<\w+)((?:[?%]>|[\w\W])*?)(\/>|>)/
, _replace: function( all, open, content, close ) {
return "<span class='tag_start'>" + this.x( open ) + "</span>"
+ this.x( content, '/tag_attrs' )
+ "<span class='tag_start'>" + this.x( close ) + "</span>";
}
, _style: "color: navy; font-weight: bold;"
}
// matches an ending tag
// like "</div>"
, tag_end: {
_match: /<\/\w+\s*>|\/>/
, _style: "color: navy;"
}
, entity: {
_match: /&\w+?;/
, _style: "color: blue;"
}
}
, tag_attrs: {
// matches a name/value pair
attr: {
// before in $1, name in $2, between in $3, value in $4
_match: /(\W*?)([\w-]+)(\s*=\s*)((?:\'[^\']*(?:\\.[^\']*)*\')|(?:\"[^\"]*(?:\\.[^\"]*)*\"))/
, _replace: "$1<span class='attr_name'>$2</span>$3<span class='attr_value'>$4</span>"
, _style: { attr_name:  "color: green;", attr_value: "color: maroon;" }
}
}
};

ChiliBook.recipes[ "js.js" ] =
{
_name: 'js'
, _case: true
, _main: {
ml_comment: {
_match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\//
, _style: 'color: gray;'
}
, sl_comment: {
_match: /\/\/.*/
, _style: 'color: green;'
}
, string: {
_match: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/
, _style: 'color: teal;'
}
, num: {
_match: /\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b/
, _style: 'color: red;'
}
, reg_not: { //this prevents "a / b / c" to be interpreted as a reg_exp
_match: /(?:\w+\s*)\/[^\/\\\n]*(?:\\.[^\/\\\n]*)*\/[gim]*(?:\s*\w+)/
, _replace: function( all ) {
return this.x( all, '//num' );
}
}
, reg_exp: {
_match: /\/[^\/\\\n]*(?:\\.[^\/\\\n]*)*\/[gim]*/
, _style: 'color: maroon;'
}
, brace: {
_match: /[\{\}]/
, _style: 'color: red; font-weight: bold;'
}
, statement: {
_match: /\b(with|while|var|try|throw|switch|return|if|for|finally|else|do|default|continue|const|catch|case|break)\b/
, _style: 'color: navy; font-weight: bold;'
}
, error: {
_match: /\b(URIError|TypeError|SyntaxError|ReferenceError|RangeError|EvalError|Error)\b/
, _style: 'color: Coral;'
}
, object: {
_match: /\b(String|RegExp|Object|Number|Math|Function|Date|Boolean|Array)\b/
, _style: 'color: DeepPink;'
}
, property: {
_match: /\b(undefined|arguments|NaN|Infinity)\b/
, _style: 'color: Purple; font-weight: bold;'
}
, 'function': {
_match: /\b(parseInt|parseFloat|isNaN|isFinite|eval|encodeURIComponent|encodeURI|decodeURIComponent|decodeURI)\b/
, _style: 'color: olive;'
}
, operator: {
_match: /\b(void|typeof|this|new|instanceof|in|function|delete)\b/
, _style: 'color: RoyalBlue; font-weight: bold;'
}
, liveconnect: {
_match: /\b(sun|netscape|java|Packages|JavaPackage|JavaObject|JavaClass|JavaArray|JSObject|JSException)\b/
, _style: 'text-decoration: overline;'
}
}
};

ChiliBook.recipes[ "css.js" ] =
{
_name: 'css'
, _case: true
, _main: {
comment: {
_match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\//
, _style: "color: olive;"
}
, directive: {
_match: /@\w+/
, _style: "color: fuchsia;"
}
, url: {
_match: /\b(url\s*\()([^)]+)(\))/
, _replace: "<span class='url'>$1</span>$2<span class='url'>$3</span>"
, _style: "color: fuchsia;"
}
, block:   {
_match: /\{([\w\W]*?)\}/
, _replace: function( all, pairs ) {
return '{' + this.x( pairs, '/definition' ) + '}';
}
}
, 'class': {
_match: /\.\w+/
, _style: "color: #CC0066; font-weight: bold;"
}
, id:      {
_match: /#\w+/
, _style: "color: IndianRed; font-weight: bold;"
}
, pseudo:  {
_match: /:\w+/
, _style: "color: #CC9900;"
}
, element: {
_match: /\w+/
, _style: "color: Purple; font-weight: bold;"
}
}
, definition: {
comment: {
_match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\//
}
, property: {
_match: /\b(?:zoom|z-index|writing-mode|word-wrap|word-spacing|word-break|width|widows|white-space|volume|voice-family|visibility|vertical-align|unicode-bidi|top|text-underline-position|text-transform|text-shadow|text-overflow|text-kashida-space|text-justify|text-indent|text-decoration|text-autospace|text-align-last|text-align|table-layout|stress|speech-rate|speak-punctuation|speak-numeral|speak-header|speak|size|scrollbar-track-color|scrollbar-shadow-color|scrollbar-highlight-color|scrollbar-face-color|scrollbar-dark-shadow-color|scrollbar-base-color|scrollbar-arrow-color|scrollbar-3d-light-color|ruby-position|ruby-overhang|ruby-align|right|richness|quotes|position|play-during|pitch-range|pitch|pause-before|pause-after|pause|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-Y|overflow-X|overflow|outline-width|outline-style|outline-color|outline|orphans|min-width|min-height|max-width|max-height|marks|marker-offset|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|line-break|letter-spacing|left|layout-grid-type|layout-grid-mode|layout-grid-line|layout-grid-char-spacing|layout-grid-char|layout-grid|layout-flow|layer-background-image|layer-background-color|include-source|ime-mode|height|font-weight|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-family|font|float|filter|empty-cells|elevation|display|direction|cursor|cue-before|cue-after|cue|counter-reset|counter-increment|content|color|clip|clear|caption-side|bottom|border-width|border-top-width|border-top-style|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-left-width|border-left-style|border-left-color|border-left|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-color|border-bottom|border|behavior|background-repeat|background-position-y|background-position-x|background-position|background-image|background-color|background-attachment|background|azimuth|accelerator)\s*:/
, _style: "color: #330066;"
}
, special: {
_match: /\b(?:-use-link-source|-set-link-source|-replace|-moz-user-select|-moz-user-modify|-moz-user-input|-moz-user-focus|-moz-outline-width|-moz-outline-style|-moz-outline-color|-moz-outline|-moz-opacity|-moz-border-top-colors|-moz-border-right-colors|-moz-border-radius-topright|-moz-border-radius-topleft|-moz-border-radius-bottomright|-moz-border-radius-bottomleft|-moz-border-radius|-moz-border-left-colors|-moz-border-bottom-colors|-moz-binding)\s*:/
, _style: "color: #330066; text-decoration: underline;"
}
, url: {
_match: /\b(url\s*\()([^)]+)(\))/
, _replace: "<span class='url'>$1</span>$2<span class='url'>$3</span>"
}
, value: {
_match: /\b(?:xx-small|xx-large|x-soft|x-small|x-slow|x-low|x-loud|x-large|x-high|x-fast|wider|wait|w-resize|visible|url|uppercase|upper-roman|upper-latin|upper-alpha|underline|ultra-expanded|ultra-condensed|tv|tty|transparent|top|thin|thick|text-top|text-bottom|table-row-group|table-row|table-header-group|table-footer-group|table-column-group|table-column|table-cell|table-caption|sw-resize|super|sub|status-bar|static|square|spell-out|speech|solid|soft|smaller|small-caption|small-caps|small|slower|slow|silent|show|separate|semi-expanded|semi-condensed|se-resize|scroll|screen|s-resize|run-in|rtl|rightwards|right-side|right|ridge|rgb|repeat-y|repeat-x|repeat|relative|projection|print|pre|portrait|pointer|overline|outside|outset|open-quote|once|oblique|nw-resize|nowrap|normal|none|no-repeat|no-open-quote|no-close-quote|ne-resize|narrower|n-resize|move|mix|middle|message-box|medium|marker|ltr|lowercase|lower-roman|lower-latin|lower-greek|lower-alpha|lower|low|loud|local|list-item|line-through|lighter|level|leftwards|left-side|left|larger|large|landscape|justify|italic|invert|inside|inset|inline-table|inline|icon|higher|high|hide|hidden|help|hebrew|handheld|groove|format|fixed|faster|fast|far-right|far-left|fantasy|extra-expanded|extra-condensed|expanded|embossed|embed|e-resize|double|dotted|disc|digits|default|decimal-leading-zero|decimal|dashed|cursive|crosshair|cross|crop|counters|counter|continuous|condensed|compact|collapse|code|close-quote|circle|center-right|center-left|center|caption|capitalize|braille|bottom|both|bolder|bold|block|blink|bidi-override|below|behind|baseline|avoid|auto|aural|attr|armenian|always|all|absolute|above)\b/
, _style: "color: #3366FF;"
}
, string: {
_match: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/
, _style: "color: teal;"
}
, number: {
_match: /(?:\b[+-]?(?:\d*\.?\d+|\d+\.?\d*))(?:%|(?:(?:px|pt|em|)\b))/
, _style: "color: red;"
}
, color : {
_match: /(?:\#[a-fA-F0-9]{3,6})|\b(?:yellow|white|teal|silver|red|purple|olive|navy|maroon|lime|green|gray|fuchsia|blue|black|aqua|YellowGreen|Yellow|WhiteSmoke|White|Wheat|Violet|Turquoise|Tomato|Thistle|Teal|Tan|SteelBlue|SpringGreen|Snow|SlateGrey|SlateGray|SlateBlue|SkyBlue|Silver|Sienna|SeaShell|SeaGreen|SandyBrown|Salmon|SaddleBrown|RoyalBlue|RosyBrown|Red|Purple|PowderBlue|Plum|Pink|Peru|PeachPuff|PapayaWhip|PaleVioletRed|PaleTurquoise|PaleGreen|PaleGoldenRod|Orchid|OrangeRed|Orange|OliveDrab|Olive|OldLace|Navy|NavajoWhite|Moccasin|MistyRose|MintCream|MidnightBlue|MediumVioletRed|MediumTurquoise|MediumSpringGreen|MediumSlateBlue|MediumSeaGreen|MediumPurple|MediumOrchid|MediumBlue|MediumAquaMarine|Maroon|Magenta|Linen|LimeGreen|Lime|LightYellow|LightSteelBlue|LightSlateGrey|LightSlateGray|LightSkyBlue|LightSeaGreen|LightSalmon|LightPink|LightGrey|LightGreen|LightGray|LightGoldenRodYellow|LightCyan|LightCoral|LightBlue|LemonChiffon|LawnGreen|LavenderBlush|Lavender|Khaki|Ivory|Indigo|IndianRed|HotPink|HoneyDew|Grey|GreenYellow|Green|Gray|GoldenRod|Gold|GhostWhite|Gainsboro|Fuchsia|ForestGreen|FloralWhite|FireBrick|DodgerBlue|DimGrey|DimGray|DeepSkyBlue|DeepPink|Darkorange|DarkViolet|DarkTurquoise|DarkSlateGrey|DarkSlateGray|DarkSlateBlue|DarkSeaGreen|DarkSalmon|DarkRed|DarkOrchid|DarkOliveGreen|DarkMagenta|DarkKhaki|DarkGrey|DarkGreen|DarkGray|DarkGoldenRod|DarkCyan|DarkBlue|Cyan|Crimson|Cornsilk|CornflowerBlue|Coral|Chocolate|Chartreuse|CadetBlue|BurlyWood|Brown|BlueViolet|Blue|BlanchedAlmond|Black|Bisque|Beige|Azure|Aquamarine|Aqua|AntiqueWhite|AliceBlue)\b/
, _style: "color: green;"
}
}
};


  

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Search / goMap</title>
<link type="text/css" href="../main.css" rel="stylesheet" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="../js/jquery.gomap-1.3.3.js"></script>
<script type="text/javascript" src="../js/jquery.dump.js"></script>
<script type="text/javascript" src="../js/jquery.chili-2.2.js"></script>
<script type="text/javascript" src="../js/recipes.js"></script>
<script type="text/javascript">
$(function() {
var lat = 56.946536;
var lon = 24.10485;
var zoom = 8;

$("#map").goMap({
scaleControl: true,
maptype: 'ROADMAP',
streetViewControl: false,
zoom: zoom,
markers: [{
id: 'address',
latitude: lat,
longitude: lon,
draggable: true
}]
});

//	$("#message").appendTo('#dialogMap').show();

$.goMap.createListener({type:'marker', marker:'address'}, 'position_changed', function() {
$("#latlon").val($($.goMap.mapId).data('address').getPosition().toUrlValue());
});

$("#search_map").click(function() {
if($("#map_address").val() == "")
alert("Address is empty!")
else {
var _address = $.goMap.createListener({type:'marker', marker:'address'}, 'position_changed', function() {
$.goMap.fitBounds();
$.goMap.removeListener(_address);
$.goMap.setMap({zoom:17});
});

$.goMap.setMarker('address', {address:$("#map_address").val()});
}
return false;
});

});
</script>
<style>
.gomapMarker {
width:30px;
height:200px;
display:block;
}
</style>
</head>
<body>
<div id="wrap">
<div id="header">
<div id="logo"><h1><b>$.goMap()</b> / search</h1> google maps jQuery plugn</div>
<div id="menu">
<a href="../solutions.php">→ Back</a>
</div>
</div>
<div id="content">
<b>$.goMap()</b> is <a href="http://www.jquery.com/">jQuery</a> plugin useing <a href="http://code.google.com/apis/maps/documentation/javascript/">Google Maps v3</a>.
<h3>Simple example</h3>
<input type="text" name="map_address" value="" id="map_address" /> <input type="button" name="search_map" value="Search" id="search_map" />
<br/>
<input type="text" name="latlon" value="" id="latlon" readonly/>
<br/>
<style>
em, .map, #map2 {
width:100%;
margin:0 auto;
height:400px;
display:block;
}
</style>
<br/>
<div id="map"></div>

<div id="footer">pittss © / contacts: pittss@gmail.com</div>
</div>
</div>
</body>
</html>


  

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>group / goMap</title>
<link type="text/css" href="../main.css" rel="stylesheet" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="../js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="../js/jquery.gomap-1.3.1.js"></script>
<script type="text/javascript" src="../js/jquery.dump.js"></script>
<script type="text/javascript" src="../js/jquery.chili-2.2.js"></script>
<script type="text/javascript" src="../js/recipes.js"></script>
<script type="text/javascript">
$(function() {

$("#map").goMap({
icon: '../img/apartment.png'
});

$.goMap.ready(function() {
var bounds = $.goMap.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();

for (var i = 0; i < 60; i++) {

var group = 'g1';
var icon  = 'http://www.google.com/intl/en_ALL/mapfiles/marker_green'+String.fromCharCode(i + 65)+'.png';

if(i > 50) {
group = 'g4';
icon  = 'http://www.google.com/intl/en_ALL/mapfiles/marker_black'+String.fromCharCode((i-50) + 65)+'.png';
}
else if(i > 40) {
group = 'g3';
icon  = 'http://www.google.com/intl/en_ALL/mapfiles/marker_orange'+String.fromCharCode((i-40) + 65)+'.png';
}
else if(i > 20) {
group = 'g2';
icon  = 'http://www.google.com/intl/en_ALL/mapfiles/marker'+String.fromCharCode((i-20) + 65)+'.png';
}

$.goMap.createMarker({
latitude: southWest.lat() + latSpan * Math.random(),
longitude: southWest.lng() + lngSpan * Math.random(),
group: group,
icon: icon

});
}

});

$("#group").change(function() {
var group = $(this).val();

if(group == 'all')
for (var i in $.goMap.markers) {
$.goMap.showHideMarker($.goMap.markers[i], true);
}
else {
for (var i in $.goMap.markers) {
$.goMap.showHideMarker($.goMap.markers[i], false);
}

$.goMap.showHideMarkerByGroup(group, true);
}

});

$("#count1").click(function(){
$("#map").goMap();
alert($.goMap.getMarkerCount());
});

});
</script>
</head>
<body>
<div id="wrap">
<div id="header">
<div id="logo"><h1><b>$.goMap()</b> / group</h1> google maps jQuery plugn</div>
<div id="menu">
<a href="../solutions.php">→ Back</a>
</div>
</div>
<div id="content">
<b>$.goMap()</b> is <a href="http://www.jquery.com/">jQuery v1.5</a> plugin useing <a href="http://code.google.com/apis/maps/documentation/javascript/">Google Maps v3</a>.
<h3>Simple example</h3>
<br/>
<style>
em, .map, #map2 {
width:100%;
margin:0 auto;
height:400px;
display:block;
}
</style>
<br/>
<select id="group">
<option value="all">Show all markers</option>
<option value="g1">Show only group "g1"</option>
<option value="g2">Show only group "g2"</option>
<option value="g3">Show only group "g3"</option>
<option value="g4">Show only group "g4"</option>
</select>
<input type="button" name="count1" value="count markers" id="count1" />
<div id="map"></div>

<div id="footer">pittss © <?=date("Y");?> / contacts: pittss@gmail.com</div>
</div>
</div>
</body>
</html>


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: