more maps
This commit is contained in:
parent
20ea5e9658
commit
a88147d416
1 changed files with 104 additions and 41 deletions
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue