mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 12:04:04 +01:00
156 lines
4.2 KiB
TypeScript
156 lines
4.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
'use strict';
|
|
|
|
// --- THIS FILE IS TEMPORARY UNTIL ENV.TS IS CLEANED UP. IT CAN SAFELY BE USED IN ALL TARGET EXECUTION ENVIRONMENTS (node & dom) ---
|
|
|
|
let _isWindows = false;
|
|
let _isMacintosh = false;
|
|
let _isLinux = false;
|
|
let _isRootUser = false;
|
|
let _isNative = false;
|
|
let _isWeb = false;
|
|
let _locale: string = undefined;
|
|
let _language: string = undefined;
|
|
|
|
interface NLSConfig {
|
|
locale: string;
|
|
availableLanguages: { [key: string]: string; };
|
|
}
|
|
|
|
export interface IProcessEnvironment {
|
|
[key: string]: string;
|
|
}
|
|
|
|
interface INodeProcess {
|
|
platform: string;
|
|
env: IProcessEnvironment;
|
|
getuid(): number;
|
|
}
|
|
declare let process: INodeProcess;
|
|
declare let global: any;
|
|
|
|
interface INavigator {
|
|
userAgent: string;
|
|
language: string;
|
|
}
|
|
declare let navigator: INavigator;
|
|
declare let self: any;
|
|
|
|
export const LANGUAGE_DEFAULT = 'en';
|
|
|
|
// OS detection
|
|
if (typeof process === 'object') {
|
|
_isWindows = (process.platform === 'win32');
|
|
_isMacintosh = (process.platform === 'darwin');
|
|
_isLinux = (process.platform === 'linux');
|
|
_isRootUser = !_isWindows && (process.getuid() === 0);
|
|
let rawNlsConfig = process.env['VSCODE_NLS_CONFIG'];
|
|
if (rawNlsConfig) {
|
|
try {
|
|
let nlsConfig: NLSConfig = JSON.parse(rawNlsConfig);
|
|
let resolved = nlsConfig.availableLanguages['*'];
|
|
_locale = nlsConfig.locale;
|
|
// VSCode's default language is 'en'
|
|
_language = resolved ? resolved : LANGUAGE_DEFAULT;
|
|
} catch (e) {
|
|
}
|
|
}
|
|
_isNative = true;
|
|
} else if (typeof navigator === 'object') {
|
|
let userAgent = navigator.userAgent;
|
|
_isWindows = userAgent.indexOf('Windows') >= 0;
|
|
_isMacintosh = userAgent.indexOf('Macintosh') >= 0;
|
|
_isLinux = userAgent.indexOf('Linux') >= 0;
|
|
_isWeb = true;
|
|
_locale = navigator.language;
|
|
_language = _locale;
|
|
}
|
|
|
|
export enum Platform {
|
|
Web,
|
|
Mac,
|
|
Linux,
|
|
Windows
|
|
}
|
|
|
|
let _platform: Platform = Platform.Web;
|
|
if (_isNative) {
|
|
if (_isMacintosh) {
|
|
_platform = Platform.Mac;
|
|
} else if (_isWindows) {
|
|
_platform = Platform.Windows;
|
|
} else if (_isLinux) {
|
|
_platform = Platform.Linux;
|
|
}
|
|
}
|
|
|
|
export const isWindows = _isWindows;
|
|
export const isMacintosh = _isMacintosh;
|
|
export const isLinux = _isLinux;
|
|
export const isRootUser = _isRootUser;
|
|
export const isNative = _isNative;
|
|
export const isWeb = _isWeb;
|
|
export const platform = _platform;
|
|
|
|
/**
|
|
* The language used for the user interface. The format of
|
|
* the string is all lower case (e.g. zh-tw for Traditional
|
|
* Chinese)
|
|
*/
|
|
export const language = _language;
|
|
|
|
/**
|
|
* The OS locale or the locale specified by --locale. The format of
|
|
* the string is all lower case (e.g. zh-tw for Traditional
|
|
* Chinese). The UI is not necessarily shown in the provided locale.
|
|
*/
|
|
export const locale = _locale;
|
|
|
|
export interface TimeoutToken {
|
|
}
|
|
|
|
export interface IntervalToken {
|
|
}
|
|
|
|
interface IGlobals {
|
|
Worker?: any;
|
|
setTimeout(callback: (...args: any[]) => void, delay: number, ...args: any[]): TimeoutToken;
|
|
clearTimeout(token: TimeoutToken): void;
|
|
|
|
setInterval(callback: (...args: any[]) => void, delay: number, ...args: any[]): IntervalToken;
|
|
clearInterval(token: IntervalToken): void;
|
|
}
|
|
|
|
const _globals = <IGlobals>(typeof self === 'object' ? self : global);
|
|
export const globals: any = _globals;
|
|
|
|
export function hasWebWorkerSupport(): boolean {
|
|
return typeof _globals.Worker !== 'undefined';
|
|
}
|
|
export const setTimeout = _globals.setTimeout.bind(_globals);
|
|
export const clearTimeout = _globals.clearTimeout.bind(_globals);
|
|
|
|
export const setInterval = _globals.setInterval.bind(_globals);
|
|
export const clearInterval = _globals.clearInterval.bind(_globals);
|
|
|
|
export const enum OperatingSystem {
|
|
Windows = 1,
|
|
Macintosh = 2,
|
|
Linux = 3
|
|
}
|
|
export const OS = (_isMacintosh ? OperatingSystem.Macintosh : (_isWindows ? OperatingSystem.Windows : OperatingSystem.Linux));
|
|
|
|
export const enum AccessibilitySupport {
|
|
/**
|
|
* This should be the browser case where it is not known if a screen reader is attached or no.
|
|
*/
|
|
Unknown = 0,
|
|
|
|
Disabled = 1,
|
|
|
|
Enabled = 2
|
|
}
|