Skip to content

Commit dec976e

Browse files
author
Daniel Herzog
committed
Reduced number of elements used when showing headers, stopped using one <pre> per line, stopped using <span> when we're not actually highlighting the string; Fitted content images in parsed mode; Some template cleanup; One more color change for network headers;
1 parent acfe12a commit dec976e

File tree

3 files changed

+104
-100
lines changed

3 files changed

+104
-100
lines changed

src/network/network_details_templates.js

Lines changed: 91 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,9 @@ window.templates.network || (window.templates.network = {});
88
var HTTP_BOUNDARY_CLASS = "http-token-type-boundary";
99
var TEXT_TYPES = ["markup", "script", "css", "text"];
1010

11-
templates._col_or_row = function(template)
11+
templates._pre = function(content)
1212
{
13-
// template is either ["elem", "text"], which will be wrapped in a column
14-
// or [["elem", "text"], ["elem", "text"]] which will be wrapped in a row.
15-
if (Array.isArray(template[0]) && template[1])
16-
{
17-
return ["tr", template[0], template[1]];
18-
}
19-
return ["tr", ["td", template, "colspan", "2"]];
20-
};
21-
22-
templates._pre = function(str, additional_classname)
23-
{
24-
var classname = "mono";
25-
if (additional_classname)
26-
classname += " " + additional_classname;
27-
28-
return ["pre", str, "class", classname];
13+
return ["pre", content, "class", "mono"];
2914
};
3015

3116
templates.details = function(entry, left_val, do_raw)
@@ -188,22 +173,38 @@ templates._header_token_templ = function(state, token)
188173
{
189174
var TYPE = 0;
190175
var STR = 1;
176+
var highlighted_types = [
177+
cls.HTTPHeaderTokenizer.types.NAME,
178+
cls.HTTPHeaderTokenizer.types.FIRST_LINE_PART
179+
];
191180
var attrs = ["class", cls.HTTPHeaderTokenizer.classnames[token[TYPE]]];
192181

193-
if (token[TYPE] === cls.HTTPHeaderTokenizer.types.NAME)
194-
{
195-
attrs.extend(["data-spec", "http#" + token[STR].trim()]);
196-
}
197-
else if (token[TYPE] === cls.HTTPHeaderTokenizer.types.FIRST_LINE_PART)
182+
if (highlighted_types.indexOf(token[TYPE]) != -1)
198183
{
199-
if (state.data_spec_firstline_tokens.contains(state.firstline_tokens))
184+
if (token[TYPE] === cls.HTTPHeaderTokenizer.types.NAME)
185+
{
186+
attrs.extend(["data-spec", "http#" + token[STR].trim()]);
187+
}
188+
else if (token[TYPE] === cls.HTTPHeaderTokenizer.types.FIRST_LINE_PART)
189+
{
190+
if (state.data_spec_firstline_tokens.contains(state.firstline_tokens))
191+
{
192+
// Add data-spec attributes on certain firstline tokens, tracked in state
193+
attrs.extend(["data-spec", "http#" + (token[STR]).trim()]);
194+
}
195+
state.firstline_tokens++;
196+
}
197+
var buffer = state.str_buffer;
198+
var ret = [["span", token[STR]].concat(attrs)];
199+
if (buffer)
200200
{
201-
// Add data-spec attributes on certain firstline tokens, tracked in state
202-
attrs.extend(["data-spec", "http#" + (token[STR]).trim()]);
201+
ret.unshift(buffer);
202+
state.str_buffer = "";
203203
}
204-
state.firstline_tokens++;
204+
return ret;
205205
}
206-
return ["span", token[STR]].concat(attrs);
206+
state.str_buffer += token[STR];
207+
return [];
207208
};
208209

209210
templates._token_receiver = function(tokens, token_type, token)
@@ -223,18 +224,10 @@ templates._request_headers = function(req, do_raw)
223224
var tokenizer = new cls.HTTPHeaderTokenizer();
224225
tokenizer.tokenize(req.request_headers_raw, this._token_receiver.bind(this, req.header_tokens));
225226
}
226-
227227
var METHOD = 0;
228-
var data_spec_firstline_tokens = [METHOD];
229-
var state_holder = new cls.HTTPHeaderTokenizer.TokenStateholder(data_spec_firstline_tokens);
230-
var map_func = this._header_token_templ.bind(this, state_holder);
231-
return [
232-
this._pre(req.header_tokens.map(map_func))
233-
];
228+
return this._pre(this.headers_tonkenized(req.header_tokens, [METHOD]));
234229
}
235-
return [
236-
ui_strings.S_NETWORK_REQUEST_NO_HEADERS_LABEL
237-
];
230+
return ui_strings.S_NETWORK_REQUEST_NO_HEADERS_LABEL;
238231
}
239232

240233
var ret = [];
@@ -258,19 +251,26 @@ templates._request_headers = function(req, do_raw)
258251
if (req.firstline_tokens.length)
259252
{
260253
var METHOD = 0;
261-
var data_spec_firstline_tokens = [METHOD];
262-
var state_holder = new cls.HTTPHeaderTokenizer.TokenStateholder(data_spec_firstline_tokens);
263-
var map_func = this._header_token_templ.bind(this, state_holder);
264-
firstline = req.firstline_tokens.map(map_func);
254+
ret.unshift(this.headers_tonkenized(req.firstline_tokens, [METHOD]));
265255
}
266-
ret.unshift(this._pre(firstline));
267256
}
268257
}
269-
return [
270-
ret
271-
];
258+
return templates._pre(ret);
272259
};
273260

261+
templates.headers_tonkenized = function(tokens, data_spec_firstline_tokens)
262+
{
263+
var state_holder = new cls.HTTPHeaderTokenizer.TokenStateholder(data_spec_firstline_tokens);
264+
var map_func = this._header_token_templ.bind(this, state_holder);
265+
var token_templates = tokens.reduce(function(previous_val, current_val, index){
266+
if (index == 1)
267+
previous_val = map_func(previous_val);
268+
return previous_val.concat(map_func(current_val));
269+
});
270+
token_templates.push(state_holder.str_buffer);
271+
return token_templates;
272+
}
273+
274274
templates._response_headers = function(resp, do_raw)
275275
{
276276
if (do_raw)
@@ -285,19 +285,14 @@ templates._response_headers = function(resp, do_raw)
285285
if (resp.header_tokens.length)
286286
{
287287
var RESPONSECODE = 1;
288-
var data_spec_firstline_tokens = [RESPONSECODE];
289-
var state_holder = new cls.HTTPHeaderTokenizer.TokenStateholder(data_spec_firstline_tokens);
290-
var map_func = this._header_token_templ.bind(this, state_holder);
291-
return [
292-
this._pre(resp.header_tokens.map(map_func))
293-
];
288+
return this._pre(this.headers_tonkenized(resp.header_tokens, [RESPONSECODE]));
294289
}
295290
return [
296291
ui_strings.S_NETWORK_REQUEST_NO_HEADERS_LABEL
297292
];
298293
}
299294

300-
var ret = [resp.response_headers.map(this._headers_pseudo_raw)];
295+
var ret = resp.response_headers && resp.response_headers.map(this._headers_pseudo_raw) || [];
301296
if (resp.first_line)
302297
{
303298
var firstline = [];
@@ -310,37 +305,38 @@ templates._response_headers = function(resp, do_raw)
310305

311306
if (resp.firstline_tokens.length)
312307
{
313-
var RESPONSECODE = 1;
314-
var data_spec_firstline_tokens = [RESPONSECODE];
315-
var state_holder = new cls.HTTPHeaderTokenizer.TokenStateholder(data_spec_firstline_tokens);
316-
var map_func = this._header_token_templ.bind(this, state_holder);
317-
firstline = resp.firstline_tokens.map(map_func);
308+
ret.unshift(this.headers_tonkenized(resp.firstline_tokens, [RESPONSECODE]));
318309
}
319-
ret.unshift(this._pre(firstline));
320310
}
321311

322-
return [
323-
ret
324-
];
312+
return templates._pre(ret);
325313
};
326314

327315
templates._headers_pseudo_raw = function(header)
328316
{
317+
/* Shortcutting. For raw headers, highlighted types are defined like this:
318+
var highlighted_types = [
319+
cls.HTTPHeaderTokenizer.types.NAME,
320+
cls.HTTPHeaderTokenizer.types.FIRST_LINE_PART
321+
];
322+
*/
329323
var template = [
330324
["span", header.name,
331325
"data-spec", "http#" + header.name.trim(),
332-
"class", cls.HTTPHeaderTokenizer.classnames[cls.HTTPHeaderTokenizer.types.NAME]
326+
"class", cls.HTTPHeaderTokenizer.classnames[cls.HTTPHeaderTokenizer.types.NAME],
327+
"data-tooltip", "network-header-tooltip",
328+
"data-header-name", header.name.trim().toLowerCase()
333329
],
334-
["span", ": " + header.value,
335-
"class", cls.HTTPHeaderTokenizer.classnames[cls.HTTPHeaderTokenizer.types.VALUE]]
330+
": " + header.value + "\n"
336331
];
337-
return templates._pre(template);
332+
return template;
338333
};
339334

340335
templates.param_cells = function(name_value)
341336
{
342337
var parts = name_value.replace(/\+/g, " ").split("=");
343338
return [
339+
"tr",
344340
["td", decodeURIComponent(parts[0]), "class", "mono"],
345341
["td", decodeURIComponent(parts[1]), "class", "mono"]
346342
];
@@ -351,47 +347,55 @@ templates._request_body = function(req, do_raw)
351347
if (req.request_body == null)
352348
return [];
353349

354-
var ret = [this._pre("\n")];
350+
var ret; // todo: might revisit "ret", maybe return more often so that it's clear nothing more happens.
355351
if (req.request_body.partList.length) // Multipart
356352
{
353+
var multi_p_template = [];
357354
var use_raw_boundary = Boolean(do_raw && req.boundary);
358-
var boundary = use_raw_boundary ? req.boundary : ["hr"];
355+
var boundary = use_raw_boundary ? ["span", req.boundary, "class", HTTP_BOUNDARY_CLASS] : ["hr"];
359356
for (var n = 0, part; part = req.request_body.partList[n]; n++)
360357
{
361358
if (n === 0)
362-
ret.push(this._pre(boundary, HTTP_BOUNDARY_CLASS));
359+
multi_p_template.push(boundary);
363360

364-
ret.extend(part.headerList.map(this._headers_pseudo_raw));
365-
ret.push(this._pre("\n"));
361+
multi_p_template.extend(part.headerList.map(this._headers_pseudo_raw));
362+
multi_p_template.push(this._pre("\n"));
366363
if (part.content && part.content.stringData)
367-
ret.push(this._pre(part.content.stringData, "mono network-body"));
364+
multi_p_template.push(part.content.stringData);
368365
else
369-
ret.push(["p", ui_strings.S_NETWORK_N_BYTE_BODY.replace("%s", part.contentLength)]);
366+
multi_p_template.push(["p", ui_strings.S_NETWORK_N_BYTE_BODY.replace("%s", part.contentLength)]);
370367

371368
if (use_raw_boundary && part === req.request_body.partList.last)
372-
boundary += "--\n";
373-
374-
ret.push(this._pre(boundary, HTTP_BOUNDARY_CLASS));
369+
{
370+
var TEXTCONTENT = 1;
371+
boundary[TEXTCONTENT] += "--\n";
372+
}
373+
multi_p_template.push(boundary);
375374
}
375+
ret = multi_p_template;
376376
}
377377
else if (req.request_body.mimeType.startswith("application/x-www-form-urlencoded"))
378378
{
379+
var url_enc_template = [];
379380
if (do_raw)
380381
{
381-
ret.push(this._pre(req.request_body.content.stringData, "network-body"));
382+
url_enc_template.push(req.request_body.content.stringData);
382383
}
383384
else
384385
{
385386
var parts = req.request_body.content.stringData.split("&");
386387
var rows = [];
387388
rows.push([
388-
["th", ui_strings.S_LABEL_NETWORK_POST_DATA_NAME],
389-
["th", ui_strings.S_LABEL_NETWORK_POST_DATA_VALUE]
390-
]);
389+
"tr",
390+
["th", ["p", ui_strings.S_LABEL_NETWORK_POST_DATA_NAME]],
391+
["th", ["p", ui_strings.S_LABEL_NETWORK_POST_DATA_VALUE]]
392+
]
393+
);
391394
rows.extend(parts.map(this.param_cells));
392395
var table = ["table", rows];
393-
ret.push(table);
396+
url_enc_template.push(table);
394397
}
398+
ret = url_enc_template;
395399
}
396400
else // not multipart or form.
397401
{
@@ -400,22 +404,22 @@ templates._request_body = function(req, do_raw)
400404
var type = cls.ResourceUtil.mime_to_type(req.request_body.mimeType);
401405
if (TEXT_TYPES.contains(type))
402406
{
403-
ret.push(this._pre(req.request_body.content.stringData, "network-body"));
407+
ret = req.request_body.content.stringData;
404408
}
405409
else
406410
{
407411
if (req.request_body.mimeType)
408412
{
409-
ret.push(["p", ui_strings.S_NETWORK_CANT_DISPLAY_TYPE.replace("%s", req.request_body.mimeType)]);
413+
ret = ["p", ui_strings.S_NETWORK_CANT_DISPLAY_TYPE.replace("%s", req.request_body.mimeType)];
410414
}
411415
else
412416
{
413-
ret.push(["p", ui_strings.S_NETWORK_UNKNOWN_MIME_TYPE]);
417+
ret = ["p", ui_strings.S_NETWORK_UNKNOWN_MIME_TYPE];
414418
}
415419
}
416420
}
417421
}
418-
return ret;
422+
return [this._pre("\n"), templates._pre(ret)];
419423
};
420424

421425

@@ -454,20 +458,19 @@ templates._response_body = function(resp, do_raw, is_last_response)
454458
if (TEXT_TYPES.contains(resp.logger_entry_type))
455459
{
456460
ret.push(
457-
this._pre(resp.responsebody.content.stringData, "network-body")
461+
this._pre(resp.responsebody.content.stringData) // todo: don't pre here
458462
);
459463
}
460464
else if (resp.logger_entry_type == "image")
461465
{
462466
ret.push(
463-
["img", "src", resp.responsebody.content.stringData, "class", "network-body"]
467+
["img", "src", resp.responsebody.content.stringData]
464468
);
465469
}
466470
else
467471
{
468472
ret.push(
469-
["span", ui_strings.S_NETWORK_REQUEST_DETAIL_UNDISPLAYABLE_BODY_LABEL.replace("%s", resp.logger_entry_mime),
470-
"class", "network-body"]
473+
["p", ui_strings.S_NETWORK_REQUEST_DETAIL_UNDISPLAYABLE_BODY_LABEL.replace("%s", resp.logger_entry_mime)]
471474
);
472475
}
473476
}

src/network/network_style.css

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@
338338

339339
.network_logger .header-token-type-name
340340
{
341-
color: #F19800;
341+
color: #149CBD;
342342
}
343343

344344
.network_logger .http-token-type-boundary
@@ -359,13 +359,23 @@
359359
{
360360
margin: 0;
361361
}
362+
362363
.parsed pre,
363364
.parsed p,
364365
.parsed td
365366
{
366367
word-wrap: break-word;
367368
}
368369

370+
.parsed .entry-details img {
371+
width: 100%;
372+
}
373+
374+
.network-details-container p
375+
{
376+
font: 11px "menu";
377+
}
378+
369379
.network-details-container table
370380
{
371381
border-collapse: collapse;
@@ -374,7 +384,7 @@
374384
.network-details-container td,
375385
.network-details-container th
376386
{
377-
padding: 0;
387+
padding: 0 5px 0 0;
378388
vertical-align: top;
379389
}
380390

@@ -619,13 +629,3 @@
619629
width: 100%;
620630
margin: 10px 0;
621631
}
622-
623-
table .network-body
624-
{
625-
/* work-around CORE-46966: Big pre element breaks layout in a table */
626-
float: left;
627-
margin-right: -10000000px;
628-
/* todo: word-wrap: break-word; won't really work without this, doesn't make sense with smaller content though
629-
width: 100%;
630-
*/
631-
}

src/syntaxhighlight/http-header/tokenizer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,5 @@ cls.HTTPHeaderTokenizer.TokenStateholder = function(data_spec_firstline_tokens)
128128
{
129129
this.data_spec_firstline_tokens = data_spec_firstline_tokens;
130130
this.firstline_tokens = 0;
131+
this.str_buffer = "";
131132
};

0 commit comments

Comments
 (0)