@ionic/core
Version:
Base components for Ionic
93 lines (92 loc) • 2.74 kB
JavaScript
export const PLATFORMS_MAP = {
'ipad': isIpad,
'iphone': isIphone,
'ios': isIOS,
'android': isAndroid,
'phablet': isPhablet,
'tablet': isTablet,
'cordova': isCordova,
'capacitor': isCapacitorNative,
'electron': isElectron,
'pwa': isPWA,
'mobile': isMobile,
'desktop': isDesktop,
'hybrid': isHybrid
};
export function getPlatforms(win) {
return setupPlatforms(win);
}
export function isPlatform(win, platform) {
return getPlatforms(win).includes(platform);
}
export function setupPlatforms(win) {
win.Ionic = win.Ionic || {};
let platforms = win.Ionic.platforms;
if (platforms == null) {
platforms = win.Ionic.platforms = detectPlatforms(win);
const classList = win.document.documentElement.classList;
platforms.forEach(p => classList.add(`plt-${p}`));
}
return platforms;
}
function detectPlatforms(win) {
return Object.keys(PLATFORMS_MAP).filter(p => PLATFORMS_MAP[p](win));
}
function isIpad(win) {
return testUserAgent(win, /iPad/i);
}
function isIphone(win) {
return testUserAgent(win, /iPhone/i);
}
function isIOS(win) {
return testUserAgent(win, /iPad|iPhone|iPod/i);
}
function isAndroid(win) {
return testUserAgent(win, /android|sink/i);
}
function isPhablet(win) {
const width = win.innerWidth;
const height = win.innerHeight;
const smallest = Math.min(width, height);
const largest = Math.max(width, height);
return (smallest > 390 && smallest < 520) &&
(largest > 620 && largest < 800);
}
function isTablet(win) {
const width = win.innerWidth;
const height = win.innerHeight;
const smallest = Math.min(width, height);
const largest = Math.max(width, height);
return (smallest > 460 && smallest < 820) &&
(largest > 780 && largest < 1400);
}
function isMobile(win) {
return matchMedia(win, '(any-pointer:coarse)');
}
function isDesktop(win) {
return !isMobile(win);
}
function isHybrid(win) {
return isCordova(win) || isCapacitorNative(win);
}
function isCordova(window) {
const win = window;
return !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
}
function isCapacitorNative(window) {
const win = window;
const capacitor = win['Capacitor'];
return !!(capacitor && capacitor.isNative);
}
function isElectron(win) {
return testUserAgent(win, /electron/);
}
function isPWA(win) {
return win.matchMedia('(display-mode: standalone)').matches;
}
function testUserAgent(win, expr) {
return expr.test(win.navigator.userAgent);
}
function matchMedia(win, query) {
return win.matchMedia(query).matches;
}