2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2014-01-09 11:08:42 +08:00
|
|
|
module MobileDetection
|
|
|
|
def self.mobile_device?(user_agent)
|
2016-03-26 17:02:23 +08:00
|
|
|
user_agent =~ /Mobile/ && !(user_agent =~ /iPad/)
|
2014-01-09 11:08:42 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
# we need this as a reusable chunk that is called from the cache
|
|
|
|
def self.resolve_mobile_view!(user_agent, params, session)
|
|
|
|
return false unless SiteSetting.enable_mobile_theme
|
|
|
|
|
2014-01-17 10:07:17 +08:00
|
|
|
session[:mobile_view] = params[:mobile_view] if params && params.has_key?(:mobile_view)
|
2019-02-23 02:43:40 +08:00
|
|
|
session[:mobile_view] = nil if params && params.has_key?(:mobile_view) &&
|
|
|
|
params[:mobile_view] == "auto"
|
2014-01-09 11:08:42 +08:00
|
|
|
|
2014-01-17 12:04:38 +08:00
|
|
|
if session && session[:mobile_view]
|
2014-01-09 11:08:42 +08:00
|
|
|
session[:mobile_view] == "1"
|
|
|
|
else
|
|
|
|
mobile_device?(user_agent)
|
|
|
|
end
|
|
|
|
end
|
2019-05-07 22:44:43 +08:00
|
|
|
|
|
|
|
def self.ios_device?(user_agent)
|
|
|
|
user_agent =~ /iPad|iPhone|iPod/
|
|
|
|
end
|
|
|
|
|
2022-04-06 18:09:12 +08:00
|
|
|
MODERN_MOBILE_REGEX =
|
|
|
|
%r{
|
2023-01-17 01:28:59 +08:00
|
|
|
\(.*iPhone\ OS\ 1[5-9].*\)|
|
|
|
|
\(.*iPad.*OS\ 1[5-9].*\)|
|
2022-04-06 18:09:12 +08:00
|
|
|
Chrome\/8[89]|
|
|
|
|
Chrome\/9[0-9]|
|
|
|
|
Chrome\/1[0-9][0-9]|
|
|
|
|
Firefox\/8[5-9]|
|
|
|
|
Firefox\/9[0-9]|
|
|
|
|
Firefox\/1[0-9][0-9]
|
|
|
|
}x
|
|
|
|
|
2023-01-26 00:55:33 +08:00
|
|
|
USER_AGENT_MAX_LENGTH = 400
|
|
|
|
|
2022-04-06 18:09:12 +08:00
|
|
|
def self.modern_mobile_device?(user_agent)
|
2023-01-26 00:55:33 +08:00
|
|
|
user_agent[0...USER_AGENT_MAX_LENGTH].match?(MODERN_MOBILE_REGEX)
|
2022-04-06 18:09:12 +08:00
|
|
|
end
|
2014-01-09 11:08:42 +08:00
|
|
|
end
|