diff options
| -rw-r--r-- | web/src/css/dropdown.less | 4 | ||||
| -rw-r--r-- | web/src/js/components/ContentView/ContentViews.jsx | 33 | ||||
| -rw-r--r-- | web/src/js/components/Footer.jsx | 33 | ||||
| -rw-r--r-- | web/src/js/components/Header/FileMenu.jsx | 97 | ||||
| -rw-r--r-- | web/src/js/components/common/Dropdown.jsx | 9 | 
5 files changed, 83 insertions, 93 deletions
diff --git a/web/src/css/dropdown.less b/web/src/css/dropdown.less new file mode 100644 index 00000000..663373b3 --- /dev/null +++ b/web/src/css/dropdown.less @@ -0,0 +1,4 @@ +hr .divider { +    margin-top: 5px; +    margin-bottom: 5px; +} diff --git a/web/src/js/components/ContentView/ContentViews.jsx b/web/src/js/components/ContentView/ContentViews.jsx index cd593023..5b07969c 100644 --- a/web/src/js/components/ContentView/ContentViews.jsx +++ b/web/src/js/components/ContentView/ContentViews.jsx @@ -30,6 +30,12 @@ function Edit({ content, onChange }) {  Edit = ContentLoader(Edit)  class ViewServer extends Component { +    static propTypes  = { +        showFullContent: PropTypes.bool.isRequired, +        maxLines: PropTypes.number.isRequired, +        setContentViewDescription : PropTypes.func.isRequired, +        setContent: PropTypes.func.isRequired +    }      componentWillMount(){          this.setContentView(this.props) @@ -40,6 +46,7 @@ class ViewServer extends Component {              this.setContentView(nextProps)          }      } +      setContentView(props){          try {              this.data = JSON.parse(props.content) @@ -50,25 +57,31 @@ class ViewServer extends Component {          props.setContentViewDescription(props.contentView != this.data.description ? this.data.description : '')          props.setContent(this.data.lines)      } +      render() {          const {content, contentView, message, maxLines} = this.props          let lines = this.props.showFullContent ? this.data.lines : this.data.lines.slice(0, maxLines) -        return <div> +        return ( +            <div>                  <pre>                      {lines.map((line, i) =>                          <div key={`line${i}`}> -                            {line.map((tuple, j) => -                                <span key={`tuple${j}`} className={tuple[0]}> -                                    {tuple[1]} -                                </span> -                            )} +                            {line.map((element, j) => { +                                let style, text = element +                                return ( +                                    <span key={`tuple${j}`} className={style}> +                                        {element} +                                    </span> +                                ) +                            })}                          </div>                      )}                  </pre> -            {ViewImage.matches(message) && -            <ViewImage {...this.props} /> -            } -        </div> +                {ViewImage.matches(message) && +                <ViewImage {...this.props} /> +                } +            </div> +        )      }  } diff --git a/web/src/js/components/Footer.jsx b/web/src/js/components/Footer.jsx index 2bda70e1..96e7b7db 100644 --- a/web/src/js/components/Footer.jsx +++ b/web/src/js/components/Footer.jsx @@ -7,40 +7,41 @@ Footer.propTypes = {  }  function Footer({ settings }) { +    let {mode, intercept, showhost, no_upstream_cert, rawtcp, http2, anticache, anticomp, stickyauth, stickycookie, stream} = settings;      return (          <footer> -            {settings.mode && settings.mode != "regular" && ( -                <span className="label label-success">{settings.mode} mode</span> +            {mode && mode != "regular" && ( +                <span className="label label-success">{mode} mode</span>              )} -            {settings.intercept && ( -                <span className="label label-success">Intercept: {settings.intercept}</span> +            {intercept && ( +                <span className="label label-success">Intercept: {intercept}</span>              )} -            {settings.showhost && ( +            {showhost && (                  <span className="label label-success">showhost</span>              )} -            {settings.no_upstream_cert && ( +            {no_upstream_cert && (                  <span className="label label-success">no-upstream-cert</span>              )} -            {settings.rawtcp && ( +            {rawtcp && (                  <span className="label label-success">raw-tcp</span>              )} -            {!settings.http2 && ( +            {!http2 && (                  <span className="label label-success">no-http2</span>              )} -            {settings.anticache && ( +            {anticache && (                  <span className="label label-success">anticache</span>              )} -            {settings.anticomp && ( +            {anticomp && (                  <span className="label label-success">anticomp</span>              )} -            {settings.stickyauth && ( -                <span className="label label-success">stickyauth: {settings.stickyauth}</span> +            {stickyauth && ( +                <span className="label label-success">stickyauth: {stickyauth}</span>              )} -            {settings.stickycookie && ( -                <span className="label label-success">stickycookie: {settings.stickycookie}</span> +            {stickycookie && ( +                <span className="label label-success">stickycookie: {stickycookie}</span>              )} -            {settings.stream && ( -                <span className="label label-success">stream: {formatSize(settings.stream)}</span> +            {stream && ( +                <span className="label label-success">stream: {formatSize(stream)}</span>              )}          </footer>      ) diff --git a/web/src/js/components/Header/FileMenu.jsx b/web/src/js/components/Header/FileMenu.jsx index 6053b2d3..53c63ea1 100644 --- a/web/src/js/components/Header/FileMenu.jsx +++ b/web/src/js/components/Header/FileMenu.jsx @@ -1,71 +1,46 @@  import React, { Component, PropTypes } from 'react'  import { connect } from 'react-redux' -import classnames from 'classnames'  import FileChooser from '../common/FileChooser' -import Dropdown from '../common/Dropdown' +import Dropdown, {Divider} from '../common/Dropdown'  import * as flowsActions from '../../ducks/flows' +FileMenu.propTypes = { +    clearFlows: PropTypes.func.isRequired, +    loadFlows: PropTypes.func.isRequired, +    saveFlows: PropTypes.func.isRequired +} +FileMenu.onNewClick = (e, clearFlows) => { +    e.preventDefault(); +    if (confirm('Delete all flows?')) +        clearFlows() +} -class FileMenu extends Component { - -    static propTypes = { -        clearFlows: PropTypes.func.isRequired, -        loadFlows: PropTypes.func.isRequired, -        saveFlows: PropTypes.func.isRequired -    } - -    constructor(props, context) { -        super(props, context) - -        this.onNewClick = this.onNewClick.bind(this) -        this.onOpenClick = this.onOpenClick.bind(this) -        this.onOpenFile = this.onOpenFile.bind(this) -        this.onSaveClick = this.onSaveClick.bind(this) -    } - -    onNewClick(e) { -        e.preventDefault() -        if (confirm('Delete all flows?')) { -            this.props.clearFlows() -        } -    } -     -    onOpenFile(file) { -        this.props.loadFlows(file) -    } - -    onSaveClick(e) { -        e.preventDefault() -        this.props.saveFlows() -    } - -    render() { -        return ( -            <Dropdown className="pull-left" btnClass="special" text="mitmproxy"> -                <a href="#" onClick={this.onNewClick}> -                    <i className="fa fa-fw fa-file"></i> -                    New -                </a> -                <FileChooser -                    icon="fa-folder-open" -                    text="Open..." -                    onOpenFile={this.onOpenFile} -                /> -                <a href="#" onClick={this.onSaveClick}> -                    <i className="fa fa-fw fa-floppy-o"></i> -                    Save... -                </a> - -                <span name="divider"/> - -                <a href="http://mitm.it/" target="_blank"> -                        <i className="fa fa-fw fa-external-link"></i> -                        Install Certificates... -                </a> -            </Dropdown> -        ) -    } +function FileMenu ({clearFlows, loadFlows, saveFlows}) { +     return ( +        <Dropdown className="pull-left" btnClass="special" text="mitmproxy"> +            <a href="#" onClick={e => FileMenu.onNewClick(e, clearFlows)}> +                <i className="fa fa-fw fa-file"></i> +                New +            </a> +            <FileChooser +                icon="fa-folder-open" +                text="Open..." +                onOpenFile={file => loadFlows(file)} +            /> +            <a href="#" onClick={e =>{ e.preventDefault(); saveFlows();}}> +                <i className="fa fa-fw fa-floppy-o"></i> +                Save... +            </a> + +            <Divider/> + +            <a href="http://mitm.it/" target="_blank"> +                <i className="fa fa-fw fa-external-link"></i> +                Install Certificates... +            </a> +        </Dropdown> +    )  }  export default connect( diff --git a/web/src/js/components/common/Dropdown.jsx b/web/src/js/components/common/Dropdown.jsx index 9180767f..9db131d4 100644 --- a/web/src/js/components/common/Dropdown.jsx +++ b/web/src/js/components/common/Dropdown.jsx @@ -1,6 +1,8 @@  import React, { Component, PropTypes } from 'react'  import classnames from 'classnames' +export function Divider () { return  <hr className="divider"/>} +  export default class Dropdown extends Component {      static propTypes = { @@ -43,12 +45,7 @@ export default class Dropdown extends Component {                      {text}                  </a>                  <ul className="dropdown-menu" role="menu"> -                    {children.map(item => -                        item.name == "divider" ? -                            <li role="presentation" className="divider"/> -                        : -                            <li> {item} </li> -                    )} +                    {children.map ( (item, i) =>  <li key={i}> {item} </li> )}                  </ul>              </div>          )  | 
