ilp-core
Version:
ILP core module managing ledger abstraction
47 lines (39 loc) • 1.49 kB
JavaScript
import React, {Component, PropTypes} from 'react';
// import _extend from 'lodash/extend';
import classNames from 'classnames/bind';
import styles from './PrettyJson.scss';
const cx = classNames.bind(styles);
export default class PrettyJson extends Component {
static propTypes = {
json: PropTypes.object
};
_replace(match, ind, key, val, tra) {
const spanEnd = '</span>';
const keySpan = '<span class=' + cx('json-key') + '>';
const valSpan = '<span class=' + cx('json-value') + '>';
const strSpan = '<span class=' + cx('json-string') + '>';
let sps = ind || '';
if (key) {
sps = sps + '"' + keySpan + key.replace(/[": ]/g, '') + spanEnd + '": ';
}
if (val) {
sps = sps + (val[0] === '"' ? strSpan : valSpan) + val + spanEnd;
}
return sps + (tra || '');
}
_pretty(obj) {
const regLine = /^( *)("[^"]+": )?("[^"]*"|[\w.+-]*)?([,[{]|\[\s*\],?|\{\s*\},?)?$/mg;
return JSON.stringify(obj, null, 2).replace(/&/g, '&').replace(/\\"/g, '"').replace(/</g, '<').replace(/>/g, '>').replace(regLine, this._replace);
}
render() {
let { json } = this.props;
if (typeof json === 'string') {
try {
json = JSON.parse(json);
} catch (err) {
console.error('The string is not a valid json data!', err);
}
}
return React.createElement('pre', _extend({}, this.props, { className: 'json-pretty', dangerouslySetInnerHTML: { __html: this._pretty(json) } }));
}
}