[%# This Source Code Form is subject to the terms of the Mozilla Public
  # License, v. 2.0. If a copy of the MPL was not distributed with this
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
  #
  # This Source Code Form is "Incompatible With Secondary Licenses", as
  # defined by the Mozilla Public License, v. 2.0.
  #%]

[%# INTERFACE:
  # bug_id: integer. The number of the bug(s).
  # multiple_bugs: boolean. True if bug_id contains > 1 bug number.
  # showsummary: boolean. True if we are showing bug summaries.
  # rankdir: string. "TB" if we are ranking top-to-bottom,
                     "LR" if left-to-right.
  # image_url: string. The URL of the graphic showing the dependencies.
  # map_url: string. The URL of the map file for the image.  (Optional)
  # image_map: string. The image map for the graphic showing the
                       dependencies. (Optional)
  #%]

[% title = "Dependency Graph"
   header = title
 %]

[% IF NOT multiple_bugs %]
  [% filtered_desc = short_desc FILTER html %]
  [% title = "$title for $terms.bug $bug_id"
     header = "$header for $terms.bug <a href=\"show_bug.cgi?id=$bug_id\">$bug_id</a>"
     subheader = filtered_desc
   %]
[% END %]

[% PROCESS global/header.html.tmpl %]

[% image_map %]

<p>
  Green circles represent open [% terms.bugs %].
</p>

[% IF image_map %]
  <img src="[% image_url %]" alt="Dependency graph" usemap="#imagemap">
[% ELSE %]
  <a href="[% map_url %]">
    <img src="[% image_url %]" alt="Dependency graph" ismap="ismap">
  </a>
[% END %]

<hr>

<form action="showdependencygraph.cgi" method="GET">
  <table>
    <tr>
      <th><label for="id">[% terms.Bug %] numbers</label>:</th>
      <td><input id="id" name="id" value="[% bug_id %]"></td>
      <td>
        <input type="checkbox" id="showsummary" name="showsummary" [% " checked" IF showsummary %]>
        <label for="showsummary">Show the summaries of all displayed [% terms.bugs %]</label>
      </td>
    </tr>

    <tr>
      <th><label for="display">Display:</label></th>
      <td colspan="2">
        <select id="display" name="display">
          <option value="tree"[% 'selected="selected"' IF (!display || display == "tree") %]>
            Restrict to [% terms.bugs %] having a direct relationship with entered [% terms.bugs %]</option>
          <option value="web" [% 'selected="selected"' IF display == "web" %]>
            Show all [% terms.bugs %] having any relationship with entered [% terms.bugs %]</option>
        </select>
      </td>
    </tr>

    <tr>
      <th><label for="rankdir">Orientation:</label></th>
      <td colspan="2">
        <select id="rankdir" name="rankdir">
          <option value="TB"[% " selected" IF rankdir == "TB" %]>Top to bottom</option>
          <option value="BT"[% " selected" IF rankdir == "BT" %]>Bottom to top</option>
          <option value="LR"[% " selected" IF rankdir == "LR" %]>Left to right</option>
          <option value="RL"[% " selected" IF rankdir == "RL" %]>Right to left</option>
        </select>
      </td>
    </tr>
  </table>
  <input type="submit" id="change" value="Change Parameters">
</form>

[% PROCESS global/footer.html.tmpl %]
