Skip to content

Commit e1a5187

Browse files
committed
Add javascript to change initial text related with position
Refactor nomcom forms. See ietf-tools#913 - Legacy-Id: 5154
1 parent ecc5844 commit e1a5187

7 files changed

Lines changed: 125 additions & 41 deletions

File tree

ietf/nomcom/forms.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.http import HttpResponseRedirect, HttpResponseForbidden
55
from django.shortcuts import get_object_or_404
66
from django.core.urlresolvers import reverse
7+
from django.template.loader import render_to_string
78

89
from ietf.utils import unaccent
910
from ietf.utils.mail import send_mail
@@ -28,6 +29,12 @@ def get_group_or_404(year):
2829

2930

3031
class BaseNomcomForm(forms.ModelForm):
32+
def __unicode__(self):
33+
return self.as_div()
34+
35+
def as_div(self):
36+
return render_to_string('nomcom/nomcomform.html', {'form': self})
37+
3138
def get_fieldsets(self):
3239
if not self.fieldsets:
3340
yield dict(name=None, fields=self)
@@ -274,3 +281,7 @@ def save(self, commit=True):
274281
class Meta:
275282
model = Nomination
276283
fields = ('position', 'candidate_name', 'candidate_email', 'candidate_phone')
284+
285+
class Media:
286+
js = ("/js/jquery-1.5.1.min.js",
287+
"/js/nomcom.js", )

ietf/nomcom/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
url(r'^(?P<year>\d{4})/questionnaire/(?P<name>[^/]+)/$', 'questionnaire_detail', name='nomcom_questionnaire_detail'),
1111
url(r'^(?P<year>\d{4})/comments/$', 'comments', name='nomcom_comments'),
1212
url(r'^(?P<year>\d{4})/nominate/$', 'nominate', name='nomcom_nominate'),
13+
url(r'^ajax/position-text/(?P<position_id>\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'),
1314
url(r'^(?P<year>\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'),
1415
url(r'^(?P<year>\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'),
1516
url(r'^(?P<year>\d{4})/edit-publickey/$', 'edit_publickey', name='edit_publickey'),

ietf/nomcom/views.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
# -*- coding: utf-8 -*-
12
from django.shortcuts import render_to_response
23
from django.template import RequestContext
3-
from django.http import HttpResponseForbidden
4+
from django.http import HttpResponseForbidden, HttpResponse
45
from django.contrib.auth.decorators import login_required
56
from django.template.loader import render_to_string
7+
from django.utils import simplejson
8+
69

710
from ietf.nomcom.utils import get_nomcom_by_year, HOME_TEMPLATE
811
from ietf.nomcom.forms import EditPublicKeyForm, NominateForm
12+
from ietf.nomcom.models import Position
913

1014

1115
def index(request, year):
@@ -103,3 +107,15 @@ def edit_publickey(request, year):
103107
{'form': form,
104108
'group': nomcom.group,
105109
'message': message}, RequestContext(request))
110+
111+
112+
def ajax_position_text(request, position_id):
113+
try:
114+
position_text = Position.objects.get(id=position_id).initial_text
115+
except Position.DoesNotExist:
116+
position_text = ""
117+
118+
result = {'text': position_text}
119+
120+
json_result = simplejson.dumps(result)
121+
return HttpResponse(json_result, mimetype='application/json')
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<div class="baseform">
2+
3+
{% for fieldset in form.get_fieldsets %}
4+
{% if fieldset.name %}
5+
<div class="fieldset">
6+
<h2>{{ fieldset.name }}</h2>
7+
{% endif %}
8+
9+
{% for field in fieldset.fields %}
10+
<div id="baseform-fieldname-{{ field.html_name }}"
11+
class="{% if field.errors %}fieldError {% endif %}field BaseFormStringWidget{% if field.field.column_style %} {{ field.field.column_style }}{% endif %}">
12+
<label for="id_{{ field.html_name }}">{{ field.label }}
13+
{% if field.field.required %}
14+
<span class="fieldRequired" title="Required">*</span>
15+
{% endif %}
16+
</label>
17+
<div class="fieldWidget">
18+
<div id="{{ field.html_name }}_help" class="formHelp"> {{ field.help_text }}</div>
19+
{{ field }}
20+
{{ field.errors }}
21+
</div>
22+
<div class="endfield"></div>
23+
</div>
24+
{% endfor %}
25+
26+
{% if fieldset.name %}
27+
</div>
28+
{% endif %}
29+
{% endfor %}
30+
31+
<div class="submitrow">
32+
<input type="submit" value="Save" name="save" />
33+
</div>
34+
35+
</div>
36+

ietf/templates/nomcom/nominate.html

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,29 @@
22

33
{% block subtitle %} - Nominate{% endblock %}
44

5+
{% block pagehead %}
6+
{{ form.media }}
7+
{% endblock %}
8+
59
{% block nomcom_content %}
10+
<div class="js-info">
11+
Your browser has Javascript disabled. Please enable javascript and reload the page.
12+
<script type="text/javascript">
13+
(function ($) {
14+
$(".js-info").hide();
15+
})(jQuery);
16+
</script>
17+
</div>
18+
19+
620
{% if message %}
721
<div class="info-message-{{ message.0 }}">{{ message.1 }}</div>
822
{% endif %}
923

1024
{% if form.errors %}<div class="info-message-error">Please correct the following errors</div>{% endif %}
1125

12-
<form action="" method="post">{% csrf_token %}
13-
14-
<div class="baseform">
15-
16-
{% for fieldset in form.get_fieldsets %}
17-
{% if fieldset.name %}
18-
<div class="fieldset">
19-
<h2>{{ fieldset.name }}</h2>
20-
{% endif %}
21-
22-
{% for field in fieldset.fields %}
23-
<div id="baseform-fieldname-{{ field.html_name }}"
24-
class="{% if field.errors %}fieldError {% endif %}field BaseFormStringWidget{% if field.field.column_style %} {{ field.field.column_style }}{% endif %}">
25-
<label for="id_{{ field.html_name }}">{{ field.label }}
26-
{% if field.field.required %}
27-
<span class="fieldRequired" title="Required">*</span>
28-
{% endif %}
29-
</label>
30-
<div class="fieldWidget">
31-
<div id="{{ field.html_name }}_help" class="formHelp"> {{ field.help_text }}</div>
32-
{{ field }}
33-
{{ field.errors }}
34-
</div>
35-
<div class="endfield"></div>
36-
</div>
37-
{% endfor %}
38-
39-
{% if fieldset.name %}
40-
</div>
41-
{% endif %}
42-
{% endfor %}
43-
44-
<div class="submitrow">
45-
<input type="submit" value="Save" name="save" />
46-
</div>
47-
48-
</div>
26+
<form id="nominateform" action="" method="post">{% csrf_token %}
27+
{{ form }}
4928
</form>
5029

51-
52-
{% endblock %}
30+
{% endblock %}

static/css/base2.css

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,4 +275,10 @@ span.fieldRequired {
275275
color: red;
276276
}
277277

278-
278+
/* js styles */
279+
.js-info {
280+
background-color: #FFDD88;
281+
border: 1px dashed red;
282+
font-size: 1.2em;
283+
padding: 1em 2em;
284+
}

static/js/nomcom.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*jslint vars: false, browser: true */
2+
/*global jQuery */
3+
4+
(function ($) {
5+
"use strict";
6+
$.fn.nominateForm = function () {
7+
return this.each(function () {
8+
var $position = $("#id_position"),
9+
$comments = $("#id_comments"),
10+
baseurl = "/nomcom/ajax/position-text/";
11+
12+
$comments.change(function () {
13+
$.ajax({
14+
url: baseurl + $position.val() + '/',
15+
type: 'GET',
16+
cache: false,
17+
async: true,
18+
dataType: 'json',
19+
success: function (response) {
20+
$comments.text(response.text);
21+
}
22+
});
23+
});
24+
25+
$position.change(function () {
26+
$comments.trigger("change");
27+
});
28+
29+
});
30+
};
31+
32+
$(document).ready(function () {
33+
$("#nominateform").nominateForm();
34+
});
35+
36+
}(jQuery));

0 commit comments

Comments
 (0)