UNPKG

native-fn

Version:
248 lines (237 loc) 8.65 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Media = factory()); })(this, (function () { 'use strict'; var USER_AGENT = navigator.userAgent; var OS; (function (OS) { OS["Unknown"] = "Unknown"; OS["Android"] = "Android"; OS["iOS"] = "iOS"; OS["Windows"] = "Windows"; OS["MacOS"] = "MacOS"; })(OS || (OS = {})); var Devices; (function (Devices) { Devices["Unknown"] = "Unknown"; Devices["Mobile"] = "Mobile"; Devices["Desktop"] = "Desktop"; })(Devices || (Devices = {})); var Engines; (function (Engines) { Engines["Unknown"] = "Unknown"; Engines["EdgeHTML"] = "EdgeHTML"; Engines["ArkWeb"] = "ArkWeb"; Engines["Blink"] = "Blink"; Engines["Presto"] = "Presto"; Engines["WebKit"] = "WebKit"; Engines["Trident"] = "Trident"; Engines["NetFront"] = "NetFront"; Engines["KHTML"] = "KHTML"; Engines["Tasman"] = "Tasman"; Engines["Gecko"] = "Gecko"; })(Engines || (Engines = {})); var OS_RESOLVER_MAP = (function () { function resolveIOSOrMacVersion(str) { if (str === undefined) return ''; return str.replace(/_/g, '.'); } function resolveWindowsVersion(str) { if (str === undefined) return ''; var mapped = { '4.90': 'ME', 'NT3.51': 'NT 3.11', 'NT4.0': 'NT 4.0', 'NT 5.0': '2000', 'NT 5.1': 'XP', 'NT 5.2': 'XP', 'NT 6.0': 'Vista', 'NT 6.1': '7', 'NT 6.2': '8', 'NT 6.3': '8.1', 'NT 6.4': '10', 'NT 10.0': '10', 'ARM': 'RT' }[str]; if (mapped !== undefined) return mapped; return str; } function resolveVersion(str) { if (str === undefined) return ''; return str; } return [ [/android\w*[-\/.; ]?([\d.]*)/i, OS.Android, Devices.Mobile, resolveVersion], [/microsoft windows (vista|xp)/i, OS.Windows, Devices.Desktop, resolveVersion], [/windows (?:phone(?: os)?|mobile|iot)[\/ ]?([.\w ]*)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion], [/windows nt 6\.2; (arm)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion], [/windows[\/ ]([ntce\d. ]+\w)(?!.+xbox)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion], [/(?:win(?=[39n])|win 9x )([nt\d.]+)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion], [/[adehimnop]{4,7}\b(?:.*os (\w+) like mac|; opera)/i, OS.iOS, Devices.Mobile, resolveIOSOrMacVersion], [/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d.]+)/i, OS.iOS, Devices.Mobile, resolveIOSOrMacVersion], [/cfnetwork\/.+darwin/i, OS.iOS, Devices.Mobile, resolveVersion], [/mac os x ?([\w. ]*)/i, OS.MacOS, Devices.Desktop, resolveIOSOrMacVersion], [/(?:macintosh|mac_powerpc\b)(?!.+haiku)/i, OS.MacOS, Devices.Desktop, resolveIOSOrMacVersion], ]; })(); var ENGINE_RESOLVER_MAP = [ [/windows.+ edge\/([\w.]+)/i, Engines.EdgeHTML], [/arkweb\/([\w.]+)/i, Engines.ArkWeb], [/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i, Engines.Blink], [/presto\/([\w.]+)/i, Engines.Presto], [/webkit\/([\w.]+)/i, Engines.WebKit], [/trident\/([\w.]+)/i, Engines.Trident], [/netfront\/([\w.]+)/i, Engines.NetFront], [/khtml[\/ ]\(?([\w.]+)/i, Engines.KHTML], [/tasman[\/ ]\(?([\w.]+)/i, Engines.Tasman], [/rv:([\w.]{1,9})\b.+gecko/i, Engines.Gecko] ]; var OS_NAME = OS.Unknown; var DEVICE_NAME = Devices.Unknown; Engines.Unknown; for (var i = 0; i < OS_RESOLVER_MAP.length; i++) { var map = OS_RESOLVER_MAP[i]; var regexp = map[0]; var os = map[1]; var device = map[2]; var resolver = map[3]; var matched = USER_AGENT.match(regexp); if (matched !== null) { OS_NAME = os; resolver(matched[1]); DEVICE_NAME = device; break; } } for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) { var map = ENGINE_RESOLVER_MAP[i]; var regexp = map[0]; map[1]; var matched = USER_AGENT.match(regexp); if (matched !== null) { matched[1]; break; } } ((function () { var canvas = document.createElement('canvas'); if (typeof canvas.getContext !== 'function') return ''; var context = canvas.getContext('webgl2') || canvas.getContext('experimental-webgl') || canvas.getContext('webgl'); if (context === null) return ''; if (context instanceof WebGLRenderingContext || 'getParameter' in context && typeof context.getParameter === 'function') { var extension = context.getExtension('WEBGL_debug_renderer_info'); if (extension === null) return context.getParameter(context.RENDERER); else return context.getParameter(extension.UNMASKED_RENDERER_WEBGL); } else { return ''; } }))(); DEVICE_NAME === Devices.Mobile; DEVICE_NAME === Devices.Desktop; ((function () { if (OS_NAME === OS.iOS) return 'standalone' in navigator && navigator.standalone; else return window.matchMedia('(display-mode: standalone)').matches; }))(); function getTopmostWindow() { try { if (window.top && window.top !== window) { void window.top.location.href; return window.top; } } catch (_) { } return window; } function dispatchClickEvent(element, view) { if (view === void 0) { view = window; } var fake; try { fake = new MouseEvent('click', { bubbles: true, cancelable: true, view: view }); } catch (_) { fake = document.createEvent('MouseEvents'); fake.initMouseEvent('click', true, true, view, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } element.dispatchEvent(fake); } function tryOpenCamera(type) { var top = getTopmostWindow(); var document = top.document; var input; try { input = document.createElement('input'); input.type = 'file'; input.tabIndex = -1; input.accept = type + '/*'; input.setAttribute('aria-hidden', 'true'); input.style.display = 'none'; input.style.position = 'absolute'; input.style.top = '-9999px'; input.style.left = '-9999px'; if ('capture' in HTMLInputElement.prototype) { input.capture = 'user'; } else if (OS_NAME === OS.Android) { var capture = ''; if (type === 'image') capture = 'camera'; else if (type === 'video') capture = 'camcorder'; else if (type === 'audio') capture = 'microphone'; input.accept = type + '/*;capture=' + capture; } document.body.appendChild(input); dispatchClickEvent(input, top); } catch (_) { } } var Media = { open: open }; function open(type) { switch (OS_NAME) { case OS.Android: case OS.iOS: tryOpenCamera(type); break; case OS.Windows: case OS.MacOS: break; } } var MediaType; (function (MediaType) { MediaType["Image"] = "image"; MediaType["Video"] = "video"; MediaType["Audio"] = "audio"; })(MediaType || (MediaType = {})); var NativeMediaPlugin = { installed: false, name: 'Media', module: Media, Constants: { MediaType: MediaType }, Errors: {} }; return NativeMediaPlugin; }));