diff options
author | Maximilian Hils <git@maximilianhils.com> | 2014-12-23 01:13:34 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2014-12-23 01:13:34 +0100 |
commit | b55d584309ed6fde064c3f251e4d21e2ab754acd (patch) | |
tree | 38a779f5f955a1bac9fd7ce3c718b3ed46ca601d /web/src/js/components | |
parent | d5e16d7cf193c7ef83ee53d464efb7c46fd921e8 (diff) | |
download | mitmproxy-b55d584309ed6fde064c3f251e4d21e2ab754acd.tar.gz mitmproxy-b55d584309ed6fde064c3f251e4d21e2ab754acd.tar.bz2 mitmproxy-b55d584309ed6fde064c3f251e4d21e2ab754acd.zip |
web: simpler filter ui
Diffstat (limited to 'web/src/js/components')
-rw-r--r-- | web/src/js/components/flowtable.jsx.js | 23 | ||||
-rw-r--r-- | web/src/js/components/header.jsx.js | 55 | ||||
-rw-r--r-- | web/src/js/components/mainview.jsx.js | 27 |
3 files changed, 33 insertions, 72 deletions
diff --git a/web/src/js/components/flowtable.jsx.js b/web/src/js/components/flowtable.jsx.js index 00c2d4c1..50caaab3 100644 --- a/web/src/js/components/flowtable.jsx.js +++ b/web/src/js/components/flowtable.jsx.js @@ -6,27 +6,14 @@ var FlowRow = React.createClass({ }.bind(this)); var className = ""; if (this.props.selected) { - className += "selected"; + className += " selected"; } - - var highlight_count = flow._highlight.length; - if (highlight_count > 0) { - var background = "linear-gradient(90deg"; - for(var i =0; i < highlight_count; i++){ - var tag = flow._highlight[i]; - var ps = (100 * i / highlight_count) + "%"; - var pe = (100 * (i + 1) / highlight_count) + "%"; - background += ("," + tag + " " + ps + "," + tag + " " + pe); - } - background += ")"; + if (this.props.highlighted) { + className += " highlighted"; } - style = { - background: background - }; - return ( - <tr className={className} onClick={this.props.selectFlow.bind(null, flow)} style={style}> + <tr className={className} onClick={this.props.selectFlow.bind(null, flow)}> {columns} </tr>); }, @@ -95,11 +82,13 @@ var FlowTable = React.createClass({ }, renderRow: function (flow) { var selected = (flow === this.props.selected); + var highlighted = (this.props.view._highlight && this.props.view._highlight[flow.id].length > 0); return <FlowRow key={flow.id} ref={flow.id} flow={flow} columns={this.state.columns} selected={selected} + highlighted={highlighted} selectFlow={this.props.selectFlow} />; }, diff --git a/web/src/js/components/header.jsx.js b/web/src/js/components/header.jsx.js index a975f57b..9e090770 100644 --- a/web/src/js/components/header.jsx.js +++ b/web/src/js/components/header.jsx.js @@ -71,7 +71,7 @@ var FilterInput = React.createClass({ } }, remove: function () { - if(this.props.onRemove) { + if (this.props.onRemove) { this.props.onRemove(); } }, @@ -118,7 +118,7 @@ var MainMenu = React.createClass({ getInitialState: function () { return { filter: this.getQuery()[Query.FILTER] || "", - highlight: (this.getQuery()[Query.HIGHLIGHT] || "").split("&").map(decodeURIComponent) + highlight: this.getQuery()[Query.HIGHLIGHT] || "" }; }, statics: { @@ -136,55 +136,18 @@ var MainMenu = React.createClass({ applyFilter: function (filter, highlight) { var d = {}; d[Query.FILTER] = filter; - d[Query.HIGHLIGHT] = highlight.map(encodeURIComponent).join("&"); + d[Query.HIGHLIGHT] = highlight; this.setQuery(d); }, onFilterChange: function (val) { this.setState({filter: val}); this.applyFilter(val, this.state.highlight); }, - onHighlightChange: function (index, val) { - var highlight = this.state.highlight.slice(); - highlight[index] = val; - if (highlight[highlight.length - 1] !== "" && highlight.length < 14) { - highlight.push(""); - } - this.setState({ - highlight: highlight - }); - this.applyFilter(this.state.filter, highlight); - }, - onHighlightRemove: function (index) { - if (this.state.highlight.length > 1 && index < this.state.highlight.length - 1) { - var highlight = this.state.highlight.slice(); - highlight.splice(index, 1); - this.setState({ - highlight: highlight - }); - } - this.refs["highlight-" + Math.max(0, index - 1)].focus(); - }, - getColor: function (index) { - return HighlightColors[index]; + onHighlightChange: function (val) { + this.setState({highlight: val}); + this.applyFilter(this.state.filter, val); }, render: function () { - var highlightFilterInputs = []; - for (var i = 0; i < this.state.highlight.length; i++) { - highlightFilterInputs.push(<span key={"placeholder-" + i}> </span>); - highlightFilterInputs.push( - <FilterInput - key={"highlight-" + i} - ref={"highlight-" + i} - type="tag" - color={this.getColor(i)} - value={this.state.highlight[i]} - onChange={this.onHighlightChange.bind(this, i)} - onRemove={this.onHighlightRemove.bind(this, i)} - /> - ); - - } - return ( <div> <button className={"btn " + (this.props.settings.showEventLog ? "btn-primary" : "btn-default")} onClick={this.toggleEventLog}> @@ -197,11 +160,11 @@ var MainMenu = React.createClass({ Clear Flows </button> - <form className="form-inline" style={{display:"inline"}}> + <form className="form-inline" style={{display: "inline"}}> <FilterInput type="filter" color="black" value={this.state.filter} onChange={this.onFilterChange} /> - { highlightFilterInputs } + + <FilterInput type="tag" color="hsl(48, 100%, 50%)" value={this.state.highlight} onChange={this.onHighlightChange}/> </form> - </div> ); } diff --git a/web/src/js/components/mainview.jsx.js b/web/src/js/components/mainview.jsx.js index e6718413..be20a357 100644 --- a/web/src/js/components/mainview.jsx.js +++ b/web/src/js/components/mainview.jsx.js @@ -12,21 +12,30 @@ var MainView = React.createClass({ }; }, getViewFilt: function () { - var filt = Filt.parse(this.getQuery()[Query.FILTER] || ""); - var highlight = (this.getQuery()[Query.HIGHLIGHT] || "").split("&") - .map(decodeURIComponent) - .map(function (filtstr) { - return filtstr.trim() !== "" ? Filt.parse(filtstr) : false; - }); + try { + var filt = Filt.parse(this.getQuery()[Query.FILTER] || ""); + var highlightStr = this.getQuery()[Query.HIGHLIGHT]; + var highlight = highlightStr ? [Filt.parse(highlightStr)] : []; + } catch(e){ + console.error("Error when processing filter: " + e); + } + + var FadedHighlightColors = ["hsla(57, 100%, 50%, 0.33)"]; + return function filter_and_highlight(flow) { - flow._highlight = []; + var view = this.state.view; + if(!view._highlight){ + view._highlight = {}; + } + view._highlight[flow.id] = []; + for (var i = 0; i < highlight.length; i++) { if (highlight[i] && highlight[i](flow)) { - flow._highlight.push(FadedHighlightColors[i]); + view._highlight[flow.id].push(FadedHighlightColors[i]); } } return filt(flow); - }; + }.bind(this); }, getViewSort: function () { }, |