141 lines
4.5 KiB
JavaScript
141 lines
4.5 KiB
JavaScript
goog.loadModule(function(exports) {
|
|
"use strict";
|
|
goog.module("goog.labs.userAgent.platform");
|
|
goog.module.declareLegacyNamespace();
|
|
const googString = goog.require("goog.string.internal");
|
|
const util = goog.require("goog.labs.userAgent.util");
|
|
const {AsyncValue, Version} = goog.require("goog.labs.userAgent.highEntropy.highEntropyValue");
|
|
const {platformVersion} = goog.require("goog.labs.userAgent.highEntropy.highEntropyData");
|
|
const {useClientHints} = goog.require("goog.labs.userAgent");
|
|
function useUserAgentDataPlatform(ignoreClientHintsFlag = false) {
|
|
if (util.ASSUME_CLIENT_HINTS_SUPPORT) {
|
|
return true;
|
|
}
|
|
if (!ignoreClientHintsFlag && !useClientHints()) {
|
|
return false;
|
|
}
|
|
const userAgentData = util.getUserAgentData();
|
|
return !!userAgentData && !!userAgentData.platform;
|
|
}
|
|
function isAndroid() {
|
|
if (useUserAgentDataPlatform()) {
|
|
return util.getUserAgentData().platform === "Android";
|
|
}
|
|
return util.matchUserAgent("Android");
|
|
}
|
|
function isIpod() {
|
|
return util.matchUserAgent("iPod");
|
|
}
|
|
function isIphone() {
|
|
return util.matchUserAgent("iPhone") && !util.matchUserAgent("iPod") && !util.matchUserAgent("iPad");
|
|
}
|
|
function isIpad() {
|
|
return util.matchUserAgent("iPad");
|
|
}
|
|
function isIos() {
|
|
return isIphone() || isIpad() || isIpod();
|
|
}
|
|
function isMacintosh() {
|
|
if (useUserAgentDataPlatform()) {
|
|
return util.getUserAgentData().platform === "macOS";
|
|
}
|
|
return util.matchUserAgent("Macintosh");
|
|
}
|
|
function isLinux() {
|
|
if (useUserAgentDataPlatform()) {
|
|
return util.getUserAgentData().platform === "Linux";
|
|
}
|
|
return util.matchUserAgent("Linux");
|
|
}
|
|
function isWindows() {
|
|
if (useUserAgentDataPlatform()) {
|
|
return util.getUserAgentData().platform === "Windows";
|
|
}
|
|
return util.matchUserAgent("Windows");
|
|
}
|
|
function isChromeOS() {
|
|
if (useUserAgentDataPlatform()) {
|
|
return util.getUserAgentData().platform === "Chrome OS";
|
|
}
|
|
return util.matchUserAgent("CrOS");
|
|
}
|
|
function isChromecast() {
|
|
return util.matchUserAgent("CrKey");
|
|
}
|
|
function isKaiOS() {
|
|
return util.matchUserAgentIgnoreCase("KaiOS");
|
|
}
|
|
function getVersion() {
|
|
const userAgentString = util.getUserAgent();
|
|
let version = "", re;
|
|
if (isWindows()) {
|
|
re = /Windows (?:NT|Phone) ([0-9.]+)/;
|
|
const match = re.exec(userAgentString);
|
|
if (match) {
|
|
version = match[1];
|
|
} else {
|
|
version = "0.0";
|
|
}
|
|
} else if (isIos()) {
|
|
re = /(?:iPhone|iPod|iPad|CPU)\s+OS\s+(\S+)/;
|
|
const match = re.exec(userAgentString);
|
|
version = match && match[1].replace(/_/g, ".");
|
|
} else if (isMacintosh()) {
|
|
re = /Mac OS X ([0-9_.]+)/;
|
|
const match = re.exec(userAgentString);
|
|
version = match ? match[1].replace(/_/g, ".") : "10";
|
|
} else if (isKaiOS()) {
|
|
re = /(?:KaiOS)\/(\S+)/i;
|
|
const match = re.exec(userAgentString);
|
|
version = match && match[1];
|
|
} else if (isAndroid()) {
|
|
re = /Android\s+([^\);]+)(\)|;)/;
|
|
const match = re.exec(userAgentString);
|
|
version = match && match[1];
|
|
} else if (isChromeOS()) {
|
|
re = /(?:CrOS\s+(?:i686|x86_64)\s+([0-9.]+))/;
|
|
const match = re.exec(userAgentString);
|
|
version = match && match[1];
|
|
}
|
|
return version || "";
|
|
}
|
|
function isVersionOrHigher(version) {
|
|
return googString.compareVersions(getVersion(), version) >= 0;
|
|
}
|
|
class PlatformVersion {
|
|
constructor() {
|
|
this.preUachHasLoaded_ = false;
|
|
}
|
|
getIfLoaded() {
|
|
if (useUserAgentDataPlatform(true)) {
|
|
const loadedPlatformVersion = platformVersion.getIfLoaded();
|
|
if (loadedPlatformVersion === undefined) {
|
|
return undefined;
|
|
}
|
|
return new Version(loadedPlatformVersion);
|
|
} else if (!this.preUachHasLoaded_) {
|
|
return undefined;
|
|
} else {
|
|
return new Version(getVersion());
|
|
}
|
|
}
|
|
async load() {
|
|
if (useUserAgentDataPlatform(true)) {
|
|
return new Version(await platformVersion.load());
|
|
} else {
|
|
this.preUachHasLoaded_ = true;
|
|
return new Version(getVersion());
|
|
}
|
|
}
|
|
resetForTesting() {
|
|
platformVersion.resetForTesting();
|
|
this.preUachHasLoaded_ = false;
|
|
}
|
|
}
|
|
const version = new PlatformVersion();
|
|
exports = {getVersion, isAndroid, isChromeOS, isChromecast, isIos, isIpad, isIphone, isIpod, isKaiOS, isLinux, isMacintosh, isVersionOrHigher, isWindows, version,};
|
|
return exports;
|
|
});
|
|
|
|
//# sourceMappingURL=goog.labs.useragent.platform.js.map
|