webfontloader 1.3.0 → 1.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.
Files changed (40) hide show
  1. data/CHANGELOG +5 -0
  2. data/Rakefile +2 -1
  3. data/lib/webfontloader.rb +1 -1
  4. data/spec/core/font_spec.js +9 -4
  5. data/spec/core/fontruler_spec.js +3 -10
  6. data/spec/core/fontwatcher_spec.js +22 -23
  7. data/spec/core/fontwatchrunner_spec.js +206 -231
  8. data/spec/deps.js +27 -0
  9. data/spec/google/lastresortwebkitfontwatchrunner_spec.js +47 -58
  10. data/spec/index.html +14 -25
  11. data/src/ascender/ascender_script.js +52 -45
  12. data/src/core/browserinfo.js +54 -47
  13. data/src/core/cssclassname.js +27 -22
  14. data/src/core/cssfontfamilyname.js +23 -17
  15. data/src/core/domhelper.js +209 -203
  16. data/src/core/eventdispatcher.js +111 -103
  17. data/src/core/font.js +110 -68
  18. data/src/core/fontmoduleloader.js +56 -13
  19. data/src/core/fontruler.js +52 -43
  20. data/src/core/fontvariationdescription.js +82 -76
  21. data/src/core/fontwatcher.js +93 -88
  22. data/src/core/fontwatchrunner.js +161 -161
  23. data/src/core/initialize.js +22 -15
  24. data/src/core/namespace.js +0 -29
  25. data/src/core/size.js +31 -25
  26. data/src/core/useragent.js +63 -48
  27. data/src/core/useragentparser.js +317 -306
  28. data/src/custom/customcss.js +31 -24
  29. data/src/fontdeck/fontdeck_script.js +46 -37
  30. data/src/google/fontapiparser.js +105 -97
  31. data/src/google/fontapiurlbuilder.js +46 -41
  32. data/src/google/googlefontapi.js +48 -32
  33. data/src/google/lastresortwebkitfontwatchrunner.js +80 -67
  34. data/src/modules.yml +6 -6
  35. data/src/monotype/monotype_script.js +47 -40
  36. data/src/typekit/typekit_script.js +41 -35
  37. data/tools/compiler/base.js +1548 -0
  38. data/tools/compiler/compiler.jar +0 -0
  39. data/webfontloader.gemspec +4 -2
  40. metadata +18 -16
@@ -1,4 +1,7 @@
1
+ goog.provide('webfont.UserAgent');
2
+
1
3
  /**
4
+ * @export
2
5
  * @param {string} name
3
6
  * @param {string} version
4
7
  * @param {string} engine
@@ -21,58 +24,70 @@ webfont.UserAgent = function(name, version, engine, engineVersion, platform,
21
24
  this.browserInfo_ = browserInfo;
22
25
  };
23
26
 
24
- /**
25
- * @return {string}
26
- */
27
- webfont.UserAgent.prototype.getName = function() {
28
- return this.name_;
29
- };
27
+ goog.scope(function () {
28
+ var UserAgent = webfont.UserAgent;
30
29
 
31
- /**
32
- * @return {string}
33
- */
34
- webfont.UserAgent.prototype.getVersion = function() {
35
- return this.version_;
36
- };
30
+ /**
31
+ * @export
32
+ * @return {string}
33
+ */
34
+ UserAgent.prototype.getName = function() {
35
+ return this.name_;
36
+ };
37
37
 
38
- /**
39
- * @return {string}
40
- */
41
- webfont.UserAgent.prototype.getEngine = function() {
42
- return this.engine_;
43
- };
38
+ /**
39
+ * @export
40
+ * @return {string}
41
+ */
42
+ UserAgent.prototype.getVersion = function() {
43
+ return this.version_;
44
+ };
44
45
 
45
- /**
46
- * @return {string}
47
- */
48
- webfont.UserAgent.prototype.getEngineVersion = function() {
49
- return this.engineVersion_;
50
- };
46
+ /**
47
+ * @export
48
+ * @return {string}
49
+ */
50
+ UserAgent.prototype.getEngine = function() {
51
+ return this.engine_;
52
+ };
51
53
 
52
- /**
53
- * @return {string}
54
- */
55
- webfont.UserAgent.prototype.getPlatform = function() {
56
- return this.platform_;
57
- };
54
+ /**
55
+ * @export
56
+ * @return {string}
57
+ */
58
+ UserAgent.prototype.getEngineVersion = function() {
59
+ return this.engineVersion_;
60
+ };
58
61
 
59
- /**
60
- * @return {string}
61
- */
62
- webfont.UserAgent.prototype.getPlatformVersion = function() {
63
- return this.platformVersion_;
64
- };
62
+ /**
63
+ * @export
64
+ * @return {string}
65
+ */
66
+ UserAgent.prototype.getPlatform = function() {
67
+ return this.platform_;
68
+ };
65
69
 
66
- /**
67
- * @return {number|undefined}
68
- */
69
- webfont.UserAgent.prototype.getDocumentMode = function() {
70
- return this.documentMode_;
71
- };
70
+ /**
71
+ * @export
72
+ * @return {string}
73
+ */
74
+ UserAgent.prototype.getPlatformVersion = function() {
75
+ return this.platformVersion_;
76
+ };
72
77
 
73
- /**
74
- * @return {webfont.BrowserInfo}
75
- */
76
- webfont.UserAgent.prototype.getBrowserInfo = function() {
77
- return this.browserInfo_;
78
- };
78
+ /**
79
+ * @export
80
+ * @return {number|undefined}
81
+ */
82
+ UserAgent.prototype.getDocumentMode = function() {
83
+ return this.documentMode_;
84
+ };
85
+
86
+ /**
87
+ * @export
88
+ * @return {webfont.BrowserInfo}
89
+ */
90
+ UserAgent.prototype.getBrowserInfo = function() {
91
+ return this.browserInfo_;
92
+ };
93
+ });
@@ -1,3 +1,8 @@
1
+ goog.provide('webfont.UserAgentParser');
2
+
3
+ goog.require('webfont.BrowserInfo');
4
+ goog.require('webfont.UserAgent');
5
+
1
6
  /**
2
7
  * @param {string} userAgent The browser userAgent string to parse.
3
8
  * @constructor
@@ -37,336 +42,342 @@ webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(
37
42
  undefined,
38
43
  new webfont.BrowserInfo(false, false, false));
39
44
 
40
- /**
41
- * Parses the user agent string and returns an object.
42
- * @return {webfont.UserAgent}
43
- */
44
- webfont.UserAgentParser.prototype.parse = function() {
45
- if (this.isIe_()) {
46
- return this.parseIeUserAgentString_();
47
- } else if (this.isOpera_()) {
48
- return this.parseOperaUserAgentString_();
49
- } else if (this.isWebKit_()) {
50
- return this.parseWebKitUserAgentString_();
51
- } else if (this.isGecko_()) {
52
- return this.parseGeckoUserAgentString_();
53
- } else {
54
- return webfont.UserAgentParser.UNKNOWN_USER_AGENT;
55
- }
56
- };
57
45
 
58
- /**
59
- * @private
60
- */
61
- webfont.UserAgentParser.prototype.getPlatform_ = function() {
62
- var mobileOs = this.getMatchingGroup_(this.userAgent_,
63
- /(iPod|iPad|iPhone|Android|Windows Phone|BB\d{2}|BlackBerry)/, 1);
64
-
65
- if (mobileOs != "") {
66
- if (/BB\d{2}/.test(mobileOs)) {
67
- mobileOs = "BlackBerry";
46
+ goog.scope(function () {
47
+ var UserAgentParser = webfont.UserAgentParser,
48
+ BrowserInfo = webfont.BrowserInfo,
49
+ UserAgent = webfont.UserAgent;
50
+
51
+ /**
52
+ * Parses the user agent string and returns an object.
53
+ * @return {webfont.UserAgent}
54
+ */
55
+ UserAgentParser.prototype.parse = function() {
56
+ if (this.isIe_()) {
57
+ return this.parseIeUserAgentString_();
58
+ } else if (this.isOpera_()) {
59
+ return this.parseOperaUserAgentString_();
60
+ } else if (this.isWebKit_()) {
61
+ return this.parseWebKitUserAgentString_();
62
+ } else if (this.isGecko_()) {
63
+ return this.parseGeckoUserAgentString_();
64
+ } else {
65
+ return webfont.UserAgentParser.UNKNOWN_USER_AGENT;
68
66
  }
69
- return mobileOs;
70
- }
71
- var os = this.getMatchingGroup_(this.userAgent_,
72
- /(Linux|Mac_PowerPC|Macintosh|Windows|CrOS)/, 1);
73
-
74
- if (os != "") {
75
- if (os == "Mac_PowerPC") {
76
- os = "Macintosh";
67
+ };
68
+
69
+ /**
70
+ * @private
71
+ */
72
+ UserAgentParser.prototype.getPlatform_ = function() {
73
+ var mobileOs = this.getMatchingGroup_(this.userAgent_,
74
+ /(iPod|iPad|iPhone|Android|Windows Phone|BB\d{2}|BlackBerry)/, 1);
75
+
76
+ if (mobileOs != "") {
77
+ if (/BB\d{2}/.test(mobileOs)) {
78
+ mobileOs = "BlackBerry";
79
+ }
80
+ return mobileOs;
81
+ }
82
+ var os = this.getMatchingGroup_(this.userAgent_,
83
+ /(Linux|Mac_PowerPC|Macintosh|Windows|CrOS)/, 1);
84
+
85
+ if (os != "") {
86
+ if (os == "Mac_PowerPC") {
87
+ os = "Macintosh";
88
+ }
89
+ return os;
90
+ }
91
+ return webfont.UserAgentParser.UNKNOWN;
92
+ };
93
+
94
+ /**
95
+ * @private
96
+ */
97
+ UserAgentParser.prototype.getPlatformVersion_ = function() {
98
+ var genericVersion = this.getMatchingGroup_(this.userAgent_,
99
+ /(OS X|Windows NT|Android|CrOS) ([^;)]+)/, 2);
100
+ if (genericVersion) {
101
+ return genericVersion;
102
+ }
103
+ var winPhoneVersion = this.getMatchingGroup_(this.userAgent_,
104
+ /Windows Phone( OS)? ([^;)]+)/, 2);
105
+ if (winPhoneVersion) {
106
+ return winPhoneVersion;
107
+ }
108
+ var iVersion = this.getMatchingGroup_(this.userAgent_,
109
+ /(iPhone )?OS ([\d_]+)/, 2);
110
+ if (iVersion) {
111
+ return iVersion;
112
+ }
113
+ var linuxVersion = this.getMatchingGroup_(this.userAgent_,
114
+ /Linux ([i\d]+)/, 1);
115
+ if (linuxVersion) {
116
+ return linuxVersion;
117
+ }
118
+ var blackBerryVersion = this.getMatchingGroup_(this.userAgent_,
119
+ /(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/, 2);
120
+ if (blackBerryVersion) {
121
+ return blackBerryVersion;
77
122
  }
78
- return os;
79
- }
80
- return webfont.UserAgentParser.UNKNOWN;
81
- };
82
-
83
- /**
84
- * @private
85
- */
86
- webfont.UserAgentParser.prototype.getPlatformVersion_ = function() {
87
- var genericVersion = this.getMatchingGroup_(this.userAgent_,
88
- /(OS X|Windows NT|Android|CrOS) ([^;)]+)/, 2);
89
- if (genericVersion) {
90
- return genericVersion;
91
- }
92
- var winPhoneVersion = this.getMatchingGroup_(this.userAgent_,
93
- /Windows Phone( OS)? ([^;)]+)/, 2);
94
- if (winPhoneVersion) {
95
- return winPhoneVersion;
96
- }
97
- var iVersion = this.getMatchingGroup_(this.userAgent_,
98
- /(iPhone )?OS ([\d_]+)/, 2);
99
- if (iVersion) {
100
- return iVersion;
101
- }
102
- var linuxVersion = this.getMatchingGroup_(this.userAgent_,
103
- /Linux ([i\d]+)/, 1);
104
- if (linuxVersion) {
105
- return linuxVersion;
106
- }
107
- var blackBerryVersion = this.getMatchingGroup_(this.userAgent_,
108
- /(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/, 2);
109
- if (blackBerryVersion) {
110
- return blackBerryVersion;
111
- }
112
-
113
- return webfont.UserAgentParser.UNKNOWN;
114
- };
115
-
116
- /**
117
- * @private
118
- */
119
- webfont.UserAgentParser.prototype.isIe_ = function() {
120
- return this.userAgent_.indexOf("MSIE") != -1;
121
- };
122
123
 
123
- /**
124
- * @private
125
- */
126
- webfont.UserAgentParser.prototype.parseIeUserAgentString_ = function() {
127
- // For IE we give MSIE as the engine name and the version of IE
128
- // instead of the specific Trident engine name and version
124
+ return UserAgentParser.UNKNOWN;
125
+ };
129
126
 
130
- var platform = this.getPlatform_();
131
- var platformVersionString = this.getPlatformVersion_();
127
+ /**
128
+ * @private
129
+ */
130
+ UserAgentParser.prototype.isIe_ = function() {
131
+ return this.userAgent_.indexOf("MSIE") != -1;
132
+ };
132
133
 
133
- var browser = this.getMatchingGroup_(this.userAgent_, /(MSIE [\d\w\.]+)/, 1);
134
+ /**
135
+ * @private
136
+ */
137
+ UserAgentParser.prototype.parseIeUserAgentString_ = function() {
138
+ // For IE we give MSIE as the engine name and the version of IE
139
+ // instead of the specific Trident engine name and version
134
140
 
135
- if (browser != "") {
136
- var pair = browser.split(' ');
137
- var name = pair[0];
138
- var version = pair[1];
139
- var browserVersion = this.parseVersion_(version);
140
- var platformVersion = this.parseVersion_(platformVersionString);
141
- var supportWebFont = (platform == "Windows" && browserVersion.major >= 6) ||
142
- (platform == "Windows Phone" && platformVersion.major >= 8);
141
+ var platform = this.getPlatform_();
142
+ var platformVersionString = this.getPlatformVersion_();
143
143
 
144
- return new webfont.UserAgent(name, version, name, version,
145
- platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false, false));
146
- }
144
+ var browser = this.getMatchingGroup_(this.userAgent_, /(MSIE [\d\w\.]+)/, 1);
147
145
 
148
- return new webfont.UserAgent("MSIE", webfont.UserAgentParser.UNKNOWN,
149
- "MSIE", webfont.UserAgentParser.UNKNOWN,
150
- platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false, false));
151
- };
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);
152
154
 
153
- /**
154
- * @private
155
- */
156
- webfont.UserAgentParser.prototype.isOpera_ = function() {
157
- return this.userAgent_.indexOf("Opera") != -1;
158
- };
155
+ return new UserAgent(name, version, name, version,
156
+ platform, platformVersionString, this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, false, false));
159
157
 
160
- /**
161
- * @private
162
- */
163
- webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
164
- var engineName = webfont.UserAgentParser.UNKNOWN;
165
- var engineVersion = webfont.UserAgentParser.UNKNOWN;
166
- var enginePair = this.getMatchingGroup_(this.userAgent_,
167
- /(Presto\/[\d\w\.]+)/, 1);
168
-
169
- if (enginePair != "") {
170
- var splittedEnginePair = enginePair.split('/');
171
-
172
- engineName = splittedEnginePair[0];
173
- engineVersion = splittedEnginePair[1];
174
- } else {
175
- if (this.userAgent_.indexOf("Gecko") != -1) {
176
- engineName = "Gecko";
177
158
  }
178
- var geckoVersion = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
179
159
 
180
- if (geckoVersion != "") {
181
- engineVersion = geckoVersion;
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));
163
+ };
164
+
165
+ /**
166
+ * @private
167
+ */
168
+ UserAgentParser.prototype.isOpera_ = function() {
169
+ return this.userAgent_.indexOf("Opera") != -1;
170
+ };
171
+
172
+ /**
173
+ * @private
174
+ */
175
+ UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
176
+ var engineName = UserAgentParser.UNKNOWN;
177
+ var engineVersion = UserAgentParser.UNKNOWN;
178
+ var enginePair = this.getMatchingGroup_(this.userAgent_,
179
+ /(Presto\/[\d\w\.]+)/, 1);
180
+
181
+ if (enginePair != "") {
182
+ var splittedEnginePair = enginePair.split('/');
183
+
184
+ engineName = splittedEnginePair[0];
185
+ engineVersion = splittedEnginePair[1];
186
+ } else {
187
+ if (this.userAgent_.indexOf("Gecko") != -1) {
188
+ engineName = "Gecko";
189
+ }
190
+ var geckoVersion = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
191
+
192
+ if (geckoVersion != "") {
193
+ engineVersion = geckoVersion;
194
+ }
182
195
  }
183
- }
184
196
 
185
- // Check for Opera Mini first, since it looks like normal Opera
186
- if (this.userAgent_.indexOf("Opera Mini/") != -1) {
187
- var version = this.getMatchingGroup_(this.userAgent_, /Opera Mini\/([\d\.]+)/, 1);
197
+ // Check for Opera Mini first, since it looks like normal Opera
198
+ if (this.userAgent_.indexOf("Opera Mini/") != -1) {
199
+ var version = this.getMatchingGroup_(this.userAgent_, /Opera Mini\/([\d\.]+)/, 1);
200
+
201
+ if (version == "") {
202
+ version = UserAgentParser.UNKNOWN;
203
+ }
188
204
 
189
- if (version == "") {
190
- version = webfont.UserAgentParser.UNKNOWN;
205
+ return new UserAgent("OperaMini", version, engineName,
206
+ engineVersion, this.getPlatform_(), this.getPlatformVersion_(),
207
+ this.getDocumentMode_(this.doc_), new BrowserInfo(false, false, false));
191
208
  }
192
209
 
193
- return new webfont.UserAgent("OperaMini", version, engineName,
194
- engineVersion, this.getPlatform_(), this.getPlatformVersion_(),
195
- this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false, false));
196
- }
210
+ // Otherwise, find version information for normal Opera or Opera Mobile
211
+ if (this.userAgent_.indexOf("Version/") != -1) {
212
+ var versionString = this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1);
197
213
 
198
- // Otherwise, find version information for normal Opera or Opera Mobile
199
- if (this.userAgent_.indexOf("Version/") != -1) {
200
- var versionString = this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1);
214
+ if (versionString != "") {
215
+ var version = this.parseVersion_(versionString);
216
+ return new UserAgent("Opera", versionString, engineName, engineVersion,
217
+ this.getPlatform_(), this.getPlatformVersion_(),
218
+ this.getDocumentMode_(this.doc_), new BrowserInfo(version.major >= 10, false, false));
219
+ }
220
+ }
221
+ var versionString = this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1);
201
222
 
202
223
  if (versionString != "") {
203
224
  var version = this.parseVersion_(versionString);
204
- return new webfont.UserAgent("Opera", versionString, engineName, engineVersion,
225
+ return new UserAgent("Opera", versionString, engineName, engineVersion,
205
226
  this.getPlatform_(), this.getPlatformVersion_(),
206
- this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false, false));
227
+ this.getDocumentMode_(this.doc_), new BrowserInfo(version.major >= 10, false, false));
228
+ }
229
+ return new UserAgent("Opera", UserAgentParser.UNKNOWN,
230
+ engineName, engineVersion, this.getPlatform_(),
231
+ this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new BrowserInfo(false, false, false));
232
+ };
233
+
234
+ /**
235
+ * @private
236
+ */
237
+ UserAgentParser.prototype.isWebKit_ = function() {
238
+ return /AppleWeb(K|k)it/.test(this.userAgent_);
239
+ };
240
+
241
+ /**
242
+ * @private
243
+ */
244
+ UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
245
+ var platform = this.getPlatform_();
246
+ var platformVersionString = this.getPlatformVersion_();
247
+ var webKitVersionString = this.getMatchingGroup_(this.userAgent_,
248
+ /AppleWeb(?:K|k)it\/([\d\.\+]+)/, 1);
249
+ var supportWebFont = false;
250
+
251
+ if (webKitVersionString == "") {
252
+ webKitVersionString = UserAgentParser.UNKNOWN;
207
253
  }
208
- }
209
- var versionString = this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1);
210
-
211
- if (versionString != "") {
212
- var version = this.parseVersion_(versionString);
213
- return new webfont.UserAgent("Opera", versionString, engineName, engineVersion,
214
- this.getPlatform_(), this.getPlatformVersion_(),
215
- this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false, false));
216
- }
217
- return new webfont.UserAgent("Opera", webfont.UserAgentParser.UNKNOWN,
218
- engineName, engineVersion, this.getPlatform_(),
219
- this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false, false));
220
- };
221
-
222
- /**
223
- * @private
224
- */
225
- webfont.UserAgentParser.prototype.isWebKit_ = function() {
226
- return /AppleWeb(K|k)it/.test(this.userAgent_);
227
- };
228
-
229
- /**
230
- * @private
231
- */
232
- webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
233
- var platform = this.getPlatform_();
234
- var platformVersionString = this.getPlatformVersion_();
235
- var webKitVersionString = this.getMatchingGroup_(this.userAgent_,
236
- /AppleWeb(?:K|k)it\/([\d\.\+]+)/, 1);
237
- var supportWebFont = false;
238
-
239
- if (webKitVersionString == "") {
240
- webKitVersionString = webfont.UserAgentParser.UNKNOWN;
241
- }
242
-
243
- var webKitVersion = this.parseVersion_(webKitVersionString);
244
- var platformVersion = this.parseVersion_(platformVersionString);
245
-
246
- var name = webfont.UserAgentParser.UNKNOWN;
247
-
248
- if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1 || this.userAgent_.indexOf("CriOS") != -1) {
249
- name = "Chrome";
250
- } else if (platform == "BlackBerry" || platform == "Android") {
251
- name = webfont.UserAgentParser.BUILTIN_BROWSER;
252
- } else if (this.userAgent_.indexOf("Safari") != -1) {
253
- name = "Safari";
254
- } else if (this.userAgent_.indexOf("AdobeAIR") != -1) {
255
- name = "AdobeAIR";
256
- }
257
- var version = webfont.UserAgentParser.UNKNOWN;
258
-
259
- if (name == webfont.UserAgentParser.BUILTIN_BROWSER) {
260
- version = webfont.UserAgentParser.UNKNOWN;
261
- } else if (this.userAgent_.indexOf("Version/") != -1) {
262
- version = this.getMatchingGroup_(this.userAgent_,
263
- /Version\/([\d\.\w]+)/, 1);
264
- } else if (name == "Chrome") {
265
- version = this.getMatchingGroup_(this.userAgent_,
266
- /(Chrome|CrMo|CriOS)\/([\d\.]+)/, 2);
267
- } else if (name == "AdobeAIR") {
268
- version = this.getMatchingGroup_(this.userAgent_,
269
- /AdobeAIR\/([\d\.]+)/, 1);
270
- }
271
- if (name == "AdobeAIR") {
272
- var browserVersion = this.parseVersion_(version);
273
- supportWebFont = browserVersion.major > 2 || browserVersion.major == 2 && browserVersion.minor >= 5;
274
- } else if (platform == "BlackBerry") {
275
- supportWebFont = platformVersion.major >= 10;
276
- } else if (platform == "Android") {
277
- supportWebFont = platformVersion.major > 2 || (platformVersion.major == 2 && platformVersion.minor > 1);
278
- } else {
279
- supportWebFont = webKitVersion.major >= 526 || webKitVersion.major >= 525 && webKitVersion.minor >= 13;
280
- }
281
-
282
- var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11),
283
- hasWebKitMetricsBug = platform == 'iPhone' || platform == 'iPad' || platform == 'iPod' || platform == 'Macintosh';
284
-
285
- return new webfont.UserAgent(name, version, "AppleWebKit", webKitVersionString,
286
- platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, hasWebKitFallbackBug, hasWebKitMetricsBug));
287
- };
288
-
289
- /**
290
- * @private
291
- */
292
- webfont.UserAgentParser.prototype.isGecko_ = function() {
293
- return this.userAgent_.indexOf("Gecko") != -1;
294
- };
295
254
 
296
- /**
297
- * @private
298
- */
299
- webfont.UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
300
- var name = webfont.UserAgentParser.UNKNOWN;
301
- var version = webfont.UserAgentParser.UNKNOWN;
302
- var supportWebFont = false;
303
-
304
- if (this.userAgent_.indexOf("Firefox") != -1) {
305
- name = "Firefox";
306
- var versionNum = this.getMatchingGroup_(this.userAgent_,
307
- /Firefox\/([\d\w\.]+)/, 1);
308
-
309
- if (versionNum != "") {
310
- var firefoxVersion = this.parseVersion_(versionNum);
311
-
312
- version = versionNum;
313
- supportWebFont = firefoxVersion.major >= 3 &&
314
- firefoxVersion.minor >= 5;
255
+ var webKitVersion = this.parseVersion_(webKitVersionString);
256
+ var platformVersion = this.parseVersion_(platformVersionString);
257
+ var name = UserAgentParser.UNKNOWN;
258
+
259
+ if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1 || this.userAgent_.indexOf("CriOS") != -1) {
260
+ name = "Chrome";
261
+ } else if (platform == "BlackBerry" || platform == "Android") {
262
+ name = UserAgentParser.BUILTIN_BROWSER;
263
+ } else if (this.userAgent_.indexOf("Safari") != -1) {
264
+ name = "Safari";
265
+ } else if (this.userAgent_.indexOf("AdobeAIR") != -1) {
266
+ name = "AdobeAIR";
315
267
  }
316
- } else if (this.userAgent_.indexOf("Mozilla") != -1) {
317
- name = "Mozilla";
318
- }
319
- var geckoVersionString = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
320
-
321
- if (geckoVersionString == "") {
322
- geckoVersionString = webfont.UserAgentParser.UNKNOWN;
323
- } else {
324
- if (!supportWebFont) {
325
- var geckoVersion = this.parseVersion_(geckoVersionString);
326
-
327
- supportWebFont = geckoVersion.major > 1 ||
328
- geckoVersion.major == 1 && geckoVersion.minor > 9 ||
329
- geckoVersion.major == 1 && geckoVersion.minor == 9 && geckoVersion.patch >= 2 ||
330
- geckoVersionString.match(/1\.9\.1b[123]/) != null ||
331
- geckoVersionString.match(/1\.9\.1\.[\d\.]+/) != null;
268
+ var version = UserAgentParser.UNKNOWN;
269
+
270
+ if (name == UserAgentParser.BUILTIN_BROWSER) {
271
+ version = UserAgentParser.UNKNOWN;
272
+ } else if (this.userAgent_.indexOf("Version/") != -1) {
273
+ version = this.getMatchingGroup_(this.userAgent_,
274
+ /Version\/([\d\.\w]+)/, 1);
275
+ } else if (name == "Chrome") {
276
+ version = this.getMatchingGroup_(this.userAgent_,
277
+ /(Chrome|CrMo|CriOS)\/([\d\.]+)/, 2);
278
+ } else if (name == "AdobeAIR") {
279
+ version = this.getMatchingGroup_(this.userAgent_,
280
+ /AdobeAIR\/([\d\.]+)/, 1);
332
281
  }
333
- }
334
- return new webfont.UserAgent(name, version, "Gecko", geckoVersionString,
335
- this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false, false));
336
- };
337
-
338
- /**
339
- * @private
340
- */
341
- webfont.UserAgentParser.prototype.parseVersion_ = function(version) {
342
- var m = /([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+)?)?)?/.exec(version),
343
- result = {};
344
-
345
- if (m) {
346
- result.major = parseInt(m[1] || -1, 10);
347
- result.minor = parseInt(m[2] || -1, 10);
348
- result.patch = parseInt(m[3] || -1, 10);
349
- }
350
- return result;
351
- };
352
-
353
- /**
354
- * @private
355
- */
356
- webfont.UserAgentParser.prototype.getMatchingGroup_ = function(str,
357
- regexp, index) {
358
- var groups = str.match(regexp);
359
-
360
- if (groups && groups[index]) {
361
- return groups[index];
362
- }
363
- return "";
364
- };
365
-
366
- /**
367
- * @private
368
- */
369
- webfont.UserAgentParser.prototype.getDocumentMode_ = function(doc) {
370
- if (doc.documentMode) return doc.documentMode;
371
- return undefined;
372
- };
282
+ if (name == "AdobeAIR") {
283
+ var browserVersion = this.parseVersion_(version);
284
+ supportWebFont = browserVersion.major > 2 || browserVersion.major == 2 && browserVersion.minor >= 5;
285
+ } else if (platform == "BlackBerry") {
286
+ supportWebFont = platformVersion.major >= 10;
287
+ } else if (platform == "Android") {
288
+ supportWebFont = platformVersion.major > 2 || (platformVersion.major == 2 && platformVersion.minor > 1);
289
+ } else {
290
+ supportWebFont = webKitVersion.major >= 526 || webKitVersion.major >= 525 && webKitVersion.minor >= 13;
291
+ }
292
+ var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11),
293
+ hasWebKitMetricsBug = platform == 'iPhone' || platform == 'iPad' || platform == 'iPod' || platform == 'Macintosh';
294
+
295
+ return new UserAgent(name, version, "AppleWebKit", webKitVersionString,
296
+ platform, platformVersionString, this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, hasWebKitFallbackBug, hasWebKitMetricsBug));
297
+ };
298
+
299
+ /**
300
+ * @private
301
+ */
302
+ UserAgentParser.prototype.isGecko_ = function() {
303
+ return this.userAgent_.indexOf("Gecko") != -1;
304
+ };
305
+
306
+ /**
307
+ * @private
308
+ */
309
+ UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
310
+ var name = UserAgentParser.UNKNOWN;
311
+ var version = UserAgentParser.UNKNOWN;
312
+ var supportWebFont = false;
313
+
314
+ if (this.userAgent_.indexOf("Firefox") != -1) {
315
+ name = "Firefox";
316
+ var versionNum = this.getMatchingGroup_(this.userAgent_,
317
+ /Firefox\/([\d\w\.]+)/, 1);
318
+
319
+ if (versionNum != "") {
320
+ var firefoxVersion = this.parseVersion_(versionNum);
321
+
322
+ version = versionNum;
323
+ supportWebFont = firefoxVersion.major >= 3 &&
324
+ firefoxVersion.minor >= 5;
325
+ }
326
+ } else if (this.userAgent_.indexOf("Mozilla") != -1) {
327
+ name = "Mozilla";
328
+ }
329
+ var geckoVersionString = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
330
+
331
+ if (geckoVersionString == "") {
332
+ geckoVersionString = UserAgentParser.UNKNOWN;
333
+ } else {
334
+ if (!supportWebFont) {
335
+ var geckoVersion = this.parseVersion_(geckoVersionString);
336
+
337
+ supportWebFont = geckoVersion.major > 1 ||
338
+ geckoVersion.major == 1 && geckoVersion.minor > 9 ||
339
+ geckoVersion.major == 1 && geckoVersion.minor == 9 && geckoVersion.patch >= 2 ||
340
+ geckoVersionString.match(/1\.9\.1b[123]/) != null ||
341
+ geckoVersionString.match(/1\.9\.1\.[\d\.]+/) != null;
342
+ }
343
+ }
344
+ return new UserAgent(name, version, "Gecko", geckoVersionString,
345
+ this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new BrowserInfo(supportWebFont, false, false));
346
+ };
347
+
348
+ /**
349
+ * @private
350
+ */
351
+ UserAgentParser.prototype.parseVersion_ = function(version) {
352
+ var m = /([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+)?)?)?/.exec(version),
353
+ result = {};
354
+
355
+ if (m) {
356
+ result.major = parseInt(m[1] || -1, 10);
357
+ result.minor = parseInt(m[2] || -1, 10);
358
+ result.patch = parseInt(m[3] || -1, 10);
359
+ }
360
+ return result;
361
+ };
362
+
363
+ /**
364
+ * @private
365
+ */
366
+ UserAgentParser.prototype.getMatchingGroup_ = function(str,
367
+ regexp, index) {
368
+ var groups = str.match(regexp);
369
+
370
+ if (groups && groups[index]) {
371
+ return groups[index];
372
+ }
373
+ return "";
374
+ };
375
+
376
+ /**
377
+ * @private
378
+ */
379
+ UserAgentParser.prototype.getDocumentMode_ = function(doc) {
380
+ if (doc.documentMode) return doc.documentMode;
381
+ return undefined;
382
+ };
383
+ });