page.replace_html :sidebar_content, :partial => 'start'
page << <<EOJ
var browseBoxControl;
- var browseActive;
var browseMode = "auto";
var browseBounds;
var browseFeatureList;
OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
function startBrowse() {
- browseActive = true;
+ map.dataLayer.active = true;
openSidebar({ onclose: stopBrowse });
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);
}
function stopBrowse() {
- if (browseActive) {
- browseActive = false;
+ if (map.dataLayer.active) {
+ map.dataLayer.active = false;
if (browseSelectControl) {
browseSelectControl.destroy();
}
function startDrag() {
- $("browse_select_box").innerHTML='#{I18n.t('browse.start_rjs.drag_a_box')}';
+ $("browse_select_box").innerHTML="#{I18n.t('browse.start_rjs.drag_a_box')}";
browseBoxControl.activate();
var div = document.createElement("div");
var p = document.createElement("p");
- p.appendChild(document.createTextNode(i18n_js("#{I18n.t('browse.start_rjs.loaded_an_area_with_num_features', :num_features => '{{num_features}}')}", { num_features: browseFeatureList.length })));
+ 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");
}
function customDataLoader(request) {
- if (browseActive) {
+ if (this.map.dataLayer.active) {
var doc = request.responseXML;
if (!doc || !doc.documentElement) {
var projected = bounds.clone().transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
var size = projected.getWidth() * projected.getHeight();
- if (size > #{APP_CONFIG['max_request_area']}) {
- setStatus(i18n_js("#{I18n.t('browse.start_rjs.unable_to_load_size', :bbox_size => '{{bbox_size}}', :max_bbox_size => APP_CONFIG['max_request_area'])}", { bbox_size: size }));
+ 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/#{API_VERSION}/map?bbox=" + projected.toBBOX());
}
}
function dataLoaded() {
- if (browseActive) {
+ if (this.map.dataLayer.active) {
clearStatus();
-
+
browseObjectList = document.createElement("div")
var heading = document.createElement("p");
// 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);
table.appendChild(tr);
var heading = document.createElement("td");
- heading.appendChild(document.createTextNode(i18n_js("#{I18n.t('browse.start_rjs.history_for_feature', :feature => '{{feature}}')}", { feature: featureNameHistory(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 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(i18n_js("#{I18n.t('browse.start_rjs.edited_by_user_at_timestamp', :user => '{{user}}', :timestamp => '{{timestamp}}')}", { user: user, timestamp: 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);
}
}
+ function featureName(feature) {
+ if (feature.attributes['name:#{I18n.locale}']) {
+ return feature.attributes['name:#{I18n.locale}'];
+ } else if (feature.attributes.name) {
+ return feature.attributes.name;
+ } else {
+ return feature.osm_id;
+ }
+ }
+
function featureNameSelect(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 if (featureType(feature) == "node") {
- return i18n_js("#{I18n.t('browse.start_rjs.object_list.selected.type.node', :id => '{{id}}')}", { id: feature.osm_id });
+ return i18n("#{I18n.t('browse.start_rjs.object_list.selected.type.node')}", { id: feature.osm_id });
} else if (featureType(feature) == "way") {
- return i18n_js("#{I18n.t('browse.start_rjs.object_list.selected.type.way', :id => '{{id}}')}", { id: feature.osm_id });
+ return i18n("#{I18n.t('browse.start_rjs.object_list.selected.type.way')}", { id: feature.osm_id });
}
}
function featureNameHistory(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 if (featureType(feature) == "node") {
- return i18n_js("#{I18n.t('browse.start_rjs.object_list.history.type.node', :id => '{{id}}')}", { id: feature.osm_id });
+ return i18n("#{I18n.t('browse.start_rjs.object_list.history.type.node')}", { id: feature.osm_id });
} else if (featureType(feature) == "way") {
- return i18n_js("#{I18n.t('browse.start_rjs.object_list.history.type.way', :id => '{{id}}')}", { id: feature.osm_id });
+ return i18n("#{I18n.t('browse.start_rjs.object_list.history.type.way')}", { id: feature.osm_id });
}
}
- /*
- This is a hack so that we can interpolate JavaScript variables in
- translation strings from Ruby, doing the string replacement
- client-side instead of on the server.
- */
- function i18n_js(string, keys) {
- for (var key in keys) {
- var re_key = '\{\{' + key + '\}\}';
- var re = new RegExp(re_key, "g");
-
- string = string.replace(re, keys[key]);
- }
-
- return string;
- }
-
function setStatus(status) {
$("browse_status").innerHTML = status;
$("browse_status").style.display = "block";