Add enable_mobile_theme site setting. Uncheck it to disable the mobile theme.

This commit is contained in:
Neil Lalonde 2013-09-17 11:25:22 -04:00
parent 2baf5fda8e
commit 0fafe124db
6 changed files with 74 additions and 29 deletions

View File

@ -32,6 +32,10 @@ Discourse.HeaderController = Discourse.Controller.extend({
return Discourse.Mobile.mobileView; return Discourse.Mobile.mobileView;
}.property(), }.property(),
showMobileToggle: function() {
return Discourse.SiteSettings.enable_mobile_theme;
}.property(),
toggleMobileView: function() { toggleMobileView: function() {
Discourse.Mobile.toggleMobileView(); Discourse.Mobile.toggleMobileView();
} }

View File

@ -123,15 +123,17 @@
{{#titledLinkTo "list.latest" titleKey="filters.latest.help"}}{{i18n filters.latest.title}}{{/titledLinkTo}} {{#titledLinkTo "list.latest" titleKey="filters.latest.help"}}{{i18n filters.latest.title}}{{/titledLinkTo}}
</li> </li>
<li>{{faqLink}}</li> <li>{{faqLink}}</li>
<li> {{#if showMobileToggle}}
<a href="#" {{action toggleMobileView}}> <li>
{{#if mobileView}} <a href="#" {{action toggleMobileView}}>
{{i18n desktop_view}} {{#if mobileView}}
{{else}} {{i18n desktop_view}}
{{i18n mobile_view}} {{else}}
{{/if}} {{i18n mobile_view}}
</a> {{/if}}
</li> </a>
</li>
{{/if}}
</ul> </ul>
{{#if categories}} {{#if categories}}

View File

@ -109,6 +109,7 @@ module ApplicationHelper
end end
def mobile_view? def mobile_view?
return false unless SiteSetting.enable_mobile_theme
if session[:mobile_view] if session[:mobile_view]
session[:mobile_view] == '1' session[:mobile_view] == '1'
else else

View File

@ -261,6 +261,8 @@ class SiteSetting < ActiveRecord::Base
setting(:sequential_replies_threshold, 2) setting(:sequential_replies_threshold, 2)
client_setting(:enable_mobile_theme, true)
def self.generate_api_key! def self.generate_api_key!
self.api_key = SecureRandom.hex(32) self.api_key = SecureRandom.hex(32)
end end

View File

@ -696,6 +696,8 @@ en:
sequential_replies_threshold: "The amount of posts a user has to make in a row in a topic before being notified" sequential_replies_threshold: "The amount of posts a user has to make in a row in a topic before being notified"
enable_mobile_theme: "Mobile devices use a mobile-friendly theme, with the ability to switch to the full site. Disable this if you want to use a custom stylesheet that is fully responsive."
notification_types: notification_types:
mentioned: "%{display_username} mentioned you in %{link}" mentioned: "%{display_username} mentioned you in %{link}"
liked: "%{display_username} liked your post in %{link}" liked: "%{display_username} liked your post in %{link}"

View File

@ -3,36 +3,70 @@ require 'spec_helper'
describe ApplicationHelper do describe ApplicationHelper do
describe 'mobile_view?' do describe 'mobile_view?' do
it "is true if mobile_view is '1' in the session" do context "enable_mobile_theme is true" do
session[:mobile_view] = '1' before do
helper.mobile_view?.should be_true SiteSetting.stubs(:enable_mobile_theme).returns(true)
end
it "is false if mobile_view is '0' in the session" do
session[:mobile_view] = '0'
helper.mobile_view?.should be_false
end
context "mobile_view is not set" do
it "is false if user agent is not mobile" do
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
helper.mobile_view?.should be_false
end end
it "is true for iPhone" do it "is true if mobile_view is '1' in the session" do
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5') session[:mobile_view] = '1'
helper.mobile_view?.should be_true helper.mobile_view?.should be_true
end end
it "is false for iPad" do it "is false if mobile_view is '0' in the session" do
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3") session[:mobile_view] = '0'
helper.mobile_view?.should be_false helper.mobile_view?.should be_false
end end
it "is false for Android tablet" do context "mobile_view is not set" do
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19") it "is false if user agent is not mobile" do
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
helper.mobile_view?.should be_false
end
it "is true for iPhone" do
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5')
helper.mobile_view?.should be_true
end
it "is false for iPad" do
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3")
helper.mobile_view?.should be_false
end
it "is false for Android tablet" do
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19")
helper.mobile_view?.should be_false
end
end
end
context "enable_mobile_theme is false" do
before do
SiteSetting.stubs(:enable_mobile_theme).returns(false)
end
it "is false if mobile_view is '1' in the session" do
session[:mobile_view] = '1'
helper.mobile_view?.should be_false helper.mobile_view?.should be_false
end end
it "is false if mobile_view is '0' in the session" do
session[:mobile_view] = '0'
helper.mobile_view?.should be_false
end
context "mobile_view is not set" do
it "is false if user agent is not mobile" do
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
helper.mobile_view?.should be_false
end
it "is false for iPhone" do
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5')
helper.mobile_view?.should be_false
end
end
end end
end end