kui-shell
Version:
This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool
258 lines • 11.3 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const debug_1 = require("debug");
const core_1 = require("@kui-shell/core");
const usage_1 = require("./usage");
const package_json_1 = require("@kui-shell/settings/package.json");
const strings = core_1.i18n('plugin-core-support');
const debug = debug_1.default('plugins/core-support/about');
function markdown() {
return __awaiter(this, void 0, void 0, function* () {
const marked = yield Promise.resolve().then(() => require('marked'));
const renderer = new marked.Renderer();
renderer.link = (href, title, text) => {
return `<a href="${href}" title="${title}" class="bx--link">${text}</a>`;
};
return (raw) => marked(raw, { renderer });
});
}
function renderAbout() {
return __awaiter(this, void 0, void 0, function* () {
const { shell } = yield Promise.resolve().then(() => require('electron'));
const flexContent = document.createElement('div');
flexContent.classList.add('page-content');
const topContent = document.createElement('div');
topContent.classList.add('about-window-top-content');
flexContent.appendChild(topContent);
const badges = [];
const openHome = () => shell.openExternal(core_1.Settings.theme.ogUrl || package_json_1.homepage);
if (package_json_1.license) {
badges.push(package_json_1.license);
}
const logo = document.createElement('div');
topContent.appendChild(logo);
logo.classList.add('logo');
const aboutImage = core_1.Settings.theme.wideIcon || core_1.Settings.theme.largeIcon;
if (aboutImage) {
const iconP = document.createElement('div');
const icon = document.createElement('img');
icon.addEventListener('click', openHome);
icon.classList.add('clickable');
iconP.appendChild(icon);
logo.appendChild(iconP);
icon.src = aboutImage;
icon.alt = core_1.Settings.theme.productName;
if (core_1.Settings.theme.wideIcon) {
icon.classList.add('kui--wide-icon');
}
}
const description = core_1.Settings.theme.description || core_1.Settings.theme.ogDescription;
if (description) {
const marked = yield markdown();
const longDescription = document.createElement('div');
longDescription.classList.add('about-window-long-description');
logo.appendChild(longDescription);
if (typeof description === 'string') {
try {
longDescription.innerHTML = marked(description);
}
catch (err) {
console.error('error rendering markdown', err);
longDescription.innerText = description;
}
}
else {
longDescription.innerHTML = marked(core_1.i18nFromMap(description));
}
}
return flexContent;
});
}
function renderVersion(name) {
const bottomContent = document.createElement('div');
bottomContent.classList.add('about-window-bottom-content');
const table = document.createElement('table');
table.classList.add('bx--data-table');
table.classList.add('result-table');
table.classList.add('versions');
table.setAttribute('kui-table-style', 'Medium');
bottomContent.appendChild(table);
const versionModel = process.versions;
versionModel[name] = package_json_1.version;
versionModel['build'] = core_1.Settings.config['build-info'];
const thead = document.createElement('thead');
thead.classList.add('entity');
table.appendChild(thead);
const headerRow = document.createElement('tr');
thead.appendChild(headerRow);
headerRow.className = 'header-row entity-attributes';
const column1 = document.createElement('th');
const column1Text = document.createElement('span');
column1Text.classList.add('cell-inner');
column1Text.classList.add('bx--table-header-label');
column1.appendChild(column1Text);
headerRow.appendChild(column1);
column1Text.innerText = 'component';
column1.className = 'header-cell';
const column2 = document.createElement('th');
const column2Text = document.createElement('span');
column2Text.classList.add('cell-inner');
column2Text.classList.add('bx--table-header-label');
column2.appendChild(column2Text);
headerRow.appendChild(column2);
column2Text.innerText = 'version';
column2.className = 'header-cell';
const tbody = document.createElement('tbody');
tbody.classList.add('entity');
table.appendChild(tbody);
for (const component of [name, 'build', 'electron', 'chrome', 'node', 'v8']) {
const version = versionModel[component];
if (version !== undefined) {
const row = document.createElement('tr');
row.classList.add('entity-attributes');
tbody.appendChild(row);
const nameCell = row.insertCell(-1);
const nameCellText = document.createElement('span');
nameCell.appendChild(nameCellText);
nameCellText.classList.add('cell-inner');
nameCellText.innerText = component;
const versionCell = row.insertCell(-1);
const versionCellText = document.createElement('span');
versionCell.appendChild(versionCellText);
versionCellText.classList.add('cell-inner');
versionCellText.innerText = versionModel[component];
row.appendChild(versionCell);
if (component === name) {
nameCell.classList.add('semi-bold');
nameCell.classList.add('cyan-text');
versionCell.classList.add('semi-bold');
versionCell.classList.add('cyan-text');
}
else {
nameCell.classList.add('lighter-text');
}
}
}
return bottomContent;
}
function renderGettingStarted({ REPL }) {
return __awaiter(this, void 0, void 0, function* () {
if (core_1.Settings.theme.gettingStarted && typeof core_1.Settings.theme.gettingStarted !== 'string') {
const marked = yield markdown();
const wrapper = document.createElement('div');
wrapper.classList.add('page-content');
wrapper.innerHTML = marked(core_1.i18nFromMap(core_1.Settings.theme.gettingStarted));
return wrapper;
}
else if (typeof core_1.Settings.theme.gettingStarted === 'string' && core_1.Settings.theme.gettingStarted !== 'getting started') {
return REPL.qexec(core_1.Settings.theme.gettingStarted);
}
else {
console.error('no getting started content defined by client');
const empty = document.createElement('div');
return empty;
}
});
}
const aboutWindow = (args) => __awaiter(void 0, void 0, void 0, function* () {
debug('aboutWindow');
const { parsedOptions, REPL } = args;
try {
core_1.UI.injectCSS({
css: require('@kui-shell/plugin-core-support/web/css/about.css'),
key: 'about-window-css'
});
}
catch (err) {
const { dirname, join } = yield Promise.resolve().then(() => require('path'));
const ourRootDir = dirname(require.resolve('@kui-shell/plugin-core-support/package.json'));
core_1.UI.injectCSS(join(ourRootDir, 'web/css/about.css'));
}
const name = core_1.Settings.theme.productName || (yield Promise.resolve().then(() => require('electron'))).app.getName();
const content = document.createElement('div');
content.classList.add('about-window');
const defaultMode = parsedOptions.mode || 'about';
debug('defaultMode', defaultMode);
if (parsedOptions.content) {
const response = yield REPL.qexec(parsedOptions.content, undefined, undefined, { render: true });
debug('rendering content', parsedOptions.content, response);
const container = document.createElement('div');
const innerContainer = document.createElement('div');
container.classList.add('about-window-bottom-content');
innerContainer.style.display = 'flex';
innerContainer.style.flex = '1';
response.style.flex = '1';
container.appendChild(innerContainer);
innerContainer.appendChild(response);
content.appendChild(container);
}
else if (defaultMode === 'gettingStarted') {
content.appendChild(yield renderGettingStarted(args));
}
else if (defaultMode === 'version') {
content.appendChild(yield renderVersion(name));
}
else if (defaultMode === 'about') {
content.appendChild(yield renderAbout());
}
const standardModes = [
{ mode: 'about', label: strings('About'), direct: 'about' },
{
mode: 'gettingStarted',
label: strings('Getting Started'),
direct: 'about --mode gettingStarted'
},
{ mode: 'configure', label: strings('Configure'), direct: 'about --mode configure --content themes' },
{ mode: 'version', label: strings('Version'), direct: 'about --mode version' }
];
const modes = standardModes.concat(core_1.Settings.theme.about || []);
modes.find(_ => _.mode === defaultMode).defaultMode = true;
return {
type: 'custom',
isEntity: true,
prettyType: 'about',
presentation: (document.body.classList.contains('subwindow') && core_1.UI.Presentation.SidecarFullscreen) ||
core_1.UI.Presentation.SidecarThin,
modes,
name,
content
};
});
const getVersion = () => {
debug('getVersion');
return package_json_1.version;
};
const reportVersion = () => {
debug('reportVersion');
const version = getVersion();
if (core_1.Settings.config['build-info']) {
return `${version} (build ${core_1.Settings.config['build-info']})`;
}
return version;
};
exports.default = (commandTree) => {
debug('init');
if (!commandTree) {
return aboutWindow({});
}
commandTree.listen('/version', reportVersion, { usage: usage_1.default.version });
commandTree.listen('/about', aboutWindow, {
hidden: true,
needsUI: true,
inBrowserOk: true
});
commandTree.listen('/getting/started', ({ REPL }) => REPL.qexec('about --mode gettingStarted'), {
needsUI: true,
inBrowserOk: true
});
};
//# sourceMappingURL=about.js.map