X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/1862389e6b3898a8ba330fcbde85b7e32b6a9cc1..2feff4244f349837c0b32e09c7ab6276840207fb:/app/views/browse/start.js.erb diff --git a/app/views/browse/start.js.erb b/app/views/browse/start.js.erb index d427ddbaf..6478794da 100644 --- a/app/views/browse/start.js.erb +++ b/app/views/browse/start.js.erb @@ -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" %>");