Home | History | Annotate | Download | only in templates
      1 <html>
      2 <head>
      3 <title>{{.Title}}</title>
      4 <link rel="stylesheet" type="text/css" href="res/style.css" />
      5 <link rel="icon" type="image/ico" href="res/favicon.ico" />
      6 <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
      7 <script type="text/javascript" src="res/third_party/jquery.tablednd.js"></script>
      8 <script type="text/javascript">
      9 "use strict";
     10 
     11 var issues = {{.BugsJson}};
     12 var edited = {};
     13 
     14 function edit_label(bug_id, old_value, new_value) {
     15     console.log("issue[" + bug_id + "]: " + old_value + " -> " + new_value);
     16     if (!edited[bug_id]) {
     17         edited[bug_id] = JSON.parse(JSON.stringify(issues[bug_id]));
     18     }
     19     var old_index = edited[bug_id]["labels"].indexOf(old_value);
     20     if (old_index > -1) {
     21         edited[bug_id]["labels"][old_index] = new_value;
     22     } else {
     23         edited[bug_id]["labels"].push(new_value)
     24     }
     25     if (JSON.stringify(issues[bug_id]) == JSON.stringify(edited[bug_id])) {
     26         console.log("Not changing " + bug_id);
     27         delete edited[bug_id]
     28     }
     29     document.getElementById("all_edits").value = JSON.stringify(edited);
     30 }
     31 
     32 </script>
     33 </head>
     34 <body>
     35 <h1>BugChomper</h1>
     36 
     37 <form method="post">
     38 <input type="hidden" name="all_edits" id="all_edits" value="{}" />
     39 <input type="submit" value="Submit changes to issue tracker" />
     40 </form>
     41 <table id="buglist">
     42   <thead>
     43     <tr id="table_header" class="nodrag tr_head">
     44       <td colspan=3><h2>Open bugs for {{.User}}</h2></td>
     45     </tr>
     46     <tr id="table_subheader" class="nodrag tr_head">
     47       <td>ID</td>
     48       <td>Priority</td>
     49       <td>Title</td>
     50     </tr>
     51   </thead>
     52   <tbody>
     53     {{with $all_data := .}}
     54       {{range $index, $priority := index $all_data.Priorities}}
     55         <tr id="priority_{{$priority}}"
     56             class="{{if eq $index 0}}nodrop{{else}}{{end}} nodrag priority_row priority_{{$priority}}"
     57             >
     58           <td colspan=3 class="priority_td">Priority {{$priority}}</td>
     59         </tr>
     60         {{range $index, $bug := index $all_data.BugsByPriority $priority}}
     61           <tr id="{{$bug.Id}}" class="priority_{{$priority}}">
     62             <td id="id_{{$bug.Id}}">
     63               <a href="{{$bug.URL}}" target="_blank">{{$bug.Id}}</a>
     64             </td>
     65             <td id="priority_{{$bug.Id}}">{{$priority}}</td>
     66             <td id="title_{{$bug.Id}}">{{$bug.Title}}</td>
     67           </tr>
     68         {{end}}
     69       {{end}}
     70     {{end}}
     71   </tbody>
     72 </table>
     73 
     74 <script type="text/javascript">
     75 $(document).ready(function() {
     76     $("#buglist").tableDnD({
     77         onDrop: function(table, dropped_row) {
     78             var id = dropped_row.id;
     79             var css_priority_prefix = "priority_"
     80             var new_priority = null;
     81             var dropped_index = null;
     82             var thead_rows = table.tHead.rows;
     83             var tbody_rows = table.tBodies[0].rows;
     84             var all_rows = [];
     85             for (var i = 0; i < thead_rows.length; i++) {
     86                 all_rows.push(thead_rows[i]);
     87             }
     88             for (var i = 0; i < tbody_rows.length; i++) {
     89                 all_rows.push(tbody_rows[i]);
     90             }
     91             for (var i = 0; i < all_rows.length; i++) {
     92                 if (all_rows[i].id) {
     93                     if (all_rows[i].id.indexOf(css_priority_prefix) == 0) {
     94                         new_priority = all_rows[i].id.substring(css_priority_prefix.length);
     95                     }
     96                     if (all_rows[i].id == id) {
     97                         break;
     98                     }
     99                 } else {
    100                   console.warn("No id for:");
    101                   console.warn(all_rows[i]);
    102                 }
    103             }
    104             if (new_priority) {
    105                 priority_td = document.getElementById(css_priority_prefix + id);
    106                 old_priority = priority_td.innerHTML;
    107                 if (priority_td && new_priority != old_priority) {
    108                     priority_td.innerHTML = new_priority;
    109                     document.getElementById(id).className = css_priority_prefix + new_priority;
    110                     edit_label(id, "{{.PriorityPrefix}}" + old_priority, "{{.PriorityPrefix}}" + new_priority);
    111                 }
    112             }
    113         }
    114     });
    115 });
    116 </script>
    117 </body>
    118 </html>
    119