//-
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You 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.

include /app/helpers/jade/mixins

.modal.modal--ignite.theme--ignite(tabindex='-1' role='dialog')
    .modal-dialog
       -var form = '$ctrl.form'

       form.modal-content(name=form novalidate ng-submit='$ctrl.login()')
            .modal-header
                h4.modal-title
                    span Cluster Authentication
                button.close(type='button' aria-label='Close' ng-click='$ctrl.onHide()')
                    svg(ignite-icon="cross")
            .modal-body
                p Enter your credentials to access the cluster.
                .row
                    .col-50
                        +form-field__text({
                            label: 'User:',
                            model: '$ctrl.secrets.user',
                            name: '"user"',
                            placeholder: 'Enter user',
                            required: true
                        })(
                            ng-model-options='{allowInvalid: true}'
                            autocomplete='node-user'
                            ignite-auto-focus
                        )
                    .col-50
                        +form-field__password({
                            label: 'Password:',
                            model: '$ctrl.secrets.password',
                            name: '"password"',
                            placeholder: 'Enter password',
                            required: true
                        })(
                            autocomplete='node-password'
                        )
            .modal-footer
                div
                    button#btn-cancel.btn-ignite.btn-ignite--link-success(type='button' ng-click='$ctrl.onHide()') Cancel
                    button#btn-login.btn-ignite.btn-ignite--success Login

