File size: 4,505 Bytes
271613e 2298b67 271613e 2298b67 271613e 2298b67 271613e 2298b67 271613e 2298b67 271613e 2298b67 271613e 2298b67 271613e 2298b67 271613e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
import trim from 'licia/trim'
import isEmpty from 'licia/isEmpty'
import map from 'licia/map'
import each from 'licia/each'
import escape from 'licia/escape'
import copy from 'licia/copy'
import isJson from 'licia/isJson'
import Emitter from 'licia/Emitter'
import truncate from 'licia/truncate'
import { classPrefix as c } from '../lib/util'
export default class Detail extends Emitter {
constructor($container, devtools) {
super()
this._$container = $container
this._devtools = devtools
this._detailData = {}
this._bindEvent()
}
show(data) {
if (data.resTxt && trim(data.resTxt) === '') {
delete data.resTxt
}
if (isEmpty(data.resHeaders)) {
delete data.resHeaders
}
if (isEmpty(data.reqHeaders)) {
delete data.reqHeaders
}
let postData = ''
if (data.data) {
postData = `<pre class="${c('data')}">${escape(data.data)}</pre>`
}
let reqHeaders = '<tr><td>γͺγ</td></tr>'
if (data.reqHeaders) {
reqHeaders = map(data.reqHeaders, (val, key) => {
return `<tr>
<td class="${c('key')}">${escape(key)}</td>
<td>${escape(val)}</td>
</tr>`
}).join('')
}
let resHeaders = '<tr><td>γͺγ</td></tr>'
if (data.resHeaders) {
resHeaders = map(data.resHeaders, (val, key) => {
return `<tr>
<td class="${c('key')}">${escape(key)}</td>
<td>${escape(val)}</td>
</tr>`
}).join('')
}
let resTxt = ''
if (data.resTxt) {
let text = data.resTxt
if (text.length > MAX_RES_LEN) {
text = truncate(text, MAX_RES_LEN)
}
resTxt = `<pre class="${c('response')}">${escape(text)}</pre>`
}
const html = `<div class="${c('control')}">
<span class="${c('icon-arrow-left back')}"></span>
<span class="${c('icon-delete back')}"></span>
<span class="${c('url')}">${escape(data.url)}</span>
<span class="${c('icon-copy copy-res')}"></span>
</div>
<div class="${c('http')}">
${postData}
<div class="${c('section')}">
<h2>γ¬γΉγγ³γΉγγγγΌ</h2>
<table class="${c('headers')}">
<tbody>
${resHeaders}
</tbody>
</table>
</div>
<div class="${c('section')}">
<h2>γͺγ―γ¨γΉγγγγγΌ</h2>
<table class="${c('headers')}">
<tbody>
${reqHeaders}
</tbody>
</table>
</div>
${resTxt}
</div>`
this._$container.html(html).show()
this._detailData = data
}
hide() {
this._$container.hide()
this.emit('hide')
}
_copyRes = () => {
const detailData = this._detailData
let data = `${detailData.method} ${detailData.url} ${detailData.status}\n`
if (!isEmpty(detailData.data)) {
data += '\nγͺγ―γ¨γΉγγγΌγΏ\n\n'
data += `${detailData.data}\n`
}
if (!isEmpty(detailData.reqHeaders)) {
data += '\nγͺγ―γ¨γΉγγγγγΌ\n\n'
each(detailData.reqHeaders, (val, key) => (data += `${key}: ${val}\n`))
}
if (!isEmpty(detailData.resHeaders)) {
data += '\nγ¬γΉγγ³γΉγγγγΌ\n\n'
each(detailData.resHeaders, (val, key) => (data += `${key}: ${val}\n`))
}
if (detailData.resTxt) {
data += `\n${detailData.resTxt}\n`
}
copy(data)
this._devtools.notify('γ³γγΌγγΎγγ', { icon: 'success' })
}
_bindEvent() {
const devtools = this._devtools
this._$container
.on('click', c('.back'), () => this.hide())
.on('click', c('.copy-res'), this._copyRes)
.on('click', c('.http .response'), () => {
const data = this._detailData
const resTxt = data.resTxt
if (isJson(resTxt)) {
return showSources('object', resTxt)
}
switch (data.subType) {
case 'css':
return showSources('css', resTxt)
case 'html':
return showSources('html', resTxt)
case 'javascript':
return showSources('js', resTxt)
case 'json':
return showSources('object', resTxt)
}
switch (data.type) {
case 'image':
return showSources('img', data.url)
}
})
const showSources = (type, data) => {
const sources = devtools.get('sources')
if (!sources) {
return
}
sources.set(type, data)
devtools.showTool('sources')
}
}
}
const MAX_RES_LEN = 100000
|