mirror of
https://github.com/coder/code-server.git
synced 2026-05-05 12:05:18 +02:00
These conflicts will be resolved in the following commits. We do it this way so that PR review is possible.
59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as browser from 'vs/base/browser/browser';
|
|
import * as platform from 'vs/base/common/platform';
|
|
|
|
export const enum KeyboardSupport {
|
|
Always,
|
|
FullScreen,
|
|
None
|
|
}
|
|
|
|
/**
|
|
* Browser feature we can support in current platform, browser and environment.
|
|
*/
|
|
export const BrowserFeatures = {
|
|
clipboard: {
|
|
writeText: (
|
|
platform.isNative
|
|
|| (document.queryCommandSupported && document.queryCommandSupported('copy'))
|
|
|| !!(navigator && navigator.clipboard && navigator.clipboard.writeText)
|
|
),
|
|
readText: (
|
|
platform.isNative
|
|
|| !!(navigator && navigator.clipboard && navigator.clipboard.readText)
|
|
),
|
|
richText: (() => {
|
|
if (browser.isEdgeLegacy) {
|
|
let index = navigator.userAgent.indexOf('Edge/');
|
|
let version = parseInt(navigator.userAgent.substring(index + 5, navigator.userAgent.indexOf('.', index)), 10);
|
|
|
|
if (!version || (version >= 12 && version <= 16)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
})()
|
|
},
|
|
keyboard: (() => {
|
|
if (platform.isNative || browser.isStandalone) {
|
|
return KeyboardSupport.Always;
|
|
}
|
|
|
|
if ((<any>navigator).keyboard || browser.isSafari) {
|
|
return KeyboardSupport.FullScreen;
|
|
}
|
|
|
|
return KeyboardSupport.None;
|
|
})(),
|
|
|
|
// 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be
|
|
// `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast
|
|
touch: 'ontouchstart' in window || navigator.maxTouchPoints > 0 || (window as Window).navigator.msMaxTouchPoints > 0,
|
|
pointerEvents: window.PointerEvent && ('ontouchstart' in window || (window as Window).navigator.maxTouchPoints > 0 || navigator.maxTouchPoints > 0 || (window as Window).navigator.msMaxTouchPoints > 0)
|
|
};
|