]> git.openstreetmap.org Git - rails.git/blobdiff - app/views/browse/start.js.erb
Reduce interpolation in browse/start.js.erb
[rails.git] / app / views / browse / start.js.erb
index d427ddbafe951d160b3e180570a0b8f411f65bfc..6478794da30d039cb3d46cae156a0ed02134d1e1 100644 (file)
@@ -11,11 +11,11 @@ var areasHidden = false;
 OpenLayers.Feature.Vector.style['default'].strokeWidth = 3;
 OpenLayers.Feature.Vector.style['default'].cursor = "pointer";
     
-function startBrowse() {
+function startBrowse(sidebarHtml) {
   map.dataLayer.active = true;
 
-  $("#sidebar_title").html("<%=j t 'browse.start_rjs.data_frame_title' %>");
-  $("#sidebar_content").html("<%=j render :partial => "sidebar" %>");
+  $("#sidebar_title").html(I18n.t('browse.start_rjs.data_frame_title'));
+  $("#sidebar_content").html(sidebarHtml);
 
   openSidebar({ onclose: stopBrowse });
 
@@ -32,22 +32,24 @@ function startBrowse() {
   browseBoxControl.handler.callbacks.done = endDrag;
   map.addControl(browseBoxControl);
 
-  map.events.register("moveend", map, showData);
+  map.events.register("moveend", map, updateData);
   map.events.triggerEvent("moveend");
 
+  $("#browse_select_view").click(useMap);
+
   $("#browse_select_box").click(startDrag);
 
-  $("#browse_hide_areas_box").html("<%=j t 'browse.start_rjs.hide_areas' %>");
+  $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
   $("#browse_hide_areas_box").show();
   $("#browse_hide_areas_box").click(hideAreas);
 }
 
-function showData() {
+function updateData() {
   if (browseMode == "auto") {
     if (map.getZoom() >= 15) {
         useMap(false);
     } else {
-        setStatus("<%=j t 'browse.start_rjs.zoom_or_select' %>");
+        setStatus(I18n.t('browse.start_rjs.zoom_or_select'));
     }    
   }
 }
@@ -77,12 +79,12 @@ function stopBrowse() {
     } 
 
     map.dataLayer.setVisibility(false);
-    map.events.unregister("moveend", map, showData);
+    map.events.unregister("moveend", map, updateData);
   }    
 }
 
 function startDrag() {
-  $("#browse_select_box").html("<%=j t 'browse.start_rjs.drag_a_box' %>");
+  $("#browse_select_box").html(I18n.t('browse.start_rjs.drag_a_box'));
 
   browseBoxControl.activate();
 
@@ -114,7 +116,7 @@ function useMap(reload) {
 }
 
 function hideAreas() {
-  $("#browse_hide_areas_box").html("<%=j t 'browse.start_rjs.show_areas' %>");
+  $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.show_areas'));
   $("#browse_hide_areas_box").show();
   $("#browse_hide_areas_box").click(showAreas);
 
@@ -124,7 +126,7 @@ function hideAreas() {
 }
 
 function showAreas() {
-  $("#browse_hide_areas_box").html("<%=j t 'browse.start_rjs.hide_areas' %>");
+  $("#browse_hide_areas_box").html(I18n.t('browse.start_rjs.hide_areas'));
   $("#browse_hide_areas_box").show();
   $("#browse_hide_areas_box").click(hideAreas);
 
@@ -133,8 +135,6 @@ function showAreas() {
   useMap(true);
 }
 
-$("#browse_select_view").click(useMap);
-
 function endDrag(bbox) {
   var bounds = bbox.getBounds();
   var projected = bounds.clone().transform(map.getProjectionObject(), epsg4326);
@@ -145,63 +145,46 @@ function endDrag(bbox) {
 
   browseMode = "manual";  
 
-  $("#browse_select_box").html("<%=j t 'browse.start_rjs.manually_select' %>");
+  $("#browse_select_box").html(I18n.t('browse.start_rjs.manually_select'));
   $("#browse_select_view").show();
 }
 
-function displayFeatureWarning() {
+function displayFeatureWarning(count, limit, callback) {
   clearStatus();
 
   var div = document.createElement("div");
 
   var p = document.createElement("p");
-  p.appendChild(document.createTextNode(i18n("<%=j t 'browse.start_rjs.loaded_an_area_with_num_features' %>", { num_features: browseFeatureList.length })));
+  p.appendChild(document.createTextNode(I18n.t("browse.start_rjs.loaded_an_area_with_num_features", { num_features: count, max_features: limit })));
   div.appendChild(p);
 
   var input = document.createElement("input");
   input.type = "submit";
-  input.value = "<%=j t 'browse.start_rjs.load_data' %>";
-  input.onclick = loadFeatureList;
+  input.value = I18n.t('browse.start_rjs.load_data');
+  input.onclick = callback;
   div.appendChild(input); 
 
   $("#browse_content").html("");
   $("#browse_content").append(div);
 }
 
-function loadFeatureList() {
-  browseDataLayer.addFeatures(browseFeatureList);
-  browseDataLayer.events.triggerEvent("loadend");
-
-  browseFeatureList = []; 
-
-  return false;
-}    
-
-function customDataLoader(request) {
-  if (this.map.dataLayer.active) {
+function customDataLoader(resp, options) {
+  if (map.dataLayer.active) {
+    var request = resp.priv;
     var doc = request.responseXML;
 
     if (!doc || !doc.documentElement) {
       doc = request.responseText;
     }
 
-    var options = {};
+    resp.features = this.format.read(doc);
 
-    OpenLayers.Util.extend(options, this.formatOptions);
-
-    if (this.map && !this.projection.equals(this.map.getProjectionObject())) {
-      options.externalProjection = this.projection;
-      options.internalProjection = this.map.getProjectionObject();
-    }    
-
-    var gml = this.format ? new this.format(options) : new OpenLayers.Format.GML(options);
-
-    browseFeatureList = gml.read(doc);
-
-    if (!this.maxFeatures || browseFeatureList.length <= this.maxFeatures) {
-      loadFeatureList();
+    if (!this.maxFeatures || resp.features.length <= this.maxFeatures) {
+      options.callback.call(options.scope, resp);
     } else {
-      displayFeatureWarning();
+      displayFeatureWarning(resp.features.length, this.maxFeatures, function () {
+        options.callback.call(options.scope, resp);
+      });
     }
   }
 }
@@ -210,15 +193,15 @@ 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 > <%= MAX_REQUEST_AREA %>) {
-    setStatus(i18n("<%=j t 'browse.start_rjs.unable_to_load_size', :max_bbox_size => MAX_REQUEST_AREA %>", { bbox_size: size }));
+  if (size > OSM.MAX_REQUEST_AREA) {
+    setStatus(I18n.t("browse.start_rjs.unable_to_load_size", { max_bbox_size: OSM.MAX_REQUEST_AREA, bbox_size: size }));
   } else {
-    loadGML("/api/<%= API_VERSION %>/map?bbox=" + projected.toBBOX(), reload);
+    loadData("/api/" + OSM.API_VERSION + "/map?bbox=" + projected.toBBOX(), reload);
   }
 }
 
-function loadGML(url, reload) {
-  setStatus("<%=j t 'browse.start_rjs.loading' %>");
+function loadData(url, reload) {
+  setStatus(I18n.t('browse.start_rjs.loading'));
 
   $("#browse_content").empty();
 
@@ -242,11 +225,27 @@ function loadGML(url, reload) {
 
     if (browseDataLayer) browseDataLayer.destroyFeatures();
 
-    browseDataLayer = new OpenLayers.Layer.GML("Data", url, {
-      format: OpenLayers.Format.OSM,
-      formatOptions: formatOptions,
-      maxFeatures: 100,
-      requestSuccess: customDataLoader,
+    var maxFeatures = 2000;
+
+    /*@cc_on
+      if (navigator.appVersion < 8) {
+        maxFeatures = 100;
+      } else if (navigator.appVersion < 9) {
+        maxFeatures = 500;
+      }
+    @*/
+
+    browseDataLayer = new OpenLayers.Layer.Vector("Data", {
+      strategies: [ 
+        new OpenLayers.Strategy.Fixed()
+      ],
+      protocol: new OpenLayers.Protocol.HTTP({
+        url: url,
+        format: new OpenLayers.Format.OSM(formatOptions),
+        maxFeatures: maxFeatures,
+        handleRead: customDataLoader
+      }),
+      projection: new OpenLayers.Projection("EPSG:4326"),
       displayInLayerSwitcher: false,
       styleMap: new OpenLayers.StyleMap({
         'default': style,
@@ -263,8 +262,7 @@ function loadGML(url, reload) {
     browseSelectControl.activate();
   } else {
     browseDataLayer.destroyFeatures();
-    browseDataLayer.format(formatOptions);
-    browseDataLayer.setUrl(url);
+    browseDataLayer.refresh({ url: url });
   }
 
   browseActiveFeature = null;
@@ -278,7 +276,7 @@ function dataLoaded() {
 
     var heading = document.createElement("p");
     heading.className = "browse_heading";
-    heading.appendChild(document.createTextNode("<%=j t 'browse.start_rjs.object_list.heading' %>"));
+    heading.appendChild(document.createTextNode(I18n.t('browse.start_rjs.object_list.heading')));
     browseObjectList.appendChild(heading);
 
     var list = document.createElement("ul");
@@ -307,8 +305,8 @@ function dataLoaded() {
     browseObjectList.appendChild(list);
 
     var link = document.createElement("a");
-    link.href = this.url;
-    link.appendChild(document.createTextNode("<%=j t 'browse.start_rjs.object_list.api' %>"));
+    link.href = this.protocol.url;
+    link.appendChild(document.createTextNode(I18n.t('browse.start_rjs.object_list.api')));
     browseObjectList.appendChild(link);
 
     $("#browse_content").html(browseObjectList); 
@@ -368,7 +366,7 @@ function onFeatureSelect(feature) {
   var link = document.createElement("a");
   link.href = "#";
   link.onclick = loadObjectList;
-  link.appendChild(document.createTextNode("<%=j t 'browse.start_rjs.object_list.back' %>"));
+  link.appendChild(document.createTextNode(I18n.t('browse.start_rjs.object_list.back')));
   div.appendChild(link);
 
   var table = document.createElement("table");
@@ -390,7 +388,7 @@ function onFeatureSelect(feature) {
   var type = featureType(feature);
   var link = document.createElement("a");   
   link.href = "/browse/" + type + "/" + feature.osm_id;
-  link.appendChild(document.createTextNode("<%=j t 'browse.start_rjs.object_list.details' %>"));
+  link.appendChild(document.createTextNode(I18n.t('browse.start_rjs.object_list.details')));
   td.appendChild(link);
 
   var div = document.createElement("div");
@@ -413,7 +411,7 @@ function onFeatureSelect(feature) {
         
   var link = document.createElement("a");   
   link.href =  "/browse/" + type + "/" + feature.osm_id + "/history";
-  link.appendChild(document.createTextNode("<%=j t 'browse.start_rjs.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
   });
@@ -426,9 +424,9 @@ function onFeatureSelect(feature) {
 
 function loadHistory() {
   this.link.href = "";
-  this.link.innerHTML = "<%=j t 'browse.start_rjs.wait' %>";
+  this.link.innerHTML = I18n.t('browse.start_rjs.wait');
 
-  $.ajax("/api/<%= API_VERSION %>/" + this.type + "/" + this.feature.osm_id + "/history", {
+  $.ajax("/api/" + OSM.API_VERSION + "/" + this.type + "/" + this.feature.osm_id + "/history", {
     complete: OpenLayers.Function.bind(displayHistory, this)
   });
 
@@ -453,7 +451,7 @@ function displayHistory(request) {
   table.appendChild(tr);
 
   var heading = document.createElement("td");
-  heading.appendChild(document.createTextNode(i18n("<%=j t 'browse.start_rjs.history_for_feature' %>", { feature: featureNameHistory(this.feature) })));
+  heading.appendChild(document.createTextNode(I18n.t("browse.start_rjs.history_for_feature", { feature: featureNameHistory(this.feature) })));
   tr.appendChild(heading);
 
   var td = document.createElement("td");
@@ -462,7 +460,7 @@ function displayHistory(request) {
 
   var link = document.createElement("a");   
   link.href = "/browse/" + this.type + "/" + this.feature.osm_id + "/history";
-  link.appendChild(document.createTextNode("<%=j t 'browse.start_rjs.details' %>"));
+  link.appendChild(document.createTextNode(I18n.t('browse.start_rjs.details')));
   td.appendChild(link);
 
   var div = document.createElement("div");
@@ -471,10 +469,10 @@ function displayHistory(request) {
   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") || "<%=j t 'browse.start_rjs.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(i18n("<%=j t 'browse.start_rjs.edited_by_user_at_timestamp' %>", { user: user, timestamp: timestamp })));
+    item.appendChild(document.createTextNode(I18n.t("browse.start_rjs.edited_by_user_at_timestamp", { user: user, timestamp: timestamp })));
     history.appendChild(item);
   }
   div.appendChild(history);
@@ -492,15 +490,16 @@ function featureType(feature) {
 
 function featureTypeName(feature) {
   if (featureType(feature) == "node") {
-    return "<%=j t 'browse.start_rjs.object_list.type.node' %>";
+    return I18n.t('browse.start_rjs.object_list.type.node');
   } else if (featureType(feature) == "way") {
-    return "<%=j t 'browse.start_rjs.object_list.type.way' %>";
+    return I18n.t('browse.start_rjs.object_list.type.way');
   }
 }
 
 function featureName(feature) {
-  if (feature.attributes['name:<%= I18n.locale %>']) {
-    return feature.attributes['name:<%= I18n.locale %>'];
+  var lang = $('html').attr('lang');
+  if (feature.attributes['name:' + lang]) {
+    return feature.attributes['name:' + lang];
   } else if (feature.attributes.name) {
     return feature.attributes.name;
   } else {
@@ -509,26 +508,28 @@ function featureName(feature) {
 }
 
 function featureNameSelect(feature) {
-  if (feature.attributes['name:<%= I18n.locale %>']) {
-    return feature.attributes['name:<%= I18n.locale %>'];
+  var lang = $('html').attr('lang');
+  if (feature.attributes['name:' + lang]) {
+    return feature.attributes['name:' + lang];
   } else if (feature.attributes.name) {
     return feature.attributes.name;
   } else if (featureType(feature) == "node") {
-    return i18n("<%=j t 'browse.start_rjs.object_list.selected.type.node' %>", { id: feature.osm_id });
+    return I18n.t("browse.start_rjs.object_list.selected.type.node", { id: feature.osm_id });
   } else if (featureType(feature) == "way") {
-    return i18n("<%=j t 'browse.start_rjs.object_list.selected.type.way' %>", { id: feature.osm_id });
+    return 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 %>'];
+  var lang = $('html').attr('lang');
+  if (feature.attributes['name:' + lang]) {
+    return feature.attributes['name:' + lang];
   } else if (feature.attributes.name) {
     return feature.attributes.name;
   } else if (featureType(feature) == "node") {
-    return i18n("<%=j t 'browse.start_rjs.object_list.history.type.node' %>", { id: feature.osm_id });
+    return I18n.t("browse.start_rjs.object_list.history.type.node", { id: feature.osm_id });
   } else if (featureType(feature) == "way") {
-    return i18n("<%=j t 'browse.start_rjs.object_list.history.type.way' %>", { id: feature.osm_id });
+    return I18n.t("browse.start_rjs.object_list.history.type.way", { id: feature.osm_id });
   }
 }
 
@@ -542,4 +543,4 @@ function clearStatus() {
   $("#browse_status").hide();
 }
 
-startBrowse();
+startBrowse("<%=j render :partial => "sidebar" %>");