diff --git a/src/Terminal.jsx b/src/Terminal.jsx index 49bbe720..32bfaf87 100644 --- a/src/Terminal.jsx +++ b/src/Terminal.jsx @@ -119,6 +119,7 @@ export default class Terminal extends Component { dangerMode={this.props.dangerMode} className={!line.isEcho ? this.props.messageClassName : /* istanbul ignore next: Covered by interactivity tests */ undefined} style={!line.isEcho ? this.props.messageStyle : /* istanbul ignore next: Covered by interactivity tests */ undefined} + preserveSpacing={this.props.preserveSpacing} /> }) } diff --git a/src/TerminalMessage.jsx b/src/TerminalMessage.jsx index cb0223a4..b4982238 100644 --- a/src/TerminalMessage.jsx +++ b/src/TerminalMessage.jsx @@ -5,16 +5,20 @@ import defaults from 'defaults' import types from './defs/types/TerminalMessage' import sourceStyles from './defs/styles/TerminalMessage' +import preserveSpaces from './utils/preserveSpaces' + export default class TerminalMessage extends Component { static propTypes = types render () { - const { content, style, className } = this.props + const { content, style, className, preserveSpacing } = this.props const styles = { message: defaults(style, sourceStyles) } + content = preserveSpacing ? preserveSpaces(content) : content + return this.props.dangerMode && typeof content === 'string' ?
:
{content}
diff --git a/src/defs/types/Terminal.js b/src/defs/types/Terminal.js index 3747a182..44729235 100644 --- a/src/defs/types/Terminal.js +++ b/src/defs/types/Terminal.js @@ -39,7 +39,8 @@ const optionTypes = { noEchoBack: PropTypes.bool, noHistory: PropTypes.bool, noAutoScroll: PropTypes.bool, - noNewlineParsing: PropTypes.bool + noNewlineParsing: PropTypes.bool, + preserveSpacing: PropTypes.bool } const labelTypes = { diff --git a/src/defs/types/TerminalMessage.js b/src/defs/types/TerminalMessage.js index be7c1b29..38fb8fd6 100644 --- a/src/defs/types/TerminalMessage.js +++ b/src/defs/types/TerminalMessage.js @@ -4,5 +4,6 @@ export default { content: PropTypes.node, style: PropTypes.object, className: PropTypes.string, - dangerMode: PropTypes.bool + dangerMode: PropTypes.bool, + preserveSpacing: PropTypes.bool } diff --git a/src/utils/preserveSpaces.js b/src/utils/preserveSpaces.js new file mode 100644 index 00000000..5713938a --- /dev/null +++ b/src/utils/preserveSpaces.js @@ -0,0 +1,7 @@ +/** + * Returns a string where spacing is honored by html. + * @param {string} stringOutput + */ +export default function renderSpaces(stringOutput) { + return stringOutput.replace(/ /g, '\u00A0'); +}