diff --git a/conservancy/supporters/forms.py b/conservancy/supporters/forms.py index 2394b721..f821462f 100644 --- a/conservancy/supporters/forms.py +++ b/conservancy/supporters/forms.py @@ -3,9 +3,6 @@ from django.utils.safestring import mark_safe from django.urls import reverse from .models import SustainerOrder -MONTH_MINIMUM = 10 -YEAR_MINIMUM = 120 - class SustainerFormRenderer(forms.renderers.DjangoTemplates): # Customised layout with labels on own row field_template_name = 'supporters/field.html' @@ -33,8 +30,10 @@ class SustainerForm(forms.ModelForm): template_name = 'supporters/sustainer_form.html' - MONTH_OPTIONS = [12, 25, 50, 100] - YEAR_OPTIONS = [128, 250, 500, 1000] + MONTH_OPTIONS = [12, 23, 45, 87] + YEAR_OPTIONS = [128, 256, 512, 1024] + MONTH_MINIMUM = 10 + YEAR_MINIMUM = 120 class Meta: model = SustainerOrder @@ -70,6 +69,8 @@ class SustainerForm(forms.ModelForm): # So we can write to this field easily from Alpine JS. self.fields['amount'].widget.attrs['x-ref'] = 'amount' self.fields['amount'].widget.attrs['style'] = 'width: 5rem' + self.fields['amount'].widget.attrs['onblur'] = 'this.reportValidity()' + self.fields['amount'].widget.attrs['x-bind:min'] = 'amount_minimum' self.fields['email'].help_text = 'For your payment receipt' self.fields['tshirt_size'].help_text = mark_safe("""Sizing chart: Women's, Men's""") self.fields['tshirt_size'].widget.attrs['x-model'] = 'tshirt_size' @@ -78,7 +79,7 @@ class SustainerForm(forms.ModelForm): super().clean() recurring = self.cleaned_data.get('recurring', '') amount = self.cleaned_data.get('amount', 0) - minimum = MONTH_MINIMUM if recurring == 'month' else YEAR_MINIMUM + minimum = self.MONTH_MINIMUM if recurring == 'month' else self.YEAR_MINIMUM donate_url = reverse('donate') if amount < minimum: self.add_error( diff --git a/conservancy/supporters/static/css/buttonradio.css b/conservancy/supporters/static/css/buttonradio.css index f5d2c723..6be06463 100644 --- a/conservancy/supporters/static/css/buttonradio.css +++ b/conservancy/supporters/static/css/buttonradio.css @@ -7,6 +7,7 @@ .button-select label > span { text-align: center; display: inline-block; + user-select: none; padding: 0.5rem 0; width: 100%; background: #ddd; diff --git a/conservancy/supporters/templates/supporters/buttonradio_option.html b/conservancy/supporters/templates/supporters/buttonradio_option.html index b7c91a04..8ee087b2 100644 --- a/conservancy/supporters/templates/supporters/buttonradio_option.html +++ b/conservancy/supporters/templates/supporters/buttonradio_option.html @@ -1,2 +1,2 @@ -{% if widget.wrap_label %}{% endif %} +{% if widget.wrap_label %}{% endif %} diff --git a/conservancy/supporters/templates/supporters/stripe_success.html b/conservancy/supporters/templates/supporters/stripe_success.html index 38b860ae..5b4dd258 100644 --- a/conservancy/supporters/templates/supporters/stripe_success.html +++ b/conservancy/supporters/templates/supporters/stripe_success.html @@ -4,5 +4,12 @@ {% block category %}sustainer{% endblock %} {% block content %} -
Thank you for helping make our work possible!
+ +
+ Return to our sustainers page.
{% endblock %} diff --git a/conservancy/supporters/templates/supporters/sustainers_stripe.html b/conservancy/supporters/templates/supporters/sustainers_stripe.html index bce747f3..a3e2c82d 100644 --- a/conservancy/supporters/templates/supporters/sustainers_stripe.html +++ b/conservancy/supporters/templates/supporters/sustainers_stripe.html @@ -63,25 +63,33 @@ let year_options = {{ form.YEAR_OPTIONS|escapejs }}; return this.recurring === 'month' ? month_options : year_options; }, + amount_minimum: function() { + let month_minimum = {{ form.MONTH_MINIMUM|escapejs }}; + let year_minimum = {{ form.YEAR_MINIMUM|escapejs }}; + return this.recurring === 'month' ? month_minimum : year_minimum; + }, tshirt_size: '{{ form.tshirt_size.value|escapejs }}', }"> {% csrf_token %}