monaca-lib
Version:
Monaca cloud API bindings for JavaScript
112 lines (97 loc) • 4.27 kB
JavaScript
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @constructor
* @extends {WebInspector.VBox}
* @param {!WebInspector.NetworkRequest} request
*/
WebInspector.EventSourceMessagesView = function(request)
{
WebInspector.VBox.call(this);
this.registerRequiredCSS("network/eventSourceMessagesView.css");
this.element.classList.add("event-source-messages-view");
this._request = request;
var columns = [
{id: "id", title: WebInspector.UIString("Id"), sortable: true, weight: 8},
{id: "type", title: WebInspector.UIString("Type"), sortable: true, weight: 8},
{id: "data", title: WebInspector.UIString("Data"), sortable: false, weight: 88},
{id: "time", title: WebInspector.UIString("Time"), sortable: true, weight: 8}
];
this._dataGrid = new WebInspector.SortableDataGrid(columns);
this._dataGrid.setStickToBottom(true);
this._dataGrid.markColumnAsSortedBy("time", WebInspector.DataGrid.Order.Ascending);
this._sortItems();
this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this._sortItems, this);
this._dataGrid.setName("EventSourceMessagesView");
this._dataGrid.show(this.element);
}
WebInspector.EventSourceMessagesView.prototype = {
wasShown: function()
{
this._dataGrid.rootNode().removeChildren();
var messages = this._request.eventSourceMessages();
for (var i = 0; i < messages.length; ++i)
this._dataGrid.insertChild(new WebInspector.EventSourceMessageNode(messages[i]));
this._request.addEventListener(WebInspector.NetworkRequest.Events.EventSourceMessageAdded, this._messageAdded, this);
},
willHide: function()
{
this._request.removeEventListener(WebInspector.NetworkRequest.Events.EventSourceMessageAdded, this._messageAdded, this);
},
/**
* @param {!WebInspector.Event} event
*/
_messageAdded: function(event)
{
var message = /** @type {!WebInspector.NetworkRequest.EventSourceMessage} */ (event.data);
this._dataGrid.insertChild(new WebInspector.EventSourceMessageNode(message));
},
_sortItems: function()
{
var sortColumnIdentifier = this._dataGrid.sortColumnIdentifier();
if (!sortColumnIdentifier)
return;
var comparator = WebInspector.EventSourceMessageNode.Comparators[sortColumnIdentifier];
if (!comparator)
return;
this._dataGrid.sortNodes(comparator, !this._dataGrid.isSortOrderAscending());
},
__proto__: WebInspector.VBox.prototype
}
/**
* @constructor
* @extends {WebInspector.SortableDataGridNode}
* @param {!WebInspector.NetworkRequest.EventSourceMessage} message
*/
WebInspector.EventSourceMessageNode = function(message)
{
this._message = message;
var time = new Date(message.time * 1000);
var timeText = ("0" + time.getHours()).substr(-2) + ":" + ("0" + time.getMinutes()).substr(-2)+ ":" + ("0" + time.getSeconds()).substr(-2) + "." + ("00" + time.getMilliseconds()).substr(-3);
var timeNode = createElement("div");
timeNode.createTextChild(timeText);
timeNode.title = time.toLocaleString();
WebInspector.SortableDataGridNode.call(this, {id: message.eventId, type: message.eventName, data: message.data, time: timeNode});
}
WebInspector.EventSourceMessageNode.prototype = {
__proto__: WebInspector.SortableDataGridNode.prototype
}
/**
* @param {string} field
* @param {!WebInspector.EventSourceMessageNode} a
* @param {!WebInspector.EventSourceMessageNode} b
* @return {number}
*/
WebInspector.EventSourceMessageNodeComparator = function(field, a, b)
{
var aValue = a._message[field];
var bValue = b._message[field];
return aValue < bValue ? -1 : aValue > bValue ? 1 : 0;
}
/** @type {!Object.<string, !WebInspector.SortableDataGrid.NodeComparator>} */
WebInspector.EventSourceMessageNode.Comparators = {
"id": WebInspector.EventSourceMessageNodeComparator.bind(null, "eventId"),
"type": WebInspector.EventSourceMessageNodeComparator.bind(null, "eventName"),
"time": WebInspector.EventSourceMessageNodeComparator.bind(null, "time")
};