Project import generated by Copybara.

GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/templates/tracker/template-detail-page.ezt b/templates/tracker/template-detail-page.ezt
new file mode 100644
index 0000000..b596e4c
--- /dev/null
+++ b/templates/tracker/template-detail-page.ezt
@@ -0,0 +1,303 @@
+[define title]Issue Template [template_name][end]
+[define category_css]css/ph_detail.css[end]
+[include "../framework/header.ezt" "showtabs"]
+
+<a href="/p/[projectname]/adminTemplates">&lsaquo; Back to template list</a><br><br>
+
+[if-any read_only][include "../framework/read-only-rejection.ezt"]
+[else]
+
+<h4>Issue Template</h4>
+
+[if-any new_template_form]
+  <form action="create.do" method="POST">
+[else]
+  <form action="detail.do" method="POST">
+[end]
+<input type="hidden" name="token" value="[form_token]">
+<input type="hidden" name="template" value="[template_name]">
+
+
+<table cellspacing="0" cellpadding="3" class="rowmajor vt">
+  <tr>
+    <th>Members only:</th>
+    <td>
+      <input type="checkbox"[if-any allow_edit][else]disabled[end] name="members_only" [if-any initial_members_only]checked[end]>
+      <label for="members_only_checkbox">Only offer this template to project members</label>
+    </td>
+  </tr>
+
+  <tr>
+    <th>Name:</th>
+    <td>
+      [if-any new_template_form]
+        <input type="text" name="name" value="[template_name]">
+        <span id="fieldnamefeedback" class="fielderror" style="margin-left:1em">
+          [if-any errors.name][errors.name][end]
+        </span>
+      [else]
+        [template_name]
+        <input type="hidden" name="name" value="[template_name]">
+      [end]
+    </td>
+  </tr>
+
+  <tr>
+    <th>Summary:</th>
+    <td>
+      [if-any allow_edit]
+        <input type="text" name="summary" size="60" class=acob" value="[initial_summary]"><br>
+      [else]
+        [initial_summary]<br>
+      [end]
+      <input type="checkbox" [if-any allow_edit][else]disabled[end] name="summary_must_be_edited" [if-any initial_must_edit_summary]checked[end]>
+      <label for="summary_must_be_edited_checkbox">Users must edit issue summary before submitting</label>
+    </td>
+  </tr>
+
+  <tr>
+    <th>Description:</th>
+    <td>
+      [if-any allow_edit]
+         <textarea name="content" rows="12" cols="75">[initial_content]</textarea>
+         [# Note: wrap="hard" has no effect on content_editor because we copy to a hidden field before submission.]
+      [else]
+        [initial_content]
+      [end]
+    </td>
+  </tr>
+
+  <tr>
+    <th>Status:</th>
+    <td>
+      [if-any allow_edit]
+        <select id="status" name="status">
+          <option style="display: none" value="[initial_status]"></option>
+        </select>
+      [else]
+        [initial_status]
+      [end]
+    </td>
+  </tr>
+
+  <tr>
+    <th>Owner:</th>
+    <td>
+       [if-any allow_edit]
+         <input id="owner_editor" type="text" name="owner" size="25" class="acob" value="[initial_owner]"
+                autocomplete="off">
+         <span id="fieldnamefeedback" class="fielderror" style="margin-left:1em">
+            [if-any errors.owner][errors.owner][end]
+         </span>
+       [else]
+         [initial_owner]<br>
+       [end]
+       <span>
+        <input type="checkbox" [if-any allow_edit][else]disabled[end] name="owner_defaults_to_member" style="margin-left:2em" [if-any initial_owner_defaults_to_member]checked[end]>
+        <label for="owner_defaults_to_member_checkbox">Default to member who is entering the issue</label>
+       </span>
+    </td>
+  </tr>
+
+  <tr>
+    <th>Components:</th>
+    <td>
+      [if-any allow_edit]
+        <input id="components" type="text" name="components" size="75" class="acob"
+               autocomplete="off" value="[initial_components]">
+       <span id="fieldnamefeedback" class="fielderror" style="margin-left:1em">
+          [if-any errors.components][errors.components][end]
+       </span>
+      [else]
+        [initial_components]
+      [end]
+       <br/>
+       <span>
+        <input type="checkbox" [if-any allow_edit][else]disabled[end] name="component_required" [if-any initial_component_required]checked[end]>
+        <label for="component_required_checkbox">Require at least one component</label>
+       </span>
+    </td>
+  </tr>
+
+  [if-any allow_edit][if-any uneditable_fields]
+  <tr id="res_fd_banner"><th></th>
+    <td style="text-align:left; border-radius:25px">
+      <span style="background:var(--chops-orange-50); padding:5px; margin-top:10px;padding-left:10px; padding-right:10px; border-radius:25px">
+        <span style="padding-right:7px">
+        Info: Disabled inputs occur when you are not allowed to edit that restricted field.
+        </span>
+        <i id="res_fd_message" class="material-icons inline-icon" style="font-weight:bold; font-size:14px; vertical-align: text-bottom; cursor: pointer">
+        close</i>
+      </span>
+    </td>
+  </tr>
+  [end][end]
+
+  [for fields]
+    [# TODO(jrobbins): determine applicability dynamically and update fields in JS]
+    [# approval subfields are shown below, not here]
+    [if-any fields.field_def.is_approval_subfield][else][if-any fields.field_def.is_phase_field][else]
+      <tr>
+        <th>[fields.field_name]:</th>
+        <td colspan="2">
+          [if-any allow_edit]
+            [if-any fields.is_editable]
+              [include "field-value-widgets.ezt" False "tmpl" False ""]
+            [else]
+              <input disabled value = "
+              [for fields.values]
+                [fields.values.val]
+              [end]
+              " style="text-align:right; width:12em" class="multivalued customfield" aria-labelledby="[fields.field_id]_label">
+            [end]
+          [else]
+            [for fields.values]
+              [fields.values.val]
+            [end]
+          [end]
+        </td>
+      <tr>
+    [end][end]
+  [end]
+
+  <tr>
+    <th>Labels:</th>
+    <td>
+      [include "label-fields.ezt" "all" ""]
+     </td>
+   </tr>
+
+   <tr>
+     <th>Template admins:</th>
+     <td>
+       [if-any allow_edit]
+         <input id="admin_names_editor" type="text" name="admin_names" size="75" class="acob" value="[initial_admins]"
+                autocomplete="off">
+       [else]
+         [initial_admins]
+       [end]
+     </td>
+   </tr>
+
+  [if-any approvals]
+     <tr>
+       <th>Launch Gates:</th>
+       <td colspan="7">
+         <input type="checkbox" name="add_approvals" id="cb_add_approvals" [if-any allow_edit][else]disabled[end] [if-any initial_add_approvals]checked="checked"[end]>
+         <label for="cb_add_approvals">Include Gates and Approval Tasks in issue</label>
+         [include "launch-gates-widget.ezt"]
+         <span id="fieldnamefeedback" class="fielderror" style="margin-left:1em">
+              [if-any errors.phase_approvals][errors.phase_approvals][end]
+         </span>
+       </td>
+     </tr>
+  [end]
+
+  [for fields]
+    [if-any fields.field_def.is_approval_subfield]
+      <tr id="subfield-row" class="subfield-row-class">
+        <th>[fields.field_def.parent_approval_name] [fields.field_name]:</th>
+        <td colspan="2">
+          [if-any allow_edit]
+            [if-any fields.is_editable]
+              [include "field-value-widgets.ezt" False "tmpl" False ""]
+            [else]
+              <input disabled value = "
+              [for fields.values]
+                [fields.values.val]
+              [end]
+              " style="text-align:right; width:12em" class="multivalued customfield" aria-labelledby="[fields.field_id]_label">
+            [end]
+          [else]
+            [for fields.values][fields.values.val][end]
+          [end]
+        </td>
+      </tr>
+  [end][end]
+
+  [if-any allow_edit]
+    <tr>
+      <td></td>
+      <td>
+        <input id="submit_btn" type="submit" name="submit" value="Save template">
+        <input id="delete_btn" type="submit" class="secondary" name="deletetemplate" value="Delete Template">
+      </td>
+    </tr>
+  [end]
+
+</table>
+</form>
+
+[include "field-value-widgets-js.ezt"]
+
+[end][# end if not read_only]
+
+<script type="text/javascript" nonce="[nonce]">
+runOnLoad(function() {
+
+  [if-any allow_edit]
+    let addPhasesCheckbox = document.getElementById('cb_add_approvals');
+    if (addPhasesCheckbox) {
+      addPhasesCheckbox.addEventListener('change', toggleGatesView);
+    }
+
+    var acobElements = document.getElementsByClassName("acob");
+    for (var i = 0; i < acobElements.length; ++i) {
+       var el = acobElements[[]i];
+       el.addEventListener("focus", function(event) {
+           _acrob(null);
+           _acof(event);
+       });
+    }
+
+    if ($("status")) {
+      _loadStatusSelect("[projectname]", "status", "[initial_status]");
+      $("status").addEventListener("focus", function(event) {
+        _acrob(null);
+      });
+    }
+
+    if($("res_fd_message")) {
+      $("res_fd_message").onclick = function(){
+        $("res_fd_banner").classList.add("hidden");
+      };
+    };
+
+  [else]
+
+    let labelInputs = document.getElementsByClassName("labelinput");
+    Array.prototype.forEach.call(labelInputs, labelInput => {
+      labelInput.disabled = true;
+    });
+  [end]
+
+  toggleGatesView();
+  function toggleGatesView() {
+    let addPhasesCheckbox = document.getElementById('cb_add_approvals');
+    if (addPhasesCheckbox === null) return;
+    let addPhases = addPhasesCheckbox.checked;
+    let subfieldRows = document.getElementsByClassName('subfield-row-class');
+    let phasefieldRows = document.getElementsByClassName('phasefield-row-class');
+    if (addPhases) {
+      $('launch-gates-table').classList.remove('hidden');
+      for (let i=0; i<subfieldRows.length; i++){
+        subfieldRows[[]i].classList.remove('hidden');
+      }
+      for (let i=0; i<phasefieldRows.length; i++){
+        phasefieldRows[[]i].classList.remove('hidden');
+      }
+    } else{
+      $('launch-gates-table').classList.add('hidden');
+      for (let i=0; i<subfieldRows.length; i++){
+        subfieldRows[[]i].classList.add('hidden');
+      }
+      for (let i=0; i<phasefieldRows.length; i++){
+        phasefieldRows[[]i].classList.add('hidden');
+      }
+    }
+  }
+
+});
+</script>
+
+[include "../framework/footer.ezt"]