<div class="modal" tabindex="-1">
<!--
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.
-->
  <div class="modal-dialog" style="max-width: 440px">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" ng-click="$hide()">
          <span>&times;</span></button>
        <h4>Add Workers</h4>
      </div>
      <div class="modal-body">
        <p style="padding-top: 4px; padding-bottom: 14px;" ng-bind="description"></p>

        <div ng-if="shouldNoticeSubmitFailed">
          <div class="alert alert-danger alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert"
                    ng-click="shouldNoticeSubmitFailed=false">
              <span aria-hidden="true">&times;</span>
            </button>
            <h5 style="margin-top: 0">Something went wrong!</h5>

            <p ng-bind="error"></p>
          </div>
        </div>

        <form name="form" class="form-horizontal">
          <!-- right margin align to cancel button right -->
          <div style="margin-bottom: 18px">
            <!-- input 1 -->
            <form-control
              label-style-class="col-sm-4"
              control-style-class="col-sm-8"
              type="integer" min="1" label="Instance Count"
              ng-model="count"></form-control>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary btn-sm"
                ng-click="add()">
          <span ng-show="adding"
                class="glyphicon glyphicon-repeat rotate-animation"></span>
          Add
        </button>
        <button type="button" class="btn btn-default btn-sm" ng-click="$hide()">Cancel</button>
      </div>
    </div>
  </div>
</div>
