0

Improved flexibilty when specifying signGroups

Group membership is now determined with a function.  See config.js for
some examples.  If we want to include more information about markers in
markers.js, this model should be useful.
This commit is contained in:
Andrew Chin
2010-12-08 21:59:45 -05:00
parent 65264407f9
commit 9bc7c10bd1
2 changed files with 36 additions and 36 deletions

View File

@@ -10,14 +10,23 @@
};
// define a list of pattern-label pairs. Each label will appear
// in the 'Signposts' control, allowing your users to quickly enable
// or disable certain labels. See below for some examples:
var signGroups = {
// "Directions": /^#Direction/i,
// "Big Dig": /big\s*dig/i,
// "Warnings": /warning/i,
};
/* signGroups -- A list of signpost groups. A signpost can fall into zero, one, or more than one
* group. See below for some examples.
*
* Required:
* label : string. Displayed in the drop down menu control.
* match : function. Applied to each marker (from markers.js). It is returns true if the marker
* Should be part of the group.
*
* Optional:
* checked : boolean. Set to true to have the group visible by default
*/
var signGroups = [
// {label: "'To'", checked: false, match: function(s) {return s.msg.match(/to/)}},
// {label: "Storage", match: function(s) {return s.msg.match(/storage/i) || s.msg.match(/dirt/i) || s.msg.match(/sand/)}},
// {label: "Below Sealevel", match: function(s) { return s.y<64;}},
{label: "All", match: function(s) {return true}}
];
// Please leave the following variables here:
var markerCollection = {}; // holds groups of markers

View File

@@ -29,7 +29,7 @@ function drawMapControls() {
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(compassDiv);
if (markerData.length > 0) {
if (signGroups.length > 0) {
// signpost display control
//
@@ -62,8 +62,12 @@ function drawMapControls() {
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(signControl);
var hasSignGroup = false;
for (label in signGroups) {
for (idx in signGroups) {
var item = signGroups[idx];
//console.log(item);
label = item.label;
hasSignGroup = true;
var d = document.createElement("div");
var n = document.createElement("input");
@@ -75,6 +79,11 @@ function drawMapControls() {
jQuery.each(markerCollection[t.data("label")], function(i,elem) {elem.setVisible(e.target.checked);});
});
if (item.checked) {
n.checked = true;
jQuery.each(markerCollection[label], function(i,elem) {elem.setVisible(n.checked);});
}
dropdownDiv.appendChild(d);
d.appendChild(n)
var textNode = document.createElement("text");
@@ -83,25 +92,6 @@ function drawMapControls() {
}
// add "others"
var n = document.createElement("input");
n.type="checkbox";
$(n).data("label","__others__");
jQuery(n).click(function(e) {
var t = $(e.target);
jQuery.each(markerCollection[t.data("label")], function(i,elem) {elem.setVisible(e.target.checked);});
});
dropdownDiv.appendChild(n);
var textNode = document.createElement("text");
if (hasSignGroup) {
textNode.innerHTML = "Others<br/>";
} else{
textNode.innerHTML = "All<br/>";
}
dropdownDiv.appendChild(textNode);
}
}
@@ -172,11 +162,12 @@ function initMarkers() {
}
var matched = false;
for (label in signGroups) {
var pattern = signGroups[label];
for (idx in signGroups) {
var signGroup = signGroups[idx];
var testfunc = signGroup.match;
var label = signGroup.label;
var r = item.msg.match(pattern);
if (r) {
if (testfunc(item)) {
matched = true;
if (item.type == 'sign') { iconURL = 'signpost_icon.png';}
@@ -246,14 +237,14 @@ function initialize() {
map.overlayMapTypes.insertAt(0, new CoordMapType(new google.maps.Size(config.tileSize, config.tileSize)));
google.maps.event.addListener(map, 'click', function(event) {
console.log("latLng; " + event.latLng.lat() + ", " + event.latLng.lng());
//console.log("latLng; " + event.latLng.lat() + ", " + event.latLng.lng());
var pnt = map.getProjection().fromLatLngToPoint(event.latLng);
console.log("point: " + pnt);
//console.log("point: " + pnt);
var pxx = pnt.x * config.tileSize * Math.pow(2, config.maxZoom);
var pxy = pnt.y * config.tileSize * Math.pow(2, config.maxZoom);
console.log("pixel: " + pxx + ", " + pxy);
//console.log("pixel: " + pxx + ", " + pxy);
});
}