@p4ulcristian/iris-layout 0.2.0 → 0.2.2
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.
- package/dist/cljs-runtime/cljs.core.js +38746 -0
- package/dist/cljs-runtime/cljs.core.js.map +1 -0
- package/dist/cljs-runtime/cljs.pprint.js +8400 -0
- package/dist/cljs-runtime/cljs.pprint.js.map +1 -0
- package/dist/cljs-runtime/cljs.stacktrace.js +561 -0
- package/dist/cljs-runtime/cljs.stacktrace.js.map +1 -0
- package/dist/cljs-runtime/cljs_env.js +1286 -0
- package/dist/cljs-runtime/clojure.data.js +295 -0
- package/dist/cljs-runtime/clojure.data.js.map +1 -0
- package/dist/cljs-runtime/clojure.set.js +382 -0
- package/dist/cljs-runtime/clojure.set.js.map +1 -0
- package/dist/cljs-runtime/clojure.string.js +480 -0
- package/dist/cljs-runtime/clojure.string.js.map +1 -0
- package/dist/cljs-runtime/clojure.walk.js +132 -0
- package/dist/cljs-runtime/clojure.walk.js.map +1 -0
- package/dist/cljs-runtime/devtools.async.js +90 -0
- package/dist/cljs-runtime/devtools.async.js.map +1 -0
- package/dist/cljs-runtime/devtools.context.js +11 -0
- package/dist/cljs-runtime/devtools.context.js.map +1 -0
- package/dist/cljs-runtime/devtools.core.js +175 -0
- package/dist/cljs-runtime/devtools.core.js.map +1 -0
- package/dist/cljs-runtime/devtools.defaults.js +20 -0
- package/dist/cljs-runtime/devtools.defaults.js.map +1 -0
- package/dist/cljs-runtime/devtools.format.js +631 -0
- package/dist/cljs-runtime/devtools.format.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.budgeting.js +182 -0
- package/dist/cljs-runtime/devtools.formatters.budgeting.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.core.js +220 -0
- package/dist/cljs-runtime/devtools.formatters.core.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.helpers.js +228 -0
- package/dist/cljs-runtime/devtools.formatters.helpers.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.js +261 -0
- package/dist/cljs-runtime/devtools.formatters.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.markup.js +1174 -0
- package/dist/cljs-runtime/devtools.formatters.markup.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.printing.js +313 -0
- package/dist/cljs-runtime/devtools.formatters.printing.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.state.js +325 -0
- package/dist/cljs-runtime/devtools.formatters.state.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.templating.js +666 -0
- package/dist/cljs-runtime/devtools.formatters.templating.js.map +1 -0
- package/dist/cljs-runtime/devtools.hints.js +193 -0
- package/dist/cljs-runtime/devtools.hints.js.map +1 -0
- package/dist/cljs-runtime/devtools.munging.js +1058 -0
- package/dist/cljs-runtime/devtools.munging.js.map +1 -0
- package/dist/cljs-runtime/devtools.prefs.js +87 -0
- package/dist/cljs-runtime/devtools.prefs.js.map +1 -0
- package/dist/cljs-runtime/devtools.preload.js +11 -0
- package/dist/cljs-runtime/devtools.preload.js.map +1 -0
- package/dist/cljs-runtime/devtools.protocols.js +98 -0
- package/dist/cljs-runtime/devtools.protocols.js.map +1 -0
- package/dist/cljs-runtime/devtools.reporter.js +81 -0
- package/dist/cljs-runtime/devtools.reporter.js.map +1 -0
- package/dist/cljs-runtime/devtools.toolbox.js +141 -0
- package/dist/cljs-runtime/devtools.toolbox.js.map +1 -0
- package/dist/cljs-runtime/devtools.util.js +517 -0
- package/dist/cljs-runtime/devtools.util.js.map +1 -0
- package/dist/cljs-runtime/devtools.version.js +9 -0
- package/dist/cljs-runtime/devtools.version.js.map +1 -0
- package/dist/cljs-runtime/goog.array.array.js +659 -0
- package/dist/cljs-runtime/goog.array.array.js.map +9 -0
- package/dist/cljs-runtime/goog.asserts.asserts.js +133 -0
- package/dist/cljs-runtime/goog.asserts.asserts.js.map +9 -0
- package/dist/cljs-runtime/goog.asserts.dom.js +90 -0
- package/dist/cljs-runtime/goog.asserts.dom.js.map +9 -0
- package/dist/cljs-runtime/goog.async.nexttick.js +93 -0
- package/dist/cljs-runtime/goog.async.nexttick.js.map +9 -0
- package/dist/cljs-runtime/goog.base.js +1261 -0
- package/dist/cljs-runtime/goog.base.js.map +9 -0
- package/dist/cljs-runtime/goog.collections.maps.js +82 -0
- package/dist/cljs-runtime/goog.collections.maps.js.map +9 -0
- package/dist/cljs-runtime/goog.debug.entrypointregistry.js +44 -0
- package/dist/cljs-runtime/goog.debug.entrypointregistry.js.map +9 -0
- package/dist/cljs-runtime/goog.debug.error.js +30 -0
- package/dist/cljs-runtime/goog.debug.error.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.asserts.js +40 -0
- package/dist/cljs-runtime/goog.dom.asserts.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.browserfeature.js +21 -0
- package/dist/cljs-runtime/goog.dom.browserfeature.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.dom.js +1087 -0
- package/dist/cljs-runtime/goog.dom.dom.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.element.js +69 -0
- package/dist/cljs-runtime/goog.dom.element.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.htmlelement.js +7 -0
- package/dist/cljs-runtime/goog.dom.htmlelement.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.nodetype.js +6 -0
- package/dist/cljs-runtime/goog.dom.nodetype.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.safe.js +277 -0
- package/dist/cljs-runtime/goog.dom.safe.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.tagname.js +147 -0
- package/dist/cljs-runtime/goog.dom.tagname.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.tags.js +10 -0
- package/dist/cljs-runtime/goog.dom.tags.js.map +9 -0
- package/dist/cljs-runtime/goog.flags.flags.js +12 -0
- package/dist/cljs-runtime/goog.flags.flags.js.map +9 -0
- package/dist/cljs-runtime/goog.fs.blob.js +38 -0
- package/dist/cljs-runtime/goog.fs.blob.js.map +9 -0
- package/dist/cljs-runtime/goog.fs.url.js +37 -0
- package/dist/cljs-runtime/goog.fs.url.js.map +9 -0
- package/dist/cljs-runtime/goog.functions.functions.js +211 -0
- package/dist/cljs-runtime/goog.functions.functions.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safehtml.js +321 -0
- package/dist/cljs-runtime/goog.html.safehtml.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safescript.js +65 -0
- package/dist/cljs-runtime/goog.html.safescript.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safestyle.js +175 -0
- package/dist/cljs-runtime/goog.html.safestyle.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safestylesheet.js +99 -0
- package/dist/cljs-runtime/goog.html.safestylesheet.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safeurl.js +231 -0
- package/dist/cljs-runtime/goog.html.safeurl.js.map +9 -0
- package/dist/cljs-runtime/goog.html.trustedresourceurl.js +123 -0
- package/dist/cljs-runtime/goog.html.trustedresourceurl.js.map +9 -0
- package/dist/cljs-runtime/goog.html.trustedtypes.js +16 -0
- package/dist/cljs-runtime/goog.html.trustedtypes.js.map +9 -0
- package/dist/cljs-runtime/goog.html.uncheckedconversions.js +52 -0
- package/dist/cljs-runtime/goog.html.uncheckedconversions.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.browser.js +352 -0
- package/dist/cljs-runtime/goog.labs.useragent.browser.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.engine.js +73 -0
- package/dist/cljs-runtime/goog.labs.useragent.engine.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropydata.js +14 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropydata.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropyvalue.js +74 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropyvalue.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.platform.js +147 -0
- package/dist/cljs-runtime/goog.labs.useragent.platform.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.useragent.js +21 -0
- package/dist/cljs-runtime/goog.labs.useragent.useragent.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.util.js +81 -0
- package/dist/cljs-runtime/goog.labs.useragent.util.js.map +9 -0
- package/dist/cljs-runtime/goog.math.coordinate.js +97 -0
- package/dist/cljs-runtime/goog.math.coordinate.js.map +9 -0
- package/dist/cljs-runtime/goog.math.integer.js +445 -0
- package/dist/cljs-runtime/goog.math.integer.js.map +9 -0
- package/dist/cljs-runtime/goog.math.long.js +437 -0
- package/dist/cljs-runtime/goog.math.long.js.map +9 -0
- package/dist/cljs-runtime/goog.math.math.js +158 -0
- package/dist/cljs-runtime/goog.math.math.js.map +9 -0
- package/dist/cljs-runtime/goog.math.size.js +76 -0
- package/dist/cljs-runtime/goog.math.size.js.map +9 -0
- package/dist/cljs-runtime/goog.object.object.js +284 -0
- package/dist/cljs-runtime/goog.object.object.js.map +9 -0
- package/dist/cljs-runtime/goog.reflect.reflect.js +32 -0
- package/dist/cljs-runtime/goog.reflect.reflect.js.map +9 -0
- package/dist/cljs-runtime/goog.string.const.js +35 -0
- package/dist/cljs-runtime/goog.string.const.js.map +9 -0
- package/dist/cljs-runtime/goog.string.internal.js +119 -0
- package/dist/cljs-runtime/goog.string.internal.js.map +9 -0
- package/dist/cljs-runtime/goog.string.string.js +462 -0
- package/dist/cljs-runtime/goog.string.string.js.map +9 -0
- package/dist/cljs-runtime/goog.string.stringbuffer.js +32 -0
- package/dist/cljs-runtime/goog.string.stringbuffer.js.map +9 -0
- package/dist/cljs-runtime/goog.string.typedstring.js +9 -0
- package/dist/cljs-runtime/goog.string.typedstring.js.map +9 -0
- package/dist/cljs-runtime/goog.structs.structs.js +199 -0
- package/dist/cljs-runtime/goog.structs.structs.js.map +9 -0
- package/dist/cljs-runtime/goog.uri.uri.js +628 -0
- package/dist/cljs-runtime/goog.uri.uri.js.map +9 -0
- package/dist/cljs-runtime/goog.uri.utils.js +326 -0
- package/dist/cljs-runtime/goog.uri.utils.js.map +9 -0
- package/dist/cljs-runtime/goog.useragent.useragent.js +139 -0
- package/dist/cljs-runtime/goog.useragent.useragent.js.map +9 -0
- package/dist/cljs-runtime/iris_layout.components.entity_card_group.js +202 -0
- package/dist/cljs-runtime/iris_layout.components.entity_card_group.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile.js +295 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile_group.js +33 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile_group.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.resizer.js +91 -0
- package/dist/cljs-runtime/iris_layout.components.resizer.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.touch_drag.js +399 -0
- package/dist/cljs-runtime/iris_layout.components.touch_drag.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.core.js +1372 -0
- package/dist/cljs-runtime/iris_layout.core.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.layout.js +328 -0
- package/dist/cljs-runtime/iris_layout.layout.js.map +1 -0
- package/dist/cljs-runtime/reagent.core.js +993 -0
- package/dist/cljs-runtime/reagent.core.js.map +1 -0
- package/dist/cljs-runtime/reagent.debug.js +75 -0
- package/dist/cljs-runtime/reagent.debug.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.batching.js +270 -0
- package/dist/cljs-runtime/reagent.impl.batching.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.component.js +758 -0
- package/dist/cljs-runtime/reagent.impl.component.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.input.js +175 -0
- package/dist/cljs-runtime/reagent.impl.input.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.protocols.js +99 -0
- package/dist/cljs-runtime/reagent.impl.protocols.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.template.js +660 -0
- package/dist/cljs-runtime/reagent.impl.template.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.util.js +748 -0
- package/dist/cljs-runtime/reagent.impl.util.js.map +1 -0
- package/dist/cljs-runtime/reagent.ratom.js +1668 -0
- package/dist/cljs-runtime/reagent.ratom.js.map +1 -0
- package/dist/cljs-runtime/shadow.esm.esm_import$react.js +5 -0
- package/dist/cljs-runtime/shadow.module.iris-layout.append.js +2 -0
- package/dist/cljs-runtime/shadow.module.iris-layout.prepend.js +2 -0
- package/dist/iris-layout.js +375 -355
- package/dist/styles.css +287 -9
- package/package.json +1 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import "./cljs_env.js";
|
|
2
|
+
import "./goog.labs.useragent.util.js";
|
|
3
|
+
import "./goog.labs.useragent.highentropy.highentropyvalue.js";
|
|
4
|
+
import "./goog.asserts.asserts.js";
|
|
5
|
+
import "./goog.string.internal.js";
|
|
6
|
+
import "./goog.labs.useragent.highentropy.highentropydata.js";
|
|
7
|
+
import "./goog.labs.useragent.useragent.js";
|
|
8
|
+
goog.loadModule(function(exports) {
|
|
9
|
+
function useUserAgentDataBrand(ignoreClientHintsFlag = false) {
|
|
10
|
+
if (util.ASSUME_CLIENT_HINTS_SUPPORT) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (!ignoreClientHintsFlag && !useClientHints()) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const userAgentData = util.getUserAgentData();
|
|
17
|
+
return !!userAgentData && userAgentData.brands.length > 0;
|
|
18
|
+
}
|
|
19
|
+
function hasFullVersionList() {
|
|
20
|
+
return isAtLeast(Brand.CHROMIUM, 98);
|
|
21
|
+
}
|
|
22
|
+
function matchOpera() {
|
|
23
|
+
if (useUserAgentDataBrand()) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return util.matchUserAgent("Opera");
|
|
27
|
+
}
|
|
28
|
+
function matchIE() {
|
|
29
|
+
if (useUserAgentDataBrand()) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return util.matchUserAgent("Trident") || util.matchUserAgent("MSIE");
|
|
33
|
+
}
|
|
34
|
+
function matchEdgeHtml() {
|
|
35
|
+
if (useUserAgentDataBrand()) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return util.matchUserAgent("Edge");
|
|
39
|
+
}
|
|
40
|
+
function matchEdgeChromium() {
|
|
41
|
+
if (useUserAgentDataBrand()) {
|
|
42
|
+
return util.matchUserAgentDataBrand(Brand.EDGE);
|
|
43
|
+
}
|
|
44
|
+
return util.matchUserAgent("Edg/");
|
|
45
|
+
}
|
|
46
|
+
function matchOperaChromium() {
|
|
47
|
+
if (useUserAgentDataBrand()) {
|
|
48
|
+
return util.matchUserAgentDataBrand(Brand.OPERA);
|
|
49
|
+
}
|
|
50
|
+
return util.matchUserAgent("OPR");
|
|
51
|
+
}
|
|
52
|
+
function matchFirefox() {
|
|
53
|
+
return util.matchUserAgent("Firefox") || util.matchUserAgent("FxiOS");
|
|
54
|
+
}
|
|
55
|
+
function matchSafari() {
|
|
56
|
+
return util.matchUserAgent("Safari") && !(matchChrome() || matchCoast() || matchOpera() || matchEdgeHtml() || matchEdgeChromium() || matchOperaChromium() || matchFirefox() || isSilk() || util.matchUserAgent("Android"));
|
|
57
|
+
}
|
|
58
|
+
function matchCoast() {
|
|
59
|
+
if (useUserAgentDataBrand()) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return util.matchUserAgent("Coast");
|
|
63
|
+
}
|
|
64
|
+
function matchIosWebview() {
|
|
65
|
+
return (util.matchUserAgent("iPad") || util.matchUserAgent("iPhone")) && !matchSafari() && !matchChrome() && !matchCoast() && !matchFirefox() && util.matchUserAgent("AppleWebKit");
|
|
66
|
+
}
|
|
67
|
+
function matchChrome() {
|
|
68
|
+
if (useUserAgentDataBrand()) {
|
|
69
|
+
return util.matchUserAgentDataBrand(Brand.CHROMIUM);
|
|
70
|
+
}
|
|
71
|
+
return (util.matchUserAgent("Chrome") || util.matchUserAgent("CriOS")) && !matchEdgeHtml() || isSilk();
|
|
72
|
+
}
|
|
73
|
+
function matchAndroidBrowser() {
|
|
74
|
+
return util.matchUserAgent("Android") && !(isChrome() || isFirefox() || isOpera() || isSilk());
|
|
75
|
+
}
|
|
76
|
+
function isSilk() {
|
|
77
|
+
return util.matchUserAgent("Silk");
|
|
78
|
+
}
|
|
79
|
+
function createVersionMap(versionTuples) {
|
|
80
|
+
const versionMap = {};
|
|
81
|
+
versionTuples.forEach(tuple => {
|
|
82
|
+
const key = tuple[0];
|
|
83
|
+
const value = tuple[1];
|
|
84
|
+
versionMap[key] = value;
|
|
85
|
+
});
|
|
86
|
+
return keys => {
|
|
87
|
+
return versionMap[keys.find(key => {
|
|
88
|
+
return key in versionMap;
|
|
89
|
+
})] || "";
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function getVersion() {
|
|
93
|
+
const userAgentString = util.getUserAgent();
|
|
94
|
+
if (isIE()) {
|
|
95
|
+
return getIEVersion(userAgentString);
|
|
96
|
+
}
|
|
97
|
+
const versionTuples = util.extractVersionTuples(userAgentString);
|
|
98
|
+
const lookUpValueWithKeys = createVersionMap(versionTuples);
|
|
99
|
+
if (isOpera()) {
|
|
100
|
+
return lookUpValueWithKeys(["Version", "Opera"]);
|
|
101
|
+
}
|
|
102
|
+
if (isEdge()) {
|
|
103
|
+
return lookUpValueWithKeys(["Edge"]);
|
|
104
|
+
}
|
|
105
|
+
if (isEdgeChromium()) {
|
|
106
|
+
return lookUpValueWithKeys(["Edg"]);
|
|
107
|
+
}
|
|
108
|
+
if (isSilk()) {
|
|
109
|
+
return lookUpValueWithKeys(["Silk"]);
|
|
110
|
+
}
|
|
111
|
+
if (isChrome()) {
|
|
112
|
+
return lookUpValueWithKeys(["Chrome", "CriOS", "HeadlessChrome"]);
|
|
113
|
+
}
|
|
114
|
+
const tuple = versionTuples[2];
|
|
115
|
+
return tuple && tuple[1] || "";
|
|
116
|
+
}
|
|
117
|
+
function isVersionOrHigher(version) {
|
|
118
|
+
return compareVersions(getVersion(), version) >= 0;
|
|
119
|
+
}
|
|
120
|
+
function getIEVersion(userAgent) {
|
|
121
|
+
const rv = /rv: *([\d\.]*)/.exec(userAgent);
|
|
122
|
+
if (rv && rv[1]) {
|
|
123
|
+
return rv[1];
|
|
124
|
+
}
|
|
125
|
+
let version = "";
|
|
126
|
+
const msie = /MSIE +([\d\.]+)/.exec(userAgent);
|
|
127
|
+
if (msie && msie[1]) {
|
|
128
|
+
const tridentVersion = /Trident\/(\d.\d)/.exec(userAgent);
|
|
129
|
+
if (msie[1] == "7.0") {
|
|
130
|
+
if (tridentVersion && tridentVersion[1]) {
|
|
131
|
+
switch(tridentVersion[1]) {
|
|
132
|
+
case "4.0":
|
|
133
|
+
version = "8.0";
|
|
134
|
+
break;
|
|
135
|
+
case "5.0":
|
|
136
|
+
version = "9.0";
|
|
137
|
+
break;
|
|
138
|
+
case "6.0":
|
|
139
|
+
version = "10.0";
|
|
140
|
+
break;
|
|
141
|
+
case "7.0":
|
|
142
|
+
version = "11.0";
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
version = "7.0";
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
version = msie[1];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return version;
|
|
153
|
+
}
|
|
154
|
+
function getFullVersionFromUserAgentString(browser) {
|
|
155
|
+
const userAgentString = util.getUserAgent();
|
|
156
|
+
if (browser === Brand.IE) {
|
|
157
|
+
return isIE() ? getIEVersion(userAgentString) : "";
|
|
158
|
+
}
|
|
159
|
+
const versionTuples = util.extractVersionTuples(userAgentString);
|
|
160
|
+
const lookUpValueWithKeys = createVersionMap(versionTuples);
|
|
161
|
+
switch(browser) {
|
|
162
|
+
case Brand.OPERA:
|
|
163
|
+
if (isOpera()) {
|
|
164
|
+
return lookUpValueWithKeys(["Version", "Opera"]);
|
|
165
|
+
} else if (isOperaChromium()) {
|
|
166
|
+
return lookUpValueWithKeys(["OPR"]);
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
case Brand.EDGE:
|
|
170
|
+
if (isEdge()) {
|
|
171
|
+
return lookUpValueWithKeys(["Edge"]);
|
|
172
|
+
} else if (isEdgeChromium()) {
|
|
173
|
+
return lookUpValueWithKeys(["Edg"]);
|
|
174
|
+
}
|
|
175
|
+
break;
|
|
176
|
+
case Brand.CHROMIUM:
|
|
177
|
+
if (isChrome()) {
|
|
178
|
+
return lookUpValueWithKeys(["Chrome", "CriOS", "HeadlessChrome"]);
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
if (browser === Brand.FIREFOX && isFirefox() || browser === Brand.SAFARI && isSafari() || browser === Brand.ANDROID_BROWSER && isAndroidBrowser() || browser === Brand.SILK && isSilk()) {
|
|
183
|
+
const tuple = versionTuples[2];
|
|
184
|
+
return tuple && tuple[1] || "";
|
|
185
|
+
}
|
|
186
|
+
return "";
|
|
187
|
+
}
|
|
188
|
+
function versionOf_(browser) {
|
|
189
|
+
let versionParts;
|
|
190
|
+
if (useUserAgentDataBrand() && browser !== Brand.SILK) {
|
|
191
|
+
const data = util.getUserAgentData();
|
|
192
|
+
const matchingBrand = data.brands.find(({brand}) => {
|
|
193
|
+
return brand === browser;
|
|
194
|
+
});
|
|
195
|
+
if (!matchingBrand || !matchingBrand.version) {
|
|
196
|
+
return NaN;
|
|
197
|
+
}
|
|
198
|
+
versionParts = matchingBrand.version.split(".");
|
|
199
|
+
} else {
|
|
200
|
+
const fullVersion = getFullVersionFromUserAgentString(browser);
|
|
201
|
+
if (fullVersion === "") {
|
|
202
|
+
return NaN;
|
|
203
|
+
}
|
|
204
|
+
versionParts = fullVersion.split(".");
|
|
205
|
+
}
|
|
206
|
+
if (versionParts.length === 0) {
|
|
207
|
+
return NaN;
|
|
208
|
+
}
|
|
209
|
+
const majorVersion = versionParts[0];
|
|
210
|
+
return Number(majorVersion);
|
|
211
|
+
}
|
|
212
|
+
function isAtLeast(brand, majorVersion) {
|
|
213
|
+
assert(Math.floor(majorVersion) === majorVersion, "Major version must be an integer");
|
|
214
|
+
return versionOf_(brand) >= majorVersion;
|
|
215
|
+
}
|
|
216
|
+
function isAtMost(brand, majorVersion) {
|
|
217
|
+
assert(Math.floor(majorVersion) === majorVersion, "Major version must be an integer");
|
|
218
|
+
return versionOf_(brand) <= majorVersion;
|
|
219
|
+
}
|
|
220
|
+
async function loadFullVersions() {
|
|
221
|
+
if (useUserAgentDataBrand(true)) {
|
|
222
|
+
await fullVersionList.load();
|
|
223
|
+
}
|
|
224
|
+
preUachHasLoaded = true;
|
|
225
|
+
}
|
|
226
|
+
function fullVersionOf(browser) {
|
|
227
|
+
let fallbackVersionString = "";
|
|
228
|
+
if (!hasFullVersionList()) {
|
|
229
|
+
fallbackVersionString = getFullVersionFromUserAgentString(browser);
|
|
230
|
+
}
|
|
231
|
+
const useUach = browser !== Brand.SILK && useUserAgentDataBrand(true);
|
|
232
|
+
if (useUach) {
|
|
233
|
+
const data = util.getUserAgentData();
|
|
234
|
+
if (!data.brands.find(({brand}) => {
|
|
235
|
+
return brand === browser;
|
|
236
|
+
})) {
|
|
237
|
+
return undefined;
|
|
238
|
+
}
|
|
239
|
+
} else if (fallbackVersionString === "") {
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
return new HighEntropyBrandVersion(browser, useUach, fallbackVersionString);
|
|
243
|
+
}
|
|
244
|
+
function getVersionStringForLogging(browser) {
|
|
245
|
+
if (useUserAgentDataBrand(true)) {
|
|
246
|
+
const fullVersionObj = fullVersionOf(browser);
|
|
247
|
+
if (fullVersionObj) {
|
|
248
|
+
const fullVersion = fullVersionObj.getIfLoaded();
|
|
249
|
+
if (fullVersion) {
|
|
250
|
+
return fullVersion.toVersionStringForLogging();
|
|
251
|
+
}
|
|
252
|
+
const data = util.getUserAgentData();
|
|
253
|
+
const matchingBrand = data.brands.find(({brand}) => {
|
|
254
|
+
return brand === browser;
|
|
255
|
+
});
|
|
256
|
+
assertExists(matchingBrand);
|
|
257
|
+
return matchingBrand.version;
|
|
258
|
+
}
|
|
259
|
+
return "";
|
|
260
|
+
} else {
|
|
261
|
+
return getFullVersionFromUserAgentString(browser);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
"use strict";
|
|
265
|
+
goog.module("goog.labs.userAgent.browser");
|
|
266
|
+
goog.module.declareLegacyNamespace();
|
|
267
|
+
const util = goog.require("goog.labs.userAgent.util");
|
|
268
|
+
const {AsyncValue, Version} = goog.require("goog.labs.userAgent.highEntropy.highEntropyValue");
|
|
269
|
+
const {assert, assertExists} = goog.require("goog.asserts");
|
|
270
|
+
const {compareVersions} = goog.require("goog.string.internal");
|
|
271
|
+
const {fullVersionList} = goog.require("goog.labs.userAgent.highEntropy.highEntropyData");
|
|
272
|
+
const {useClientHints} = goog.require("goog.labs.userAgent");
|
|
273
|
+
const Brand = {ANDROID_BROWSER:"Android Browser", CHROMIUM:"Chromium", EDGE:"Microsoft Edge", FIREFOX:"Firefox", IE:"Internet Explorer", OPERA:"Opera", SAFARI:"Safari", SILK:"Silk"};
|
|
274
|
+
exports.Brand = Brand;
|
|
275
|
+
const isOpera = matchOpera;
|
|
276
|
+
exports.isOpera = isOpera;
|
|
277
|
+
const isIE = matchIE;
|
|
278
|
+
exports.isIE = isIE;
|
|
279
|
+
const isEdge = matchEdgeHtml;
|
|
280
|
+
exports.isEdge = isEdge;
|
|
281
|
+
const isEdgeChromium = matchEdgeChromium;
|
|
282
|
+
exports.isEdgeChromium = isEdgeChromium;
|
|
283
|
+
const isOperaChromium = matchOperaChromium;
|
|
284
|
+
exports.isOperaChromium = isOperaChromium;
|
|
285
|
+
const isFirefox = matchFirefox;
|
|
286
|
+
exports.isFirefox = isFirefox;
|
|
287
|
+
const isSafari = matchSafari;
|
|
288
|
+
exports.isSafari = isSafari;
|
|
289
|
+
const isCoast = matchCoast;
|
|
290
|
+
exports.isCoast = isCoast;
|
|
291
|
+
const isIosWebview = matchIosWebview;
|
|
292
|
+
exports.isIosWebview = isIosWebview;
|
|
293
|
+
const isChrome = matchChrome;
|
|
294
|
+
exports.isChrome = isChrome;
|
|
295
|
+
const isAndroidBrowser = matchAndroidBrowser;
|
|
296
|
+
exports.isAndroidBrowser = isAndroidBrowser;
|
|
297
|
+
exports.isSilk = isSilk;
|
|
298
|
+
exports.getVersion = getVersion;
|
|
299
|
+
exports.isVersionOrHigher = isVersionOrHigher;
|
|
300
|
+
exports.isAtLeast = isAtLeast;
|
|
301
|
+
exports.isAtMost = isAtMost;
|
|
302
|
+
class HighEntropyBrandVersion {
|
|
303
|
+
constructor(brand, useUach, fallbackVersion) {
|
|
304
|
+
this.brand_ = brand;
|
|
305
|
+
this.version_ = new Version(fallbackVersion);
|
|
306
|
+
this.useUach_ = useUach;
|
|
307
|
+
}
|
|
308
|
+
getIfLoaded() {
|
|
309
|
+
if (this.useUach_) {
|
|
310
|
+
const loadedVersionList = fullVersionList.getIfLoaded();
|
|
311
|
+
if (loadedVersionList !== undefined) {
|
|
312
|
+
const matchingBrand = loadedVersionList.find(({brand}) => {
|
|
313
|
+
return this.brand_ === brand;
|
|
314
|
+
});
|
|
315
|
+
assertExists(matchingBrand);
|
|
316
|
+
return new Version(matchingBrand.version);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (preUachHasLoaded) {
|
|
320
|
+
return this.version_;
|
|
321
|
+
}
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
async load() {
|
|
325
|
+
if (this.useUach_) {
|
|
326
|
+
const loadedVersionList = await fullVersionList.load();
|
|
327
|
+
if (loadedVersionList !== undefined) {
|
|
328
|
+
const matchingBrand = loadedVersionList.find(({brand}) => {
|
|
329
|
+
return this.brand_ === brand;
|
|
330
|
+
});
|
|
331
|
+
assertExists(matchingBrand);
|
|
332
|
+
return new Version(matchingBrand.version);
|
|
333
|
+
}
|
|
334
|
+
} else {
|
|
335
|
+
await 0;
|
|
336
|
+
}
|
|
337
|
+
preUachHasLoaded = true;
|
|
338
|
+
return this.version_;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
let preUachHasLoaded = false;
|
|
342
|
+
exports.loadFullVersions = loadFullVersions;
|
|
343
|
+
exports.resetForTesting = () => {
|
|
344
|
+
preUachHasLoaded = false;
|
|
345
|
+
fullVersionList.resetForTesting();
|
|
346
|
+
};
|
|
347
|
+
exports.fullVersionOf = fullVersionOf;
|
|
348
|
+
exports.getVersionStringForLogging = getVersionStringForLogging;
|
|
349
|
+
return exports;
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
//# sourceMappingURL=goog.labs.useragent.browser.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.labs.useragent.browser.js",
|
|
4
|
+
"lineCount":344,
|
|
5
|
+
"mappings":"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",
|
|
6
|
+
"sources":["goog/labs/useragent/browser.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Closure user agent detection (Browser).\n * @see <a href=\"http://www.useragentstring.com/\">User agent strings</a>\n * For more information on rendering engine, platform, or device see the other\n * sub-namespaces in goog.labs.userAgent, goog.labs.userAgent.platform,\n * goog.labs.userAgent.device respectively.)\n */\n\ngoog.module('goog.labs.userAgent.browser');\ngoog.module.declareLegacyNamespace();\n\nconst util = goog.require('goog.labs.userAgent.util');\nconst {AsyncValue, Version} = goog.require('goog.labs.userAgent.highEntropy.highEntropyValue');\nconst {assert, assertExists} = goog.require('goog.asserts');\nconst {compareVersions} = goog.require('goog.string.internal');\nconst {fullVersionList} = goog.require('goog.labs.userAgent.highEntropy.highEntropyData');\nconst {useClientHints} = goog.require('goog.labs.userAgent');\n\n// TODO(nnaze): Refactor to remove excessive exclusion logic in matching\n// functions.\n\n/**\n * A browser brand represents an opaque string that is used for making\n * brand-specific version checks in userAgentData.\n * @enum {string}\n */\nconst Brand = {\n /**\n * The browser brand for Android Browser.\n * Do not depend on the value of this string. Because Android Browser has not\n * implemented userAgentData yet, the value of this string is not guaranteed\n * to stay the same in future revisions.\n */\n ANDROID_BROWSER: 'Android Browser',\n /**\n * The browser brand for Chromium, including Chromium-based Edge and Opera.\n */\n CHROMIUM: 'Chromium',\n /**\n * The browser brand for Edge.\n * This brand can be used to get the version of both EdgeHTML and\n * Chromium-based Edge.\n */\n EDGE: 'Microsoft Edge',\n /**\n * The browser brand for Firefox.\n * Do not depend on the value of this string. Because Firefox has not\n * implemented userAgentData yet, the value of this string is not guaranteed\n * to stay the same in future revisions.\n */\n FIREFOX: 'Firefox',\n /**\n * The browser brand for Internet Explorer.\n * Do not depend on the value of this string. Because IE will never support\n * userAgentData, the value of this string should be treated as opaque (it's\n * used internally for legacy-userAgent fallback).\n */\n IE: 'Internet Explorer',\n /**\n * The browser brand for Opera.\n * This brand can be used to get the version of both Presto- and\n * Chromium-based Opera.\n */\n OPERA: 'Opera',\n /**\n * The browser brand for Safari.\n * Do not depend on the value of this string. Because Safari has not\n * implemented userAgentData yet, the value of this string is not guaranteed\n * to stay the same in future revisions.\n */\n SAFARI: 'Safari',\n /**\n * The browser brand for Silk.\n * See\n * https://docs.aws.amazon.com/silk/latest/developerguide/what-is-silk.html\n * Do not depend on the value of this string. Because Silk does not\n * identify itself in userAgentData yet, the value of this string is not\n * guaranteed to stay the same in future revisions.\n */\n SILK: 'Silk',\n};\nexports.Brand = Brand;\n\n/**\n * @param {boolean=} ignoreClientHintsFlag Iff truthy, the `useClientHints`\n * function will not be called when evaluating if User-Agent Client Hints\n * Brand data can be used. For existing labs.userAgent API surfaces with\n * widespread use, this should be a falsy value so that usage of the Client\n * Hints APIs can be gated behind flags / experiment rollouts.\n * @return {boolean} Whether to use navigator.userAgentData to determine\n * browser's brand.\n */\nfunction useUserAgentDataBrand(ignoreClientHintsFlag = false) {\n if (util.ASSUME_CLIENT_HINTS_SUPPORT) return true;\n // High-entropy API surfaces should not be gated behind the useClientHints\n // check (as in production it is gated behind a define).\n if (!ignoreClientHintsFlag && !useClientHints()) return false;\n const userAgentData = util.getUserAgentData();\n return !!userAgentData && userAgentData.brands.length > 0;\n}\n\n/**\n * @return {boolean} Whether this browser is likely to have the fullVersionList\n * high-entropy Client Hint.\n */\nfunction hasFullVersionList() {\n // https://chromiumdash.appspot.com/commits?commit=1eb643c3057e64ff4d22468432ad16c4cab12879&platform=Linux\n // indicates that for all platforms Chromium 98 shipped this feature.\n // See also\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-UA-Full-Version-List#browser_compatibility\n return isAtLeast(Brand.CHROMIUM, 98);\n}\n\n/**\n * @return {boolean} Whether the user's browser is Opera. Note: Chromium based\n * Opera (Opera 15+) is detected as Chrome to avoid unnecessary special\n * casing.\n */\nfunction matchOpera() {\n if (useUserAgentDataBrand()) {\n // Pre-Chromium Edge doesn't support navigator.userAgentData.\n return false;\n }\n return util.matchUserAgent('Opera');\n}\n\n/** @return {boolean} Whether the user's browser is IE. */\nfunction matchIE() {\n if (useUserAgentDataBrand()) {\n // IE doesn't support navigator.userAgentData.\n return false;\n }\n return util.matchUserAgent('Trident') || util.matchUserAgent('MSIE');\n}\n\n/**\n * @return {boolean} Whether the user's browser is Edge. This refers to\n * EdgeHTML based Edge.\n */\nfunction matchEdgeHtml() {\n if (useUserAgentDataBrand()) {\n // Pre-Chromium Edge doesn't support navigator.userAgentData.\n return false;\n }\n return util.matchUserAgent('Edge');\n}\n\n/** @return {boolean} Whether the user's browser is Chromium based Edge. */\nfunction matchEdgeChromium() {\n if (useUserAgentDataBrand()) {\n return util.matchUserAgentDataBrand(Brand.EDGE);\n }\n return util.matchUserAgent('Edg/');\n}\n\n/** @return {boolean} Whether the user's browser is Chromium based Opera. */\nfunction matchOperaChromium() {\n if (useUserAgentDataBrand()) {\n return util.matchUserAgentDataBrand(Brand.OPERA);\n }\n return util.matchUserAgent('OPR');\n}\n\n/** @return {boolean} Whether the user's browser is Firefox. */\nfunction matchFirefox() {\n // Firefox doesn't support navigator.userAgentData yet, so use\n // navigator.userAgent.\n return util.matchUserAgent('Firefox') || util.matchUserAgent('FxiOS');\n}\n\n/** @return {boolean} Whether the user's browser is Safari. */\nfunction matchSafari() {\n // Apple-based browsers don't support navigator.userAgentData yet, so use\n // navigator.userAgent.\n return util.matchUserAgent('Safari') &&\n !(matchChrome() || matchCoast() || matchOpera() || matchEdgeHtml() ||\n matchEdgeChromium() || matchOperaChromium() || matchFirefox() ||\n isSilk() || util.matchUserAgent('Android'));\n}\n\n/**\n * @return {boolean} Whether the user's browser is Coast (Opera's Webkit-based\n * iOS browser).\n */\nfunction matchCoast() {\n if (useUserAgentDataBrand()) {\n // Coast doesn't support navigator.userAgentData.\n return false;\n }\n return util.matchUserAgent('Coast');\n}\n\n/** @return {boolean} Whether the user's browser is iOS Webview. */\nfunction matchIosWebview() {\n // Apple-based browsers don't support navigator.userAgentData yet, so use\n // navigator.userAgent.\n // iOS Webview does not show up as Chrome or Safari.\n return (util.matchUserAgent('iPad') || util.matchUserAgent('iPhone')) &&\n !matchSafari() && !matchChrome() && !matchCoast() && !matchFirefox() &&\n util.matchUserAgent('AppleWebKit');\n}\n\n/**\n * @return {boolean} Whether the user's browser is any Chromium browser. This\n * returns true for Chrome, Opera 15+, and Edge Chromium.\n */\nfunction matchChrome() {\n if (useUserAgentDataBrand()) {\n return util.matchUserAgentDataBrand(Brand.CHROMIUM);\n }\n return ((util.matchUserAgent('Chrome') || util.matchUserAgent('CriOS')) &&\n !matchEdgeHtml()) ||\n isSilk();\n}\n\n/** @return {boolean} Whether the user's browser is the Android browser. */\nfunction matchAndroidBrowser() {\n // Android can appear in the user agent string for Chrome on Android.\n // This is not the Android standalone browser if it does.\n return util.matchUserAgent('Android') &&\n !(isChrome() || isFirefox() || isOpera() || isSilk());\n}\n\n/** @return {boolean} Whether the user's browser is Opera. */\nconst isOpera = matchOpera;\nexports.isOpera = isOpera;\n\n/** @return {boolean} Whether the user's browser is IE. */\nconst isIE = matchIE;\nexports.isIE = isIE;\n\n/** @return {boolean} Whether the user's browser is EdgeHTML based Edge. */\nconst isEdge = matchEdgeHtml;\nexports.isEdge = isEdge;\n\n/** @return {boolean} Whether the user's browser is Chromium based Edge. */\nconst isEdgeChromium = matchEdgeChromium;\nexports.isEdgeChromium = isEdgeChromium;\n\n/** @return {boolean} Whether the user's browser is Chromium based Opera. */\nconst isOperaChromium = matchOperaChromium;\nexports.isOperaChromium = isOperaChromium;\n\n/** @return {boolean} Whether the user's browser is Firefox. */\nconst isFirefox = matchFirefox;\nexports.isFirefox = isFirefox;\n\n/** @return {boolean} Whether the user's browser is Safari. */\nconst isSafari = matchSafari;\nexports.isSafari = isSafari;\n\n/**\n * @return {boolean} Whether the user's browser is Coast (Opera's Webkit-based\n * iOS browser).\n */\nconst isCoast = matchCoast;\nexports.isCoast = isCoast;\n\n/** @return {boolean} Whether the user's browser is iOS Webview. */\nconst isIosWebview = matchIosWebview;\nexports.isIosWebview = isIosWebview;\n\n/**\n * @return {boolean} Whether the user's browser is any Chromium based browser (\n * Chrome, Blink-based Opera (15+) and Edge Chromium).\n */\nconst isChrome = matchChrome;\nexports.isChrome = isChrome;\n\n/** @return {boolean} Whether the user's browser is the Android browser. */\nconst isAndroidBrowser = matchAndroidBrowser;\nexports.isAndroidBrowser = isAndroidBrowser;\n\n/**\n * For more information, see:\n * http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html\n * @return {boolean} Whether the user's browser is Silk.\n */\nfunction isSilk() {\n // As of Silk 93, Silk does not identify itself in userAgentData.brands.\n // When Silk changes this behavior, update this method to call\n // matchUserAgentDataBrand (akin to isChrome, etc.)\n return util.matchUserAgent('Silk');\n}\nexports.isSilk = isSilk;\n\n/**\n * A helper function that returns a function mapping a list of candidate\n * version tuple keys to the first version string present under a key.\n * Ex:\n * <code>\n * // Arg extracted from \"Foo/1.2.3 Bar/0.2021\"\n * const mapVersion = createVersionMap([[\"Foo\", \"1.2.3\"], [\"Bar\", \"0.2021\"]]);\n * mapVersion([\"Bar\", \"Foo\"]); // returns \"0.2021\"\n * mapVersion([\"Baz\", \"Foo\"]); // returns \"1.2.3\"\n * mapVersion([\"Baz\", \"???\"]); // returns \"\"\n * </code>\n * @param {!Array<!Array<string>>} versionTuples Version tuples pre-extracted\n * from a user agent string.\n * @return {function(!Array<string>): string} The version string, or empty\n * string if it doesn't exist under the given key.\n */\nfunction createVersionMap(versionTuples) {\n // Construct a map for easy lookup.\n const versionMap = {};\n versionTuples.forEach((tuple) => {\n // Note that the tuple is of length three, but we only care about the\n // first two.\n const key = tuple[0];\n const value = tuple[1];\n versionMap[key] = value;\n });\n\n // Gives the value with the first key it finds, otherwise empty string.\n return (keys) => versionMap[keys.find((key) => key in versionMap)] || '';\n}\n\n/**\n * Returns the browser version.\n *\n * Note that for browsers with multiple brands, this function assumes a primary\n * brand and returns the version for that brand.\n *\n * Additionally, this function is not userAgentData-aware and will return\n * incorrect values when the User Agent string is frozen. The current status of\n * User Agent string freezing is available here:\n * https://www.chromestatus.com/feature/5704553745874944\n *\n * To mitigate both of these potential issues, use\n * getVersionStringForLogging() or fullVersionOf() instead.\n *\n * @return {string} The browser version or empty string if version cannot be\n * determined. Note that for Internet Explorer, this returns the version of\n * the browser, not the version of the rendering engine. (IE 8 in\n * compatibility mode will return 8.0 rather than 7.0. To determine the\n * rendering engine version, look at document.documentMode instead. See\n * http://msdn.microsoft.com/en-us/library/cc196988(v=vs.85).aspx for more\n * details.)\n */\nfunction getVersion() {\n const userAgentString = util.getUserAgent();\n\n // Special case IE since IE's version is inside the parenthesis and\n // without the '/'.\n if (isIE()) {\n return getIEVersion(userAgentString);\n }\n\n const versionTuples = util.extractVersionTuples(userAgentString);\n const lookUpValueWithKeys = createVersionMap(versionTuples);\n\n // Check Opera before Chrome since Opera 15+ has \"Chrome\" in the string.\n // See\n // http://my.opera.com/ODIN/blog/2013/07/15/opera-user-agent-strings-opera-15-and-beyond\n if (isOpera()) {\n // Opera 10 has Version/10.0 but Opera/9.8, so look for \"Version\" first.\n // Opera uses 'OPR' for more recent UAs.\n return lookUpValueWithKeys(['Version', 'Opera']);\n }\n\n // Check Edge before Chrome since it has Chrome in the string.\n if (isEdge()) {\n return lookUpValueWithKeys(['Edge']);\n }\n\n // Check Chromium Edge before Chrome since it has Chrome in the string.\n if (isEdgeChromium()) {\n return lookUpValueWithKeys(['Edg']);\n }\n\n // Check Silk before Chrome since it may have Chrome in its string and be\n // treated as Chrome.\n if (isSilk()) {\n return lookUpValueWithKeys(['Silk']);\n }\n\n if (isChrome()) {\n return lookUpValueWithKeys(['Chrome', 'CriOS', 'HeadlessChrome']);\n }\n\n // Usually products browser versions are in the third tuple after \"Mozilla\"\n // and the engine.\n const tuple = versionTuples[2];\n return tuple && tuple[1] || '';\n}\nexports.getVersion = getVersion;\n\n/**\n * Returns whether the current browser's version is at least as high as the\n * given one.\n *\n * Note that for browsers with multiple brands, this function assumes a primary\n * brand and checks the version for that brand.\n *\n * Additionally, this function is not userAgentData-aware and will return\n * incorrect values when the User Agent string is frozen. The current status of\n * User Agent string freezing is available here:\n * https://www.chromestatus.com/feature/5704553745874944\n *\n * To mitigate both of these potential issues, use isAtLeast()/isAtMost() or\n * fullVersionOf() instead.\n *\n * @param {string|number} version The version to check.\n * @return {boolean} Whether the browser version is higher or the same as the\n * given version.\n * @deprecated Use isAtLeast()/isAtMost() instead.\n */\nfunction isVersionOrHigher(version) {\n return compareVersions(getVersion(), version) >= 0;\n}\nexports.isVersionOrHigher = isVersionOrHigher;\n\n/**\n * A helper function to determine IE version. More information:\n * http://msdn.microsoft.com/en-us/library/ie/bg182625(v=vs.85).aspx#uaString\n * http://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n * http://blogs.msdn.com/b/ie/archive/2010/03/23/introducing-ie9-s-user-agent-string.aspx\n * http://blogs.msdn.com/b/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx\n * @param {string} userAgent the User-Agent.\n * @return {string}\n */\nfunction getIEVersion(userAgent) {\n // IE11 may identify itself as MSIE 9.0 or MSIE 10.0 due to an IE 11 upgrade\n // bug. Example UA:\n // Mozilla/5.0 (MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)\n // like Gecko.\n // See http://www.whatismybrowser.com/developers/unknown-user-agent-fragments.\n const rv = /rv: *([\\d\\.]*)/.exec(userAgent);\n if (rv && rv[1]) {\n return rv[1];\n }\n\n let version = '';\n const msie = /MSIE +([\\d\\.]+)/.exec(userAgent);\n if (msie && msie[1]) {\n // IE in compatibility mode usually identifies itself as MSIE 7.0; in this\n // case, use the Trident version to determine the version of IE. For more\n // details, see the links above.\n const tridentVersion = /Trident\\/(\\d.\\d)/.exec(userAgent);\n if (msie[1] == '7.0') {\n if (tridentVersion && tridentVersion[1]) {\n switch (tridentVersion[1]) {\n case '4.0':\n version = '8.0';\n break;\n case '5.0':\n version = '9.0';\n break;\n case '6.0':\n version = '10.0';\n break;\n case '7.0':\n version = '11.0';\n break;\n }\n } else {\n version = '7.0';\n }\n } else {\n version = msie[1];\n }\n }\n return version;\n}\n\n/**\n * A helper function to return the navigator.userAgent-supplied full version\n * number of the current browser or an empty string, based on whether the\n * current browser is the one specified.\n * @param {string} browser The brand whose version should be returned.\n * @return {string}\n */\nfunction getFullVersionFromUserAgentString(browser) {\n const userAgentString = util.getUserAgent();\n // Special case IE since IE's version is inside the parenthesis and\n // without the '/'.\n if (browser === Brand.IE) {\n return isIE() ? getIEVersion(userAgentString) : '';\n }\n\n const versionTuples = util.extractVersionTuples(userAgentString);\n const lookUpValueWithKeys = createVersionMap(versionTuples);\n switch (browser) {\n case Brand.OPERA:\n // Opera 10 has Version/10.0 but Opera/9.8, so look for \"Version\"\n // first. Opera uses 'OPR' for more recent UAs.\n if (isOpera()) {\n return lookUpValueWithKeys(['Version', 'Opera']);\n } else if (isOperaChromium()) {\n return lookUpValueWithKeys(['OPR']);\n }\n break;\n case Brand.EDGE:\n if (isEdge()) {\n return lookUpValueWithKeys(['Edge']);\n } else if (isEdgeChromium()) {\n return lookUpValueWithKeys(['Edg']);\n }\n break;\n case Brand.CHROMIUM:\n if (isChrome()) {\n return lookUpValueWithKeys(['Chrome', 'CriOS', 'HeadlessChrome']);\n }\n break;\n }\n\n // For the following browsers, the browser version is in the third tuple after\n // \"Mozilla\" and the engine.\n if ((browser === Brand.FIREFOX && isFirefox()) ||\n (browser === Brand.SAFARI && isSafari()) ||\n (browser === Brand.ANDROID_BROWSER && isAndroidBrowser()) ||\n (browser === Brand.SILK && isSilk())) {\n const tuple = versionTuples[2];\n return tuple && tuple[1] || '';\n }\n\n return '';\n}\n\n/**\n * Returns the major version of the given browser brand, or NaN if the current\n * browser is not the given brand.\n * Note that the major version number may be different depending on which\n * browser is specified. The returned value can be used to make browser version\n * comparisons using comparison operators.\n * @private\n * @param {!Brand} browser The brand whose version should be returned.\n * @return {number} The major version number associated with the current\n * browser under the given brand, or NaN if the current browser doesn't match\n * the given brand.\n */\nfunction versionOf_(browser) {\n let versionParts;\n // Silk currently does not identify itself in its userAgentData.brands array,\n // so if checking its version, always fall back to the user agent string.\n if (useUserAgentDataBrand() && browser !== Brand.SILK) {\n const data = util.getUserAgentData();\n const matchingBrand = data.brands.find(({brand}) => brand === browser);\n if (!matchingBrand || !matchingBrand.version) {\n return NaN;\n }\n versionParts = matchingBrand.version.split('.');\n } else {\n const fullVersion = getFullVersionFromUserAgentString(browser);\n if (fullVersion === '') {\n return NaN;\n }\n versionParts = fullVersion.split('.');\n }\n if (versionParts.length === 0) {\n return NaN;\n }\n const majorVersion = versionParts[0];\n return Number(majorVersion); // Returns NaN if it is not parseable.\n}\n\n/**\n * Returns true if the current browser matches the given brand and is at least\n * the given major version. The major version must be a whole number (i.e.\n * decimals should not be used to represent a minor version).\n * @param {!Brand} brand The brand whose version should be returned.\n * @param {number} majorVersion The major version number to compare against.\n * This must be a whole number.\n * @return {boolean} Whether the current browser both matches the given brand\n * and is at least the given version.\n */\nfunction isAtLeast(brand, majorVersion) {\n assert(\n Math.floor(majorVersion) === majorVersion,\n 'Major version must be an integer');\n return versionOf_(brand) >= majorVersion;\n}\nexports.isAtLeast = isAtLeast;\n\n/**\n * Returns true if the current browser matches the given brand and is at most\n * the given version. The major version must be a whole number (i.e. decimals\n * should not be used to represent a minor version).\n * @param {!Brand} brand The brand whose version should be returned.\n * @param {number} majorVersion The major version number to compare against.\n * This must be a whole number.\n * @return {boolean} Whether the current browser both matches the given brand\n * and is at most the given version.\n */\nfunction isAtMost(brand, majorVersion) {\n assert(\n Math.floor(majorVersion) === majorVersion,\n 'Major version must be an integer');\n return versionOf_(brand) <= majorVersion;\n}\nexports.isAtMost = isAtMost;\n\n/**\n * Loads the high-entropy browser brand/version data and wraps the correct\n * version string in a Version object.\n * @implements {AsyncValue<!Version>}\n */\nclass HighEntropyBrandVersion {\n /**\n * @param {string} brand The brand whose version is retrieved in this\n * container.\n * @param {boolean} useUach Whether to attempt to use the User-Agent Client\n * Hints (UACH) API surface.\n * @param {string} fallbackVersion The fallback version derived from the\n * userAgent string.\n */\n constructor(brand, useUach, fallbackVersion) {\n /** @private @const {string} */\n this.brand_ = brand;\n\n /** @private @const {!Version} */\n this.version_ = new Version(fallbackVersion);\n\n /** @private @const {boolean} */\n this.useUach_ = useUach;\n }\n\n /**\n * @return {!Version|undefined}\n * @override\n */\n getIfLoaded() {\n if (this.useUach_) {\n const loadedVersionList = fullVersionList.getIfLoaded();\n if (loadedVersionList !== undefined) {\n const matchingBrand =\n loadedVersionList.find(({brand}) => this.brand_ === brand);\n // We assumed in fullVersionOf that if the fullVersionList is defined\n // the brands must match. Double-check this here.\n assertExists(matchingBrand);\n return new Version(matchingBrand.version);\n }\n // Fallthrough to fallback on Pre-UACH implementation\n }\n // We want to make sure the loading semantics of the Pre-UACH implementation\n // match those of the UACH implementation. Loading must happen before any\n // data can be retrieved from getIfLoaded.\n // For HighEntropyBrandVersion, loading can either be done by calling #load\n // or by calling the module-local loadFullVersions function.\n if (preUachHasLoaded) {\n return this.version_;\n }\n return;\n }\n\n /**\n * @return {!Promise<!Version>}\n * @override\n */\n async load() {\n if (this.useUach_) {\n const loadedVersionList = await fullVersionList.load();\n if (loadedVersionList !== undefined) {\n const matchingBrand =\n loadedVersionList.find(({brand}) => this.brand_ === brand);\n assertExists(matchingBrand);\n return new Version(matchingBrand.version);\n }\n // Fallthrough to fallback on Pre-UACH implementation\n } else {\n // Await something so that calling load with or without UACH API\n // availability results in waiting at least one macrotask before allowing\n // access to the cached version information.\n await 0;\n }\n // Regardless of whether we are using UACH APIs, we can now allow access to\n // the fallback case\n preUachHasLoaded = true;\n return this.version_;\n }\n}\n\n/**\n * Whether full version data should be considered available when using UACH\n * fallback implementations. This is flipped to true when either\n * loadFullVersions or HighEntropyBrandVersion.prototype.load are called,\n * matching the global singleton semantics of the UACH codepaths.\n */\nlet preUachHasLoaded = false;\n\n/**\n * Requests all full browser versions to be cached. When the returned promise\n * resolves, subsequent calls to `fullVersionOf(...).getIfLoaded()` will return\n * a value.\n *\n * This method should be avoided in favor of directly awaiting\n * `fullVersionOf(...).load()` where it is used.\n *\n * @return {!Promise<void>}\n */\nasync function loadFullVersions() {\n if (useUserAgentDataBrand(true)) {\n await fullVersionList.load();\n }\n preUachHasLoaded = true;\n}\nexports.loadFullVersions = loadFullVersions;\n\n/**\n * Resets module-local caches used by functionality in this module.\n * This is only for use by goog.labs.userAgent.testUtil.resetUserAgent (and\n * labs.userAgent tests).\n * @package\n */\nexports.resetForTesting = () => {\n preUachHasLoaded = false;\n fullVersionList.resetForTesting();\n};\n\n\n/**\n * Returns an object that provides access to the full version string of the\n * current browser -- or undefined, based on whether the current browser matches\n * the requested browser brand. Note that the full version string is a\n * high-entropy value, and must be asynchronously loaded before it can be\n * accessed synchronously.\n * @param {!Brand} browser The brand whose version should be returned.\n * @return {!AsyncValue<!Version>|undefined} An object that can be used\n * to get or load the full version string as a high-entropy value, or\n * undefined if the current browser doesn't match the given brand.\n */\nfunction fullVersionOf(browser) {\n let fallbackVersionString = '';\n // If we are reasonably certain now that the browser we are on has the\n // fullVersionList high-entropy hint, then we can skip computing the fallback\n // value as we won't end up using it.\n if (!hasFullVersionList()) {\n fallbackVersionString = getFullVersionFromUserAgentString(browser);\n }\n // Silk has the UACH API surface, but currently does not identify itself in\n // the userAgentData.brands array. Fallback to using userAgent string version\n // for Silk.\n const useUach = browser !== Brand.SILK && useUserAgentDataBrand(true);\n if (useUach) {\n const data = util.getUserAgentData();\n // Operate under the assumption that the low-entropy and high-entropy lists\n // of brand/version pairs contain an identical set of brands. Therefore, if\n // the low-entropy list doesn't contain the given brand, return undefined.\n if (!data.brands.find(({brand}) => brand === browser)) {\n return undefined;\n }\n } else if (fallbackVersionString === '') {\n return undefined;\n }\n return new HighEntropyBrandVersion(browser, useUach, fallbackVersionString);\n}\nexports.fullVersionOf = fullVersionOf;\n\n\n/**\n * Returns a version string for the current browser or undefined, based on\n * whether the current browser is the one specified.\n * This value should ONLY be used for logging/debugging purposes. Do not use it\n * to branch code paths. For comparing versions, use isAtLeast()/isAtMost() or\n * fullVersionOf() instead.\n * @param {!Brand} browser The brand whose version should be returned.\n * @return {string} The version as a string.\n */\nfunction getVersionStringForLogging(browser) {\n if (useUserAgentDataBrand(true)) {\n const fullVersionObj = fullVersionOf(browser);\n if (fullVersionObj) {\n const fullVersion = fullVersionObj.getIfLoaded();\n if (fullVersion) {\n return fullVersion.toVersionStringForLogging();\n }\n // No full version, return the major version instead.\n const data = util.getUserAgentData();\n const matchingBrand = data.brands.find(({brand}) => brand === browser);\n // Checking for the existence of matchingBrand is not necessary because\n // the existence of fullVersionObj implies that there is already a\n // matching brand.\n assertExists(matchingBrand);\n return matchingBrand.version;\n }\n // If fullVersionObj is undefined, this doesn't mean that the full version\n // is unavailable, but rather that the current browser doesn't match the\n // input `browser` argument.\n return '';\n } else {\n return getFullVersionFromUserAgentString(browser);\n }\n}\nexports.getVersionStringForLogging = getVersionStringForLogging;\n"],
|
|
8
|
+
"names":["useUserAgentDataBrand","ignoreClientHintsFlag","util","ASSUME_CLIENT_HINTS_SUPPORT","useClientHints","userAgentData","getUserAgentData","brands","length","hasFullVersionList","isAtLeast","Brand","CHROMIUM","matchOpera","matchUserAgent","matchIE","matchEdgeHtml","matchEdgeChromium","matchUserAgentDataBrand","EDGE","matchOperaChromium","OPERA","matchFirefox","matchSafari","matchChrome","matchCoast","isSilk","matchIosWebview","matchAndroidBrowser","isChrome","isFirefox","isOpera","createVersionMap","versionTuples","versionMap","forEach","tuple","key","value","keys","find","getVersion","userAgentString","getUserAgent","isIE","getIEVersion","extractVersionTuples","lookUpValueWithKeys","isEdge","isEdgeChromium","isVersionOrHigher","version","compareVersions","userAgent","rv","exec","msie","tridentVersion","getFullVersionFromUserAgentString","browser","IE","isOperaChromium","FIREFOX","SAFARI","isSafari","ANDROID_BROWSER","isAndroidBrowser","SILK","versionOf_","versionParts","data","matchingBrand","brand","NaN","split","fullVersion","majorVersion","Number","assert","Math","floor","isAtMost","loadFullVersions","fullVersionList","load","preUachHasLoaded","fullVersionOf","fallbackVersionString","useUach","undefined","HighEntropyBrandVersion","getVersionStringForLogging","fullVersionObj","getIfLoaded","toVersionStringForLogging","assertExists","goog","module","declareLegacyNamespace","require","AsyncValue","Version","exports","isCoast","isIosWebview","constructor","fallbackVersion","brand_","version_","useUach_","loadedVersionList","resetForTesting","exports.resetForTesting"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import "./cljs_env.js";
|
|
2
|
+
import "./goog.array.array.js";
|
|
3
|
+
import "./goog.string.internal.js";
|
|
4
|
+
import "./goog.labs.useragent.util.js";
|
|
5
|
+
goog.loadModule(function(exports) {
|
|
6
|
+
function isPresto() {
|
|
7
|
+
return util.matchUserAgent("Presto");
|
|
8
|
+
}
|
|
9
|
+
function isTrident() {
|
|
10
|
+
return util.matchUserAgent("Trident") || util.matchUserAgent("MSIE");
|
|
11
|
+
}
|
|
12
|
+
function isEdge() {
|
|
13
|
+
return util.matchUserAgent("Edge");
|
|
14
|
+
}
|
|
15
|
+
function isWebKit() {
|
|
16
|
+
return util.matchUserAgentIgnoreCase("WebKit") && !isEdge();
|
|
17
|
+
}
|
|
18
|
+
function isGecko() {
|
|
19
|
+
return util.matchUserAgent("Gecko") && !isWebKit() && !isTrident() && !isEdge();
|
|
20
|
+
}
|
|
21
|
+
function getVersion() {
|
|
22
|
+
const userAgentString = util.getUserAgent();
|
|
23
|
+
if (userAgentString) {
|
|
24
|
+
const tuples = util.extractVersionTuples(userAgentString);
|
|
25
|
+
const engineTuple = getEngineTuple(tuples);
|
|
26
|
+
if (engineTuple) {
|
|
27
|
+
if (engineTuple[0] == "Gecko") {
|
|
28
|
+
return getVersionForKey(tuples, "Firefox");
|
|
29
|
+
}
|
|
30
|
+
return engineTuple[1];
|
|
31
|
+
}
|
|
32
|
+
const browserTuple = tuples[0];
|
|
33
|
+
let info;
|
|
34
|
+
if (browserTuple && (info = browserTuple[2])) {
|
|
35
|
+
const match = /Trident\/([^\s;]+)/.exec(info);
|
|
36
|
+
if (match) {
|
|
37
|
+
return match[1];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
function getEngineTuple(tuples) {
|
|
44
|
+
if (!isEdge()) {
|
|
45
|
+
return tuples[1];
|
|
46
|
+
}
|
|
47
|
+
for (let i = 0; i < tuples.length; i++) {
|
|
48
|
+
const tuple = tuples[i];
|
|
49
|
+
if (tuple[0] == "Edge") {
|
|
50
|
+
return tuple;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function isVersionOrHigher(version) {
|
|
55
|
+
return googString.compareVersions(getVersion(), version) >= 0;
|
|
56
|
+
}
|
|
57
|
+
function getVersionForKey(tuples, key) {
|
|
58
|
+
const pair = googArray.find(tuples, function(pair) {
|
|
59
|
+
return key == pair[0];
|
|
60
|
+
});
|
|
61
|
+
return pair && pair[1] || "";
|
|
62
|
+
}
|
|
63
|
+
"use strict";
|
|
64
|
+
goog.module("goog.labs.userAgent.engine");
|
|
65
|
+
goog.module.declareLegacyNamespace();
|
|
66
|
+
const googArray = goog.require("goog.array");
|
|
67
|
+
const googString = goog.require("goog.string.internal");
|
|
68
|
+
const util = goog.require("goog.labs.userAgent.util");
|
|
69
|
+
exports = {getVersion, isEdge, isGecko, isPresto, isTrident, isVersionOrHigher, isWebKit};
|
|
70
|
+
return exports;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=goog.labs.useragent.engine.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.labs.useragent.engine.js",
|
|
4
|
+
"lineCount":68,
|
|
5
|
+
"mappings":"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",
|
|
6
|
+
"sources":["goog/labs/useragent/engine.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Closure user agent detection.\n * @see http://en.wikipedia.org/wiki/User_agent\n * For more information on browser brand, platform, or device see the other\n * sub-namespaces in goog.labs.userAgent (browser, platform, and device).\n */\n\ngoog.module('goog.labs.userAgent.engine');\ngoog.module.declareLegacyNamespace();\n\nconst googArray = goog.require('goog.array');\nconst googString = goog.require('goog.string.internal');\nconst util = goog.require('goog.labs.userAgent.util');\n\n/**\n * @return {boolean} Whether the rendering engine is Presto.\n */\nfunction isPresto() {\n return util.matchUserAgent('Presto');\n}\n\n/**\n * @return {boolean} Whether the rendering engine is Trident.\n */\nfunction isTrident() {\n // IE only started including the Trident token in IE8.\n return util.matchUserAgent('Trident') || util.matchUserAgent('MSIE');\n}\n\n/**\n * @return {boolean} Whether the rendering engine is EdgeHTML.\n */\nfunction isEdge() {\n return util.matchUserAgent('Edge');\n}\n\n/**\n * @return {boolean} Whether the rendering engine is WebKit. This will return\n * true for Chrome, Blink-based Opera (15+), Edge Chromium and Safari.\n */\nfunction isWebKit() {\n return util.matchUserAgentIgnoreCase('WebKit') && !isEdge();\n}\n\n/**\n * @return {boolean} Whether the rendering engine is Gecko.\n */\nfunction isGecko() {\n return util.matchUserAgent('Gecko') && !isWebKit() && !isTrident() &&\n !isEdge();\n}\n\n/**\n * @return {string} The rendering engine's version or empty string if version\n * can't be determined.\n */\nfunction getVersion() {\n const userAgentString = util.getUserAgent();\n if (userAgentString) {\n const tuples = util.extractVersionTuples(userAgentString);\n\n const engineTuple = getEngineTuple(tuples);\n if (engineTuple) {\n // In Gecko, the version string is either in the browser info or the\n // Firefox version. See Gecko user agent string reference:\n // http://goo.gl/mULqa\n if (engineTuple[0] == 'Gecko') {\n return getVersionForKey(tuples, 'Firefox');\n }\n\n return engineTuple[1];\n }\n\n // MSIE has only one version identifier, and the Trident version is\n // specified in the parenthetical. IE Edge is covered in the engine tuple\n // detection.\n const browserTuple = tuples[0];\n let info;\n if (browserTuple && (info = browserTuple[2])) {\n const match = /Trident\\/([^\\s;]+)/.exec(info);\n if (match) {\n return match[1];\n }\n }\n }\n return '';\n}\n\n/**\n * @param {!Array<!Array<string>>} tuples Extracted version tuples.\n * @return {!Array<string>|undefined} The engine tuple or undefined if not\n * found.\n */\nfunction getEngineTuple(tuples) {\n if (!isEdge()) {\n return tuples[1];\n }\n for (let i = 0; i < tuples.length; i++) {\n const tuple = tuples[i];\n if (tuple[0] == 'Edge') {\n return tuple;\n }\n }\n}\n\n/**\n * @param {string|number} version The version to check.\n * @return {boolean} Whether the rendering engine version is higher or the same\n * as the given version.\n */\nfunction isVersionOrHigher(version) {\n return googString.compareVersions(getVersion(), version) >= 0;\n}\n\n/**\n * @param {!Array<!Array<string>>} tuples Version tuples.\n * @param {string} key The key to look for.\n * @return {string} The version string of the given key, if present.\n * Otherwise, the empty string.\n */\nfunction getVersionForKey(tuples, key) {\n // TODO(nnaze): Move to util if useful elsewhere.\n\n const pair = googArray.find(tuples, function(pair) {\n return key == pair[0];\n });\n\n return pair && pair[1] || '';\n}\n\nexports = {\n getVersion,\n isEdge,\n isGecko,\n isPresto,\n isTrident,\n isVersionOrHigher,\n isWebKit,\n};\n"],
|
|
8
|
+
"names":["isPresto","util","matchUserAgent","isTrident","isEdge","isWebKit","matchUserAgentIgnoreCase","isGecko","getVersion","userAgentString","getUserAgent","tuples","extractVersionTuples","engineTuple","getEngineTuple","getVersionForKey","browserTuple","info","match","exec","i","length","tuple","isVersionOrHigher","version","googString","compareVersions","key","pair","googArray","find","goog","module","declareLegacyNamespace","require","exports"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "./cljs_env.js";
|
|
2
|
+
import "./goog.labs.useragent.highentropy.highentropyvalue.js";
|
|
3
|
+
goog.loadModule(function(exports) {
|
|
4
|
+
"use strict";
|
|
5
|
+
goog.module("goog.labs.userAgent.highEntropy.highEntropyData");
|
|
6
|
+
const {HighEntropyValue} = goog.require("goog.labs.userAgent.highEntropy.highEntropyValue");
|
|
7
|
+
const fullVersionList = new HighEntropyValue("fullVersionList");
|
|
8
|
+
exports.fullVersionList = fullVersionList;
|
|
9
|
+
const platformVersion = new HighEntropyValue("platformVersion");
|
|
10
|
+
exports.platformVersion = platformVersion;
|
|
11
|
+
return exports;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=goog.labs.useragent.highentropy.highentropydata.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.labs.useragent.highentropy.highentropydata.js",
|
|
4
|
+
"lineCount":11,
|
|
5
|
+
"mappings":"AAAA,IAAA,CAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA;AAAA,cAAA;AAUAA,MAAKC,CAAAA,MAAL,CAAY,iDAAZ,CAAA;AAEA,QAAM,CAACC,gBAAD,CAAA,GAAqBF,IAAKG,CAAAA,OAAL,CAAa,kDAAb,CAA3B;AAKA,QAAMC,kBAAkB,IAAIF,gBAAJ,CAAqB,iBAArB,CAAxB;AACAG,SAAQD,CAAAA,eAAR,GAA0BA,eAA1B;AAKA,QAAME,kBAAkB,IAAIJ,gBAAJ,CAAqB,iBAArB,CAAxB;AACAG,SAAQC,CAAAA,eAAR,GAA0BA,eAA1B;AAxBA,SAAA,OAAA;AAAA,CAAA,CAAA;;",
|
|
6
|
+
"sources":["goog/labs/useragent/highentropy/highentropydata.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Provides access to high-entropy user agent values.\n */\n\ngoog.module('goog.labs.userAgent.highEntropy.highEntropyData');\n\nconst {HighEntropyValue} = goog.require('goog.labs.userAgent.highEntropy.highEntropyValue');\n\n/**\n * @type {!HighEntropyValue<!Array<!NavigatorUABrandVersion>|undefined>}\n */\nconst fullVersionList = new HighEntropyValue('fullVersionList');\nexports.fullVersionList = fullVersionList;\n\n/**\n * @type {!HighEntropyValue<string>}\n */\nconst platformVersion = new HighEntropyValue('platformVersion');\nexports.platformVersion = platformVersion;"],
|
|
8
|
+
"names":["goog","module","HighEntropyValue","require","fullVersionList","exports","platformVersion"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import "./cljs_env.js";
|
|
2
|
+
import "./goog.labs.useragent.util.js";
|
|
3
|
+
import "./goog.string.internal.js";
|
|
4
|
+
goog.loadModule(function(exports) {
|
|
5
|
+
"use strict";
|
|
6
|
+
goog.module("goog.labs.userAgent.highEntropy.highEntropyValue");
|
|
7
|
+
const util = goog.require("goog.labs.userAgent.util");
|
|
8
|
+
const {compareVersions} = goog.require("goog.string.internal");
|
|
9
|
+
class AsyncValue {
|
|
10
|
+
getIfLoaded() {
|
|
11
|
+
}
|
|
12
|
+
load() {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.AsyncValue = AsyncValue;
|
|
16
|
+
class HighEntropyValue {
|
|
17
|
+
constructor(key) {
|
|
18
|
+
this.key_ = key;
|
|
19
|
+
this.value_ = undefined;
|
|
20
|
+
this.promise_ = undefined;
|
|
21
|
+
this.pending_ = false;
|
|
22
|
+
}
|
|
23
|
+
getIfLoaded() {
|
|
24
|
+
const userAgentData = util.getUserAgentData();
|
|
25
|
+
if (!userAgentData) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
return this.value_;
|
|
29
|
+
}
|
|
30
|
+
async load() {
|
|
31
|
+
const userAgentData = util.getUserAgentData();
|
|
32
|
+
if (!userAgentData) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
if (!this.promise_) {
|
|
36
|
+
this.pending_ = true;
|
|
37
|
+
this.promise_ = (async() => {
|
|
38
|
+
try {
|
|
39
|
+
const dataValues = await userAgentData.getHighEntropyValues([this.key_]);
|
|
40
|
+
this.value_ = dataValues[this.key_];
|
|
41
|
+
return this.value_;
|
|
42
|
+
} finally {
|
|
43
|
+
this.pending_ = false;
|
|
44
|
+
}
|
|
45
|
+
})();
|
|
46
|
+
}
|
|
47
|
+
return await this.promise_;
|
|
48
|
+
}
|
|
49
|
+
resetForTesting() {
|
|
50
|
+
if (this.pending_) {
|
|
51
|
+
throw new Error("Unsafe call to resetForTesting");
|
|
52
|
+
}
|
|
53
|
+
this.promise_ = undefined;
|
|
54
|
+
this.value_ = undefined;
|
|
55
|
+
this.pending_ = false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.HighEntropyValue = HighEntropyValue;
|
|
59
|
+
class Version {
|
|
60
|
+
constructor(versionString) {
|
|
61
|
+
this.versionString_ = versionString;
|
|
62
|
+
}
|
|
63
|
+
toVersionStringForLogging() {
|
|
64
|
+
return this.versionString_;
|
|
65
|
+
}
|
|
66
|
+
isAtLeast(version) {
|
|
67
|
+
return compareVersions(this.versionString_, version) >= 0;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.Version = Version;
|
|
71
|
+
return exports;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=goog.labs.useragent.highentropy.highentropyvalue.js.map
|