UNPKG

novnc

Version:
164 lines (150 loc) 7.39 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.hasScrollbarGutter = exports.dragThreshold = void 0; exports.isChromiumBased = isChromiumBased; exports.isFirefox = isFirefox; exports.isIE = isIE; exports.isIOS = isIOS; exports.isMac = isMac; exports.isSafari = isSafari; exports.isTouchDevice = void 0; exports.isWindows = isWindows; exports.supportsBinaryClipboard = supportsBinaryClipboard; exports.supportsCursorURIs = void 0; exports.supportsPointerLock = supportsPointerLock; var Log = _interopRequireWildcard(require("./logging.js")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* * noVNC: HTML5 VNC client * Copyright (C) 2019 The noVNC Authors * Licensed under MPL 2.0 (see LICENSE.txt) * * See README.md for usage and integration instructions. * * Browser feature support detection */ // Touch detection var isTouchDevice = 'ontouchstart' in document.documentElement || // requried for Chrome debugger document.ontouchstart !== undefined || // required for MS Surface navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; exports.isTouchDevice = isTouchDevice; window.addEventListener('touchstart', function onFirstTouch() { exports.isTouchDevice = isTouchDevice = true; window.removeEventListener('touchstart', onFirstTouch, false); }, false); // The goal is to find a certain physical width, the devicePixelRatio // brings us a bit closer but is not optimal. var dragThreshold = 10 * (window.devicePixelRatio || 1); exports.dragThreshold = dragThreshold; var _supportsCursorURIs = false; try { var target = document.createElement('canvas'); target.style.cursor = 'url("data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==") 2 2, default'; if (target.style.cursor.indexOf("url") === 0) { Log.Info("Data URI scheme cursor supported"); _supportsCursorURIs = true; } else { Log.Warn("Data URI scheme cursor not supported"); } } catch (exc) { Log.Error("Data URI scheme cursor test exception: " + exc); } var supportsCursorURIs = _supportsCursorURIs; exports.supportsCursorURIs = supportsCursorURIs; var _hasScrollbarGutter = true; try { // Create invisible container var container = document.createElement('div'); container.style.visibility = 'hidden'; container.style.overflow = 'scroll'; // forcing scrollbars document.body.appendChild(container); // Create a div and place it in the container var child = document.createElement('div'); container.appendChild(child); // Calculate the difference between the container's full width // and the child's width - the difference is the scrollbars var scrollbarWidth = container.offsetWidth - child.offsetWidth; // Clean up container.parentNode.removeChild(container); _hasScrollbarGutter = scrollbarWidth != 0; } catch (exc) { Log.Error("Scrollbar test exception: " + exc); } var hasScrollbarGutter = _hasScrollbarGutter; /* * The functions for detection of platforms and browsers below are exported * but the use of these should be minimized as much as possible. * * It's better to use feature detection than platform detection. */ exports.hasScrollbarGutter = hasScrollbarGutter; function isMac() { return navigator && !!/mac/i.exec(navigator.platform); } function isWindows() { return navigator && !!/win/i.exec(navigator.platform); } function isIOS() { return navigator && (!!/ipad/i.exec(navigator.platform) || !!/iphone/i.exec(navigator.platform) || !!/ipod/i.exec(navigator.platform)); } function isSafari() { return navigator && navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1; } // Returns IE version number if IE or older Edge browser function isIE() { var ua = window.navigator.userAgent; // Test values; Uncomment to check result & // IE 10 // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; // IE 11 // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; // Edge 12 (Spartan) // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; // Edge 13 // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; var msie = ua.indexOf('MSIE '); var ie_ver = false; if (msie > 0) { // IE 10 or older => return version number ie_ver = parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); ie_ver = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number ie_ver = parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } return ie_ver; } function isChromiumBased() { return !!window.chrome; } function isFirefox() { return navigator && !!/firefox/i.exec(navigator.userAgent); } function supportsBinaryClipboard() { //Safari does support the clipbaord API but has a lot of security restrictions if (isSafari()) { return false; } return navigator.clipboard && typeof navigator.clipboard.read === "function"; } function supportsPointerLock() { //Older versions of edge do support browser lock, but seems to not behave as expected //Disable on browsers that don't fully support or work as expected if (isIOS() || isIE()) { return false; } return document.exitPointerLock; }