Move milestones branch out of the way to prepare for merge with trunk
[[Split portion of a mixed commit.]] - Legacy-Id: 5185.1
This commit is contained in:
parent
1b56a33d21
commit
bbe51020d4
|
@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<li class="sect first">Secretariat</li>
|
||||
<li><a href="/admin/iesg/telechatdate/">Telechat Dates</a></li>
|
||||
<li><a href="/admin/iesg/telechatagendaitem/">Management Items</a></li>
|
||||
<li><a href="{% url ietf.iesg.views.milestones_needing_review %}">Milestones</a></li>
|
||||
{# FIXME: this link should be removed when the old WG Actions are completely dead #}
|
||||
<li><a href="{% url ietf.iesg.views.working_group_actions %}">Working Groups</a></li>
|
||||
{% endif %}
|
||||
|
|
|
@ -15,7 +15,7 @@ div.milestones-for-group { margin: 0.5em 0; }
|
|||
|
||||
{% for g in ad.groups_needing_review %}
|
||||
|
||||
<div class="milestones-for-group">New milestones for <a href="{% url wg_edit_milestones acronym=g.acronym %}">{{ g.name }} ({{ g.acronym }})</a>:</div>
|
||||
<div class="milestones-for-group">{{ g.name }} ({{ g.acronym }}) <a href="{% url wg_edit_milestones acronym=g.acronym %}">has new milestones</a>:</div>
|
||||
|
||||
{% with g.milestones_needing_review as milestones %}
|
||||
{% include "wginfo/milestones.html" %}
|
||||
|
|
|
@ -6,11 +6,12 @@
|
|||
tr.milestone td { padding: 0.2em 0; cursor: pointer; vertical-align: top; }
|
||||
tr.milestone:hover { background-color: #e8f0fa; }
|
||||
td.due { width: 5em; }
|
||||
.milestone .needs-accept { font-style: italic; display: inline-block; margin-left: 0.5em; color: #2647a0; }
|
||||
.milestone.changed { font-weight: bold; }
|
||||
.milestone .note { font-style: italic; display: inline-block; margin-left: 0.5em; color: #2647a0; }
|
||||
.milestone .doc { display: block; padding-left: 1em; }
|
||||
.edit-milestone { display: none; }
|
||||
.edit-milestone.delete, .edit-milestone.delete input { color: #aaa !important; }
|
||||
.edit-milestone table { margin: 0.3em 0; }
|
||||
.milestone.delete, .edit-milestone.delete, .edit-milestone.delete input { color: #aaa !important; }
|
||||
.edit-milestone table { margin: 1em 0; }
|
||||
.edit-milestone table td { padding: 0.1em; }
|
||||
.edit-milestone .desc input { width: 50em; }
|
||||
.edit-milestone .due input { width: 6em; }
|
||||
|
@ -63,11 +64,13 @@ this list</a> to the currently in-use milestones for the {{ group.acronym }} {{
|
|||
<form action="" method="post" id="milestones-form">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
{% for form in forms %}
|
||||
<tr class="milestone">
|
||||
<tr class="milestone{% if form.delete.data %} delete{% endif %}">
|
||||
<td class="due">{% if form.milestone.resolved %}{{ form.milestone.resolved }}{% else %}{{ form.milestone.due|date:"M Y" }}{% endif %}</td>
|
||||
<td>
|
||||
<div>{{ form.milestone.desc }}
|
||||
{% if form.needs_review %}<span class="needs-accept">awaiting accept</span>{% endif %}</div>
|
||||
{% if form.needs_review %}<span class="note">awaiting accept</span>{% endif %}
|
||||
{% if form.changed %}<span class="note">changed</span>{% endif %}
|
||||
</div>
|
||||
|
||||
{% for d in form.docs_names %}
|
||||
<div class="doc">{{ d }}</div>
|
||||
|
@ -75,15 +78,15 @@ this list</a> to the currently in-use milestones for the {{ group.acronym }} {{
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="edit-milestone"><td colspan="2">{% include "wginfo/milestone_form.html" %}</td></tr>
|
||||
<tr class="edit-milestone{% if form.changed %} changed{% endif %}"><td colspan="2">{% include "wginfo/milestone_form.html" %}</td></tr>
|
||||
{% endfor %}
|
||||
<tr class="milestone add"><td></td><td>Add {% if milestone_set == "chartering" %}charter{% endif%} milestone {% if needs_review %}for AD review{% endif %}</td></tr>
|
||||
<tr class="edit-milestone template"><td colspan="2">{% with empty_form as form %}{% include "wginfo/milestone_form.html" %}{% endwith %}</td></tr>
|
||||
</table>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{% if milestone_set == "charter" %}{% url doc_view name=group.charter.canonical_name %}{% else %}{% url wg_charter acronym=group.acronym %}{% endif %}">Back</a>
|
||||
<input type="submit" data-labelsave="Save" data-labelreview="Review changes" value="Save"/>
|
||||
<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>
|
||||
<input class="button" type="submit" data-labelsave="Save" data-labelreview="Review changes" value="Save" style="display:none"/>
|
||||
<input type="hidden" name="action" value="save">
|
||||
</div>
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
{% block morecss %}
|
||||
{{ block.super }}
|
||||
h2 a.edit { font-weight: normal; font-size: 13px; display: inline-block; margin-left: 0.5em; }
|
||||
h2 a.button { margin-left: 0.5em; font-size: 13px; }
|
||||
{% endblock %}
|
||||
|
||||
{% block wg_content %}
|
||||
|
@ -167,7 +167,7 @@ is occasionally incorrect.</span>
|
|||
|
||||
<h2>Milestones
|
||||
{% if user|has_role:"Area Director,Secretariat" or is_chair %}
|
||||
<a class="edit" href="{% url wg_edit_milestones acronym=wg.acronym %}">Add or edit milestones</a>
|
||||
<a class="button" href="{% url wg_edit_milestones acronym=wg.acronym %}">Add or edit milestones</a>
|
||||
{% endif %}
|
||||
</h2>
|
||||
|
||||
|
|
|
@ -45,23 +45,26 @@ class MilestoneForm(forms.Form):
|
|||
m = self.milestone = kwargs.pop("instance", None)
|
||||
|
||||
self.needs_review = kwargs.pop("needs_review", False)
|
||||
can_review = not self.needs_review
|
||||
|
||||
if m:
|
||||
self.needs_review = m.state_id == "review"
|
||||
|
||||
if not "initial" in kwargs:
|
||||
kwargs["initial"] = {}
|
||||
kwargs["initial"].update(dict(id=m.pk,
|
||||
desc=m.desc,
|
||||
due_month=m.due.month,
|
||||
due_year=m.due.year,
|
||||
resolved_checkbox=bool(m.resolved),
|
||||
resolved_checkbox="on" if m.resolved else False,
|
||||
resolved=m.resolved,
|
||||
docs=",".join(m.docs.values_list("pk", flat=True)),
|
||||
delete=False,
|
||||
accept="noaction" if can_review and self.needs_review else None,
|
||||
))
|
||||
|
||||
kwargs["prefix"] = "m%s" % m.pk
|
||||
|
||||
self.needs_review = m.state_id == "review"
|
||||
|
||||
super(MilestoneForm, self).__init__(*args, **kwargs)
|
||||
|
||||
# set choices for due date
|
||||
|
@ -77,7 +80,6 @@ class MilestoneForm(forms.Form):
|
|||
|
||||
self.fields["due_year"].choices = zip(years, map(str, years))
|
||||
|
||||
|
||||
# figure out what to prepopulate many-to-many field with
|
||||
pre = ""
|
||||
if not self.is_bound:
|
||||
|
@ -90,6 +92,9 @@ class MilestoneForm(forms.Form):
|
|||
self.docs_names = parse_doc_names(pre)
|
||||
self.docs_prepopulate = json_doc_names(self.docs_names)
|
||||
|
||||
# calculate whether we've changed
|
||||
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()))
|
||||
|
||||
def clean_docs(self):
|
||||
s = self.cleaned_data["docs"]
|
||||
return Document.objects.filter(pk__in=[x.strip() for x in s.split(",") if x.strip()], type="draft")
|
||||
|
|
|
@ -205,3 +205,7 @@ table.milestones td.due { vertical-align: top; width: 80px; }
|
|||
table.milestones .doc { display: block; padding-left: 1em; }
|
||||
|
||||
.stream-state .milestone { display: inline-block; font-size: smaller; background-color: #d5dde6; padding: 0 0.2em; margin-left: 0.3em; }
|
||||
|
||||
.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 }
|
||||
.button:hover { background: #ddd; color: #222; }
|
||||
.button:active { background: #ccc; color: #000; }
|
||||
|
|
|
@ -8,6 +8,13 @@ jQuery(function () {
|
|||
idCounter = v - 1;
|
||||
});
|
||||
|
||||
function setChanged() {
|
||||
$(this).closest(".edit-milestone").addClass("changed");
|
||||
}
|
||||
|
||||
jQuery('#milestones-form .edit-milestone select,#milestones-form .edit-milestone input,#milestones-form .edit-milestone textarea').live("change", setChanged);
|
||||
jQuery('#milestones-form .edit-milestone .token-input-list input').live("click", setChanged);
|
||||
|
||||
function setSubmitButtonState() {
|
||||
var action, label;
|
||||
if (jQuery("#milestones-form input[name$=delete]:visible").length > 0)
|
||||
|
@ -15,9 +22,14 @@ jQuery(function () {
|
|||
else
|
||||
action = "save";
|
||||
|
||||
jQuery("#milestones-form input[name=action]").val(action);
|
||||
|
||||
var submit = jQuery("#milestones-form input[type=submit]");
|
||||
submit.val(submit.data("label" + action));
|
||||
jQuery("#milestones-form input[name=action]").val(action);
|
||||
if (jQuery("#milestones-form .edit-milestone.changed").length > 0 || action == "review")
|
||||
submit.show();
|
||||
else
|
||||
submit.hide();
|
||||
}
|
||||
|
||||
jQuery("#milestones-form tr.milestone").click(function () {
|
||||
|
@ -53,10 +65,18 @@ jQuery(function () {
|
|||
editRow.show();
|
||||
}
|
||||
|
||||
editRow.find('input[name$="expanded_for_editing"]').val("True");
|
||||
editRow.find('input[name$="desc"]').focus();
|
||||
|
||||
setSubmitButtonState();
|
||||
|
||||
// collapse unchanged rows
|
||||
jQuery("#milestones-form tr.milestone").not(this).each(function () {
|
||||
var e = jQuery(this).next('tr.edit-milestone');
|
||||
if (e.is(":visible") && !e.hasClass("changed")) {
|
||||
jQuery(this).show();
|
||||
e.hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function setResolvedState() {
|
||||
|
@ -83,18 +103,22 @@ jQuery(function () {
|
|||
.live("change", setResolvedState);
|
||||
|
||||
function setDeleteState() {
|
||||
var top = jQuery(this).closest(".edit-milestone");
|
||||
var edit = jQuery(this).closest(".edit-milestone"), row = edit.prev("tr.milestone");
|
||||
|
||||
if (jQuery(this).is(":checked")) {
|
||||
if (+top.find('input[name$="id"]').val() < 0) {
|
||||
top.remove();
|
||||
if (+edit.find('input[name$="id"]').val() < 0) {
|
||||
edit.remove();
|
||||
setSubmitButtonState();
|
||||
}
|
||||
else
|
||||
top.addClass("delete")
|
||||
else {
|
||||
row.addClass("delete");
|
||||
edit.addClass("delete");
|
||||
}
|
||||
}
|
||||
else {
|
||||
row.removeClass("delete");
|
||||
edit.removeClass("delete");
|
||||
}
|
||||
else
|
||||
top.removeClass("delete")
|
||||
}
|
||||
|
||||
jQuery("#milestones-form .edit-milestone .delete input[type=checkbox]")
|
||||
|
@ -104,4 +128,6 @@ jQuery(function () {
|
|||
jQuery('#milestones-form .edit-milestone .errorlist').each(function () {
|
||||
jQuery(this).closest(".edit-milestone").prev().click();
|
||||
});
|
||||
|
||||
setSubmitButtonState();
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue