<!--
    Copyright 2020 The Go Authors. All rights reserved.
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.
-->
{{define "content"}}
  <section class="NewWorkflow">
    <h2>New Go Release</h2>
    <form class="NewWorkflow-workflowSelect" action="{{baseLink "/workflows/new"}}" method="get">
      <label for="workflow.name">Workflow:</label>
      <select id="workflow.name" name="workflow.name" onchange="this.form.submit()">
        <option value="">Select Workflow</option>
        {{range $name, $definition := .Definitions}}
          <option value="{{$name}}" {{if eq $name $.Name}}selected="selected"{{end}}>
            {{$name}}
          </option>
        {{end}}
      </select>
      <noscript>
        <input name="workflow.new" type="submit" value="New" />
      </noscript>
    </form>
    {{if .Selected}}
      <form action="{{baseLink "/workflows/create"}}" method="post">
        <input type="hidden" id="workflow.name" name="workflow.name" value="{{$.Name}}" />
        {{range $_, $p := .Selected.Parameters}}
          {{if eq $p.Type.String "string"}}
            <div class="NewWorkflow-parameter NewWorkflow-parameter--string">
              <label for="workflow.params.{{$p.Name}}" title="{{$p.Doc}}">{{$p.Name}}</label>
              <input id="workflow.params.{{$p.Name}}" name="workflow.params.{{$p.Name}}"
                {{- with $p.HTMLInputType}} type="{{.}}"{{end}}
                {{- if $p.RequireNonZero}} required{{end}} placeholder="{{$p.Example}}" />
            </div>
          {{else if eq $p.Type.String "[]string"}}
            <div class="NewWorkflow-parameter NewWorkflow-parameter--slice">
              <div class="NewWorkflow-parameterRow">
                <label title="{{$p.Doc}}">{{$p.Name}}</label>
                <button title="Increment the slice length." onclick="event.preventDefault(); addSliceRow(this.parentElement.parentElement, '{{$p.Name}}', '{{$p.HTMLElement}}', '{{$p.HTMLInputType}}', '{{$p.Example}}');">+</button>
              </div>
            </div>
          {{else}}
            <div class="NewWorkflow-parameter">
              <label title="{{$p.Doc}}">{{$p.Name}}</label>
              <span>unsupported parameter type "{{$p.ParameterType}}"</span>
            </div>
          {{end}}
        {{end}}
        <div class="NewWorkflow-workflowCreate">
          <input name="workflow.create" type="submit" value="Create" onclick="return this.form.reportValidity() && confirm('This will create and immediately run this workflow.\n\nReady to proceed?')" />
        </div>
      </form>
    {{end}}
  </section>
{{end}}
