Use browser detection to decide how many features to show
authorTom Hughes <tom@compton.nu>
Tue, 5 Jun 2012 11:59:13 +0000 (12:59 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 5 Jun 2012 11:59:13 +0000 (12:59 +0100)
Modern browsers are quite happy showing far more than 100 features in
the data browser, so increase the limit to 2000 by default, but keep it
restricted to 500 for IE8 and 100 for older IEs.

Gemfile
Gemfile.lock
app/controllers/browse_controller.rb
app/views/browse/start.js.erb

diff --git a/Gemfile b/Gemfile
index 10f38eb3865f2d9045ec596a0dc17733e1a10caa..5ddb27e47337339afc6cc2be0e5d7ecff7e49dad 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -25,6 +25,9 @@ gem 'http_accept_language', '>= 1.0.2'
 gem 'paperclip', '~> 2.0'
 gem 'deadlock_retry', '>= 1.2.0'
 
+# Browser detection support
+gem 'browser'
+
 # Markdown formatting support
 gem 'redcarpet'
 
index ed69bc8ad901d578b52fe844c78035786c94e2eb..8b79766507c417c8987baa43ec8323573aea4c0a 100644 (file)
@@ -31,6 +31,7 @@ GEM
       multi_json (~> 1.0)
     arel (3.0.2)
     bigdecimal (1.1.0)
+    browser (0.1.3)
     builder (3.0.0)
     cocaine (0.2.1)
     coffee-rails (3.2.2)
@@ -157,6 +158,7 @@ PLATFORMS
 DEPENDENCIES
   SystemTimer (>= 1.1.3)
   bigdecimal
+  browser
   coffee-rails (~> 3.2.1)
   composite_primary_keys (= 5.0.4)
   deadlock_retry (>= 1.2.0)
index 2a7e2c5f70ed74c09ee1c0abef9c127461bffd65..f423c6388753ddd80bc65e802d7e4a288640bac6 100644 (file)
@@ -7,6 +7,11 @@ class BrowseController < ApplicationController
   around_filter :web_timeout, :except => [:start]
 
   def start 
+    @max_features = case
+                    when browser.ie? && browser.version.to_i < 8 then 100
+                    when browser.ie? && browser.version.to_i < 9 then 500
+                    else 2000
+                    end
   end
   
   def relation
index 9513652689646e93ad6d149c0ab3a51499aea110..6831f6f6d97ee675418cca7a5b85e55f13c9a03e 100644 (file)
@@ -245,7 +245,7 @@ function loadGML(url, reload) {
     browseDataLayer = new OpenLayers.Layer.GML("Data", url, {
       format: OpenLayers.Format.OSM,
       formatOptions: formatOptions,
-      maxFeatures: 100,
+      maxFeatures: <%= @max_features %>,
       requestSuccess: customDataLoader,
       displayInLayerSwitcher: false,
       styleMap: new OpenLayers.StyleMap({