0

Merge remote-tracking branch 'orospakr/master'

This commit is contained in:
Aaron Griffith
2011-07-10 17:58:21 -04:00
2 changed files with 108 additions and 0 deletions

View File

@@ -100,3 +100,34 @@ body {
background-color: #fff; /* fallback */
background-color: rgba(255,255,255,0.8);
}
#searchControl {
padding: 5px;
height: 20px;
font-family: Arial, sans-serif;
}
#searchControl > input {
border: 2px solid #000;
font-size: 12pt;
width: 20em;
background-colour: #fff;
}
div#searchDropDown {
border: 1px solid #000;
width: 17em;
font-size: 14pt;
background-color: #fff;
display: none;
}
div.searchResultItem {
overflow: hidden;
text-overflow: ellipsis;
}
div.searchResultItem img {
width: 24px;
height: 24px;
}

View File

@@ -58,6 +58,7 @@ var overviewer = {
overviewer.util.initializeMarkers();
overviewer.util.initializeRegions();
overviewer.util.createMapControls();
overviewer.util.createSearchBox();
},
/**
* This adds some methods to these classes because Javascript is stupid
@@ -96,6 +97,25 @@ var overviewer = {
return div;
};
},
/**
* Quote an arbitrary string for use in a regex matcher.
* WTB parametized regexes, JavaScript...
*
* From http://kevin.vanzonneveld.net
* original by: booeyOH
* improved by: Ates Goral (http://magnetiq.com)
* improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
* bugfixed by: Onno Marsman
* example 1: preg_quote("$40");
* returns 1: '\$40'
* example 2: preg_quote("*RRRING* Hello?");
* returns 2: '\*RRRING\* Hello\?'
* example 3: preg_quote("\\.+*?[^]$(){}=!<>|:");
* returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:'
*/
"pregQuote": function(str) {
return (str+'').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
},
/**
* Setup the varous mapTypes before we actually create the map. This used
* to be a bunch of crap down at the bottom of functions.js
@@ -317,6 +337,7 @@ var overviewer = {
'icon': iconURL,
'visible': false
});
item.marker = marker;
overviewer.util.debug(label);
overviewer.collections.markers[label].push(marker);
if (item.type == 'sign') {
@@ -339,6 +360,7 @@ var overviewer = {
'icon': iconURL,
'visible': false
});
item.marker = marker;
if (overviewer.collections.markers['__others__']) {
overviewer.collections.markers['__others__'].push(marker);
} else {
@@ -758,6 +780,61 @@ var overviewer = {
itemDiv.appendChild(textNode);
}
},
/**
* Create search box and dropdown in the top right google maps area.
*/
'createSearchBox': function() {
var searchControl = document.createElement("div");
searchControl.id = "searchControl";
var searchInput = document.createElement("input");
searchInput.type = "text";
searchControl.appendChild(searchInput);
var searchDropDown = document.createElement("div");
searchDropDown.id = "searchDropDown";
searchControl.appendChild(searchDropDown);
$(searchInput).keyup(function(e) {
var newline_stripper = new RegExp("[\\r\\n]", "g")
if(searchInput.value.length !== 0) {
$(searchDropDown).fadeIn();
$(searchDropDown).empty();
overviewer.collections.markerDatas.forEach(function(marker_list) {
marker_list.forEach(function(sign) {
var regex = new RegExp(overviewer.util.pregQuote(searchInput.value), "mi");
if(sign.msg.match(regex)) {
if(sign.marker !== undefined && sign.marker.getVisible()) {
var t = document.createElement("div");
t.className = "searchResultItem";
var i = document.createElement("img");
i.src = sign.marker.getIcon();
t.appendChild(i);
var s = document.createElement("span");
$(s).text(sign.msg.replace(newline_stripper, ""));
t.appendChild(s);
searchDropDown.appendChild(t);
$(t).click(function(e) {
$(searchDropDown).fadeOut();
overviewer.map.setZoom(7);
overviewer.map.setCenter(sign.marker.getPosition());
});
}
}
});
});
} else {
$(searchDropDown).fadeOut();
}
});
overviewer.map.controls[google.maps.ControlPosition.TOP_RIGHT].push(searchControl);
},
/**
* Create the pop-up infobox for when you click on a region, this can't
* be done in-line because of stupid Javascript scoping problems with