diff --git a/extension/index.js b/extension/index.js index fcb95b3..e4346e8 100644 --- a/extension/index.js +++ b/extension/index.js @@ -15,33 +15,33 @@ const localize = require('./i18n'); const os = require('./platform'); var themeStylePaths = { - 'Default Dark': '../themes/Default Dark.css', - 'Dark (Exclude Tab Line)': '../themes/Dark (Exclude Tab Line).css', - 'Dark (Only Subbar)': '../themes/Dark (Only Subbar).css', - 'Default Light': '../themes/Default Light.css', - 'Light (Only Subbar)': '../themes/Light (Only Subbar).css', - 'Tokyo Night Storm': '../themes/Tokyo Night Storm.css', - 'Tokyo Night Storm (Outer)': '../themes/Tokyo Night Storm (Outer).css', - 'Noir et blanc': '../themes/Noir et blanc.css', - 'Solarized Dark+': '../themes/Solarized Dark+.css', + 'Default Dark': '../themes/Default Dark.css', + 'Dark (Exclude Tab Line)': '../themes/Dark (Exclude Tab Line).css', + 'Dark (Only Subbar)': '../themes/Dark (Only Subbar).css', + 'Default Light': '../themes/Default Light.css', + 'Light (Only Subbar)': '../themes/Light (Only Subbar).css', + 'Tokyo Night Storm': '../themes/Tokyo Night Storm.css', + 'Tokyo Night Storm (Outer)': '../themes/Tokyo Night Storm (Outer).css', + 'Noir et blanc': '../themes/Noir et blanc.css', + 'Solarized Dark+': '../themes/Solarized Dark+.css', } const themeConfigPaths = { - 'Default Dark': '../themes/Default Dark.json', - 'Dark (Exclude Tab Line)': '../themes/Dark (Exclude Tab Line).json', - 'Dark (Only Subbar)': '../themes/Dark (Only Subbar).json', - 'Default Light': '../themes/Default Light.json', - 'Light (Only Subbar)': '../themes/Light (Only Subbar).json', - 'Tokyo Night Storm': '../themes/Tokyo Night Storm.json', - 'Tokyo Night Storm (Outer)': '../themes/Tokyo Night Storm (Outer).json', - 'Noir et blanc': '../themes/Noir et blanc.json', - 'Solarized Dark+': '../themes/Solarized Dark+.json', + 'Default Dark': '../themes/Default Dark.json', + 'Dark (Exclude Tab Line)': '../themes/Dark (Exclude Tab Line).json', + 'Dark (Only Subbar)': '../themes/Dark (Only Subbar).json', + 'Default Light': '../themes/Default Light.json', + 'Light (Only Subbar)': '../themes/Light (Only Subbar).json', + 'Tokyo Night Storm': '../themes/Tokyo Night Storm.json', + 'Tokyo Night Storm (Outer)': '../themes/Tokyo Night Storm (Outer).json', + 'Noir et blanc': '../themes/Noir et blanc.json', + 'Solarized Dark+': '../themes/Solarized Dark+.json', } var defaultTheme = 'Default Dark'; function getCurrentTheme(config) { - return config.theme in themeStylePaths ? config.theme : defaultTheme; + return config.theme in themeStylePaths ? config.theme : defaultTheme; } async function changeTerminalRendererType() { @@ -126,248 +126,248 @@ function deepEqual(obj1, obj2) { //check if value is primitive function isPrimitive(obj) { - return (obj !== Object(obj)); + return (obj !== Object(obj)); } function isFirstload() { - try { - fs.readFileSync(lockPath); - return false - } catch (err) { - return true - } + try { + fs.readFileSync(lockPath); + return false + } catch (err) { + return true + } } function lockFirstload() { - fs.writeFileSync(lockPath, '', () => { }); + fs.writeFileSync(lockPath, '', () => { }); } function activate(context) { - console.log('vscode-vibrancy is active!'); + console.log('vscode-vibrancy is active!'); - var appDir = path.dirname(require.main.filename); + var appDir = path.dirname(require.main.filename); - var HTMLFile = appDir + '/vs/code/electron-sandbox/workbench/workbench.html'; - var JSFile = appDir + '/main.js'; + var HTMLFile = appDir + '/vs/code/electron-sandbox/workbench/workbench.html'; + var JSFile = appDir + '/main.js'; - var runtimeVersion = 'v6'; - var runtimeDir = appDir + '/vscode-vibrancy-runtime-' + runtimeVersion; + var runtimeVersion = 'v6'; + var runtimeDir = appDir + '/vscode-vibrancy-runtime-' + runtimeVersion; - async function installRuntime() { - // if runtimeDir exists, recurse through it and delete all files - // (recursive fs.rm does not work properly on Windows) - if (fs.existsSync(runtimeDir)) { - fs.readdirSync(runtimeDir).forEach((file, index) => { - const curPath = path.join(runtimeDir, file); - fs.unlinkSync(curPath); - }); - fs.rmdirSync(runtimeDir); - } + async function installRuntime() { + // if runtimeDir exists, recurse through it and delete all files + // (recursive fs.rm does not work properly on Windows) + if (fs.existsSync(runtimeDir)) { + // fs.readdirSync(runtimeDir).forEach((file, index) => { + // const curPath = path.join(runtimeDir, file); + // fs.unlinkSync(curPath); + // }); + fs.rmSync(runtimeDir, { recursive: true, force: true }); + } - await fs.mkdir(runtimeDir); - await fsExtra.copy(path.resolve(__dirname, '../runtime'), path.resolve(runtimeDir)); - } + await fs.mkdir(runtimeDir); + await fsExtra.copy(path.resolve(__dirname, '../runtime'), path.resolve(runtimeDir)); + } - async function installJS() { - const config = vscode.workspace.getConfiguration("vscode_vibrancy"); - const currentTheme = getCurrentTheme(config); - const themeConfig = require(path.resolve(__dirname, themeConfigPaths[currentTheme])); - const themeCSS = await fs.readFile(path.join(__dirname, themeStylePaths[currentTheme]), 'utf-8'); + async function installJS() { + const config = vscode.workspace.getConfiguration("vscode_vibrancy"); + const currentTheme = getCurrentTheme(config); + const themeConfig = require(path.resolve(__dirname, themeConfigPaths[currentTheme])); + const themeCSS = await fs.readFile(path.join(__dirname, themeStylePaths[currentTheme]), 'utf-8'); - const JS = await fs.readFile(JSFile, 'utf-8'); + const JS = await fs.readFile(JSFile, 'utf-8'); - // generate imports by reading all files in config.imports - const imports = { - css: "", - js: "", - }; - for (let i = 0; i < config.imports.length; i++) { - if (config.imports[i] === "/path/to/file") continue; + // generate imports by reading all files in config.imports + const imports = { + css: "", + js: "", + }; + for (let i = 0; i < config.imports.length; i++) { + if (config.imports[i] === "/path/to/file") continue; - try { - const importContent = await fs.readFile(config.imports[i], 'utf-8'); - - if (config.imports[i].endsWith('.css')) { - imports.css += ``; - } else { - imports.js += ``; - } - } catch (err) { - vscode.window.showWarningMessage(localize('messages.importError').replace('%1', config.imports[i])); - } - } + try { + const importContent = await fs.readFile(config.imports[i], 'utf-8'); - const injectData = { - os: os, - config: config, - theme: themeConfig, - themeCSS: themeCSS, - imports: imports, - } + if (config.imports[i].endsWith('.css')) { + imports.css += ``; + } else { + imports.js += ``; + } + } catch (err) { + vscode.window.showWarningMessage(localize('messages.importError').replace('%1', config.imports[i])); + } + } - const base = __filename; + const injectData = { + os: os, + config: config, + theme: themeConfig, + themeCSS: themeCSS, + imports: imports, + } - const newJS = JS.replace(/\n\/\* !! VSCODE-VIBRANCY-START !! \*\/[\s\S]*?\/\* !! VSCODE-VIBRANCY-END !! \*\//, '') - + '\n/* !! VSCODE-VIBRANCY-START !! */\n;(function(){\n' - + `if (!require(\'fs\').existsSync(${JSON.stringify(base)})) return;\n` - + `global.vscode_vibrancy_plugin = ${JSON.stringify(injectData)}; try{ require(${JSON.stringify(runtimeDir)}); } catch (err) {console.error(err)}\n` - + '})()\n/* !! VSCODE-VIBRANCY-END !! */'; - await fs.writeFile(JSFile, newJS, 'utf-8'); - } + const base = __filename; - async function installHTML() { - const HTML = await fs.readFile(HTMLFile, 'utf-8'); + const newJS = JS.replace(/\n\/\* !! VSCODE-VIBRANCY-START !! \*\/[\s\S]*?\/\* !! VSCODE-VIBRANCY-END !! \*\//, '') + + '\n/* !! VSCODE-VIBRANCY-START !! */\n;(function(){\n' + + `if (!require(\'fs\').existsSync(${JSON.stringify(base)})) return;\n` + + `global.vscode_vibrancy_plugin = ${JSON.stringify(injectData)}; try{ require(${JSON.stringify(runtimeDir)}); } catch (err) {console.error(err)}\n` + + '})()\n/* !! VSCODE-VIBRANCY-END !! */'; + await fs.writeFile(JSFile, newJS, 'utf-8'); + } - const newHTML = HTML.replace( - //g, - (_, trustedTypes) => { - return ``; - } - ); + async function installHTML() { + const HTML = await fs.readFile(HTMLFile, 'utf-8'); - if (HTML !== newHTML) { - await fs.writeFile(HTMLFile, newHTML, 'utf-8'); - } - } + const newHTML = HTML.replace( + //g, + (_, trustedTypes) => { + return ``; + } + ); - async function uninstallJS() { - const JS = await fs.readFile(JSFile, 'utf-8'); - const needClean = /\n\/\* !! VSCODE-VIBRANCY-START !! \*\/[\s\S]*?\/\* !! VSCODE-VIBRANCY-END !! \*\//.test(JS); - if (needClean) { - const newJS = JS - .replace(/\n\/\* !! VSCODE-VIBRANCY-START !! \*\/[\s\S]*?\/\* !! VSCODE-VIBRANCY-END !! \*\//, '') - await fs.writeFile(JSFile, newJS, 'utf-8'); - } - } + if (HTML !== newHTML) { + await fs.writeFile(HTMLFile, newHTML, 'utf-8'); + } + } - async function uninstallHTML() { - const HTML = await fs.readFile(HTMLFile, 'utf-8'); - const needClean = / VscodeVibrancy;/.test(HTML); - if (needClean) { - const newHTML = HTML.replace(" VscodeVibrancy;", ";").replace("; trusted-types", "; trusted-types") - await fs.writeFile(HTMLFile, newHTML, 'utf-8'); - } - } + async function uninstallJS() { + const JS = await fs.readFile(JSFile, 'utf-8'); + const needClean = /\n\/\* !! VSCODE-VIBRANCY-START !! \*\/[\s\S]*?\/\* !! VSCODE-VIBRANCY-END !! \*\//.test(JS); + if (needClean) { + const newJS = JS + .replace(/\n\/\* !! VSCODE-VIBRANCY-START !! \*\/[\s\S]*?\/\* !! VSCODE-VIBRANCY-END !! \*\//, '') + await fs.writeFile(JSFile, newJS, 'utf-8'); + } + } - function enabledRestart() { - vscode.window.showInformationMessage(localize('messages.enabled'), { title: localize('messages.restartIde') }) - .then(function (msg) { - msg && promptRestart(); - }); - } + async function uninstallHTML() { + const HTML = await fs.readFile(HTMLFile, 'utf-8'); + const needClean = / VscodeVibrancy;/.test(HTML); + if (needClean) { + const newHTML = HTML.replace(" VscodeVibrancy;", ";").replace("; trusted-types", "; trusted-types") + await fs.writeFile(HTMLFile, newHTML, 'utf-8'); + } + } - function disabledRestart() { - vscode.window.showInformationMessage(localize('messages.disabled'), { title: localize('messages.restartIde') }) - .then(function (msg) { - msg && promptRestart(); - }); - } + function enabledRestart() { + vscode.window.showInformationMessage(localize('messages.enabled'), { title: localize('messages.restartIde') }) + .then(function (msg) { + msg && promptRestart(); + }); + } - // #### main commands ###################################################### + function disabledRestart() { + vscode.window.showInformationMessage(localize('messages.disabled'), { title: localize('messages.restartIde') }) + .then(function (msg) { + msg && promptRestart(); + }); + } - async function Install() { + // #### main commands ###################################################### - if (os === 'unknown') { - vscode.window.showInformationMessage(localize('messages.unsupported')); - throw new Error('unsupported'); - } + async function Install() { - try { - await fs.stat(JSFile); - await fs.stat(HTMLFile); + if (os === 'unknown') { + vscode.window.showInformationMessage(localize('messages.unsupported')); + throw new Error('unsupported'); + } - await installRuntime(); - await installJS(); - await installHTML(); - await changeTerminalRendererType(); - } catch (error) { - if (error && (error.code === 'EPERM' || error.code === 'EACCES')) { - vscode.window.showInformationMessage(localize('messages.admin') + error); - } - else { - vscode.window.showInformationMessage(localize('messages.smthingwrong') + error); - } - throw error; - } - } + try { + await fs.stat(JSFile); + await fs.stat(HTMLFile); - async function Uninstall() { - try { - // uninstall old version - await fs.stat(HTMLFile); - await uninstallHTML(); - } finally { + await installRuntime(); + await installJS(); + await installHTML(); + await changeTerminalRendererType(); + } catch (error) { + if (error && (error.code === 'EPERM' || error.code === 'EACCES')) { + vscode.window.showInformationMessage(localize('messages.admin') + error); + } + else { + vscode.window.showInformationMessage(localize('messages.smthingwrong') + error); + } + throw error; + } + } - } + async function Uninstall() { + try { + // uninstall old version + await fs.stat(HTMLFile); + await uninstallHTML(); + } finally { - try { - await fs.stat(JSFile); + } - await uninstallJS(); - } catch (error) { - if (error && (error.code === 'EPERM' || error.code === 'EACCES')) { - vscode.window.showInformationMessage(localize('messages.admin') + error); - } - else { - vscode.window.showInformationMessage(localize('messages.smthingwrong') + error); - } - throw error; - } - } + try { + await fs.stat(JSFile); - async function Update() { - await Uninstall(); - await Install(); - } + await uninstallJS(); + } catch (error) { + if (error && (error.code === 'EPERM' || error.code === 'EACCES')) { + vscode.window.showInformationMessage(localize('messages.admin') + error); + } + else { + vscode.window.showInformationMessage(localize('messages.smthingwrong') + error); + } + throw error; + } + } - var installVibrancy = vscode.commands.registerCommand('extension.installVibrancy', async () => { - await Install(); - enabledRestart(); - }); - var uninstallVibrancy = vscode.commands.registerCommand('extension.uninstallVibrancy', async () => { - await Uninstall() - disabledRestart(); - }); - var updateVibrancy = vscode.commands.registerCommand('extension.updateVibrancy', async () => { - await Update(); - enabledRestart(); - }); + async function Update() { + await Uninstall(); + await Install(); + } - context.subscriptions.push(installVibrancy); - context.subscriptions.push(uninstallVibrancy); - context.subscriptions.push(updateVibrancy); + var installVibrancy = vscode.commands.registerCommand('extension.installVibrancy', async () => { + await Install(); + enabledRestart(); + }); + var uninstallVibrancy = vscode.commands.registerCommand('extension.uninstallVibrancy', async () => { + await Uninstall() + disabledRestart(); + }); + var updateVibrancy = vscode.commands.registerCommand('extension.updateVibrancy', async () => { + await Update(); + enabledRestart(); + }); - if (isFirstload()) { - vscode.window.showInformationMessage(localize('messages.firstload'), { title: localize('messages.installIde') }) - .then(async (msg) => { - if (msg) { - await Update(); - await checkColorTheme(); - enabledRestart(); - } - }); - lockFirstload(); - } + context.subscriptions.push(installVibrancy); + context.subscriptions.push(uninstallVibrancy); + context.subscriptions.push(updateVibrancy); - var lastConfig = vscode.workspace.getConfiguration("vscode_vibrancy"); + if (isFirstload()) { + vscode.window.showInformationMessage(localize('messages.firstload'), { title: localize('messages.installIde') }) + .then(async (msg) => { + if (msg) { + await Update(); + await checkColorTheme(); + enabledRestart(); + } + }); + lockFirstload(); + } - vscode.workspace.onDidChangeConfiguration(() => { - newConfig = vscode.workspace.getConfiguration("vscode_vibrancy"); - if (!deepEqual(lastConfig, newConfig)) { - lastConfig = newConfig; - vscode.window.showInformationMessage(localize('messages.configupdate'), { title: localize('messages.reloadIde') }) - .then(async (msg) => { - if (msg) { - await Update(); - if (newConfig.theme !== vscode.workspace.getConfiguration("vscode_vibrancy")) { - await checkColorTheme(); - } - enabledRestart(); - } - }); - lockFirstload(); - } - }); + var lastConfig = vscode.workspace.getConfiguration("vscode_vibrancy"); + + vscode.workspace.onDidChangeConfiguration(() => { + newConfig = vscode.workspace.getConfiguration("vscode_vibrancy"); + if (!deepEqual(lastConfig, newConfig)) { + lastConfig = newConfig; + vscode.window.showInformationMessage(localize('messages.configupdate'), { title: localize('messages.reloadIde') }) + .then(async (msg) => { + if (msg) { + await Update(); + if (newConfig.theme !== vscode.workspace.getConfiguration("vscode_vibrancy")) { + await checkColorTheme(); + } + enabledRestart(); + } + }); + lockFirstload(); + } + }); } exports.activate = activate;