webfontloader 1.4.9 → 1.4.10
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 +6 -0
- data/CONTRIBUTING.md +47 -0
- data/README.md +0 -49
- data/lib/webfontloader.rb +1 -1
- data/spec/core/domhelper_spec.js +65 -28
- data/spec/core/fontwatchrunner_spec.js +1 -1
- data/spec/core/webfont_spec.js +47 -0
- data/spec/{core → fixtures}/external_script.js +0 -0
- data/spec/fixtures/external_stylesheet.css +7 -0
- data/spec/{fonts → fixtures/fonts}/LICENSE.txt +0 -0
- data/spec/{fonts → fixtures/fonts}/nullfont.css +0 -0
- data/spec/{fonts → fixtures/fonts}/nullfont1.css +0 -0
- data/spec/{fonts → fixtures/fonts}/nullfont2.css +0 -0
- data/spec/{fonts → fixtures/fonts}/nullfont3.css +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesans.eot +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesans.otf +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesans.svg +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesans.ttf +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesans.woff +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesansa.css +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesansb.css +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesansc.css +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesanscbold.css +0 -0
- data/spec/{fonts → fixtures/fonts}/sourcesanscbold.otf +0 -0
- data/spec/index.html +8 -8
- data/spec/modules/ascender_spec.js +2 -4
- data/spec/modules/custom_spec.js +4 -5
- data/spec/modules/fontdeck_spec.js +3 -4
- data/spec/modules/google/googlefontapi_spec.js +1 -8
- data/spec/modules/monotype_spec.js +6 -4
- data/spec/modules/typekit_spec.js +6 -8
- data/src/core/domhelper.js +68 -53
- data/src/core/webfont.js +6 -6
- data/src/modules/ascender.js +1 -1
- data/src/modules/custom.js +1 -3
- data/src/modules/fontdeck.js +6 -4
- data/src/modules/google/googlefontapi.js +1 -2
- data/src/modules/monotype.js +8 -15
- data/src/modules/typekit.js +6 -3
- data/webfontloader.gemspec +20 -18
- metadata +22 -20
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
v1.4.10 (July 31, 2013)
|
2
|
+
* Add loadStylesheet method with optional callback that replaces createCssLink
|
3
|
+
* Remove supportForStyle check because it breaks XHTML/SVG and is no longer necessary
|
4
|
+
* Fix inactive never called when script loading times out
|
5
|
+
* Move test assets into fixtures directory
|
6
|
+
|
1
7
|
v1.4.9 (July 24, 2013)
|
2
8
|
* Disable terminal spec report when not using PhantomJS
|
3
9
|
* Remove obsolete namespace declaration
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
Please open [an issue](https://github.com/typekit/webfontloader/issues) if you find or suspect any problems. Sample pages and test cases are greatly appreciated.
|
4
|
+
|
5
|
+
## Development requirements
|
6
|
+
|
7
|
+
You'll need a few rubygems to run the tests, demo server, and other rake tasks, which should be installed with [Bundler](http://gembundler.com/).
|
8
|
+
|
9
|
+
$ gem install bundler
|
10
|
+
$ bundle install
|
11
|
+
|
12
|
+
To run the tests in a headless WebKit you will also need to have [PhantomJS](http://www.phantomjs.org) installed. You can install PhantomJS by downloading a binary of using HomeBrew.
|
13
|
+
|
14
|
+
$ brew install phantomjs
|
15
|
+
|
16
|
+
## Building
|
17
|
+
|
18
|
+
To build a JS file from source, just run rake:
|
19
|
+
|
20
|
+
$ rake
|
21
|
+
|
22
|
+
## Demos
|
23
|
+
|
24
|
+
A full suite of demo pages is included in this source. Here you can find some
|
25
|
+
live examples using the JS and CSS events. Run the demo server with:
|
26
|
+
|
27
|
+
$ rake demo
|
28
|
+
|
29
|
+
You can also run the demos with uncompressed, debuggable code to aid in
|
30
|
+
development. Just start the server in dev mode:
|
31
|
+
|
32
|
+
$ rake demodev
|
33
|
+
|
34
|
+
Browse the demos [source code](http://github.com/typekit/webfontloader/blob/master/lib/webfontloader/demo/public).
|
35
|
+
|
36
|
+
## Testing
|
37
|
+
|
38
|
+
Web Font Loader has an extensive test suite that runs via Jasmine. The test suite
|
39
|
+
should be passing before submitting a pull request, and new tests should be added for any new functionality.
|
40
|
+
|
41
|
+
To run tests, open up `spec/index.html` in a browser and check the results. The
|
42
|
+
test suite will run automatically. Again, before submitting a pull request
|
43
|
+
please run the test suite in multiple browsers and list them in the pull request.
|
44
|
+
|
45
|
+
To run tests in a headless WebKit using [PhantomJS](http://www.phantomjs.org) run:
|
46
|
+
|
47
|
+
$ rake test
|
data/README.md
CHANGED
@@ -19,7 +19,6 @@ Web Font Loader gives you added control when using linked fonts via `@font-face`
|
|
19
19
|
* [Google](#google)
|
20
20
|
* [Typekit](#typekit)
|
21
21
|
* [Browser support](#browser-support)
|
22
|
-
* [Contributing](#contributing)
|
23
22
|
* [License](#license)
|
24
23
|
|
25
24
|
## Get Started
|
@@ -270,54 +269,6 @@ For example:
|
|
270
269
|
|
271
270
|
If `providerA` can serve fonts to a browser, but `providerB` cannot, The `fontinactive` event will be triggered for `Family2`. The `fontactive` event will be triggered for `Family1` once it loads, as will the `active` event.
|
272
271
|
|
273
|
-
## Contributing
|
274
|
-
|
275
|
-
Please open [an issue](https://github.com/typekit/webfontloader/issues) if you find or suspect any problems. Sample pages and test cases are greatly appreciated.
|
276
|
-
|
277
|
-
### Development requirements
|
278
|
-
|
279
|
-
You'll need a few rubygems to run the tests, demo server, and other rake tasks, which should be installed with [Bundler](http://gembundler.com/).
|
280
|
-
|
281
|
-
$ gem install bundler
|
282
|
-
$ bundle install
|
283
|
-
|
284
|
-
To run the tests in a headless WebKit you will also need to have [PhantomJS](http://www.phantomjs.org) installed. You can install PhantomJS by downloading a binary of using HomeBrew.
|
285
|
-
|
286
|
-
$ brew install phantomjs
|
287
|
-
|
288
|
-
### Building
|
289
|
-
|
290
|
-
To build a JS file from source, just run rake:
|
291
|
-
|
292
|
-
$ rake
|
293
|
-
|
294
|
-
### Demos
|
295
|
-
|
296
|
-
A full suite of demo pages is included in this source. Here you can find some
|
297
|
-
live examples using the JS and CSS events. Run the demo server with:
|
298
|
-
|
299
|
-
$ rake demo
|
300
|
-
|
301
|
-
You can also run the demos with uncompressed, debuggable code to aid in
|
302
|
-
development. Just start the server in dev mode:
|
303
|
-
|
304
|
-
$ rake demodev
|
305
|
-
|
306
|
-
Browse the demos [source code](http://github.com/typekit/webfontloader/blob/master/lib/webfontloader/demo/public).
|
307
|
-
|
308
|
-
### Testing
|
309
|
-
|
310
|
-
Web Font Loader has an extensive test suite that runs via Jasmine. The test suite
|
311
|
-
should be passing before submitting a pull request, and new tests should be added for any new functionality.
|
312
|
-
|
313
|
-
To run tests, open up `spec/index.html` in a browser and check the results. The
|
314
|
-
test suite will run automatically. Again, before submitting a pull request
|
315
|
-
please run the test suite in multiple browsers and list them in the pull request.
|
316
|
-
|
317
|
-
To run tests in a headless WebKit using [PhantomJS](http://www.phantomjs.org) run:
|
318
|
-
|
319
|
-
$ rake test
|
320
|
-
|
321
272
|
## License
|
322
273
|
|
323
274
|
Web Font Loader is released under the [Apache 2.0](http://github.com/typekit/webfontloader/blob/master/LICENSE) license.
|
data/lib/webfontloader.rb
CHANGED
data/spec/core/domhelper_spec.js
CHANGED
@@ -44,31 +44,6 @@ describe('DomHelper', function () {
|
|
44
44
|
});
|
45
45
|
});
|
46
46
|
|
47
|
-
describe('#createCssLink', function () {
|
48
|
-
var link = domHelper.createCssLink('http://moo/somecss.css');
|
49
|
-
|
50
|
-
it('should create a link', function () {
|
51
|
-
expect(link).not.toBeNull();
|
52
|
-
});
|
53
|
-
|
54
|
-
it('should create a link with correct rel and href properties', function () {
|
55
|
-
expect(link.rel).toEqual('stylesheet');
|
56
|
-
expect(link.href).toEqual('http://moo/somecss.css');
|
57
|
-
});
|
58
|
-
});
|
59
|
-
|
60
|
-
describe('#createScriptSrc', function () {
|
61
|
-
var script = domHelper.createScriptSrc('http://moo/somescript.js');
|
62
|
-
|
63
|
-
it('should create a script element', function () {
|
64
|
-
expect(script).not.toBeNull();
|
65
|
-
});
|
66
|
-
|
67
|
-
it('should have a src property', function () {
|
68
|
-
expect(script.src).toEqual('http://moo/somescript.js');
|
69
|
-
});
|
70
|
-
});
|
71
|
-
|
72
47
|
describe('#appendClassName', function () {
|
73
48
|
it('should have added a class name', function () {
|
74
49
|
var div = domHelper.createElement('div');
|
@@ -178,10 +153,35 @@ describe('DomHelper', function () {
|
|
178
153
|
});
|
179
154
|
});
|
180
155
|
|
156
|
+
describe('#loadStylesheet', function () {
|
157
|
+
it('should load the stylesheet', function () {
|
158
|
+
var el = null,
|
159
|
+
width = null,
|
160
|
+
link = null;
|
161
|
+
|
162
|
+
runs(function () {
|
163
|
+
el = domHelper.createElement('div', { id: 'TEST_ELEMENT' });
|
164
|
+
domHelper.insertInto('body', el);
|
165
|
+
width = el.offsetWidth;
|
166
|
+
link = domHelper.loadStylesheet('fixtures/external_stylesheet.css');
|
167
|
+
});
|
168
|
+
|
169
|
+
waitsFor(function () {
|
170
|
+
return width !== el.offsetWidth;
|
171
|
+
});
|
172
|
+
|
173
|
+
runs(function () {
|
174
|
+
expect(link).not.toBeNull();
|
175
|
+
expect(link.rel).toEqual('stylesheet');
|
176
|
+
expect(el.offsetWidth).toEqual(300);
|
177
|
+
});
|
178
|
+
});
|
179
|
+
});
|
180
|
+
|
181
181
|
describe('#loadScript', function () {
|
182
182
|
it('should load the script', function () {
|
183
183
|
runs(function () {
|
184
|
-
domHelper.loadScript('
|
184
|
+
domHelper.loadScript('fixtures/external_script.js');
|
185
185
|
});
|
186
186
|
|
187
187
|
waitsFor(function () {
|
@@ -194,11 +194,13 @@ describe('DomHelper', function () {
|
|
194
194
|
});
|
195
195
|
|
196
196
|
it('should call the callback', function () {
|
197
|
-
var called = false
|
197
|
+
var called = false,
|
198
|
+
error = null;
|
198
199
|
|
199
200
|
runs(function () {
|
200
|
-
domHelper.loadScript('
|
201
|
+
domHelper.loadScript('fixtures/external_script.js', function (err) {
|
201
202
|
called = true;
|
203
|
+
error = err;
|
202
204
|
});
|
203
205
|
});
|
204
206
|
|
@@ -208,6 +210,41 @@ describe('DomHelper', function () {
|
|
208
210
|
|
209
211
|
runs(function () {
|
210
212
|
expect(called).toBe(true);
|
213
|
+
expect(error).toBeFalsy();
|
214
|
+
});
|
215
|
+
});
|
216
|
+
|
217
|
+
it('should return a script element', function () {
|
218
|
+
var script = domHelper.loadScript('fixtures/external_script.js');
|
219
|
+
|
220
|
+
expect(script).not.toBeNull();
|
221
|
+
expect(script.nodeName).toEqual('SCRIPT');
|
222
|
+
});
|
223
|
+
|
224
|
+
it('should timeout if the script does not load or is very slow', function () {
|
225
|
+
var called = false,
|
226
|
+
error = false;
|
227
|
+
|
228
|
+
// Spy on createElement so the all loadScript code is executed but
|
229
|
+
// the "script" won't actually load.
|
230
|
+
spyOn(domHelper, 'createElement').andCallFake(function (name) {
|
231
|
+
return document.createElement('div');
|
232
|
+
});
|
233
|
+
|
234
|
+
runs(function () {
|
235
|
+
domHelper.loadScript('fixtures/external_script.js', function (err) {
|
236
|
+
called = true;
|
237
|
+
error = err;
|
238
|
+
}, 100);
|
239
|
+
});
|
240
|
+
|
241
|
+
waitsFor(function () {
|
242
|
+
return called;
|
243
|
+
});
|
244
|
+
|
245
|
+
runs(function () {
|
246
|
+
expect(called).toBe(true);
|
247
|
+
expect(error).toBeTruthy();
|
211
248
|
});
|
212
249
|
});
|
213
250
|
});
|
@@ -372,7 +372,7 @@ describe('FontWatchRunner', function () {
|
|
372
372
|
var link = document.createElement('link');
|
373
373
|
|
374
374
|
link.rel = "stylesheet";
|
375
|
-
link.href= "fonts/sourcesansb.css";
|
375
|
+
link.href= "fixtures/fonts/sourcesansb.css";
|
376
376
|
|
377
377
|
domHelper.insertInto('head', link);
|
378
378
|
});
|
data/spec/core/webfont_spec.js
CHANGED
@@ -270,4 +270,51 @@ describe('WebFont', function () {
|
|
270
270
|
expect(inactive).toHaveBeenCalled();
|
271
271
|
});
|
272
272
|
});
|
273
|
+
|
274
|
+
describe('module fails to load', function () {
|
275
|
+
var font = null,
|
276
|
+
testModule = null,
|
277
|
+
inactive = null,
|
278
|
+
active = null;
|
279
|
+
|
280
|
+
beforeEach(function () {
|
281
|
+
inactive = jasmine.createSpy('inactive'),
|
282
|
+
active = jasmine.createSpy('active');
|
283
|
+
|
284
|
+
font = new WebFont(window, fontModuleLoader, userAgent);
|
285
|
+
|
286
|
+
font.addModule('test', function (conf, domHelper) {
|
287
|
+
testModule = new function () {};
|
288
|
+
testModule.supportUserAgent = function (ua, support) {
|
289
|
+
window.setTimeout(function () {
|
290
|
+
support(false);
|
291
|
+
}, 100);
|
292
|
+
};
|
293
|
+
testModule.load = function (onReady) {
|
294
|
+
onReady();
|
295
|
+
};
|
296
|
+
|
297
|
+
return testModule;
|
298
|
+
});
|
299
|
+
});
|
300
|
+
|
301
|
+
it('times out and calls inactive', function () {
|
302
|
+
runs(function () {
|
303
|
+
font.load({
|
304
|
+
'test': {},
|
305
|
+
inactive: inactive,
|
306
|
+
active: active
|
307
|
+
});
|
308
|
+
});
|
309
|
+
|
310
|
+
waitsFor(function () {
|
311
|
+
return active.wasCalled || inactive.wasCalled;
|
312
|
+
});
|
313
|
+
|
314
|
+
runs(function () {
|
315
|
+
expect(inactive).toHaveBeenCalled();
|
316
|
+
expect(active).not.toHaveBeenCalled();
|
317
|
+
});
|
318
|
+
});
|
319
|
+
});
|
273
320
|
});
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/spec/index.html
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
<title>Webfontloader tests</title>
|
5
5
|
<link rel="stylesheet" href="../tools/jasmine/jasmine.css">
|
6
6
|
|
7
|
-
<link rel="stylesheet" href="fonts/nullfont.css">
|
8
|
-
<link rel="stylesheet" href="fonts/nullfont1.css">
|
9
|
-
<link rel="stylesheet" href="fonts/nullfont2.css">
|
10
|
-
<link rel="stylesheet" href="fonts/nullfont3.css">
|
11
|
-
<link rel="stylesheet" href="fonts/sourcesansa.css">
|
12
|
-
<link rel="stylesheet" href="fonts/sourcesansb.css">
|
13
|
-
<link rel="stylesheet" href="fonts/sourcesansc.css">
|
14
|
-
<link rel="stylesheet" href="fonts/sourcesanscbold.css">
|
7
|
+
<link rel="stylesheet" href="fixtures/fonts/nullfont.css">
|
8
|
+
<link rel="stylesheet" href="fixtures/fonts/nullfont1.css">
|
9
|
+
<link rel="stylesheet" href="fixtures/fonts/nullfont2.css">
|
10
|
+
<link rel="stylesheet" href="fixtures/fonts/nullfont3.css">
|
11
|
+
<link rel="stylesheet" href="fixtures/fonts/sourcesansa.css">
|
12
|
+
<link rel="stylesheet" href="fixtures/fonts/sourcesansb.css">
|
13
|
+
<link rel="stylesheet" href="fixtures/fonts/sourcesansc.css">
|
14
|
+
<link rel="stylesheet" href="fixtures/fonts/sourcesanscbold.css">
|
15
15
|
</head>
|
16
16
|
<body>
|
17
17
|
<script>
|
@@ -14,8 +14,7 @@ describe('modules.Ascender', function () {
|
|
14
14
|
|
15
15
|
beforeEach(function () {
|
16
16
|
fakeDomHelper = {
|
17
|
-
|
18
|
-
createCssLink: jasmine.createSpy('createCssLink'),
|
17
|
+
loadStylesheet: jasmine.createSpy('createCssLink'),
|
19
18
|
getProtocol: jasmine.createSpy('getProtocol').andReturn('http:')
|
20
19
|
};
|
21
20
|
|
@@ -26,8 +25,7 @@ describe('modules.Ascender', function () {
|
|
26
25
|
});
|
27
26
|
|
28
27
|
it('should create the link correctly', function () {
|
29
|
-
expect(fakeDomHelper.
|
30
|
-
expect(fakeDomHelper.insertInto.calls[0].args[0]).toEqual('head');
|
28
|
+
expect(fakeDomHelper.loadStylesheet).toHaveBeenCalledWith('http://webfonts.fontslive.com/css/ec2de397-11ae-4c10-937f-bf94283a70c1.css');
|
31
29
|
});
|
32
30
|
|
33
31
|
it('should pass the fonts correctly', function () {
|
data/spec/modules/custom_spec.js
CHANGED
@@ -8,8 +8,7 @@ describe('modules.Custom', function () {
|
|
8
8
|
|
9
9
|
beforeEach(function () {
|
10
10
|
fakeDomHelper = {
|
11
|
-
|
12
|
-
insertInto: jasmine.createSpy('insertInto')
|
11
|
+
loadStylesheet: jasmine.createSpy('createCssLink')
|
13
12
|
};
|
14
13
|
|
15
14
|
load = jasmine.createSpy('load');
|
@@ -23,9 +22,9 @@ describe('modules.Custom', function () {
|
|
23
22
|
});
|
24
23
|
|
25
24
|
it('should have inserted the links correctly', function () {
|
26
|
-
expect(fakeDomHelper.
|
27
|
-
expect(fakeDomHelper.
|
28
|
-
expect(fakeDomHelper.
|
25
|
+
expect(fakeDomHelper.loadStylesheet.callCount).toEqual(2);
|
26
|
+
expect(fakeDomHelper.loadStylesheet).toHaveBeenCalledWith('http://moo');
|
27
|
+
expect(fakeDomHelper.loadStylesheet).toHaveBeenCalledWith('http://meuh');
|
29
28
|
});
|
30
29
|
|
31
30
|
it('should have loaded the families correctly', function () {
|
@@ -52,8 +52,7 @@ describe('modules.Fontdeck', function () {
|
|
52
52
|
};
|
53
53
|
|
54
54
|
fakeDomHelper = {
|
55
|
-
|
56
|
-
createScriptSrc: jasmine.createSpy('createScriptSrc'),
|
55
|
+
loadScript: jasmine.createSpy('loadScript'),
|
57
56
|
getLoadWindow: jasmine.createSpy('getLoadWindow').andReturn(global),
|
58
57
|
getProtocol: jasmine.createSpy('getProtocol').andReturn('https:'),
|
59
58
|
getHostName: function () { return 'test-host-name'; }
|
@@ -72,8 +71,8 @@ describe('modules.Fontdeck', function () {
|
|
72
71
|
});
|
73
72
|
|
74
73
|
it('should create the script correctly', function () {
|
75
|
-
expect(fakeDomHelper.
|
76
|
-
expect(fakeDomHelper.
|
74
|
+
expect(fakeDomHelper.loadScript).toHaveBeenCalled();
|
75
|
+
expect(fakeDomHelper.loadScript.calls[0].args[0]).toEqual('https://f.fontdeck.com/s/css/js/test-host-name/2282.js');
|
77
76
|
});
|
78
77
|
|
79
78
|
it('should have created a global', function () {
|
@@ -6,10 +6,7 @@ describe('modules.google.GoogleFontApi', function () {
|
|
6
6
|
link = '',
|
7
7
|
insert = '',
|
8
8
|
fakeDomHelper = {
|
9
|
-
|
10
|
-
insert = tag;
|
11
|
-
},
|
12
|
-
createCssLink: function (cssLink) {
|
9
|
+
loadStylesheet: function (cssLink) {
|
13
10
|
link = cssLink;
|
14
11
|
},
|
15
12
|
getProtocol: function () {
|
@@ -36,7 +33,6 @@ describe('modules.google.GoogleFontApi', function () {
|
|
36
33
|
});
|
37
34
|
|
38
35
|
it('has inserted the link element correctly', function () {
|
39
|
-
expect(insert).toEqual('head');
|
40
36
|
expect(link).toEqual('http://fonts.googleapis.com/css?family=Font1%7CFont2');
|
41
37
|
});
|
42
38
|
|
@@ -60,7 +56,6 @@ describe('modules.google.GoogleFontApi', function () {
|
|
60
56
|
});
|
61
57
|
|
62
58
|
it('has inserted the link element correctly', function () {
|
63
|
-
expect(insert).toEqual('head');
|
64
59
|
expect(link).toEqual('http://moo?family=Font1%7CFont2');
|
65
60
|
});
|
66
61
|
});
|
@@ -74,7 +69,6 @@ describe('modules.google.GoogleFontApi', function () {
|
|
74
69
|
});
|
75
70
|
|
76
71
|
it('has inserted the link element correctly', function () {
|
77
|
-
expect(insert).toEqual('head');
|
78
72
|
expect(link).toEqual('http://fonts.googleapis.com/css?family=Font1+WithSpace%7CFont2+WithSpaceToo');
|
79
73
|
});
|
80
74
|
});
|
@@ -88,7 +82,6 @@ describe('modules.google.GoogleFontApi', function () {
|
|
88
82
|
});
|
89
83
|
|
90
84
|
it('has inserted the link element correctly', function () {
|
91
|
-
expect(insert).toEqual('head');
|
92
85
|
expect(link).toEqual('http://fonts.googleapis.com/css?family=Font1+WithSpace:bi%7CFont2+WithSpaceToo:b,r');
|
93
86
|
});
|
94
87
|
});
|
@@ -22,8 +22,10 @@ describe('modules.Monotype', function () {
|
|
22
22
|
global = {};
|
23
23
|
|
24
24
|
fakeDomHelper = {
|
25
|
-
|
26
|
-
|
25
|
+
loadScript: jasmine.createSpy('loadScript').andCallFake(function (src, callback) {
|
26
|
+
script.onload = callback;
|
27
|
+
return script;
|
28
|
+
}),
|
27
29
|
getLoadWindow: jasmine.createSpy('getLoadWindow').andReturn(global),
|
28
30
|
getProtocol: jasmine.createSpy('getProtocol').andReturn('http:')
|
29
31
|
};
|
@@ -57,8 +59,8 @@ describe('modules.Monotype', function () {
|
|
57
59
|
|
58
60
|
it('should create a script element', function () {
|
59
61
|
expect(support).toHaveBeenCalled();
|
60
|
-
expect(fakeDomHelper.
|
61
|
-
expect(
|
62
|
+
expect(fakeDomHelper.loadScript).toHaveBeenCalled();
|
63
|
+
expect(fakeDomHelper.loadScript.calls[0].args[0]).toEqual('http://fast.fonts.com/jsapidev/01e2ff27-25bf-4801-a23e-73d328e6c7cc.js');
|
62
64
|
expect(load).toHaveBeenCalledWith([new Font('aachen bold'), new Font('kid print regular')]);
|
63
65
|
});
|
64
66
|
});
|
@@ -19,8 +19,7 @@ describe('modules.Typekit', function () {
|
|
19
19
|
load = jasmine.createSpy('load');
|
20
20
|
|
21
21
|
fakeDomHelper = {
|
22
|
-
|
23
|
-
createScriptSrc: jasmine.createSpy('createScriptSrc'),
|
22
|
+
loadScript: jasmine.createSpy('loadScript'),
|
24
23
|
getLoadWindow: jasmine.createSpy('getLoadWindow').andReturn(global),
|
25
24
|
getProtocol: jasmine.createSpy('getProtocol').andReturn('http:')
|
26
25
|
};
|
@@ -31,8 +30,8 @@ describe('modules.Typekit', function () {
|
|
31
30
|
|
32
31
|
typekit.supportUserAgent('useragent', support);
|
33
32
|
|
34
|
-
expect(fakeDomHelper.
|
35
|
-
expect(fakeDomHelper.
|
33
|
+
expect(fakeDomHelper.loadScript).toHaveBeenCalled();
|
34
|
+
expect(fakeDomHelper.loadScript.calls[0].args[0]).toEqual('http://use.typekit.net/abc.js');
|
36
35
|
expect(support).not.toHaveBeenCalled();
|
37
36
|
|
38
37
|
expect(global.__webfonttypekitmodule__).not.toBeNull();
|
@@ -78,8 +77,8 @@ describe('modules.Typekit', function () {
|
|
78
77
|
var typekit = new Typekit(fakeDomHelper, { id: 'abc', api: '/test' });
|
79
78
|
|
80
79
|
typekit.supportUserAgent('useragent', support);
|
81
|
-
expect(fakeDomHelper.
|
82
|
-
expect(fakeDomHelper.
|
80
|
+
expect(fakeDomHelper.loadScript).toHaveBeenCalled();
|
81
|
+
expect(fakeDomHelper.loadScript.calls[0].args[0]).toEqual('/test/abc.js');
|
83
82
|
});
|
84
83
|
|
85
84
|
it('should not load without a kit id', function () {
|
@@ -87,8 +86,7 @@ describe('modules.Typekit', function () {
|
|
87
86
|
|
88
87
|
typekit.supportUserAgent('useragent', support);
|
89
88
|
|
90
|
-
expect(fakeDomHelper.
|
91
|
-
expect(fakeDomHelper.createScriptSrc).not.toHaveBeenCalled();
|
89
|
+
expect(fakeDomHelper.loadScript).not.toHaveBeenCalled();
|
92
90
|
expect(support).toHaveBeenCalled();
|
93
91
|
|
94
92
|
typekit.load(load);
|
data/src/core/domhelper.js
CHANGED
@@ -14,9 +14,6 @@ webfont.DomHelper = function(mainWindow, opt_loadWindow) {
|
|
14
14
|
|
15
15
|
/** @type {Document} */
|
16
16
|
this.document_ = this.loadWindow_.document;
|
17
|
-
|
18
|
-
/** @type {boolean|undefined} */
|
19
|
-
this.supportForStyle_ = undefined;
|
20
17
|
};
|
21
18
|
|
22
19
|
goog.scope(function () {
|
@@ -106,29 +103,6 @@ goog.scope(function () {
|
|
106
103
|
return false;
|
107
104
|
};
|
108
105
|
|
109
|
-
/**
|
110
|
-
* Creates a link to a CSS document.
|
111
|
-
* @param {string} src The URL of the stylesheet.
|
112
|
-
* @return {Element} a link element.
|
113
|
-
*/
|
114
|
-
DomHelper.prototype.createCssLink = function(src) {
|
115
|
-
return this.createElement('link', {
|
116
|
-
'rel': 'stylesheet',
|
117
|
-
'href': src
|
118
|
-
});
|
119
|
-
};
|
120
|
-
|
121
|
-
/**
|
122
|
-
* Creates a link to a javascript document.
|
123
|
-
* @param {string} src The URL of the script.
|
124
|
-
* @return {Element} a script element.
|
125
|
-
*/
|
126
|
-
DomHelper.prototype.createScriptSrc = function(src) {
|
127
|
-
return this.createElement('script', {
|
128
|
-
'src': src
|
129
|
-
});
|
130
|
-
};
|
131
|
-
|
132
106
|
/**
|
133
107
|
* Appends a name to an element's class attribute.
|
134
108
|
* @param {Element} e The element.
|
@@ -187,27 +161,7 @@ goog.scope(function () {
|
|
187
161
|
* @param {string} styleString The style string.
|
188
162
|
*/
|
189
163
|
DomHelper.prototype.setStyle = function(e, styleString) {
|
190
|
-
|
191
|
-
e.setAttribute("style", styleString);
|
192
|
-
} else {
|
193
|
-
e.style.cssText = styleString;
|
194
|
-
}
|
195
|
-
};
|
196
|
-
|
197
|
-
/**
|
198
|
-
* Check if getting and setting the style attribute on an element with
|
199
|
-
* getAttribute/setAttribute is supported. In old IE, you must use style.cssText
|
200
|
-
* instead. Feature detection is only done the first time this is called.
|
201
|
-
* @private
|
202
|
-
* @return {boolean} Whether or not the feature is supported.
|
203
|
-
*/
|
204
|
-
DomHelper.prototype.hasSupportForStyle_ = function() {
|
205
|
-
if (this.supportForStyle_ === undefined) {
|
206
|
-
var e = this.document_.createElement('p');
|
207
|
-
e.innerHTML = '<a style="top:1px;">w</a>';
|
208
|
-
this.supportForStyle_ = /top/.test(e.getElementsByTagName('a')[0].getAttribute('style'));
|
209
|
-
}
|
210
|
-
return this.supportForStyle_
|
164
|
+
e.style.cssText = styleString;
|
211
165
|
};
|
212
166
|
|
213
167
|
/**
|
@@ -258,7 +212,7 @@ goog.scope(function () {
|
|
258
212
|
* @return {Element} a DOM element.
|
259
213
|
*/
|
260
214
|
DomHelper.prototype.createStyle = function(css) {
|
261
|
-
var e = this.
|
215
|
+
var e = this.createElement('style');
|
262
216
|
|
263
217
|
e.setAttribute('type', 'text/css');
|
264
218
|
if (e.styleSheet) { // IE
|
@@ -269,23 +223,71 @@ goog.scope(function () {
|
|
269
223
|
return e;
|
270
224
|
};
|
271
225
|
|
226
|
+
/**
|
227
|
+
* Loads an external stylesheet.
|
228
|
+
*
|
229
|
+
* @param {string} href the URL of the stylesheet
|
230
|
+
* @param {function(Error)=} opt_callback Called when the stylesheet has loaded or failed to
|
231
|
+
* load. Note that the callback is *NOT* guaranteed to be called in all browsers. The first
|
232
|
+
* argument to the callback is an error object that is falsy when there are no errors and
|
233
|
+
* truthy when there are.
|
234
|
+
* @return {Element} The link element
|
235
|
+
*/
|
236
|
+
DomHelper.prototype.loadStylesheet = function (href, opt_callback) {
|
237
|
+
var link = this.createElement('link', {
|
238
|
+
'rel': 'stylesheet',
|
239
|
+
'href': href
|
240
|
+
});
|
241
|
+
|
242
|
+
var done = false;
|
243
|
+
|
244
|
+
link.onload = function () {
|
245
|
+
if (!done) {
|
246
|
+
done = true;
|
247
|
+
|
248
|
+
if (opt_callback) {
|
249
|
+
opt_callback(null);
|
250
|
+
}
|
251
|
+
}
|
252
|
+
};
|
253
|
+
|
254
|
+
link.onerror = function () {
|
255
|
+
if (!done) {
|
256
|
+
done = true;
|
257
|
+
|
258
|
+
if (opt_callback) {
|
259
|
+
opt_callback(new Error('Stylesheet failed to load'));
|
260
|
+
}
|
261
|
+
}
|
262
|
+
};
|
263
|
+
|
264
|
+
this.insertInto('head', link);
|
265
|
+
|
266
|
+
return link;
|
267
|
+
};
|
268
|
+
|
272
269
|
/**
|
273
270
|
* Loads an external script file.
|
274
271
|
* @param {string} src URL of the script.
|
275
|
-
* @param {function()=} opt_callback callback when the script has loaded.
|
272
|
+
* @param {function(Error)=} opt_callback callback when the script has loaded. The first argument to
|
273
|
+
* the callback is an error object that is falsy when there are no errors and truthy when there are.
|
274
|
+
* @param {number=} opt_timeout The number of milliseconds after which the callback will be called
|
275
|
+
* with a timeout error. Defaults to 5 seconds.
|
276
|
+
* @return {Element} The script element
|
276
277
|
*/
|
277
|
-
DomHelper.prototype.loadScript = function(src, opt_callback) {
|
278
|
+
DomHelper.prototype.loadScript = function(src, opt_callback, opt_timeout) {
|
278
279
|
var head = this.document_.getElementsByTagName('head')[0];
|
279
280
|
|
280
281
|
if (head) {
|
281
|
-
var script = this.
|
282
|
-
|
282
|
+
var script = this.createElement('script', {
|
283
|
+
'src': src
|
284
|
+
});
|
283
285
|
var done = false;
|
284
286
|
script.onload = script.onreadystatechange = function() {
|
285
287
|
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
|
286
288
|
done = true;
|
287
289
|
if (opt_callback) {
|
288
|
-
opt_callback();
|
290
|
+
opt_callback(null);
|
289
291
|
}
|
290
292
|
script.onload = script.onreadystatechange = null;
|
291
293
|
// Avoid a bizarre issue with unclosed <base> tag in IE6 - http://blog.dotsmart.net/2008/04/
|
@@ -293,6 +295,19 @@ goog.scope(function () {
|
|
293
295
|
}
|
294
296
|
};
|
295
297
|
head.appendChild(script);
|
298
|
+
|
299
|
+
window.setTimeout(function () {
|
300
|
+
if (!done) {
|
301
|
+
done = true;
|
302
|
+
if (opt_callback) {
|
303
|
+
opt_callback(new Error('Script load timeout'));
|
304
|
+
}
|
305
|
+
}
|
306
|
+
}, opt_timeout || 5000);
|
307
|
+
|
308
|
+
return script;
|
296
309
|
}
|
310
|
+
|
311
|
+
return null;
|
297
312
|
};
|
298
313
|
});
|
data/src/core/webfont.js
CHANGED
@@ -60,10 +60,15 @@ goog.scope(function () {
|
|
60
60
|
fontWatcher, support) {
|
61
61
|
var that = this;
|
62
62
|
|
63
|
-
if (
|
63
|
+
if (support) {
|
64
|
+
module.load(function (fonts, opt_fontTestStrings, opt_metricCompatibleFonts) {
|
65
|
+
that.onModuleReady_(eventDispatcher, fontWatcher, fonts, opt_fontTestStrings, opt_metricCompatibleFonts);
|
66
|
+
});
|
67
|
+
} else {
|
64
68
|
var allModulesLoaded = --this.moduleLoading_ == 0;
|
65
69
|
|
66
70
|
this.moduleFailedLoading_--;
|
71
|
+
|
67
72
|
if (allModulesLoaded) {
|
68
73
|
if (this.moduleFailedLoading_ == 0) {
|
69
74
|
eventDispatcher.dispatchInactive();
|
@@ -72,12 +77,7 @@ goog.scope(function () {
|
|
72
77
|
}
|
73
78
|
}
|
74
79
|
fontWatcher.watchFonts([], {}, null, allModulesLoaded);
|
75
|
-
return;
|
76
80
|
}
|
77
|
-
|
78
|
-
module.load(function (fonts, opt_fontTestStrings, opt_metricCompatibleFonts) {
|
79
|
-
that.onModuleReady_(eventDispatcher, fontWatcher, fonts, opt_fontTestStrings, opt_metricCompatibleFonts);
|
80
|
-
});
|
81
81
|
};
|
82
82
|
|
83
83
|
/**
|
data/src/modules/ascender.js
CHANGED
@@ -44,7 +44,7 @@ goog.scope(function () {
|
|
44
44
|
var key = this.configuration_['key'];
|
45
45
|
var protocol = this.domHelper_.getProtocol();
|
46
46
|
var url = protocol + '//webfonts.fontslive.com/css/' + key + '.css';
|
47
|
-
this.domHelper_.
|
47
|
+
this.domHelper_.loadStylesheet(url);
|
48
48
|
var fv = this.parseFamiliesAndVariations(this.configuration_['families']);
|
49
49
|
onReady(fv);
|
50
50
|
};
|
data/src/modules/custom.js
CHANGED
@@ -30,9 +30,7 @@ goog.scope(function () {
|
|
30
30
|
var familiesConfiguration = this.configuration_['families'] || [];
|
31
31
|
|
32
32
|
for (i = 0, len = urls.length; i < len; i++) {
|
33
|
-
|
34
|
-
|
35
|
-
this.domHelper_.insertInto('head', this.domHelper_.createCssLink(url));
|
33
|
+
this.domHelper_.loadStylesheet(urls[i]);
|
36
34
|
}
|
37
35
|
|
38
36
|
var fonts = [];
|
data/src/modules/fontdeck.js
CHANGED
@@ -51,11 +51,13 @@ goog.scope(function () {
|
|
51
51
|
};
|
52
52
|
|
53
53
|
// Call the Fontdeck API.
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
this.domHelper_.loadScript(this.getScriptSrc(projectId), function (err) {
|
55
|
+
if (err) {
|
56
|
+
support(false);
|
57
|
+
}
|
58
|
+
});
|
57
59
|
} else {
|
58
|
-
support(
|
60
|
+
support(false);
|
59
61
|
}
|
60
62
|
};
|
61
63
|
|
@@ -54,8 +54,7 @@ goog.scope(function () {
|
|
54
54
|
var fontApiParser = new FontApiParser(fontFamilies);
|
55
55
|
fontApiParser.parse();
|
56
56
|
|
57
|
-
domHelper.
|
58
|
-
fontApiUrlBuilder.build()));
|
57
|
+
domHelper.loadStylesheet(fontApiUrlBuilder.build());
|
59
58
|
onReady(fontApiParser.getFonts(), fontApiParser.getFontTestStrings(), GoogleFontApi.METRICS_COMPATIBLE_FONTS);
|
60
59
|
};
|
61
60
|
});
|
data/src/modules/monotype.js
CHANGED
@@ -49,10 +49,7 @@ goog.scope(function () {
|
|
49
49
|
var projectId = self.configuration_['projectId'];
|
50
50
|
var version = self.configuration_['version'];
|
51
51
|
if (projectId) {
|
52
|
-
var loadWindow = self.domHelper_.getLoadWindow()
|
53
|
-
sc = self.domHelper_.createElement("script");
|
54
|
-
|
55
|
-
sc["id"] = Monotype.SCRIPTID + projectId;
|
52
|
+
var loadWindow = self.domHelper_.getLoadWindow();
|
56
53
|
|
57
54
|
function onload() {
|
58
55
|
if (loadWindow[Monotype.HOOK + projectId]) {
|
@@ -66,21 +63,17 @@ goog.scope(function () {
|
|
66
63
|
support(userAgent.getBrowserInfo().hasWebFontSupport());
|
67
64
|
}
|
68
65
|
|
69
|
-
var
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
done = true;
|
66
|
+
var script = this.domHelper_.loadScript(self.getScriptSrc(projectId, version), function (err) {
|
67
|
+
if (err) {
|
68
|
+
support(false);
|
69
|
+
} else {
|
74
70
|
onload();
|
75
|
-
sc["onload"] = sc["onreadystatechange"] = null;
|
76
71
|
}
|
77
|
-
};
|
78
|
-
|
79
|
-
sc["src"] = self.getScriptSrc(projectId, version);
|
80
|
-
this.domHelper_.insertInto('head', sc);
|
72
|
+
});
|
73
|
+
script["id"] = Monotype.SCRIPTID + projectId;
|
81
74
|
}
|
82
75
|
else {
|
83
|
-
support(
|
76
|
+
support(false);
|
84
77
|
}
|
85
78
|
};
|
86
79
|
|
data/src/modules/typekit.js
CHANGED
@@ -58,10 +58,13 @@ goog.scope(function () {
|
|
58
58
|
};
|
59
59
|
|
60
60
|
// Load the Typekit script.
|
61
|
-
|
62
|
-
|
61
|
+
this.domHelper_.loadScript(this.getScriptSrc(kitId), function (err) {
|
62
|
+
if (err) {
|
63
|
+
support(false);
|
64
|
+
}
|
65
|
+
}, 2000);
|
63
66
|
} else {
|
64
|
-
support(
|
67
|
+
support(false);
|
65
68
|
}
|
66
69
|
};
|
67
70
|
|
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.4.
|
17
|
-
s.date = '2013-07-
|
16
|
+
s.version = '1.4.10'
|
17
|
+
s.date = '2013-07-31'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
20
20
|
## as you like.
|
@@ -68,6 +68,7 @@ DESC
|
|
68
68
|
s.files = %w[
|
69
69
|
AUTHORS
|
70
70
|
CHANGELOG
|
71
|
+
CONTRIBUTING.md
|
71
72
|
Gemfile
|
72
73
|
LICENSE
|
73
74
|
README.md
|
@@ -109,7 +110,6 @@ DESC
|
|
109
110
|
spec/core/cssclassname_spec.js
|
110
111
|
spec/core/domhelper_spec.js
|
111
112
|
spec/core/eventdispatcher_spec.js
|
112
|
-
spec/core/external_script.js
|
113
113
|
spec/core/font_spec.js
|
114
114
|
spec/core/fontmoduleloader_spec.js
|
115
115
|
spec/core/fontruler_spec.js
|
@@ -120,21 +120,23 @@ DESC
|
|
120
120
|
spec/core/version_spec.js
|
121
121
|
spec/core/webfont_spec.js
|
122
122
|
spec/deps.js
|
123
|
-
spec/
|
124
|
-
spec/
|
125
|
-
spec/fonts/
|
126
|
-
spec/fonts/
|
127
|
-
spec/fonts/
|
128
|
-
spec/fonts/
|
129
|
-
spec/fonts/
|
130
|
-
spec/fonts/sourcesans.
|
131
|
-
spec/fonts/sourcesans.
|
132
|
-
spec/fonts/sourcesans.
|
133
|
-
spec/fonts/
|
134
|
-
spec/fonts/
|
135
|
-
spec/fonts/
|
136
|
-
spec/fonts/
|
137
|
-
spec/fonts/
|
123
|
+
spec/fixtures/external_script.js
|
124
|
+
spec/fixtures/external_stylesheet.css
|
125
|
+
spec/fixtures/fonts/LICENSE.txt
|
126
|
+
spec/fixtures/fonts/nullfont.css
|
127
|
+
spec/fixtures/fonts/nullfont1.css
|
128
|
+
spec/fixtures/fonts/nullfont2.css
|
129
|
+
spec/fixtures/fonts/nullfont3.css
|
130
|
+
spec/fixtures/fonts/sourcesans.eot
|
131
|
+
spec/fixtures/fonts/sourcesans.otf
|
132
|
+
spec/fixtures/fonts/sourcesans.svg
|
133
|
+
spec/fixtures/fonts/sourcesans.ttf
|
134
|
+
spec/fixtures/fonts/sourcesans.woff
|
135
|
+
spec/fixtures/fonts/sourcesansa.css
|
136
|
+
spec/fixtures/fonts/sourcesansb.css
|
137
|
+
spec/fixtures/fonts/sourcesansc.css
|
138
|
+
spec/fixtures/fonts/sourcesanscbold.css
|
139
|
+
spec/fixtures/fonts/sourcesanscbold.otf
|
138
140
|
spec/index.html
|
139
141
|
spec/modules/ascender_spec.js
|
140
142
|
spec/modules/custom_spec.js
|
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: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 1.4.
|
9
|
+
- 10
|
10
|
+
version: 1.4.10
|
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-07-
|
19
|
+
date: 2013-07-31 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rake
|
@@ -96,6 +96,7 @@ extra_rdoc_files:
|
|
96
96
|
files:
|
97
97
|
- AUTHORS
|
98
98
|
- CHANGELOG
|
99
|
+
- CONTRIBUTING.md
|
99
100
|
- Gemfile
|
100
101
|
- LICENSE
|
101
102
|
- README.md
|
@@ -137,7 +138,6 @@ files:
|
|
137
138
|
- spec/core/cssclassname_spec.js
|
138
139
|
- spec/core/domhelper_spec.js
|
139
140
|
- spec/core/eventdispatcher_spec.js
|
140
|
-
- spec/core/external_script.js
|
141
141
|
- spec/core/font_spec.js
|
142
142
|
- spec/core/fontmoduleloader_spec.js
|
143
143
|
- spec/core/fontruler_spec.js
|
@@ -148,21 +148,23 @@ files:
|
|
148
148
|
- spec/core/version_spec.js
|
149
149
|
- spec/core/webfont_spec.js
|
150
150
|
- spec/deps.js
|
151
|
-
- spec/
|
152
|
-
- spec/
|
153
|
-
- spec/fonts/
|
154
|
-
- spec/fonts/
|
155
|
-
- spec/fonts/
|
156
|
-
- spec/fonts/
|
157
|
-
- spec/fonts/
|
158
|
-
- spec/fonts/sourcesans.
|
159
|
-
- spec/fonts/sourcesans.
|
160
|
-
- spec/fonts/sourcesans.
|
161
|
-
- spec/fonts/
|
162
|
-
- spec/fonts/
|
163
|
-
- spec/fonts/
|
164
|
-
- spec/fonts/
|
165
|
-
- spec/fonts/
|
151
|
+
- spec/fixtures/external_script.js
|
152
|
+
- spec/fixtures/external_stylesheet.css
|
153
|
+
- spec/fixtures/fonts/LICENSE.txt
|
154
|
+
- spec/fixtures/fonts/nullfont.css
|
155
|
+
- spec/fixtures/fonts/nullfont1.css
|
156
|
+
- spec/fixtures/fonts/nullfont2.css
|
157
|
+
- spec/fixtures/fonts/nullfont3.css
|
158
|
+
- spec/fixtures/fonts/sourcesans.eot
|
159
|
+
- spec/fixtures/fonts/sourcesans.otf
|
160
|
+
- spec/fixtures/fonts/sourcesans.svg
|
161
|
+
- spec/fixtures/fonts/sourcesans.ttf
|
162
|
+
- spec/fixtures/fonts/sourcesans.woff
|
163
|
+
- spec/fixtures/fonts/sourcesansa.css
|
164
|
+
- spec/fixtures/fonts/sourcesansb.css
|
165
|
+
- spec/fixtures/fonts/sourcesansc.css
|
166
|
+
- spec/fixtures/fonts/sourcesanscbold.css
|
167
|
+
- spec/fixtures/fonts/sourcesanscbold.otf
|
166
168
|
- spec/index.html
|
167
169
|
- spec/modules/ascender_spec.js
|
168
170
|
- spec/modules/custom_spec.js
|