You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

241 lines
7.4 KiB

2 years ago
"use strict";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
// Generated by CoffeeScript 2.5.1
var AnsiPainter, Layout, RenderKid, Styles, blockStyleApplier, cloneAndMergeDeep, inlineStyleApplier, isPlainObject, stripAnsi, terminalWidth, tools;
inlineStyleApplier = require('./renderKid/styleApplier/inline');
blockStyleApplier = require('./renderKid/styleApplier/block');
isPlainObject = require('lodash/isPlainObject');
var _require = require('./tools');
cloneAndMergeDeep = _require.cloneAndMergeDeep;
AnsiPainter = require('./AnsiPainter');
Styles = require('./renderKid/Styles');
Layout = require('./Layout');
tools = require('./tools');
stripAnsi = require('strip-ansi');
terminalWidth = require('./tools').getCols();
module.exports = RenderKid = function () {
var self;
var RenderKid = /*#__PURE__*/function () {
function RenderKid() {
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, RenderKid);
this.tools = self.tools;
this._config = cloneAndMergeDeep(self._defaultConfig, config);
this._initStyles();
}
_createClass(RenderKid, [{
key: "_initStyles",
value: function _initStyles() {
return this._styles = new Styles();
}
}, {
key: "style",
value: function style() {
return this._styles.setRule.apply(this._styles, arguments);
}
}, {
key: "_getStyleFor",
value: function _getStyleFor(el) {
return this._styles.getStyleFor(el);
}
}, {
key: "render",
value: function render(input) {
var withColors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
return this._paint(this._renderDom(this._toDom(input)), withColors);
}
}, {
key: "_toDom",
value: function _toDom(input) {
if (typeof input === 'string') {
return this._parse(input);
} else if (isPlainObject(input) || Array.isArray(input)) {
return this._objToDom(input);
} else {
throw Error("Invalid input type. Only strings, arrays and objects are accepted");
}
}
}, {
key: "_objToDom",
value: function _objToDom(o) {
var injectFakeRoot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (injectFakeRoot) {
o = {
body: o
};
}
return tools.objectToDom(o);
}
}, {
key: "_paint",
value: function _paint(text, withColors) {
var painted;
painted = AnsiPainter.paint(text);
if (withColors) {
return painted;
} else {
return stripAnsi(painted);
}
}
}, {
key: "_parse",
value: function _parse(string) {
var injectFakeRoot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (injectFakeRoot) {
string = '<body>' + string + '</body>';
}
return tools.stringToDom(string);
}
}, {
key: "_renderDom",
value: function _renderDom(dom) {
var bodyTag, layout, rootBlock;
bodyTag = dom[0];
layout = new Layout(this._config.layout);
rootBlock = layout.getRootBlock();
this._renderBlockNode(bodyTag, null, rootBlock);
return layout.get();
}
}, {
key: "_renderChildrenOf",
value: function _renderChildrenOf(parentNode, parentBlock) {
var i, len, node, nodes;
nodes = parentNode.children;
for (i = 0, len = nodes.length; i < len; i++) {
node = nodes[i];
this._renderNode(node, parentNode, parentBlock);
}
}
}, {
key: "_renderNode",
value: function _renderNode(node, parentNode, parentBlock) {
if (node.type === 'text') {
this._renderText(node, parentNode, parentBlock);
} else if (node.name === 'br') {
this._renderBr(node, parentNode, parentBlock);
} else if (this._isBlock(node)) {
this._renderBlockNode(node, parentNode, parentBlock);
} else if (this._isNone(node)) {
return;
} else {
this._renderInlineNode(node, parentNode, parentBlock);
}
}
}, {
key: "_renderText",
value: function _renderText(node, parentNode, parentBlock) {
var ref, text;
text = node.data;
text = text.replace(/\s+/g, ' '); // let's only trim if the parent is an inline element
if ((parentNode != null ? (ref = parentNode.styles) != null ? ref.display : void 0 : void 0) !== 'inline') {
text = text.trim();
}
if (text.length === 0) {
return;
}
text = text.replace(/&nl;/g, "\n");
return parentBlock.write(text);
}
}, {
key: "_renderBlockNode",
value: function _renderBlockNode(node, parentNode, parentBlock) {
var after, before, block, blockConfig;
var _blockStyleApplier$ap = blockStyleApplier.applyTo(node, this._getStyleFor(node));
before = _blockStyleApplier$ap.before;
after = _blockStyleApplier$ap.after;
blockConfig = _blockStyleApplier$ap.blockConfig;
block = parentBlock.openBlock(blockConfig);
if (before !== '') {
block.write(before);
}
this._renderChildrenOf(node, block);
if (after !== '') {
block.write(after);
}
return block.close();
}
}, {
key: "_renderInlineNode",
value: function _renderInlineNode(node, parentNode, parentBlock) {
var after, before;
var _inlineStyleApplier$a = inlineStyleApplier.applyTo(node, this._getStyleFor(node));
before = _inlineStyleApplier$a.before;
after = _inlineStyleApplier$a.after;
if (before !== '') {
parentBlock.write(before);
}
this._renderChildrenOf(node, parentBlock);
if (after !== '') {
return parentBlock.write(after);
}
}
}, {
key: "_renderBr",
value: function _renderBr(node, parentNode, parentBlock) {
return parentBlock.write("\n");
}
}, {
key: "_isBlock",
value: function _isBlock(node) {
return !(node.type === 'text' || node.name === 'br' || this._getStyleFor(node).display !== 'block');
}
}, {
key: "_isNone",
value: function _isNone(node) {
return !(node.type === 'text' || node.name === 'br' || this._getStyleFor(node).display !== 'none');
}
}]);
return RenderKid;
}();
;
self = RenderKid;
RenderKid.AnsiPainter = AnsiPainter;
RenderKid.Layout = Layout;
RenderKid.quote = tools.quote;
RenderKid.tools = tools;
RenderKid._defaultConfig = {
layout: {
terminalWidth: terminalWidth
}
};
return RenderKid;
}.call(void 0);