minor fixes & improvements for Stripe forms

This commit is contained in:
Changaco 2024-12-12 13:55:07 +01:00
parent 141044527e
commit 9c9fe95e9b
4 changed files with 45 additions and 27 deletions

View File

@ -79,21 +79,24 @@ Liberapay.init = function() {
$(this).children('input[type="radio"]').prop('checked', true).trigger('change');
});
$('[data-toggle="enable"]').each(function() {
if (this.tagName == 'OPTION') {
var $option = $(this);
var $select = $option.parent();
$select.on('change', function() {
var $target = $($option.data('target'));
$target.prop('disabled', !$option.prop('selected'));
});
} else {
$('[data-toggle="enable"], [data-toggle="disable"]').each(function() {
var enable = this.getAttribute('data-toggle') == 'enable';
var $target = $(this.getAttribute('data-target'));
var $control = $(this);
$control.on('change', function() {
var $target = $($control.data('target'));
$target.prop('disabled', !$control.prop('checked'));
});
(this.tagName == 'OPTION' ? $control.parent() : $control).on('change', function() {
var disable = enable ^ ($control.prop('checked') || $control.prop('selected'));
$target.prop('disabled', disable);
$target.find('input[type="checkbox"]').each(function() {
var $subelement = $(this);
if (disable) {
$subelement.data('was-checked', $subelement.prop('checked'));
$subelement.prop('checked', false);
} else {
$subelement.prop('checked', $subelement.data('was-checked'));
}
$subelement.prop('disabled', disable);
});
});
});
$('[data-email]').one('mouseover click', function () {

View File

@ -136,9 +136,14 @@ form.buttons > .btn, span.buttons > .btn {
white-space: normal;
}
form[disabled] button {
form:disabled, fieldset:disabled {
button {
pointer-events: none;
}
label {
color: $gray-light;
}
}
.btn-block + p {
margin-top: 0.5em;

View File

@ -88,6 +88,7 @@ if request.method == 'POST':
if route is None:
raise response.invalid_input(body.get('route'), 'route', 'body')
route.sync_status()
if not route.one_off:
if body.parse_boolean('set_as_default', default=False):
route.set_as_default()
set_as_default_for = body.get_currency('set_as_default_for', None)
@ -527,9 +528,10 @@ title = _("Funding your donations")
name='<a href="https://stripe.com/" target="_blank" rel="noopener noreferrer">Stripe</a>'|safe
) }}</p>
<label>
<input type="checkbox" name="keep" value="true" checked />
<input type="checkbox" name="keep" value="true" checked data-toggle="enable" data-target="#set-as-default" />
{{ _("Remember the card number for next time") }}
</label><br>
<fieldset id="set-as-default">
% if payer.donates_in_multiple_currencies
<label>
<input type="checkbox" name="set_as_default_for" value="{{ payment.currency }}" checked />
@ -542,6 +544,7 @@ title = _("Funding your donations")
{{ _("Use this payment instrument by default for future payments") }}
</label>
% endif
</fieldset>
<br><br>
</fieldset>
% elif payment_type == 'sdd'
@ -565,15 +568,17 @@ title = _("Funding your donations")
provider='<a href="https://stripe.com/" target="_blank" rel="noopener noreferrer">Stripe</a>'|safe
) }}</p>
<label>
<input type="checkbox" name="keep" value="true" checked />
<input type="checkbox" name="keep" value="true" checked data-toggle="enable" data-target="#set-as-default" />
{{ _("Remember the bank account number for future payments") }}
</label><br>
<fieldset id="set-as-default">
<label>
<input type="checkbox" name="set_as_default_for" value="{{ payment.currency }}" checked />
{{ _("Use this payment instrument by default for future payments in {currency}",
currency=Currency(payment.currency)) }}
</label><br>
</fieldset>
</fieldset>
% endif
% if ask_for_postal_address

View File

@ -23,6 +23,7 @@ if request.method == 'POST':
"The payment processor {name} returned an error: “{error_message}”.",
name='Stripe', error_message=repr_stripe_error(e)
))
if not route.one_off:
if body.parse_boolean('set_as_default', default=False):
route.set_as_default()
postal_address = {
@ -76,14 +77,16 @@ title = _("Add a payment instrument")
name='<a href="https://stripe.com/" target="_blank" rel="noopener noreferrer">Stripe</a>'|safe
) }}</p>
<label>
<input type="checkbox" name="one_off" value="true" />
<input type="checkbox" name="one_off" value="true" data-toggle="disable" data-target="#set-as-default" />
{{ _("Forget this card number after one payment.") }}
</label><br>
<fieldset id="set-as-default">
<label>
<input type="checkbox" name="set_as_default" value="true" checked />
{{ _("Use this payment instrument by default for future payments") }}
</label>
</fieldset>
</fieldset>
% elif network == 'stripe-sdd'
<fieldset id="iban-form" class="form-group">
<p>{{ _(
@ -106,14 +109,16 @@ title = _("Add a payment instrument")
provider='<a href="https://stripe.com/" target="_blank" rel="noopener noreferrer">Stripe</a>'|safe
) }}</p>
<label>
<input type="checkbox" name="one_off" value="true" />
<input type="checkbox" name="one_off" value="true" data-toggle="disable" data-target="#set-as-default" />
{{ _("Forget this bank account number after one payment.") }}
</label><br>
<fieldset id="set-as-default">
<label>
<input type="checkbox" name="set_as_default_for" value="EUR" checked />
{{ _("Use this payment instrument by default for future payments") }}
</label>
</fieldset>
</fieldset>
% endif
<p>{{ _(
"As the payer's postal address is sometimes required to successfully "