[define category_css]css/ph_list.css[end]
[include "../framework/header.ezt" "showtabs"]
[include "../framework/js-placeholders.ezt"]

[if-any read_only][include "../framework/read-only-rejection.ezt"]
[else]

<form action="adminLabels.do" id="adminLabels" method="POST">
 <input type="hidden" name="token" value="[form_token]">

 <h4>Predefined issue labels</h4>
 <div class="section">
  [if-any perms.EditProject]
    <table class="vt">
     <tr><td>
       <textarea name="predefinedlabels" rows="12" cols="75" style="tab-size:18">[labels_text]</textarea>
       [if-any errors.label_defs]
         <div class="fielderror">[errors.label_defs]</div>
       [end]
       <div>
         Each issue may have <b>at most one</b> label with each of these prefixes:<br>
         <input type="text" size="75" name="excl_prefixes"
                value="[for config.excl_prefixes][config.excl_prefixes][if-index config.excl_prefixes last][else], [end][end]">
       </div>
      </td>
      <td style="padding-left:.7em">
       <div class="tip">
           <b>Instructions:</b><br> List one label per line in desired sort-order.<br><br>
           Optionally, use an equals-sign to document the meaning of each label.
       </div>
      </td>
     </tr>
    </table>
  [else]
    <table cellspacing="0" cellpadding="2" border="0" class="results striped" width="100%">
     <tr>
       <th style="min-width:14em">Label</th>
       <th width="100%">Meaning</th>
     </tr>
     [for config.issue_labels]
       <tr>
         <td style="white-space:nowrap; padding-right:2em; color:#363">[config.issue_labels.name]</td>
         <td>[config.issue_labels.docstring]</td>
       </tr>
     [end]
    </table>
  [end]
 </div>

 [if-any perms.EditProject]
   <input type="submit" id="savechanges" name="btn" value="Save changes" class="submit">
 [end]

 <br>
 <br>

 <h4>Custom fields</h4>
 <div class="section">
  <table cellspacing="0" cellpadding="2" border="0" class="results striped vt" id="resultstable" width="100%">
  <tbody>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Type</th>
      <th>Required</th>
      <th>Multivalued</th>
      <th>Applicable to</th>
      <th>Description</th>
    </tr>
    [if-any field_defs][else]
      <tr>
        <td colspan="40">
          <div style="padding: 3em; text-align: center">
            This project has not defined any custom fields.
          </div>
        </td>
      </tr>
    [end]
    [for field_defs]
      [define detail_url]/p/[projectname]/fields/detail?field=[field_defs.field_name][end]
      [is field_defs.type_name "INT_TYPE"][define pretty_type_name]Integer[end][end]
      [is field_defs.type_name "ENUM_TYPE"][define pretty_type_name]Enum[end][end]
      [is field_defs.type_name "USER_TYPE"][define pretty_type_name]User[end][end]
      [is field_defs.type_name "STR_TYPE"][define pretty_type_name]String[end][end]
      [is field_defs.type_name "DATE_TYPE"][define pretty_type_name]Date[end][end]
      [is field_defs.type_name "URL_TYPE"][define pretty_type_name]Url[end][end]
      [is field_defs.type_name "APPROVAL_TYPE"][define pretty_type_name]Approval[end][end]
      <tr data-url="[detail_url]">
        <td>
          [field_defs.field_def.field_id]
        </td>
        <td class="id" style="white-space:nowrap">
          <a href="[detail_url]">[field_defs.field_name]</a></td>
        <td style="white-space:nowrap">
          [pretty_type_name]
        </td>
        <td style="white-space:nowrap">
          [if-any field_defs.is_required_bool]Required[else]Optional[end]
        </td>
        <td style="white-space:nowrap">
          [if-any field_defs.is_multivalued_bool]Multiple[else]Single[end]
        </td>
        <td style="white-space:nowrap">
          [if-any field_defs.applicable_type][field_defs.applicable_type][else]Any issue[end]
        </td>
        <td>
           [field_defs.docstring_short]
        </td>
      </tr>
    [end]
  </tbody>
  </table>
  <div class="list-foot"></div>
  [if-any perms.EditProject]
    <p><a href="/p/[projectname]/fields/create" class="buttonify primary">Add field</a></p>
  [end]
 </div>

</form>

[end]


<script type="text/javascript" nonce="[nonce]">
runOnLoad(function() {
  function _handleResultsClick(event) {
    var target = event.target;
    if (target.tagName == "A")
      return;
    while (target && target.tagName != "TR") target = target.parentNode;
    _go(target.attributes[[]"data-url"].value,
        (event.metaKey || event.ctrlKey || event.button == 1));
  };
  _addClickListener($("resultstable"), _handleResultsClick);
});
</script>

[include "../framework/footer.ezt"]
