UNPKG

slate-dev-environment

Version:

INTERNAL: A set of environment-related constants for Slate's core.

288 lines (237 loc) 8.01 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.SlateDevEnvironment = {}))); }(this, (function (exports) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var isBrowser = (typeof window === "undefined" ? "undefined" : _typeof(window)) === "object" && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && document.nodeType === 9; var slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /** * Browser matching rules. * * @type {Array} */ var BROWSER_RULES = [['edge', /Edge\/([0-9\._]+)/], ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/], ['firefox', /Firefox\/([0-9\.]+)(?:\s|$)/], ['opera', /Opera\/([0-9\.]+)(?:\s|$)/], ['opera', /OPR\/([0-9\.]+)(:?\s|$)$/], ['ie', /Trident\/7\.0.*rv\:([0-9\.]+)\).*Gecko$/], ['ie', /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/], ['ie', /MSIE\s(7\.0)/], ['android', /Android\s([0-9\.]+)/], ['safari', /Version\/([0-9\._]+).*Safari/]]; var browser = void 0; if (isBrowser) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = BROWSER_RULES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _ref = _step.value; var _ref2 = slicedToArray(_ref, 2); var name = _ref2[0]; var regexp = _ref2[1]; if (regexp.test(window.navigator.userAgent)) { browser = name; break; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } /** * Operating system matching rules. * * @type {Array} */ var OS_RULES = [['ios', /os ([\.\_\d]+) like mac os/i], // must be before the macos rule ['macos', /mac os x/i], ['android', /android/i], ['firefoxos', /mozilla\/[a-z\.\_\d]+ \((?:mobile)|(?:tablet)/i], ['windows', /windows\s*(?:nt)?\s*([\.\_\d]+)/i]]; var os = void 0; if (isBrowser) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = OS_RULES[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _ref3 = _step2.value; var _ref4 = slicedToArray(_ref3, 2); var _name = _ref4[0]; var _regexp = _ref4[1]; if (_regexp.test(window.navigator.userAgent)) { os = _name; break; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } /** * Feature matching rules. * * @type {Array} */ var FEATURE_RULES = [['inputeventslevel1', function (window) { var event = window.InputEvent ? new window.InputEvent('input') : {}; var support = 'inputType' in event; return support; }], ['inputeventslevel2', function (window) { var element = window.document.createElement('div'); element.contentEditable = true; var support = 'onbeforeinput' in element; return support; }]]; var features = []; if (isBrowser) { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = FEATURE_RULES[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var _ref5 = _step3.value; var _ref6 = slicedToArray(_ref5, 2); var _name2 = _ref6[0]; var test = _ref6[1]; if (test(window)) { features.push(_name2); } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } } /** * Array of regular expression matchers and their API version * * @type {Array} */ var ANDROID_API_VERSIONS = [[/^9([.]0|)/, 28], [/^8[.]1/, 27], [/^8([.]0|)/, 26], [/^7[.]1/, 25], [/^7([.]0|)/, 24], [/^6([.]0|)/, 23], [/^5[.]1/, 22], [/^5([.]0|)/, 21], [/^4[.]4/, 20]]; /** * get the Android API version from the userAgent * * @return {number} version */ function getAndroidApiVersion() { if (os !== 'android') return null; var userAgent = window.navigator.userAgent; var matchData = userAgent.match(/Android\s([0-9\.]+)/); if (matchData == null) return null; var versionString = matchData[1]; var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = ANDROID_API_VERSIONS[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var _ref7 = _step4.value; var _ref8 = slicedToArray(_ref7, 2); var regex = _ref8[0]; var version = _ref8[1]; if (versionString.match(regex)) return version; } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } return null; } /** * Export. * * @type {Boolean} */ var IS_CHROME = browser === 'chrome'; var IS_OPERA = browser === 'opera'; var IS_FIREFOX = browser === 'firefox'; var IS_SAFARI = browser === 'safari'; var IS_IE = browser === 'ie'; var IS_EDGE = browser === 'edge'; var IS_ANDROID = os === 'android'; var IS_IOS = os === 'ios'; var IS_MAC = os === 'macos'; var IS_WINDOWS = os === 'windows'; var ANDROID_API_VERSION = getAndroidApiVersion(); var HAS_INPUT_EVENTS_LEVEL_1 = features.includes('inputeventslevel1'); var HAS_INPUT_EVENTS_LEVEL_2 = features.includes('inputeventslevel2') || IS_ANDROID && (ANDROID_API_VERSION === 28 || ANDROID_API_VERSION === null); exports.IS_CHROME = IS_CHROME; exports.IS_OPERA = IS_OPERA; exports.IS_FIREFOX = IS_FIREFOX; exports.IS_SAFARI = IS_SAFARI; exports.IS_IE = IS_IE; exports.IS_EDGE = IS_EDGE; exports.IS_ANDROID = IS_ANDROID; exports.IS_IOS = IS_IOS; exports.IS_MAC = IS_MAC; exports.IS_WINDOWS = IS_WINDOWS; exports.ANDROID_API_VERSION = ANDROID_API_VERSION; exports.HAS_INPUT_EVENTS_LEVEL_1 = HAS_INPUT_EVENTS_LEVEL_1; exports.HAS_INPUT_EVENTS_LEVEL_2 = HAS_INPUT_EVENTS_LEVEL_2; Object.defineProperty(exports, '__esModule', { value: true }); })));