From abc91d6658e827b1ac7db62dba32d6bd3df6a09b Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 14 Sep 2014 02:04:48 +0200 Subject: web: add flow stub --- web/src/js/datastructures.es6.js | 28 ++++++++++++---------- web/src/js/mitmproxy.react.js | 52 +++++++++++++++++++++++++++++----------- 2 files changed, 54 insertions(+), 26 deletions(-) (limited to 'web/src/js') diff --git a/web/src/js/datastructures.es6.js b/web/src/js/datastructures.es6.js index 4bc781b2..e9e2ee77 100644 --- a/web/src/js/datastructures.es6.js +++ b/web/src/js/datastructures.es6.js @@ -1,26 +1,26 @@ class EventEmitter { constructor(){ - this._listeners = {}; + this.listeners = {}; } emit(event){ - if(!(event in this._listeners)){ + if(!(event in this.listeners)){ return; } - this._listeners[event].forEach(function (listener) { + this.listeners[event].forEach(function (listener) { listener(event, this); }.bind(this)); } addListener(event, f){ - this._listeners[event] = this._listeners[event] || []; - this._listeners[event].push(f); + this.listeners[event] = this.listeners[event] || []; + this.listeners[event].push(f); } removeListener(event, f){ - if(!(event in this._listeners)){ + if(!(event in this.listeners)){ return false; } - var index = this._listeners.indexOf(f); + var index = this.listeners.indexOf(f); if (index >= 0) { - this._listeners.splice(this._listeners.indexOf(f), 1); + this.listeners.splice(this.listeners.indexOf(f), 1); } } } @@ -31,13 +31,17 @@ class FlowStore extends EventEmitter{ constructor() { super(); this.flows = []; - this._listeners = []; } getAll() { return this.flows; } + close(){ + console.log("FlowStore.close()"); + this.listeners = []; + } + emitChange() { return this.emit(FLOW_CHANGED); } @@ -57,14 +61,14 @@ class DummyFlowStore extends FlowStore { this.flows = flows; } - addFlow(f) { - this.flows.push(f); + addFlow(flow) { + this.flows.push(flow); this.emitChange(); } } -var SETTINGS_CHANGED = "settings.change"; +var SETTINGS_CHANGED = "settings.changed"; class Settings extends EventEmitter { constructor(){ diff --git a/web/src/js/mitmproxy.react.js b/web/src/js/mitmproxy.react.js index 2a2ee910..cdb6221d 100644 --- a/web/src/js/mitmproxy.react.js +++ b/web/src/js/mitmproxy.react.js @@ -9,16 +9,13 @@ var App = React.createClass({ }, componentDidMount: function () { //TODO: Replace DummyStore with real settings over WS (https://facebook.github.io/react/tips/initial-ajax.html) - //TODO: Is there a sensible place where we can store this? - var settings = new DummySettings({ + var settingsStore = new DummySettings({ version: "0.12" }); - settings.addChangeListener(this._onSettingsChange); - - //This would be async in some way or another. - this._onSettingsChange(null, settings); + this.setState({settingsStore: settingsStore}); + settingsStore.addChangeListener(this.onSettingsChange); }, - _onSettingsChange: function(event, settings){ + onSettingsChange: function(event, settings){ this.setState({settings: settings.getAll()}); }, render: function () { @@ -34,12 +31,39 @@ var App = React.createClass({ } }); -var Traffic = React.createClass({ - render: function(){ - var json = JSON.stringify(this.props, null, 4); - var i = 5; - while(i--) json += json; - return (
{json}
); +var TrafficTable = React.createClass({ + getInitialState: function(){ + return { + flows: [] + }; + }, + componentDidMount: function () { + var flowStore = new DummyFlowStore([]); + this.setState({flowStore: flowStore}); + + flowStore.addChangeListener(this.onFlowsChange); + + $.getJSON("/flows.json").success(function (flows) { + + flows.forEach(function (flow, i) { + window.setTimeout(function () { + flowStore.addFlow(flow); + }, _.random(i*400,i*400+1000)); + }); + + }.bind(this)); + }, + componentWillUnmount: function(){ + this.state.flowStore.close(); + }, + onFlowsChange: function(event, flows){ + this.setState({flows: flows.getAll()}); + }, + render: function () { + var flows = this.state.flows.map(function(flow){ + return
{flow.request.method} {flow.request.scheme}://{flow.request.host}{flow.request.path}
; + }); + return
{flows}
; } }); @@ -52,7 +76,7 @@ var Reports = React.createClass({ var routes = ( - + -- cgit v1.2.3