webfontloader 1.0.22 → 1.0.24
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +10 -0
- data/lib/webfontloader/demo/public/fontdeck.html +1 -1
- data/lib/webfontloader.rb +1 -1
- data/src/core/domhelper.js +16 -3
- data/src/core/font.js +11 -8
- data/src/core/fontwatcher.js +6 -4
- data/src/core/fontwatchrunner.js +20 -9
- data/src/core/namespace.js +14 -0
- data/src/fontdeck/fontdeck_script.js +13 -17
- data/src/google/googlefontapi.js +7 -0
- data/src/google/lastresortwebkitfontwatchrunner.js +89 -0
- data/src/modules.yml +1 -0
- data/src-test/core/fontwatchertest.js +18 -13
- data/src-test/core/fontwatchrunnertest.js +40 -23
- data/src-test/fontdeck/fontdeck_script_test.js +71 -14
- data/src-test/google/lastresortwebkitfontwatchrunnertest.js +204 -0
- data/webfontloader.gemspec +4 -2
- metadata +19 -17
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
v1.0.24 (January 9, 2012)
|
2
|
+
* Updated the standard test string from "BESs" to "BESbswy" for more width variability.
|
3
|
+
* Improved Google's custom FontWatchRunner implementation for Webkit to work around an issue where the browser reports the 400 weight's width when it is already loaded.
|
4
|
+
|
5
|
+
v1.0.23 (November 29, 2011)
|
6
|
+
* Made the FontWatchRunner implementation configurable on a module-by-module basis.
|
7
|
+
* Added a new .start() method to FontWatchRunner to actually kick off font loading detection.
|
8
|
+
* Added a different FontWatchRunner implementation that Google's module uses to work around a Webkit browser bug. This implementation won't trigger active early, but may trigger active much later, so it's not the default for all modules.
|
9
|
+
* Updated the implementation of Fontdeck's module to defer loading responsibility to their JS.
|
10
|
+
|
1
11
|
v1.0.22 (July 1, 2011)
|
2
12
|
* Fixed a bug in Webkit-based browsers with font detection where active would trigger without the font actually being active yet.
|
3
13
|
* Increased the frequency of checking the widths of the font watcher spans.
|
data/lib/webfontloader.rb
CHANGED
data/src/core/domhelper.js
CHANGED
@@ -25,9 +25,9 @@ webfont.DomHelper.prototype.createElement = function(elem, opt_attr,
|
|
25
25
|
for (var attr in opt_attr) {
|
26
26
|
// protect against native prototype augmentations
|
27
27
|
if (opt_attr.hasOwnProperty(attr)) {
|
28
|
-
if (attr == "style"
|
29
|
-
domElement
|
30
|
-
|
28
|
+
if (attr == "style") {
|
29
|
+
this.setStyle(domElement, opt_attr[attr]);
|
30
|
+
} else {
|
31
31
|
domElement.setAttribute(attr, opt_attr[attr]);
|
32
32
|
}
|
33
33
|
}
|
@@ -164,3 +164,16 @@ webfont.DomHelper.prototype.hasClassName = function(e, name) {
|
|
164
164
|
}
|
165
165
|
return false;
|
166
166
|
};
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Sets the style attribute on an element.
|
170
|
+
* @param {Element} e The element.
|
171
|
+
* @param {string} styleString The style string.
|
172
|
+
*/
|
173
|
+
webfont.DomHelper.prototype.setStyle = function(e, styleString) {
|
174
|
+
if (this.userAgent_.getName() == "MSIE") {
|
175
|
+
e.style.cssText = styleString;
|
176
|
+
} else {
|
177
|
+
e.setAttribute("style", styleString);
|
178
|
+
}
|
179
|
+
};
|
data/src/core/font.js
CHANGED
@@ -29,6 +29,8 @@ webfont.WebFont.prototype.load = function(configuration) {
|
|
29
29
|
|
30
30
|
webfont.WebFont.prototype.isModuleSupportingUserAgent_ = function(module, eventDispatcher,
|
31
31
|
fontWatcher, support) {
|
32
|
+
var fontWatchRunnerCtor = module.getFontWatchRunnerCtor ?
|
33
|
+
module.getFontWatchRunnerCtor() : webfont.FontWatchRunner;
|
32
34
|
if (!support) {
|
33
35
|
var allModulesLoaded = --this.moduleLoading_ == 0;
|
34
36
|
|
@@ -40,26 +42,27 @@ webfont.WebFont.prototype.isModuleSupportingUserAgent_ = function(module, eventD
|
|
40
42
|
eventDispatcher.dispatchLoading();
|
41
43
|
}
|
42
44
|
}
|
43
|
-
fontWatcher.watch([], {}, {}, allModulesLoaded);
|
45
|
+
fontWatcher.watch([], {}, {}, fontWatchRunnerCtor, allModulesLoaded);
|
44
46
|
return;
|
45
47
|
}
|
46
48
|
module.load(webfont.bind(this, this.onModuleReady_, eventDispatcher,
|
47
|
-
fontWatcher));
|
49
|
+
fontWatcher, fontWatchRunnerCtor));
|
48
50
|
};
|
49
51
|
|
50
52
|
webfont.WebFont.prototype.onModuleReady_ = function(eventDispatcher, fontWatcher,
|
51
|
-
fontFamilies, opt_fontDescriptions, opt_fontTestStrings) {
|
53
|
+
fontWatchRunnerCtor, fontFamilies, opt_fontDescriptions, opt_fontTestStrings) {
|
52
54
|
var allModulesLoaded = --this.moduleLoading_ == 0;
|
53
55
|
|
54
56
|
if (allModulesLoaded) {
|
55
57
|
eventDispatcher.dispatchLoading();
|
56
58
|
}
|
57
59
|
this.asyncCall_(webfont.bind(this, function(_fontWatcher, _fontFamilies,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
_fontDescriptions, _fontTestStrings, _fontWatchRunnerCtor,
|
61
|
+
_allModulesLoaded) {
|
62
|
+
_fontWatcher.watch(_fontFamilies, _fontDescriptions || {},
|
63
|
+
_fontTestStrings || {}, _fontWatchRunnerCtor, _allModulesLoaded);
|
64
|
+
}, fontWatcher, fontFamilies, opt_fontDescriptions, opt_fontTestStrings,
|
65
|
+
fontWatchRunnerCtor, allModulesLoaded));
|
63
66
|
};
|
64
67
|
|
65
68
|
webfont.WebFont.prototype.load_ = function(eventDispatcher, configuration) {
|
data/src/core/fontwatcher.js
CHANGED
@@ -34,7 +34,7 @@ webfont.FontWatcher.DEFAULT_VARIATION = 'n4';
|
|
34
34
|
* @param {boolean} last True if this is the last set of families to watch.
|
35
35
|
*/
|
36
36
|
webfont.FontWatcher.prototype.watch = function(fontFamilies, fontDescriptions,
|
37
|
-
fontTestStrings, last) {
|
37
|
+
fontTestStrings, fontWatchRunnerCtor, last) {
|
38
38
|
var length = fontFamilies.length;
|
39
39
|
|
40
40
|
for (var i = 0; i < length; i++) {
|
@@ -61,9 +61,11 @@ webfont.FontWatcher.prototype.watch = function(fontFamilies, fontDescriptions,
|
|
61
61
|
|
62
62
|
var activeCallback = webfont.bind(this, this.fontActive_);
|
63
63
|
var inactiveCallback = webfont.bind(this, this.fontInactive_)
|
64
|
-
new
|
65
|
-
this.domHelper_, this.fontSizer_, this.asyncCall_,
|
66
|
-
fontFamily, fontDescription, fontTestString);
|
64
|
+
var fontWatchRunner = new fontWatchRunnerCtor(activeCallback,
|
65
|
+
inactiveCallback, this.domHelper_, this.fontSizer_, this.asyncCall_,
|
66
|
+
this.getTime_, fontFamily, fontDescription, fontTestString);
|
67
|
+
|
68
|
+
fontWatchRunner.start();
|
67
69
|
}
|
68
70
|
}
|
69
71
|
};
|
data/src/core/fontwatchrunner.js
CHANGED
@@ -33,8 +33,6 @@ webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
|
|
33
33
|
webfont.FontWatchRunner.DEFAULT_FONTS_A);
|
34
34
|
this.requestedFontB_ = this.createHiddenElementWithFont_(
|
35
35
|
webfont.FontWatchRunner.DEFAULT_FONTS_B);
|
36
|
-
this.started_ = getTime();
|
37
|
-
this.check_();
|
38
36
|
};
|
39
37
|
|
40
38
|
/**
|
@@ -68,7 +66,12 @@ webfont.FontWatchRunner.DEFAULT_FONTS_B = "Georgia,'Century Schoolbook L',serif"
|
|
68
66
|
* @type {string}
|
69
67
|
* @const
|
70
68
|
*/
|
71
|
-
webfont.FontWatchRunner.DEFAULT_TEST_STRING = '
|
69
|
+
webfont.FontWatchRunner.DEFAULT_TEST_STRING = 'BESbswy';
|
70
|
+
|
71
|
+
webfont.FontWatchRunner.prototype.start = function() {
|
72
|
+
this.started_ = this.getTime_();
|
73
|
+
this.check_();
|
74
|
+
};
|
72
75
|
|
73
76
|
/**
|
74
77
|
* Checks the size of the two spans against their original sizes during each
|
@@ -141,15 +144,23 @@ webfont.FontWatchRunner.prototype.getDefaultFontSize_ = function(defaultFonts) {
|
|
141
144
|
*/
|
142
145
|
webfont.FontWatchRunner.prototype.createHiddenElementWithFont_ = function(
|
143
146
|
defaultFonts, opt_withoutFontFamily) {
|
144
|
-
var
|
145
|
-
|
146
|
-
"font-size:300px;width:auto;height:auto;line-height:normal;margin:0;" +
|
147
|
-
"padding:0;font-variant:normal;font-family:" + (opt_withoutFontFamily ? "" :
|
148
|
-
this.nameHelper_.quote(this.fontFamily_) + ",") +
|
149
|
-
defaultFonts + ";" + variationCss;
|
147
|
+
var styleString = this.computeStyleString_(defaultFonts,
|
148
|
+
this.fontDescription_, opt_withoutFontFamily);
|
150
149
|
var span = this.domHelper_.createElement('span', { 'style': styleString },
|
151
150
|
this.fontTestString_);
|
152
151
|
|
153
152
|
this.domHelper_.insertInto('body', span);
|
154
153
|
return span;
|
155
154
|
};
|
155
|
+
|
156
|
+
webfont.FontWatchRunner.prototype.computeStyleString_ = function(defaultFonts,
|
157
|
+
fontDescription, opt_withoutFontFamily) {
|
158
|
+
var variationCss = this.fvd_.expand(fontDescription);
|
159
|
+
var styleString = "position:absolute;top:-999px;left:-999px;" +
|
160
|
+
"font-size:300px;width:auto;height:auto;line-height:normal;margin:0;" +
|
161
|
+
"padding:0;font-variant:normal;font-family:"
|
162
|
+
+ (opt_withoutFontFamily ? "" :
|
163
|
+
this.nameHelper_.quote(this.fontFamily_) + ",")
|
164
|
+
+ defaultFonts + ";" + variationCss;
|
165
|
+
return styleString;
|
166
|
+
};
|
data/src/core/namespace.js
CHANGED
@@ -14,3 +14,17 @@ webfont.bind = function(context, func, opt_args) {
|
|
14
14
|
return func.apply(context, args);
|
15
15
|
};
|
16
16
|
};
|
17
|
+
|
18
|
+
webfont.extendsClass = function(baseClass, subClass) {
|
19
|
+
|
20
|
+
// Avoid polluting the baseClass prototype object with methods from the
|
21
|
+
// subClass
|
22
|
+
/** @constructor */
|
23
|
+
function baseExtendClass() {};
|
24
|
+
baseExtendClass.prototype = baseClass.prototype;
|
25
|
+
subClass.prototype = new baseExtendClass();
|
26
|
+
|
27
|
+
subClass.prototype.constructor = subClass;
|
28
|
+
subClass.superCtor_ = baseClass;
|
29
|
+
subClass.super_ = baseClass.prototype;
|
30
|
+
};
|
@@ -12,16 +12,16 @@ webfont.FontdeckScript = function(global, domHelper, configuration) {
|
|
12
12
|
|
13
13
|
webfont.FontdeckScript.NAME = 'fontdeck';
|
14
14
|
webfont.FontdeckScript.HOOK = '__webfontfontdeckmodule__';
|
15
|
-
webfont.FontdeckScript.API = '
|
15
|
+
webfont.FontdeckScript.API = '//f.fontdeck.com/s/css/js/';
|
16
16
|
|
17
17
|
webfont.FontdeckScript.prototype.getScriptSrc = function(projectId) {
|
18
|
+
var protocol = 'https:' == this.global_.location.protocol ? 'https:' : 'http:';
|
18
19
|
var api = this.configuration_['api'] || webfont.FontdeckScript.API;
|
19
|
-
return
|
20
|
+
return protocol + api + this.global_.document.location.hostname + '/' + projectId + '.js';
|
20
21
|
};
|
21
22
|
|
22
23
|
webfont.FontdeckScript.prototype.supportUserAgent = function(userAgent, support) {
|
23
24
|
var projectId = this.configuration_['id'];
|
24
|
-
var families = this.configuration_['families'] || null;
|
25
25
|
var self = this;
|
26
26
|
|
27
27
|
if (projectId) {
|
@@ -30,20 +30,16 @@ webfont.FontdeckScript.prototype.supportUserAgent = function(userAgent, support)
|
|
30
30
|
this.global_[webfont.FontdeckScript.HOOK] = {};
|
31
31
|
}
|
32
32
|
|
33
|
-
//
|
34
|
-
// and
|
35
|
-
this.global_[webfont.FontdeckScript.HOOK][projectId] = function(data) {
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
if (families !== null) {
|
44
|
-
self.fontFamilies_ = families;
|
45
|
-
}
|
46
|
-
support(true);
|
33
|
+
// Fontdeck will call this function to indicate support status
|
34
|
+
// and what fonts are provided.
|
35
|
+
this.global_[webfont.FontdeckScript.HOOK][projectId] = function(fontdeckSupports, data) {
|
36
|
+
for (var i = 0, j = data['fonts'].length; i<j; ++i) {
|
37
|
+
var font = data['fonts'][i];
|
38
|
+
// Add the FVDs
|
39
|
+
self.fontFamilies_.push(font['name']);
|
40
|
+
self.fontVariations_[font['name']] = [self.fvd_.compact("font-weight:" + font['weight'] + ";font-style:" + font['style'])];
|
41
|
+
}
|
42
|
+
support(fontdeckSupports);
|
47
43
|
};
|
48
44
|
|
49
45
|
// Call the Fontdeck API.
|
data/src/google/googlefontapi.js
CHANGED
@@ -13,6 +13,13 @@ webfont.GoogleFontApi.prototype.supportUserAgent = function(userAgent, support)
|
|
13
13
|
support(userAgent.isSupportingWebFont());
|
14
14
|
};
|
15
15
|
|
16
|
+
webfont.GoogleFontApi.prototype.getFontWatchRunnerCtor = function() {
|
17
|
+
if (this.userAgent_.getEngine() == "AppleWebKit") {
|
18
|
+
return webfont.LastResortWebKitFontWatchRunner;
|
19
|
+
}
|
20
|
+
return webfont.FontWatchRunner;
|
21
|
+
};
|
22
|
+
|
16
23
|
webfont.GoogleFontApi.prototype.load = function(onReady) {
|
17
24
|
var domHelper = this.domHelper_;
|
18
25
|
var nonBlockingIe = this.userAgent_.getName() == 'MSIE' &&
|
@@ -0,0 +1,89 @@
|
|
1
|
+
/**
|
2
|
+
* @constructor
|
3
|
+
*/
|
4
|
+
webfont.LastResortWebKitFontWatchRunner = function(activeCallback,
|
5
|
+
inactiveCallback, domHelper, fontSizer, asyncCall, getTime, fontFamily,
|
6
|
+
fontDescription, opt_fontTestString) {
|
7
|
+
webfont.LastResortWebKitFontWatchRunner.superCtor_.call(this,
|
8
|
+
activeCallback, inactiveCallback, domHelper, fontSizer, asyncCall,
|
9
|
+
getTime, fontFamily, fontDescription, opt_fontTestString);
|
10
|
+
this.webKitLastResortFontSizes_ = this.setUpWebKitLastResortFontSizes_();
|
11
|
+
this.webKitLastResortSizeChange_ = false;
|
12
|
+
};
|
13
|
+
webfont.extendsClass(webfont.FontWatchRunner, webfont.LastResortWebKitFontWatchRunner);
|
14
|
+
|
15
|
+
webfont.LastResortWebKitFontWatchRunner.METRICS_COMPATIBLE_FONTS = {
|
16
|
+
"Arimo": true,
|
17
|
+
"Cousine": true,
|
18
|
+
"Tinos": true
|
19
|
+
};
|
20
|
+
|
21
|
+
/**
|
22
|
+
* While loading a web font webkit applies a last resort fallback font to the
|
23
|
+
* element on which the web font is applied.
|
24
|
+
* See file: WebKit/Source/WebCore/css/CSSFontFaceSource.cpp.
|
25
|
+
* Looking at the different implementation for the different platforms,
|
26
|
+
* the last resort fallback font is different. This code uses the default
|
27
|
+
* OS/browsers values.
|
28
|
+
*/
|
29
|
+
webfont.LastResortWebKitFontWatchRunner.prototype
|
30
|
+
.setUpWebKitLastResortFontSizes_ = function() {
|
31
|
+
var lastResortFonts = ["Times New Roman",
|
32
|
+
"Lucida Sans Unicode", "Courier New", "Tahoma", "Arial",
|
33
|
+
"Microsoft Sans Serif", "Times", "Lucida Console", "Sans", "Serif",
|
34
|
+
"Monospace"];
|
35
|
+
var lastResortFontSizes = lastResortFonts.length;
|
36
|
+
var webKitLastResortFontSizes = {};
|
37
|
+
var element = this.createHiddenElementWithFont_(lastResortFonts[0], true);
|
38
|
+
|
39
|
+
webKitLastResortFontSizes[this.fontSizer_.getWidth(element)] = true;
|
40
|
+
for (var i = 1; i < lastResortFontSizes; i++) {
|
41
|
+
var font = lastResortFonts[i];
|
42
|
+
this.domHelper_.setStyle(element, this.computeStyleString_(font,
|
43
|
+
this.fontDescription_, true));
|
44
|
+
webKitLastResortFontSizes[this.fontSizer_.getWidth(element)] = true;
|
45
|
+
|
46
|
+
// Another WebKit quirk if the normal weight/style is loaded first,
|
47
|
+
// the size of the normal weight is returned when loading another weight.
|
48
|
+
if (this.fontDescription_[1] != '4') {
|
49
|
+
this.domHelper_.setStyle(element, this.computeStyleString_(font,
|
50
|
+
this.fontDescription_[0] + '4', true));
|
51
|
+
webKitLastResortFontSizes[this.fontSizer_.getWidth(element)] = true;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
this.domHelper_.removeElement(element);
|
55
|
+
return webKitLastResortFontSizes;
|
56
|
+
};
|
57
|
+
|
58
|
+
webfont.LastResortWebKitFontWatchRunner.prototype.check_ = function() {
|
59
|
+
var sizeA = this.fontSizer_.getWidth(this.requestedFontA_);
|
60
|
+
var sizeB = this.fontSizer_.getWidth(this.requestedFontB_);
|
61
|
+
|
62
|
+
if (!this.webKitLastResortSizeChange_ && sizeA == sizeB &&
|
63
|
+
this.webKitLastResortFontSizes_[sizeA]) {
|
64
|
+
this.webKitLastResortFontSizes_ = {};
|
65
|
+
this.webKitLastResortFontSizes_[sizeA] = true;
|
66
|
+
this.webKitLastResortSizeChange_ = true;
|
67
|
+
}
|
68
|
+
if ((this.originalSizeA_ != sizeA || this.originalSizeB_ != sizeB) &&
|
69
|
+
(!this.webKitLastResortFontSizes_[sizeA] &&
|
70
|
+
!this.webKitLastResortFontSizes_[sizeB])) {
|
71
|
+
this.finish_(this.activeCallback_);
|
72
|
+
} else if (this.getTime_() - this.started_ >= 5000) {
|
73
|
+
|
74
|
+
// In order to handle the fact that a font could be the same size as the
|
75
|
+
// default browser font on a webkit browser, mark the font as active
|
76
|
+
// after 5 seconds if the latest 2 sizes are in webKitLastResortFontSizes_
|
77
|
+
// and the font name is known to be metrics compatible.
|
78
|
+
if (this.webKitLastResortFontSizes_[sizeA]
|
79
|
+
&& this.webKitLastResortFontSizes_[sizeB] &&
|
80
|
+
webfont.LastResortWebKitFontWatchRunner.METRICS_COMPATIBLE_FONTS[
|
81
|
+
this.fontFamily_]) {
|
82
|
+
this.finish_(this.activeCallback_);
|
83
|
+
} else {
|
84
|
+
this.finish_(this.inactiveCallback_);
|
85
|
+
}
|
86
|
+
} else {
|
87
|
+
this.asyncCheck_();
|
88
|
+
}
|
89
|
+
};
|
data/src/modules.yml
CHANGED
@@ -60,15 +60,19 @@ FontWatcherTest.prototype.setUp = function() {
|
|
60
60
|
self.testStringCount_++;
|
61
61
|
self.testStrings_[fontFamily] = opt_fontTestString;
|
62
62
|
}
|
63
|
+
this.activeCallback_ = activeCallback;
|
64
|
+
this.inactiveCallback_ = inactiveCallback;
|
65
|
+
this.fontFamily_ = fontFamily;
|
66
|
+
this.fontDescription_ = fontDescription;
|
67
|
+
};
|
63
68
|
|
64
|
-
|
65
|
-
|
69
|
+
webfont.FontWatchRunner.prototype.start = function() {
|
70
|
+
if (self.fontWatchRunnerActiveFamilies_.indexOf(this.fontFamily_) > -1) {
|
71
|
+
this.activeCallback_(this.fontFamily_, this.fontDescription_);
|
66
72
|
} else {
|
67
|
-
|
73
|
+
this.inactiveCallback_(this.fontFamily_, this.fontDescription_);
|
68
74
|
}
|
69
|
-
|
70
75
|
};
|
71
|
-
|
72
76
|
};
|
73
77
|
|
74
78
|
FontWatcherTest.prototype.tearDown = function() {
|
@@ -83,7 +87,7 @@ FontWatcherTest.prototype.testWatchOneFontNotLast = function() {
|
|
83
87
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
84
88
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
85
89
|
|
86
|
-
fontWatcher.watch(fontFamilies, {}, {}, false);
|
90
|
+
fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, false);
|
87
91
|
|
88
92
|
assertEquals(0, this.fontInactiveEventCalled_);
|
89
93
|
assertEquals(0, this.activeEventCalled_);
|
@@ -97,7 +101,7 @@ FontWatcherTest.prototype.testWatchOneFontActive = function() {
|
|
97
101
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
98
102
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
99
103
|
|
100
|
-
fontWatcher.watch(fontFamilies, {}, {}, true);
|
104
|
+
fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
|
101
105
|
|
102
106
|
assertEquals(1, this.fontLoadingEventCalled_);
|
103
107
|
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
@@ -115,7 +119,7 @@ FontWatcherTest.prototype.testWatchOneFontInactive = function() {
|
|
115
119
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
116
120
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
117
121
|
|
118
|
-
fontWatcher.watch(fontFamilies, {}, {}, true);
|
122
|
+
fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
|
119
123
|
|
120
124
|
assertEquals(1, this.fontLoadingEventCalled_);
|
121
125
|
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
@@ -133,7 +137,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsActive = function() {
|
|
133
137
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
134
138
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
135
139
|
|
136
|
-
fontWatcher.watch(fontFamilies, {}, {}, true);
|
140
|
+
fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
|
137
141
|
|
138
142
|
assertEquals(3, this.fontLoadingEventCalled_);
|
139
143
|
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
@@ -155,7 +159,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsInactive = function() {
|
|
155
159
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
156
160
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
157
161
|
|
158
|
-
fontWatcher.watch(fontFamilies, {}, {}, true);
|
162
|
+
fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
|
159
163
|
|
160
164
|
assertEquals(3, this.fontLoadingEventCalled_);
|
161
165
|
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
@@ -177,7 +181,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsMixed = function() {
|
|
177
181
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
178
182
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
179
183
|
|
180
|
-
fontWatcher.watch(fontFamilies, {}, {}, true);
|
184
|
+
fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
|
181
185
|
|
182
186
|
assertEquals(3, this.fontLoadingEventCalled_);
|
183
187
|
assertEquals(true, this.fontLoading_['fontFamily1 n4']);
|
@@ -205,7 +209,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsWithDescriptions = function() {
|
|
205
209
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
206
210
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
207
211
|
|
208
|
-
fontWatcher.watch(fontFamilies, fontDescriptions, {}, true);
|
212
|
+
fontWatcher.watch(fontFamilies, fontDescriptions, {}, webfont.FontWatchRunner, true);
|
209
213
|
|
210
214
|
assertEquals(5, this.fontLoadingEventCalled_);
|
211
215
|
assertEquals(true, this.fontLoading_['fontFamily1 i7']);
|
@@ -238,7 +242,8 @@ FontWatcherTest.prototype.testWatchMultipleFontsWithTestStrings = function() {
|
|
238
242
|
var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
|
239
243
|
this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
|
240
244
|
|
241
|
-
fontWatcher.watch(fontFamilies, {}, fontTestStrings,
|
245
|
+
fontWatcher.watch(fontFamilies, {}, fontTestStrings, webfont.FontWatchRunner,
|
246
|
+
true);
|
242
247
|
|
243
248
|
assertEquals(2, this.testStringCount_);
|
244
249
|
assertEquals('testString1', this.testStrings_['fontFamily1']);
|
@@ -92,9 +92,12 @@ FontWatchRunnerTest.prototype.testWatchFontAlreadyLoaded = function() {
|
|
92
92
|
this.timesToReportChangedWidth_ = 2;
|
93
93
|
this.timesToGetTimeBeforeTimeout_ = 10;
|
94
94
|
|
95
|
-
new webfont.FontWatchRunner(this.activeCallback_,
|
96
|
-
this.
|
97
|
-
this.
|
95
|
+
var fontWatchRunner = new webfont.FontWatchRunner(this.activeCallback_,
|
96
|
+
this.inactiveCallback_, this.fakeDomHelper_, this.fakeFontSizer_,
|
97
|
+
this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
98
|
+
this.fontDescription_);
|
99
|
+
|
100
|
+
fontWatchRunner.start();
|
98
101
|
|
99
102
|
assertEquals(1, this.asyncCount_);
|
100
103
|
|
@@ -108,9 +111,12 @@ FontWatchRunnerTest.prototype.testWatchFontWaitForLoadActive = function() {
|
|
108
111
|
this.timesToReportChangedWidth_ = 2;
|
109
112
|
this.timesToGetTimeBeforeTimeout_ = 10;
|
110
113
|
|
111
|
-
new webfont.FontWatchRunner(this.activeCallback_,
|
112
|
-
this.
|
113
|
-
this.
|
114
|
+
var fontWatchRunner = new webfont.FontWatchRunner(this.activeCallback_,
|
115
|
+
this.inactiveCallback_, this.fakeDomHelper_, this.fakeFontSizer_,
|
116
|
+
this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
117
|
+
this.fontDescription_);
|
118
|
+
|
119
|
+
fontWatchRunner.start();
|
114
120
|
|
115
121
|
assertEquals(4, this.asyncCount_);
|
116
122
|
|
@@ -124,9 +130,12 @@ FontWatchRunnerTest.prototype.testWatchFontWaitForLoadInactive = function() {
|
|
124
130
|
this.timesToReportChangedWidth_ = 2;
|
125
131
|
this.timesToGetTimeBeforeTimeout_ = 5;
|
126
132
|
|
127
|
-
new webfont.FontWatchRunner(this.activeCallback_,
|
128
|
-
this.
|
129
|
-
this.
|
133
|
+
var fontWatchRunner = new webfont.FontWatchRunner(this.activeCallback_,
|
134
|
+
this.inactiveCallback_, this.fakeDomHelper_, this.fakeFontSizer_,
|
135
|
+
this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
136
|
+
this.fontDescription_);
|
137
|
+
|
138
|
+
fontWatchRunner.start();
|
130
139
|
|
131
140
|
assertEquals(4, this.asyncCount_);
|
132
141
|
|
@@ -148,9 +157,12 @@ FontWatchRunnerTest.prototype.testWatchFontWithInconsistentWidthIsStillInactive
|
|
148
157
|
this.timesToReportChangedWidth_ = 1;
|
149
158
|
this.timesToGetTimeBeforeTimeout_ = 10;
|
150
159
|
|
151
|
-
new webfont.FontWatchRunner(this.activeCallback_,
|
152
|
-
this.
|
153
|
-
this.
|
160
|
+
var fontWatchRunner = new webfont.FontWatchRunner(this.activeCallback_,
|
161
|
+
this.inactiveCallback_, this.fakeDomHelper_, this.fakeFontSizer_,
|
162
|
+
this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
163
|
+
this.fontDescription_);
|
164
|
+
|
165
|
+
fontWatchRunner.start();
|
154
166
|
|
155
167
|
assertEquals(9, this.asyncCount_);
|
156
168
|
|
@@ -164,30 +176,32 @@ FontWatchRunnerTest.prototype.testDomWithDefaultTestString = function() {
|
|
164
176
|
this.timesToReportChangedWidth_ = 2;
|
165
177
|
this.timesToGetTimeBeforeTimeout_ = 10;
|
166
178
|
|
167
|
-
new webfont.FontWatchRunner(this.activeCallback_,
|
168
|
-
this.
|
169
|
-
this.
|
179
|
+
var fontWatchRunner = new webfont.FontWatchRunner(this.activeCallback_,
|
180
|
+
this.inactiveCallback_, this.fakeDomHelper_, this.fakeFontSizer_,
|
181
|
+
this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
182
|
+
this.fontDescription_);
|
183
|
+
|
184
|
+
fontWatchRunner.start();
|
170
185
|
|
171
186
|
assertEquals(4, this.createElementCalled_);
|
172
187
|
assertEquals('span', this.createdElements_[0]['name']);
|
173
188
|
assertEquals(-1, this.createdElements_[0]['attrs']['style'].indexOf('fontFamily1'));
|
174
189
|
assertNotEquals(-1, this.createdElements_[0]['attrs']['style'].indexOf(webfont.FontWatchRunner.DEFAULT_FONTS_A));
|
175
|
-
assertEquals('
|
190
|
+
assertEquals('BESbswy', this.createdElements_[0]['innerHtml']);
|
176
191
|
assertEquals('span', this.createdElements_[1]['name']);
|
177
192
|
assertEquals(-1, this.createdElements_[1]['attrs']['style'].indexOf('fontFamily1'));
|
178
193
|
assertNotEquals(-1, this.createdElements_[1]['attrs']['style'].indexOf(webfont.FontWatchRunner.DEFAULT_FONTS_B));
|
179
|
-
assertEquals('
|
194
|
+
assertEquals('BESbswy', this.createdElements_[1]['innerHtml']);
|
180
195
|
assertEquals('span', this.createdElements_[2]['name']);
|
181
196
|
assertNotEquals(-1, this.createdElements_[2]['attrs']['style'].indexOf('fontFamily1'));
|
182
197
|
assertNotEquals(-1, this.createdElements_[2]['attrs']['style'].indexOf(webfont.FontWatchRunner.DEFAULT_FONTS_A));
|
183
|
-
assertEquals('
|
198
|
+
assertEquals('BESbswy', this.createdElements_[2]['innerHtml']);
|
184
199
|
assertEquals('span', this.createdElements_[3]['name']);
|
185
200
|
assertNotEquals(-1, this.createdElements_[3]['attrs']['style'].indexOf('fontFamily1'));
|
186
201
|
assertNotEquals(-1, this.createdElements_[3]['attrs']['style'].indexOf(webfont.FontWatchRunner.DEFAULT_FONTS_B));
|
187
|
-
assertEquals('
|
202
|
+
assertEquals('BESbswy', this.createdElements_[3]['innerHtml']);
|
188
203
|
assertEquals(4, this.insertIntoCalled_);
|
189
204
|
assertEquals(4, this.removeElementCalled_);
|
190
|
-
|
191
205
|
};
|
192
206
|
|
193
207
|
FontWatchRunnerTest.prototype.testDomWithNotDefaultTestString = function() {
|
@@ -195,9 +209,12 @@ FontWatchRunnerTest.prototype.testDomWithNotDefaultTestString = function() {
|
|
195
209
|
this.timesToReportChangedWidth_ = 2;
|
196
210
|
this.timesToGetTimeBeforeTimeout_ = 10;
|
197
211
|
|
198
|
-
new webfont.FontWatchRunner(this.activeCallback_,
|
199
|
-
this.
|
200
|
-
this.
|
212
|
+
var fontWatchRunner = new webfont.FontWatchRunner(this.activeCallback_,
|
213
|
+
this.inactiveCallback_, this.fakeDomHelper_, this.fakeFontSizer_,
|
214
|
+
this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
215
|
+
this.fontDescription_, 'testString');
|
216
|
+
|
217
|
+
fontWatchRunner.start();
|
201
218
|
|
202
219
|
assertEquals(4, this.createElementCalled_);
|
203
220
|
assertEquals('span', this.createdElements_[0]['name']);
|
@@ -5,10 +5,39 @@ FontdeckScriptTest.prototype.testSupportAndLoadLifecycle = function() {
|
|
5
5
|
'id': '2282'
|
6
6
|
};
|
7
7
|
var apiResponse = {
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
"domain" : "localhost",
|
9
|
+
"cssurl" : "http://f.fontdeck.com/s/css/03BmCXiV2AHwX/Rp+OBFTfD2oFs/localhost/2282.css",
|
10
|
+
"project" : 2282,
|
11
|
+
"cssbase" : "http://f.fontdeck.com/s/css/03BmCXiV2AHwX/Rp+OBFTfD2oFs",
|
12
|
+
"fonts" : [
|
13
|
+
{
|
14
|
+
"font_family" : "'Fertigo Pro Regular', Fertigo, Constantia, Palatino, serif",
|
15
|
+
"font_size_adjust" : 0.508,
|
16
|
+
"name" : "Fertigo Pro Regular",
|
17
|
+
"style" : "normal",
|
18
|
+
"weight" : "normal",
|
19
|
+
"font_urls" : {
|
20
|
+
"eot" : "http://f.fontdeck.com/f/1/SUlFR0tid0kAA2vb11Ly/IGWDK+wV8TMAfV0J1Ej1J1GFRT1bssqrn6a.eot",
|
21
|
+
"ttf" : "http://f.fontdeck.com/f/1/SUlFR0tid0kAA2vb11Ly/IGWDK+wV8TMAfV0J1Ej1J1GFRT1bssqrn6a.ttf",
|
22
|
+
"woff" : "http://f.fontdeck.com/f/1/SUlFR0tid0kAA2vb11Ly/IGWDK+wV8TMAfV0J1Ej1J1GFRT1bssqrn6a.woff",
|
23
|
+
"svg" : "http://f.fontdeck.com/f/1/SUlFR0tid0kAA2vb11Ly/IGWDK+wV8TMAfV0J1Ej1J1GFRT1bssqrn6a.svg#104"
|
24
|
+
},
|
25
|
+
"id" : 104
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"font_family" : "'Bodoni Display Bold Italic', Georgia, 'Times New Roman', Times, serif",
|
29
|
+
"font_size_adjust" : 0.45,
|
30
|
+
"name" : "Bodoni Display Bold Italic",
|
31
|
+
"style" : "italic",
|
32
|
+
"weight" : "bold",
|
33
|
+
"font_urls" : {
|
34
|
+
"eot" : "http://f.fontdeck.com/f/1/azJEbTVyc1QAA11+CAE5C93+l/bAQx1ipRo6Maba19w3Yy5ng+qVWlfj.eot",
|
35
|
+
"ttf" : "http://f.fontdeck.com/f/1/azJEbTVyc1QAA11+CAE5C93+l/bAQx1ipRo6Maba19w3Yy5ng+qVWlfj.ttf",
|
36
|
+
"woff" : "http://f.fontdeck.com/f/1/azJEbTVyc1QAA11+CAE5C93+l/bAQx1ipRo6Maba19w3Yy5ng+qVWlfj.woff",
|
37
|
+
"svg" : "http://f.fontdeck.com/f/1/azJEbTVyc1QAA11+CAE5C93+l/bAQx1ipRo6Maba19w3Yy5ng+qVWlfj.svg#2256"
|
38
|
+
},
|
39
|
+
"id" : 2256
|
40
|
+
}
|
12
41
|
]
|
13
42
|
};
|
14
43
|
var insert = '';
|
@@ -19,13 +48,18 @@ FontdeckScriptTest.prototype.testSupportAndLoadLifecycle = function() {
|
|
19
48
|
},
|
20
49
|
createScriptSrc: function(srcLink) {
|
21
50
|
src = srcLink;
|
51
|
+
}
|
52
|
+
};
|
53
|
+
var global = {
|
54
|
+
location: {
|
55
|
+
protocol: 'https:'
|
22
56
|
},
|
23
|
-
|
24
|
-
|
25
|
-
|
57
|
+
document: {
|
58
|
+
location: {
|
59
|
+
hostname: 'test-host-name'
|
60
|
+
}
|
26
61
|
}
|
27
62
|
};
|
28
|
-
var global = {};
|
29
63
|
var fontdeck = new webfont.FontdeckScript(global, fakeDomHelper, configuration);
|
30
64
|
|
31
65
|
// supportUserAgent
|
@@ -34,16 +68,39 @@ FontdeckScriptTest.prototype.testSupportAndLoadLifecycle = function() {
|
|
34
68
|
|
35
69
|
fontdeck.supportUserAgent(userAgent, function(support) { isSupport = support; });
|
36
70
|
assertEquals('head', insert);
|
37
|
-
assertEquals('
|
71
|
+
assertEquals('https://f.fontdeck.com/s/css/js/test-host-name/2282.js', src);
|
38
72
|
assertEquals(null, isSupport);
|
39
73
|
|
40
74
|
assertNotNull(global.__webfontfontdeckmodule__);
|
41
75
|
assertNotNull(global.__webfontfontdeckmodule__['2282']);
|
42
76
|
|
43
77
|
// Call the callback function passing in dummy API response.
|
44
|
-
global.__webfontfontdeckmodule__['2282'](apiResponse);
|
78
|
+
global.__webfontfontdeckmodule__['2282'](true, apiResponse);
|
79
|
+
|
80
|
+
assertEquals(fontdeck.fontFamilies_, [apiResponse.fonts[0].name, apiResponse.fonts[1].name]);
|
81
|
+
assertEquals(fontdeck.fontVariations_[apiResponse.fonts[0].name], ['n4']);
|
82
|
+
assertEquals(fontdeck.fontVariations_[apiResponse.fonts[1].name], ['i7']);
|
83
|
+
|
84
|
+
assertEquals(true, isSupport);
|
85
|
+
};
|
86
|
+
|
87
|
+
FontdeckScriptTest.prototype.testNoProjectId = function() {
|
88
|
+
var configuration = {
|
89
|
+
'id': null
|
90
|
+
};
|
91
|
+
var insert = '';
|
92
|
+
var src = '';
|
93
|
+
var fakeDomHelper = {};
|
94
|
+
var global = {};
|
95
|
+
var fontdeck = new webfont.FontdeckScript(global, fakeDomHelper, configuration);
|
96
|
+
|
97
|
+
// supportUserAgent
|
98
|
+
var userAgent = 'user agent';
|
99
|
+
var isSupport = null;
|
45
100
|
|
46
|
-
|
47
|
-
|
48
|
-
assertEquals(fontdeck.
|
49
|
-
|
101
|
+
fontdeck.supportUserAgent(userAgent, function(support) { isSupport = support; });
|
102
|
+
|
103
|
+
assertEquals(fontdeck.fontFamilies_, []);
|
104
|
+
assertEquals(fontdeck.fontVariations_, []);
|
105
|
+
assertEquals(true, isSupport);
|
106
|
+
}
|
@@ -0,0 +1,204 @@
|
|
1
|
+
var LastResortWebKitFontWatchRunnerTest =
|
2
|
+
TestCase('LastResortWebKitFontWatchRunnerTest');
|
3
|
+
|
4
|
+
LastResortWebKitFontWatchRunnerTest.prototype.setUp = function() {
|
5
|
+
var self = this;
|
6
|
+
|
7
|
+
this.fontFamily_ = 'fontFamily1';
|
8
|
+
this.fontDescription_ = 'n4';
|
9
|
+
|
10
|
+
this.fontActiveCalled_ = 0;
|
11
|
+
this.fontActive_ = {};
|
12
|
+
this.fontInactiveCalled_ = 0;
|
13
|
+
this.fontInactive_ = {};
|
14
|
+
this.activeCallback_ = function(fontFamily, fontDescription) {
|
15
|
+
self.fontActiveCalled_++;
|
16
|
+
self.fontActive_[fontFamily + ' ' + fontDescription] = true;
|
17
|
+
};
|
18
|
+
this.inactiveCallback_ = function(fontFamily, fontDescription) {
|
19
|
+
self.fontInactiveCalled_++;
|
20
|
+
self.fontInactive_[fontFamily + ' ' + fontDescription] = true;
|
21
|
+
};
|
22
|
+
|
23
|
+
this.createElementCalled_ = 0;
|
24
|
+
this.createdElements_ = [];
|
25
|
+
this.insertIntoCalled_ = 0;
|
26
|
+
this.removeElementCalled_ = 0;
|
27
|
+
this.setStyleCalled_ = 0;
|
28
|
+
this.fakeDomHelper_ = {
|
29
|
+
createElement: function(name, attrs, innerHtml) {
|
30
|
+
self.createElementCalled_++;
|
31
|
+
self.createdElements_.push({
|
32
|
+
'name': name,
|
33
|
+
'attrs': attrs,
|
34
|
+
'innerHtml': innerHtml
|
35
|
+
});
|
36
|
+
|
37
|
+
var element = document.createElement(name);
|
38
|
+
|
39
|
+
for (var attr in attrs) {
|
40
|
+
element.setAttribute(attr, attrs[attr]);
|
41
|
+
}
|
42
|
+
element.innerHTML = innerHtml;
|
43
|
+
return element;
|
44
|
+
},
|
45
|
+
insertInto: function(name, el) {
|
46
|
+
self.insertIntoCalled_++;
|
47
|
+
},
|
48
|
+
removeElement: function(el) {
|
49
|
+
self.removeElementCalled_++;
|
50
|
+
},
|
51
|
+
setStyle: function(e, s) {
|
52
|
+
self.setStyleCalled_++;
|
53
|
+
}
|
54
|
+
};
|
55
|
+
|
56
|
+
this.timesToGetTimeBeforeTimeout_ = 10;
|
57
|
+
this.fakeGetTime_ = function() {
|
58
|
+
if (self.timesToGetTimeBeforeTimeout_ <= 0) {
|
59
|
+
return 6000;
|
60
|
+
} else {
|
61
|
+
self.timesToGetTimeBeforeTimeout_--;
|
62
|
+
return 1;
|
63
|
+
}
|
64
|
+
};
|
65
|
+
|
66
|
+
this.asyncCount_ = 0;
|
67
|
+
this.fakeAsyncCall_ = function(func, timeout) {
|
68
|
+
self.asyncCount_++;
|
69
|
+
func();
|
70
|
+
};
|
71
|
+
};
|
72
|
+
|
73
|
+
LastResortWebKitFontWatchRunnerTest.prototype.testLastResortFontIgnored =
|
74
|
+
function() {
|
75
|
+
var originalSizeCount = 2;
|
76
|
+
var lastResortFontsCount = 11;
|
77
|
+
var firstSize = 2;
|
78
|
+
var secondSize = 2;
|
79
|
+
var thirdSize = 2;
|
80
|
+
|
81
|
+
var fontWatchRunner = new webfont.LastResortWebKitFontWatchRunner(
|
82
|
+
this.activeCallback_,
|
83
|
+
this.inactiveCallback_,
|
84
|
+
this.fakeDomHelper_, {getWidth: function() {
|
85
|
+
if (originalSizeCount > 0) {
|
86
|
+
originalSizeCount--;
|
87
|
+
return 1;
|
88
|
+
}
|
89
|
+
if (lastResortFontsCount > 0) {
|
90
|
+
lastResortFontsCount--;
|
91
|
+
return 2;
|
92
|
+
}
|
93
|
+
if (firstSize > 0) {
|
94
|
+
firstSize--;
|
95
|
+
return 1;
|
96
|
+
}
|
97
|
+
if (secondSize > 0) {
|
98
|
+
secondSize--;
|
99
|
+
return 2;
|
100
|
+
}
|
101
|
+
if (thirdSize > 0) {
|
102
|
+
thirdSize--;
|
103
|
+
return 3;
|
104
|
+
}
|
105
|
+
}}, this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
106
|
+
this.fontDescription_);
|
107
|
+
|
108
|
+
fontWatchRunner.start();
|
109
|
+
|
110
|
+
assertEquals(2, this.asyncCount_);
|
111
|
+
|
112
|
+
// When on webkit time out ends up activating the font.
|
113
|
+
assertEquals(1, this.fontActiveCalled_);
|
114
|
+
assertEquals(0, this.fontInactiveCalled_);
|
115
|
+
assertEquals(true, this.fontActive_['fontFamily1 n4']);
|
116
|
+
};
|
117
|
+
|
118
|
+
LastResortWebKitFontWatchRunnerTest.prototype.testLastResortFontActiveWhenSizeMatch
|
119
|
+
= function() {
|
120
|
+
this.timesToGetTimeBeforeTimeout_ = 3;
|
121
|
+
var originalSizeCount = 2;
|
122
|
+
var lastResortFontsCount = 11;
|
123
|
+
var firstSize = 2;
|
124
|
+
|
125
|
+
this.fontFamily_ = "Arimo";
|
126
|
+
|
127
|
+
var fontWatchRunner = new webfont.LastResortWebKitFontWatchRunner(
|
128
|
+
this.activeCallback_,
|
129
|
+
this.inactiveCallback_,
|
130
|
+
this.fakeDomHelper_, {getWidth: function() {
|
131
|
+
if (originalSizeCount > 0) {
|
132
|
+
originalSizeCount--;
|
133
|
+
return 1;
|
134
|
+
}
|
135
|
+
if (lastResortFontsCount > 0) {
|
136
|
+
lastResortFontsCount--;
|
137
|
+
return 2;
|
138
|
+
}
|
139
|
+
if (firstSize > 0) {
|
140
|
+
firstSize--;
|
141
|
+
return 1;
|
142
|
+
}
|
143
|
+
return 2;
|
144
|
+
}}, this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
145
|
+
this.fontDescription_);
|
146
|
+
|
147
|
+
fontWatchRunner.start();
|
148
|
+
|
149
|
+
assertEquals(2, this.asyncCount_);
|
150
|
+
|
151
|
+
assertEquals(1, this.fontActiveCalled_);
|
152
|
+
assertEquals(0, this.fontInactiveCalled_);
|
153
|
+
assertEquals(true, this.fontActive_['Arimo n4']);
|
154
|
+
};
|
155
|
+
|
156
|
+
LastResortWebKitFontWatchRunnerTest.prototype.testLastResortFontInactiveWhenSizeNoMatch
|
157
|
+
= function() {
|
158
|
+
this.timesToGetTimeBeforeTimeout_ = 3;
|
159
|
+
var originalSizeCount = 2;
|
160
|
+
var lastResortFontsCount = 11;
|
161
|
+
var firstSize = 2;
|
162
|
+
var secondSize = 2;
|
163
|
+
var thirdSize = 2;
|
164
|
+
|
165
|
+
var fontWatchRunner = new webfont.LastResortWebKitFontWatchRunner(
|
166
|
+
this.activeCallback_,
|
167
|
+
this.inactiveCallback_,
|
168
|
+
this.fakeDomHelper_, {getWidth: function(elem) {
|
169
|
+
if (originalSizeCount > 0) {
|
170
|
+
originalSizeCount--;
|
171
|
+
return 1;
|
172
|
+
}
|
173
|
+
if (lastResortFontsCount > 0) {
|
174
|
+
lastResortFontsCount--;
|
175
|
+
return 2;
|
176
|
+
}
|
177
|
+
if (firstSize > 0) {
|
178
|
+
firstSize--;
|
179
|
+
return 1;
|
180
|
+
}
|
181
|
+
if (secondSize > 0) {
|
182
|
+
secondSize--;
|
183
|
+
return 2;
|
184
|
+
}
|
185
|
+
if (thirdSize == 2) {
|
186
|
+
thirdSize--;
|
187
|
+
return 2;
|
188
|
+
}
|
189
|
+
if (thirdSize == 1) {
|
190
|
+
thirdSize--;
|
191
|
+
return 4;
|
192
|
+
}
|
193
|
+
}}, this.fakeAsyncCall_, this.fakeGetTime_, this.fontFamily_,
|
194
|
+
this.fontDescription_);
|
195
|
+
|
196
|
+
fontWatchRunner.start();
|
197
|
+
|
198
|
+
assertEquals(2, this.asyncCount_);
|
199
|
+
|
200
|
+
// When on webkit time out ends up activating the font.
|
201
|
+
assertEquals(0, this.fontActiveCalled_);
|
202
|
+
assertEquals(1, this.fontInactiveCalled_);
|
203
|
+
assertEquals(true, this.fontInactive_['fontFamily1 n4']);
|
204
|
+
};
|
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.0.
|
17
|
-
s.date = '
|
16
|
+
s.version = '1.0.24'
|
17
|
+
s.date = '2012-01-09'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
20
20
|
## as you like.
|
@@ -117,6 +117,7 @@ DESC
|
|
117
117
|
src-test/google/fontapiparsertest.js
|
118
118
|
src-test/google/fontapiurlbuildertest.js
|
119
119
|
src-test/google/googlefontapitest.js
|
120
|
+
src-test/google/lastresortwebkitfontwatchrunnertest.js
|
120
121
|
src-test/monotype/monotype_script_test.js
|
121
122
|
src-test/typekit/typekit_script_test.js
|
122
123
|
src/ascender/ascender_script.js
|
@@ -140,6 +141,7 @@ DESC
|
|
140
141
|
src/google/fontapiparser.js
|
141
142
|
src/google/fontapiurlbuilder.js
|
142
143
|
src/google/googlefontapi.js
|
144
|
+
src/google/lastresortwebkitfontwatchrunner.js
|
143
145
|
src/modules.yml
|
144
146
|
src/monotype/monotype_script.js
|
145
147
|
src/typekit/typekit_script.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: 39
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 24
|
10
|
+
version: 1.0.24
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Carver
|
@@ -16,12 +16,11 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2012-01-09 00:00:00 -08:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
@@ -32,12 +31,12 @@ dependencies:
|
|
32
31
|
- 2
|
33
32
|
- 1
|
34
33
|
version: 1.2.1
|
35
|
-
name: rack
|
36
34
|
prerelease: false
|
37
|
-
|
38
|
-
|
35
|
+
requirement: *id001
|
36
|
+
name: rack
|
39
37
|
type: :development
|
40
|
-
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
43
42
|
- - ~>
|
@@ -47,12 +46,12 @@ dependencies:
|
|
47
46
|
- 1
|
48
47
|
- 0
|
49
48
|
version: "1.0"
|
50
|
-
name: sinatra
|
51
49
|
prerelease: false
|
52
|
-
|
53
|
-
|
50
|
+
requirement: *id002
|
51
|
+
name: sinatra
|
54
52
|
type: :development
|
55
|
-
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
55
|
none: false
|
57
56
|
requirements:
|
58
57
|
- - ~>
|
@@ -63,9 +62,10 @@ dependencies:
|
|
63
62
|
- 1
|
64
63
|
- 6
|
65
64
|
version: 0.1.6
|
66
|
-
name: vegas
|
67
65
|
prerelease: false
|
68
|
-
|
66
|
+
requirement: *id003
|
67
|
+
name: vegas
|
68
|
+
type: :development
|
69
69
|
description: |
|
70
70
|
WebFont Loader gives you added control when using linked fonts via
|
71
71
|
`@font-face`. It provides a common interface to loading fonts regardless of
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- src-test/google/fontapiparsertest.js
|
136
136
|
- src-test/google/fontapiurlbuildertest.js
|
137
137
|
- src-test/google/googlefontapitest.js
|
138
|
+
- src-test/google/lastresortwebkitfontwatchrunnertest.js
|
138
139
|
- src-test/monotype/monotype_script_test.js
|
139
140
|
- src-test/typekit/typekit_script_test.js
|
140
141
|
- src/ascender/ascender_script.js
|
@@ -158,6 +159,7 @@ files:
|
|
158
159
|
- src/google/fontapiparser.js
|
159
160
|
- src/google/fontapiurlbuilder.js
|
160
161
|
- src/google/googlefontapi.js
|
162
|
+
- src/google/lastresortwebkitfontwatchrunner.js
|
161
163
|
- src/modules.yml
|
162
164
|
- src/monotype/monotype_script.js
|
163
165
|
- src/typekit/typekit_script.js
|
@@ -194,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
196
|
requirements: []
|
195
197
|
|
196
198
|
rubyforge_project:
|
197
|
-
rubygems_version: 1.
|
199
|
+
rubygems_version: 1.5.2
|
198
200
|
signing_key:
|
199
201
|
specification_version: 2
|
200
202
|
summary: WebFont Loader gives you added control when using linked fonts via @font-face.
|