webfontloader 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
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