UNPKG

leaflet

Version:

JavaScript library for mobile-friendly interactive maps

152 lines (111 loc) 4.85 kB
/* * @namespace Browser * @aka L.Browser * * A namespace with static properties for browser/feature detection used by Leaflet internally. * * @example * * ```js * if (L.Browser.ielt9) { * alert('Upgrade your browser, dude!'); * } * ``` */ (function () { var ua = navigator.userAgent.toLowerCase(), doc = document.documentElement, ie = 'ActiveXObject' in window, webkit = ua.indexOf('webkit') !== -1, phantomjs = ua.indexOf('phantom') !== -1, android23 = ua.search('android [23]') !== -1, chrome = ua.indexOf('chrome') !== -1, gecko = ua.indexOf('gecko') !== -1 && !webkit && !window.opera && !ie, win = navigator.platform.indexOf('Win') === 0, mobile = typeof orientation !== 'undefined' || ua.indexOf('mobile') !== -1, msPointer = !window.PointerEvent && window.MSPointerEvent, pointer = window.PointerEvent || msPointer, ie3d = ie && ('transition' in doc.style), webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23, gecko3d = 'MozPerspective' in doc.style, opera12 = 'OTransition' in doc.style; var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch)); L.Browser = { // @property ie: Boolean // `true` for all Internet Explorer versions (not Edge). ie: ie, // @property ielt9: Boolean // `true` for Internet Explorer versions less than 9. ielt9: ie && !document.addEventListener, // @property edge: Boolean // `true` for the Edge web browser. edge: 'msLaunchUri' in navigator && !('documentMode' in document), // @property webkit: Boolean // `true` for webkit-based browsers like Chrome and Safari (including mobile versions). webkit: webkit, // @property gecko: Boolean // `true` for gecko-based browsers like Firefox. gecko: gecko, // @property android: Boolean // `true` for any browser running on an Android platform. android: ua.indexOf('android') !== -1, // @property android23: Boolean // `true` for browsers running on Android 2 or Android 3. android23: android23, // @property chrome: Boolean // `true` for the Chrome browser. chrome: chrome, // @property safari: Boolean // `true` for the Safari browser. safari: !chrome && ua.indexOf('safari') !== -1, // @property win: Boolean // `true` when the browser is running in a Windows platform win: win, // @property ie3d: Boolean // `true` for all Internet Explorer versions supporting CSS transforms. ie3d: ie3d, // @property webkit3d: Boolean // `true` for webkit-based browsers supporting CSS transforms. webkit3d: webkit3d, // @property gecko3d: Boolean // `true` for gecko-based browsers supporting CSS transforms. gecko3d: gecko3d, // @property opera12: Boolean // `true` for the Opera browser supporting CSS transforms (version 12 or later). opera12: opera12, // @property any3d: Boolean // `true` for all browsers supporting CSS transforms. any3d: !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantomjs, // @property mobile: Boolean // `true` for all browsers running in a mobile device. mobile: mobile, // @property mobileWebkit: Boolean // `true` for all webkit-based browsers in a mobile device. mobileWebkit: mobile && webkit, // @property mobileWebkit3d: Boolean // `true` for all webkit-based browsers in a mobile device supporting CSS transforms. mobileWebkit3d: mobile && webkit3d, // @property mobileOpera: Boolean // `true` for the Opera browser in a mobile device. mobileOpera: mobile && window.opera, // @property mobileGecko: Boolean // `true` for gecko-based browsers running in a mobile device. mobileGecko: mobile && gecko, // @property touch: Boolean // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events). // This does not necessarily mean that the browser is running in a computer with // a touchscreen, it only means that the browser is capable of understanding // touch events. touch: !!touch, // @property msPointer: Boolean // `true` for browsers implementing the Microsoft touch events model (notably IE10). msPointer: !!msPointer, // @property pointer: Boolean // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx). pointer: !!pointer, // @property retina: Boolean // `true` for browsers on a high-resolution "retina" screen. retina: (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1 }; }());