From e1a518720bc2c6bafe797894a04c5a5a015a78a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Jim=C3=A9nez?= Date: Wed, 26 Dec 2012 12:00:25 +0000 Subject: [PATCH] Add javascript to change initial text related with position Refactor nomcom forms. See #913 - Legacy-Id: 5154 --- ietf/nomcom/forms.py | 11 ++++++ ietf/nomcom/urls.py | 1 + ietf/nomcom/views.py | 18 ++++++++- ietf/templates/nomcom/nomcomform.html | 36 +++++++++++++++++ ietf/templates/nomcom/nominate.html | 56 ++++++++------------------- static/css/base2.css | 8 +++- static/js/nomcom.js | 36 +++++++++++++++++ 7 files changed, 125 insertions(+), 41 deletions(-) create mode 100644 ietf/templates/nomcom/nomcomform.html create mode 100644 static/js/nomcom.js diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index 493591f55..cbcdd5d27 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -4,6 +4,7 @@ from django.contrib.formtools.preview import FormPreview from django.http import HttpResponseRedirect, HttpResponseForbidden from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse +from django.template.loader import render_to_string from ietf.utils import unaccent from ietf.utils.mail import send_mail @@ -28,6 +29,12 @@ def get_group_or_404(year): class BaseNomcomForm(forms.ModelForm): + def __unicode__(self): + return self.as_div() + + def as_div(self): + return render_to_string('nomcom/nomcomform.html', {'form': self}) + def get_fieldsets(self): if not self.fieldsets: yield dict(name=None, fields=self) @@ -274,3 +281,7 @@ class NominateForm(BaseNomcomForm): class Meta: model = Nomination fields = ('position', 'candidate_name', 'candidate_email', 'candidate_phone') + + class Media: + js = ("/js/jquery-1.5.1.min.js", + "/js/nomcom.js", ) diff --git a/ietf/nomcom/urls.py b/ietf/nomcom/urls.py index c65103c6e..bf118a336 100644 --- a/ietf/nomcom/urls.py +++ b/ietf/nomcom/urls.py @@ -10,6 +10,7 @@ urlpatterns = patterns('ietf.nomcom.views', url(r'^(?P\d{4})/questionnaire/(?P[^/]+)/$', 'questionnaire_detail', name='nomcom_questionnaire_detail'), url(r'^(?P\d{4})/comments/$', 'comments', name='nomcom_comments'), url(r'^(?P\d{4})/nominate/$', 'nominate', name='nomcom_nominate'), + url(r'^ajax/position-text/(?P\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'), url(r'^(?P\d{4})/edit-chair/$', EditChairFormPreview(EditChairForm), name='edit_chair'), url(r'^(?P\d{4})/edit-members/$', EditMembersFormPreview(EditMembersForm), name='edit_members'), url(r'^(?P\d{4})/edit-publickey/$', 'edit_publickey', name='edit_publickey'), diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index c98700796..f50842af3 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -1,11 +1,15 @@ + # -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.template import RequestContext -from django.http import HttpResponseForbidden +from django.http import HttpResponseForbidden, HttpResponse from django.contrib.auth.decorators import login_required from django.template.loader import render_to_string +from django.utils import simplejson + from ietf.nomcom.utils import get_nomcom_by_year, HOME_TEMPLATE from ietf.nomcom.forms import EditPublicKeyForm, NominateForm +from ietf.nomcom.models import Position def index(request, year): @@ -103,3 +107,15 @@ def edit_publickey(request, year): {'form': form, 'group': nomcom.group, 'message': message}, RequestContext(request)) + + +def ajax_position_text(request, position_id): + try: + position_text = Position.objects.get(id=position_id).initial_text + except Position.DoesNotExist: + position_text = "" + + result = {'text': position_text} + + json_result = simplejson.dumps(result) + return HttpResponse(json_result, mimetype='application/json') diff --git a/ietf/templates/nomcom/nomcomform.html b/ietf/templates/nomcom/nomcomform.html new file mode 100644 index 000000000..a8f8d410a --- /dev/null +++ b/ietf/templates/nomcom/nomcomform.html @@ -0,0 +1,36 @@ +
+ + {% for fieldset in form.get_fieldsets %} + {% if fieldset.name %} +
+

{{ fieldset.name }}

+ {% endif %} + + {% for field in fieldset.fields %} +
+ +
+
{{ field.help_text }}
+ {{ field }} + {{ field.errors }} +
+
+
+ {% endfor %} + + {% if fieldset.name %} +
+ {% endif %} + {% endfor %} + +
+ +
+ +
+ diff --git a/ietf/templates/nomcom/nominate.html b/ietf/templates/nomcom/nominate.html index 91da2fa23..72db214b3 100644 --- a/ietf/templates/nomcom/nominate.html +++ b/ietf/templates/nomcom/nominate.html @@ -2,51 +2,29 @@ {% block subtitle %} - Nominate{% endblock %} +{% block pagehead %} +{{ form.media }} +{% endblock %} + {% block nomcom_content %} +
+Your browser has Javascript disabled. Please enable javascript and reload the page. + +
+ + {% if message %}
{{ message.1 }}
{% endif %} {% if form.errors %}
Please correct the following errors
{% endif %} -
{% csrf_token %} - -
- - {% for fieldset in form.get_fieldsets %} - {% if fieldset.name %} -
-

{{ fieldset.name }}

- {% endif %} - - {% for field in fieldset.fields %} -
- -
-
{{ field.help_text }}
- {{ field }} - {{ field.errors }} -
-
-
- {% endfor %} - - {% if fieldset.name %} -
- {% endif %} - {% endfor %} - -
- -
- -
+{% csrf_token %} + {{ form }}
- -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/static/css/base2.css b/static/css/base2.css index 691f9c222..f108c5bbf 100644 --- a/static/css/base2.css +++ b/static/css/base2.css @@ -275,4 +275,10 @@ span.fieldRequired { color: red; } - +/* js styles */ +.js-info { + background-color: #FFDD88; + border: 1px dashed red; + font-size: 1.2em; + padding: 1em 2em; +} diff --git a/static/js/nomcom.js b/static/js/nomcom.js new file mode 100644 index 000000000..7da8ee841 --- /dev/null +++ b/static/js/nomcom.js @@ -0,0 +1,36 @@ +/*jslint vars: false, browser: true */ +/*global jQuery */ + +(function ($) { + "use strict"; + $.fn.nominateForm = function () { + return this.each(function () { + var $position = $("#id_position"), + $comments = $("#id_comments"), + baseurl = "/nomcom/ajax/position-text/"; + + $comments.change(function () { + $.ajax({ + url: baseurl + $position.val() + '/', + type: 'GET', + cache: false, + async: true, + dataType: 'json', + success: function (response) { + $comments.text(response.text); + } + }); + }); + + $position.change(function () { + $comments.trigger("change"); + }); + + }); + }; + + $(document).ready(function () { + $("#nominateform").nominateForm(); + }); + +}(jQuery)); \ No newline at end of file