diff --git a/gollum.gemspec b/gollum.gemspec index 86751793..cd03bc2c 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -32,6 +32,7 @@ Gem::Specification.new do |s| s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) s.add_dependency('sanitize', "~> 2.0.0") s.add_dependency('nokogiri', "~> 1.4") + s.add_dependency('useragent', "~> 0.4.9") s.add_development_dependency('RedCloth') s.add_development_dependency('mocha') diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index ff41b692..d2261355 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -2,6 +2,7 @@ require 'cgi' require 'sinatra' require 'gollum' require 'mustache/sinatra' +require 'useragent' require 'gollum/frontend/views/layout' require 'gollum/frontend/views/editable' @@ -25,6 +26,14 @@ module Precious dir = File.dirname(File.expand_path(__FILE__)) + # Detect unsupported browsers. + @@supported_browsers = ['Firefox', 'Chrome', 'Safari'] + + def supported_useragent?( user_agent ) + browser = UserAgent.parse( user_agent ).browser + @@supported_browsers.include? browser + end + # We want to serve public assets for now set :public_folder, "#{dir}/public/gollum" set :static, true @@ -67,7 +76,7 @@ module Precious @name = params[:splat].first wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) if page = wiki.page(@name) - if page.format.to_s.include?('markdown') + if page.format.to_s.include?('markdown') && supported_useragent?(request.user_agent) redirect '/livepreview/index.html?page=' + encodeURIComponent(@name) else @page = page