import util from './util' export default class JsonViewer { constructor(data, $el) { util.evalCss(require('./json.scss')); this._data = [data]; this._$el = $el; this._appendTpl(); this._bindEvent(); } _appendTpl() { this._$el.html(jsonToHtml(this._data, true)); } _bindEvent() { this._$el.on('click', 'li', function (e) { var $this = util.$(this), $firstSpan = util.$(this).find('span').eq(0); if ($this.data('first-level') === 'true') return; if (!$firstSpan.hasClass('eruda-expanded')) return; e.stopImmediatePropagation(); var $ul = $this.find('ul').eq(0); if ($firstSpan.hasClass('eruda-collapsed')) { $firstSpan.rmClass('eruda-collapsed'); $ul.show(); } else { $firstSpan.addClass('eruda-collapsed'); $ul.hide(); } }); } } function jsonToHtml(data, firstLevel) { var ret = ''; for (let key in data) { if (key === 'erudaObjAbstract') continue; if (Object.hasOwnProperty.call(data, key)) ret += createEl(key, data[key], firstLevel); } return ret; } function createEl(key, val, firstLevel) { let type = 'object', isUnenumerable = false; if (key === 'erudaProto') key = '__proto__'; if (key === 'erudaId') return `
`; if (util.startWith(key, 'erudaUnenumerable')) { key = util.trim(key.replace('erudaUnenumerable', '')); isUnenumerable = true; } if (util.isArr(val)) type = 'array'; function wrapKey(key) { if (firstLevel) return ''; let keyClass = 'eruda-key'; if (isUnenumerable || util.contain(LIGHTER_KEY, key)) keyClass = 'eruda-key-lighter'; return `${encode(key)}: `; } if (val === null) { return `