webfontloader 1.2.1 → 1.3.0
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 +5 -0
- data/docs/EVENTS.md +12 -1
- data/lib/webfontloader.rb +1 -1
- data/spec/core/font_spec.js +2 -2
- data/spec/core/fontwatcher_spec.js +14 -2
- data/spec/core/fontwatchrunner_spec.js +47 -16
- data/spec/core/useragentparser_spec.js +105 -50
- data/spec/google/lastresortwebkitfontwatchrunner_spec.js +6 -4
- data/spec/monotype/monotypescript_spec.js +1 -1
- data/spec/typekit/typekitscript_spec.js +1 -1
- data/src/core/browserinfo.js +39 -1
- data/src/core/font.js +2 -1
- data/src/core/fontwatcher.js +7 -4
- data/src/core/fontwatchrunner.js +13 -6
- data/src/core/size.js +19 -1
- data/src/core/useragentparser.js +11 -10
- data/src/typekit/typekit_script.js +1 -1
- data/webfontloader.gemspec +2 -2
- metadata +5 -5
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
v1.3.0 (February 28, 2013)
|
|
2
|
+
* New optional configuration parameter `timeout` which lets you customize the default timeout.
|
|
3
|
+
* Change the Typekit module to use `use.typekit.net` instead of `use.typekit.com`.
|
|
4
|
+
* Disable height check on OSX and iOS WebKit based browsers which suffer from a metrics bug when loading web fonts.
|
|
5
|
+
|
|
1
6
|
v1.2.1 (February 26, 2013)
|
|
2
7
|
* Fix the possibility of test strings wrapping to a new line and thereby breaking font watching.
|
|
3
8
|
* Change the FontWatchRunner to not create DOM elements until it is started.
|
data/docs/EVENTS.md
CHANGED
|
@@ -112,7 +112,18 @@ load. You can use events to gracefully degrade in this situation.
|
|
|
112
112
|
|
|
113
113
|
> The `Font Inactive` event will be triggered after 5 seconds if the font
|
|
114
114
|
fails to render. If *at least* one font succesfully renders, the `Active`
|
|
115
|
-
event will be triggered, else the `
|
|
115
|
+
event will be triggered, else the `Inactive` even will be triggered.
|
|
116
|
+
|
|
117
|
+
You can configure the timeout by using the `timeout` configuration on the
|
|
118
|
+
`WebFont.load` function.
|
|
119
|
+
|
|
120
|
+
WebFont.load({
|
|
121
|
+
timeout: 2000, // Set the timeout to two seconds
|
|
122
|
+
...
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
The timeout value should be in milliseconds, and defaults to 5 seconds if
|
|
126
|
+
not supplied.
|
|
116
127
|
|
|
117
128
|
### Browser Support
|
|
118
129
|
|
data/lib/webfontloader.rb
CHANGED
data/spec/core/font_spec.js
CHANGED
|
@@ -7,7 +7,7 @@ describe('WebFont', function () {
|
|
|
7
7
|
userAgent = null;
|
|
8
8
|
|
|
9
9
|
beforeEach(function () {
|
|
10
|
-
userAgent = new UserAgent('Firefox', '3.6', 'Gecko', '1.9.2', 'Macintosh', '10.6', undefined, new BrowserInfo(true, false));
|
|
10
|
+
userAgent = new UserAgent('Firefox', '3.6', 'Gecko', '1.9.2', 'Macintosh', '10.6', undefined, new BrowserInfo(true, false, false));
|
|
11
11
|
fontModuleLoader = new FontModuleLoader();
|
|
12
12
|
});
|
|
13
13
|
|
|
@@ -190,7 +190,7 @@ describe('WebFont', function () {
|
|
|
190
190
|
testModule = null;
|
|
191
191
|
|
|
192
192
|
beforeEach(function () {
|
|
193
|
-
font = new WebFont(window, fontModuleLoader, function (func, timeout) { func(); }, new UserAgent('Firefox', '3.6', 'Gecko', '1.9.2', 'Macintosh', '10.6', undefined, new BrowserInfo(false, false)));
|
|
193
|
+
font = new WebFont(window, fontModuleLoader, function (func, timeout) { func(); }, new UserAgent('Firefox', '3.6', 'Gecko', '1.9.2', 'Macintosh', '10.6', undefined, new BrowserInfo(false, false, false)));
|
|
194
194
|
font.addModule('test', function (conf, domHelper) {
|
|
195
195
|
testModule = new function () {
|
|
196
196
|
this.conf = conf;
|
|
@@ -6,13 +6,15 @@ describe('FontWatcher', function () {
|
|
|
6
6
|
domHelper = new DomHelper(window),
|
|
7
7
|
eventDispatcher = {},
|
|
8
8
|
testStrings = null,
|
|
9
|
+
timeout = null,
|
|
9
10
|
userAgent = null,
|
|
10
11
|
activeFontFamilies = [];
|
|
11
12
|
|
|
12
13
|
beforeEach(function () {
|
|
13
|
-
userAgent = new UserAgent('Firefox', '3.6', 'Gecko', '1.9.3', 'Macintosh', '10.6', undefined, new BrowserInfo(true, false));
|
|
14
|
+
userAgent = new UserAgent('Firefox', '3.6', 'Gecko', '1.9.3', 'Macintosh', '10.6', undefined, new BrowserInfo(true, false, false));
|
|
14
15
|
activeFontFamilies = [];
|
|
15
16
|
testStrings = jasmine.createSpy('testStrings');
|
|
17
|
+
timeout = jasmine.createSpy('timeout');
|
|
16
18
|
eventDispatcher.dispatchLoading = jasmine.createSpy('dispatchLoading');
|
|
17
19
|
eventDispatcher.dispatchFontLoading = jasmine.createSpy('dispatchFontLoading');
|
|
18
20
|
eventDispatcher.dispatchFontActive = jasmine.createSpy('dispatchFontActive');
|
|
@@ -22,11 +24,12 @@ describe('FontWatcher', function () {
|
|
|
22
24
|
});
|
|
23
25
|
|
|
24
26
|
function FakeFontWatchRunner(activeCallback, inactiveCallback, domHelper, fontSizer, asyncCall, getTime,
|
|
25
|
-
fontFamily, fontDescription, hasWebKitFallbackBug, opt_metricCompatibleFonts, opt_fontTestString) {
|
|
27
|
+
fontFamily, fontDescription, hasWebKitFallbackBug, opt_timeout, opt_metricCompatibleFonts, opt_fontTestString) {
|
|
26
28
|
this.activeCallback = activeCallback;
|
|
27
29
|
this.inactiveCallback = inactiveCallback;
|
|
28
30
|
this.fontFamily = fontFamily;
|
|
29
31
|
this.fontDescription = fontDescription;
|
|
32
|
+
timeout(opt_timeout);
|
|
30
33
|
|
|
31
34
|
if (opt_fontTestString) {
|
|
32
35
|
testStrings(opt_fontTestString);
|
|
@@ -201,4 +204,13 @@ describe('FontWatcher', function () {
|
|
|
201
204
|
expect(testStrings).toHaveBeenCalledWith('testString2');
|
|
202
205
|
});
|
|
203
206
|
});
|
|
207
|
+
|
|
208
|
+
it('should pass on the timeout to FontWatchRunner', function () {
|
|
209
|
+
var fontWatcher = new FontWatcher(userAgent, domHelper, eventDispatcher, jasmine.createSpy('fakeFontSizer'),
|
|
210
|
+
jasmine.createSpy('fakeAsyncCall'), jasmine.createSpy('fakeGetTime'), 4000);
|
|
211
|
+
|
|
212
|
+
fontWatcher.watch(['fontFamily1'], {}, {}, FakeFontWatchRunner, true);
|
|
213
|
+
|
|
214
|
+
expect(timeout).toHaveBeenCalledWith(4000);
|
|
215
|
+
});
|
|
204
216
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
describe('FontWatchRunner', function () {
|
|
2
2
|
var FontWatchRunner = webfont.FontWatchRunner,
|
|
3
|
+
BrowserInfo = webfont.BrowserInfo,
|
|
3
4
|
UserAgentParser = webfont.UserAgentParser,
|
|
4
5
|
Size = webfont.Size,
|
|
5
6
|
DomHelper = webfont.DomHelper,
|
|
@@ -14,6 +15,7 @@ describe('FontWatchRunner', function () {
|
|
|
14
15
|
FALLBACK_SIZE_B = new Size(2, 2),
|
|
15
16
|
LAST_RESORT_SIZE = new Size(4, 4),
|
|
16
17
|
|
|
18
|
+
browserInfo = new BrowserInfo(true, false, false),
|
|
17
19
|
setupSizes = [FALLBACK_SIZE_A, FALLBACK_SIZE_B, LAST_RESORT_SIZE],
|
|
18
20
|
actualSizes = [],
|
|
19
21
|
fakeGetSizeCount = 0,
|
|
@@ -85,7 +87,7 @@ describe('FontWatchRunner', function () {
|
|
|
85
87
|
];
|
|
86
88
|
|
|
87
89
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
88
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
90
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
89
91
|
|
|
90
92
|
fontWatchRunner.start();
|
|
91
93
|
|
|
@@ -102,7 +104,7 @@ describe('FontWatchRunner', function () {
|
|
|
102
104
|
];
|
|
103
105
|
|
|
104
106
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
105
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
107
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
106
108
|
|
|
107
109
|
fontWatchRunner.start();
|
|
108
110
|
expect(asyncCount).toEqual(3);
|
|
@@ -121,7 +123,7 @@ describe('FontWatchRunner', function () {
|
|
|
121
123
|
];
|
|
122
124
|
|
|
123
125
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
124
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
126
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
125
127
|
|
|
126
128
|
fontWatchRunner.start();
|
|
127
129
|
|
|
@@ -130,6 +132,12 @@ describe('FontWatchRunner', function () {
|
|
|
130
132
|
});
|
|
131
133
|
|
|
132
134
|
describe('WebKit fallback bug', function () {
|
|
135
|
+
var fallbackBugBrowserInfo = null;
|
|
136
|
+
|
|
137
|
+
beforeEach(function () {
|
|
138
|
+
fallbackBugBrowserInfo = new BrowserInfo(true, true, false);
|
|
139
|
+
});
|
|
140
|
+
|
|
133
141
|
it('should ignore fallback size and call active', function () {
|
|
134
142
|
actualSizes = [
|
|
135
143
|
LAST_RESORT_SIZE, LAST_RESORT_SIZE,
|
|
@@ -137,7 +145,7 @@ describe('FontWatchRunner', function () {
|
|
|
137
145
|
];
|
|
138
146
|
|
|
139
147
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
140
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
148
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, fallbackBugBrowserInfo);
|
|
141
149
|
|
|
142
150
|
fontWatchRunner.start();
|
|
143
151
|
|
|
@@ -154,7 +162,7 @@ describe('FontWatchRunner', function () {
|
|
|
154
162
|
timesToGetTimeBeforeTimeout = 2;
|
|
155
163
|
|
|
156
164
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
157
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
165
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, fallbackBugBrowserInfo);
|
|
158
166
|
|
|
159
167
|
fontWatchRunner.start();
|
|
160
168
|
|
|
@@ -172,7 +180,7 @@ describe('FontWatchRunner', function () {
|
|
|
172
180
|
timesToGetTimeBeforeTimeout = 3;
|
|
173
181
|
|
|
174
182
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
175
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
183
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, fallbackBugBrowserInfo);
|
|
176
184
|
|
|
177
185
|
fontWatchRunner.start();
|
|
178
186
|
|
|
@@ -189,8 +197,8 @@ describe('FontWatchRunner', function () {
|
|
|
189
197
|
timesToGetTimeBeforeTimeout = 2;
|
|
190
198
|
|
|
191
199
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
192
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
193
|
-
{ 'My Other Family': true });
|
|
200
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, fallbackBugBrowserInfo,
|
|
201
|
+
0, { 'My Other Family': true });
|
|
194
202
|
|
|
195
203
|
fontWatchRunner.start();
|
|
196
204
|
expect(asyncCount).toEqual(1);
|
|
@@ -206,8 +214,8 @@ describe('FontWatchRunner', function () {
|
|
|
206
214
|
timesToGetTimeBeforeTimeout = 2;
|
|
207
215
|
|
|
208
216
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
209
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
210
|
-
{ 'My Family': true });
|
|
217
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, fallbackBugBrowserInfo,
|
|
218
|
+
0, { 'My Family': true });
|
|
211
219
|
|
|
212
220
|
fontWatchRunner.start();
|
|
213
221
|
expect(asyncCount).toEqual(1);
|
|
@@ -215,6 +223,24 @@ describe('FontWatchRunner', function () {
|
|
|
215
223
|
});
|
|
216
224
|
});
|
|
217
225
|
|
|
226
|
+
describe('webkit metrics bug', function () {
|
|
227
|
+
it('should correctly call active even though the height is different', function () {
|
|
228
|
+
actualSizes = [
|
|
229
|
+
FALLBACK_SIZE_A, FALLBACK_SIZE_B,
|
|
230
|
+
new Size(1, 2), new Size(2, 3), // Same as FALLBACK_SIZE_A and FALLBACK_SIZE_B except that the height is different.
|
|
231
|
+
TARGET_SIZE, TARGET_SIZE
|
|
232
|
+
];
|
|
233
|
+
|
|
234
|
+
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
235
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, new BrowserInfo(true, false, true));
|
|
236
|
+
|
|
237
|
+
fontWatchRunner.start();
|
|
238
|
+
|
|
239
|
+
expect(asyncCount).toEqual(2);
|
|
240
|
+
expect(activeCallback).toHaveBeenCalledWith('My Family', 'n4');
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
218
244
|
describe('real browser testing', function () {
|
|
219
245
|
var fontSizer = null,
|
|
220
246
|
asyncCall = null,
|
|
@@ -243,7 +269,8 @@ describe('FontWatchRunner', function () {
|
|
|
243
269
|
|
|
244
270
|
it('should fail to load a null font', function () {
|
|
245
271
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
246
|
-
domHelper, fontSizer, asyncCall, getTime, '__webfontloader_test__', '',
|
|
272
|
+
domHelper, fontSizer, asyncCall, getTime, '__webfontloader_test__', '',
|
|
273
|
+
userAgent.getBrowserInfo(), 500);
|
|
247
274
|
|
|
248
275
|
runs(function () {
|
|
249
276
|
fontWatchRunner.start();
|
|
@@ -260,7 +287,8 @@ describe('FontWatchRunner', function () {
|
|
|
260
287
|
|
|
261
288
|
it('should load font succesfully', function () {
|
|
262
289
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
263
|
-
domHelper, fontSizer, asyncCall, getTime, 'SourceSansA', '',
|
|
290
|
+
domHelper, fontSizer, asyncCall, getTime, 'SourceSansA', '',
|
|
291
|
+
userAgent.getBrowserInfo(), 500),
|
|
264
292
|
ruler = new FontRuler(domHelper, fontSizer, 'abcdef'),
|
|
265
293
|
activeSize = null,
|
|
266
294
|
originalSize = null,
|
|
@@ -300,7 +328,8 @@ describe('FontWatchRunner', function () {
|
|
|
300
328
|
|
|
301
329
|
it('should attempt to load a non-existing font', function () {
|
|
302
330
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
303
|
-
domHelper, fontSizer, asyncCall, getTime, 'Elena', '',
|
|
331
|
+
domHelper, fontSizer, asyncCall, getTime, 'Elena', '',
|
|
332
|
+
userAgent.getBrowserInfo(), 500);
|
|
304
333
|
|
|
305
334
|
runs(function () {
|
|
306
335
|
fontWatchRunner.start();
|
|
@@ -317,7 +346,8 @@ describe('FontWatchRunner', function () {
|
|
|
317
346
|
|
|
318
347
|
it('should load even if @font-face is inserted after watching has started', function () {
|
|
319
348
|
var fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
320
|
-
domHelper, fontSizer, asyncCall, getTime, 'SourceSansB', '',
|
|
349
|
+
domHelper, fontSizer, asyncCall, getTime, 'SourceSansB', '',
|
|
350
|
+
userAgent.getBrowserInfo(), 500),
|
|
321
351
|
ruler = new FontRuler(domHelper, fontSizer, 'abcdef'),
|
|
322
352
|
activeSize = null,
|
|
323
353
|
originalSize = null,
|
|
@@ -375,7 +405,7 @@ describe('FontWatchRunner', function () {
|
|
|
375
405
|
];
|
|
376
406
|
|
|
377
407
|
fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
378
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
408
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
379
409
|
|
|
380
410
|
fontWatchRunner.start();
|
|
381
411
|
|
|
@@ -388,7 +418,8 @@ describe('FontWatchRunner', function () {
|
|
|
388
418
|
];
|
|
389
419
|
|
|
390
420
|
fontWatchRunner = new FontWatchRunner(activeCallback, inactiveCallback,
|
|
391
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily,
|
|
421
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily,
|
|
422
|
+
fontDescription, browserInfo, 0, {}, 'TestString');
|
|
392
423
|
|
|
393
424
|
fontWatchRunner.start();
|
|
394
425
|
|
|
@@ -58,6 +58,11 @@ describe('UserAgentParser', function () {
|
|
|
58
58
|
return false;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
if (actual.getBrowserInfo().hasWebKitMetricsBug() !== expected.browserInfo.hasWebKitMetricsBug) {
|
|
62
|
+
this.message = msg('web kit metrics bug', actual.getBrowserInfo().hasWebKitMetricsBug(), expected.browserInfo.hasWebKitFallbackBug);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
|
|
61
66
|
return true;
|
|
62
67
|
}
|
|
63
68
|
});
|
|
@@ -81,7 +86,8 @@ describe('UserAgentParser', function () {
|
|
|
81
86
|
documentMode: undefined,
|
|
82
87
|
browserInfo: {
|
|
83
88
|
hasWebFontSupport: true,
|
|
84
|
-
hasWebKitFallbackBug: true
|
|
89
|
+
hasWebKitFallbackBug: true,
|
|
90
|
+
hasWebKitMetricsBug: true
|
|
85
91
|
}
|
|
86
92
|
});
|
|
87
93
|
});
|
|
@@ -98,7 +104,8 @@ describe('UserAgentParser', function () {
|
|
|
98
104
|
documentMode: undefined,
|
|
99
105
|
browserInfo: {
|
|
100
106
|
hasWebFontSupport: false,
|
|
101
|
-
hasWebKitFallbackBug: true
|
|
107
|
+
hasWebKitFallbackBug: true,
|
|
108
|
+
hasWebKitMetricsBug: true
|
|
102
109
|
}
|
|
103
110
|
});
|
|
104
111
|
});
|
|
@@ -117,7 +124,8 @@ describe('UserAgentParser', function () {
|
|
|
117
124
|
documentMode: undefined,
|
|
118
125
|
browserInfo: {
|
|
119
126
|
hasWebFontSupport: true,
|
|
120
|
-
hasWebKitFallbackBug: false
|
|
127
|
+
hasWebKitFallbackBug: false,
|
|
128
|
+
hasWebKitMetricsBug: false
|
|
121
129
|
}
|
|
122
130
|
});
|
|
123
131
|
|
|
@@ -132,7 +140,8 @@ describe('UserAgentParser', function () {
|
|
|
132
140
|
documentMode: undefined,
|
|
133
141
|
browserInfo: {
|
|
134
142
|
hasWebFontSupport: true,
|
|
135
|
-
hasWebKitFallbackBug: false
|
|
143
|
+
hasWebKitFallbackBug: false,
|
|
144
|
+
hasWebKitMetricsBug: false
|
|
136
145
|
}
|
|
137
146
|
});
|
|
138
147
|
});
|
|
@@ -149,7 +158,8 @@ describe('UserAgentParser', function () {
|
|
|
149
158
|
documentMode: undefined,
|
|
150
159
|
browserInfo: {
|
|
151
160
|
hasWebFontSupport: true,
|
|
152
|
-
hasWebKitFallbackBug: false
|
|
161
|
+
hasWebKitFallbackBug: false,
|
|
162
|
+
hasWebKitMetricsBug: false
|
|
153
163
|
}
|
|
154
164
|
});
|
|
155
165
|
});
|
|
@@ -168,7 +178,8 @@ describe('UserAgentParser', function () {
|
|
|
168
178
|
documentMode: undefined,
|
|
169
179
|
browserInfo: {
|
|
170
180
|
hasWebFontSupport: true,
|
|
171
|
-
hasWebKitFallbackBug: false
|
|
181
|
+
hasWebKitFallbackBug: false,
|
|
182
|
+
hasWebKitMetricsBug: false
|
|
172
183
|
}
|
|
173
184
|
});
|
|
174
185
|
});
|
|
@@ -185,7 +196,8 @@ describe('UserAgentParser', function () {
|
|
|
185
196
|
documentMode: undefined,
|
|
186
197
|
browserInfo: {
|
|
187
198
|
hasWebFontSupport: false,
|
|
188
|
-
hasWebKitFallbackBug: false
|
|
199
|
+
hasWebKitFallbackBug: false,
|
|
200
|
+
hasWebKitMetricsBug: false
|
|
189
201
|
}
|
|
190
202
|
});
|
|
191
203
|
});
|
|
@@ -204,7 +216,8 @@ describe('UserAgentParser', function () {
|
|
|
204
216
|
documentMode: undefined,
|
|
205
217
|
browserInfo: {
|
|
206
218
|
hasWebFontSupport: true,
|
|
207
|
-
hasWebKitFallbackBug: true
|
|
219
|
+
hasWebKitFallbackBug: true,
|
|
220
|
+
hasWebKitMetricsBug: true
|
|
208
221
|
}
|
|
209
222
|
});
|
|
210
223
|
});
|
|
@@ -221,7 +234,8 @@ describe('UserAgentParser', function () {
|
|
|
221
234
|
documentMode: undefined,
|
|
222
235
|
browserInfo: {
|
|
223
236
|
hasWebFontSupport: true,
|
|
224
|
-
hasWebKitFallbackBug: true
|
|
237
|
+
hasWebKitFallbackBug: true,
|
|
238
|
+
hasWebKitMetricsBug: false
|
|
225
239
|
}
|
|
226
240
|
});
|
|
227
241
|
});
|
|
@@ -238,7 +252,8 @@ describe('UserAgentParser', function () {
|
|
|
238
252
|
documentMode: undefined,
|
|
239
253
|
browserInfo: {
|
|
240
254
|
hasWebFontSupport: true,
|
|
241
|
-
hasWebKitFallbackBug: true
|
|
255
|
+
hasWebKitFallbackBug: true,
|
|
256
|
+
hasWebKitMetricsBug: false
|
|
242
257
|
}
|
|
243
258
|
});
|
|
244
259
|
});
|
|
@@ -255,7 +270,8 @@ describe('UserAgentParser', function () {
|
|
|
255
270
|
documentMode: undefined,
|
|
256
271
|
browserInfo: {
|
|
257
272
|
hasWebFontSupport: true,
|
|
258
|
-
hasWebKitFallbackBug: true
|
|
273
|
+
hasWebKitFallbackBug: true,
|
|
274
|
+
hasWebKitMetricsBug: true
|
|
259
275
|
}
|
|
260
276
|
});
|
|
261
277
|
});
|
|
@@ -272,7 +288,8 @@ describe('UserAgentParser', function () {
|
|
|
272
288
|
documentMode: undefined,
|
|
273
289
|
browserInfo: {
|
|
274
290
|
hasWebFontSupport: true,
|
|
275
|
-
hasWebKitFallbackBug: true
|
|
291
|
+
hasWebKitFallbackBug: true,
|
|
292
|
+
hasWebKitMetricsBug: true
|
|
276
293
|
}
|
|
277
294
|
});
|
|
278
295
|
});
|
|
@@ -291,7 +308,8 @@ describe('UserAgentParser', function () {
|
|
|
291
308
|
documentMode: undefined,
|
|
292
309
|
browserInfo: {
|
|
293
310
|
hasWebFontSupport: true,
|
|
294
|
-
hasWebKitFallbackBug: true
|
|
311
|
+
hasWebKitFallbackBug: true,
|
|
312
|
+
hasWebKitMetricsBug: true
|
|
295
313
|
}
|
|
296
314
|
});
|
|
297
315
|
|
|
@@ -306,7 +324,8 @@ describe('UserAgentParser', function () {
|
|
|
306
324
|
documentMode: undefined,
|
|
307
325
|
browserInfo: {
|
|
308
326
|
hasWebFontSupport: true,
|
|
309
|
-
hasWebKitFallbackBug: true
|
|
327
|
+
hasWebKitFallbackBug: true,
|
|
328
|
+
hasWebKitMetricsBug: true
|
|
310
329
|
}
|
|
311
330
|
});
|
|
312
331
|
});
|
|
@@ -323,7 +342,8 @@ describe('UserAgentParser', function () {
|
|
|
323
342
|
documentMode: undefined,
|
|
324
343
|
browserInfo: {
|
|
325
344
|
hasWebFontSupport: true,
|
|
326
|
-
hasWebKitFallbackBug: true
|
|
345
|
+
hasWebKitFallbackBug: true,
|
|
346
|
+
hasWebKitMetricsBug: true
|
|
327
347
|
}
|
|
328
348
|
});
|
|
329
349
|
});
|
|
@@ -340,7 +360,8 @@ describe('UserAgentParser', function () {
|
|
|
340
360
|
documentMode: undefined,
|
|
341
361
|
browserInfo: {
|
|
342
362
|
hasWebFontSupport: true,
|
|
343
|
-
hasWebKitFallbackBug: true
|
|
363
|
+
hasWebKitFallbackBug: true,
|
|
364
|
+
hasWebKitMetricsBug: true
|
|
344
365
|
}
|
|
345
366
|
});
|
|
346
367
|
|
|
@@ -355,7 +376,8 @@ describe('UserAgentParser', function () {
|
|
|
355
376
|
documentMode: undefined,
|
|
356
377
|
browserInfo: {
|
|
357
378
|
hasWebFontSupport: true,
|
|
358
|
-
hasWebKitFallbackBug: true
|
|
379
|
+
hasWebKitFallbackBug: true,
|
|
380
|
+
hasWebKitMetricsBug: true
|
|
359
381
|
}
|
|
360
382
|
});
|
|
361
383
|
|
|
@@ -370,7 +392,8 @@ describe('UserAgentParser', function () {
|
|
|
370
392
|
documentMode: undefined,
|
|
371
393
|
browserInfo: {
|
|
372
394
|
hasWebFontSupport: true,
|
|
373
|
-
hasWebKitFallbackBug: true
|
|
395
|
+
hasWebKitFallbackBug: true,
|
|
396
|
+
hasWebKitMetricsBug: true
|
|
374
397
|
}
|
|
375
398
|
});
|
|
376
399
|
});
|
|
@@ -387,7 +410,8 @@ describe('UserAgentParser', function () {
|
|
|
387
410
|
documentMode: undefined,
|
|
388
411
|
browserInfo: {
|
|
389
412
|
hasWebFontSupport: true,
|
|
390
|
-
hasWebKitFallbackBug: true
|
|
413
|
+
hasWebKitFallbackBug: true,
|
|
414
|
+
hasWebKitMetricsBug: true
|
|
391
415
|
}
|
|
392
416
|
});
|
|
393
417
|
|
|
@@ -402,7 +426,8 @@ describe('UserAgentParser', function () {
|
|
|
402
426
|
documentMode: undefined,
|
|
403
427
|
browserInfo: {
|
|
404
428
|
hasWebFontSupport: true,
|
|
405
|
-
hasWebKitFallbackBug: true
|
|
429
|
+
hasWebKitFallbackBug: true,
|
|
430
|
+
hasWebKitMetricsBug: true
|
|
406
431
|
}
|
|
407
432
|
});
|
|
408
433
|
});
|
|
@@ -421,7 +446,8 @@ describe('UserAgentParser', function () {
|
|
|
421
446
|
documentMode: undefined,
|
|
422
447
|
browserInfo: {
|
|
423
448
|
hasWebFontSupport: true,
|
|
424
|
-
hasWebKitFallbackBug: false
|
|
449
|
+
hasWebKitFallbackBug: false,
|
|
450
|
+
hasWebKitMetricsBug: false
|
|
425
451
|
}
|
|
426
452
|
});
|
|
427
453
|
|
|
@@ -436,7 +462,8 @@ describe('UserAgentParser', function () {
|
|
|
436
462
|
documentMode: undefined,
|
|
437
463
|
browserInfo: {
|
|
438
464
|
hasWebFontSupport: true,
|
|
439
|
-
hasWebKitFallbackBug: false
|
|
465
|
+
hasWebKitFallbackBug: false,
|
|
466
|
+
hasWebKitMetricsBug: false
|
|
440
467
|
}
|
|
441
468
|
});
|
|
442
469
|
});
|
|
@@ -453,7 +480,8 @@ describe('UserAgentParser', function () {
|
|
|
453
480
|
documentMode: undefined,
|
|
454
481
|
browserInfo: {
|
|
455
482
|
hasWebFontSupport: true,
|
|
456
|
-
hasWebKitFallbackBug: false
|
|
483
|
+
hasWebKitFallbackBug: false,
|
|
484
|
+
hasWebKitMetricsBug: false
|
|
457
485
|
}
|
|
458
486
|
});
|
|
459
487
|
});
|
|
@@ -470,7 +498,8 @@ describe('UserAgentParser', function () {
|
|
|
470
498
|
documentMode: undefined,
|
|
471
499
|
browserInfo: {
|
|
472
500
|
hasWebFontSupport: true,
|
|
473
|
-
hasWebKitFallbackBug: false
|
|
501
|
+
hasWebKitFallbackBug: false,
|
|
502
|
+
hasWebKitMetricsBug: false
|
|
474
503
|
}
|
|
475
504
|
});
|
|
476
505
|
});
|
|
@@ -487,7 +516,8 @@ describe('UserAgentParser', function () {
|
|
|
487
516
|
documentMode: undefined,
|
|
488
517
|
browserInfo: {
|
|
489
518
|
hasWebFontSupport: false,
|
|
490
|
-
hasWebKitFallbackBug: false
|
|
519
|
+
hasWebKitFallbackBug: false,
|
|
520
|
+
hasWebKitMetricsBug: false
|
|
491
521
|
}
|
|
492
522
|
});
|
|
493
523
|
});
|
|
@@ -504,7 +534,8 @@ describe('UserAgentParser', function () {
|
|
|
504
534
|
documentMode: undefined,
|
|
505
535
|
browserInfo: {
|
|
506
536
|
hasWebFontSupport: false,
|
|
507
|
-
hasWebKitFallbackBug: false
|
|
537
|
+
hasWebKitFallbackBug: false,
|
|
538
|
+
hasWebKitMetricsBug: false
|
|
508
539
|
}
|
|
509
540
|
});
|
|
510
541
|
});
|
|
@@ -521,7 +552,8 @@ describe('UserAgentParser', function () {
|
|
|
521
552
|
documentMode: 8,
|
|
522
553
|
browserInfo: {
|
|
523
554
|
hasWebFontSupport: true,
|
|
524
|
-
hasWebKitFallbackBug: false
|
|
555
|
+
hasWebKitFallbackBug: false,
|
|
556
|
+
hasWebKitMetricsBug: false
|
|
525
557
|
}
|
|
526
558
|
});
|
|
527
559
|
});
|
|
@@ -540,7 +572,8 @@ describe('UserAgentParser', function () {
|
|
|
540
572
|
documentMode: undefined,
|
|
541
573
|
browserInfo: {
|
|
542
574
|
hasWebFontSupport: true,
|
|
543
|
-
hasWebKitFallbackBug: true
|
|
575
|
+
hasWebKitFallbackBug: true,
|
|
576
|
+
hasWebKitMetricsBug: false
|
|
544
577
|
}
|
|
545
578
|
});
|
|
546
579
|
});
|
|
@@ -557,7 +590,8 @@ describe('UserAgentParser', function () {
|
|
|
557
590
|
documentMode: undefined,
|
|
558
591
|
browserInfo: {
|
|
559
592
|
hasWebFontSupport: false,
|
|
560
|
-
hasWebKitFallbackBug: true
|
|
593
|
+
hasWebKitFallbackBug: true,
|
|
594
|
+
hasWebKitMetricsBug: false
|
|
561
595
|
}
|
|
562
596
|
});
|
|
563
597
|
});
|
|
@@ -574,7 +608,8 @@ describe('UserAgentParser', function () {
|
|
|
574
608
|
documentMode: undefined,
|
|
575
609
|
browserInfo: {
|
|
576
610
|
hasWebFontSupport: true,
|
|
577
|
-
hasWebKitFallbackBug: true
|
|
611
|
+
hasWebKitFallbackBug: true,
|
|
612
|
+
hasWebKitMetricsBug: false
|
|
578
613
|
}
|
|
579
614
|
});
|
|
580
615
|
});
|
|
@@ -591,7 +626,8 @@ describe('UserAgentParser', function () {
|
|
|
591
626
|
documentMode: undefined,
|
|
592
627
|
browserInfo: {
|
|
593
628
|
hasWebFontSupport: true,
|
|
594
|
-
hasWebKitFallbackBug: true
|
|
629
|
+
hasWebKitFallbackBug: true,
|
|
630
|
+
hasWebKitMetricsBug: false
|
|
595
631
|
}
|
|
596
632
|
});
|
|
597
633
|
});
|
|
@@ -608,7 +644,8 @@ describe('UserAgentParser', function () {
|
|
|
608
644
|
documentMode: undefined,
|
|
609
645
|
browserInfo: {
|
|
610
646
|
hasWebFontSupport: true,
|
|
611
|
-
hasWebKitFallbackBug: true
|
|
647
|
+
hasWebKitFallbackBug: true,
|
|
648
|
+
hasWebKitMetricsBug: false
|
|
612
649
|
}
|
|
613
650
|
});
|
|
614
651
|
});
|
|
@@ -625,7 +662,8 @@ describe('UserAgentParser', function () {
|
|
|
625
662
|
documentMode: undefined,
|
|
626
663
|
browserInfo: {
|
|
627
664
|
hasWebFontSupport: true,
|
|
628
|
-
hasWebKitFallbackBug: true
|
|
665
|
+
hasWebKitFallbackBug: true,
|
|
666
|
+
hasWebKitMetricsBug: false
|
|
629
667
|
}
|
|
630
668
|
});
|
|
631
669
|
});
|
|
@@ -642,7 +680,8 @@ describe('UserAgentParser', function () {
|
|
|
642
680
|
documentMode: undefined,
|
|
643
681
|
browserInfo: {
|
|
644
682
|
hasWebFontSupport: true,
|
|
645
|
-
hasWebKitFallbackBug: false
|
|
683
|
+
hasWebKitFallbackBug: false,
|
|
684
|
+
hasWebKitMetricsBug: false
|
|
646
685
|
}
|
|
647
686
|
});
|
|
648
687
|
});
|
|
@@ -659,7 +698,8 @@ describe('UserAgentParser', function () {
|
|
|
659
698
|
documentMode: undefined,
|
|
660
699
|
browserInfo: {
|
|
661
700
|
hasWebFontSupport: false,
|
|
662
|
-
hasWebKitFallbackBug: true
|
|
701
|
+
hasWebKitFallbackBug: true,
|
|
702
|
+
hasWebKitMetricsBug: false
|
|
663
703
|
}
|
|
664
704
|
});
|
|
665
705
|
});
|
|
@@ -678,7 +718,8 @@ describe('UserAgentParser', function () {
|
|
|
678
718
|
documentMode: undefined,
|
|
679
719
|
browserInfo: {
|
|
680
720
|
hasWebFontSupport: true,
|
|
681
|
-
hasWebKitFallbackBug: false
|
|
721
|
+
hasWebKitFallbackBug: false,
|
|
722
|
+
hasWebKitMetricsBug: false
|
|
682
723
|
}
|
|
683
724
|
});
|
|
684
725
|
});
|
|
@@ -695,7 +736,8 @@ describe('UserAgentParser', function () {
|
|
|
695
736
|
documentMode: undefined,
|
|
696
737
|
browserInfo: {
|
|
697
738
|
hasWebFontSupport: false,
|
|
698
|
-
hasWebKitFallbackBug: false
|
|
739
|
+
hasWebKitFallbackBug: false,
|
|
740
|
+
hasWebKitMetricsBug: false
|
|
699
741
|
}
|
|
700
742
|
});
|
|
701
743
|
});
|
|
@@ -712,7 +754,8 @@ describe('UserAgentParser', function () {
|
|
|
712
754
|
documentMode: undefined,
|
|
713
755
|
browserInfo: {
|
|
714
756
|
hasWebFontSupport: false,
|
|
715
|
-
hasWebKitFallbackBug: false
|
|
757
|
+
hasWebKitFallbackBug: false,
|
|
758
|
+
hasWebKitMetricsBug: false
|
|
716
759
|
}
|
|
717
760
|
});
|
|
718
761
|
});
|
|
@@ -729,7 +772,8 @@ describe('UserAgentParser', function () {
|
|
|
729
772
|
documentMode: undefined,
|
|
730
773
|
browserInfo: {
|
|
731
774
|
hasWebFontSupport: true,
|
|
732
|
-
hasWebKitFallbackBug: false
|
|
775
|
+
hasWebKitFallbackBug: false,
|
|
776
|
+
hasWebKitMetricsBug: false
|
|
733
777
|
}
|
|
734
778
|
});
|
|
735
779
|
});
|
|
@@ -746,7 +790,8 @@ describe('UserAgentParser', function () {
|
|
|
746
790
|
documentMode: undefined,
|
|
747
791
|
browserInfo: {
|
|
748
792
|
hasWebFontSupport: false,
|
|
749
|
-
hasWebKitFallbackBug: false
|
|
793
|
+
hasWebKitFallbackBug: false,
|
|
794
|
+
hasWebKitMetricsBug: false
|
|
750
795
|
}
|
|
751
796
|
});
|
|
752
797
|
});
|
|
@@ -765,7 +810,8 @@ describe('UserAgentParser', function () {
|
|
|
765
810
|
documentMode: undefined,
|
|
766
811
|
browserInfo: {
|
|
767
812
|
hasWebFontSupport: true,
|
|
768
|
-
hasWebKitFallbackBug: true
|
|
813
|
+
hasWebKitFallbackBug: true,
|
|
814
|
+
hasWebKitMetricsBug: false
|
|
769
815
|
}
|
|
770
816
|
});
|
|
771
817
|
});
|
|
@@ -782,7 +828,8 @@ describe('UserAgentParser', function () {
|
|
|
782
828
|
documentMode: undefined,
|
|
783
829
|
browserInfo: {
|
|
784
830
|
hasWebFontSupport: true,
|
|
785
|
-
hasWebKitFallbackBug: false
|
|
831
|
+
hasWebKitFallbackBug: false,
|
|
832
|
+
hasWebKitMetricsBug: false
|
|
786
833
|
}
|
|
787
834
|
});
|
|
788
835
|
});
|
|
@@ -801,7 +848,8 @@ describe('UserAgentParser', function () {
|
|
|
801
848
|
documentMode: undefined,
|
|
802
849
|
browserInfo: {
|
|
803
850
|
hasWebFontSupport: true,
|
|
804
|
-
hasWebKitFallbackBug: false
|
|
851
|
+
hasWebKitFallbackBug: false,
|
|
852
|
+
hasWebKitMetricsBug: false
|
|
805
853
|
}
|
|
806
854
|
});
|
|
807
855
|
});
|
|
@@ -818,7 +866,8 @@ describe('UserAgentParser', function () {
|
|
|
818
866
|
documentMode: undefined,
|
|
819
867
|
browserInfo: {
|
|
820
868
|
hasWebFontSupport: true,
|
|
821
|
-
hasWebKitFallbackBug: false
|
|
869
|
+
hasWebKitFallbackBug: false,
|
|
870
|
+
hasWebKitMetricsBug: false
|
|
822
871
|
}
|
|
823
872
|
});
|
|
824
873
|
});
|
|
@@ -835,7 +884,8 @@ describe('UserAgentParser', function () {
|
|
|
835
884
|
documentMode: undefined,
|
|
836
885
|
browserInfo: {
|
|
837
886
|
hasWebFontSupport: true,
|
|
838
|
-
hasWebKitFallbackBug: false
|
|
887
|
+
hasWebKitFallbackBug: false,
|
|
888
|
+
hasWebKitMetricsBug: false
|
|
839
889
|
}
|
|
840
890
|
});
|
|
841
891
|
});
|
|
@@ -852,7 +902,8 @@ describe('UserAgentParser', function () {
|
|
|
852
902
|
documentMode: undefined,
|
|
853
903
|
browserInfo: {
|
|
854
904
|
hasWebFontSupport: false,
|
|
855
|
-
hasWebKitFallbackBug: false
|
|
905
|
+
hasWebKitFallbackBug: false,
|
|
906
|
+
hasWebKitMetricsBug: false
|
|
856
907
|
}
|
|
857
908
|
});
|
|
858
909
|
|
|
@@ -867,7 +918,8 @@ describe('UserAgentParser', function () {
|
|
|
867
918
|
documentMode: undefined,
|
|
868
919
|
browserInfo: {
|
|
869
920
|
hasWebFontSupport: false,
|
|
870
|
-
hasWebKitFallbackBug: false
|
|
921
|
+
hasWebKitFallbackBug: false,
|
|
922
|
+
hasWebKitMetricsBug: false
|
|
871
923
|
}
|
|
872
924
|
});
|
|
873
925
|
|
|
@@ -882,7 +934,8 @@ describe('UserAgentParser', function () {
|
|
|
882
934
|
documentMode: undefined,
|
|
883
935
|
browserInfo: {
|
|
884
936
|
hasWebFontSupport: false,
|
|
885
|
-
hasWebKitFallbackBug: false
|
|
937
|
+
hasWebKitFallbackBug: false,
|
|
938
|
+
hasWebKitMetricsBug: false
|
|
886
939
|
}
|
|
887
940
|
});
|
|
888
941
|
|
|
@@ -897,7 +950,8 @@ describe('UserAgentParser', function () {
|
|
|
897
950
|
documentMode: undefined,
|
|
898
951
|
browserInfo: {
|
|
899
952
|
hasWebFontSupport: false,
|
|
900
|
-
hasWebKitFallbackBug: false
|
|
953
|
+
hasWebKitFallbackBug: false,
|
|
954
|
+
hasWebKitMetricsBug: false
|
|
901
955
|
}
|
|
902
956
|
});
|
|
903
957
|
|
|
@@ -912,7 +966,8 @@ describe('UserAgentParser', function () {
|
|
|
912
966
|
documentMode: undefined,
|
|
913
967
|
browserInfo: {
|
|
914
968
|
hasWebFontSupport: false,
|
|
915
|
-
hasWebKitFallbackBug: false
|
|
969
|
+
hasWebKitFallbackBug: false,
|
|
970
|
+
hasWebKitMetricsBug: false
|
|
916
971
|
}
|
|
917
972
|
});
|
|
918
973
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
describe('LastResortWebKitFontWatchRunner', function () {
|
|
2
2
|
var LastResortWebKitFontWatchRunner = webfont.LastResortWebKitFontWatchRunner,
|
|
3
|
+
BrowserInfo = webfont.BrowserInfo,
|
|
3
4
|
Size = webfont.Size,
|
|
4
5
|
DomHelper = webfont.DomHelper,
|
|
5
6
|
domHelper = new DomHelper(window),
|
|
@@ -12,6 +13,7 @@ describe('LastResortWebKitFontWatchRunner', function () {
|
|
|
12
13
|
FALLBACK_SIZE_B = new Size(2, 2),
|
|
13
14
|
LAST_RESORT_SIZE = new Size(4, 4),
|
|
14
15
|
|
|
16
|
+
browserInfo = new BrowserInfo(true, true, false),
|
|
15
17
|
setupSizes = [FALLBACK_SIZE_A, FALLBACK_SIZE_B, LAST_RESORT_SIZE],
|
|
16
18
|
actualSizes = [],
|
|
17
19
|
fakeGetSizeCount = 0,
|
|
@@ -84,7 +86,7 @@ describe('LastResortWebKitFontWatchRunner', function () {
|
|
|
84
86
|
];
|
|
85
87
|
|
|
86
88
|
var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
|
|
87
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
89
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
88
90
|
|
|
89
91
|
fontWatchRunner.start();
|
|
90
92
|
|
|
@@ -101,7 +103,7 @@ describe('LastResortWebKitFontWatchRunner', function () {
|
|
|
101
103
|
timesToGetTimeBeforeTimeout = 2;
|
|
102
104
|
|
|
103
105
|
var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
|
|
104
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, 'Arimo', fontDescription,
|
|
106
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, 'Arimo', fontDescription, browserInfo);
|
|
105
107
|
|
|
106
108
|
fontWatchRunner.start();
|
|
107
109
|
|
|
@@ -119,7 +121,7 @@ describe('LastResortWebKitFontWatchRunner', function () {
|
|
|
119
121
|
timesToGetTimeBeforeTimeout = 3;
|
|
120
122
|
|
|
121
123
|
var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
|
|
122
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
124
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
123
125
|
|
|
124
126
|
fontWatchRunner.start();
|
|
125
127
|
|
|
@@ -136,7 +138,7 @@ describe('LastResortWebKitFontWatchRunner', function () {
|
|
|
136
138
|
timesToGetTimeBeforeTimeout = 2;
|
|
137
139
|
|
|
138
140
|
var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
|
|
139
|
-
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription,
|
|
141
|
+
domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
|
|
140
142
|
|
|
141
143
|
fontWatchRunner.start();
|
|
142
144
|
expect(asyncCount).toEqual(1);
|
|
@@ -27,7 +27,7 @@ describe('MonotypeScript', function () {
|
|
|
27
27
|
};
|
|
28
28
|
support = jasmine.createSpy('support');
|
|
29
29
|
load = jasmine.createSpy('load');
|
|
30
|
-
useragent = new UserAgent('Firefox', '3.6', 'Gecko', '1.9.3', 'Macintosh', '10.6', undefined, new BrowserInfo(true, false));
|
|
30
|
+
useragent = new UserAgent('Firefox', '3.6', 'Gecko', '1.9.3', 'Macintosh', '10.6', undefined, new BrowserInfo(true, false, false));
|
|
31
31
|
|
|
32
32
|
monotype = new MonotypeScript(useragent, fakeDomHelper, configuration);
|
|
33
33
|
monotype.supportUserAgent(useragent, support);
|
|
@@ -31,7 +31,7 @@ describe('TypekitScript', function () {
|
|
|
31
31
|
typekit.supportUserAgent('useragent', support);
|
|
32
32
|
|
|
33
33
|
expect(fakeDomHelper.insertInto.calls[0].args[0]).toEqual('head');
|
|
34
|
-
expect(fakeDomHelper.createScriptSrc).toHaveBeenCalledWith('http://use.typekit.
|
|
34
|
+
expect(fakeDomHelper.createScriptSrc).toHaveBeenCalledWith('http://use.typekit.net/abc.js');
|
|
35
35
|
expect(support).not.toHaveBeenCalled();
|
|
36
36
|
|
|
37
37
|
expect(global.__webfonttypekitmodule__).not.toBeNull();
|
data/src/core/browserinfo.js
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
* @constructor
|
|
3
3
|
* @param {boolean} webfontSupport
|
|
4
4
|
* @param {boolean} webKitFallbackBug
|
|
5
|
+
* @param {boolean} webKitMetricsBug
|
|
5
6
|
*/
|
|
6
|
-
webfont.BrowserInfo = function (webfontSupport, webKitFallbackBug) {
|
|
7
|
+
webfont.BrowserInfo = function (webfontSupport, webKitFallbackBug, webKitMetricsBug) {
|
|
7
8
|
this.webfontSupport_ = webfontSupport;
|
|
8
9
|
this.webKitFallbackBug_ = webKitFallbackBug;
|
|
10
|
+
this.webKitMetricsBug_ = webKitMetricsBug;
|
|
9
11
|
};
|
|
10
12
|
|
|
11
13
|
/**
|
|
14
|
+
* Returns true if the browser supports web fonts.
|
|
15
|
+
*
|
|
12
16
|
* @return {boolean}
|
|
13
17
|
*/
|
|
14
18
|
webfont.BrowserInfo.prototype.hasWebFontSupport = function () {
|
|
@@ -16,8 +20,42 @@ webfont.BrowserInfo.prototype.hasWebFontSupport = function () {
|
|
|
16
20
|
};
|
|
17
21
|
|
|
18
22
|
/**
|
|
23
|
+
* Returns true if the browser has the WebKit fallback bug.
|
|
24
|
+
*
|
|
25
|
+
* The bug causes the normal CSS font stack to be ignored while
|
|
26
|
+
* loading web fonts. Instead it picks the generic font family
|
|
27
|
+
* (or the default generic font family) of the first instance
|
|
28
|
+
* the web font is mentioned in CSS. It switches to this font
|
|
29
|
+
* immediately while loading web font, causing two changes in
|
|
30
|
+
* font to occur (compared to other browsers which only change
|
|
31
|
+
* font once the web font has loaded.)
|
|
32
|
+
*
|
|
33
|
+
* The bug has been fixed and is only happens in WebKit versions
|
|
34
|
+
* below 536.11. Even though it is fixed we still have a large
|
|
35
|
+
* percentage of users on older WebKit versions, mostly on mobile
|
|
36
|
+
* platforms.
|
|
37
|
+
*
|
|
38
|
+
* Also see: https://bugs.webkit.org/show_bug.cgi?id=76684
|
|
39
|
+
*
|
|
19
40
|
* @return {boolean}
|
|
20
41
|
*/
|
|
21
42
|
webfont.BrowserInfo.prototype.hasWebKitFallbackBug = function () {
|
|
22
43
|
return this.webKitFallbackBug_;
|
|
23
44
|
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns true if the browser has the WebKit metrics bug
|
|
48
|
+
*
|
|
49
|
+
* The metrics bug causes WebKit to change the height of a font
|
|
50
|
+
* while loading a web font. Other browsers do not modify
|
|
51
|
+
* the width or height of the fallback font while a web font is
|
|
52
|
+
* loading. This caused our width and height check to be incorrect,
|
|
53
|
+
* triggering a false positive.
|
|
54
|
+
*
|
|
55
|
+
* Also see: https://bugs.webkit.org/show_bug.cgi?id=110977
|
|
56
|
+
*
|
|
57
|
+
* @return {boolean}
|
|
58
|
+
*/
|
|
59
|
+
webfont.BrowserInfo.prototype.hasWebKitMetricsBug = function () {
|
|
60
|
+
return this.webKitMetricsBug_;
|
|
61
|
+
};
|
data/src/core/font.js
CHANGED
|
@@ -73,6 +73,7 @@ webfont.WebFont.prototype.onModuleReady_ = function(eventDispatcher, fontWatcher
|
|
|
73
73
|
|
|
74
74
|
webfont.WebFont.prototype.load_ = function(eventDispatcher, configuration) {
|
|
75
75
|
var modules = this.fontModuleLoader_.getModules(configuration, this.domHelper_),
|
|
76
|
+
timeout = configuration['timeout'],
|
|
76
77
|
self = this;
|
|
77
78
|
|
|
78
79
|
this.moduleFailedLoading_ = this.moduleLoading_ = modules.length;
|
|
@@ -83,7 +84,7 @@ webfont.WebFont.prototype.load_ = function(eventDispatcher, configuration) {
|
|
|
83
84
|
return new webfont.Size(elem.offsetWidth, elem.offsetHeight);
|
|
84
85
|
}}, self.asyncCall_, function() {
|
|
85
86
|
return new Date().getTime();
|
|
86
|
-
});
|
|
87
|
+
}, timeout);
|
|
87
88
|
|
|
88
89
|
for (var i = 0, len = modules.length; i < len; i++) {
|
|
89
90
|
var module = modules[i];
|
data/src/core/fontwatcher.js
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* @param {Object.<string, function(Object): webfont.Size>} fontSizer
|
|
7
7
|
* @param {function(function(), number=)} asyncCall
|
|
8
8
|
* @param {function(): number} getTime
|
|
9
|
+
* @param {number=} opt_timeout
|
|
9
10
|
*/
|
|
10
11
|
webfont.FontWatcher = function(userAgent, domHelper, eventDispatcher, fontSizer,
|
|
11
|
-
asyncCall, getTime) {
|
|
12
|
+
asyncCall, getTime, opt_timeout) {
|
|
12
13
|
this.domHelper_ = domHelper;
|
|
13
14
|
this.eventDispatcher_ = eventDispatcher;
|
|
14
15
|
this.fontSizer_ = fontSizer;
|
|
@@ -17,8 +18,9 @@ webfont.FontWatcher = function(userAgent, domHelper, eventDispatcher, fontSizer,
|
|
|
17
18
|
this.currentlyWatched_ = 0;
|
|
18
19
|
this.last_ = false;
|
|
19
20
|
this.success_ = false;
|
|
21
|
+
this.timeout_ = opt_timeout;
|
|
20
22
|
|
|
21
|
-
this.
|
|
23
|
+
this.browserInfo_ = userAgent.getBrowserInfo();
|
|
22
24
|
};
|
|
23
25
|
|
|
24
26
|
/**
|
|
@@ -38,7 +40,7 @@ webfont.FontWatcher.DEFAULT_VARIATION = 'n4';
|
|
|
38
40
|
* function(string, string), webfont.DomHelper,
|
|
39
41
|
* Object.<string, function(Object): number>,
|
|
40
42
|
* function(function(), number=), function(): number, string, string,
|
|
41
|
-
*
|
|
43
|
+
* webfont.BrowserInfo, number=, Object.<string,boolean>=, string=)} fontWatchRunnerCtor The font watch runner constructor.
|
|
42
44
|
* @param {boolean} last True if this is the last set of families to watch.
|
|
43
45
|
*/
|
|
44
46
|
webfont.FontWatcher.prototype.watch = function(fontFamilies, fontDescriptions,
|
|
@@ -76,7 +78,8 @@ webfont.FontWatcher.prototype.watch = function(fontFamilies, fontDescriptions,
|
|
|
76
78
|
var inactiveCallback = webfont.bind(this, this.fontInactive_)
|
|
77
79
|
var fontWatchRunner = new fontWatchRunnerCtor(activeCallback,
|
|
78
80
|
inactiveCallback, this.domHelper_, this.fontSizer_, this.asyncCall_,
|
|
79
|
-
this.getTime_, fontFamily, fontDescription,
|
|
81
|
+
this.getTime_, fontFamily, fontDescription,
|
|
82
|
+
this.browserInfo_, this.timeout_, null, fontTestString);
|
|
80
83
|
|
|
81
84
|
fontWatchRunner.start();
|
|
82
85
|
}
|
data/src/core/fontwatchrunner.js
CHANGED
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
* @param {function(): number} getTime
|
|
9
9
|
* @param {string} fontFamily
|
|
10
10
|
* @param {string} fontDescription
|
|
11
|
-
* @param {
|
|
11
|
+
* @param {webfont.BrowserInfo} browserInfo
|
|
12
|
+
* @param {number=} opt_timeout
|
|
12
13
|
* @param {Object.<string, boolean>=} opt_metricCompatibleFonts
|
|
13
14
|
* @param {string=} opt_fontTestString
|
|
14
15
|
*/
|
|
15
16
|
webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
|
|
16
|
-
fontSizer, asyncCall, getTime, fontFamily, fontDescription,
|
|
17
|
+
fontSizer, asyncCall, getTime, fontFamily, fontDescription, browserInfo,
|
|
18
|
+
opt_timeout, opt_metricCompatibleFonts, opt_fontTestString) {
|
|
17
19
|
this.activeCallback_ = activeCallback;
|
|
18
20
|
this.inactiveCallback_ = inactiveCallback;
|
|
19
21
|
this.domHelper_ = domHelper;
|
|
@@ -23,8 +25,9 @@ webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
|
|
|
23
25
|
this.fontFamily_ = fontFamily;
|
|
24
26
|
this.fontDescription_ = fontDescription;
|
|
25
27
|
this.fontTestString_ = opt_fontTestString || webfont.FontWatchRunner.DEFAULT_TEST_STRING;
|
|
26
|
-
this.
|
|
28
|
+
this.browserInfo_ = browserInfo;
|
|
27
29
|
this.lastResortSizes_ = {};
|
|
30
|
+
this.timeout_ = opt_timeout || 5000;
|
|
28
31
|
|
|
29
32
|
this.metricCompatibleFonts_ = opt_metricCompatibleFonts || null;
|
|
30
33
|
|
|
@@ -102,7 +105,11 @@ webfont.FontWatchRunner.prototype.start = function() {
|
|
|
102
105
|
* @return {boolean}
|
|
103
106
|
*/
|
|
104
107
|
webfont.FontWatchRunner.prototype.sizeMatches_ = function(size, lastResortFont) {
|
|
105
|
-
|
|
108
|
+
if (this.browserInfo_.hasWebKitMetricsBug()) {
|
|
109
|
+
return size.equalsWidth(this.lastResortSizes_[lastResortFont]);
|
|
110
|
+
} else {
|
|
111
|
+
return size.equals(this.lastResortSizes_[lastResortFont]);
|
|
112
|
+
}
|
|
106
113
|
};
|
|
107
114
|
|
|
108
115
|
/**
|
|
@@ -132,7 +139,7 @@ webfont.FontWatchRunner.prototype.sizesMatchLastResortSizes_ = function(a, b) {
|
|
|
132
139
|
* @return {boolean}
|
|
133
140
|
*/
|
|
134
141
|
webfont.FontWatchRunner.prototype.hasTimedOut_ = function() {
|
|
135
|
-
return this.getTime_() - this.started_ >=
|
|
142
|
+
return this.getTime_() - this.started_ >= this.timeout_;
|
|
136
143
|
};
|
|
137
144
|
|
|
138
145
|
/**
|
|
@@ -157,7 +164,7 @@ webfont.FontWatchRunner.prototype.isFallbackFont_ = function (sizeA, sizeB) {
|
|
|
157
164
|
* @return {boolean}
|
|
158
165
|
*/
|
|
159
166
|
webfont.FontWatchRunner.prototype.isLastResortFont_ = function (sizeA, sizeB) {
|
|
160
|
-
return this.
|
|
167
|
+
return this.browserInfo_.hasWebKitFallbackBug() && this.sizesMatchLastResortSizes_(sizeA, sizeB);
|
|
161
168
|
};
|
|
162
169
|
|
|
163
170
|
/**
|
data/src/core/size.js
CHANGED
|
@@ -15,5 +15,23 @@ webfont.Size = function (width, height) {
|
|
|
15
15
|
* @return {boolean}
|
|
16
16
|
*/
|
|
17
17
|
webfont.Size.prototype.equals = function (other) {
|
|
18
|
-
return
|
|
18
|
+
return this.equalsWidth(other) && this.equalsHeight(other);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Returns true if this.width equals other.width
|
|
23
|
+
* @param {webfont.Size} other
|
|
24
|
+
* @return {boolean}
|
|
25
|
+
*/
|
|
26
|
+
webfont.Size.prototype.equalsWidth = function (other) {
|
|
27
|
+
return !!other && this.width == other.width;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns true if this.height equals other.height
|
|
32
|
+
* @param {webfont.Size} other
|
|
33
|
+
* @return {boolean}
|
|
34
|
+
*/
|
|
35
|
+
webfont.Size.prototype.equalsHeight = function (other) {
|
|
36
|
+
return !!other && this.height == other.height;
|
|
19
37
|
};
|
data/src/core/useragentparser.js
CHANGED
|
@@ -35,7 +35,7 @@ webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(
|
|
|
35
35
|
webfont.UserAgentParser.UNKNOWN,
|
|
36
36
|
webfont.UserAgentParser.UNKNOWN,
|
|
37
37
|
undefined,
|
|
38
|
-
new webfont.BrowserInfo(false, false));
|
|
38
|
+
new webfont.BrowserInfo(false, false, false));
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* Parses the user agent string and returns an object.
|
|
@@ -142,12 +142,12 @@ webfont.UserAgentParser.prototype.parseIeUserAgentString_ = function() {
|
|
|
142
142
|
(platform == "Windows Phone" && platformVersion.major >= 8);
|
|
143
143
|
|
|
144
144
|
return new webfont.UserAgent(name, version, name, version,
|
|
145
|
-
platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false));
|
|
145
|
+
platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false, false));
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
return new webfont.UserAgent("MSIE", webfont.UserAgentParser.UNKNOWN,
|
|
149
149
|
"MSIE", webfont.UserAgentParser.UNKNOWN,
|
|
150
|
-
platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false));
|
|
150
|
+
platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false, false));
|
|
151
151
|
};
|
|
152
152
|
|
|
153
153
|
/**
|
|
@@ -192,7 +192,7 @@ webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
|
|
|
192
192
|
|
|
193
193
|
return new webfont.UserAgent("OperaMini", version, engineName,
|
|
194
194
|
engineVersion, this.getPlatform_(), this.getPlatformVersion_(),
|
|
195
|
-
this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false));
|
|
195
|
+
this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false, false));
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
// Otherwise, find version information for normal Opera or Opera Mobile
|
|
@@ -203,7 +203,7 @@ webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
|
|
|
203
203
|
var version = this.parseVersion_(versionString);
|
|
204
204
|
return new webfont.UserAgent("Opera", versionString, engineName, engineVersion,
|
|
205
205
|
this.getPlatform_(), this.getPlatformVersion_(),
|
|
206
|
-
this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false));
|
|
206
|
+
this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false, false));
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
var versionString = this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1);
|
|
@@ -212,11 +212,11 @@ webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
|
|
|
212
212
|
var version = this.parseVersion_(versionString);
|
|
213
213
|
return new webfont.UserAgent("Opera", versionString, engineName, engineVersion,
|
|
214
214
|
this.getPlatform_(), this.getPlatformVersion_(),
|
|
215
|
-
this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false));
|
|
215
|
+
this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false, false));
|
|
216
216
|
}
|
|
217
217
|
return new webfont.UserAgent("Opera", webfont.UserAgentParser.UNKNOWN,
|
|
218
218
|
engineName, engineVersion, this.getPlatform_(),
|
|
219
|
-
this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false));
|
|
219
|
+
this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false, false));
|
|
220
220
|
};
|
|
221
221
|
|
|
222
222
|
/**
|
|
@@ -279,10 +279,11 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
|
|
|
279
279
|
supportWebFont = webKitVersion.major >= 526 || webKitVersion.major >= 525 && webKitVersion.minor >= 13;
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
-
var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11)
|
|
282
|
+
var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11),
|
|
283
|
+
hasWebKitMetricsBug = platform == 'iPhone' || platform == 'iPad' || platform == 'iPod' || platform == 'Macintosh';
|
|
283
284
|
|
|
284
285
|
return new webfont.UserAgent(name, version, "AppleWebKit", webKitVersionString,
|
|
285
|
-
platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, hasWebKitFallbackBug));
|
|
286
|
+
platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, hasWebKitFallbackBug, hasWebKitMetricsBug));
|
|
286
287
|
};
|
|
287
288
|
|
|
288
289
|
/**
|
|
@@ -331,7 +332,7 @@ webfont.UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
|
|
|
331
332
|
}
|
|
332
333
|
}
|
|
333
334
|
return new webfont.UserAgent(name, version, "Gecko", geckoVersionString,
|
|
334
|
-
this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false));
|
|
335
|
+
this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false, false));
|
|
335
336
|
};
|
|
336
337
|
|
|
337
338
|
/**
|
|
@@ -13,7 +13,7 @@ webfont.TypekitScript.HOOK = '__webfonttypekitmodule__';
|
|
|
13
13
|
|
|
14
14
|
webfont.TypekitScript.prototype.getScriptSrc = function(kitId) {
|
|
15
15
|
var protocol = this.domHelper_.getProtocol();
|
|
16
|
-
var api = this.configuration_['api'] || protocol + '//use.typekit.
|
|
16
|
+
var api = this.configuration_['api'] || protocol + '//use.typekit.net';
|
|
17
17
|
return api + '/' + kitId + '.js';
|
|
18
18
|
};
|
|
19
19
|
|
data/webfontloader.gemspec
CHANGED
|
@@ -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.
|
|
17
|
-
s.date = '2013-02-
|
|
16
|
+
s.version = '1.3.0'
|
|
17
|
+
s.date = '2013-02-28'
|
|
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:
|
|
4
|
+
hash: 27
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 1
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
version: 1.
|
|
8
|
+
- 3
|
|
9
|
+
- 0
|
|
10
|
+
version: 1.3.0
|
|
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: 2013-02-
|
|
19
|
+
date: 2013-02-28 00:00:00 Z
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
22
22
|
prerelease: false
|