{{!
* 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 id="get-started">
  <h2>{{t installer.step0.body.header}}</h2>
  <p class="alert alert-info">
    {{t installer.step0.body}}
  </p>
  <div {{bindAttr class="view.onError:error :control-group"}}>
    <label class="control-label" for="cluster-name">{{t installer.step0.clusterName}}
      <a href="javascript:void(null)"
         rel="popover"
        {{translateAttr title="installer.step0.clusterName.tooltip.title"
        data-content="installer.step0.clusterName.tooltip.content"}}>{{t common.learnMore}}</a>
    </label>

    <div class="controls">
      {{view App.WizardStep0ViewClusterNameInput id="cluster-name" valueBinding="content.cluster.name" placeholder="cluster name" target="controller"}}
      <p class="help-inline">{{clusterNameError}}</p>
    </div>
  </div>

  <div class="btn-area">
    <button type="button" class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action "submit" target="controller"}}>
      {{#if App.router.nextBtnClickInProgress}}
        {{view App.SpinnerView tagName="span" classNames="service-button-spinner"}}
      {{/if}}
      {{t common.next}} &rarr;
    </button>
  </div>
</div>

