more maps

This commit is contained in:
rolux 2010-07-24 21:27:39 +02:00
parent 20ea5e9658
commit a88147d416

View file

@ -2119,7 +2119,7 @@ requires
.change(change) .change(change)
.appendTo(that); .appendTo(that);
self.options.placeholder && that.$input.val(self.option); self.options.placeholder && that.$input.val(self.option.title);
if (self.options.clear) { if (self.options.clear) {
that.$clear = new Ox.Button({ that.$clear = new Ox.Button({
@ -2244,7 +2244,7 @@ requires
valid: self.valid valid: self.valid
}); });
if (self.options.placeholder && that.$input.val() === "") { if (self.options.placeholder && that.$input.val() === "") {
that.$input.addClass("OxPlaceholder").val(self.option); that.$input.addClass("OxPlaceholder").val(self.option.title);
} }
if (self.options.autocomplete || self.options.autocorrect || self.options.validate) { // fixme: duplicated, make a var if (self.options.autocomplete || self.options.autocorrect || self.options.validate) { // fixme: duplicated, make a var
$document.unbind("keydown", keypress); $document.unbind("keydown", keypress);
@ -2270,7 +2270,7 @@ requires
autocompleteCall(); autocompleteCall();
} else { } else {
if (that.$input.is(".OxPlaceholder")) { if (that.$input.is(".OxPlaceholder")) {
that.$input.val(self.option); that.$input.val(self.option.title);
//that.$input.focus(); //that.$input.focus();
} else { } else {
that.$input.focus(); that.$input.focus();
@ -2424,9 +2424,9 @@ requires
that.width = function(value) { that.width = function(value) {
that.$element.width(value); that.$element.width(value);
that.$input.width(value - (self.options.type == "textarea" ? 0 : 2) - that.$input.width(value - (self.options.type == "textarea" ? 0 : 2) -
(self.options.label ? self.options.labelWidth + 18 : 0) - (self.options.label ? self.options.labelWidth + 25 : 0) -
(self.options.placeholder.length > 1 ? 26 : 0) - (self.options.placeholder.length > 1 ? 16 : 0) -
(self.options.clear ? 31 : 0)); (self.options.clear ? 25 : 0));
// fixme: the values above are all weird guesswork // fixme: the values above are all weird guesswork
return that; return that;
} }
@ -3936,6 +3936,59 @@ requires
init(); init();
function canContain(outerBounds, innerBounds) {
var outerSpan = outerBounds.toSpan(),
innerSpan = innerBounds.toSpan();
return outerSpan.lat() > innerSpan.lat() &&
outerSpan.lng() > innerSpan.lng();
}
function click(event) {
Ox.print("event", event);
getLocationByLatLng(event.latLng, self.map.getBounds(), function(location) {
self.marker && self.marker.remove();
self.polygon && self.polygon.remove();
if (location) {
self.marker = location.marker.add();
self.polygon = location.polygon.add();
}
})
}
function getLocationByLatLng(latlng, bounds, callback) {
Ox.print("ll b", latlng, bounds)
var callback = arguments.length == 3 ? callback : bounds,
bounds = arguments.length == 3 ? bounds : null;
self.geocoder.geocode({
latLng: latlng
}, function(results, status) {
Ox.print("results", results)
var length = results.length;
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
if (bounds) {
$.each(results.reverse(), function(i, result) {
if (
i == length - 1 ||
canContain(bounds, result.geometry.bounds || result.geometry.viewport)
) {
callback(new Location(results[i]));
return false;
}
});
} else {
callback(new Location(results[0]));
}
} else {
callback(null);
}
} else {
Ox.print("geocode failed:", status);
callback(null);
}
});
}
function getLocationByName(name, callback) { function getLocationByName(name, callback) {
self.geocoder.geocode({ self.geocoder.geocode({
address: name address: name
@ -3953,33 +4006,13 @@ requires
}); });
} }
function getLocationByPoint(point, area, callback) {
var callback = arguments.length == 2 ? area : callback,
area = arguments.length == 2 ? null : area,
options = $.extend({
"latLng": new google.maps.LatLng(point[0], point[1])
}, area ? {
"bounds": new google.maps.LatLngBounds(
new google.maps.LatLng(area[0][0], area[0][1]),
new google.maps.LatLng(area[1][0], area[1][1])
)
} : {});
self.geocoder.geocode(options, function(results, status) {
var length = results.length;
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
}
}
});
}
function init() { function init() {
var counter = 0, var counter = 0,
length = self.options.places.length; length = self.options.places.length;
$.extend(self, { $.extend(self, {
geocoder: new google.maps.Geocoder(), geocoder: new google.maps.Geocoder(),
locations: [] locations: [],
selectedMarker: null
}); });
$.each(self.options.places, function(i, place) { $.each(self.options.places, function(i, place) {
if (Ox.isString(place)) { if (Ox.isString(place)) {
@ -4020,12 +4053,17 @@ requires
}) })
}); });
self.map.fitBounds(self.bounds) self.map.fitBounds(self.bounds)
google.maps.event.addListener(self.map, "click", click);
google.maps.event.addListener(self.map, "zoom_changed", zoom); google.maps.event.addListener(self.map, "zoom_changed", zoom);
$.each(self.locations, function(i, location) { $.each(self.locations, function(i, location) {
location.marker.add(); location.marker.add();
}); });
}; };
function resize() {
google.maps.event.trigger(self.map, "resize");
}
function zoom() { function zoom() {
} }
@ -4057,15 +4095,21 @@ requires
function Marker(location) { function Marker(location) {
var listeners = {}, var listeners = {},
marker = new google.maps.Marker({ marker = new google.maps.Marker({
icon: icon("blue"), icon: icon("red"),
position: location.rectangle.center, position: location.rectangle.center,
title: location.name.formatted title: location.name.formatted
}); }),
selected = false;
function click() { function click() {
selected = !selected;
marker.setOptions({ marker.setOptions({
icon: icon("red") icon: icon(selected ? "blue" : "red")
}); });
location.polygon.add(); location.polygon[selected ? "add" : "remove"]();
}
function dblclick() {
click();
self.map.fitBounds(location.rectangle.bounds);
} }
function icon(color) { function icon(color) {
return "http://dev.pan.do:8000" + oxui.path + "png/ox.ui/marker" + Ox.toTitleCase(color) + ".png" return "http://dev.pan.do:8000" + oxui.path + "png/ox.ui/marker" + Ox.toTitleCase(color) + ".png"
@ -4073,11 +4117,24 @@ requires
return { return {
add: function() { add: function() {
marker.setMap(self.map); marker.setMap(self.map);
listeners.click = google.maps.event.addListener(marker, "click", click); listeners = {
click: google.maps.event.addListener(marker, "click", click),
dblclick: google.maps.event.addListener(marker, "dblclick", dblclick),
};
return this;
},
deselect: function() {
}, },
remove: function() { remove: function() {
marker.setMap(null); marker.setMap(null);
google.maps.event.removeListener(listeners.click); $.each(listeners, function(i, listener) {
google.maps.event.removeListener(listener);
});
return this;
},
select: function() {
} }
}; };
} }
@ -4095,13 +4152,17 @@ requires
paths: points paths: points
}), }),
selected = false; selected = false;
setOptions();
function click() {
selected = !selected;
setOptions();
}
function setOptions() { function setOptions() {
var color = selected ? "#8080FF" : "#FFFFFF"; var color = selected ? "#8080FF" : "#FFFFFF";
polygon.setOptions({ polygon.setOptions({
clickable: true, clickable: true,
fillColor: color, fillColor: color,
fillOpacity: selected ? 0.1 : 0, fillOpacity: selected ? 0.1 : 0,
geodesic: true,
strokeColor: color, strokeColor: color,
strokeOpacity: 1, strokeOpacity: 1,
strokeWeight: 2 strokeWeight: 2
@ -4110,7 +4171,8 @@ requires
return { return {
add: function() { add: function() {
polygon.setMap(self.map); polygon.setMap(self.map);
listeners.click = google.maps.event.addListener(polygon, "click", this.select); listeners.click = google.maps.event.addListener(polygon, "click", click);
return this;
}, },
deselect: function() { deselect: function() {
selected = false; selected = false;
@ -4119,6 +4181,7 @@ requires
remove: function() { remove: function() {
polygon.setMap(null); polygon.setMap(null);
google.maps.event.removeListener(listeners.click); google.maps.event.removeListener(listeners.click);
return this;
}, },
select: function() { select: function() {
selected = true; selected = true;
@ -4142,11 +4205,11 @@ requires
}); });
$.extend(latlng, { $.extend(latlng, {
sc: new google.maps.LatLng(lat.sw, lng.mc), sc: new google.maps.LatLng(lat.sw, lng.mc),
se: new google.maps.LatLng(lat.sw, lng.mc), se: new google.maps.LatLng(lat.sw, lng.ne),
mw: new google.maps.LatLng(lat.sw, lng.mc), mw: new google.maps.LatLng(lat.mc, lng.sw),
mw: new google.maps.LatLng(lat.sw, lng.mc), mw: new google.maps.LatLng(lat.mc, lng.ne),
nw: new google.maps.LatLng(lat.sw, lng.mc), nw: new google.maps.LatLng(lat.ne, lng.sw),
nc: new google.maps.LatLng(lat.sw, lng.mc), nc: new google.maps.LatLng(lat.ne, lng.mc),
}); });
return { return {
area: area, area: area,