<div class="manage-trigger-githost-element manage-trigger-control">
  <linear-workflow done-title="Create Trigger"
                   (on-workflow-complete)="$ctrl.createTrigger($event)">
    <!-- Section: Namespace -->
    <linear-workflow-section class="row"
                             section-id="namespace"
                             section-title="::{{ 'Select ' + $ctrl.namespaceTitle }}"
                             section-valid="$ctrl.local.selectedNamespace"
                             skip-section="$ctrl.githost == 'custom-git'">
      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.local.namespaces">
        <h3>Select {{ ::$ctrl.namespaceTitle }}</h3>
        <strong>Please select the {{ ::$ctrl.namespaceTitle }} under which the repository lives</strong>

        <cor-table table-data="$ctrl.local.namespaces"
                   table-item-title="namespaces"
                   max-display-count="$ctrl.namespacesPerPage"
                   filter-fields="::['title', 'id']">
          <cor-table-col datafield="title"
                         style="width: 30px;"
                         sortfield="title"
                         bind-model="$ctrl.local.selectedNamespace"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/namespace-radio-input.html">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/namespace-radio-input.html">
              <input type="radio"
                     ng-model="col.bindModel" ng-value="item"
                     ng-dblclick="col.bindModel = null">
            </script>
          </cor-table-col>
          <cor-table-col title="{{ ::$ctrl.namespaceTitle }}"
                         datafield="id"
                         sortfield="id"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/namespace-name.html">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/namespace-name.html">
              <img class="namespace-avatar" ng-src="{{ ::item.avatar_url }}" ng-if="::item.avatar_url">
              <span class="anchor"
                    href="{{ ::item.url }}"
                    is-text-only="::!item.url">{{ ::item.title }}</span>
            </script>
          </cor-table-col>
          <cor-table-col title="Importance"
                         datafield="score"
                         bind-model="$ctrl.local.maxScore"
                         style="display: flex; justify-content: flex-end"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/namespace-score.html">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/namespace-score.html">
              <div style="padding-right: 40px;">
                <span class="strength-indicator"
                      value="::item.score" maximum="::col.bindModel" log-base="10"></span>
              </div>
            </script>
          </cor-table-col>
        </cor-table>
      </div>

      <div class="col-lg-8 col-md-8 col-sm-12 main-col"
           ng-if="!$ctrl.local.namespaces">
        <span class="cor-loader-inline"></span> Retrieving {{ $ctrl.namespaceTitle }}s
      </div>
      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col" ng-if="$ctrl.local.namespaces">
        <p>
          <span class="registry-name"></span> has been granted access to read and view these {{ $ctrl.namespaceTitle }}s.
        </p>
        <p class="co-alert co-alert-info gh-grant-message" ng-if="$ctrl.githost == 'github'">
          <b>Don't see an expected organization here?</b>Please visit <a href="{{ $ctrl.githubTriggerEndpoint }}settings/connections/applications/{{ $ctrl.githubTriggerClientId }}" target="_blank" rel="nofollow noopener">Connections with <span class="registry-name"></span></a> and choose <span class="gh-button">Grant</span> or <span class="gh-button">Request</span> before reloading this page.
        </p>
      </div>
    </linear-workflow-section><!-- /Section: Namespace -->

    <!-- Section: Githost Repository -->
    <linear-workflow-section class="row"
                             section-id="repo"
                             section-title="Select Repository"
                             section-valid="$ctrl.local.selectedRepository.full_name"
                             skip-section="$ctrl.githost == 'custom-git'">
      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.local.repositories">
        <h3>Select Repository</h3>
        <strong>
          Select a repository in
          <img class="namespace-avatar"
               ng-src="{{ $ctrl.local.selectedNamespace.avatar_url }}"
               ng-if="$ctrl.local.selectedNamespace.avatar_url">
          {{ $ctrl.local.selectedNamespace.title }}
        </strong>

        <div style="display: flex; justify-content: flex-end;">
          <div class="filter-options">
            <label>
              <input type="checkbox"
                     ng-model="$ctrl.local.repositoryOptions.hideStale"
                     ng-change="$ctrl.buildOrderedRepositories()">
              Hide stale repositories
            </label>
          </div>
        </div>

        <cor-table table-data="$ctrl.local.orderedRepositories.entries"
                   table-item-title="repositories"
                   max-display-count="$ctrl.repositoriesPerPage"
                   filter-fields="['name', 'description']">
          <cor-table-col bind-model="$ctrl.local.selectedRepository"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/repository-radio-input.html"
                         style="width: 30px;">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/repository-radio-input.html">
              <span ng-if="!item.has_admin_permissions">
              <i class="fa fa-exclamation-triangle"
                 data-title="Admin access is required to add the webhook trigger to this repository" bs-tooltip></i>
            </span>
              <div ng-if="item.has_admin_permissions">
                <input type="radio"
                       ng-model="col.bindModel" ng-value="item"
                       ng-dblclick="col.bindModel = null">
              </div>
            </script>
          </cor-table-col>
          <cor-table-col title="Repository Name"
                         datafield="name"
                         sortfield="name"
                         bind-model="$ctrl.getTriggerIcon()"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/repository-name.html">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/repository-name.html">
              <i class="service-icon fa {{ ::col.bindModel }}"></i>
              <span class="anchor"
                    href="{{ item.url }}"
                    is-text-only="!item.url">{{ item.name }}</span>
            </script>
          </cor-table-col>
          <cor-table-col title="Updated"
                         datafield="last_updated_datetime"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/repository-last-updated.html">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/repository-last-updated.html">
              <time-ago datetime="item.last_updated_datetime"></time-ago>
            </script>
          </cor-table-col>
          <cor-table-col title="Description"
                         datafield="description"
                         sortfield="description"
                         templateurl="/static/js/directives/ui/manage-trigger-githost/repository-description.html"
                         class="co-flowing-col">
            <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-githost/repository-description.html">
              <span ng-if="item.description" class="repo-description">
                {{ item.description }}
              </span>
              <span ng-if="!item.description" class="empty-description">(None)</span>
            </script>
          </cor-table-col>
        </cor-table>
      </div>

      <div class="col-lg-8 col-md-8 col-sm-12 main-col"
           ng-if="!$ctrl.local.repositories">
        <span class="cor-loader-inline"></span> Retrieving repositories
      </div>
      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col"
           ng-if="$ctrl.local.repositories">
        <p>
          A webhook will be added to the selected repository in order to detect when new commits are made.
        </p>
        <p>
          Don't see an expected repository here? Please make sure you have admin access on that repository.
        </p>
      </div>
    </linear-workflow-section><!-- /Section: Githost Repository -->

    <!-- Section: Custom Git Repository -->
    <linear-workflow-section class="row"
                             section-id="repo"
                             section-title="Git Repository"
                             section-valid="$ctrl.local.selectedRepository.full_name"
                             skip-section="$ctrl.githost != 'custom-git'">

      <div class="col-lg-7 col-md-7 col-sm-12 main-col">
        <h3>Enter repository</h3>
        <strong>Please enter the HTTP or SSH style URL used to clone your git repository</strong>
        <input class="form-control" type="text" placeholder="git@example.com:namespace/repository.git"
               ng-model="$ctrl.buildSource"
               ng-change="$ctrl.checkBuildSource($ctrl.buildSource)"
               ng-pattern="/(((http|https):\/\/)(.+)|\w+@(.+):(.+))/">
      </div>
      <div class="col-lg-5 col-md-5 hidden-sm hidden-xs help-col">
        <p>Custom git triggers support any externally accessible git repository, via either the normal git protocol or HTTP.</p>

        <p><b>It is the responsibility of the git repository to invoke a webhook to tell <span class="registry-name" short="true"></span> that a commit has been added.</b></p>
      </div>
    </linear-workflow-section><!-- /Section: Repository -->

    <!-- Section: Trigger Options -->
    <linear-workflow-section class="row"
                             section-id="triggeroptions"
                             section-title="Configure Trigger"
                             section-valid="$ctrl.local.triggerOptions"
                             skip-section="$ctrl.githost == 'custom-git'">
      <div class="col-lg-7 col-md-7 col-sm-12 main-col" ng-if="$ctrl.local.repositoryRefs">
        <h3>Configure Trigger</h3>
        <strong>
          Configure trigger options for
          <img class="namespace-avatar"
               ng-src="{{ $ctrl.local.selectedNamespace.avatar_url }}"
               ng-if="$ctrl.local.selectedNamespace.avatar_url">
          {{ $ctrl.local.selectedNamespace.title }}/{{ $ctrl.local.selectedRepository.name }}
        </strong>

        <div class="radio" style="margin-top: 20px;">
          <label>
            <input type="radio" name="optionRadio"
                   ng-model="$ctrl.local.triggerOptions.hasBranchTagFilter"
                   ng-value="false">
            <div class="title">Trigger for all branches and tags <span class="weak">(default)</span></div>
            <div class="description">Build a container image for each commit across all branches and tags</div>
          </label>
        </div>
        <div class="radio">
          <label>
            <input type="radio"
                   name="optionRadio"
                   ng-model="$ctrl.local.triggerOptions.hasBranchTagFilter"
                   ng-value="true">
            <div class="title">Trigger only on branches and tags matching a regular expression</div>
            <div class="description">Only build container images for a subset of branches and/or tags.</div>
            <div class="extended"
                 ng-if="$ctrl.local.triggerOptions.hasBranchTagFilter">
              <table>
                <tr>
                  <td style="white-space: nowrap;">Regular Expression:</td>
                  <td>
                    <input type="text" class="form-control"
                           ng-model="$ctrl.local.triggerOptions.branchTagFilter"
                           required>
                    <div class="description">Examples: heads/master, tags/tagname, heads/.+</div>
                    <regex-match-view items="$ctrl.local.repositoryFullRefs"
                                      regex="$ctrl.local.triggerOptions.branchTagFilter"
                                      ng-if="$ctrl.local.triggerOptions.branchTagFilter"></regex-match-view>
                  </td>
                </tr>
              </table>
            </div>
          </label>
        </div>
      </div>

      <div class="col-lg-8 col-md-8 col-sm-12 main-col"
           ng-if="!$ctrl.local.repositoryRefs">
        <span class="cor-loader-inline"></span> Retrieving repository refs
      </div>
      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col">
        <p>Do you want to build a new container image for commits across all branches and tags, or limit to a subset?</p>
        <p>For example, if you use release branches instead of <code>master</code> for building versions of your software, you can configure the trigger to only build images for these branches.</p>
        <p>All images built will be tagged with the name of the branch or tag whose change invoked the trigger</p>
      </div>
    </linear-workflow-section><!-- /Section: Trigger Options -->

    <!-- Section: Tagging Options -->
    <linear-workflow-section class="row"
                             section-id="taggingoptions"
                             section-title="Tagging Options"
                             section-valid="$ctrl.local.triggerOptions.default_tag_from_ref || $ctrl.local.triggerOptions.tag_templates.length">
      <div class="col-lg-7 col-md-7 col-sm-12 main-col">
        <h3>Configure Tagging</h3>
        <strong>
          Confirm basic tagging options
        </strong>
        <div class="checkbox" style="margin-top: 20px;">
          <label>
            <input type="checkbox"
                    ng-model="$ctrl.local.triggerOptions.default_tag_from_ref">
            <div class="title">Tag manifest with the branch or tag name</div>
            <div class="description">Tags the built manifest the name of the branch or tag for the git commit.</div>
          </label>
        </div>
        <div class="checkbox">
          <label>
            <input type="checkbox"
                   ng-model="$ctrl.local.triggerOptions.latest_for_default_branch">
            <div class="title">Add <code>latest</code> tag if on default branch</div>
            <div class="description">Tags the built manifest with <code>latest</code> if the build
                                     occurred on the default branch for the repository.
            </div>
          </label>
        </div>
        <hr>
        <strong>
          Add custom tagging templates
        </strong>
        <ul class="custom-template-list" ng-show="$ctrl.local.triggerOptions.tag_templates.length">
          <li ng-repeat="template in $ctrl.local.triggerOptions.tag_templates">
            <code>{{ template }}</code>
            <i class="fa fa-close" ng-click="$ctrl.removeTagTemplate(template)"></i>
          </li>
        </ul>
        <div class="empty" ng-show="$ctrl.local.triggerOptions.tag_templates.length == 0">
          No tag templates defined.
        </div>
        <div class="enter-template">
          <span>Enter a tag template:</span>
          <input class="form-control" type="text" placeholder="${commit_info.short_sha}" ng-model="$ctrl.local.currentTagTemplate">
          <button class="btn btn-default" ng-disabled="!$ctrl.local.currentTagTemplate"
                  ng-click="$ctrl.addTagTemplate()">Add Tag Template</button>
        </div>
      </div>
      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col">
        <p>By default, all built manifests will be tagged with the name of the branch or tag in
           which the commit occurred.</p>
        <p>To modify this default, as well as the default to add the <code>latest</code> tag,
           change the corresponding options on the left.</p>
        <p>Need more control over how the built manifest is tagged? Add one or more custom tag templates.</p>
        <p>For example, if you want all built manifests to be tagged with the commit's short SHA,
           add a template of <code>${commit_info.short_sha}</code>.
        </p>
        <p>As another example, if you want on those manifests committed to a <b>branch</b>
           to be tagged with the branch name, you can add a template of <code>${parsed_ref.branch}</code>.
        </p>
        <p>A full reference of for these templates can be found in the <a href="{{ $ctrl.DocumentationService.getUrl('builds.tag-templating') }}" target="_blank">Tag template documentation</a>.
        </p>
      </div>
    </linear-workflow-section> <!-- /Section: Tagging options -->

    <!-- Section: Dockerfile Location -->
    <linear-workflow-section class="row"
                             section-id="dockerfilelocation"
                             section-title="Select Dockerfile"
                             section-valid="$ctrl.local.hasValidDockerfilePath">
      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.local.dockerfileLocations.status == 'error'">
        <div class="co-alert co-alert-warning">
          {{ $ctrl.local.dockerfileLocations.message }}
        </div>
      </div>

      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.githost == 'custom-git' || $ctrl.local.dockerfileLocations.status == 'success'">
        <h3>Select Dockerfile</h3>
        <strong>Please select the location of the Dockerfile to build when this trigger is invoked</strong>
        <dockerfile-path-select current-path="$ctrl.local.dockerfilePath"
                                paths="$ctrl.local.dockerfileLocations.dockerfile_paths"
                                supports-full-listing="true"
                                (path-changed)="$ctrl.checkDockerfilePath($event)"></dockerfile-path-select>
        <span ng-if="$ctrl.local.dockerfilePath.split('/').splice(-1)[0] == ''"
              style="color: #D64456;">
          Dockerfile path must end with a file, probably named <code>Dockerfile</code>
        </span>
      </div>

      <div class="col-lg-8 col-md-8 col-sm-12 main-col"
           ng-if="$ctrl.githost != 'custom-git' && !$ctrl.local.dockerfileLocations">
        <span class="cor-loader-inline"></span> Retrieving Dockerfile locations
      </div>
      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col">
        <p>Please select the location containing the Dockerfile to be built.</p>
        <p>The Dockerfile path starts with the context and ends with the path to the Dockefile that you would like to build</p>
        <p>If the Dockerfile is located at the root of the git repository and named Dockerfile, enter <code>/Dockerfile</code> as the Dockerfile path.</p>
      </div>
    </linear-workflow-section><!-- /Section: Dockerfile Location -->

    <!-- Section: Context Location -->
    <linear-workflow-section class="row"
                             section-id="contextlocation"
                             section-title="Select Docker Context"
                             section-valid="$ctrl.local.hasValidContextLocation">
      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.local.dockerfileLocations.status == 'error'">
        <div class="co-alert co-alert-warning">
          {{ $ctrl.local.dockerfileLocations.message }}
        </div>
      </div>

      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.githost == 'custom-git' || $ctrl.local.dockerfileLocations.status == 'success'">
        <h3>Select Context</h3>
        <strong>Please select the context for the Docker build</strong>

        <context-path-select current-context="$ctrl.local.dockerContext"
                             contexts="$ctrl.local.contexts"
                             (context-changed)="$ctrl.checkBuildContext($event)"></context-path-select>
      </div>

      <div class="col-lg-8 col-md-8 col-sm-12 main-col"
           ng-if="$ctrl.githost != 'custom-git' && !$ctrl.local.dockerfileLocations">
        <span class="cor-loader-inline"></span> Retrieving Dockerfile locations
      </div>
      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col">
        <p>Please select a Docker context.</p>
        <p>The build context directory is the path of the directory containing the Dockerfile and any other files to be made available when the build is triggered.</p>
        <p>If the Dockerfile is located at the root of the git repository, enter <code>/</code> as the build context directory.</p>
      </div>
    </linear-workflow-section><!-- /Section: Context Location -->

    <!-- Section: Robot Account -->
    <linear-workflow-section class="row"
                             section-id="robot"
                             section-title="Robot Account"
                             section-valid="$ctrl.local.triggerAnalysis.status != 'error' &&
                                            ($ctrl.local.triggerAnalysis.status != 'requiresrobot' || $ctrl.local.robotAccount)">
      <!-- Error -->
      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.local.triggerAnalysis.status == 'error'">
        <h3 class="error"><i class="fa fa-exclamation-circle"></i> Verification Error</h3>
        <strong>
          There was an error when verifying the state of <img class="namespace-avatar"
                                                              ng-src="{{ $ctrl.local.selectedNamespace.avatar_url }}"
                                                              ng-if="$ctrl.local.selectedNamespace.avatar_url">
          {{ $ctrl.local.selectedNamespace.title }}/{{ $ctrl.local.selectedRepository.name }}
        </strong>

        {{ $ctrl.local.triggerAnalysis.message }}
      </div>

      <!-- Robot display for non-error cases -->
      <div class="col-lg-7 col-md-7 col-sm-12 main-col"
           ng-if="$ctrl.local.triggerAnalysis.status != 'error'">
        <!-- Warning -->
        <div ng-if="$ctrl.local.triggerAnalysis.status == 'warning'">
          <h3 class="warning"><i class="fa fa-exclamation-triangle"></i> Verification Warning</h3>
          {{ $ctrl.local.triggerAnalysis.message }}
        </div>

        <!-- Public base -->
        <div ng-if="$ctrl.local.triggerAnalysis.status == 'publicbase'">
          <h3>Optional Robot Account</h3>
          <strong>
            <span ng-if="$ctrl.local.triggerAnalysis.is_admin">Choose an optional robot account below or click "Continue" to complete setup of this build trigger.</span>
          </strong>
        </div>

        <!-- Requires robot and is not admin -->
        <div ng-if="$ctrl.local.triggerAnalysis.status == 'requiresrobot' && !$ctrl.local.triggerAnalysis.is_admin">
          <h3>Robot Account Required</h3>
          <p>The selected Dockerfile in the selected repository depends upon a private base image.</p>
          <p>A robot account with access to the base image is required to setup this trigger, but you are not the administrator of this namespace.</p>
          <p>Administrative access is required to continue to ensure security of the robot credentials.</p>
        </div>

        <!-- Requires robot and is admin -->
        <div ng-if="$ctrl.local.triggerAnalysis.status == 'requiresrobot' && $ctrl.local.triggerAnalysis.is_admin">
          <h3>Robot Account Required</h3>
          <p>The selected Dockerfile in the selected repository depends upon a private base image.</p>
          <p>A robot account with access to the base image is required to setup this trigger.</p>
        </div>

        <!-- Robots view -->
        <div ng-if="$ctrl.local.triggerAnalysis.is_admin">
          <cor-table table-data="$ctrl.local.triggerAnalysis.robots"
                     table-item-title="robot accounts"
                     filter-fields="['name']"
                     max-display-count="$ctrl.robotsPerPage">
            <cor-table-col datafield="name"
                           bind-model="$ctrl.local.robotAccount"
                           style="width: 30px;"
                           templateurl="/static/js/directives/ui/manage-trigger-custom-git/robot-radio-input.html">
              <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-custom-git/robot-radio-input.html">
                <input type="radio"
                       ng-model="col.bindModel" ng-value="item"
                       ng-dblclick="col.bindModel = null">
              </script>
            </cor-table-col>
            <cor-table-col title="Robot Account"
                           sortfield="name"
                           templateurl="/static/js/directives/ui/manage-trigger-custom-git/robot-name.html">
              <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-custom-git/robot-name.html">
                <span class="entity-reference" entity="item"></span>
              </script>
            </cor-table-col>
            <cor-table-col ng-if="$ctrl.local.triggerAnalysis.status == 'requiresrobot' || true"
                           datafield="can_read"
                           templateurl="/static/js/directives/ui/manage-trigger-custom-git/can-read.html">
              <script type="text/ng-template" id="/static/js/directives/ui/manage-trigger-custom-git/can-read.html">
                <span ng-if="item.can_read" class="success">Can Read</span>
                <span ng-if="!item.can_read">Read access will be added if selected</span>
              </script>
            </cor-table-col>
          </cor-table>
        </div> <!-- /Robots view -->
      </div>

      <div class="col-lg-4 col-md-4 hidden-sm hidden-xs help-col"
           ng-if="$ctrl.local.triggerAnalysis.is_admin">
        <p>
          In order for the <span class="registry-name"></span> to pull a <b>private base image</b> during the build
          process, a robot account with access must be selected.
        </p>
        <p ng-if="$ctrl.local.triggerAnalysis.status != 'requiresrobot'">
          If you know that a private base image is not used, you can skip this step.
        </p>
        <p ng-if="$ctrl.local.triggerAnalysis.status == 'requiresrobot'">
          Robot accounts that already have access to this base image are listed first. If you select a robot account
          that does not currently have access, read permission will be granted to that robot account on trigger creation.
        </p>
      </div>
    </linear-workflow-section><!-- /Section: Verification and Robot Account -->

    <!-- Verification -->
    <linear-workflow-section class="row"
                             section-id="verification"
                             section-title="Verification"
                             section-valid="true">
      <span>
        <h3 class="success"><i class="fa fa-check-circle"></i> Ready to go!</h3>
        Click "Continue" to complete setup of this build trigger.
      </span>
    </linear-workflow-section><!-- /Section: Verification -->
  </linear-workflow>
</div>
