webfontloader 1.1.0 → 1.1.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ v1.1.1 (December 12, 2012)
2
+ * Added the ability to recognize BlackBerry devices, which have web font support (WOFF) in platform version 10+
3
+ * Added a new browser name "BuiltinBrowser" to recognize built-in browsers on mobile platforms which we previously called "Safari" (applies to Android's "Browser" app and BlackBerry's built-in browser)
4
+ * Fixed a bug in the Monotype module which caused a double active event in IE9 and no active event in IE8 (reported in issue #64)
5
+ * Fixed some typos in the demo pages
6
+
1
7
  v1.1.0 (December 5, 2012)
2
8
  * Adds the ability to load fonts into a same-origin child window or iframe using the new optional `context` configuration option (thanks to @ryanwolf of Google).
3
9
  * Updates the demos to fix broken stuff and demonstrate the new context option in action.
data/README.md CHANGED
@@ -147,6 +147,7 @@ Then, run the tests.
147
147
  * Ryan Carver / ryan@typekit.com
148
148
  * Jeremie Lenfant-engelmann / jeremiele@google.com
149
149
  * Sean McBride / sean@typekit.com
150
+ * Bram Stein / bram@typekit.com
150
151
 
151
152
 
152
153
  ## License
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.1.0'
6
+ VERSION = '1.1.1'
7
7
 
8
8
  ProjectRoot = File.expand_path(File.dirname(__FILE__) + "/..")
9
9
 
@@ -10,9 +10,9 @@
10
10
  api: '/fonts/api'
11
11
  },
12
12
  fontactive: function(familyName, fontDescription) {
13
- if (fontFamilyName == 'Droid Sans') {
13
+ if (familyName == 'Droid Sans') {
14
14
  var h1 = document.getElementsByTagName('h1')[0];
15
- h1.innerHTML = 'Hello World. I am ' + fontFamilyName + ' (' + fontDescription + ')';
15
+ h1.innerHTML = 'Hello World. I am ' + familyName + ' (' + fontDescription + ')';
16
16
  }
17
17
  }
18
18
  });
@@ -196,21 +196,36 @@ UserAgentTest.prototype.testBrowserIsIPhone = function() {
196
196
  assertTrue(userAgent.isSupportingWebFont());
197
197
  };
198
198
 
199
-
200
199
  UserAgentTest.prototype.testBrowserIsAndroid = function() {
200
+ var userAgentParser = new webfont.UserAgentParser(
201
+ "Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
202
+ this.defaultDocument_);
203
+ var userAgent = userAgentParser.parse();
204
+
205
+ assertEquals("BuiltinBrowser", userAgent.getName());
206
+ assertEquals("Unknown", userAgent.getVersion());
207
+ assertEquals("Android", userAgent.getPlatform());
208
+ assertEquals("2.2.1", userAgent.getPlatformVersion());
209
+ assertEquals("AppleWebKit", userAgent.getEngine());
210
+ assertEquals("533.1", userAgent.getEngineVersion());
211
+ assertEquals(undefined, userAgent.getDocumentMode());
212
+ assertTrue(userAgent.isSupportingWebFont());
213
+ };
214
+
215
+ UserAgentTest.prototype.testBrowserIsOldUnsupportedAndroid = function() {
201
216
  var userAgentParser = new webfont.UserAgentParser(
202
217
  "Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; Nexus One Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
203
218
  this.defaultDocument_);
204
219
  var userAgent = userAgentParser.parse();
205
220
 
206
- assertEquals("Safari", userAgent.getName());
207
- assertEquals("4.0", userAgent.getVersion());
221
+ assertEquals("BuiltinBrowser", userAgent.getName());
222
+ assertEquals("Unknown", userAgent.getVersion());
208
223
  assertEquals("Android", userAgent.getPlatform());
209
224
  assertEquals("2.1-update1", userAgent.getPlatformVersion());
210
225
  assertEquals("AppleWebKit", userAgent.getEngine());
211
226
  assertEquals("530.17", userAgent.getEngineVersion());
212
227
  assertEquals(undefined, userAgent.getDocumentMode());
213
- assertTrue(userAgent.isSupportingWebFont());
228
+ assertFalse(userAgent.isSupportingWebFont());
214
229
  };
215
230
 
216
231
  UserAgentTest.prototype.testBrowserIsAndroidChromeMobile = function() {
@@ -670,3 +685,35 @@ UserAgentTest.prototype.testBrowserGeckoHighSubVerShouldNotSupportWebFont = func
670
685
  assertEquals(undefined, userAgent.getDocumentMode());
671
686
  assertFalse(userAgent.isSupportingWebFont());
672
687
  };
688
+
689
+ UserAgentTest.prototype.testBrowserBBSupportWebfont = function() {
690
+ var userAgentParser = new webfont.UserAgentParser(
691
+ "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.3+ (KHTML, like Gecko) Version/10.0.9.388 Mobile Safari/537.3+",
692
+ this.defaultDocument_);
693
+ var userAgent = userAgentParser.parse();
694
+
695
+ assertEquals("BuiltinBrowser", userAgent.getName());
696
+ assertEquals("Unknown", userAgent.getVersion());
697
+ assertEquals("BlackBerry", userAgent.getPlatform());
698
+ assertEquals("10.0.9.388", userAgent.getPlatformVersion());
699
+ assertEquals("AppleWebKit", userAgent.getEngine());
700
+ assertEquals("537.3+", userAgent.getEngineVersion());
701
+ assertEquals(undefined, userAgent.getDocumentMode());
702
+ assertTrue(userAgent.isSupportingWebFont());
703
+ };
704
+
705
+ UserAgentTest.prototype.testBrowserBBNotSupportWebfont = function() {
706
+ var userAgentParser = new webfont.UserAgentParser(
707
+ "Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+",
708
+ this.defaultDocument_);
709
+ var userAgent = userAgentParser.parse();
710
+
711
+ assertEquals("BuiltinBrowser", userAgent.getName());
712
+ assertEquals("Unknown", userAgent.getVersion());
713
+ assertEquals("BlackBerry", userAgent.getPlatform());
714
+ assertEquals("7.1.0.346", userAgent.getPlatformVersion());
715
+ assertEquals("AppleWebKit", userAgent.getEngine());
716
+ assertEquals("534.11+", userAgent.getEngineVersion());
717
+ assertEquals(undefined, userAgent.getDocumentMode());
718
+ assertFalse(userAgent.isSupportingWebFont());
719
+ };
@@ -8,8 +8,10 @@ MonotypeScriptTest.prototype.testIfScriptTagIsAdded = function () {
8
8
  var config = { projectId: '01e2ff27-25bf-4801-a23e-73d328e6c7cc', api: "http://fast.fonts.com/jsapidev" };
9
9
 
10
10
  var fakeDomHelper = {
11
- createScriptSrc: function (s) {
12
- script = { src: s };
11
+ createElement: function () {
12
+ script = {
13
+ addEventListener: function () {}
14
+ };
13
15
  return script;
14
16
  },
15
17
  insertInto: function (tag, elem) {
@@ -67,8 +69,10 @@ MonotypeScriptTest.prototype.testIfScriptTagHasCorrectSSL = function () {
67
69
  var config = { projectId: '01e2ff27-25bf-4801-a23e-73d328e6c7cc', api: "http://fast.fonts.com/jsapidev" };
68
70
 
69
71
  var fakeDomHelper = {
70
- createScriptSrc: function (s) {
71
- script = { src: s };
72
+ createElement: function () {
73
+ script = {
74
+ addEventListener: function () {}
75
+ };
72
76
  return script;
73
77
  },
74
78
  insertInto: function (tag, elem) {
@@ -139,8 +143,10 @@ MonotypeScriptTest.prototype.testIfScriptTagIsAddedWithoutApiurl = function () {
139
143
  var config = { projectId: '01e2ff27-25bf-4801-a23e-73d328e6c7cc' };
140
144
 
141
145
  var fakeDomHelper = {
142
- createScriptSrc: function (s) {
143
- script = { src: s };
146
+ createElement: function () {
147
+ script = {
148
+ addEventListener: function () {}
149
+ };
144
150
  return script;
145
151
  },
146
152
  insertInto: function (tag, elem) {
@@ -199,8 +205,10 @@ MonotypeScriptTest.prototype.testIfScriptTagIsAddedWithoutApiurlAndTheScriptUrlH
199
205
  var config = { projectId: '01e2ff27-25bf-4801-a23e-73d328e6c7cc' };
200
206
 
201
207
  var fakeDomHelper = {
202
- createScriptSrc: function (s) {
203
- script = { src: s };
208
+ createElement: function () {
209
+ script = {
210
+ addEventListener: function () {}
211
+ };
204
212
  return script;
205
213
  },
206
214
  insertInto: function (tag, elem) {
@@ -259,8 +267,10 @@ MonotypeScriptTest.prototype.testWithoutProjectId = function () {
259
267
  var config = {};
260
268
 
261
269
  var fakeDomHelper = {
262
- createScriptSrc: function (s) {
263
- script = { src: s };
270
+ createElement: function () {
271
+ script = {
272
+ addEventListener: function () {}
273
+ };
264
274
  return script;
265
275
  },
266
276
  insertInto: function (tag, elem) {
@@ -13,6 +13,16 @@ webfont.UserAgentParser = function(userAgent, doc) {
13
13
  */
14
14
  webfont.UserAgentParser.UNKNOWN = "Unknown";
15
15
 
16
+ /**
17
+ * A constant for identifying a generic browser on a mobile platform that
18
+ * doesn't really have a name, but just came with the platform. Usually these
19
+ * are WebKit based, and examples are the default browser app on Android and
20
+ * the default browser app on BlackBerry 10.
21
+ * @const
22
+ * @type {string}
23
+ */
24
+ webfont.UserAgentParser.BUILTIN_BROWSER = "BuiltinBrowser";
25
+
16
26
  /**
17
27
  * @const
18
28
  * @type {webfont.UserAgent}
@@ -50,9 +60,12 @@ webfont.UserAgentParser.prototype.parse = function() {
50
60
  */
51
61
  webfont.UserAgentParser.prototype.getPlatform_ = function() {
52
62
  var mobileOs = this.getMatchingGroup_(this.userAgent_,
53
- /(iPod|iPad|iPhone|Android|Windows Phone)/, 1);
63
+ /(iPod|iPad|iPhone|Android|Windows Phone|BB\d{2}|BlackBerry)/, 1);
54
64
 
55
65
  if (mobileOs != "") {
66
+ if (/BB\d{2}/.test(mobileOs)) {
67
+ mobileOs = "BlackBerry";
68
+ }
56
69
  return mobileOs;
57
70
  }
58
71
  var os = this.getMatchingGroup_(this.userAgent_,
@@ -91,6 +104,11 @@ webfont.UserAgentParser.prototype.getPlatformVersion_ = function() {
91
104
  if (linuxVersion) {
92
105
  return linuxVersion;
93
106
  }
107
+ var blackBerryVersion = this.getMatchingGroup_(this.userAgent_,
108
+ /(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/, 2);
109
+ if (blackBerryVersion) {
110
+ return blackBerryVersion;
111
+ }
94
112
 
95
113
  return webfont.UserAgentParser.UNKNOWN;
96
114
  };
@@ -224,6 +242,8 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
224
242
 
225
243
  if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1 || this.userAgent_.indexOf("CriOS") != -1) {
226
244
  name = "Chrome";
245
+ } else if (platform == "BlackBerry" || platform == "Android") {
246
+ name = webfont.UserAgentParser.BUILTIN_BROWSER;
227
247
  } else if (this.userAgent_.indexOf("Safari") != -1) {
228
248
  name = "Safari";
229
249
  } else if (this.userAgent_.indexOf("AdobeAIR") != -1) {
@@ -231,7 +251,9 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
231
251
  }
232
252
  var version = webfont.UserAgentParser.UNKNOWN;
233
253
 
234
- if (this.userAgent_.indexOf("Version/") != -1) {
254
+ if (name == webfont.UserAgentParser.BUILTIN_BROWSER) {
255
+ version = webfont.UserAgentParser.UNKNOWN;
256
+ } else if (this.userAgent_.indexOf("Version/") != -1) {
235
257
  version = this.getMatchingGroup_(this.userAgent_,
236
258
  /Version\/([\d\.\w]+)/, 1);
237
259
  } else if (name == "Chrome") {
@@ -246,6 +268,10 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
246
268
  var minor = this.getMatchingGroup_(version, /\d+\.(\d+)/, 1);
247
269
  supportWebFont = this.getMajorVersion_(version) > 2 ||
248
270
  this.getMajorVersion_(version) == 2 && parseInt(minor, 10) >= 5;
271
+ } else if (platform == "BlackBerry") {
272
+ supportWebFont = parseInt(platformVersion, 10) >= 10;
273
+ } else if (platform == "Android") {
274
+ supportWebFont = parseFloat(platformVersion) > 2.1;
249
275
  } else {
250
276
  var minor = this.getMatchingGroup_(webKitVersion, /\d+\.(\d+)/, 1);
251
277
  supportWebFont = this.getMajorVersion_(webKitVersion) >= 526 ||
@@ -40,18 +40,12 @@ webfont.MonotypeScript.prototype.supportUserAgent = function (userAgent, support
40
40
  var self = this;
41
41
  var projectId = self.configuration_['projectId'];
42
42
  if (projectId) {
43
- var sc = self.domHelper_.createScriptSrc(self.getScriptSrc(projectId));
43
+ var sc = self.domHelper_.createElement("script");
44
44
  sc["id"] = webfont.MonotypeScript.SCRIPTID + projectId;
45
45
 
46
- sc["onreadystatechange"] = function (e) {
47
- if (sc["readyState"] === "loaded" || sc["readyState"] === "complete") {
48
- sc["onreadystatechange"] = null;
49
- sc["onload"](e);
50
- }
51
- };
52
-
53
46
  var loadWindow = this.domHelper_.getLoadWindow();
54
- sc["onload"] = function (e) {
47
+
48
+ function onload() {
55
49
  if (loadWindow[webfont.MonotypeScript.HOOK + projectId]) {
56
50
  var mti_fnts = loadWindow[webfont.MonotypeScript.HOOK + projectId]();
57
51
  if (mti_fnts && mti_fnts.length) {
@@ -62,8 +56,19 @@ webfont.MonotypeScript.prototype.supportUserAgent = function (userAgent, support
62
56
  }
63
57
  }
64
58
  support(userAgent.isSupportingWebFont());
59
+ }
60
+
61
+ var done = false;
62
+
63
+ sc["onload"] = sc["onreadystatechange"] = function () {
64
+ if (!done && (!this["readyState"] || this["readyState"] === "loaded" || this["readyState"] === "complete")) {
65
+ done = true;
66
+ onload();
67
+ sc["onload"] = sc["onreadystatechange"] = null;
68
+ }
65
69
  };
66
70
 
71
+ sc["src"] = self.getScriptSrc(projectId);
67
72
  this.domHelper_.insertInto('head', sc);
68
73
  }
69
74
  else {
@@ -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.1.0'
17
- s.date = '2012-12-05'
16
+ s.version = '1.1.1'
17
+ s.date = '2012-12-12'
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: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 0
10
- version: 1.1.0
9
+ - 1
10
+ version: 1.1.1
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-12-05 00:00:00 Z
19
+ date: 2012-12-12 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false