From: Tom Hughes Date: Fri, 18 Apr 2008 22:12:50 +0000 (+0000) Subject: Rework AJAX stuff to work on IE. X-Git-Tag: live~7850^2~6 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/8815700a773665fe861c1bdc5543948de1148829 Rework AJAX stuff to work on IE. --- diff --git a/app/controllers/export_controller.rb b/app/controllers/export_controller.rb index b1d992e6d..a773d4b72 100644 --- a/app/controllers/export_controller.rb +++ b/app/controllers/export_controller.rb @@ -1,9 +1,5 @@ class ExportController < ApplicationController def start - render :update do |page| - page.replace_html :sidebar_title, 'Export' - page.replace_html :sidebar_content, :partial => 'start' - end end def finish diff --git a/app/views/export/_start.rhtml b/app/views/export/_start.rhtml index 3e6beaf55..501274b46 100644 --- a/app/views/export/_start.rhtml +++ b/app/views/export/_start.rhtml @@ -57,195 +57,3 @@ <% end %> - - diff --git a/app/views/export/start.rjs b/app/views/export/start.rjs new file mode 100644 index 000000000..4323cf7f4 --- /dev/null +++ b/app/views/export/start.rjs @@ -0,0 +1,191 @@ +page.replace_html :sidebar_title, 'Export' +page.replace_html :sidebar_content, :partial => 'start' +page << < 0.25) { + $("format_osm").disabled = true; + $("format_osm").checked = false; + + formatChanged(); + } else { + $("format_osm").disabled = false; + } + + var max_zoom = maxOsmarenderZoom(); + var max_scale = maxMapnikScale(); + + $("max_scale").innerHTML = roundScale(max_scale); + + for (var o = 0; o < $("osmarender_zoom").options.length; o++) { + var option = $("osmarender_zoom").options[o]; + + if (option.value > max_zoom) { + option.disabled = true; + } else { + option.disabled = false; + } + } + + if ($("osmarender_zoom").options.selectedIndex + 4 > max_zoom) { + $("osmarender_zoom").options.selectedIndex = max_zoom - 4; + } + } + + function maxMapnikScale() { + var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); + var epsg4326 = new OpenLayers.Projection("EPSG:4326"); + var epsg900913 = new OpenLayers.Projection("EPSG:900913"); + + bounds.transform(epsg4326, epsg900913); + + return Math.floor(Math.sqrt(bounds.getWidth() * bounds.getHeight() / 0.3136)); + } + + function maxOsmarenderZoom() { + var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value); + var xzoom = Math.LOG2E * Math.log(2000 * 1.40625 / bounds.getWidth()); + var ymin = bounds.bottom * Math.PI / 180; + var ymax = bounds.top * Math.PI / 180; + var yzoom = Math.LOG2E * (Math.log(2000 * 2 * Math.PI) - Math.log(Math.log((Math.tan(ymax) + 1 / Math.cos(ymax)) / (Math.tan(ymin) + 1 / Math.cos(ymin))))) + + return Math.floor(Math.min(xzoom, yzoom)); + } + + function roundScale(scale) { + var precision = 5 * Math.pow(10, Math.floor(Math.LOG10E * Math.log(scale)) - 2); + + return precision * Math.ceil(scale / precision); + } + + function validateScale() { + if ($("mapnik_scale").value < maxMapnikScale()) { + $("export_commit").disabled = true; + } else { + $("export_commit").disabled = false; + } + } + + $("mapnik_scale").onchange = validateScale; + + startExport(); +EOJ