webfontloader 1.5.21 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +3 -0
- data/lib/webfontloader.rb +1 -1
- data/spec/core/fontwatcher_spec.js +11 -24
- data/spec/core/fontwatchrunner_spec.js +4 -10
- data/spec/core/nativefontwatchrunner_spec.js +0 -6
- data/spec/core/webfont_spec.js +11 -144
- data/spec/deps.js +1 -5
- data/spec/index.html +0 -2
- data/spec/modules/fontdeck_spec.js +2 -10
- data/spec/modules/monotype_spec.js +0 -13
- data/spec/modules/typekit_spec.js +7 -8
- data/src/core/fontmodule.js +0 -6
- data/src/core/fontwatcher.js +2 -6
- data/src/core/fontwatchrunner.js +32 -4
- data/src/core/webfont.js +5 -38
- data/src/modules.yml +0 -4
- data/src/modules/custom.js +0 -4
- data/src/modules/fontdeck.js +4 -8
- data/src/modules/google/googlefontapi.js +1 -17
- data/src/modules/monotype.js +24 -29
- data/src/modules/typekit.js +9 -13
- data/webfontloader.gemspec +2 -8
- data/webfontloader.js +17 -29
- metadata +2 -8
- data/spec/core/useragentparser_spec.js +0 -1301
- data/spec/core/version_spec.js +0 -143
- data/src/core/browserinfo.js +0 -76
- data/src/core/useragent.js +0 -93
- data/src/core/useragentparser.js +0 -422
- data/src/core/version.js +0 -180
data/spec/core/version_spec.js
DELETED
@@ -1,143 +0,0 @@
|
|
1
|
-
describe('Version', function () {
|
2
|
-
var Version = webfont.Version;
|
3
|
-
|
4
|
-
describe('parse', function () {
|
5
|
-
it('should ignore non versions', function () {
|
6
|
-
expect(Version.parse('abcedf')).toEqual(new Version());
|
7
|
-
expect(Version.parse('...')).toEqual(new Version());
|
8
|
-
expect(Version.parse('Unknown')).toEqual(new Version());
|
9
|
-
});
|
10
|
-
|
11
|
-
it('should parse single digit versions', function () {
|
12
|
-
expect(Version.parse('0')).toEqual(new Version(0));
|
13
|
-
expect(Version.parse('1')).toEqual(new Version(1));
|
14
|
-
});
|
15
|
-
|
16
|
-
it('should parse two digit versions', function () {
|
17
|
-
expect(Version.parse('1.0')).toEqual(new Version(1, 0));
|
18
|
-
expect(Version.parse('12.9')).toEqual(new Version(12, 9));
|
19
|
-
});
|
20
|
-
|
21
|
-
it('should parse three digit versions', function () {
|
22
|
-
expect(Version.parse('1.2.5')).toEqual(new Version(1, 2, 5));
|
23
|
-
expect(Version.parse('10.0.2')).toEqual(new Version(10, 0, 2));
|
24
|
-
});
|
25
|
-
|
26
|
-
it('should accept alternate separators', function () {
|
27
|
-
expect(Version.parse('10_8_2')).toEqual(new Version(10, 8, 2));
|
28
|
-
expect(Version.parse('5-46-2')).toEqual(new Version(5, 46, 2));
|
29
|
-
});
|
30
|
-
|
31
|
-
it('should accept build strings', function () {
|
32
|
-
expect(Version.parse('1.3.5+alpha')).toEqual(new Version(1, 3, 5, 'alpha'));
|
33
|
-
expect(Version.parse('1.3.5-askdsj')).toEqual(new Version(1, 3, 5, 'askdsj'));
|
34
|
-
});
|
35
|
-
|
36
|
-
it('should parse real version strings', function () {
|
37
|
-
expect(Version.parse('5.0')).toEqual(new Version(5, 0));
|
38
|
-
expect(Version.parse('531.9')).toEqual(new Version(531, 9));
|
39
|
-
expect(Version.parse('1.9.2.3')).toEqual(new Version(1, 9, 2, 3));
|
40
|
-
expect(Version.parse('3.6.3')).toEqual(new Version(3, 6, 3));
|
41
|
-
expect(Version.parse('1.9.2a1pre')).toEqual(new Version(1, 9, 2, 'a1pre'));
|
42
|
-
expect(Version.parse('3.6a1pre')).toEqual(new Version(3, 6, null, 'a1pre'));
|
43
|
-
expect(Version.parse('2.0b1')).toEqual(new Version(2, 0, null, 'b1'));
|
44
|
-
expect(Version.parse('5.0.342.9')).toEqual(new Version(5, 0, 342, 9));
|
45
|
-
expect(Version.parse('10_5_8')).toEqual(new Version(10, 5, 8));
|
46
|
-
expect(Version.parse('18.0.1025.46')).toEqual(new Version(18, 0, 1025, 46));
|
47
|
-
expect(Version.parse('4.0dp1')).toEqual(new Version(4, 0, null, 'dp1'));
|
48
|
-
expect(Version.parse('528.4+')).toEqual(new Version(528, 4));
|
49
|
-
expect(Version.parse('2.1-update1')).toEqual(new Version(2, 1, null, 'update1'));
|
50
|
-
expect(Version.parse('10.0.22.79_1003310')).toEqual(new Version(10, 0, 22, '79_1003310'));
|
51
|
-
expect(Version.parse('1.b')).toEqual(new Version(1, null, null, 'b'));
|
52
|
-
expect(Version.parse('0.10.1')).toEqual(new Version(0, 10, 1));
|
53
|
-
});
|
54
|
-
});
|
55
|
-
|
56
|
-
describe('#compare', function () {
|
57
|
-
it('should return zero when two versions are equal', function () {
|
58
|
-
expect(new Version(1, 2, 3).compare(new Version(1, 2, 3))).toEqual(0);
|
59
|
-
});
|
60
|
-
|
61
|
-
it('should return one when one version is greater', function () {
|
62
|
-
expect(new Version(1, 2, 3).compare(new Version(0, 1, 3))).toEqual(1);
|
63
|
-
expect(new Version(1, 2, 3).compare(new Version(1, 2, 2))).toEqual(1);
|
64
|
-
expect(new Version(1, 2, 3).compare(new Version(1, 1, 3))).toEqual(1);
|
65
|
-
});
|
66
|
-
|
67
|
-
it('should return minus one when one version is smaller', function () {
|
68
|
-
expect(new Version(1, 2, 3).compare(new Version(1, 2, 4))).toEqual(-1);
|
69
|
-
expect(new Version(1, 2, 3).compare(new Version(1, 3, 3))).toEqual(-1);
|
70
|
-
expect(new Version(1, 2, 3).compare(new Version(2, 2, 3))).toEqual(-1);
|
71
|
-
});
|
72
|
-
});
|
73
|
-
|
74
|
-
describe('#eq', function () {
|
75
|
-
it('should return true when two versions are equal', function () {
|
76
|
-
expect(new Version(1, 2, 3).eq(new Version(1, 2, 3))).toBe(true);
|
77
|
-
});
|
78
|
-
|
79
|
-
it('should return false when two versions are unequal', function () {
|
80
|
-
expect(new Version(3, 2, 1).eq(new Version(1, 2, 3))).toBe(false);
|
81
|
-
});
|
82
|
-
});
|
83
|
-
|
84
|
-
describe('#gt', function () {
|
85
|
-
it('should return true when one version is greater than another', function () {
|
86
|
-
expect(new Version(3, 2, 1).gt(new Version(1, 2, 3))).toBe(true);
|
87
|
-
});
|
88
|
-
|
89
|
-
it('should return false when one version is not greater than another', function () {
|
90
|
-
expect(new Version(1, 2, 3).gt(new Version(3, 2, 1))).toBe(false)
|
91
|
-
});
|
92
|
-
});
|
93
|
-
|
94
|
-
describe('#ge', function () {
|
95
|
-
it('should return true when one version is greater than another', function () {
|
96
|
-
expect(new Version(3, 2, 1).ge(new Version(1, 2, 3))).toBe(true);
|
97
|
-
});
|
98
|
-
|
99
|
-
it('should return false when one version is not greater than another', function () {
|
100
|
-
expect(new Version(1, 2, 3).ge(new Version(3, 2, 1))).toBe(false)
|
101
|
-
});
|
102
|
-
|
103
|
-
it('should return true when one version is equal to another', function () {
|
104
|
-
expect(new Version(1, 2, 3).ge(new Version(1, 2, 3))).toBe(true);
|
105
|
-
});
|
106
|
-
});
|
107
|
-
|
108
|
-
describe('#lt', function () {
|
109
|
-
it('should return true when one version is less than another', function () {
|
110
|
-
expect(new Version(1, 2, 3).lt(new Version(3, 2, 1))).toBe(true);
|
111
|
-
});
|
112
|
-
|
113
|
-
it('should return false when one version is not less than another', function () {
|
114
|
-
expect(new Version(3, 2, 1).lt(new Version(1, 2, 3))).toBe(false)
|
115
|
-
});
|
116
|
-
});
|
117
|
-
|
118
|
-
describe('#le', function () {
|
119
|
-
it('should return true when one version is less than another', function () {
|
120
|
-
expect(new Version(1, 2, 3).le(new Version(3, 2, 1))).toBe(true);
|
121
|
-
});
|
122
|
-
|
123
|
-
it('should return false when one version is not less than another', function () {
|
124
|
-
expect(new Version(3, 2, 1).le(new Version(1, 2, 3))).toBe(false)
|
125
|
-
});
|
126
|
-
|
127
|
-
it('should return true when one version is equal to another', function () {
|
128
|
-
expect(new Version(1, 2, 3).le(new Version(1, 2, 3))).toBe(true);
|
129
|
-
});
|
130
|
-
});
|
131
|
-
|
132
|
-
describe('#isValid', function () {
|
133
|
-
it('should return true when the version is valid', function () {
|
134
|
-
expect(new Version(1).isValid()).toBe(true);
|
135
|
-
expect(new Version(1, 2).isValid()).toBe(true);
|
136
|
-
});
|
137
|
-
|
138
|
-
it('should return false when the version is not valid', function () {
|
139
|
-
expect(new Version().isValid()).toBe(false);
|
140
|
-
expect(new Version(null, 1).isValid()).toBe(false);
|
141
|
-
});
|
142
|
-
});
|
143
|
-
});
|
data/src/core/browserinfo.js
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
goog.provide('webfont.BrowserInfo');
|
2
|
-
|
3
|
-
/**
|
4
|
-
* @constructor
|
5
|
-
* @param {boolean} webfontSupport
|
6
|
-
* @param {boolean} webKitFallbackBug
|
7
|
-
* @param {boolean} webKitMetricsBug
|
8
|
-
*/
|
9
|
-
webfont.BrowserInfo = function (webfontSupport, webKitFallbackBug, webKitMetricsBug, hasNativeFontLoading) {
|
10
|
-
this.webfontSupport_ = webfontSupport;
|
11
|
-
this.webKitFallbackBug_ = webKitFallbackBug;
|
12
|
-
this.webKitMetricsBug_ = webKitMetricsBug;
|
13
|
-
this.hasNativeFontLoading_ = hasNativeFontLoading;
|
14
|
-
};
|
15
|
-
|
16
|
-
goog.scope(function () {
|
17
|
-
var BrowserInfo = webfont.BrowserInfo;
|
18
|
-
|
19
|
-
/**
|
20
|
-
* Returns true if the browser supports web fonts.
|
21
|
-
*
|
22
|
-
* @return {boolean}
|
23
|
-
*/
|
24
|
-
BrowserInfo.prototype.hasWebFontSupport = function () {
|
25
|
-
return this.webfontSupport_;
|
26
|
-
};
|
27
|
-
|
28
|
-
/**
|
29
|
-
* Returns true if the browser has the WebKit fallback bug.
|
30
|
-
*
|
31
|
-
* The bug causes the normal CSS font stack to be ignored while
|
32
|
-
* loading web fonts. Instead it picks the generic font family
|
33
|
-
* (or the default generic font family) of the first instance
|
34
|
-
* the web font is mentioned in CSS. It switches to this font
|
35
|
-
* immediately while loading web font, causing two changes in
|
36
|
-
* font to occur (compared to other browsers which only change
|
37
|
-
* font once the web font has loaded.)
|
38
|
-
*
|
39
|
-
* The bug has been fixed and is only happens in WebKit versions
|
40
|
-
* below 536.11. Even though it is fixed we still have a large
|
41
|
-
* percentage of users on older WebKit versions, mostly on mobile
|
42
|
-
* platforms.
|
43
|
-
*
|
44
|
-
* Also see: https://bugs.webkit.org/show_bug.cgi?id=76684
|
45
|
-
*
|
46
|
-
* @return {boolean}
|
47
|
-
*/
|
48
|
-
BrowserInfo.prototype.hasWebKitFallbackBug = function () {
|
49
|
-
return this.webKitFallbackBug_;
|
50
|
-
};
|
51
|
-
|
52
|
-
/**
|
53
|
-
* Returns true if the browser has the WebKit metrics bug
|
54
|
-
*
|
55
|
-
* The metrics bug causes WebKit to change the height of a font
|
56
|
-
* while loading a web font. Other browsers do not modify
|
57
|
-
* the width or height of the fallback font while a web font is
|
58
|
-
* loading. This caused our width and height check to be incorrect,
|
59
|
-
* triggering a false positive.
|
60
|
-
*
|
61
|
-
* Also see: https://bugs.webkit.org/show_bug.cgi?id=110977
|
62
|
-
*
|
63
|
-
* @return {boolean}
|
64
|
-
*/
|
65
|
-
BrowserInfo.prototype.hasWebKitMetricsBug = function () {
|
66
|
-
return this.webKitMetricsBug_;
|
67
|
-
};
|
68
|
-
|
69
|
-
/**
|
70
|
-
* Returns true if this browser has native font loading as
|
71
|
-
* specified in: http://dev.w3.org/csswg/css-font-loading/
|
72
|
-
*/
|
73
|
-
BrowserInfo.prototype.hasNativeFontLoading = function () {
|
74
|
-
return this.hasNativeFontLoading_;
|
75
|
-
};
|
76
|
-
});
|
data/src/core/useragent.js
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
goog.provide('webfont.UserAgent');
|
2
|
-
|
3
|
-
/**
|
4
|
-
* A user agent string representation.
|
5
|
-
*
|
6
|
-
* @param {string} name
|
7
|
-
* @param {webfont.Version} version
|
8
|
-
* @param {string} engine
|
9
|
-
* @param {webfont.Version} engineVersion
|
10
|
-
* @param {string} platform
|
11
|
-
* @param {webfont.Version} platformVersion
|
12
|
-
* @param {number|undefined} documentMode
|
13
|
-
* @param {!webfont.BrowserInfo} browserInfo
|
14
|
-
* @constructor
|
15
|
-
*/
|
16
|
-
webfont.UserAgent = function(
|
17
|
-
name,
|
18
|
-
version,
|
19
|
-
engine,
|
20
|
-
engineVersion,
|
21
|
-
platform,
|
22
|
-
platformVersion,
|
23
|
-
documentMode,
|
24
|
-
browserInfo) {
|
25
|
-
this.name_ = name;
|
26
|
-
this.version_ = version;
|
27
|
-
this.engine_ = engine;
|
28
|
-
this.engineVersion_ = engineVersion;
|
29
|
-
this.platform_ = platform;
|
30
|
-
this.platformVersion_ = platformVersion;
|
31
|
-
this.documentMode_ = documentMode;
|
32
|
-
this.browserInfo_ = browserInfo;
|
33
|
-
};
|
34
|
-
|
35
|
-
goog.scope(function () {
|
36
|
-
var UserAgent = webfont.UserAgent;
|
37
|
-
|
38
|
-
/**
|
39
|
-
* @return {string}
|
40
|
-
*/
|
41
|
-
UserAgent.prototype.getName = function() {
|
42
|
-
return this.name_;
|
43
|
-
};
|
44
|
-
|
45
|
-
/**
|
46
|
-
* @return {webfont.Version}
|
47
|
-
*/
|
48
|
-
UserAgent.prototype.getVersion = function() {
|
49
|
-
return this.version_;
|
50
|
-
};
|
51
|
-
|
52
|
-
/**
|
53
|
-
* @return {string}
|
54
|
-
*/
|
55
|
-
UserAgent.prototype.getEngine = function() {
|
56
|
-
return this.engine_;
|
57
|
-
};
|
58
|
-
|
59
|
-
/**
|
60
|
-
* @return {webfont.Version}
|
61
|
-
*/
|
62
|
-
UserAgent.prototype.getEngineVersion = function() {
|
63
|
-
return this.engineVersion_;
|
64
|
-
};
|
65
|
-
|
66
|
-
/**
|
67
|
-
* @return {string}
|
68
|
-
*/
|
69
|
-
UserAgent.prototype.getPlatform = function() {
|
70
|
-
return this.platform_;
|
71
|
-
};
|
72
|
-
|
73
|
-
/**
|
74
|
-
* @return {webfont.Version}
|
75
|
-
*/
|
76
|
-
UserAgent.prototype.getPlatformVersion = function() {
|
77
|
-
return this.platformVersion_;
|
78
|
-
};
|
79
|
-
|
80
|
-
/**
|
81
|
-
* @return {number|undefined}
|
82
|
-
*/
|
83
|
-
UserAgent.prototype.getDocumentMode = function() {
|
84
|
-
return this.documentMode_;
|
85
|
-
};
|
86
|
-
|
87
|
-
/**
|
88
|
-
* @return {webfont.BrowserInfo}
|
89
|
-
*/
|
90
|
-
UserAgent.prototype.getBrowserInfo = function() {
|
91
|
-
return this.browserInfo_;
|
92
|
-
};
|
93
|
-
});
|
data/src/core/useragentparser.js
DELETED
@@ -1,422 +0,0 @@
|
|
1
|
-
goog.provide('webfont.UserAgentParser');
|
2
|
-
|
3
|
-
goog.require('webfont.BrowserInfo');
|
4
|
-
goog.require('webfont.UserAgent');
|
5
|
-
goog.require('webfont.Version');
|
6
|
-
|
7
|
-
/**
|
8
|
-
* @param {string} userAgent The browser userAgent string to parse.
|
9
|
-
* @constructor
|
10
|
-
*/
|
11
|
-
webfont.UserAgentParser = function(userAgent, doc) {
|
12
|
-
this.userAgent_ = userAgent;
|
13
|
-
this.doc_ = doc;
|
14
|
-
};
|
15
|
-
|
16
|
-
/**
|
17
|
-
* @const
|
18
|
-
* @type {string}
|
19
|
-
*/
|
20
|
-
webfont.UserAgentParser.UNKNOWN = "Unknown";
|
21
|
-
|
22
|
-
/**
|
23
|
-
* A constant for identifying a generic browser on a mobile platform that
|
24
|
-
* doesn't really have a name, but just came with the platform. Usually these
|
25
|
-
* are WebKit based, and examples are the default browser app on Android and
|
26
|
-
* the default browser app on BlackBerry 10.
|
27
|
-
* @const
|
28
|
-
* @type {string}
|
29
|
-
*/
|
30
|
-
webfont.UserAgentParser.BUILTIN_BROWSER = "BuiltinBrowser";
|
31
|
-
|
32
|
-
/**
|
33
|
-
* @const
|
34
|
-
* @type {webfont.UserAgent}
|
35
|
-
*/
|
36
|
-
webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(
|
37
|
-
webfont.UserAgentParser.UNKNOWN,
|
38
|
-
new webfont.Version(),
|
39
|
-
webfont.UserAgentParser.UNKNOWN,
|
40
|
-
new webfont.Version(),
|
41
|
-
webfont.UserAgentParser.UNKNOWN,
|
42
|
-
new webfont.Version(),
|
43
|
-
undefined,
|
44
|
-
new webfont.BrowserInfo(false, false, false, false));
|
45
|
-
|
46
|
-
|
47
|
-
goog.scope(function () {
|
48
|
-
var UserAgentParser = webfont.UserAgentParser,
|
49
|
-
BrowserInfo = webfont.BrowserInfo,
|
50
|
-
UserAgent = webfont.UserAgent,
|
51
|
-
Version = webfont.Version;
|
52
|
-
|
53
|
-
/**
|
54
|
-
* Parses the user agent string and returns an object.
|
55
|
-
* @return {webfont.UserAgent}
|
56
|
-
*/
|
57
|
-
UserAgentParser.prototype.parse = function() {
|
58
|
-
if (this.isIe_()) {
|
59
|
-
return this.parseIeUserAgentString_();
|
60
|
-
} else if (this.isOldOpera_()) {
|
61
|
-
return this.parseOldOperaUserAgentString_();
|
62
|
-
} else if (this.isOpera_()) {
|
63
|
-
return this.parseWebKitUserAgentString_();
|
64
|
-
} else if (this.isWebKit_()) {
|
65
|
-
return this.parseWebKitUserAgentString_();
|
66
|
-
} else if (this.isGecko_()) {
|
67
|
-
return this.parseGeckoUserAgentString_();
|
68
|
-
} else {
|
69
|
-
return webfont.UserAgentParser.UNKNOWN_USER_AGENT;
|
70
|
-
}
|
71
|
-
};
|
72
|
-
|
73
|
-
/**
|
74
|
-
* @private
|
75
|
-
*/
|
76
|
-
UserAgentParser.prototype.getPlatform_ = function() {
|
77
|
-
var mobileOs = this.getMatchingGroup_(this.userAgent_,
|
78
|
-
/(iPod|iPad|iPhone|Android|Windows Phone|BB\d{2}|BlackBerry)/, 1);
|
79
|
-
|
80
|
-
if (mobileOs != "") {
|
81
|
-
if (/BB\d{2}/.test(mobileOs)) {
|
82
|
-
mobileOs = "BlackBerry";
|
83
|
-
}
|
84
|
-
return mobileOs;
|
85
|
-
}
|
86
|
-
var os = this.getMatchingGroup_(this.userAgent_,
|
87
|
-
/(Linux|Mac_PowerPC|Macintosh|Windows|CrOS|PlayStation|CrKey)/, 1);
|
88
|
-
|
89
|
-
if (os != "") {
|
90
|
-
if (os == "Mac_PowerPC") {
|
91
|
-
os = "Macintosh";
|
92
|
-
} else if (os == "PlayStation") {
|
93
|
-
os = "Linux";
|
94
|
-
}
|
95
|
-
return os;
|
96
|
-
}
|
97
|
-
return webfont.UserAgentParser.UNKNOWN;
|
98
|
-
};
|
99
|
-
|
100
|
-
/**
|
101
|
-
* @private
|
102
|
-
* @return {string}
|
103
|
-
*/
|
104
|
-
UserAgentParser.prototype.getPlatformVersionString_ = function() {
|
105
|
-
var genericVersion = this.getMatchingGroup_(this.userAgent_,
|
106
|
-
/(OS X|Windows NT|Android) ([^;)]+)/, 2);
|
107
|
-
if (genericVersion) {
|
108
|
-
return genericVersion;
|
109
|
-
}
|
110
|
-
var winPhoneVersion = this.getMatchingGroup_(this.userAgent_,
|
111
|
-
/Windows Phone( OS)? ([^;)]+)/, 2);
|
112
|
-
if (winPhoneVersion) {
|
113
|
-
return winPhoneVersion;
|
114
|
-
}
|
115
|
-
var iVersion = this.getMatchingGroup_(this.userAgent_,
|
116
|
-
/(iPhone )?OS ([\d_]+)/, 2);
|
117
|
-
if (iVersion) {
|
118
|
-
return iVersion;
|
119
|
-
}
|
120
|
-
var linuxOrCrOsVersion = this.getMatchingGroup_(this.userAgent_,
|
121
|
-
/(?:Linux|CrOS|CrKey) ([^;)]+)/, 1);
|
122
|
-
if (linuxOrCrOsVersion) {
|
123
|
-
var parts = linuxOrCrOsVersion.split(/\s/);
|
124
|
-
for (var i = 0; i < parts.length; i += 1) {
|
125
|
-
if (/^[\d\._]+$/.test(parts[i])) {
|
126
|
-
return parts[i];
|
127
|
-
}
|
128
|
-
}
|
129
|
-
}
|
130
|
-
var blackBerryVersion = this.getMatchingGroup_(this.userAgent_,
|
131
|
-
/(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/, 2);
|
132
|
-
if (blackBerryVersion) {
|
133
|
-
return blackBerryVersion;
|
134
|
-
}
|
135
|
-
|
136
|
-
return UserAgentParser.UNKNOWN;
|
137
|
-
};
|
138
|
-
|
139
|
-
/**
|
140
|
-
* @private
|
141
|
-
*/
|
142
|
-
UserAgentParser.prototype.isIe_ = function() {
|
143
|
-
return this.userAgent_.indexOf("MSIE") != -1 || this.userAgent_.indexOf("Trident/") != -1;
|
144
|
-
};
|
145
|
-
|
146
|
-
/**
|
147
|
-
* @private
|
148
|
-
*/
|
149
|
-
UserAgentParser.prototype.parseIeUserAgentString_ = function() {
|
150
|
-
var platform = this.getPlatform_(),
|
151
|
-
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
152
|
-
browserVersion = null,
|
153
|
-
engine = null,
|
154
|
-
engineVersion = null,
|
155
|
-
engineVersionString = this.getMatchingGroup_(this.userAgent_, /Trident\/([\d\w\.]+)/, 1),
|
156
|
-
documentMode = this.getDocumentMode_(this.doc_);
|
157
|
-
|
158
|
-
if (this.userAgent_.indexOf("MSIE") != -1) {
|
159
|
-
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /MSIE ([\d\w\.]+)/, 1));
|
160
|
-
} else {
|
161
|
-
browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /rv:([\d\w\.]+)/, 1));
|
162
|
-
}
|
163
|
-
|
164
|
-
if (engineVersionString != '') {
|
165
|
-
engine = 'Trident';
|
166
|
-
engineVersion = Version.parse(engineVersionString);
|
167
|
-
} else {
|
168
|
-
engine = UserAgentParser.UNKNOWN;
|
169
|
-
engineVersion = new Version();
|
170
|
-
}
|
171
|
-
|
172
|
-
var supportWebFont = (platform == "Windows" && browserVersion.major >= 6) ||
|
173
|
-
(platform == "Windows Phone" && platformVersion.major >= 8);
|
174
|
-
|
175
|
-
return new UserAgent(
|
176
|
-
"MSIE",
|
177
|
-
browserVersion,
|
178
|
-
engine,
|
179
|
-
engineVersion,
|
180
|
-
platform,
|
181
|
-
platformVersion,
|
182
|
-
documentMode,
|
183
|
-
new BrowserInfo(supportWebFont, false, false, !!this.doc_['fonts'])
|
184
|
-
);
|
185
|
-
};
|
186
|
-
|
187
|
-
/**
|
188
|
-
* @private
|
189
|
-
*/
|
190
|
-
UserAgentParser.prototype.isOldOpera_ = function() {
|
191
|
-
return this.userAgent_.indexOf("Opera") != -1;
|
192
|
-
};
|
193
|
-
|
194
|
-
/**
|
195
|
-
* @private
|
196
|
-
*/
|
197
|
-
UserAgentParser.prototype.isOpera_ = function () {
|
198
|
-
return /OPR\/[\d.]+/.test(this.userAgent_);
|
199
|
-
};
|
200
|
-
|
201
|
-
/**
|
202
|
-
* @private
|
203
|
-
*/
|
204
|
-
UserAgentParser.prototype.parseOldOperaUserAgentString_ = function() {
|
205
|
-
var engineName = UserAgentParser.UNKNOWN,
|
206
|
-
engineVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Presto\/([\d\w\.]+)/, 1)),
|
207
|
-
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
208
|
-
documentMode = this.getDocumentMode_(this.doc_);
|
209
|
-
|
210
|
-
if (engineVersion.isValid()) {
|
211
|
-
engineName = "Presto";
|
212
|
-
} else {
|
213
|
-
if (this.userAgent_.indexOf("Gecko") != -1) {
|
214
|
-
engineName = "Gecko";
|
215
|
-
}
|
216
|
-
engineVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1));
|
217
|
-
}
|
218
|
-
|
219
|
-
// Check for Opera Mini first, since it looks like normal Opera
|
220
|
-
if (this.userAgent_.indexOf("Opera Mini/") != -1) {
|
221
|
-
var browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Opera Mini\/([\d\.]+)/, 1));
|
222
|
-
|
223
|
-
return new UserAgent(
|
224
|
-
"OperaMini",
|
225
|
-
browserVersion,
|
226
|
-
engineName,
|
227
|
-
engineVersion,
|
228
|
-
this.getPlatform_(),
|
229
|
-
platformVersion,
|
230
|
-
documentMode,
|
231
|
-
new BrowserInfo(false, false, false, !!this.doc_['fonts'])
|
232
|
-
);
|
233
|
-
}
|
234
|
-
|
235
|
-
// Otherwise, find version information for normal Opera or Opera Mobile
|
236
|
-
if (this.userAgent_.indexOf("Version/") != -1) {
|
237
|
-
var browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1));
|
238
|
-
|
239
|
-
if (browserVersion.isValid()) {
|
240
|
-
return new UserAgent(
|
241
|
-
"Opera",
|
242
|
-
browserVersion,
|
243
|
-
engineName,
|
244
|
-
engineVersion,
|
245
|
-
this.getPlatform_(),
|
246
|
-
platformVersion,
|
247
|
-
documentMode,
|
248
|
-
new BrowserInfo(browserVersion.major >= 10, false, false, !!this.doc_['fonts'])
|
249
|
-
);
|
250
|
-
}
|
251
|
-
}
|
252
|
-
var browserVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1));
|
253
|
-
|
254
|
-
if (browserVersion.isValid()) {
|
255
|
-
return new UserAgent(
|
256
|
-
"Opera",
|
257
|
-
browserVersion,
|
258
|
-
engineName,
|
259
|
-
engineVersion,
|
260
|
-
this.getPlatform_(),
|
261
|
-
platformVersion,
|
262
|
-
documentMode,
|
263
|
-
new BrowserInfo(browserVersion.major >= 10, false, false, !!this.doc_['fonts'])
|
264
|
-
);
|
265
|
-
}
|
266
|
-
return new UserAgent(
|
267
|
-
"Opera",
|
268
|
-
new Version(),
|
269
|
-
engineName,
|
270
|
-
engineVersion,
|
271
|
-
this.getPlatform_(),
|
272
|
-
platformVersion,
|
273
|
-
documentMode,
|
274
|
-
new BrowserInfo(false, false, false, !!this.doc_['fonts'])
|
275
|
-
);
|
276
|
-
};
|
277
|
-
|
278
|
-
/**
|
279
|
-
* @private
|
280
|
-
*/
|
281
|
-
UserAgentParser.prototype.isWebKit_ = function() {
|
282
|
-
return /AppleWeb(K|k)it/.test(this.userAgent_);
|
283
|
-
};
|
284
|
-
|
285
|
-
/**
|
286
|
-
* @private
|
287
|
-
*/
|
288
|
-
UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
|
289
|
-
var platform = this.getPlatform_(),
|
290
|
-
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
291
|
-
webKitVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /AppleWeb(?:K|k)it\/([\d\.\+]+)/, 1)),
|
292
|
-
browserName = UserAgentParser.UNKNOWN,
|
293
|
-
browserVersion = new Version(),
|
294
|
-
browserVersionString = UserAgentParser.UNKNOWN,
|
295
|
-
supportWebFont = false;
|
296
|
-
|
297
|
-
if (/OPR\/[\d.]+/.test(this.userAgent_)) {
|
298
|
-
browserName = "Opera";
|
299
|
-
} else if (this.userAgent_.indexOf("Chrome") != -1 ||
|
300
|
-
this.userAgent_.indexOf("CrMo") != -1 ||
|
301
|
-
this.userAgent_.indexOf("CriOS") != -1) {
|
302
|
-
browserName = "Chrome";
|
303
|
-
} else if (/Silk\/\d/.test(this.userAgent_)) {
|
304
|
-
browserName = "Silk";
|
305
|
-
} else if (platform == "BlackBerry" || platform == "Android") {
|
306
|
-
browserName = UserAgentParser.BUILTIN_BROWSER;
|
307
|
-
} else if (this.userAgent_.indexOf("PhantomJS") != -1) {
|
308
|
-
browserName = "PhantomJS";
|
309
|
-
} else if (this.userAgent_.indexOf("Safari") != -1) {
|
310
|
-
browserName = "Safari";
|
311
|
-
} else if (this.userAgent_.indexOf("AdobeAIR") != -1) {
|
312
|
-
browserName = "AdobeAIR";
|
313
|
-
} else if (this.userAgent_.indexOf("PlayStation") != -1) {
|
314
|
-
browserName = "BuiltinBrowser";
|
315
|
-
}
|
316
|
-
|
317
|
-
if (browserName == UserAgentParser.BUILTIN_BROWSER) {
|
318
|
-
browserVersionString = UserAgentParser.UNKNOWN;
|
319
|
-
} else if (browserName == "Silk") {
|
320
|
-
browserVersionString = this.getMatchingGroup_(this.userAgent_, /Silk\/([\d\._]+)/, 1);
|
321
|
-
} else if (browserName == "Chrome") {
|
322
|
-
browserVersionString = this.getMatchingGroup_(this.userAgent_, /(Chrome|CrMo|CriOS)\/([\d\.]+)/, 2);
|
323
|
-
} else if (this.userAgent_.indexOf("Version/") != -1) {
|
324
|
-
browserVersionString = this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.\w]+)/, 1);
|
325
|
-
} else if (browserName == "AdobeAIR") {
|
326
|
-
browserVersionString = this.getMatchingGroup_(this.userAgent_, /AdobeAIR\/([\d\.]+)/, 1);
|
327
|
-
} else if (browserName == "Opera") {
|
328
|
-
browserVersionString = this.getMatchingGroup_(this.userAgent_, /OPR\/([\d.]+)/, 1);
|
329
|
-
} else if (browserName == "PhantomJS") {
|
330
|
-
browserVersionString = this.getMatchingGroup_(this.userAgent_, /PhantomJS\/([\d.]+)/, 1);
|
331
|
-
}
|
332
|
-
browserVersion = Version.parse(browserVersionString);
|
333
|
-
|
334
|
-
if (browserName == "AdobeAIR") {
|
335
|
-
supportWebFont = browserVersion.major > 2 || browserVersion.major == 2 && browserVersion.minor >= 5;
|
336
|
-
} else if (platform == "BlackBerry") {
|
337
|
-
supportWebFont = platformVersion.major >= 10;
|
338
|
-
} else if (platform == "Android") {
|
339
|
-
supportWebFont = platformVersion.major > 2 || (platformVersion.major == 2 && platformVersion.minor > 1);
|
340
|
-
} else {
|
341
|
-
supportWebFont = webKitVersion.major >= 526 || webKitVersion.major >= 525 && webKitVersion.minor >= 13;
|
342
|
-
}
|
343
|
-
|
344
|
-
var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11),
|
345
|
-
hasWebKitMetricsBug = platform == 'iPhone' || platform == 'iPad' || platform == 'iPod' || platform == 'Macintosh';
|
346
|
-
|
347
|
-
return new UserAgent(
|
348
|
-
browserName,
|
349
|
-
browserVersion,
|
350
|
-
"AppleWebKit",
|
351
|
-
webKitVersion,
|
352
|
-
platform,
|
353
|
-
platformVersion,
|
354
|
-
this.getDocumentMode_(this.doc_),
|
355
|
-
new BrowserInfo(supportWebFont, hasWebKitFallbackBug, hasWebKitMetricsBug, !!this.doc_['fonts'])
|
356
|
-
);
|
357
|
-
};
|
358
|
-
|
359
|
-
/**
|
360
|
-
* @private
|
361
|
-
*/
|
362
|
-
UserAgentParser.prototype.isGecko_ = function() {
|
363
|
-
return this.userAgent_.indexOf("Gecko") != -1;
|
364
|
-
};
|
365
|
-
|
366
|
-
/**
|
367
|
-
* @private
|
368
|
-
*/
|
369
|
-
UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
|
370
|
-
var name = UserAgentParser.UNKNOWN,
|
371
|
-
version = new Version(),
|
372
|
-
platformVersion = Version.parse(this.getPlatformVersionString_()),
|
373
|
-
supportWebFont = false;
|
374
|
-
|
375
|
-
if (this.userAgent_.indexOf("Firefox") != -1) {
|
376
|
-
name = "Firefox";
|
377
|
-
version = Version.parse(this.getMatchingGroup_(this.userAgent_, /Firefox\/([\d\w\.]+)/, 1));
|
378
|
-
supportWebFont = version.major >= 3 && version.minor >= 5;
|
379
|
-
} else if (this.userAgent_.indexOf("Mozilla") != -1) {
|
380
|
-
name = "Mozilla";
|
381
|
-
}
|
382
|
-
|
383
|
-
var engineVersion = Version.parse(this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1));
|
384
|
-
|
385
|
-
if (!supportWebFont) {
|
386
|
-
supportWebFont = engineVersion.major > 1 ||
|
387
|
-
engineVersion.major == 1 && engineVersion.minor > 9 ||
|
388
|
-
engineVersion.major == 1 && engineVersion.minor == 9 && engineVersion.patch >= 2;
|
389
|
-
}
|
390
|
-
return new UserAgent(
|
391
|
-
name,
|
392
|
-
version,
|
393
|
-
"Gecko",
|
394
|
-
engineVersion,
|
395
|
-
this.getPlatform_(),
|
396
|
-
platformVersion,
|
397
|
-
this.getDocumentMode_(this.doc_),
|
398
|
-
new BrowserInfo(supportWebFont, false, false, !!this.doc_['fonts'])
|
399
|
-
);
|
400
|
-
};
|
401
|
-
|
402
|
-
/**
|
403
|
-
* @private
|
404
|
-
*/
|
405
|
-
UserAgentParser.prototype.getMatchingGroup_ = function(str,
|
406
|
-
regexp, index) {
|
407
|
-
var groups = str.match(regexp);
|
408
|
-
|
409
|
-
if (groups && groups[index]) {
|
410
|
-
return groups[index];
|
411
|
-
}
|
412
|
-
return "";
|
413
|
-
};
|
414
|
-
|
415
|
-
/**
|
416
|
-
* @private
|
417
|
-
*/
|
418
|
-
UserAgentParser.prototype.getDocumentMode_ = function(doc) {
|
419
|
-
if (doc.documentMode) return doc.documentMode;
|
420
|
-
return undefined;
|
421
|
-
};
|
422
|
-
});
|