webfontloader 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +5 -0
- data/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
|
+
});
|