UNPKG

kui-shell

Version:

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

258 lines 11.3 kB
"use strict"; 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