UNPKG

@syncfusion/ej2-base

Version:

A common package of Essential JS 2 base libraries, methods and class definitions

387 lines (386 loc) 13.5 kB
/* eslint-disable @typescript-eslint/no-explicit-any */ import { isUndefined } from './util'; var REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i; var REGX_IE = /msie|trident/i; var REGX_IE11 = /Trident\/7\./; var REGX_IOS = /(ipad|iphone|ipod touch)/i; var REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\d|(ipad|iphone|ipod touch);.*os 8_\d/i; var REGX_ANDROID = /android/i; var REGX_WINDOWS = /trident|windows phone|edge/i; var REGX_VERSION = /(version)[ /]([\w.]+)/i; var REGX_BROWSER = { OPERA: /(opera|opr)(?:.*version|)[ /]([\w.]+)/i, EDGE: /(edge)(?:.*version|)[ /]([\w.]+)/i, CHROME: /(chrome|crios)[ /]([\w.]+)/i, PANTHOMEJS: /(phantomjs)[ /]([\w.]+)/i, SAFARI: /(safari)[ /]([\w.]+)/i, WEBKIT: /(webkit)[ /]([\w.]+)/i, MSIE: /(msie|trident) ([\w.]+)/i, MOZILLA: /(mozilla)(?:.*? rv:([\w.]+)|)/i }; /* istanbul ignore else */ if (typeof window !== 'undefined') { window.browserDetails = window.browserDetails || {}; } /** * Get configuration details for Browser * * @private */ var Browser = /** @class */ (function () { function Browser() { } Browser.extractBrowserDetail = function () { var browserInfo = { culture: {} }; var keys = Object.keys(REGX_BROWSER); var clientInfo = []; for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; clientInfo = Browser.userAgent.match(REGX_BROWSER["" + key]); if (clientInfo) { browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase()); browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name); browserInfo.version = clientInfo[2]; browserInfo.culture.name = browserInfo.culture.language = navigator.language; if (Browser.userAgent.match(REGX_IE11)) { browserInfo.name = 'msie'; break; } var version = Browser.userAgent.match(REGX_VERSION); if (browserInfo.name === 'safari' && version) { browserInfo.version = version[2]; } break; } } return browserInfo; }; /** * To get events from the browser * * @param {string} event - type of event triggered. * @returns {string} ? */ Browser.getEvent = function (event) { var events = { start: { isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown' }, move: { isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove' }, end: { isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup' }, cancel: { isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave' } }; return (Browser.isPointer ? events["" + event].isPointer : (Browser.isTouch ? events["" + event].isTouch + (!Browser.isDevice ? ' ' + events["" + event].isDevice : '') : events["" + event].isDevice)); }; /** * To get the Touch start event from browser * * @returns {string} */ Browser.getTouchStartEvent = function () { return Browser.getEvent('start'); }; /** * To get the Touch end event from browser * * @returns {string} */ Browser.getTouchEndEvent = function () { return Browser.getEvent('end'); }; /** * To get the Touch move event from browser * * @returns {string} */ Browser.getTouchMoveEvent = function () { return Browser.getEvent('move'); }; /** * To cancel the touch event from browser * * @returns {string} */ Browser.getTouchCancelEvent = function () { return Browser.getEvent('cancel'); }; /** * Check whether the browser on the iPad device is Safari or not * * @returns {boolean} */ Browser.isSafari = function () { return (Browser.isDevice && Browser.isIos && Browser.isTouch && typeof window !== 'undefined' && window.navigator.userAgent.toLowerCase().indexOf('iphone') === -1 && window.navigator.userAgent.toLowerCase().indexOf('safari') > -1); }; /** * To get the value based on provided key and regX * * @param {string} key ? * @param {RegExp} regX ? * @returns {Object} ? */ Browser.getValue = function (key, regX) { var browserDetails = typeof window !== 'undefined' ? window.browserDetails : {}; if (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true && !REGX_BROWSER.CHROME.test(navigator.userAgent)) { browserDetails['isIos'] = true; browserDetails['isDevice'] = true; browserDetails['isTouch'] = true; browserDetails['isPointer'] = true; // Set 'isPointer' for pointer-enabled devices (e.g., iPad on Safari) browserDetails['isPointer'] = ('pointerEnabled' in window.navigator); } if (typeof window !== 'undefined' && window.Capacitor && window.Capacitor.getPlatform() === 'ios') { browserDetails['isPointer'] = false; } if ('undefined' === typeof browserDetails["" + key]) { return browserDetails["" + key] = regX.test(Browser.userAgent); } return browserDetails["" + key]; }; Object.defineProperty(Browser, "userAgent", { get: function () { return Browser.uA; }, //Properties /** * Property specifies the userAgent of the browser. Default userAgent value is based on the browser. * Also we can set our own userAgent. * * @param {string} uA ? */ set: function (uA) { Browser.uA = uA; window.browserDetails = {}; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "info", { //Read Only Properties /** * Property is to get the browser information like Name, Version and Language * * @returns {BrowserInfo} ? */ get: function () { if (isUndefined(window.browserDetails.info)) { return window.browserDetails.info = Browser.extractBrowserDetail(); } return window.browserDetails.info; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isIE", { /** * Property is to get whether the userAgent is based IE. * * @returns {boolean} ? */ get: function () { return Browser.getValue('isIE', REGX_IE); }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isTouch", { /** * Property is to get whether the browser has touch support. * * @returns {boolean} ? */ get: function () { if (isUndefined(window.browserDetails.isTouch)) { return (window.browserDetails.isTouch = ('ontouchstart' in window.navigator) || (window && window.navigator && (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window)); } return window.browserDetails.isTouch; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isPointer", { /** * Property is to get whether the browser has Pointer support. * * @returns {boolean} ? */ get: function () { if (isUndefined(window.browserDetails.isPointer)) { return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator); } return window.browserDetails.isPointer; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isMSPointer", { /** * Property is to get whether the browser has MSPointer support. * * @returns {boolean} ? */ get: function () { if (isUndefined(window.browserDetails.isMSPointer)) { return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator); } return window.browserDetails.isMSPointer; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isDevice", { /** * Property is to get whether the userAgent is device based. * * @returns {boolean} ? */ get: function () { return Browser.getValue('isDevice', REGX_MOBILE); }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isIos", { /** * Property is to get whether the userAgent is IOS. * * @returns {boolean} ? */ get: function () { return Browser.getValue('isIos', REGX_IOS); }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isIos7", { /** * Property is to get whether the userAgent is Ios7. * * @returns {boolean} ? */ get: function () { return Browser.getValue('isIos7', REGX_IOS7); }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isAndroid", { /** * Property is to get whether the userAgent is Android. * * @returns {boolean} ? */ get: function () { return Browser.getValue('isAndroid', REGX_ANDROID); }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isWebView", { /** * Property is to identify whether application ran in web view. * * @returns {boolean} ? */ get: function () { if (isUndefined(window.browserDetails.isWebView)) { window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap) && isUndefined(window.phonegap) && window.forge !== 'object'); return window.browserDetails.isWebView; } return window.browserDetails.isWebView; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "isWindows", { /** * Property is to get whether the userAgent is Windows. * * @returns {boolean} ? */ get: function () { return Browser.getValue('isWindows', REGX_WINDOWS); }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "touchStartEvent", { /** * Property is to get the touch start event. It returns event name based on browser. * * @returns {string} ? */ get: function () { if (isUndefined(window.browserDetails.touchStartEvent)) { return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent(); } return window.browserDetails.touchStartEvent; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "touchMoveEvent", { /** * Property is to get the touch move event. It returns event name based on browser. * * @returns {string} ? */ get: function () { if (isUndefined(window.browserDetails.touchMoveEvent)) { return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent(); } return window.browserDetails.touchMoveEvent; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "touchEndEvent", { /** * Property is to get the touch end event. It returns event name based on browser. * * @returns {string} ? */ get: function () { if (isUndefined(window.browserDetails.touchEndEvent)) { return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent(); } return window.browserDetails.touchEndEvent; }, enumerable: true, configurable: true }); Object.defineProperty(Browser, "touchCancelEvent", { /** * Property is to cancel the touch end event. * * @returns {string} ? */ get: function () { if (isUndefined(window.browserDetails.touchCancelEvent)) { return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent(); } return window.browserDetails.touchCancelEvent; }, enumerable: true, configurable: true }); /* istanbul ignore next */ Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : ''; return Browser; }()); export { Browser };