browser 2.5.2 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE.md +1 -1
- data/.github/workflows/tests.yml +57 -0
- data/.gitignore +1 -0
- data/.prettierignore +1 -0
- data/.rubocop.yml +22 -107
- data/CHANGELOG.md +192 -11
- data/FUNDING.yml +3 -0
- data/Gemfile +2 -0
- data/README.md +139 -89
- data/Rakefile +11 -3
- data/bot_exceptions.yml +2 -0
- data/bots.yml +302 -247
- data/browser.gemspec +12 -7
- data/gemfiles/rails6_0.gemfile +6 -0
- data/gemfiles/rails6_1.gemfile +6 -0
- data/lib/browser/accept_language.rb +12 -9
- data/lib/browser/action_controller.rb +1 -3
- data/lib/browser/aliases.rb +5 -5
- data/lib/browser/alipay.rb +2 -2
- data/lib/browser/base.rb +101 -19
- data/lib/browser/blackberry.rb +3 -3
- data/lib/browser/bot/empty_user_agent_matcher.rb +11 -0
- data/lib/browser/bot/keyword_matcher.rb +11 -0
- data/lib/browser/bot/known_bots_matcher.rb +11 -0
- data/lib/browser/bot.rb +39 -27
- data/lib/browser/browser.rb +65 -54
- data/lib/browser/chrome.rb +18 -5
- data/lib/browser/detect_version.rb +5 -5
- data/lib/browser/device/android.rb +20 -0
- data/lib/browser/device/blackberry_playbook.rb +1 -1
- data/lib/browser/device/ipad.rb +1 -1
- data/lib/browser/device/iphone.rb +1 -1
- data/lib/browser/device/ipod_touch.rb +1 -1
- data/lib/browser/device/kindle.rb +1 -1
- data/lib/browser/device/kindle_fire.rb +1 -1
- data/lib/browser/device/playstation3.rb +1 -1
- data/lib/browser/device/playstation4.rb +1 -1
- data/lib/browser/device/psp.rb +1 -1
- data/lib/browser/device/psvita.rb +1 -1
- data/lib/browser/device/samsung.rb +33 -0
- data/lib/browser/device/surface.rb +2 -4
- data/lib/browser/device/switch.rb +19 -0
- data/lib/browser/device/tv.rb +1 -1
- data/lib/browser/device/unknown.rb +1 -1
- data/lib/browser/device/wii.rb +1 -1
- data/lib/browser/device/wiiu.rb +1 -1
- data/lib/browser/device/xbox_360.rb +1 -1
- data/lib/browser/device/xbox_one.rb +1 -1
- data/lib/browser/device.rb +47 -30
- data/lib/browser/duck_duck_go.rb +22 -0
- data/lib/browser/edge.rb +6 -2
- data/lib/browser/electron.rb +2 -2
- data/lib/browser/facebook.rb +4 -2
- data/lib/browser/firefox.rb +2 -2
- data/lib/browser/google_search_app.rb +21 -0
- data/lib/browser/huawei_browser.rb +21 -0
- data/lib/browser/instagram.rb +21 -0
- data/lib/browser/internet_explorer.rb +9 -10
- data/lib/browser/maxthon.rb +21 -0
- data/lib/browser/meta/base.rb +0 -1
- data/lib/browser/meta/generic_browser.rb +1 -3
- data/lib/browser/meta.rb +12 -13
- data/lib/browser/micro_messenger.rb +2 -2
- data/lib/browser/middleware/context/additions.rb +1 -1
- data/lib/browser/middleware.rb +4 -3
- data/lib/browser/miui_browser.rb +21 -0
- data/lib/browser/nokia.rb +2 -2
- data/lib/browser/opera.rb +2 -2
- data/lib/browser/otter.rb +2 -2
- data/lib/browser/phantom_js.rb +2 -2
- data/lib/browser/platform/adobe_air.rb +2 -2
- data/lib/browser/platform/android.rb +1 -1
- data/lib/browser/platform/base.rb +3 -2
- data/lib/browser/platform/blackberry.rb +2 -2
- data/lib/browser/platform/chrome_os.rb +1 -1
- data/lib/browser/platform/firefox_os.rb +1 -1
- data/lib/browser/platform/ios.rb +17 -4
- data/lib/browser/platform/kai_os.rb +23 -0
- data/lib/browser/platform/linux.rb +1 -1
- data/lib/browser/platform/mac.rb +5 -3
- data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
- data/lib/browser/platform/windows.rb +2 -2
- data/lib/browser/platform/windows_mobile.rb +1 -1
- data/lib/browser/platform/windows_phone.rb +1 -1
- data/lib/browser/platform.rb +37 -28
- data/lib/browser/qq.rb +5 -5
- data/lib/browser/rails.rb +11 -5
- data/lib/browser/safari.rb +19 -4
- data/lib/browser/samsung_browser.rb +21 -0
- data/lib/browser/snapchat.rb +21 -0
- data/lib/browser/sougou_browser.rb +24 -0
- data/lib/browser/sputnik.rb +21 -0
- data/lib/browser/uc_browser.rb +2 -2
- data/lib/browser/{generic.rb → unknown.rb} +6 -8
- data/lib/browser/version.rb +1 -1
- data/lib/browser/weibo.rb +2 -2
- data/lib/browser/yandex.rb +21 -0
- data/lib/browser.rb +2 -2
- data/samsung.yml +138 -0
- data/search_engines.yml +2 -2
- data/test/browser_test.rb +42 -10
- data/test/rails_test.rb +10 -0
- data/test/sample_app.rb +14 -0
- data/test/test_helper.rb +9 -1
- data/test/ua.yml +147 -109
- data/test/ua_bots.yml +98 -45
- data/test/ua_search_engines.yml +7 -6
- data/test/unit/accept_language_test.rb +24 -0
- data/test/unit/adobe_air_test.rb +1 -1
- data/test/unit/alipay_test.rb +6 -0
- data/test/unit/blackberry_test.rb +0 -6
- data/test/unit/bots_test.rb +37 -27
- data/test/unit/chrome_test.rb +8 -19
- data/test/unit/console_test.rb +2 -2
- data/test/unit/device_test.rb +60 -3
- data/test/unit/duck_duck_go_test.rb +37 -0
- data/test/unit/edge_test.rb +49 -5
- data/test/unit/facebook_test.rb +20 -0
- data/test/unit/firefox_test.rb +0 -3
- data/test/unit/google_search_app_test.rb +54 -0
- data/test/unit/huawei_browser_test.rb +25 -0
- data/test/unit/instagram_test.rb +30 -0
- data/test/unit/internet_explorer_test.rb +0 -12
- data/test/unit/ios_test.rb +7 -5
- data/test/unit/kai_os_test.rb +31 -0
- data/test/unit/kindle_test.rb +0 -2
- data/test/unit/maxthon_test.rb +25 -0
- data/test/unit/meta_test.rb +10 -2
- data/test/unit/micro_messenger_test.rb +21 -6
- data/test/unit/miui_browser_test.rb +25 -0
- data/test/unit/opera_test.rb +1 -2
- data/test/unit/platform_test.rb +34 -8
- data/test/unit/qq_test.rb +12 -0
- data/test/unit/safari_test.rb +12 -7
- data/test/unit/samsung_browser_test.rb +23 -0
- data/test/unit/snapchat_test.rb +40 -0
- data/test/unit/sougou_browser_test.rb +41 -0
- data/test/unit/sputnik_test.rb +22 -0
- data/test/unit/yandex_test.rb +37 -0
- metadata +83 -26
- data/.bundle/config +0 -2
- data/.travis.yml +0 -16
- data/bin/rake +0 -17
- data/gemfiles/rails4.gemfile +0 -4
- data/lib/browser/meta/modern.rb +0 -11
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class Device
|
|
5
|
+
class Android < Base
|
|
6
|
+
def id
|
|
7
|
+
:unknown
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def name
|
|
11
|
+
ua[/\(Linux.*?; Android.*?; ([-_a-z0-9 ]+) Build[^)]+\)/i, 1] ||
|
|
12
|
+
"Unknown"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def match?
|
|
16
|
+
ua.include?("Android")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/browser/device/ipad.rb
CHANGED
data/lib/browser/device/psp.rb
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class Device
|
|
5
|
+
class Samsung < Base
|
|
6
|
+
REGEX = /\(Linux.*?; Android.*?; (SAMSUNG )?(SM-[A-Z0-9]+).*?\)/i.freeze
|
|
7
|
+
|
|
8
|
+
def self.names
|
|
9
|
+
@names ||= YAML.load_file(Browser.root.join("samsung.yml").to_s)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def id
|
|
13
|
+
:samsung
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def name
|
|
17
|
+
"Samsung #{self.class.names[code] || code}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def code
|
|
21
|
+
matches && matches[2]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def matches
|
|
25
|
+
@matches ||= ua.match(REGEX)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def match?
|
|
29
|
+
!!matches
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/browser/device/tv.rb
CHANGED
data/lib/browser/device/wii.rb
CHANGED
data/lib/browser/device/wiiu.rb
CHANGED
data/lib/browser/device.rb
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
3
|
+
require_relative "device/base"
|
|
4
|
+
require_relative "device/android"
|
|
5
|
+
require_relative "device/unknown"
|
|
6
|
+
require_relative "device/ipad"
|
|
7
|
+
require_relative "device/ipod_touch"
|
|
8
|
+
require_relative "device/iphone"
|
|
9
|
+
require_relative "device/playstation3"
|
|
10
|
+
require_relative "device/playstation4"
|
|
11
|
+
require_relative "device/psp"
|
|
12
|
+
require_relative "device/psvita"
|
|
13
|
+
require_relative "device/kindle"
|
|
14
|
+
require_relative "device/kindle_fire"
|
|
15
|
+
require_relative "device/wii"
|
|
16
|
+
require_relative "device/wiiu"
|
|
17
|
+
require_relative "device/blackberry_playbook"
|
|
18
|
+
require_relative "device/surface"
|
|
19
|
+
require_relative "device/switch"
|
|
20
|
+
require_relative "device/tv"
|
|
21
|
+
require_relative "device/xbox_one"
|
|
22
|
+
require_relative "device/xbox_360"
|
|
23
|
+
require_relative "device/samsung"
|
|
21
24
|
|
|
22
25
|
module Browser
|
|
23
26
|
class Device
|
|
@@ -27,6 +30,7 @@ module Browser
|
|
|
27
30
|
# Order is important.
|
|
28
31
|
def self.matchers
|
|
29
32
|
@matchers ||= [
|
|
33
|
+
Samsung,
|
|
30
34
|
XboxOne,
|
|
31
35
|
Xbox360,
|
|
32
36
|
Surface,
|
|
@@ -34,6 +38,7 @@ module Browser
|
|
|
34
38
|
BlackBerryPlaybook,
|
|
35
39
|
WiiU,
|
|
36
40
|
Wii,
|
|
41
|
+
Switch,
|
|
37
42
|
KindleFire,
|
|
38
43
|
Kindle,
|
|
39
44
|
PlayStation4,
|
|
@@ -43,6 +48,7 @@ module Browser
|
|
|
43
48
|
Ipad,
|
|
44
49
|
Iphone,
|
|
45
50
|
IpodTouch,
|
|
51
|
+
Android,
|
|
46
52
|
Unknown
|
|
47
53
|
]
|
|
48
54
|
end
|
|
@@ -84,7 +90,7 @@ module Browser
|
|
|
84
90
|
end
|
|
85
91
|
|
|
86
92
|
def unknown?
|
|
87
|
-
id == :
|
|
93
|
+
id == :unknown_device
|
|
88
94
|
end
|
|
89
95
|
|
|
90
96
|
def ipod_touch?
|
|
@@ -134,6 +140,11 @@ module Browser
|
|
|
134
140
|
end
|
|
135
141
|
alias_method :wiiu?, :nintendo_wiiu?
|
|
136
142
|
|
|
143
|
+
def nintendo_switch?
|
|
144
|
+
id == :switch
|
|
145
|
+
end
|
|
146
|
+
alias_method :switch?, :nintendo_switch?
|
|
147
|
+
|
|
137
148
|
def blackberry_playbook?
|
|
138
149
|
id == :playbook
|
|
139
150
|
end
|
|
@@ -149,12 +160,12 @@ module Browser
|
|
|
149
160
|
|
|
150
161
|
# Detect if browser is Silk.
|
|
151
162
|
def silk?
|
|
152
|
-
ua
|
|
163
|
+
ua.include?("Silk")
|
|
153
164
|
end
|
|
154
165
|
|
|
155
166
|
# Detect if browser is running under Xbox.
|
|
156
167
|
def xbox?
|
|
157
|
-
ua
|
|
168
|
+
ua.include?("Xbox")
|
|
158
169
|
end
|
|
159
170
|
|
|
160
171
|
# Detect if browser is running under Xbox 360.
|
|
@@ -174,7 +185,7 @@ module Browser
|
|
|
174
185
|
|
|
175
186
|
# Detect if browser is Nintendo.
|
|
176
187
|
def nintendo?
|
|
177
|
-
wii? || wiiu?
|
|
188
|
+
wii? || wiiu? || switch?
|
|
178
189
|
end
|
|
179
190
|
|
|
180
191
|
# Detect if browser is console (currently Xbox, PlayStation, or Nintendo).
|
|
@@ -182,20 +193,26 @@ module Browser
|
|
|
182
193
|
xbox? || playstation? || nintendo?
|
|
183
194
|
end
|
|
184
195
|
|
|
185
|
-
|
|
196
|
+
# Detect if device is a Samsung.
|
|
197
|
+
def samsung?
|
|
198
|
+
id == :samsung
|
|
199
|
+
end
|
|
186
200
|
|
|
187
201
|
# Regex taken from http://detectmobilebrowsers.com
|
|
188
|
-
# rubocop:disable
|
|
189
|
-
def detect_mobile?
|
|
202
|
+
# rubocop:disable Layout/LineLength
|
|
203
|
+
private def detect_mobile?
|
|
190
204
|
psp? ||
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
205
|
+
/zunewp7/i.match?(ua) ||
|
|
206
|
+
%r{(android|bb\d+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino}i.match(ua) ||
|
|
207
|
+
%r{1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-}i.match?(ua[0..3])
|
|
194
208
|
end
|
|
195
|
-
# rubocop:enable
|
|
209
|
+
# rubocop:enable Layout/LineLength
|
|
196
210
|
|
|
197
|
-
def platform
|
|
211
|
+
private def platform
|
|
198
212
|
@platform ||= Platform.new(ua)
|
|
199
213
|
end
|
|
214
|
+
|
|
215
|
+
private :subject
|
|
216
|
+
private :ua
|
|
200
217
|
end
|
|
201
218
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class DuckDuckGo < Base
|
|
5
|
+
def id
|
|
6
|
+
:duckduckgo
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"DuckDuckGo"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def full_version
|
|
14
|
+
ua[%r{DuckDuckGo/([\d.]+)}, 1] ||
|
|
15
|
+
"0.0"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def match?
|
|
19
|
+
ua.include?("DuckDuckGo")
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/browser/edge.rb
CHANGED
|
@@ -11,11 +11,15 @@ module Browser
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def full_version
|
|
14
|
-
ua[%r
|
|
14
|
+
ua[%r{(?:Edge|Edg|EdgiOS|EdgA)/([\d.]+)}, 1] || super
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def match?
|
|
18
|
-
ua
|
|
18
|
+
ua.match?(%r{((?:Edge|Edg|EdgiOS|EdgA)/[\d.]+|Trident/8)})
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def chrome_based?
|
|
22
|
+
match? && ua.match?(/\bEdg\b/)
|
|
19
23
|
end
|
|
20
24
|
end
|
|
21
25
|
end
|
data/lib/browser/electron.rb
CHANGED
data/lib/browser/facebook.rb
CHANGED
data/lib/browser/firefox.rb
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class GoogleSearchApp < Chrome
|
|
5
|
+
def id
|
|
6
|
+
:google_search_app
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"Google Search App"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def full_version
|
|
14
|
+
ua[%r{GSA/([\d.]+\d)}, 1] || super
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def match?
|
|
18
|
+
ua.include?("GSA")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class HuaweiBrowser < Base
|
|
5
|
+
def id
|
|
6
|
+
:huawei_browser
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"Huawei Browser"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def full_version
|
|
14
|
+
ua[%r{(?:HuaweiBrowser)/([\d.]+)}i, 1] || "0.0"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def match?
|
|
18
|
+
ua.match?(/HuaweiBrowser/i)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class Instagram < Base
|
|
5
|
+
def id
|
|
6
|
+
:instagram
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"Instagram"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def full_version
|
|
14
|
+
ua[%r{Instagram[ /]([\d.]+)}, 1] || "0.0"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def match?
|
|
18
|
+
ua.include?("Instagram")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -24,7 +24,8 @@ module Browser
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def msie_full_version
|
|
27
|
-
(ua.match(%r{MSIE ([\d.]+)|Trident/.*?; rv:([\d.]+)}) &&
|
|
27
|
+
(ua.match(%r{MSIE ([\d.]+)|Trident/.*?; rv:([\d.]+)}) &&
|
|
28
|
+
(Regexp.last_match(1) || Regexp.last_match(2))) ||
|
|
28
29
|
"0.0"
|
|
29
30
|
end
|
|
30
31
|
|
|
@@ -41,23 +42,21 @@ module Browser
|
|
|
41
42
|
trident_version && msie_version.to_i < (trident_version.to_i + 4)
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def ie_version
|
|
45
|
+
private def ie_version
|
|
47
46
|
TRIDENT_MAPPING[trident_version] || msie_version
|
|
48
47
|
end
|
|
49
48
|
|
|
50
49
|
# Return the trident version.
|
|
51
|
-
def trident_version
|
|
52
|
-
ua.match(%r
|
|
50
|
+
private def trident_version
|
|
51
|
+
ua.match(%r{Trident/([0-9.]+)}) && Regexp.last_match(1)
|
|
53
52
|
end
|
|
54
53
|
|
|
55
|
-
def msie?
|
|
56
|
-
ua
|
|
54
|
+
private def msie?
|
|
55
|
+
ua.include?("MSIE") && !ua.include?("Opera")
|
|
57
56
|
end
|
|
58
57
|
|
|
59
|
-
def modern_ie?
|
|
60
|
-
ua
|
|
58
|
+
private def modern_ie?
|
|
59
|
+
ua.match?(%r{Trident/.*?; rv:(.*?)})
|
|
61
60
|
end
|
|
62
61
|
end
|
|
63
62
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Browser
|
|
4
|
+
class Maxthon < Base
|
|
5
|
+
def id
|
|
6
|
+
:maxthon
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def name
|
|
10
|
+
"Maxthon"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def full_version
|
|
14
|
+
ua[%r{(?:Maxthon)/([\d.]+)}i, 1] || "0.0"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def match?
|
|
18
|
+
ua.match?(/Maxthon/i)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/browser/meta/base.rb
CHANGED