| [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">‹ 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"] |