Made a number of small enhancements. The django-recaptcha fields have been removed from the django forms as they're a dependency nightmare. The module isn't really required and the same functionality can be serviced using HTML and JS and it also paves the way to perform testing with python 3 over python 2.7. The about page has been removed for now as it's not prod ready and all it currently does it mention the software used to build DEMOS2.
This commit is contained in:
parent
4d4f77207b
commit
ff967877cb
7 changed files with 26 additions and 85 deletions
|
@ -1,10 +1,7 @@
|
|||
from django import forms
|
||||
from django.core.validators import MinLengthValidator
|
||||
|
||||
from .models import DemoUser
|
||||
|
||||
from captcha.fields import ReCaptchaField
|
||||
|
||||
|
||||
class DemoUserEditForm(forms.ModelForm):
|
||||
"""Form for viewing and editing name fields in a DemoUser object.
|
||||
|
@ -40,7 +37,6 @@ class NameForm(forms.Form):
|
|||
|
||||
|
||||
class RegistrationForm(forms.Form):
|
||||
captcha = ReCaptchaField()
|
||||
|
||||
def signup(self, request, user):
|
||||
user.save()
|
||||
|
|
|
@ -1,15 +1,11 @@
|
|||
from functools import partial
|
||||
from django import forms
|
||||
from django.core.validators import MinLengthValidator
|
||||
from django.template.loader import render_to_string
|
||||
from django.template import Context
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import EmailValidator
|
||||
from django.core.mail import send_mail
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import LayoutObject, Layout, TEMPLATE_PACK, Fieldset, ButtonHolder, Submit, Div, Field, HTML
|
||||
from crispy_forms.bootstrap import StrictButton, TabHolder, Tab, FormActions, PrependedText, PrependedAppendedText, Accordion, AccordionGroup
|
||||
from captcha.fields import ReCaptchaField
|
||||
from crispy_forms.layout import LayoutObject, Layout, TEMPLATE_PACK, Div, Field, HTML
|
||||
from crispy_forms.bootstrap import PrependedText, PrependedAppendedText, Accordion, AccordionGroup
|
||||
from allauthdemo.auth.models import DemoUser
|
||||
from .models import Event, Poll, PollOption
|
||||
|
||||
|
@ -21,12 +17,12 @@ def is_valid_email(email):
|
|||
except ValidationError:
|
||||
return False
|
||||
|
||||
# This form has been deprecated
|
||||
class EventForm(forms.ModelForm):
|
||||
#trustees = forms.CharField(label="Trustee list", widget=forms.Textarea(attrs={'width':"100%", 'cols' : "80", 'rows': "20", }))
|
||||
|
||||
voters = forms.CharField(label="Voters", required=False, widget=forms.Textarea(attrs={'width':"100%", 'cols' : "80", 'rows': "20", }))
|
||||
#self.voters.widget=forms.Textarea(attrs={'width':"100%", 'cols' : "80", 'rows': "20", })
|
||||
votersTextFile = forms.FileField(required=False)
|
||||
captcha = ReCaptchaField()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
|
@ -42,8 +38,7 @@ class EventForm(forms.ModelForm):
|
|||
Div(
|
||||
PrependedAppendedText('end_time', 'Ends', '<span class="glyphicon glyphicon-calendar"></span>', placeholder="dd/mm/yyyy hh:mm"),
|
||||
css_class="input-group date col-sm-6"
|
||||
),
|
||||
Field('captcha')
|
||||
)
|
||||
),
|
||||
AccordionGroup("Organisers",
|
||||
HTML("<p>Event creators are automatically made an Organiser. Click and drag the tabs to reorder. Blank fields will be ignored.</p>"),
|
||||
|
@ -70,17 +65,16 @@ class EventForm(forms.ModelForm):
|
|||
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = ('title', 'start_time', 'end_time', 'captcha') # TWEAK!!!
|
||||
fields = ('title', 'start_time', 'end_time')
|
||||
widgets = {
|
||||
'voters': forms.Textarea(attrs={'cols': 80, 'rows': 20})
|
||||
}
|
||||
|
||||
|
||||
# This form has been deprecated
|
||||
class EventEditForm(forms.ModelForm):
|
||||
#trustees = forms.CharField(label="Trustee list", widget=forms.Textarea(attrs={'width':"100%", 'cols' : "80", 'rows': "20", }))
|
||||
voters = forms.CharField(label="Voters", required=False, widget=forms.Textarea(attrs={'width':"100%", 'cols' : "80", 'rows': "20", }))
|
||||
#self.voters.widget=forms.Textarea(attrs={'width':"100%", 'cols' : "80", 'rows': "20", })
|
||||
votersTextFile = forms.FileField(required=False)
|
||||
captcha = ReCaptchaField()
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
|
@ -96,8 +90,7 @@ class EventEditForm(forms.ModelForm):
|
|||
Div(
|
||||
PrependedAppendedText('end_time', 'Ends', '<span class="glyphicon glyphicon-calendar"></span>', placeholder="dd/mm/yyyy hh:mm"),
|
||||
css_class="input-group date col-sm-6"
|
||||
),
|
||||
Field('captcha')
|
||||
)
|
||||
),
|
||||
AccordionGroup('Voters',
|
||||
'voters',
|
||||
|
@ -110,7 +103,7 @@ class EventEditForm(forms.ModelForm):
|
|||
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = ('title', 'start_time', 'end_time', 'captcha') # TWEAK!!!
|
||||
fields = ('title', 'start_time', 'end_time')
|
||||
widgets = {
|
||||
'voters': forms.Textarea(attrs={'cols': 80, 'rows': 20})
|
||||
}
|
||||
|
@ -338,46 +331,3 @@ DecryptionFormset = forms.formset_factory(form=DecryptionForm, extra=0, min_num=
|
|||
|
||||
OptionFormset = forms.inlineformset_factory(Poll, PollOption, form=OptionForm, min_num=2, max_num=20, validate_min=True, extra=0, fields=('choice_text',), can_delete=True)
|
||||
QuestionFormset = forms.inlineformset_factory(Event, Poll, form=PollForm, extra=0, min_num=2, validate_min=True, max_num=20, can_delete=True)
|
||||
|
||||
"""
|
||||
PartialQuestionFormSet = partial(forms.formset_factory, PollQuestionForm, extra=2,
|
||||
validate_min=True, validate_max=True, min_num=1, max_num=10)
|
||||
|
||||
|
||||
OptionFormset = forms.inlineformset_factory(PollQuestion, QuestionChoice, extra=3, fields=('choice_text',))
|
||||
|
||||
QuestionFormset = forms.inlineformset_factory(Poll, PollQuestion,
|
||||
formset=BasePollQuestionFormset, extra=2, fields=('question_text',))
|
||||
|
||||
|
||||
TenantFormset = forms.inlineformset_factory(Building, Tenant, extra=1, fields=('name',))
|
||||
BuildingFormset = forms.inlineformset_factory(Block, Building,
|
||||
formset=BaseBuildingFormset, extra=1, fields=('address',))
|
||||
AccordionGroup('Poll Questions',
|
||||
Formset("question_formset",
|
||||
"polls/create_question.html"
|
||||
)
|
||||
),
|
||||
"""
|
||||
"""
|
||||
|
||||
class PollQuestionForm(forms.ModelForm):
|
||||
question_text = forms.CharField(
|
||||
label = "Poll Title",
|
||||
max_length = 80,
|
||||
required = True,
|
||||
)
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
self.helper.layout = Layout(
|
||||
TabHolder(
|
||||
Tab('question_text')
|
||||
),
|
||||
)
|
||||
super(PollQuestionForm, self).__init__(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
model = PollQuestion
|
||||
fields = ('question_text',)
|
||||
"""
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
</div>
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="{% url 'landing_index' %}">Welcome</a></li>
|
||||
<li><a href="{% url 'landing_about' %}">About</a></li>
|
||||
<li><a href="{% url 'landing_index' %}">Home</a></li>
|
||||
{% comment %}<li><a href="{% url 'landing_about' %}">About</a></li>{% endcomment %} <!-- Currently this is not a production-ready page -->
|
||||
<li><a href="{% url 'polls:index' %}">Events</a></li>
|
||||
<li><a href="{% url 'account_signup' %}"><strong>Join</strong></a></li>
|
||||
<li><a href="{% url 'account_login' %}"><strong>Log In</strong></a></li>
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
</div>
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="{% url 'landing_index' %}">Welcome</a></li>
|
||||
<li><a href="{% url 'landing_about' %}">About</a></li>
|
||||
<li><a href="{% url 'landing_index' %}">Home</a></li>
|
||||
{% comment %}<li><a href="{% url 'landing_about' %}">About</a></li>{% endcomment %} <!-- Currently this is not a production-ready page -->
|
||||
<li><a href="{% url 'polls:index' %}">Events</a></li>
|
||||
{% if user.is_authenticated %}
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
const OPTION_COUNT = {{ object.options.count }};
|
||||
const MIN_SELECTIONS = {{ min_selection }};
|
||||
const MAX_SELECTIONS = {{ max_selection }};
|
||||
const POLL_COUNT = {{ poll_count }};
|
||||
const POLL_NUM = {{ poll_num }};
|
||||
var selectedCount = 0;
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<h1>DEMOS 2</h1>
|
||||
<img src='{% static "img/demos2-sm.png" %}'>
|
||||
<p class="lead">
|
||||
Read more on the <a href="{% url 'landing_about' %}">About Page.</a>
|
||||
{% comment %}Read more on the <a href="{% url 'landing_about' %}">About Page.</a>{% endcomment %}<!-- Currently this is not a production-ready page -->
|
||||
</p>
|
||||
<p>
|
||||
<a class="btn btn-lg btn-success " href="{% url 'account_signup' %}" role="button">Join</a>
|
||||
|
|
|
@ -37,21 +37,6 @@ $("label input[type=checkbox]").change(function() {
|
|||
updateCheckboxInteractivity();
|
||||
});
|
||||
|
||||
function dropDownFragsNotZero(frags) {
|
||||
var valid = false;
|
||||
|
||||
for(var i = 0; i < frags.length; i++) {
|
||||
var frag = frags[i];
|
||||
|
||||
if(frag !== "0") {
|
||||
valid = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
function isVotingInputValid() {
|
||||
var valid = true;
|
||||
|
||||
|
@ -60,6 +45,10 @@ function isVotingInputValid() {
|
|||
valid = false;
|
||||
}
|
||||
|
||||
if(selectedCount < MAX_SELECTIONS) {
|
||||
valid = false;
|
||||
}
|
||||
|
||||
// This will highlight when people haven't selected enough options
|
||||
|
||||
if(!valid) {
|
||||
|
@ -204,6 +193,10 @@ function voteSuccessfullyReceived() {
|
|||
title.text('Vote Successfully Received');
|
||||
var bodyText = "Thank you for voting!";
|
||||
|
||||
if(POLL_NUM !== POLL_COUNT) {
|
||||
bodyText += " You can vote on the next poll by closing down this dialog and clicking 'Next Poll'.";
|
||||
}
|
||||
|
||||
var p = document.createElement("p");
|
||||
p.innerHTML = bodyText;
|
||||
body.empty();
|
||||
|
|
Reference in a new issue