@ionic/core
Version:
Base components for Ionic
4 lines • 5.26 kB
JavaScript
/*!
* (C) Ionic http://ionicframework.com - MIT License
*/
import{g as getMode,a as setMode}from"./index-527b9e34.js";var Config=function(){function i(){this.m=new Map}i.prototype.reset=function(i){this.m=new Map(Object.entries(i))};i.prototype.get=function(i,n){var t=this.m.get(i);return t!==undefined?t:n};i.prototype.getBoolean=function(i,n){if(n===void 0){n=false}var t=this.m.get(i);if(t===undefined){return n}if(typeof t==="string"){return t==="true"}return!!t};i.prototype.getNumber=function(i,n){var t=parseFloat(this.m.get(i));return isNaN(t)?n!==undefined?n:NaN:t};i.prototype.set=function(i,n){this.m.set(i,n)};return i}();var config=new Config;var configFromSession=function(i){try{var n=i.sessionStorage.getItem(IONIC_SESSION_KEY);return n!==null?JSON.parse(n):{}}catch(i){return{}}};var saveConfig=function(i,n){try{i.sessionStorage.setItem(IONIC_SESSION_KEY,JSON.stringify(n))}catch(i){return}};var configFromURL=function(i){var n={};i.location.search.slice(1).split("&").map((function(i){return i.split("=")})).map((function(i){var n=i[0],t=i[1];try{return[decodeURIComponent(n),decodeURIComponent(t)]}catch(i){return["",""]}})).filter((function(i){var n=i[0];return startsWith(n,IONIC_PREFIX)})).map((function(i){var n=i[0],t=i[1];return[n.slice(IONIC_PREFIX.length),t]})).forEach((function(i){var t=i[0],r=i[1];n[t]=r}));return n};var startsWith=function(i,n){return i.substr(0,n.length)===n};var IONIC_PREFIX="ionic:";var IONIC_SESSION_KEY="ionic-persist-config";var getPlatforms=function(i){return setupPlatforms(i)};var isPlatform=function(i,n){if(typeof i==="string"){n=i;i=undefined}return getPlatforms(i).includes(n)};var setupPlatforms=function(i){if(i===void 0){i=window}if(typeof i==="undefined"){return[]}i.Ionic=i.Ionic||{};var n=i.Ionic.platforms;if(n==null){n=i.Ionic.platforms=detectPlatforms(i);n.forEach((function(n){return i.document.documentElement.classList.add("plt-".concat(n))}))}return n};var detectPlatforms=function(i){var n=config.get("platform");return Object.keys(PLATFORMS_MAP).filter((function(t){var r=n===null||n===void 0?void 0:n[t];return typeof r==="function"?r(i):PLATFORMS_MAP[t](i)}))};var isMobileWeb=function(i){return isMobile(i)&&!isHybrid(i)};var isIpad=function(i){if(testUserAgent(i,/iPad/i)){return true}if(testUserAgent(i,/Macintosh/i)&&isMobile(i)){return true}return false};var isIphone=function(i){return testUserAgent(i,/iPhone/i)};var isIOS=function(i){return testUserAgent(i,/iPhone|iPod/i)||isIpad(i)};var isAndroid=function(i){return testUserAgent(i,/android|sink/i)};var isAndroidTablet=function(i){return isAndroid(i)&&!testUserAgent(i,/mobile/i)};var isPhablet=function(i){var n=i.innerWidth;var t=i.innerHeight;var r=Math.min(n,t);var e=Math.max(n,t);return r>390&&r<520&&e>620&&e<800};var isTablet=function(i){var n=i.innerWidth;var t=i.innerHeight;var r=Math.min(n,t);var e=Math.max(n,t);return isIpad(i)||isAndroidTablet(i)||r>460&&r<820&&e>780&&e<1400};var isMobile=function(i){return matchMedia(i,"(any-pointer:coarse)")};var isDesktop=function(i){return!isMobile(i)};var isHybrid=function(i){return isCordova(i)||isCapacitorNative(i)};var isCordova=function(i){return!!(i["cordova"]||i["phonegap"]||i["PhoneGap"])};var isCapacitorNative=function(i){var n=i["Capacitor"];return!!((n===null||n===void 0?void 0:n.isNative)||(n===null||n===void 0?void 0:n.isNativePlatform)&&!!n.isNativePlatform())};var isElectron=function(i){return testUserAgent(i,/electron/i)};var isPWA=function(i){var n;return!!(((n=i.matchMedia)===null||n===void 0?void 0:n.call(i,"(display-mode: standalone)").matches)||i.navigator.standalone)};var testUserAgent=function(i,n){return n.test(i.navigator.userAgent)};var matchMedia=function(i,n){var t;return(t=i.matchMedia)===null||t===void 0?void 0:t.call(i,n).matches};var PLATFORMS_MAP={ipad:isIpad,iphone:isIphone,ios:isIOS,android:isAndroid,phablet:isPhablet,tablet:isTablet,cordova:isCordova,capacitor:isCapacitorNative,electron:isElectron,pwa:isPWA,mobile:isMobile,mobileweb:isMobileWeb,desktop:isDesktop,hybrid:isHybrid};var defaultMode;var getIonMode=function(i){return i&&getMode(i)||defaultMode};var initialize=function(i){if(i===void 0){i={}}if(typeof window==="undefined"){return}var n=window.document;var t=window;var r=t.Ionic=t.Ionic||{};var e=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},configFromSession(t)),{persistConfig:false}),r.config),configFromURL(t)),i);config.reset(e);if(config.getBoolean("persistConfig")){saveConfig(t,e)}setupPlatforms(t);r.config=config;r.mode=defaultMode=config.get("mode",n.documentElement.getAttribute("mode")||(isPlatform(t,"ios")?"ios":"md"));config.set("mode",defaultMode);n.documentElement.setAttribute("mode",defaultMode);n.documentElement.classList.add(defaultMode);if(config.getBoolean("_testing")){config.set("animated",false)}var o=function(i){var n;return(n=i.tagName)===null||n===void 0?void 0:n.startsWith("ION-")};var a=function(i){return["ios","md"].includes(i)};setMode((function(i){while(i){var n=i.mode||i.getAttribute("mode");if(n){if(a(n)){return n}else if(o(i)){console.warn('Invalid ionic mode: "'+n+'", expected: "ios" or "md"')}}i=i.parentElement}return defaultMode}))};export{isPlatform as a,getIonMode as b,config as c,getPlatforms as g,initialize as i};