<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Plato - components/Login/LoginForm.js</title>

  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="description" content="">
  <meta name="author" content="">

  <!--[if lt IE 9]>
  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->

  <link href="../../assets/css/vendor/morris.css" rel="stylesheet" type="text/css">
  <link href="../../assets/css/vendor/bootstrap.css" rel="stylesheet" type="text/css">
  <link href="../../assets/css/vendor/font-awesome.css" rel="stylesheet" type="text/css">
  <link href="../../assets/css/vendor/codemirror.css" rel="stylesheet" type="text/css">
  <link href="../../assets/css/plato.css" rel="stylesheet" type="text/css">
  <link href="../../assets/css/plato-file.css" rel="stylesheet" type="text/css">

</head>

<body>

<div class="navbar navbar-fixed-top">
  <div class="container">
    <a class="navbar-brand" href="https://github.com/the-simian/es6-plato">ES6 Plato on Github</a>
    <ul class="nav navbar-nav">
      <li>
        <a href="../../index.html">Report Home</a>
      </li>
      <li class="active">
        <a href="display.html">Summary Display</a>
      </li>
    </ul>
  </div>
</div>

<div class="jumbotron">
  <div class="container">
    <h1>components/Login/LoginForm.js</h1>
  </div>
</div>

<div class="container aggregate-stats">
  <div class="row">
    <div class="col-md-6">
      <h2 class="header">Maintainability <a href="http://blogs.msdn.com/b/codeanalysis/archive/2007/11/20/maintainability-index-range-and-meaning.aspx"><i class="icon icon-info-sign" rel="popover" data-placement="top" data-trigger="hover" data-content="A value between 0 and 100 that represents the relative ease of maintaining the code. A high value means better maintainability." data-original-title="Maintainability Index"  data-container="body"></i></a></h2>
      <p class="stat">78.32</p>
    </div>
    <div class="col-md-6">
      <h2 class="header">Lines of code <i class="icon icon-info-sign" rel="popover" data-placement="top" data-trigger="hover" data-content="Source Lines of Code / Logical Lines of Code" data-original-title="SLOC/LSLOC" data-container="body"></i></h2>
      <p class="stat">102</p>
    </div>
  </div>
  <div class="row historical">
    <div class="col-md-6">
      <p id="chart_historical_maint" class="chart"></p>
    </div>
    <div class="col-md-6">
      <p id="chart_historical_sloc" class="chart"></p>
    </div>
  </div>
  <div class="row">
    <div class="col-md-6">
      <h2 class="header">Difficulty  <a href="http://en.wikipedia.org/wiki/Halstead_complexity_measures"><i class="icon icon-info-sign" rel="popover" data-placement="top" data-trigger="hover" data-content="The difficulty measure is related to the difficulty of the program to write or understand." data-original-title="Difficulty" data-container="body"></i></a></h2>
      <p class="stat">17.75</p>
    </div>
    <div class="col-md-6">
      <h2 class="header">Estimated Errors  <a href="http://en.wikipedia.org/wiki/Halstead_complexity_measures"><i class="icon icon-info-sign" rel="popover" data-placement="top" data-trigger="hover" data-content="Halstead's delivered bugs is an estimate for the number of errors in the implementation." data-original-title="Delivered Bugs" data-container="body"></i></a></h2>
      <p class="stat">0.64</p>
    </div>
  </div>
</div>

<div class="container charts">
  <div class="row">
    <h2 class="header">Function weight</h2>
  </div>
  <div class="row">
    <div class="col-md-6">
      <h3 class="chart-header">By Complexity <a href="http://en.wikipedia.org/wiki/Cyclomatic_complexity"><i class="icon icon-info-sign" rel="popover" data-placement="top" data-trigger="hover" data-content="This metric counts the number of distinct paths through a block of code. Lower values are better." data-original-title="Cyclomatic Complexity" data-container="body"></i></a></h3>
      <div id="fn-by-complexity" class="stat"></div>
    </div>
    <div class="col-md-6">
      <h3 class="chart-header">By SLOC  <i class="icon icon-info-sign" rel="popover" data-placement="top" data-trigger="hover" data-content="Source Lines of Code / Logical Lines of Code" data-original-title="SLOC/LSLOC" data-container="body"></i></h3>
      <div id="fn-by-sloc" class="stat"></div>
    </div>
  </div>
</div>

<div class="container">
  <div class="row">
    <textarea id="file-source" class="col-md-12">import React from &#039;react&#039;;
import PropTypes from &#039;prop-types&#039;
import { Link } from &#039;react-router-dom&#039;;
import { Alert, Glyphicon, Form, FormGroup, Col, ControlLabel, FormControl } from &#039;react-bootstrap/lib&#039;;
import Button from &#039;react-bootstrap-button-loader&#039;;
import ICAT from &#039;../../config/icat/icat.js&#039;

class LoginForm extends React.Component {
  constructor(props) {
    super(props);
    this.onSignInClicked = this.onSignInClicked.bind(this);
    this.onSignInAsAnonymous = this.onSignInAsAnonymous.bind(this);

    this.handleKeyPress = this.handleKeyPress.bind(this);
    this.state = {
      isLoading: false,
      error: null
    }
  }

  handleKeyPress(target) {
    if (target.charCode === 13) {
      this.onSignInClicked();
    }
  }
  onSignInClicked(e) {
    this.setState({ isLoading: true });
    this.props.doSignIn(ICAT.connection.plugin, this.loginID.value, this.password.value);

  }

  onSignInAsAnonymous(e) {
    this.setState({ isLoading: true });
    this.props.doSignIn(ICAT.anonymous.plugin, ICAT.anonymous.username, ICAT.anonymous.password);

  }

  componentDidMount() {
    this.setState({ isLoading: false });
  }

  render() {    
    
    var url = window.location.pathname;
    return (
      &lt;div&gt;
        &lt;Form horizontal &gt;
        &lt;FormGroup&gt;
            &lt;Col componentClass={ControlLabel} sm={2}&gt;              
            &lt;/Col&gt;
            &lt;Col sm={10}&gt;
               &lt;strong&gt;Sign in with your ESRF&#039;s user account&lt;/strong&gt;              
            &lt;/Col&gt;
          &lt;/FormGroup&gt;
          &lt;FormGroup&gt;
            &lt;Col componentClass={ControlLabel} sm={4}&gt;
              Login
            &lt;/Col&gt;
            &lt;Col sm={8}&gt;
              &lt;FormControl type=&quot;text&quot; placeholder=&quot;LoginID&quot; autoFocus required inputRef={(ref) =&gt; { this.loginID = ref; } }/&gt;
            &lt;/Col&gt;
          &lt;/FormGroup&gt;

          &lt;FormGroup&gt;
            &lt;Col componentClass={ControlLabel} sm={4}&gt;Password&lt;/Col&gt;
            &lt;Col sm={8}&gt;
              &lt;FormControl type=&quot;password&quot; placeholder=&quot;Password&quot; onKeyPress={this.handleKeyPress}
                inputRef={(ref) =&gt; { this.password = ref; } } /&gt;
            &lt;/Col&gt;
          &lt;/FormGroup&gt;
        &lt;/Form&gt;
        &lt;div className=&quot;center-block text-center&quot;&gt;
          &lt;Button type=&quot;submit&quot; loading={this.props.user.isAuthenticating} bsStyle=&quot;primary&quot; onClick={this.onSignInClicked}&gt;
            &lt;Glyphicon glyph=&quot;glyphicon glyphicon-log-in&quot; /&gt; Log in
          &lt;/Button&gt;
          &lt;br /&gt;&lt;br /&gt; 
          &lt;span&gt;&lt;Link onClick={this.onSignInAsAnonymous} to={url}&gt; or Log in as anonymous&lt;/Link&gt;&lt;/span&gt;
        &lt;/div&gt;
        &lt;div className=&quot;center-block text-center&quot; style={{ marginTop: &#039;10px&#039; }}&gt;
          &lt;LoginAlertMessage error={this.props.user.error}&gt;&lt;/LoginAlertMessage&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    );
  }
}

class LoginAlertMessage extends React.Component { 
  render() {
    if (!this.props.error) {
      return null;
    }
    return &lt;Alert bsStyle=&quot;warning&quot;&gt;&lt;h4&gt;{this.props.error}&lt;/h4&gt;&lt;/Alert&gt;;
  }
};


LoginForm.propTypes = {
  username: PropTypes.string
}

export default LoginForm;</textarea>
  </div>
</div>

<footer class="footer">
  <div class="container">
    <p>.</p>
  </div>
</footer>

<script type="text/html" id="complexity-popover-template">
  <div class="complexity-notice">
    Complexity : {{ complexity.cyclomatic }} <br>
    Length : {{ complexity.halstead.length }} <br>
    Difficulty : {{ complexity.halstead.difficulty.toFixed(2) }} <br>
    Est # bugs : {{ complexity.halstead.bugs.toFixed(2) }}<br>
  </div>
</script>

<script type="text/javascript" src="../../assets/scripts/bundles/core-bundle.js"></script>
<script type="text/javascript" src="../../assets/scripts/bundles/codemirror.js"></script>
<script type="text/javascript" src="../../assets/scripts/codemirror.markpopovertext.js"></script>
<script type="text/javascript" src="report.js"></script>
<script type="text/javascript" src="report.history.js"></script>
<script type="text/javascript" src="../../assets/scripts/plato-file.js"></script>
</body>
</html>
