mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Count down to cart expiry
This commit is contained in:
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-09-08 21:20+0000\n"
|
"POT-Creation-Date: 2016-09-09 13:32+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-08 23:26+0200\n"
|
"PO-Revision-Date: 2016-09-09 15:33+0200\n"
|
||||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -54,3 +54,14 @@ msgstr "Unbekannter Fehler."
|
|||||||
#: static/pretixpresale/js/ui/asynctask.js:61
|
#: static/pretixpresale/js/ui/asynctask.js:61
|
||||||
msgid "We are processing your request…"
|
msgid "We are processing your request…"
|
||||||
msgstr "Wir verarbeiten deine Anfrage…"
|
msgstr "Wir verarbeiten deine Anfrage…"
|
||||||
|
|
||||||
|
#: static/pretixpresale/js/ui/cart.js:10
|
||||||
|
msgid "The items in your cart are no longer reserved for you."
|
||||||
|
msgstr "Die Produkte in Ihrem Warenkorb sind nicht mehr für Sie reserviert."
|
||||||
|
|
||||||
|
#: static/pretixpresale/js/ui/cart.js:14
|
||||||
|
#, javascript-format
|
||||||
|
msgid "The items in your cart are reserved for you for one minute."
|
||||||
|
msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||||
|
msgstr[0] "Die Produkte in Ihrem Warenkorb sind noch eine Minute für Sie reserviert."
|
||||||
|
msgstr[1] "Die Produkte in Ihrem Warenkorb sind noch {num} Minuten für Sie reserviert."
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-09-08 21:20+0000\n"
|
"POT-Creation-Date: 2016-09-09 13:32+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-08 23:27+0200\n"
|
"PO-Revision-Date: 2016-09-09 15:33+0200\n"
|
||||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -54,3 +54,14 @@ msgstr "Unbekannter Fehler."
|
|||||||
#: static/pretixpresale/js/ui/asynctask.js:61
|
#: static/pretixpresale/js/ui/asynctask.js:61
|
||||||
msgid "We are processing your request…"
|
msgid "We are processing your request…"
|
||||||
msgstr "Wir verarbeiten deine Anfrage…"
|
msgstr "Wir verarbeiten deine Anfrage…"
|
||||||
|
|
||||||
|
#: static/pretixpresale/js/ui/cart.js:10
|
||||||
|
msgid "The items in your cart are no longer reserved for you."
|
||||||
|
msgstr "Die Produkte in deinem Warenkorb sind nicht mehr für dich reserviert."
|
||||||
|
|
||||||
|
#: static/pretixpresale/js/ui/cart.js:14
|
||||||
|
#, javascript-format
|
||||||
|
msgid "The items in your cart are reserved for you for one minute."
|
||||||
|
msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||||
|
msgstr[0] "Die Produkte in deinem Warenkorb sind noch eine Minute für dich reserviert."
|
||||||
|
msgstr[1] "Die Produkte in deinem Warenkorb sind noch {num} Minuten für dich reserviert."
|
||||||
|
|||||||
@@ -20,14 +20,16 @@
|
|||||||
<script type="text/javascript" src="{% static "jquery/js/jquery-2.1.1.min.js" %}"></script>
|
<script type="text/javascript" src="{% static "jquery/js/jquery-2.1.1.min.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "js/jquery.formset.js" %}"></script>
|
<script type="text/javascript" src="{% static "js/jquery.formset.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "bootstrap/js/bootstrap.js" %}"></script>
|
<script type="text/javascript" src="{% static "bootstrap/js/bootstrap.js" %}"></script>
|
||||||
|
<script type="text/javascript" src="{% static "moment/moment-with-locales.min.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "pretixpresale/js/ui/main.js" %}"></script>
|
<script type="text/javascript" src="{% static "pretixpresale/js/ui/main.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "pretixpresale/js/ui/asynctask.js" %}"></script>
|
<script type="text/javascript" src="{% static "pretixpresale/js/ui/asynctask.js" %}"></script>
|
||||||
|
<script type="text/javascript" src="{% static "pretixpresale/js/ui/cart.js" %}"></script>
|
||||||
{% endcompress %}
|
{% endcompress %}
|
||||||
{{ html_head|safe }}
|
{{ html_head|safe }}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="icon" href="{% static "pretixbase/img/favicon.ico" %}">
|
<link rel="icon" href="{% static "pretixbase/img/favicon.ico" %}">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body data-locale="{{ request.LANGUAGE_CODE }}">
|
||||||
{% block above %}
|
{% block above %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|||||||
@@ -25,13 +25,15 @@
|
|||||||
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=False %}
|
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=False %}
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="col-md-6 col-xs-12">
|
<div class="col-md-6 col-xs-12">
|
||||||
{% if cart.minutes_left > 0 %}
|
<em id="cart-deadline" data-expires="{{ cart.first_expiry|date:"Y-m-d H:i:sO" }}">
|
||||||
<em>{% blocktrans trimmed with minutes=cart.minutes_left %}
|
{% if cart.minutes_left > 0 %}
|
||||||
The items in your cart are reserved for you for {{ minutes }} minutes.
|
{% blocktrans trimmed with minutes=cart.minutes_left %}
|
||||||
{% endblocktrans %}</em>
|
The items in your cart are reserved for you for {{ minutes }} minutes.
|
||||||
{% else %}
|
{% endblocktrans %}
|
||||||
<em>{% trans "The items in your cart are no longer reserved for you." %}</em>
|
{% else %}
|
||||||
{% endif %}
|
{% trans "The items in your cart are no longer reserved for you." %}
|
||||||
|
{% endif %}
|
||||||
|
</em>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,13 +17,15 @@
|
|||||||
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=True %}
|
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=True %}
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="col-md-6 col-xs-12">
|
<div class="col-md-6 col-xs-12">
|
||||||
{% if cart.minutes_left > 0 %}
|
<em id="cart-deadline" data-expires="{{ cart.first_expiry|date:"Y-m-d H:i:sO" }}">
|
||||||
<em>{% blocktrans trimmed with minutes=cart.minutes_left %}
|
{% if cart.minutes_left > 0 %}
|
||||||
The items in your cart are reserved for you for {{ minutes }} minutes.
|
{% blocktrans trimmed with minutes=cart.minutes_left %}
|
||||||
{% endblocktrans %}</em>
|
The items in your cart are reserved for you for {{ minutes }} minutes.
|
||||||
{% else %}
|
{% endblocktrans %}
|
||||||
<em>{% trans "The items in your cart are no longer reserved for you." %}</em>
|
{% else %}
|
||||||
{% endif %}
|
{% trans "The items in your cart are no longer reserved for you." %}
|
||||||
|
{% endif %}
|
||||||
|
</em>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 col-md-offset-2 col-xs-12">
|
<div class="col-md-4 col-md-offset-2 col-xs-12">
|
||||||
<a class="btn btn-block btn-primary btn-lg"
|
<a class="btn btn-block btn-primary btn-lg"
|
||||||
|
|||||||
@@ -69,8 +69,10 @@ class CartMixin:
|
|||||||
payment_fee_tax_rate = payment_fee_tax_rate if payment_fee_tax_rate is not None else self.request.event.settings.tax_rate_default
|
payment_fee_tax_rate = payment_fee_tax_rate if payment_fee_tax_rate is not None else self.request.event.settings.tax_rate_default
|
||||||
|
|
||||||
try:
|
try:
|
||||||
minutes_left = max(min(p.expires for p in positions) - now(), timedelta()).seconds // 60 if positions else 0
|
first_expiry = min(p.expires for p in positions) if positions else now()
|
||||||
|
minutes_left = max(first_expiry - now(), timedelta()).seconds // 60
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
first_expiry = None
|
||||||
minutes_left = None
|
minutes_left = None
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -81,6 +83,7 @@ class CartMixin:
|
|||||||
'payment_fee_tax_rate': payment_fee_tax_rate,
|
'payment_fee_tax_rate': payment_fee_tax_rate,
|
||||||
'answers': answers,
|
'answers': answers,
|
||||||
'minutes_left': minutes_left,
|
'minutes_left': minutes_left,
|
||||||
|
'first_expiry': first_expiry
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_payment_fee(self, total):
|
def get_payment_fee(self, total):
|
||||||
|
|||||||
10
src/static/moment/moment-with-locales.min.js
vendored
Normal file
10
src/static/moment/moment-with-locales.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
37
src/static/pretixpresale/js/ui/cart.js
Normal file
37
src/static/pretixpresale/js/ui/cart.js
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*global $,django */
|
||||||
|
|
||||||
|
var cart = {
|
||||||
|
_deadline: null,
|
||||||
|
_deadline_interval: null,
|
||||||
|
|
||||||
|
draw_deadline: function () {
|
||||||
|
var diff = Math.floor(cart._deadline.diff(moment()) / 1000 / 60);
|
||||||
|
if (diff < 0) {
|
||||||
|
$("#cart-deadline").text(django.gettext("The items in your cart are no longer reserved for you."));
|
||||||
|
window.clearInterval(cart._deadline_interval);
|
||||||
|
} else {
|
||||||
|
$("#cart-deadline").text(django.ngettext(
|
||||||
|
"The items in your cart are reserved for you for one minute.",
|
||||||
|
"The items in your cart are reserved for you for {num} minutes.",
|
||||||
|
diff
|
||||||
|
).replace(/\{num\}/g, diff));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
init: function () {
|
||||||
|
"use strict";
|
||||||
|
cart._deadline = moment($("#cart-deadline").attr("data-expires"));
|
||||||
|
cart._deadline_interval = window.setInterval(cart.draw_deadline, 2000);
|
||||||
|
cart.draw_deadline();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
moment.locale($("body").attr("data-locale").substr(0, 2));
|
||||||
|
|
||||||
|
if ($("#cart-deadline").length) {
|
||||||
|
cart.init();
|
||||||
|
}
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user