diff --git a/src/renderer/components/dock/pod-logs.scss b/src/renderer/components/dock/pod-logs.scss index bb2f223f72..9deea461eb 100644 --- a/src/renderer/components/dock/pod-logs.scss +++ b/src/renderer/components/dock/pod-logs.scss @@ -29,13 +29,16 @@ font-family: $font-monospace; font-size: smaller; white-space: pre; - -webkit-font-smoothing: auto; // Better readability on non-retina screens &:hover { background: $logRowHoverBackground; } span { + -webkit-font-smoothing: auto; // Better readability on non-retina screens + } + + span.overlay { border-radius: 2px; background-color: #8cc474b8; -webkit-font-smoothing: auto; diff --git a/src/renderer/components/dock/pod-logs.tsx b/src/renderer/components/dock/pod-logs.tsx index 8426a1b5ba..9985a0d913 100644 --- a/src/renderer/components/dock/pod-logs.tsx +++ b/src/renderer/components/dock/pod-logs.tsx @@ -1,5 +1,7 @@ import "./pod-logs.scss"; import React from "react"; +import AnsiUp from 'ansi_up'; +import DOMPurify from "dompurify" import { Trans } from "@lingui/macro"; import { action, computed, observable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; @@ -33,6 +35,7 @@ export class PodLogs extends React.Component { private logsElement = React.createRef(); // A reference for outer container in VirtualList private virtualListRef = React.createRef(); // A reference for VirtualList component private lastLineIsShown = true; // used for proper auto-scroll content after refresh + private colorConverter = new AnsiUp(); componentDidMount() { disposeOnUnmount(this, [ @@ -185,6 +188,7 @@ export class PodLogs extends React.Component { const { searchQuery, isActiveOverlay } = searchStore; const item = this.logs[rowIndex]; const contents: React.ReactElement[] = []; + const ansiToHtml = (ansi: string) => DOMPurify.sanitize(this.colorConverter.ansi_to_html(ansi)); if (searchQuery) { // If search is enabled, replace keyword with backgrounded // Case-insensitive search (lowercasing query and keywords in line) const regex = new RegExp(searchStore.escapeRegex(searchQuery), "gi"); @@ -195,19 +199,26 @@ export class PodLogs extends React.Component { pieces.forEach((piece, index) => { const active = isActiveOverlay(rowIndex, index); const lastItem = index === pieces.length - 1; + const overlayValue = matches.next().value; const overlay = !lastItem ? - {matches.next().value} : + : null contents.push( - {piece}{overlay} + + {overlay} ); }) } return (
- {contents.length > 1 ? contents : item} + {contents.length > 1 ? contents : ( + + )}
); }