UNPKG

@ionic/core

Version:
93 lines (92 loc) 2.74 kB
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; }