webfontloader 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/Rakefile +2 -1
- data/lib/webfontloader.rb +1 -1
- data/spec/core/font_spec.js +9 -4
- data/spec/core/fontruler_spec.js +3 -10
- data/spec/core/fontwatcher_spec.js +22 -23
- data/spec/core/fontwatchrunner_spec.js +206 -231
- data/spec/deps.js +27 -0
- data/spec/google/lastresortwebkitfontwatchrunner_spec.js +47 -58
- data/spec/index.html +14 -25
- data/src/ascender/ascender_script.js +52 -45
- data/src/core/browserinfo.js +54 -47
- data/src/core/cssclassname.js +27 -22
- data/src/core/cssfontfamilyname.js +23 -17
- data/src/core/domhelper.js +209 -203
- data/src/core/eventdispatcher.js +111 -103
- data/src/core/font.js +110 -68
- data/src/core/fontmoduleloader.js +56 -13
- data/src/core/fontruler.js +52 -43
- data/src/core/fontvariationdescription.js +82 -76
- data/src/core/fontwatcher.js +93 -88
- data/src/core/fontwatchrunner.js +161 -161
- data/src/core/initialize.js +22 -15
- data/src/core/namespace.js +0 -29
- data/src/core/size.js +31 -25
- data/src/core/useragent.js +63 -48
- data/src/core/useragentparser.js +317 -306
- data/src/custom/customcss.js +31 -24
- data/src/fontdeck/fontdeck_script.js +46 -37
- data/src/google/fontapiparser.js +105 -97
- data/src/google/fontapiurlbuilder.js +46 -41
- data/src/google/googlefontapi.js +48 -32
- data/src/google/lastresortwebkitfontwatchrunner.js +80 -67
- data/src/modules.yml +6 -6
- data/src/monotype/monotype_script.js +47 -40
- data/src/typekit/typekit_script.js +41 -35
- data/tools/compiler/base.js +1548 -0
- data/tools/compiler/compiler.jar +0 -0
- data/webfontloader.gemspec +4 -2
- metadata +18 -16
data/src/core/fontwatchrunner.js
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
+
goog.provide('webfont.FontWatchRunner');
|
2
|
+
|
3
|
+
goog.require('webfont.FontRuler');
|
4
|
+
|
1
5
|
/**
|
2
6
|
* @constructor
|
3
7
|
* @param {function(string, string)} activeCallback
|
4
8
|
* @param {function(string, string)} inactiveCallback
|
5
9
|
* @param {webfont.DomHelper} domHelper
|
6
|
-
* @param {Object.<string, function(Object): webfont.Size>} fontSizer
|
7
|
-
* @param {function(function(), number=)} asyncCall
|
8
|
-
* @param {function(): number} getTime
|
9
10
|
* @param {string} fontFamily
|
10
11
|
* @param {string} fontDescription
|
11
12
|
* @param {webfont.BrowserInfo} browserInfo
|
@@ -14,14 +15,10 @@
|
|
14
15
|
* @param {string=} opt_fontTestString
|
15
16
|
*/
|
16
17
|
webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
|
17
|
-
|
18
|
-
opt_timeout, opt_metricCompatibleFonts, opt_fontTestString) {
|
18
|
+
fontFamily, fontDescription, browserInfo, opt_timeout, opt_metricCompatibleFonts, opt_fontTestString) {
|
19
19
|
this.activeCallback_ = activeCallback;
|
20
20
|
this.inactiveCallback_ = inactiveCallback;
|
21
21
|
this.domHelper_ = domHelper;
|
22
|
-
this.fontSizer_ = fontSizer;
|
23
|
-
this.asyncCall_ = asyncCall;
|
24
|
-
this.getTime_ = getTime;
|
25
22
|
this.fontFamily_ = fontFamily;
|
26
23
|
this.fontDescription_ = fontDescription;
|
27
24
|
this.fontTestString_ = opt_fontTestString || webfont.FontWatchRunner.DEFAULT_TEST_STRING;
|
@@ -65,164 +62,167 @@ webfont.FontWatchRunner.LastResortFonts = {
|
|
65
62
|
*/
|
66
63
|
webfont.FontWatchRunner.DEFAULT_TEST_STRING = 'BESbswy';
|
67
64
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
webfont.FontWatchRunner.prototype.setupLastResortSizes_ = function() {
|
72
|
-
var fontRuler = new webfont.FontRuler(this.domHelper_, this.fontSizer_, this.fontTestString_);
|
65
|
+
goog.scope(function () {
|
66
|
+
var FontWatchRunner = webfont.FontWatchRunner,
|
67
|
+
FontRuler = webfont.FontRuler;
|
73
68
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
this.lastResortSizes_[webfont.FontWatchRunner.LastResortFonts[font]] = fontRuler.getSize();
|
80
|
-
}
|
81
|
-
}
|
82
|
-
fontRuler.remove();
|
83
|
-
};
|
69
|
+
/**
|
70
|
+
* @private
|
71
|
+
*/
|
72
|
+
FontWatchRunner.prototype.setupLastResortSizes_ = function() {
|
73
|
+
var fontRuler = new FontRuler(this.domHelper_, this.fontTestString_);
|
84
74
|
|
85
|
-
|
86
|
-
this.fontRulerA_ = new webfont.FontRuler(this.domHelper_, this.fontSizer_, this.fontTestString_);
|
87
|
-
this.fontRulerA_.insert();
|
88
|
-
this.fontRulerB_ = new webfont.FontRuler(this.domHelper_, this.fontSizer_, this.fontTestString_);
|
89
|
-
this.fontRulerB_.insert();
|
90
|
-
|
91
|
-
this.started_ = this.getTime_();
|
92
|
-
|
93
|
-
this.fontRulerA_.setFont(this.fontFamily_ + ',' + webfont.FontWatchRunner.LastResortFonts.SERIF, this.fontDescription_);
|
94
|
-
this.fontRulerB_.setFont(this.fontFamily_ + ',' + webfont.FontWatchRunner.LastResortFonts.SANS_SERIF, this.fontDescription_);
|
95
|
-
|
96
|
-
this.check_();
|
97
|
-
};
|
98
|
-
|
99
|
-
/**
|
100
|
-
* Returns true if the given size matches the generic font family size.
|
101
|
-
*
|
102
|
-
* @private
|
103
|
-
* @param {?webfont.Size} size
|
104
|
-
* @param {string} lastResortFont
|
105
|
-
* @return {boolean}
|
106
|
-
*/
|
107
|
-
webfont.FontWatchRunner.prototype.sizeMatches_ = function(size, lastResortFont) {
|
108
|
-
if (this.browserInfo_.hasWebKitMetricsBug()) {
|
109
|
-
return size.equalsWidth(this.lastResortSizes_[lastResortFont]);
|
110
|
-
} else {
|
111
|
-
return size.equals(this.lastResortSizes_[lastResortFont]);
|
112
|
-
}
|
113
|
-
};
|
75
|
+
fontRuler.insert();
|
114
76
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
* @private
|
120
|
-
* @param {?webfont.Size} a
|
121
|
-
* @param {?webfont.Size} b
|
122
|
-
* @return {boolean}
|
123
|
-
*/
|
124
|
-
webfont.FontWatchRunner.prototype.sizesMatchLastResortSizes_ = function(a, b) {
|
125
|
-
for (var font in webfont.FontWatchRunner.LastResortFonts) {
|
126
|
-
if (webfont.FontWatchRunner.LastResortFonts.hasOwnProperty(font)) {
|
127
|
-
if (this.sizeMatches_(a, webfont.FontWatchRunner.LastResortFonts[font]) &&
|
128
|
-
this.sizeMatches_(b, webfont.FontWatchRunner.LastResortFonts[font])) {
|
129
|
-
return true;
|
77
|
+
for (var font in FontWatchRunner.LastResortFonts) {
|
78
|
+
if (FontWatchRunner.LastResortFonts.hasOwnProperty(font)) {
|
79
|
+
fontRuler.setFont(FontWatchRunner.LastResortFonts[font], this.fontDescription_);
|
80
|
+
this.lastResortSizes_[FontWatchRunner.LastResortFonts[font]] = fontRuler.getSize();
|
130
81
|
}
|
131
82
|
}
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
webfont.
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
*
|
161
|
-
* @private
|
162
|
-
* @param {webfont.Size} sizeA
|
163
|
-
* @param {webfont.Size} sizeB
|
164
|
-
* @return {boolean}
|
165
|
-
*/
|
166
|
-
webfont.FontWatchRunner.prototype.isLastResortFont_ = function (sizeA, sizeB) {
|
167
|
-
return this.browserInfo_.hasWebKitFallbackBug() && this.sizesMatchLastResortSizes_(sizeA, sizeB);
|
168
|
-
};
|
169
|
-
|
170
|
-
/**
|
171
|
-
* Returns true if the current font is metric compatible. Also returns true
|
172
|
-
* if we do not have a list of metric compatible fonts.
|
173
|
-
*
|
174
|
-
* @private
|
175
|
-
* @return {boolean}
|
176
|
-
*/
|
177
|
-
webfont.FontWatchRunner.prototype.isMetricCompatibleFont_ = function () {
|
178
|
-
return this.metricCompatibleFonts_ === null || this.metricCompatibleFonts_.hasOwnProperty(this.fontFamily_);
|
179
|
-
};
|
180
|
-
|
181
|
-
/**
|
182
|
-
* Checks the size of the two spans against their original sizes during each
|
183
|
-
* async loop. If the size of one of the spans is different than the original
|
184
|
-
* size, then we know that the font is rendering and finish with the active
|
185
|
-
* callback. If we wait more than 5 seconds and nothing has changed, we finish
|
186
|
-
* with the inactive callback.
|
187
|
-
*
|
188
|
-
* @private
|
189
|
-
*/
|
190
|
-
webfont.FontWatchRunner.prototype.check_ = function() {
|
191
|
-
var sizeA = this.fontRulerA_.getSize();
|
192
|
-
var sizeB = this.fontRulerB_.getSize();
|
193
|
-
|
194
|
-
if (this.isFallbackFont_(sizeA, sizeB) || this.isLastResortFont_(sizeA, sizeB)) {
|
195
|
-
if (this.hasTimedOut_()) {
|
196
|
-
if (this.isLastResortFont_(sizeA, sizeB) && this.isMetricCompatibleFont_()) {
|
197
|
-
this.finish_(this.activeCallback_);
|
198
|
-
} else {
|
199
|
-
this.finish_(this.inactiveCallback_);
|
200
|
-
}
|
83
|
+
fontRuler.remove();
|
84
|
+
};
|
85
|
+
|
86
|
+
FontWatchRunner.prototype.start = function() {
|
87
|
+
this.fontRulerA_ = new FontRuler(this.domHelper_, this.fontTestString_);
|
88
|
+
this.fontRulerA_.insert();
|
89
|
+
this.fontRulerB_ = new FontRuler(this.domHelper_, this.fontTestString_);
|
90
|
+
this.fontRulerB_.insert();
|
91
|
+
|
92
|
+
this.started_ = goog.now();
|
93
|
+
|
94
|
+
this.fontRulerA_.setFont(this.fontFamily_ + ',' + FontWatchRunner.LastResortFonts.SERIF, this.fontDescription_);
|
95
|
+
this.fontRulerB_.setFont(this.fontFamily_ + ',' + FontWatchRunner.LastResortFonts.SANS_SERIF, this.fontDescription_);
|
96
|
+
|
97
|
+
this.check_();
|
98
|
+
};
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Returns true if the given size matches the generic font family size.
|
102
|
+
*
|
103
|
+
* @private
|
104
|
+
* @param {?webfont.Size} size
|
105
|
+
* @param {string} lastResortFont
|
106
|
+
* @return {boolean}
|
107
|
+
*/
|
108
|
+
FontWatchRunner.prototype.sizeMatches_ = function(size, lastResortFont) {
|
109
|
+
if (this.browserInfo_.hasWebKitMetricsBug()) {
|
110
|
+
return size.equalsWidth(this.lastResortSizes_[lastResortFont]);
|
201
111
|
} else {
|
202
|
-
this.
|
112
|
+
return size.equals(this.lastResortSizes_[lastResortFont]);
|
203
113
|
}
|
204
|
-
}
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
webfont.
|
213
|
-
|
214
|
-
|
215
|
-
|
114
|
+
};
|
115
|
+
|
116
|
+
/**
|
117
|
+
* Return true if the given sizes match any of the generic font family
|
118
|
+
* sizes.
|
119
|
+
*
|
120
|
+
* @private
|
121
|
+
* @param {?webfont.Size} a
|
122
|
+
* @param {?webfont.Size} b
|
123
|
+
* @return {boolean}
|
124
|
+
*/
|
125
|
+
FontWatchRunner.prototype.sizesMatchLastResortSizes_ = function(a, b) {
|
126
|
+
for (var font in FontWatchRunner.LastResortFonts) {
|
127
|
+
if (FontWatchRunner.LastResortFonts.hasOwnProperty(font)) {
|
128
|
+
if (this.sizeMatches_(a, FontWatchRunner.LastResortFonts[font]) &&
|
129
|
+
this.sizeMatches_(b, FontWatchRunner.LastResortFonts[font])) {
|
130
|
+
return true;
|
131
|
+
}
|
132
|
+
}
|
216
133
|
}
|
217
|
-
|
218
|
-
};
|
219
|
-
|
220
|
-
/**
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
134
|
+
return false;
|
135
|
+
};
|
136
|
+
|
137
|
+
/**
|
138
|
+
* @private
|
139
|
+
* Returns true if the loading has timed out.
|
140
|
+
* @return {boolean}
|
141
|
+
*/
|
142
|
+
FontWatchRunner.prototype.hasTimedOut_ = function() {
|
143
|
+
return goog.now() - this.started_ >= this.timeout_;
|
144
|
+
};
|
145
|
+
|
146
|
+
/**
|
147
|
+
* Returns true if both fonts match the normal fallback fonts.
|
148
|
+
*
|
149
|
+
* @private
|
150
|
+
* @param {webfont.Size} sizeA
|
151
|
+
* @param {webfont.Size} sizeB
|
152
|
+
* @return {boolean}
|
153
|
+
*/
|
154
|
+
FontWatchRunner.prototype.isFallbackFont_ = function (sizeA, sizeB) {
|
155
|
+
return this.sizeMatches_(sizeA, FontWatchRunner.LastResortFonts.SERIF) &&
|
156
|
+
this.sizeMatches_(sizeB, FontWatchRunner.LastResortFonts.SANS_SERIF);
|
157
|
+
};
|
158
|
+
|
159
|
+
/**
|
160
|
+
* Returns true if the WebKit bug is present and both sizes match a last resort font.
|
161
|
+
*
|
162
|
+
* @private
|
163
|
+
* @param {webfont.Size} sizeA
|
164
|
+
* @param {webfont.Size} sizeB
|
165
|
+
* @return {boolean}
|
166
|
+
*/
|
167
|
+
FontWatchRunner.prototype.isLastResortFont_ = function (sizeA, sizeB) {
|
168
|
+
return this.browserInfo_.hasWebKitFallbackBug() && this.sizesMatchLastResortSizes_(sizeA, sizeB);
|
169
|
+
};
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Returns true if the current font is metric compatible. Also returns true
|
173
|
+
* if we do not have a list of metric compatible fonts.
|
174
|
+
*
|
175
|
+
* @private
|
176
|
+
* @return {boolean}
|
177
|
+
*/
|
178
|
+
FontWatchRunner.prototype.isMetricCompatibleFont_ = function () {
|
179
|
+
return this.metricCompatibleFonts_ === null || this.metricCompatibleFonts_.hasOwnProperty(this.fontFamily_);
|
180
|
+
};
|
181
|
+
|
182
|
+
/**
|
183
|
+
* Checks the size of the two spans against their original sizes during each
|
184
|
+
* async loop. If the size of one of the spans is different than the original
|
185
|
+
* size, then we know that the font is rendering and finish with the active
|
186
|
+
* callback. If we wait more than 5 seconds and nothing has changed, we finish
|
187
|
+
* with the inactive callback.
|
188
|
+
*
|
189
|
+
* @private
|
190
|
+
*/
|
191
|
+
FontWatchRunner.prototype.check_ = function() {
|
192
|
+
var sizeA = this.fontRulerA_.getSize();
|
193
|
+
var sizeB = this.fontRulerB_.getSize();
|
194
|
+
|
195
|
+
if (this.isFallbackFont_(sizeA, sizeB) || this.isLastResortFont_(sizeA, sizeB)) {
|
196
|
+
if (this.hasTimedOut_()) {
|
197
|
+
if (this.isLastResortFont_(sizeA, sizeB) && this.isMetricCompatibleFont_()) {
|
198
|
+
this.finish_(this.activeCallback_);
|
199
|
+
} else {
|
200
|
+
this.finish_(this.inactiveCallback_);
|
201
|
+
}
|
202
|
+
} else {
|
203
|
+
this.asyncCheck_();
|
204
|
+
}
|
205
|
+
} else {
|
206
|
+
this.finish_(this.activeCallback_);
|
207
|
+
}
|
208
|
+
};
|
209
|
+
|
210
|
+
/**
|
211
|
+
* @private
|
212
|
+
*/
|
213
|
+
FontWatchRunner.prototype.asyncCheck_ = function() {
|
214
|
+
setTimeout(goog.bind(function () {
|
215
|
+
this.check_();
|
216
|
+
}, this), 25);
|
217
|
+
};
|
218
|
+
|
219
|
+
/**
|
220
|
+
* @private
|
221
|
+
* @param {function(string, string)} callback
|
222
|
+
*/
|
223
|
+
FontWatchRunner.prototype.finish_ = function(callback) {
|
224
|
+
this.fontRulerA_.remove();
|
225
|
+
this.fontRulerB_.remove();
|
226
|
+
callback(this.fontFamily_, this.fontDescription_);
|
227
|
+
};
|
228
|
+
});
|
data/src/core/initialize.js
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
goog.provide('webfont');
|
2
|
+
|
3
|
+
goog.require('webfont.UserAgentParser');
|
4
|
+
goog.require('webfont.FontModuleLoader');
|
5
|
+
goog.require('webfont.WebFont');
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @typedef {Array.<string>}
|
9
|
+
*/
|
10
|
+
webfont.FontFamilies;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @typedef {Object.<string, Array.<string>>}
|
14
|
+
*/
|
15
|
+
webfont.FontVariations;
|
16
|
+
|
17
|
+
/**
|
18
|
+
* @typedef {Object.<string, Array.<string>>}
|
19
|
+
*/
|
20
|
+
webfont.FontTestStrings;
|
21
|
+
|
1
22
|
// Name of the global object.
|
2
23
|
var globalName = 'WebFont';
|
3
24
|
|
@@ -6,23 +27,9 @@ var globalNamespaceObject = window[globalName] = (function() {
|
|
6
27
|
var userAgentParser = new webfont.UserAgentParser(navigator.userAgent, document);
|
7
28
|
var userAgent = userAgentParser.parse();
|
8
29
|
var fontModuleLoader = new webfont.FontModuleLoader();
|
9
|
-
|
10
|
-
|
11
|
-
return new webfont.WebFont(window, fontModuleLoader, asyncCall, userAgent);
|
30
|
+
return new webfont.WebFont(window, fontModuleLoader, userAgent);
|
12
31
|
})();
|
13
32
|
|
14
33
|
// Export the public API.
|
15
34
|
globalNamespaceObject['load'] = globalNamespaceObject.load;
|
16
35
|
globalNamespaceObject['addModule'] = globalNamespaceObject.addModule;
|
17
|
-
|
18
|
-
// Export the UserAgent API because we pass this object to external modules.
|
19
|
-
webfont.UserAgent.prototype['getName'] = webfont.UserAgent.prototype.getName;
|
20
|
-
webfont.UserAgent.prototype['getVersion'] = webfont.UserAgent.prototype.getVersion;
|
21
|
-
webfont.UserAgent.prototype['getEngine'] = webfont.UserAgent.prototype.getEngine;
|
22
|
-
webfont.UserAgent.prototype['getEngineVersion'] = webfont.UserAgent.prototype.getEngineVersion;
|
23
|
-
webfont.UserAgent.prototype['getPlatform'] = webfont.UserAgent.prototype.getPlatform;
|
24
|
-
webfont.UserAgent.prototype['getPlatformVersion'] = webfont.UserAgent.prototype.getPlatformVersion;
|
25
|
-
webfont.UserAgent.prototype['getDocumentMode'] = webfont.UserAgent.prototype.getDocumentMode;
|
26
|
-
webfont.UserAgent.prototype['getBrowserInfo'] = webfont.UserAgent.prototype.getBrowserInfo;
|
27
|
-
webfont.BrowserInfo.prototype['hasWebFontSupport'] = webfont.BrowserInfo.prototype.hasWebFontSupport;
|
28
|
-
webfont.BrowserInfo.prototype['hasWebKitFallbackBug'] = webfont.BrowserInfo.prototype.hasWebKitFallbackBug;
|
data/src/core/namespace.js
CHANGED
@@ -1,30 +1 @@
|
|
1
1
|
var webfont = {};
|
2
|
-
|
3
|
-
/**
|
4
|
-
* @param {Object} context
|
5
|
-
* @param {function(...)} func
|
6
|
-
* @param {...*} opt_args
|
7
|
-
*/
|
8
|
-
webfont.bind = function(context, func, opt_args) {
|
9
|
-
var args = arguments.length > 2 ?
|
10
|
-
Array.prototype.slice.call(arguments, 2) : [];
|
11
|
-
|
12
|
-
return function() {
|
13
|
-
args.push.apply(args, arguments);
|
14
|
-
return func.apply(context, args);
|
15
|
-
};
|
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
|
-
};
|
data/src/core/size.js
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
goog.provide('webfont.Size');
|
2
|
+
|
1
3
|
/**
|
2
4
|
* @constructor
|
3
5
|
* @param {number} width
|
@@ -8,30 +10,34 @@ webfont.Size = function (width, height) {
|
|
8
10
|
this.height = height;
|
9
11
|
};
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
*
|
14
|
-
* @param {webfont.Size} other
|
15
|
-
* @return {boolean}
|
16
|
-
*/
|
17
|
-
webfont.Size.prototype.equals = function (other) {
|
18
|
-
return this.equalsWidth(other) && this.equalsHeight(other);
|
19
|
-
};
|
13
|
+
goog.scope(function () {
|
14
|
+
var Size = webfont.Size;
|
20
15
|
|
21
|
-
/**
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
16
|
+
/**
|
17
|
+
* Returns true if this size equals other.
|
18
|
+
*
|
19
|
+
* @param {webfont.Size} other
|
20
|
+
* @return {boolean}
|
21
|
+
*/
|
22
|
+
Size.prototype.equals = function (other) {
|
23
|
+
return this.equalsWidth(other) && this.equalsHeight(other);
|
24
|
+
};
|
29
25
|
|
30
|
-
/**
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
};
|
26
|
+
/**
|
27
|
+
* Returns true if this.width equals other.width
|
28
|
+
* @param {webfont.Size} other
|
29
|
+
* @return {boolean}
|
30
|
+
*/
|
31
|
+
Size.prototype.equalsWidth = function (other) {
|
32
|
+
return !!other && this.width == other.width;
|
33
|
+
};
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Returns true if this.height equals other.height
|
37
|
+
* @param {webfont.Size} other
|
38
|
+
* @return {boolean}
|
39
|
+
*/
|
40
|
+
Size.prototype.equalsHeight = function (other) {
|
41
|
+
return !!other && this.height == other.height;
|
42
|
+
};
|
43
|
+
});
|