webfontloader 1.4.2 → 1.4.3
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.
- data/CHANGELOG +3 -0
- data/lib/webfontloader.rb +1 -1
- data/spec/core/useragentparser_spec.js +204 -183
- data/spec/core/version_spec.js +143 -0
- data/spec/deps.js +2 -1
- data/spec/index.html +1 -0
- data/src/core/useragent.js +6 -6
- data/src/core/useragentparser.js +93 -149
- data/src/core/version.js +180 -0
- data/src/modules.yml +1 -0
- data/webfontloader.gemspec +4 -2
- metadata +6 -4
@@ -0,0 +1,143 @@
|
|
1
|
+
describe('Version', function () {
|
2
|
+
var Version = webfont.Version;
|
3
|
+
|
4
|
+
describe('parse', function () {
|
5
|
+
it('should ignore non versions', function () {
|
6
|
+
expect(Version.parse('abcedf')).toEqual(new Version());
|
7
|
+
expect(Version.parse('...')).toEqual(new Version());
|
8
|
+
expect(Version.parse('Unknown')).toEqual(new Version());
|
9
|
+
});
|
10
|
+
|
11
|
+
it('should parse single digit versions', function () {
|
12
|
+
expect(Version.parse('0')).toEqual(new Version(0));
|
13
|
+
expect(Version.parse('1')).toEqual(new Version(1));
|
14
|
+
});
|
15
|
+
|
16
|
+
it('should parse two digit versions', function () {
|
17
|
+
expect(Version.parse('1.0')).toEqual(new Version(1, 0));
|
18
|
+
expect(Version.parse('12.9')).toEqual(new Version(12, 9));
|
19
|
+
});
|
20
|
+
|
21
|
+
it('should parse three digit versions', function () {
|
22
|
+
expect(Version.parse('1.2.5')).toEqual(new Version(1, 2, 5));
|
23
|
+
expect(Version.parse('10.0.2')).toEqual(new Version(10, 0, 2));
|
24
|
+
});
|
25
|
+
|
26
|
+
it('should accept alternate separators', function () {
|
27
|
+
expect(Version.parse('10_8_2')).toEqual(new Version(10, 8, 2));
|
28
|
+
expect(Version.parse('5-46-2')).toEqual(new Version(5, 46, 2));
|
29
|
+
});
|
30
|
+
|
31
|
+
it('should accept build strings', function () {
|
32
|
+
expect(Version.parse('1.3.5+alpha')).toEqual(new Version(1, 3, 5, 'alpha'));
|
33
|
+
expect(Version.parse('1.3.5-askdsj')).toEqual(new Version(1, 3, 5, 'askdsj'));
|
34
|
+
});
|
35
|
+
|
36
|
+
it('should parse real version strings', function () {
|
37
|
+
expect(Version.parse('5.0')).toEqual(new Version(5, 0));
|
38
|
+
expect(Version.parse('531.9')).toEqual(new Version(531, 9));
|
39
|
+
expect(Version.parse('1.9.2.3')).toEqual(new Version(1, 9, 2, 3));
|
40
|
+
expect(Version.parse('3.6.3')).toEqual(new Version(3, 6, 3));
|
41
|
+
expect(Version.parse('1.9.2a1pre')).toEqual(new Version(1, 9, 2, 'a1pre'));
|
42
|
+
expect(Version.parse('3.6a1pre')).toEqual(new Version(3, 6, null, 'a1pre'));
|
43
|
+
expect(Version.parse('2.0b1')).toEqual(new Version(2, 0, null, 'b1'));
|
44
|
+
expect(Version.parse('5.0.342.9')).toEqual(new Version(5, 0, 342, 9));
|
45
|
+
expect(Version.parse('10_5_8')).toEqual(new Version(10, 5, 8));
|
46
|
+
expect(Version.parse('18.0.1025.46')).toEqual(new Version(18, 0, 1025, 46));
|
47
|
+
expect(Version.parse('4.0dp1')).toEqual(new Version(4, 0, null, 'dp1'));
|
48
|
+
expect(Version.parse('528.4+')).toEqual(new Version(528, 4));
|
49
|
+
expect(Version.parse('2.1-update1')).toEqual(new Version(2, 1, null, 'update1'));
|
50
|
+
expect(Version.parse('10.0.22.79_1003310')).toEqual(new Version(10, 0, 22, '79_1003310'));
|
51
|
+
expect(Version.parse('1.b')).toEqual(new Version(1, null, null, 'b'));
|
52
|
+
expect(Version.parse('0.10.1')).toEqual(new Version(0, 10, 1));
|
53
|
+
});
|
54
|
+
});
|
55
|
+
|
56
|
+
describe('#compare', function () {
|
57
|
+
it('should return zero when two versions are equal', function () {
|
58
|
+
expect(new Version(1, 2, 3).compare(new Version(1, 2, 3))).toEqual(0);
|
59
|
+
});
|
60
|
+
|
61
|
+
it('should return one when one version is greater', function () {
|
62
|
+
expect(new Version(1, 2, 3).compare(new Version(0, 1, 3))).toEqual(1);
|
63
|
+
expect(new Version(1, 2, 3).compare(new Version(1, 2, 2))).toEqual(1);
|
64
|
+
expect(new Version(1, 2, 3).compare(new Version(1, 1, 3))).toEqual(1);
|
65
|
+
});
|
66
|
+
|
67
|
+
it('should return minus one when one version is smaller', function () {
|
68
|
+
expect(new Version(1, 2, 3).compare(new Version(1, 2, 4))).toEqual(-1);
|
69
|
+
expect(new Version(1, 2, 3).compare(new Version(1, 3, 3))).toEqual(-1);
|
70
|
+
expect(new Version(1, 2, 3).compare(new Version(2, 2, 3))).toEqual(-1);
|
71
|
+
});
|
72
|
+
});
|
73
|
+
|
74
|
+
describe('#eq', function () {
|
75
|
+
it('should return true when two versions are equal', function () {
|
76
|
+
expect(new Version(1, 2, 3).eq(new Version(1, 2, 3))).toBe(true);
|
77
|
+
});
|
78
|
+
|
79
|
+
it('should return false when two versions are unequal', function () {
|
80
|
+
expect(new Version(3, 2, 1).eq(new Version(1, 2, 3))).toBe(false);
|
81
|
+
});
|
82
|
+
});
|
83
|
+
|
84
|
+
describe('#gt', function () {
|
85
|
+
it('should return true when one version is greater than another', function () {
|
86
|
+
expect(new Version(3, 2, 1).gt(new Version(1, 2, 3))).toBe(true);
|
87
|
+
});
|
88
|
+
|
89
|
+
it('should return false when one version is not greater than another', function () {
|
90
|
+
expect(new Version(1, 2, 3).gt(new Version(3, 2, 1))).toBe(false)
|
91
|
+
});
|
92
|
+
});
|
93
|
+
|
94
|
+
describe('#ge', function () {
|
95
|
+
it('should return true when one version is greater than another', function () {
|
96
|
+
expect(new Version(3, 2, 1).ge(new Version(1, 2, 3))).toBe(true);
|
97
|
+
});
|
98
|
+
|
99
|
+
it('should return false when one version is not greater than another', function () {
|
100
|
+
expect(new Version(1, 2, 3).ge(new Version(3, 2, 1))).toBe(false)
|
101
|
+
});
|
102
|
+
|
103
|
+
it('should return true when one version is equal to another', function () {
|
104
|
+
expect(new Version(1, 2, 3).ge(new Version(1, 2, 3))).toBe(true);
|
105
|
+
});
|
106
|
+
});
|
107
|
+
|
108
|
+
describe('#lt', function () {
|
109
|
+
it('should return true when one version is less than another', function () {
|
110
|
+
expect(new Version(1, 2, 3).lt(new Version(3, 2, 1))).toBe(true);
|
111
|
+
});
|
112
|
+
|
113
|
+
it('should return false when one version is not less than another', function () {
|
114
|
+
expect(new Version(3, 2, 1).lt(new Version(1, 2, 3))).toBe(false)
|
115
|
+
});
|
116
|
+
});
|
117
|
+
|
118
|
+
describe('#le', function () {
|
119
|
+
it('should return true when one version is less than another', function () {
|
120
|
+
expect(new Version(1, 2, 3).le(new Version(3, 2, 1))).toBe(true);
|
121
|
+
});
|
122
|
+
|
123
|
+
it('should return false when one version is not less than another', function () {
|
124
|
+
expect(new Version(3, 2, 1).le(new Version(1, 2, 3))).toBe(false)
|
125
|
+
});
|
126
|
+
|
127
|
+
it('should return true when one version is equal to another', function () {
|
128
|
+
expect(new Version(1, 2, 3).le(new Version(1, 2, 3))).toBe(true);
|
129
|
+
});
|
130
|
+
});
|
131
|
+
|
132
|
+
describe('#isValid', function () {
|
133
|
+
it('should return true when the version is valid', function () {
|
134
|
+
expect(new Version(1).isValid()).toBe(true);
|
135
|
+
expect(new Version(1, 2).isValid()).toBe(true);
|
136
|
+
});
|
137
|
+
|
138
|
+
it('should return false when the version is not valid', function () {
|
139
|
+
expect(new Version().isValid()).toBe(false);
|
140
|
+
expect(new Version(null, 1).isValid()).toBe(false);
|
141
|
+
});
|
142
|
+
});
|
143
|
+
});
|
data/spec/deps.js
CHANGED
@@ -14,7 +14,8 @@ goog.addDependency("../../src/core/fontwatchrunner.js", ["webfont.FontWatchRunne
|
|
14
14
|
goog.addDependency("../../src/core/initialize.js", ["webfont"], ["webfont.UserAgentParser","webfont.FontModuleLoader","webfont.WebFont"]);
|
15
15
|
goog.addDependency("../../src/core/namespace.js", [], []);
|
16
16
|
goog.addDependency("../../src/core/useragent.js", ["webfont.UserAgent"], []);
|
17
|
-
goog.addDependency("../../src/core/useragentparser.js", ["webfont.UserAgentParser"], ["webfont.BrowserInfo","webfont.UserAgent"]);
|
17
|
+
goog.addDependency("../../src/core/useragentparser.js", ["webfont.UserAgentParser"], ["webfont.BrowserInfo","webfont.UserAgent","webfont.Version"]);
|
18
|
+
goog.addDependency("../../src/core/version.js", ["webfont.Version"], []);
|
18
19
|
goog.addDependency("../../src/core/webfont.js", ["webfont.WebFont"], ["webfont.DomHelper","webfont.EventDispatcher","webfont.FontWatcher"]);
|
19
20
|
goog.addDependency("../../src/custom/customcss.js", ["webfont.CustomCss"], ["webfont.Font"]);
|
20
21
|
goog.addDependency("../../src/fontdeck/fontdeck_script.js", ["webfont.FontdeckScript"], ["webfont.Font"]);
|
data/spec/index.html
CHANGED
@@ -43,6 +43,7 @@
|
|
43
43
|
<script src="../spec/core/fontwatchrunner_spec.js"></script>
|
44
44
|
<script src="../spec/core/fontwatcher_spec.js"></script>
|
45
45
|
<script src="../spec/core/webfont_spec.js"></script>
|
46
|
+
<script src="../spec/core/version_spec.js"></script>
|
46
47
|
<script src="../spec/google/fontapiparser_spec.js"></script>
|
47
48
|
<script src="../spec/google/fontapiurlbuilder_spec.js"></script>
|
48
49
|
<script src="../spec/google/googlefontapi_spec.js"></script>
|
data/src/core/useragent.js
CHANGED
@@ -3,11 +3,11 @@ goog.provide('webfont.UserAgent');
|
|
3
3
|
/**
|
4
4
|
* @export
|
5
5
|
* @param {string} name
|
6
|
-
* @param {
|
6
|
+
* @param {webfont.Version} version
|
7
7
|
* @param {string} engine
|
8
|
-
* @param {
|
8
|
+
* @param {webfont.Version} engineVersion
|
9
9
|
* @param {string} platform
|
10
|
-
* @param {
|
10
|
+
* @param {webfont.Version} platformVersion
|
11
11
|
* @param {number|undefined} documentMode
|
12
12
|
* @param {!webfont.BrowserInfo} browserInfo
|
13
13
|
* @constructor
|
@@ -37,7 +37,7 @@ goog.scope(function () {
|
|
37
37
|
|
38
38
|
/**
|
39
39
|
* @export
|
40
|
-
* @return {
|
40
|
+
* @return {webfont.Version}
|
41
41
|
*/
|
42
42
|
UserAgent.prototype.getVersion = function() {
|
43
43
|
return this.version_;
|
@@ -53,7 +53,7 @@ goog.scope(function () {
|
|
53
53
|
|
54
54
|
/**
|
55
55
|
* @export
|
56
|
-
* @return {
|
56
|
+
* @return {webfont.Version}
|
57
57
|
*/
|
58
58
|
UserAgent.prototype.getEngineVersion = function() {
|
59
59
|
return this.engineVersion_;
|
@@ -69,7 +69,7 @@ goog.scope(function () {
|
|
69
69
|
|
70
70
|
/**
|
71
71
|
* @export
|
72
|
-
* @return {
|
72
|
+
* @return {webfont.Version}
|
73
73
|
*/
|
74
74
|
UserAgent.prototype.getPlatformVersion = function() {
|
75
75
|
return this.platformVersion_;
|
data/src/core/useragentparser.js
CHANGED
@@ -2,6 +2,7 @@ goog.provide('webfont.UserAgentParser');
|
|
2
2
|
|
3
3
|
goog.require('webfont.BrowserInfo');
|
4
4
|
goog.require('webfont.UserAgent');
|
5
|
+
goog.require('webfont.Version');
|
5
6
|
|
6
7
|
/**
|
7
8
|
* @param {string} userAgent The browser userAgent string to parse.
|
@@ -34,11 +35,11 @@ webfont.UserAgentParser.BUILTIN_BROWSER = "BuiltinBrowser";
|
|
34
35
|
*/
|
35
36
|
webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(
|
36
37
|
webfont.UserAgentParser.UNKNOWN,
|
38
|
+
new webfont.Version(),
|
37
39
|
webfont.UserAgentParser.UNKNOWN,
|
40
|
+
new webfont.Version(),
|
38
41
|
webfont.UserAgentParser.UNKNOWN,
|
39
|
-
webfont.
|
40
|
-
webfont.UserAgentParser.UNKNOWN,
|
41
|
-
webfont.UserAgentParser.UNKNOWN,
|
42
|
+
new webfont.Version(),
|
42
43
|
undefined,
|
43
44
|
new webfont.BrowserInfo(false, false, false));
|
44
45
|
|
@@ -46,7 +47,8 @@ webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(
|
|
46
47
|
goog.scope(function () {
|
47
48
|
var UserAgentParser = webfont.UserAgentParser,
|
48
49
|
BrowserInfo = webfont.BrowserInfo,
|
49
|
-
UserAgent = webfont.UserAgent
|
50
|
+
UserAgent = webfont.UserAgent,
|
51
|
+
Version = webfont.Version;
|
50
52
|
|
51
53
|
/**
|
52
54
|
* Parses the user agent string and returns an object.
|
@@ -93,10 +95,11 @@ goog.scope(function () {
|
|
93
95
|
|
94
96
|
/**
|
95
97
|
* @private
|
98
|
+
* @return {string}
|
96
99
|
*/
|
97
|
-
UserAgentParser.prototype.
|
100
|
+
UserAgentParser.prototype.getPlatformVersionString_ = function() {
|
98
101
|
var genericVersion = this.getMatchingGroup_(this.userAgent_,
|
99
|
-
/(OS X|Windows NT|Android
|
102
|
+
/(OS X|Windows NT|Android) ([^;)]+)/, 2);
|
100
103
|
if (genericVersion) {
|
101
104
|
return genericVersion;
|
102
105
|
}
|
@@ -110,10 +113,15 @@ goog.scope(function () {
|
|
110
113
|
if (iVersion) {
|
111
114
|
return iVersion;
|
112
115
|
}
|
113
|
-
var
|
114
|
-
/Linux ([
|
115
|
-
if (
|
116
|
-
|
116
|
+
var linuxOrCrOsVersion = this.getMatchingGroup_(this.userAgent_,
|
117
|
+
/(?:Linux|CrOS) ([^;)]+)/, 1);
|
118
|
+
if (linuxOrCrOsVersion) {
|
119
|
+
var parts = linuxOrCrOsVersion.split(/\s/);
|
120
|
+
for (var i = 0; i < parts.length; i += 1) {
|
121
|
+
if (/^[\d\._]+$/.test(parts[i])) {
|
122
|
+
return parts[i];
|
123
|
+
}
|
124
|
+
}
|
117
125
|
}
|
118
126
|
var blackBerryVersion = this.getMatchingGroup_(this.userAgent_,
|
119
127
|
/(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/, 2);
|
@@ -135,31 +143,17 @@ goog.scope(function () {
|
|
135
143
|
* @private
|
136
144
|
*/
|
137
145
|
UserAgentParser.prototype.parseIeUserAgentString_ = function() {
|
146
|
+
var platform = this.getPlatform_(),
|
147
|
+
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
148
|
+
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /MSIE ([\d\w\.]+)/, 1)),
|
149
|
+
documentMode = this.getDocumentMode_(this.doc_),
|
150
|
+
supportWebFont = (platform == "Windows" && browserVersion.major >= 6) ||
|
151
|
+
(platform == "Windows Phone" && platformVersion.major >= 8);
|
152
|
+
|
138
153
|
// For IE we give MSIE as the engine name and the version of IE
|
139
154
|
// instead of the specific Trident engine name and version
|
140
|
-
|
141
|
-
|
142
|
-
var platformVersionString = this.getPlatformVersion_();
|
143
|
-
|
144
|
-
var browser = this.getMatchingGroup_(this.userAgent_, /(MSIE [\d\w\.]+)/, 1);
|
145
|
-
|
146
|
-
if (browser != "") {
|
147
|
-
var pair = browser.split(' ');
|
148
|
-
var name = pair[0];
|
149
|
-
var version = pair[1];
|
150
|
-
var browserVersion = this.parseVersion_(version);
|
151
|
-
var platformVersion = this.parseVersion_(platformVersionString);
|
152
|
-
var supportWebFont = (platform == "Windows" && browserVersion.major >= 6) ||
|
153
|
-
(platform == "Windows Phone" && platformVersion.major >= 8);
|
154
|
-
|
155
|
-
return new UserAgent(name, version, name, version,
|
156
|
-
platform, platformVersionString, this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, false, false));
|
157
|
-
|
158
|
-
}
|
159
|
-
|
160
|
-
return new UserAgent("MSIE", webfont.UserAgentParser.UNKNOWN,
|
161
|
-
"MSIE", webfont.UserAgentParser.UNKNOWN,
|
162
|
-
platform, platformVersionString, this.getDocumentMode_(this.doc_), new BrowserInfo(false, false, false));
|
155
|
+
return new UserAgent("MSIE", browserVersion, "MSIE", browserVersion,
|
156
|
+
platform, platformVersion, documentMode, new BrowserInfo(supportWebFont, false, false));
|
163
157
|
};
|
164
158
|
|
165
159
|
/**
|
@@ -173,62 +167,46 @@ goog.scope(function () {
|
|
173
167
|
* @private
|
174
168
|
*/
|
175
169
|
UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
|
176
|
-
var engineName = UserAgentParser.UNKNOWN
|
177
|
-
|
178
|
-
|
179
|
-
|
170
|
+
var engineName = UserAgentParser.UNKNOWN,
|
171
|
+
engineVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Presto\/([\d\w\.]+)/, 1)),
|
172
|
+
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
173
|
+
documentMode = this.getDocumentMode_(this.doc_);
|
180
174
|
|
181
|
-
if (
|
182
|
-
|
183
|
-
|
184
|
-
engineName = splittedEnginePair[0];
|
185
|
-
engineVersion = splittedEnginePair[1];
|
175
|
+
if (engineVersion.isValid()) {
|
176
|
+
engineName = "Presto";
|
186
177
|
} else {
|
187
178
|
if (this.userAgent_.indexOf("Gecko") != -1) {
|
188
179
|
engineName = "Gecko";
|
189
180
|
}
|
190
|
-
|
191
|
-
|
192
|
-
if (geckoVersion != "") {
|
193
|
-
engineVersion = geckoVersion;
|
194
|
-
}
|
181
|
+
engineVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1));
|
195
182
|
}
|
196
183
|
|
197
184
|
// Check for Opera Mini first, since it looks like normal Opera
|
198
185
|
if (this.userAgent_.indexOf("Opera Mini/") != -1) {
|
199
|
-
var
|
200
|
-
|
201
|
-
if (version == "") {
|
202
|
-
version = UserAgentParser.UNKNOWN;
|
203
|
-
}
|
186
|
+
var browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Opera Mini\/([\d\.]+)/, 1));
|
204
187
|
|
205
|
-
return new UserAgent("OperaMini",
|
206
|
-
engineVersion, this.getPlatform_(),
|
207
|
-
|
188
|
+
return new UserAgent("OperaMini", browserVersion, engineName,
|
189
|
+
engineVersion, this.getPlatform_(), platformVersion,
|
190
|
+
documentMode, new BrowserInfo(false, false, false));
|
208
191
|
}
|
209
192
|
|
210
193
|
// Otherwise, find version information for normal Opera or Opera Mobile
|
211
194
|
if (this.userAgent_.indexOf("Version/") != -1) {
|
212
|
-
var
|
195
|
+
var browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1));
|
213
196
|
|
214
|
-
if (
|
215
|
-
|
216
|
-
|
217
|
-
this.getPlatform_(), this.getPlatformVersion_(),
|
218
|
-
this.getDocumentMode_(this.doc_), new BrowserInfo(version.major >= 10, false, false));
|
197
|
+
if (browserVersion.isValid()) {
|
198
|
+
return new UserAgent("Opera", browserVersion, engineName, engineVersion, this.getPlatform_(),
|
199
|
+
platformVersion, documentMode, new BrowserInfo(browserVersion.major >= 10, false, false));
|
219
200
|
}
|
220
201
|
}
|
221
|
-
var
|
202
|
+
var browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1));
|
222
203
|
|
223
|
-
if (
|
224
|
-
|
225
|
-
|
226
|
-
this.getPlatform_(), this.getPlatformVersion_(),
|
227
|
-
this.getDocumentMode_(this.doc_), new BrowserInfo(version.major >= 10, false, false));
|
204
|
+
if (browserVersion.isValid()) {
|
205
|
+
return new UserAgent("Opera", browserVersion, engineName, engineVersion, this.getPlatform_(),
|
206
|
+
platformVersion, documentMode, new BrowserInfo(browserVersion.major >= 10, false, false));
|
228
207
|
}
|
229
|
-
return new UserAgent("Opera",
|
230
|
-
|
231
|
-
this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new BrowserInfo(false, false, false));
|
208
|
+
return new UserAgent("Opera", new Version(), engineName, engineVersion, this.getPlatform_(),
|
209
|
+
platformVersion, documentMode, new BrowserInfo(false, false, false));
|
232
210
|
};
|
233
211
|
|
234
212
|
/**
|
@@ -242,49 +220,40 @@ goog.scope(function () {
|
|
242
220
|
* @private
|
243
221
|
*/
|
244
222
|
UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
|
245
|
-
var platform = this.getPlatform_()
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
var name = UserAgentParser.UNKNOWN;
|
257
|
-
|
258
|
-
if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1 || this.userAgent_.indexOf("CriOS") != -1) {
|
259
|
-
name = "Chrome";
|
223
|
+
var platform = this.getPlatform_(),
|
224
|
+
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
225
|
+
webKitVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /AppleWeb(?:K|k)it\/([\d\.\+]+)/, 1)),
|
226
|
+
browserName = UserAgentParser.UNKNOWN,
|
227
|
+
browserVersion = new Version(),
|
228
|
+
supportWebFont = false;
|
229
|
+
|
230
|
+
if (this.userAgent_.indexOf("Chrome") != -1 ||
|
231
|
+
this.userAgent_.indexOf("CrMo") != -1 ||
|
232
|
+
this.userAgent_.indexOf("CriOS") != -1) {
|
233
|
+
browserName = "Chrome";
|
260
234
|
} else if (/Silk\/\d/.test(this.userAgent_)) {
|
261
|
-
|
235
|
+
browserName = "Silk";
|
262
236
|
} else if (platform == "BlackBerry" || platform == "Android") {
|
263
|
-
|
237
|
+
browserName = UserAgentParser.BUILTIN_BROWSER;
|
264
238
|
} else if (this.userAgent_.indexOf("Safari") != -1) {
|
265
|
-
|
239
|
+
browserName = "Safari";
|
266
240
|
} else if (this.userAgent_.indexOf("AdobeAIR") != -1) {
|
267
|
-
|
241
|
+
browserName = "AdobeAIR";
|
268
242
|
}
|
269
|
-
var version = UserAgentParser.UNKNOWN;
|
270
243
|
|
271
|
-
if (
|
272
|
-
|
273
|
-
} else if (
|
274
|
-
|
275
|
-
/Silk\/([\d\._]+)/, 1);
|
244
|
+
if (browserName == UserAgentParser.BUILTIN_BROWSER) {
|
245
|
+
browserVersion = new Version();
|
246
|
+
} else if (browserName == "Silk") {
|
247
|
+
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Silk\/([\d\._]+)/, 1));
|
276
248
|
} else if (this.userAgent_.indexOf("Version/") != -1) {
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
} else if (name == "AdobeAIR") {
|
283
|
-
version = this.getMatchingGroup_(this.userAgent_,
|
284
|
-
/AdobeAIR\/([\d\.]+)/, 1);
|
249
|
+
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.\w]+)/, 1));
|
250
|
+
} else if (browserName == "Chrome") {
|
251
|
+
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /(Chrome|CrMo|CriOS)\/([\d\.]+)/, 2));
|
252
|
+
} else if (browserName == "AdobeAIR") {
|
253
|
+
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /AdobeAIR\/([\d\.]+)/, 1));
|
285
254
|
}
|
286
|
-
|
287
|
-
|
255
|
+
|
256
|
+
if (browserName == "AdobeAIR") {
|
288
257
|
supportWebFont = browserVersion.major > 2 || browserVersion.major == 2 && browserVersion.minor >= 5;
|
289
258
|
} else if (platform == "BlackBerry") {
|
290
259
|
supportWebFont = platformVersion.major >= 10;
|
@@ -293,11 +262,12 @@ goog.scope(function () {
|
|
293
262
|
} else {
|
294
263
|
supportWebFont = webKitVersion.major >= 526 || webKitVersion.major >= 525 && webKitVersion.minor >= 13;
|
295
264
|
}
|
265
|
+
|
296
266
|
var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11),
|
297
267
|
hasWebKitMetricsBug = platform == 'iPhone' || platform == 'iPad' || platform == 'iPod' || platform == 'Macintosh';
|
298
268
|
|
299
|
-
return new UserAgent(
|
300
|
-
|
269
|
+
return new UserAgent(browserName, browserVersion, "AppleWebKit", webKitVersion, platform, platformVersion,
|
270
|
+
this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, hasWebKitFallbackBug, hasWebKitMetricsBug));
|
301
271
|
};
|
302
272
|
|
303
273
|
/**
|
@@ -311,57 +281,31 @@ goog.scope(function () {
|
|
311
281
|
* @private
|
312
282
|
*/
|
313
283
|
UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
|
314
|
-
var name = UserAgentParser.UNKNOWN
|
315
|
-
|
316
|
-
|
284
|
+
var name = UserAgentParser.UNKNOWN,
|
285
|
+
version = new Version(),
|
286
|
+
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
287
|
+
supportWebFont = false;
|
317
288
|
|
318
289
|
if (this.userAgent_.indexOf("Firefox") != -1) {
|
319
290
|
name = "Firefox";
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
if (versionNum != "") {
|
324
|
-
var firefoxVersion = this.parseVersion_(versionNum);
|
325
|
-
|
326
|
-
version = versionNum;
|
327
|
-
supportWebFont = firefoxVersion.major >= 3 &&
|
328
|
-
firefoxVersion.minor >= 5;
|
329
|
-
}
|
291
|
+
version = Version.parse(this.getMatchingGroup_(this.userAgent_, /Firefox\/([\d\w\.]+)/, 1));
|
292
|
+
supportWebFont = version.major >= 3 && version.minor >= 5;
|
330
293
|
} else if (this.userAgent_.indexOf("Mozilla") != -1) {
|
331
294
|
name = "Mozilla";
|
332
295
|
}
|
333
|
-
var geckoVersionString = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
|
334
296
|
|
335
|
-
|
336
|
-
|
337
|
-
} else {
|
338
|
-
if (!supportWebFont) {
|
339
|
-
var geckoVersion = this.parseVersion_(geckoVersionString);
|
340
|
-
|
341
|
-
supportWebFont = geckoVersion.major > 1 ||
|
342
|
-
geckoVersion.major == 1 && geckoVersion.minor > 9 ||
|
343
|
-
geckoVersion.major == 1 && geckoVersion.minor == 9 && geckoVersion.patch >= 2 ||
|
344
|
-
geckoVersionString.match(/1\.9\.1b[123]/) != null ||
|
345
|
-
geckoVersionString.match(/1\.9\.1\.[\d\.]+/) != null;
|
346
|
-
}
|
347
|
-
}
|
348
|
-
return new UserAgent(name, version, "Gecko", geckoVersionString,
|
349
|
-
this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, false, false));
|
350
|
-
};
|
297
|
+
var engineVersionString = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1),
|
298
|
+
engineVersion = Version.parse(engineVersionString);
|
351
299
|
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
if (m) {
|
360
|
-
result.major = parseInt(m[1] || -1, 10);
|
361
|
-
result.minor = parseInt(m[2] || -1, 10);
|
362
|
-
result.patch = parseInt(m[3] || -1, 10);
|
300
|
+
if (!supportWebFont) {
|
301
|
+
supportWebFont = engineVersion.major > 1 ||
|
302
|
+
engineVersion.major == 1 && engineVersion.minor > 9 ||
|
303
|
+
engineVersion.major == 1 && engineVersion.minor == 9 && engineVersion.patch >= 2 ||
|
304
|
+
engineVersionString.match(/1\.9\.1b[123]/) != null ||
|
305
|
+
engineVersionString.match(/1\.9\.1\.[\d\.]+/) != null;
|
363
306
|
}
|
364
|
-
return
|
307
|
+
return new UserAgent(name, version, "Gecko", engineVersion,
|
308
|
+
this.getPlatform_(), platformVersion, this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, false, false));
|
365
309
|
};
|
366
310
|
|
367
311
|
/**
|