discourse/lib/mobile_detection.rb
Penar Musaraj 07e5f8907e
DEV: Consolidate mobile positioning strategies on mobile and iPad (#30241)
This removes some longstanding Safari iOS positioning hacks and refactors the mobile positioning strategy across Safari, Chrome and Firefox. See PR descriptions for more details. 

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2025-01-10 11:00:15 -05:00

41 lines
1.0 KiB
Ruby

# frozen_string_literal: true
module MobileDetection
def self.mobile_device?(user_agent)
user_agent =~ /Mobile/ && !(user_agent =~ /iPad/)
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
session[:mobile_view] = params[:mobile_view] if params && params.has_key?(:mobile_view)
session[:mobile_view] = nil if params && params.has_key?(:mobile_view) &&
params[:mobile_view] == "auto"
if session && session[:mobile_view]
session[:mobile_view] == "1"
else
mobile_device?(user_agent)
end
end
MODERN_MOBILE_REGEX =
%r{
\(.*iPhone\ OS\ 1[5-9].*\)|
\(.*iPad.*OS\ 1[5-9].*\)|
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
USER_AGENT_MAX_LENGTH = 400
def self.modern_mobile_device?(user_agent)
user_agent[0...USER_AGENT_MAX_LENGTH].match?(MODERN_MOBILE_REGEX)
end
end