kui-shell
Version:
This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool
115 lines • 4 kB
JavaScript
;
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