-page.replace_html :sidebar_title, 'Data'
+page.replace_html :sidebar_title, t('browse.start_rjs.data_frame_title')
page.replace_html :sidebar_content, :partial => 'start'
page << <<EOJ
var browseBoxControl;
- var browseActive;
var browseMode = "auto";
var browseBounds;
var browseFeatureList;
var browseDataLayer;
var browseSelectControl;
var browseObjectList;
+ var areasHidden = false;
OpenLayers.Feature.Vector.style['default'].strokeWidth = 3;
OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
function startBrowse() {
+ map.dataLayer.active = true;
+
openSidebar({ onclose: stopBrowse });
var vectors = new OpenLayers.Layer.Vector();
sides: 4,
snapAngle: 90,
irregular: true,
- persist: true,
- callbacks: { done: endDrag }
+ persist: true
}
});
+ browseBoxControl.handler.callbacks.done = endDrag;
map.addControl(browseBoxControl);
map.events.register("moveend", map, showData);
map.events.triggerEvent("moveend");
- browseActive = true;
+ $("browse_hide_areas_box").innerHTML = "#{I18n.t('browse.start_rjs.hide_areas')}";
+ $("browse_hide_areas_box").style.display = "inline";
+ $("browse_hide_areas_box").onclick = hideAreas;
}
function showData() {
if (browseMode == "auto") {
if (map.getZoom() >= 15) {
- useMap();
+ useMap(false);
} else {
- setStatus("Zoom in or select an area of the map to view");
+ setStatus("#{I18n.t('browse.start_rjs.zoom_or_select')}");
}
}
}
function stopBrowse() {
- if (browseActive) {
- browseActive = false;
-
- if (browseDataLayer) {
- browseDataLayer.destroy();
- browseDataLayer = null;
- }
+ if (map.dataLayer.active) {
+ map.dataLayer.active = false;
if (browseSelectControl) {
browseSelectControl.destroy();
if (browseBoxControl) {
browseBoxControl.destroy();
- browseBoxControl = null;
+ browseBoxControl = null;
}
if (browseActiveFeature) {
browseActiveFeature = null;
}
+ if (browseDataLayer) {
+ browseDataLayer.destroy();
+ browseDataLayer = null;
+ }
+
map.dataLayer.setVisibility(false);
map.events.unregister("moveend", map, showData);
}
}
-
+
function startDrag() {
- $("browse_select_box").innerHTML='Drag a box on the map to select an area';
+ $("browse_select_box").innerHTML="#{I18n.t('browse.start_rjs.drag_a_box')}";
browseBoxControl.activate();
};
$("browse_select_box").onclick = startDrag;
-
- function useMap() {
+
+ function useMap(reload) {
var bounds = map.getExtent();
var projected = bounds.clone().transform(map.getProjectionObject(), epsg4326);
center.lat + (tileHeight / 2));
browseBounds = tileBounds;
- getData(tileBounds);
+ getData(tileBounds, reload);
browseMode = "auto";
return false;
}
+ function hideAreas() {
+ $("browse_hide_areas_box").innerHTML = "#{I18n.t('browse.start_rjs.show_areas')}";
+ $("browse_hide_areas_box").style.display = "inline";
+ $("browse_hide_areas_box").onclick = showAreas;
+
+ areasHidden = true;
+
+ useMap(true);
+ }
+
+ function showAreas() {
+ $("browse_hide_areas_box").innerHTML = "#{I18n.t('browse.start_rjs.hide_areas')}";
+ $("browse_hide_areas_box").style.display = "inline";
+ $("browse_hide_areas_box").onclick = hideAreas;
+
+ areasHidden = false;
+
+ useMap(true);
+ }
+
$("browse_select_view").onclick = useMap;
-
+
function endDrag(bbox) {
var bounds = bbox.getBounds();
var projected = bounds.clone().transform(map.getProjectionObject(), epsg4326);
browseMode = "manual";
- $("browse_select_box").innerHTML = "Manually select a different area";
+ $("browse_select_box").innerHTML = "#{I18n.t('browse.start_rjs.manually_select')}";
$("browse_select_view").style.display = "inline";
}
-
+
function displayFeatureWarning() {
clearStatus();
var div = document.createElement("div");
var p = document.createElement("p");
- p.appendChild(document.createTextNode("You have loaded an area which contains " + browseFeatureList.length + " features. In general, some browsers may not cope well with displaying this quantity of data. Generally, browsers work best at displaying less than 100 features at a time: doing anything else may make your browser slow/unresponsive. If you are sure you want to display this data, you may do so by clicking the button below."));
+ p.appendChild(document.createTextNode(i18n("#{I18n.t('browse.start_rjs.loaded_an_area_with_num_features')}", { num_features: browseFeatureList.length })));
div.appendChild(p);
var input = document.createElement("input");
input.type = "submit";
- input.value = "Load Data";
+ input.value = "#{I18n.t('browse.start_rjs.load_data')}";
input.onclick = loadFeatureList;
div.appendChild(input);
$("browse_content").innerHTML = "";
$("browse_content").appendChild(div);
}
-
+
function loadFeatureList() {
browseDataLayer.addFeatures(browseFeatureList);
browseDataLayer.events.triggerEvent("loadend");
return false;
}
- function customDataLoader(request) {
- if (browseActive) {
+ function customDataLoader(request) {
+ if (this.map.dataLayer.active) {
var doc = request.responseXML;
if (!doc || !doc.documentElement) {
}
}
- function getData(bounds) {
+ function getData(bounds, reload) {
var projected = bounds.clone().transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
var size = projected.getWidth() * projected.getHeight();
- if (size > 0.25) {
- setStatus("Unable to load: Bounding box size of " + size + " is too large (must be smaller than 0.25)");
+ if (size > #{MAX_REQUEST_AREA}) {
+ setStatus(i18n("#{I18n.t('browse.start_rjs.unable_to_load_size', :max_bbox_size => MAX_REQUEST_AREA)}", { bbox_size: size }));
} else {
- loadGML("/api/0.5/map?bbox=" + projected.toBBOX());
+ loadGML("/api/#{API_VERSION}/map?bbox=" + projected.toBBOX(), reload);
}
}
- function loadGML(url) {
- setStatus("Loading...");
+ function loadGML(url, reload) {
+ setStatus("#{I18n.t('browse.start_rjs.loading')}");
$("browse_content").innerHTML = "";
- if (!browseDataLayer) {
+ var formatOptions = {
+ checkTags: true,
+ interestingTagsExclude: ['source','source_ref','source:ref','history','attribution','created_by','tiger:county','tiger:tlid','tiger:upload_uuid']
+ };
+
+ if (areasHidden) formatOptions.areaTags = [];
+
+ if (!browseDataLayer || reload) {
var style = new OpenLayers.Style();
style.addRules([new OpenLayers.Rule({
}
})]);
+ if (browseDataLayer) browseDataLayer.destroyFeatures();
+
browseDataLayer = new OpenLayers.Layer.GML("Data", url, {
format: OpenLayers.Format.OSM,
- formatOptions: { checkTags: true },
+ formatOptions: formatOptions,
maxFeatures: 100,
requestSuccess: customDataLoader,
displayInLayerSwitcher: false,
styleMap: new OpenLayers.StyleMap({
- default: style,
- select: { strokeColor: '#0000ff', strokeWidth: 8 }
+ 'default': style,
+ 'select': { strokeColor: '#0000ff', strokeWidth: 8 }
})
});
browseDataLayer.events.register("loadend", browseDataLayer, dataLoaded );
map.addLayer(browseDataLayer);
browseSelectControl = new OpenLayers.Control.SelectFeature(browseDataLayer, { onSelect: onFeatureSelect });
- browseSelectControl.handler.stopDown = false;
- browseSelectControl.handler.stopUp = false;
+ browseSelectControl.handlers.feature.stopDown = false;
+ browseSelectControl.handlers.feature.stopUp = false;
map.addControl(browseSelectControl);
browseSelectControl.activate();
} else {
+ browseDataLayer.destroyFeatures();
+ browseDataLayer.format(formatOptions);
browseDataLayer.setUrl(url);
}
}
function dataLoaded() {
- if (browseActive) {
+ if (this.map.dataLayer.active) {
clearStatus();
-
+
browseObjectList = document.createElement("div")
var heading = document.createElement("p");
heading.className = "browse_heading";
- heading.appendChild(document.createTextNode("Object list"));
+ heading.appendChild(document.createTextNode("#{I18n.t('browse.start_rjs.object_list.heading')}"));
browseObjectList.appendChild(heading);
var list = document.createElement("ul");
// Type, for linking
var type = featureType(feature);
- var typeName = ucFirst(type);
+ var typeName = featureTypeName(feature);
var li = document.createElement("li");
li.appendChild(document.createTextNode(typeName + " "));
// Link, for viewing in the tab
var link = document.createElement("a");
link.href = "/browse/" + type + "/" + feature.osm_id;
- var name = feature.attributes.name || feature.osm_id;
+ var name = featureName(feature);
link.appendChild(document.createTextNode(name));
link.feature = feature;
link.onclick = OpenLayers.Function.bind(viewFeatureLink, link);
var link = document.createElement("a");
link.href = this.url;
- link.appendChild(document.createTextNode("API"));
+ link.appendChild(document.createTextNode("#{I18n.t('browse.start_rjs.object_list.api')}"));
browseObjectList.appendChild(link);
$("browse_content").innerHTML = "";
var link = document.createElement("a");
link.href = "#";
link.onclick = loadObjectList;
- link.appendChild(document.createTextNode("Display object list"));
+ link.appendChild(document.createTextNode("#{I18n.t('browse.start_rjs.object_list.back')}"));
div.appendChild(link);
var table = document.createElement("table");
table.appendChild(tr);
var heading = document.createElement("td");
- heading.appendChild(document.createTextNode(featureName(feature)));
+ heading.appendChild(document.createTextNode(featureNameSelect(feature)));
tr.appendChild(heading);
var td = document.createElement("td");
var type = featureType(feature);
var link = document.createElement("a");
link.href = "/browse/" + type + "/" + feature.osm_id;
- link.appendChild(document.createTextNode("Details"));
+ link.appendChild(document.createTextNode("#{I18n.t('browse.start_rjs.object_list.details')}"));
td.appendChild(link);
var div = document.createElement("div");
var link = document.createElement("a");
link.href = "/browse/" + type + "/" + feature.osm_id + "/history";
- link.appendChild(document.createTextNode("Show history"));
+ link.appendChild(document.createTextNode("#{I18n.t('browse.start_rjs.show_history')}"));
link.onclick = OpenLayers.Function.bind(loadHistory, {
type: type, feature: feature, link: link
});
function loadHistory() {
this.link.href = "";
- this.link.innerHTML = "Wait...";
+ this.link.innerHTML = "#{I18n.t('browse.start_rjs.wait')}";
- new Ajax.Request("/api/0.5/" + this.type + "/" + this.feature.osm_id + "/history", {
+ new Ajax.Request("/api/#{API_VERSION}/" + this.type + "/" + this.feature.osm_id + "/history", {
onComplete: OpenLayers.Function.bind(displayHistory, this)
});
table.appendChild(tr);
var heading = document.createElement("td");
- heading.appendChild(document.createTextNode("History for " + featureName(this.feature)));
+ heading.appendChild(document.createTextNode(i18n("#{I18n.t('browse.start_rjs.history_for_feature')}", { feature: featureNameHistory(this.feature) })));
tr.appendChild(heading);
var td = document.createElement("td");
var link = document.createElement("a");
link.href = "/browse/" + this.type + "/" + this.feature.osm_id + "/history";
- link.appendChild(document.createTextNode("Details"));
+ link.appendChild(document.createTextNode("#{I18n.t('browse.start_rjs.details')}"));
td.appendChild(link);
var div = document.createElement("div");
var nodes = doc.getElementsByTagName(this.type);
var history = document.createElement("ul");
for (var i = nodes.length - 1; i >= 0; i--) {
- var user = nodes[i].getAttribute("user") || "private user";
+ var user = nodes[i].getAttribute("user") || "#{I18n.t('browse.start_rjs.private_user')}";
var timestamp = nodes[i].getAttribute("timestamp");
var item = document.createElement("li");
- item.appendChild(document.createTextNode("Edited by " + user + " at " + timestamp));
+ item.appendChild(document.createTextNode(i18n("#{I18n.t('browse.start_rjs.edited_by_user_at_timestamp')}", { user: user, timestamp: timestamp })));
history.appendChild(item);
}
div.appendChild(history);
return "way";
}
}
-
+
+ function featureTypeName(feature) {
+ if (featureType(feature) == "node") {
+ return "#{I18n.t('browse.start_rjs.object_list.type.node')}";
+ } else if (featureType(feature) == "way") {
+ return "#{I18n.t('browse.start_rjs.object_list.type.way')}";
+ }
+ }
+
function featureName(feature) {
- if (feature.attributes.name) {
+ if (feature.attributes['name:#{I18n.locale}']) {
+ return feature.attributes['name:#{I18n.locale}'];
+ } else if (feature.attributes.name) {
return feature.attributes.name;
} else {
- return ucFirst(featureType(feature)) + " " + feature.osm_id;
+ return feature.osm_id;
+ }
+ }
+
+ function featureNameSelect(feature) {
+ if (feature.attributes['name:#{I18n.locale}']) {
+ return feature.attributes['name:#{I18n.locale}'];
+ } else if (feature.attributes.name) {
+ return feature.attributes.name;
+ } else if (featureType(feature) == "node") {
+ return i18n("#{I18n.t('browse.start_rjs.object_list.selected.type.node')}", { id: feature.osm_id });
+ } else if (featureType(feature) == "way") {
+ return i18n("#{I18n.t('browse.start_rjs.object_list.selected.type.way')}", { id: feature.osm_id });
+ }
+ }
+
+ function featureNameHistory(feature) {
+ if (feature.attributes['name:#{I18n.locale}']) {
+ return feature.attributes['name:#{I18n.locale}'];
+ } else if (feature.attributes.name) {
+ return feature.attributes.name;
+ } else if (featureType(feature) == "node") {
+ return i18n("#{I18n.t('browse.start_rjs.object_list.history.type.node')}", { id: feature.osm_id });
+ } else if (featureType(feature) == "way") {
+ return i18n("#{I18n.t('browse.start_rjs.object_list.history.type.way')}", { id: feature.osm_id });
}
}
$("browse_status").style.display = "none";
}
- function ucFirst(str) {
- return str.substr(0,1).toUpperCase() + str.substr(1,str.length);
- }
-
startBrowse();
EOJ