Chromium Code Reviews| Index: tools/bug_chomper/templates/bug_chomper.html |
| diff --git a/tools/bug_chomper/templates/bug_chomper.html b/tools/bug_chomper/templates/bug_chomper.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b3b347aab21ffbe4d2981ea1c66993b933c6e78f |
| --- /dev/null |
| +++ b/tools/bug_chomper/templates/bug_chomper.html |
| @@ -0,0 +1,118 @@ |
| +<html> |
| +<head> |
| +<title>{{ .Title }}</title> |
|
jcgregorio
2014/05/13 16:28:12
Convention is to not put spaces, i.e. {{.Title}}.
borenet
2014/05/13 17:43:20
Done.
|
| +<link rel="stylesheet" type="text/css" href="res/style.css" /> |
| +<link rel="icon" type="image/ico" href="res/favicon.ico" /> |
| +<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> |
| +<script type="text/javascript" src="res/third_party/jquery.tablednd.js"></script> |
| +<script type="text/javascript"> |
| +"use strict"; |
| + |
| +var issues = {{ .BugsJson }}; |
| +var edited = {}; |
| + |
| +function edit_label(bug_id, old_value, new_value) { |
| + console.log("issue[" + bug_id + "]: " + old_value + " -> " + new_value); |
| + if (!edited[bug_id]) { |
| + edited[bug_id] = JSON.parse(JSON.stringify(issues[bug_id])); |
|
jcgregorio
2014/05/13 16:28:12
Shouldn't JSON.parse(JSON.stringify be a NOP?
borenet
2014/05/13 17:43:20
This is effectively a deep copy.
|
| + } |
| + var old_index = edited[bug_id]["labels"].indexOf(old_value); |
| + if (old_index > -1) { |
| + edited[bug_id]["labels"][old_index] = new_value; |
| + } else { |
| + edited[bug_id]["labels"].push(new_value) |
| + } |
| + if (JSON.stringify(issues[bug_id]) == JSON.stringify(edited[bug_id])) { |
| + console.log("Not changing " + bug_id); |
| + delete edited[bug_id] |
| + } |
| + document.getElementById("all_edits").value = JSON.stringify(edited); |
| +} |
| + |
| +</script> |
| +</head> |
| +<body> |
| +<h1>BugChomper</h1> |
| + |
| +<form method="post"> |
| +<input type="hidden" name="all_edits" id="all_edits" value="{}" /> |
| +<input type="submit" value="Submit changes to issue tracker" /> |
| +</form> |
| +<table id="buglist"> |
| + <thead> |
| + <tr id="table_header" class="nodrag tr_head"> |
| + <td colspan=3><h2>Open bugs for {{ .User }}</h2></td> |
| + </tr> |
| + <tr id="table_subheader" class="nodrag tr_head"> |
| + <td>ID</td> |
| + <td>Priority</td> |
| + <td>Title</td> |
| + </tr> |
| + </thead> |
| + <tbody> |
| + {{ with $all_data := . }} |
| + {{ range $index, $priority := index $all_data.Priorities }} |
| + <tr id="priority_{{ $priority }}" |
| + class="{{ if eq $index 0 }}nodrop{{ else }}{{ end }} nodrag priority_row priority_{{ $priority }}" |
| + > |
| + <td colspan=3 class="priority_td">Priority {{ $priority }}</td> |
| + </tr> |
| + {{ range $index, $bug := index $all_data.BugsByPriority $priority}} |
| + <tr id="{{ $bug.Id }}" class="priority_{{ $priority }}"> |
| + <td id="id_{{ $bug.Id }}"> |
| + <a href="{{ $bug.URL }}" target="_blank">{{ $bug.Id }}</a> |
| + </td> |
| + <td id="priority_{{ $bug.Id }}">{{ $priority }}</td> |
| + <td id="title_{{ $bug.Id }}">{{ $bug.Title }}</td> |
| + </tr> |
| + {{ end }} |
| + {{ end }} |
| + {{ end }} |
| + </tbody> |
| +</table> |
| + |
| +<script type="text/javascript"> |
| +$(document).ready(function() { |
| + $("#buglist").tableDnD({ |
| + onDrop: function(table, dropped_row) { |
| + var id = dropped_row.id; |
| + var css_priority_prefix = "priority_" |
| + var new_priority = null; |
| + var dropped_index = null; |
| + var thead_rows = table.tHead.rows; |
| + var tbody_rows = table.tBodies[0].rows; |
| + var all_rows = []; |
| + for (var i = 0; i < thead_rows.length; i++) { |
| + all_rows.push(thead_rows[i]); |
| + } |
| + for (var i = 0; i < tbody_rows.length; i++) { |
| + all_rows.push(tbody_rows[i]); |
| + } |
| + for (var i = 0; i < all_rows.length; i++) { |
| + if (all_rows[i].id) { |
| + if (all_rows[i].id.indexOf(css_priority_prefix) == 0) { |
| + new_priority = all_rows[i].id.substring(css_priority_prefix.length); |
| + } |
| + if (all_rows[i].id == id) { |
| + break; |
| + } |
| + } else { |
| + console.warn("No id for:"); |
| + console.warn(all_rows[i]); |
| + } |
| + } |
| + if (new_priority) { |
| + priority_td = document.getElementById(css_priority_prefix + id); |
| + old_priority = priority_td.innerHTML; |
| + if (priority_td && new_priority != old_priority) { |
| + priority_td.innerHTML = new_priority; |
| + document.getElementById(id).className = css_priority_prefix + new_priority; |
| + edit_label(id, "{{ .PriorityPrefix }}" + old_priority, "{{ .PriorityPrefix }}" + new_priority); |
| + } |
| + } |
| + } |
| + }); |
| +}); |
| +</script> |
| +</body> |
| +</html> |