webfontloader 1.0.28 → 1.0.29

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 CHANGED
@@ -1,3 +1,11 @@
1
+ v1.0.29 (July 26, 2012)
2
+ * Added test to ensure Firefox for Android is properly detected as "Firefox" by UserAgentParser.
3
+ * Added test to ensure Opera Mobile for Android is properly detected as "Opera" by UserAgentParser.
4
+ * Changed detection so that Chrome for iOS is detected as "Chrome" instead of "Safari".
5
+ * Changed detection so that Opera Mini is correctly detected as "OperaMini" (without font support) instead of "Opera" (with font support).
6
+ * Fixed a bug in Google Web Fonts module when requesting a font family with character sets and no variations.
7
+ * Scaled back the number of fall back fonts used in the Google Web Fonts font watching code.
8
+
1
9
  v1.0.28 (June 4, 2012)
2
10
  * Added support for detecting the Chrome OS platform ("CrOS") in the UserAgentParser.
3
11
 
data/lib/webfontloader.rb CHANGED
@@ -3,7 +3,7 @@ require 'yaml'
3
3
  require 'webfontloader/modules'
4
4
 
5
5
  module WebFontLoader
6
- VERSION = '1.0.28'
6
+ VERSION = '1.0.29'
7
7
 
8
8
  ProjectRoot = File.expand_path(File.dirname(__FILE__) + "/..")
9
9
 
@@ -197,6 +197,24 @@ UserAgentTest.prototype.testBrowserIsAndroidChromeMobile = function() {
197
197
  assertTrue(userAgent.isSupportingWebFont());
198
198
  };
199
199
 
200
+ UserAgentTest.prototype.testBrowserIsAndroidFirefox = function() {
201
+ // This useragent has been slightly doctored with versions to ensure the right
202
+ // info is coming from the right places.
203
+ var userAgentParser = new webfont.UserAgentParser(
204
+ "Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/15.0 Firefox/14.0",
205
+ this.defaultDocument_);
206
+ var userAgent = userAgentParser.parse();
207
+
208
+ assertEquals("Firefox", userAgent.getName());
209
+ assertEquals("14.0", userAgent.getVersion());
210
+ assertEquals("Android", userAgent.getPlatform());
211
+ assertEquals("Unknown", userAgent.getPlatformVersion());
212
+ assertEquals("Gecko", userAgent.getEngine());
213
+ assertEquals("13.0", userAgent.getEngineVersion());
214
+ assertEquals(undefined, userAgent.getDocumentMode());
215
+ assertTrue(userAgent.isSupportingWebFont());
216
+ }
217
+
200
218
  UserAgentTest.prototype.testBrowserIsFirefoxLettersVersion = function() {
201
219
  var userAgentParser = new webfont.UserAgentParser(
202
220
  "Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.9.2a1pre) Gecko/20090405 Ubuntu/9.04 (jaunty) Firefox/3.6a1pre",
@@ -293,6 +311,45 @@ UserAgentTest.prototype.testBrowserIsOperaBeforeVersion10 = function() {
293
311
  assertFalse(userAgent.isSupportingWebFont());
294
312
  };
295
313
 
314
+ UserAgentTest.prototype.testBrowserIsOperaMobileAndroid = function() {
315
+ // For the purposes of web font support, we consider Opera Mobile to be a
316
+ // version of full Opera on mobile devices, since the support for web fonts
317
+ // follows the same version numbers as the desktop versions.
318
+ var userAgentParser = new webfont.UserAgentParser(
319
+ "Opera/9.80 (Android 4.1.1; Linux; Opera Mobi/ADR-1207201819; U; en) Presto/2.10.254 Version/12.00",
320
+ this.defaultDocument_);
321
+ var userAgent = userAgentParser.parse();
322
+
323
+ assertEquals("Opera", userAgent.getName());
324
+ assertEquals("12.00", userAgent.getVersion());
325
+ assertEquals("Android", userAgent.getPlatform());
326
+ assertEquals("4.1.1", userAgent.getPlatformVersion());
327
+ assertEquals("Presto", userAgent.getEngine());
328
+ assertEquals("2.10.254", userAgent.getEngineVersion());
329
+ assertEquals(undefined, userAgent.getDocumentMode());
330
+ assertTrue(userAgent.isSupportingWebFont());
331
+ };
332
+
333
+ UserAgentTest.prototype.testBrowserIsOperaMiniAndroid = function() {
334
+ // For the purposes of web font support, we consider Opera Mini to be a
335
+ // different browser from the full Opera, since it doesn't support web fonts
336
+ // and follows two separate versioning systems. We use the Opera Mini version
337
+ // instead of the more generic Opera version.
338
+ var userAgentParser = new webfont.UserAgentParser(
339
+ "Opera/9.80 (Android; Opera Mini/7.0.29952/28.2144; U; en) Presto/2.8.119 Version/11.10",
340
+ this.defaultDocument_);
341
+ var userAgent = userAgentParser.parse();
342
+
343
+ assertEquals("OperaMini", userAgent.getName());
344
+ assertEquals("7.0.29952", userAgent.getVersion());
345
+ assertEquals("Android", userAgent.getPlatform());
346
+ assertEquals("Unknown", userAgent.getPlatformVersion());
347
+ assertEquals("Presto", userAgent.getEngine());
348
+ assertEquals("2.8.119", userAgent.getEngineVersion());
349
+ assertEquals(undefined, userAgent.getDocumentMode());
350
+ assertFalse(userAgent.isSupportingWebFont());
351
+ }
352
+
296
353
  UserAgentTest.prototype.testBrowserIsIEOnMac = function() {
297
354
  var userAgentParser = new webfont.UserAgentParser(
298
355
  "Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)",
@@ -357,6 +414,22 @@ UserAgentTest.prototype.testBrowserIsIPadWithoutIPhone = function() {
357
414
  assertTrue(userAgent.isSupportingWebFont());
358
415
  };
359
416
 
417
+ UserAgentTest.prototype.testBrowserIsIPadChrome = function() {
418
+ var userAgentParser = new webfont.UserAgentParser(
419
+ "Mozilla/5.0 (iPad; U; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3",
420
+ this.defaultDocument_);
421
+ var userAgent = userAgentParser.parse();
422
+
423
+ assertEquals("Chrome", userAgent.getName());
424
+ assertEquals("19.0.1084.60", userAgent.getVersion());
425
+ assertEquals("iPad", userAgent.getPlatform());
426
+ assertEquals("5_1_1", userAgent.getPlatformVersion());
427
+ assertEquals("AppleWebKit", userAgent.getEngine());
428
+ assertEquals("534.46.0", userAgent.getEngineVersion());
429
+ assertEquals(undefined, userAgent.getDocumentMode());
430
+ assertTrue(userAgent.isSupportingWebFont());
431
+ }
432
+
360
433
  UserAgentTest.prototype.testBrowserIsIPod = function() {
361
434
  var userAgentParser = new webfont.UserAgentParser(
362
435
  "Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Mobile/5H11a",
@@ -389,6 +462,22 @@ UserAgentTest.prototype.testBrowserIsIPodSafari = function() {
389
462
  assertTrue(userAgent.isSupportingWebFont());
390
463
  };
391
464
 
465
+ UserAgentTest.prototype.testBrowserIsIPodChrome = function() {
466
+ var userAgentParser = new webfont.UserAgentParser(
467
+ "Mozilla/5.0 (iPod; U; CPU iPhone OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3",
468
+ this.defaultDocument_);
469
+ var userAgent = userAgentParser.parse();
470
+
471
+ assertEquals("Chrome", userAgent.getName());
472
+ assertEquals("19.0.1084.60", userAgent.getVersion());
473
+ assertEquals("iPod", userAgent.getPlatform());
474
+ assertEquals("5_1_1", userAgent.getPlatformVersion());
475
+ assertEquals("AppleWebKit", userAgent.getEngine());
476
+ assertEquals("534.46.0", userAgent.getEngineVersion());
477
+ assertEquals(undefined, userAgent.getDocumentMode());
478
+ assertTrue(userAgent.isSupportingWebFont());
479
+ }
480
+
392
481
  UserAgentTest.prototype.testBrowserIsSafariWithPlusVersion = function() {
393
482
  var userAgentParser = new webfont.UserAgentParser(
394
483
  "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; tr) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2",
@@ -37,3 +37,14 @@ FontApiUrlBuilderTest.prototype.testBuildProperUrlWithSubsets = function() {
37
37
  '?family=Font1:bold%7CFont2:italic%7CFont3' +
38
38
  '&subset=greek,cyrillic', fontApiUrlBuilder.build());
39
39
  };
40
+
41
+ FontApiUrlBuilderTest.prototype.testBuildProperUrlWithSubsetsNoVariations =
42
+ function() {
43
+ var fontApiUrlBuilder = new webfont.FontApiUrlBuilder();
44
+
45
+ fontApiUrlBuilder.setFontFamilies([ 'Font1:bold,italic:greek,cyrillic',
46
+ 'Font2:italic', 'Font3::latin' ]);
47
+ assertEquals("http:" + webfont.FontApiUrlBuilder.DEFAULT_API_URL +
48
+ '?family=Font1:bold,italic%7CFont2:italic%7CFont3' +
49
+ '&subset=greek,cyrillic,latin', fontApiUrlBuilder.build());
50
+ };
@@ -73,7 +73,7 @@ LastResortWebKitFontWatchRunnerTest.prototype.setUp = function() {
73
73
  LastResortWebKitFontWatchRunnerTest.prototype.testLastResortFontIgnored =
74
74
  function() {
75
75
  var originalSizeCount = 2;
76
- var lastResortFontsCount = 11;
76
+ var lastResortFontsCount = 5;
77
77
  var firstSize = 2;
78
78
  var secondSize = 2;
79
79
  var thirdSize = 2;
@@ -119,7 +119,7 @@ LastResortWebKitFontWatchRunnerTest.prototype.testLastResortFontActiveWhenSizeMa
119
119
  = function() {
120
120
  this.timesToGetTimeBeforeTimeout_ = 3;
121
121
  var originalSizeCount = 2;
122
- var lastResortFontsCount = 11;
122
+ var lastResortFontsCount = 5;
123
123
  var firstSize = 2;
124
124
 
125
125
  this.fontFamily_ = "Arimo";
@@ -157,7 +157,7 @@ LastResortWebKitFontWatchRunnerTest.prototype.testLastResortFontInactiveWhenSize
157
157
  = function() {
158
158
  this.timesToGetTimeBeforeTimeout_ = 3;
159
159
  var originalSizeCount = 2;
160
- var lastResortFontsCount = 11;
160
+ var lastResortFontsCount = 5;
161
161
  var firstSize = 2;
162
162
  var secondSize = 2;
163
163
  var thirdSize = 2;
@@ -153,6 +153,21 @@ webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
153
153
  engineVersion = geckoVersion;
154
154
  }
155
155
  }
156
+
157
+ // Check for Opera Mini first, since it looks like normal Opera
158
+ if (this.userAgent_.indexOf("Opera Mini/") != -1) {
159
+ var version = this.getMatchingGroup_(this.userAgent_, /Opera Mini\/([\d\.]+)/, 1);
160
+
161
+ if (version == "") {
162
+ version = webfont.UserAgentParser.UNKNOWN;
163
+ }
164
+
165
+ return new webfont.UserAgent("OperaMini", version, engineName,
166
+ engineVersion, this.getPlatform_(), this.getPlatformVersion_(),
167
+ this.getDocumentMode_(this.doc_), false);
168
+ }
169
+
170
+ // Otherwise, find version information for normal Opera or Opera Mobile
156
171
  if (this.userAgent_.indexOf("Version/") != -1) {
157
172
  var version = this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1);
158
173
 
@@ -195,7 +210,7 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
195
210
  }
196
211
  var name = webfont.UserAgentParser.UNKNOWN;
197
212
 
198
- if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1) {
213
+ if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1 || this.userAgent_.indexOf("CriOS") != -1) {
199
214
  name = "Chrome";
200
215
  } else if (this.userAgent_.indexOf("Safari") != -1) {
201
216
  name = "Safari";
@@ -209,7 +224,7 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
209
224
  /Version\/([\d\.\w]+)/, 1);
210
225
  } else if (name == "Chrome") {
211
226
  version = this.getMatchingGroup_(this.userAgent_,
212
- /(Chrome|CrMo)\/([\d\.]+)/, 2);
227
+ /(Chrome|CrMo|CriOS)\/([\d\.]+)/, 2);
213
228
  } else if (name == "AdobeAIR") {
214
229
  version = this.getMatchingGroup_(this.userAgent_,
215
230
  /AdobeAIR\/([\d\.]+)/, 1);
@@ -8,7 +8,7 @@ webfont.FontApiUrlBuilder = function(apiUrl) {
8
8
  var protocol = 'https:' == window.location.protocol ? 'https:' : 'http:';
9
9
 
10
10
  this.apiUrl_ = protocol + webfont.FontApiUrlBuilder.DEFAULT_API_URL;
11
- }
11
+ }
12
12
  this.fontFamilies_ = [];
13
13
  this.subsets_ = [];
14
14
  };
@@ -32,7 +32,11 @@ webfont.FontApiUrlBuilder.prototype.parseFontFamilies_ =
32
32
  if (elements.length == 3) {
33
33
  this.subsets_.push(elements.pop());
34
34
  }
35
- this.fontFamilies_.push(elements.join(':'));
35
+ var joinCharacter = '';
36
+ if (elements.length == 2 && elements[1] != ''){
37
+ joinCharacter = ':';
38
+ }
39
+ this.fontFamilies_.push(elements.join(joinCharacter));
36
40
  }
37
41
  };
38
42
 
@@ -38,10 +38,7 @@ webfont.LastResortWebKitFontWatchRunner.METRICS_COMPATIBLE_FONTS = {
38
38
  */
39
39
  webfont.LastResortWebKitFontWatchRunner.prototype
40
40
  .setUpWebKitLastResortFontSizes_ = function() {
41
- var lastResortFonts = ["Times New Roman",
42
- "Lucida Sans Unicode", "Courier New", "Tahoma", "Arial",
43
- "Microsoft Sans Serif", "Times", "Lucida Console", "Sans", "Serif",
44
- "Monospace"];
41
+ var lastResortFonts = ['Times New Roman', 'Arial', 'Times', 'Sans', 'Serif'];
45
42
  var lastResortFontSizes = lastResortFonts.length;
46
43
  var webKitLastResortFontSizes = {};
47
44
  var element = this.createHiddenElementWithFont_(lastResortFonts[0], true);
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'webfontloader'
16
- s.version = '1.0.28'
17
- s.date = '2012-06-04'
16
+ s.version = '1.0.29'
17
+ s.date = '2012-07-26'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
20
20
  ## as you like.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webfontloader
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
4
+ hash: 45
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 28
10
- version: 1.0.28
9
+ - 29
10
+ version: 1.0.29
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Carver
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-06-04 00:00:00 Z
19
+ date: 2012-07-26 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false