
<!--
Copyright 2017-present Open Networking Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->


<!--<form name="login">-->
  <!--<input type="text" name="username" ng-model="username" required>-->
  <!--<input type="text" name="password" ng-model="password" required>-->
  <!--<button type="button" ng-click="vm.login(username, password)">Login</button>-->
<!--</form>-->
<!-- Main content-->
<section class="content" ng-style="vm.loginStyle">

  <div class="container-center animated slideInDown">
    <div class="view-header">
      <div class="header-icon">
        <i class="pe page-header-icon pe-7s-unlock"></i>
      </div>
      <div class="header-title">
        <h3>Login</h3>
        <small>
          Please enter your credentials to login.
        </small>
      </div>
    </div>
    <hr>
    <div class="panel panel-filled">
      <div class="panel-body">
        <form id="loginForm" ng-submit="vm.login(username, password)" novalidate>
          <div class="form-group">
            <label class="control-label" for="username">Username</label>
            <input type="text" ng-model="username" placeholder="example@gmail.com" title="Please enter you username" required="" value="" name="username" id="username" class="form-control">
            <!--<span class="help-block small">Your unique username to app</span>-->
          </div>
          <div class="form-group">
            <label class="control-label" for="password">Password</label>
            <input type="password" ng-model="password" title="Please enter your password" placeholder="******" required="" value="" name="password" id="password" class="form-control">
            <!--<span class="help-block small">Your strong password</span>-->
          </div>
          <xos-alert config="{type: 'danger'}" show="vm.showErrorMsg">{{vm.errorMsg}}</xos-alert>
          <div>
            <button ng-click="vm.login(username, password)" class="btn btn-accent">Login</button>
            <!--<a class="btn btn-default" href="register.html">Register</a>-->
          </div>
        </form>
      </div>
    </div>

  </div>
</section>
<!-- End main content-->