Skip to content

Commit bbe5102

Browse files
committed
Move milestones branch out of the way to prepare for merge with trunk
[[Split portion of a mixed commit.]] - Legacy-Id: 5185.1
1 parent 1b56a33 commit bbe5102

7 files changed

Lines changed: 63 additions & 24 deletions

File tree

ietf/templates/base_leftmenu.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
<li class="sect first">Secretariat</li>
5252
<li><a href="/admin/iesg/telechatdate/">Telechat Dates</a></li>
5353
<li><a href="/admin/iesg/telechatagendaitem/">Management Items</a></li>
54+
<li><a href="{% url ietf.iesg.views.milestones_needing_review %}">Milestones</a></li>
5455
{# FIXME: this link should be removed when the old WG Actions are completely dead #}
5556
<li><a href="{% url ietf.iesg.views.working_group_actions %}">Working Groups</a></li>
5657
{% endif %}

ietf/templates/iesg/milestones_needing_review.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ <h3 class="ad">{{ ad.plain_name }}</h4>
1515

1616
{% for g in ad.groups_needing_review %}
1717

18-
<div class="milestones-for-group">New milestones for <a href="{% url wg_edit_milestones acronym=g.acronym %}">{{ g.name }} ({{ g.acronym }})</a>:</div>
18+
<div class="milestones-for-group">{{ g.name }} ({{ g.acronym }}) <a href="{% url wg_edit_milestones acronym=g.acronym %}">has new milestones</a>:</div>
1919

2020
{% with g.milestones_needing_review as milestones %}
2121
{% include "wginfo/milestones.html" %}

ietf/templates/wginfo/edit_milestones.html

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
tr.milestone td { padding: 0.2em 0; cursor: pointer; vertical-align: top; }
77
tr.milestone:hover { background-color: #e8f0fa; }
88
td.due { width: 5em; }
9-
.milestone .needs-accept { font-style: italic; display: inline-block; margin-left: 0.5em; color: #2647a0; }
9+
.milestone.changed { font-weight: bold; }
10+
.milestone .note { font-style: italic; display: inline-block; margin-left: 0.5em; color: #2647a0; }
1011
.milestone .doc { display: block; padding-left: 1em; }
1112
.edit-milestone { display: none; }
12-
.edit-milestone.delete, .edit-milestone.delete input { color: #aaa !important; }
13-
.edit-milestone table { margin: 0.3em 0; }
13+
.milestone.delete, .edit-milestone.delete, .edit-milestone.delete input { color: #aaa !important; }
14+
.edit-milestone table { margin: 1em 0; }
1415
.edit-milestone table td { padding: 0.1em; }
1516
.edit-milestone .desc input { width: 50em; }
1617
.edit-milestone .due input { width: 6em; }
@@ -63,27 +64,29 @@ <h1>{{ title }}</h1>
6364
<form action="" method="post" id="milestones-form">
6465
<table cellspacing="0" cellpadding="0">
6566
{% for form in forms %}
66-
<tr class="milestone">
67+
<tr class="milestone{% if form.delete.data %} delete{% endif %}">
6768
<td class="due">{% if form.milestone.resolved %}{{ form.milestone.resolved }}{% else %}{{ form.milestone.due|date:"M Y" }}{% endif %}</td>
6869
<td>
6970
<div>{{ form.milestone.desc }}
70-
{% if form.needs_review %}<span class="needs-accept">awaiting accept</span>{% endif %}</div>
71+
{% if form.needs_review %}<span class="note">awaiting accept</span>{% endif %}
72+
{% if form.changed %}<span class="note">changed</span>{% endif %}
73+
</div>
7174

7275
{% for d in form.docs_names %}
7376
<div class="doc">{{ d }}</div>
7477
{% endfor %}
7578
</td>
7679
</tr>
7780

78-
<tr class="edit-milestone"><td colspan="2">{% include "wginfo/milestone_form.html" %}</td></tr>
81+
<tr class="edit-milestone{% if form.changed %} changed{% endif %}"><td colspan="2">{% include "wginfo/milestone_form.html" %}</td></tr>
7982
{% endfor %}
8083
<tr class="milestone add"><td></td><td>Add {% if milestone_set == "chartering" %}charter{% endif%} milestone {% if needs_review %}for AD review{% endif %}</td></tr>
8184
<tr class="edit-milestone template"><td colspan="2">{% with empty_form as form %}{% include "wginfo/milestone_form.html" %}{% endwith %}</td></tr>
8285
</table>
8386

8487
<div class="actions">
85-
<a href="{% if milestone_set == "charter" %}{% url doc_view name=group.charter.canonical_name %}{% else %}{% url wg_charter acronym=group.acronym %}{% endif %}">Back</a>
86-
<input type="submit" data-labelsave="Save" data-labelreview="Review changes" value="Save"/>
88+
<a class="button" href="{% if milestone_set == "charter" %}{% url doc_view name=group.charter.canonical_name %}{% else %}{% url wg_charter acronym=group.acronym %}{% endif %}">Cancel</a>
89+
<input class="button" type="submit" data-labelsave="Save" data-labelreview="Review changes" value="Save" style="display:none"/>
8790
<input type="hidden" name="action" value="save">
8891
</div>
8992

ietf/templates/wginfo/wg_charter.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
{% block morecss %}
3939
{{ block.super }}
40-
h2 a.edit { font-weight: normal; font-size: 13px; display: inline-block; margin-left: 0.5em; }
40+
h2 a.button { margin-left: 0.5em; font-size: 13px; }
4141
{% endblock %}
4242

4343
{% block wg_content %}
@@ -167,7 +167,7 @@ <h2>Charter for Working Group</h2>
167167

168168
<h2>Milestones
169169
{% if user|has_role:"Area Director,Secretariat" or is_chair %}
170-
<a class="edit" href="{% url wg_edit_milestones acronym=wg.acronym %}">Add or edit milestones</a>
170+
<a class="button" href="{% url wg_edit_milestones acronym=wg.acronym %}">Add or edit milestones</a>
171171
{% endif %}
172172
</h2>
173173

ietf/wginfo/milestones.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,26 @@ def __init__(self, *args, **kwargs):
4545
m = self.milestone = kwargs.pop("instance", None)
4646

4747
self.needs_review = kwargs.pop("needs_review", False)
48+
can_review = not self.needs_review
4849

4950
if m:
51+
self.needs_review = m.state_id == "review"
52+
5053
if not "initial" in kwargs:
5154
kwargs["initial"] = {}
5255
kwargs["initial"].update(dict(id=m.pk,
5356
desc=m.desc,
5457
due_month=m.due.month,
5558
due_year=m.due.year,
56-
resolved_checkbox=bool(m.resolved),
59+
resolved_checkbox="on" if m.resolved else False,
5760
resolved=m.resolved,
5861
docs=",".join(m.docs.values_list("pk", flat=True)),
62+
delete=False,
63+
accept="noaction" if can_review and self.needs_review else None,
5964
))
6065

6166
kwargs["prefix"] = "m%s" % m.pk
6267

63-
self.needs_review = m.state_id == "review"
64-
6568
super(MilestoneForm, self).__init__(*args, **kwargs)
6669

6770
# set choices for due date
@@ -77,7 +80,6 @@ def __init__(self, *args, **kwargs):
7780

7881
self.fields["due_year"].choices = zip(years, map(str, years))
7982

80-
8183
# figure out what to prepopulate many-to-many field with
8284
pre = ""
8385
if not self.is_bound:
@@ -90,6 +92,9 @@ def __init__(self, *args, **kwargs):
9092
self.docs_names = parse_doc_names(pre)
9193
self.docs_prepopulate = json_doc_names(self.docs_names)
9294

95+
# calculate whether we've changed
96+
self.changed = self.is_bound and (not self.milestone or any(str(self[f].data) != str(self.initial[f]) for f in self.fields.iterkeys()))
97+
9398
def clean_docs(self):
9499
s = self.cleaned_data["docs"]
95100
return Document.objects.filter(pk__in=[x.strip() for x in s.split(",") if x.strip()], type="draft")

static/css/base2.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,3 +205,7 @@ table.milestones td.due { vertical-align: top; width: 80px; }
205205
table.milestones .doc { display: block; padding-left: 1em; }
206206

207207
.stream-state .milestone { display: inline-block; font-size: smaller; background-color: #d5dde6; padding: 0 0.2em; margin-left: 0.3em; }
208+
209+
.button { display: inline-block; font-weight: normal; background: #eee; border: 1px solid #bbb; border-radius: 3px; color: #333; padding: 2px 8px; text-align: center; text-decoration: none; outline: none; transition-duration: 0.2s; cursor: pointer }
210+
.button:hover { background: #ddd; color: #222; }
211+
.button:active { background: #ccc; color: #000; }

static/js/edit-milestones.js

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,28 @@ jQuery(function () {
88
idCounter = v - 1;
99
});
1010

11+
function setChanged() {
12+
$(this).closest(".edit-milestone").addClass("changed");
13+
}
14+
15+
jQuery('#milestones-form .edit-milestone select,#milestones-form .edit-milestone input,#milestones-form .edit-milestone textarea').live("change", setChanged);
16+
jQuery('#milestones-form .edit-milestone .token-input-list input').live("click", setChanged);
17+
1118
function setSubmitButtonState() {
1219
var action, label;
1320
if (jQuery("#milestones-form input[name$=delete]:visible").length > 0)
1421
action = "review";
1522
else
1623
action = "save";
1724

25+
jQuery("#milestones-form input[name=action]").val(action);
26+
1827
var submit = jQuery("#milestones-form input[type=submit]");
1928
submit.val(submit.data("label" + action));
20-
jQuery("#milestones-form input[name=action]").val(action);
29+
if (jQuery("#milestones-form .edit-milestone.changed").length > 0 || action == "review")
30+
submit.show();
31+
else
32+
submit.hide();
2133
}
2234

2335
jQuery("#milestones-form tr.milestone").click(function () {
@@ -53,10 +65,18 @@ jQuery(function () {
5365
editRow.show();
5466
}
5567

56-
editRow.find('input[name$="expanded_for_editing"]').val("True");
5768
editRow.find('input[name$="desc"]').focus();
5869

5970
setSubmitButtonState();
71+
72+
// collapse unchanged rows
73+
jQuery("#milestones-form tr.milestone").not(this).each(function () {
74+
var e = jQuery(this).next('tr.edit-milestone');
75+
if (e.is(":visible") && !e.hasClass("changed")) {
76+
jQuery(this).show();
77+
e.hide();
78+
}
79+
});
6080
});
6181

6282
function setResolvedState() {
@@ -83,18 +103,22 @@ jQuery(function () {
83103
.live("change", setResolvedState);
84104

85105
function setDeleteState() {
86-
var top = jQuery(this).closest(".edit-milestone");
106+
var edit = jQuery(this).closest(".edit-milestone"), row = edit.prev("tr.milestone");
87107

88108
if (jQuery(this).is(":checked")) {
89-
if (+top.find('input[name$="id"]').val() < 0) {
90-
top.remove();
109+
if (+edit.find('input[name$="id"]').val() < 0) {
110+
edit.remove();
91111
setSubmitButtonState();
92112
}
93-
else
94-
top.addClass("delete")
113+
else {
114+
row.addClass("delete");
115+
edit.addClass("delete");
116+
}
117+
}
118+
else {
119+
row.removeClass("delete");
120+
edit.removeClass("delete");
95121
}
96-
else
97-
top.removeClass("delete")
98122
}
99123

100124
jQuery("#milestones-form .edit-milestone .delete input[type=checkbox]")
@@ -104,4 +128,6 @@ jQuery(function () {
104128
jQuery('#milestones-form .edit-milestone .errorlist').each(function () {
105129
jQuery(this).closest(".edit-milestone").prev().click();
106130
});
131+
132+
setSubmitButtonState();
107133
});

0 commit comments

Comments
 (0)