UNPKG

ngx-device-info

Version:

Angular library which provides device information / type / name and also it provides much more device independent features & informations.

296 lines (290 loc) 12.2 kB
import * as i0 from '@angular/core'; import { Injectable, Component } from '@angular/core'; class NgxDeviceInfoService { constructor() { this.permissionsNames = [ 'geolocation', 'notifications', 'push', 'midi', 'camera', 'microphone', 'speaker', 'device-info', 'background-fetch', 'background-sync', 'bluetooth', 'persistent-storage', 'ambient-light-sensor', 'accelerometer', 'gyroscope', 'magnetometer', 'clipboard', 'display-capture', 'nfc', ]; this.getAllPermissions = async () => { const allPermissions = []; // We use Promise.all to wait until all the permission queries are resolved await Promise.all(this.permissionsNames.map(async (permissionName) => { try { let permission; switch (permissionName) { case 'push': // Not necessary but right now Chrome only supports push messages with notifications permission = await navigator.permissions.query({ name: permissionName, }); break; default: permission = await navigator.permissions.query({ name: permissionName, }); } allPermissions.push({ permissionName, state: permission.state }); } catch (e) { allPermissions.push({ permissionName, state: 'error', errorMessage: e.toString(), }); } })); return allPermissions; }; } async getDeviceInfo() { let deviceName = ''; var isMobile = { Android: function () { return navigator.userAgent.match(/Android/i); }, Datalogic: function () { return navigator.userAgent.match(/DL-AXIS/i); }, Bluebird: function () { return navigator.userAgent.match(/EF500/i); }, Honeywell: function () { return navigator.userAgent.match(/CT50/i); }, Zebra: function () { return navigator.userAgent.match(/TC70|TC55/i); }, BlackBerry: function () { return navigator.userAgent.match(/BlackBerry/i); }, iOS: function () { return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, Windows: function () { return navigator.userAgent.match(/IEMobile/i); }, any: function () { return (isMobile.Datalogic() || isMobile.Bluebird() || isMobile.Honeywell() || isMobile.Zebra() || isMobile.BlackBerry() || isMobile.Android() || isMobile.iOS() || isMobile.Windows()); }, }; if (isMobile.Datalogic()) deviceName = 'Datalogic'; else if (isMobile.Bluebird()) deviceName = 'Bluebird'; else if (isMobile.Honeywell()) deviceName = 'Honeywell'; else if (isMobile.Zebra()) deviceName = 'Zebra'; else if (isMobile.BlackBerry()) deviceName = 'BlackBerry'; else if (isMobile.iOS()) deviceName = 'iOS'; else if (deviceName == '' && isMobile.Android()) deviceName = 'Android'; else if (deviceName == '' && isMobile.Windows()) deviceName = 'Windows'; // if (deviceName) { // console.log('Devices information deviceName = ' + deviceName); // console.log('Devices information any = ' + isMobile.any()); // console.log('navigator.userAgent = ' + navigator.userAgent); // } let deviceData = { deviceName: deviceName, orientation: this.getOrientation(), deviceType: this.getDeviceType(), userAgent: navigator.userAgent, isMobile: this.isMobile(), isDesktop: this.isDesktop(), isTablet: this.isTablet(), language: window.navigator.language, isOnline: window.navigator.onLine, cookieEnabled: window.navigator.cookieEnabled, vendor: window.navigator.vendor, clientHeight: document.body.clientHeight, clientWidth: document.body.clientWidth, height: screen.height, width: screen.width, availHeight: screen.availHeight, availWidth: screen.availWidth, innerHeight: window.innerHeight, innerWidth: window.innerWidth, outerHeight: window.outerHeight, outerWidth: window.outerWidth, href: window.location.href, protocal: window.location.protocol, host: window.location.host, hostname: window.location.hostname, port: window.location.port, pathname: window.location.pathname, search: window.location.search, hash: window.location.hash, origin: window.location.origin, timeZoneOffSet: new Date().getTimezoneOffset(), utcString: new Date().toUTCString(), time: new Date().getTime(), date: new Date().getDate(), day: new Date().getDay(), month: new Date().getMonth(), hour: new Date().getHours(), year: new Date().getFullYear(), seconds: new Date().getSeconds, milliseconds: new Date().getMilliseconds(), utcdate: new Date().getUTCDate(), utcday: new Date().getUTCDay(), utcmonth: new Date().getUTCMonth(), utcyear: new Date().getUTCFullYear(), }; await this.getAllPermissions().then((data) => { data.forEach((element) => { deviceData[element['permissionName']] = element['state']; }); }); return deviceData; } getDeviceName() { var sBrowser, sUsrAg = navigator.userAgent; // The order matters here, and this may report false positives for unlisted browsers. if (sUsrAg.indexOf('Firefox') > -1) { sBrowser = 'Mozilla Firefox'; // "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" } else if (sUsrAg.indexOf('SamsungBrowser') > -1) { sBrowser = 'Samsung Internet'; // "Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G955F Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36 } else if (sUsrAg.indexOf('Opera') > -1 || sUsrAg.indexOf('OPR') > -1) { sBrowser = 'Opera'; // "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106" } else if (sUsrAg.indexOf('Trident') > -1) { sBrowser = 'Microsoft Internet Explorer'; // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko" } else if (sUsrAg.indexOf('Edge') > -1) { sBrowser = 'Microsoft Edge (Legacy)'; // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299" } else if (sUsrAg.indexOf('Edg') > -1) { sBrowser = 'Microsoft Edge (Chromium)'; // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64 } else if (sUsrAg.indexOf('Chrome') > -1) { sBrowser = 'Google Chrome or Chromium'; // "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36" } else if (sUsrAg.indexOf('Safari') > -1) { sBrowser = 'Apple Safari'; // "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306" } else { sBrowser = 'unknown'; } return sBrowser; } getDeviceType() { const ua = navigator.userAgent; if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) { return 'tablet'; } if (/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) { return 'mobile'; } return 'desktop'; } isMobile() { const ua = navigator.userAgent; if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) { return false; } if (/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) { return true; } return false; } isTablet() { const ua = navigator.userAgent; if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) { return true; } if (/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) { return false; } return false; } isDesktop() { const ua = navigator.userAgent; if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) { return false; } if (/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) { return false; } return true; } getOrientation() { if (window.matchMedia('(orientation: portrait)').matches) { return 'portrait'; } if (window.matchMedia('(orientation: landscape)').matches) { return 'landscape'; } return ""; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NgxDeviceInfoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NgxDeviceInfoService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NgxDeviceInfoService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [] }); class NgxDeviceInfoComponent { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NgxDeviceInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: NgxDeviceInfoComponent, isStandalone: true, selector: "lib-ngx-device-info", ngImport: i0, template: ` <p> ngx-device-info works! </p> `, isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NgxDeviceInfoComponent, decorators: [{ type: Component, args: [{ selector: 'lib-ngx-device-info', template: ` <p> ngx-device-info works! </p> `, standalone: true }] }] }); /* * Public API Surface of ngx-device-info */ /** * Generated bundle index. Do not edit. */ export { NgxDeviceInfoComponent, NgxDeviceInfoService }; //# sourceMappingURL=ngx-device-info.mjs.map