From 6652e3a36902f09148320b83954ff31a794852e6 Mon Sep 17 00:00:00 2001 From: Clemens Brunner Date: Mon, 30 May 2016 08:34:30 +0200 Subject: start of developing server side for options (#1155) * added UI for options menu * update UI for options menu * update UI for options v2 * update UI for options v2 * added new btn class * little changes * little changes * merge * deleted branch * change menu button class * added option route + added very incomplete handler class * moved options to settings * added toggleinputbutton * changed options menu * added option for stream large bodies, but no working * added option for stream large bodies, but no working --- web/src/js/components/common.js | 56 ++++++++++++++++++--- web/src/js/components/footer.js | 32 +++++++++++- web/src/js/components/header.js | 109 +++++++++++++++++++++++----------------- 3 files changed, 143 insertions(+), 54 deletions(-) (limited to 'web/src/js/components') diff --git a/web/src/js/components/common.js b/web/src/js/components/common.js index b257b82c..87c34ffc 100644 --- a/web/src/js/components/common.js +++ b/web/src/js/components/common.js @@ -1,5 +1,6 @@ import React from "react" import ReactDOM from "react-dom" +import {Key} from "../utils.js"; import _ from "lodash" export var Splitter = React.createClass({ @@ -107,14 +108,55 @@ export var Splitter = React.createClass({ } }); -export const ToggleComponent = (props) => -
- {props.name} -
+export const ToggleButton = (props) => +
+
+  {props.name} +
+
; -ToggleComponent.propTypes = { +ToggleButton.propTypes = { name: React.PropTypes.string.isRequired, onToggleChanged: React.PropTypes.func.isRequired +}; + +export class ToggleInputButton extends React.Component { + constructor(props) { + super(props); + this.state = {txt: props.txt}; + } + + render() { + return ( +
+ this.props.onToggleChanged(this.state.txt)}> +
+ +  {this.props.name} +
+
+ this.setState({txt: e.target.value})} + onKeyDown={e => {if (e.keyCode === Key.ENTER) this.props.onToggleChanged(this.state.txt); e.stopPropagation()}}/> +
+ ); + } } + +ToggleInputButton.propTypes = { + name: React.PropTypes.string.isRequired, + txt: React.PropTypes.string.isRequired, + onToggleChanged: React.PropTypes.func.isRequired +}; + + + diff --git a/web/src/js/components/footer.js b/web/src/js/components/footer.js index e2d96288..8fe1081b 100644 --- a/web/src/js/components/footer.js +++ b/web/src/js/components/footer.js @@ -1,4 +1,5 @@ import React from "react"; +import {formatSize} from "../utils.js" import {SettingsState} from "./common.js"; Footer.propTypes = { @@ -6,7 +7,7 @@ Footer.propTypes = { }; export default function Footer({ settings }) { - const {mode, intercept} = settings; + const {mode, intercept, showhost, no_upstream_cert, rawtcp, http2, anticache, anticomp, stickyauth, stickycookie, stream} = settings; return ( ); } diff --git a/web/src/js/components/header.js b/web/src/js/components/header.js index 555babbb..643659c3 100644 --- a/web/src/js/components/header.js +++ b/web/src/js/components/header.js @@ -4,9 +4,10 @@ import $ from "jquery"; import Filt from "../filt/filt.js"; import {Key} from "../utils.js"; -import {ToggleComponent} from "./common.js"; +import {ToggleInputButton, ToggleButton} from "./common.js"; import {SettingsActions, FlowActions} from "../actions.js"; import {Query} from "../actions.js"; +import {SettingsState} from "./common.js"; var FilterDocs = React.createClass({ statics: { @@ -237,57 +238,74 @@ var ViewMenu = React.createClass({ render: function () { var showEventLog = this.props.query[Query.SHOW_EVENTLOG]; return ( -
- -
+
+
+ +
+
+
); } }); - -class OptionMenu extends React.Component{ - static title = "Options"; - constructor(props){ - super(props); - this.state = { - options : - [ - {name: "--host", checked: true}, - {name: "--no-upstream-cert", checked: false}, - {name: "--http2", checked: false}, - {name: "--anticache", checked: false}, - {name: "--anticomp", checked: false}, - {name: "--stickycookie", checked: true}, - {name: "--stickyauth", checked: false}, - {name: "--stream", checked: false} - ] - } - } - setOption(entry){ - console.log(entry.name);//TODO: get options from outside and remove state - entry.checked = !entry.checked; - this.setState({options: this.state.options}); - } - render() { - return ( +export const OptionMenu = (props) => { + const {mode, intercept, showhost, no_upstream_cert, rawtcp, http2, anticache, anticomp, stickycookie, stickyauth, stream} = props.settings; + return (
- {this.state.options.map((entry, i) => { - return ( - this.setOption(entry)}/> - ); - })} +
+ SettingsActions.update({showhost: !showhost})} + /> + SettingsActions.update({no_upstream_cert: !no_upstream_cert})} + /> + SettingsActions.update({rawtcp: !rawtcp})} + /> + SettingsActions.update({http2: !http2})} + /> + SettingsActions.update({anticache: !anticache})} + /> + SettingsActions.update({anticomp: !anticomp})} + /> + SettingsActions.update({stickyauth: (!stickyauth ? txt : null)})} + /> + SettingsActions.update({stickycookie: (!stickycookie ? txt : null)})} + /> + SettingsActions.update({stream: (!stream ? txt : null)})} + /> +
+
- ); - } -} + ); +}; +OptionMenu.title = "Options"; +OptionMenu.propTypes = { + settings: React.PropTypes.object.isRequired +}; var ReportsMenu = React.createClass({ statics: { @@ -428,7 +446,6 @@ export var Header = React.createClass({