UNPKG

kui-shell

Version:

This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool

115 lines 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const debug_1 = require("debug"); const path = require("path"); const capabilities_1 = require("@kui-shell/core/api/capabilities"); const errors_1 = require("@kui-shell/core/api/errors"); const events_1 = require("@kui-shell/core/api/events"); const inject_1 = require("@kui-shell/core/api/inject"); const debug = debug_1.default('plugins/core-support/zoom'); const keys = { ZOOM_RESET: 48, ZOOM_IN: 187, ZOOM_OUT: 189 }; const usage = { get: { command: 'get', strict: 'get', docs: 'Get the current font zoom level' }, reset: { command: 'reset', strict: 'reset', docs: 'Reset the current font zoom level to the default' }, set: { command: 'set', strict: 'set', docs: 'Set the current font zoom level', required: [ { name: 'level', numeric: true, docs: 'A zoom level', allowed: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, -1, -2], defaultValue: 1 } ] } }; const _set = newZoom => { const main = document.querySelector('body > .page'); if (newZoom <= 10 && newZoom >= -2) { main.setAttribute('data-zoom', newZoom); } else { throw new errors_1.default.UsageError({ message: 'Unsupported zoom level', usage: usage.set }); } const editors = document.querySelectorAll('.monaco-editor-wrapper'); for (let idx = 0; idx < editors.length; idx++) { const editor = editors[idx]['editor']; if (editor) { if (editor && editor.updateOptions) { const delta = editors[idx]['baseFontSize'] * 0.0625 * newZoom; const newFontSize = editors[idx]['baseFontSize'] + delta; editor.updateOptions({ fontSize: newFontSize }); } } } return true; }; const set = ({ argvNoOptions }) => { const newZoom = argvNoOptions[argvNoOptions.indexOf('set') + 1]; return _set(newZoom); }; const reset = () => _set(1); const listener = (event) => { const char = event.keyCode; if (event.shiftKey) { return; } if (char === keys.ZOOM_RESET && (event.ctrlKey || event.metaKey)) { debug('reset zoom'); event.preventDefault(); reset(); setTimeout(() => events_1.default.emit('/zoom', 1), 100); } else if ((char === keys.ZOOM_IN || char === keys.ZOOM_OUT) && (event.ctrlKey || event.metaKey) && !event.shiftKey) { event.preventDefault(); const main = document.querySelector('body > .page'); const factor = char === keys.ZOOM_IN ? 1 : -1; const newZoom = parseInt(main.getAttribute('data-zoom') || '1', 10) + factor; _set(newZoom); setTimeout(() => events_1.default.emit('/zoom', newZoom), 100); } }; const get = () => { const main = document.querySelector('body > .page'); return parseInt(main.getAttribute('data-zoom') || '1', 10); }; exports.default = (commandTree) => { commandTree.listen('/zoom/get', get, { usage: usage.get }); commandTree.listen('/zoom/set', set, { usage: usage.set }); commandTree.listen('/zoom/reset', reset, { usage: usage.reset }); if (typeof document === 'undefined') return; document.addEventListener('keydown', listener); if (capabilities_1.default.inBrowser()) { inject_1.injectCSS({ css: require('@kui-shell/plugin-core-support/web/css/zoom.css').toString(), key: 'zoom.css' }); } else { const root = path.dirname(require.resolve('@kui-shell/plugin-core-support/package.json')); inject_1.injectCSS(path.join(root, 'web/css/zoom.css')); } const overlay = document.createElement('div'); overlay.className = 'zoom-overlay hidden'; document.body.appendChild(overlay); }; //# sourceMappingURL=zoom.js.map