Skip to content

Commit fdca154

Browse files
committed
Implement custom form rendering for step 0.
Implement javascript to disable form elements that aren't used when wg or non-wg items are selected. Implement javascript to reload the page with the right set of non-wg mailing lists to close. - Legacy-Id: 274
1 parent ebe29bc commit fdca154

3 files changed

Lines changed: 105 additions & 22 deletions

File tree

ietf/mailinglists/forms.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django import newforms as forms
22
from models import NonWgMailingList, ImportedMailingList
33
from ietf.idtracker.models import PersonOrOrgInfo, IETFWG, Acronym
4+
import re
45

56
class NonWgStep1(forms.Form):
67
add_edit = forms.ChoiceField(choices=(
@@ -42,28 +43,27 @@ class ListReqStep1(forms.Form):
4243
('newnon', 'Create new non-WG email list at selected domain above'),
4344
('movenon', 'Move existing non-WG email list to selected domain above'),
4445
('closenon', 'Close existing non-WG email list at selected domain above'),
45-
), widget=forms.RadioSelect)
46+
), widget=forms.RadioSelect())
4647
#group = forms.ChoiceField(required=False)
4748
group = forms.ModelChoiceField(queryset=IETFWG.objects.all().select_related().order_by('acronym.acronym'), required=False, empty_label="-- Select Working Group")
48-
domain_name = forms.ChoiceField(choices=DOMAIN_CHOICES, required=False)
49+
domain_name = forms.ChoiceField(choices=DOMAIN_CHOICES, required=False, widget = forms.Select(attrs={'onChange': 'set_domain(this)'}))
4950
list_to_close = forms.ModelChoiceField(queryset=ImportedMailingList.objects.all(), required=False, empty_label="-- Select List To Close")
5051
def mail_type_fields(self):
5152
field = self['mail_type']
52-
return field.as_widget(field.field.widget)
53+
# RadioSelect() doesn't pass its attributes through to the <input>
54+
# elements, so in order to get the javascript onClick we add it here.
55+
return [re.sub(r'input ','input onClick="activate_widgets()" ',str(i)) for i in field.as_widget(field.field.widget)]
5356
def __init__(self, *args, **kwargs):
54-
dname = 'ietf.org'
55-
if args and args[0]:
56-
dn = 'domain_name'
57-
if kwargs.has_key('prefix'):
58-
dn = kwargs['prefix'] + '-' + dn
59-
dname = args[0][dn]
60-
dname = kwargs.get('dname', dname)
57+
initial = kwargs.get('initial', None)
58+
# could pass initial = None, so can't use a trick on the
59+
# above get.
60+
if initial:
61+
dname = initial.get('domain_name', 'ietf.org')
62+
else:
63+
dname = 'ietf.org'
6164
super(ListReqStep1, self).__init__(*args, **kwargs)
62-
#self.fields['group'].choices = [('', '-- Select Working Group')] + IETFWG.choices()
63-
#self.fields['list_to_close'].choices = [('', '-- Select List To Close')] + ImportedMailingList.choices(dname)
64-
#XXX This doesn't work yet. Maybe switch back to choices.
6565
self.fields['list_to_close'].queryset = ImportedMailingList.choices(dname)
66-
print "dname %s list_to_close values: %s" % (dname, self.fields['list_to_close'].queryset)
66+
self.fields['list_to_close'].widget.choices = self.fields['list_to_close'].choices
6767
self.fields['domain_name'].initial = dname
6868
def clean_group(self):
6969
group = self.clean_data['group']
@@ -181,7 +181,7 @@ def decompress(self, value):
181181
# check the checkbox, but for now let's try this.
182182
return ['', '', value]
183183
def __init__(self, attrs=None):
184-
widgets = (forms.CheckboxInput(), forms.TextInput(attrs={'size': 55, 'disabled': True}), forms.Textarea(attrs=attrs))
184+
widgets = (forms.CheckboxInput(attrs={'onClick': 'checkthis()'}), forms.TextInput(attrs={'size': 55, 'disabled': True}), forms.Textarea(attrs=attrs))
185185
super(AdminRequestor, self).__init__(widgets, attrs)
186186
def format_output(self, rendered_widgets):
187187
return u'<br/>\n'.join(["<label>%s Same as requestor</label>" % rendered_widgets[0]] + rendered_widgets[1:])

ietf/mailinglists/views.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,27 +192,26 @@ class ListReqWizard(wizard.Wizard):
192192
requestor_is_approver = False
193193
mlist_known = True
194194
def get_template(self):
195+
'''Start with form class, then step number, then the base form.'''
195196
templates = []
196-
#if self.step > 0:
197-
# action = {'add': 'addedit', 'edit': 'addedit', 'delete': 'delete'}[self.clean_forms[0].clean_data['add_edit']]
198-
# templates.append("mailinglists/nwg_wizard_%s_step%d.html" % (action, self.step))
199-
# templates.append("mailinglists/nwg_wizard_%s.html" % (action))
200197
c = self.form_list[self.step].__name__
201198
templates.append("mailinglists/list_wizard_%s.html" % (c))
202199
templates.append("mailinglists/list_wizard_step%d.html" % (self.step))
203200
templates.append("mailinglists/list_wizard.html")
204-
print templates
205201
return templates
206202
def render_template(self, *args, **kwargs):
207-
#self.extra_context['clean_forms'] = self.clean_forms
208203
self.extra_context['mlist_known'] = self.mlist_known
209204
if self.step > self.main_step:
210205
self.extra_context['main_form'] = self.clean_forms[self.main_step]
211206
self.extra_context['requestor_is_approver'] = self.requestor_is_approver
212207
if self.step == self.main_step + 1:
213208
self.extra_context['list'] = self.getlist()
214209
return super(ListReqWizard, self).render_template(*args, **kwargs)
215-
# want to implement parse_params to get domain for list
210+
def parse_params(self, request, *args, **kwargs):
211+
super(ListReqWizard, self).parse_params(request, *args, **kwargs)
212+
if self.step == 0:
213+
# allow javascript "redirects" to set initial values
214+
self.initial[0] = request.GET
216215
def process_step(self, request, form, step):
217216
form.full_clean()
218217
if step == 0:
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
{% extends "mailinglists/list_wizard_base.html" %}
2+
3+
{% block head %}
4+
<script language="javascript">
5+
function get_mail_type() {
6+
buttons = document.form_post["0-mail_type"]
7+
selected = ""
8+
for (i = 0; i < buttons.length; i++)
9+
if (buttons[i].checked)
10+
selected = buttons[i].value
11+
return selected
12+
}
13+
14+
function set_domain (widget) {
15+
loc = "./?domain_name=" + widget.options[widget.selectedIndex].value
16+
mail_type = get_mail_type()
17+
if (mail_type != "")
18+
loc = loc + "&mail_type=" + mail_type
19+
window.location = loc
20+
}
21+
22+
function activate_widgets() {
23+
selected = get_mail_type()
24+
if (selected == "") {
25+
return
26+
}
27+
wg = (selected.substr(-2) == "wg")
28+
document.form_post["0-group"].disabled = !wg
29+
document.form_post["0-domain_name"].disabled = wg
30+
document.form_post["0-list_to_close"].disabled = wg
31+
}
32+
</script>
33+
{% endblock %}
34+
35+
{% block body_attributes %}onLoad="activate_widgets()"{% endblock %}
36+
37+
{% block mlform %}
38+
<tr valign="top"><td bgcolor="#dfe9ef"><h3>WG email list
39+
&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
40+
{{ form.group }}
41+
{% if form.group.errors %}
42+
<ul class="errorlist">
43+
{% for error in form.group.errors %}
44+
<li>{{ error|escape }}</li>
45+
{% endfor %}
46+
</ul>
47+
{% endif %}
48+
</h3>
49+
50+
{% if form.mail_type.errors %}
51+
<ul class="errorlist">
52+
{% for error in form.mail_type.errors %}
53+
<li>{{ error|escape }}</li>
54+
{% endfor %}
55+
</ul>
56+
{% endif %}
57+
{{ form.mail_type_fields.0 }}<br>
58+
{{ form.mail_type_fields.1 }}<br>
59+
{{ form.mail_type_fields.2 }}<br>
60+
</td></tr>
61+
<tr>
62+
<td bgcolor="#ccdcec"><h3>Non-WG email list</h3>
63+
<b>Select Domain Name: </b>{{ form.domain_name }}<br>
64+
{{ form.mail_type_fields.3 }}<br>
65+
{{ form.mail_type_fields.4 }}<br>
66+
{{ form.mail_type_fields.5 }}<br>
67+
{{ form.list_to_close }}
68+
{% if form.list_to_close.errors %}
69+
<ul class="errorlist">
70+
{% for error in form.list_to_close.errors %}
71+
<li>{{ error|escape }}</li>
72+
{% endfor %}
73+
</ul>
74+
{% endif %}
75+
<br>
76+
</td></tr>
77+
<tr><td colspan="2">
78+
<font color="red">Note: Only members of the IAB (or their designees) and active
79+
participants in the IRTF may create or close a mailing list at iab.org and irtf.
80+
org, respectively, or move an existing list to one of these domains."</font>
81+
<br><br>
82+
</td></tr>
83+
84+
{% endblock %}

0 commit comments

Comments
 (0)