mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Use <details> and <summary> for variations
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
<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 "datetimepicker/bootstrap-datetimepicker.js" %}"></script>
|
<script type="text/javascript" src="{% static "datetimepicker/bootstrap-datetimepicker.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/details.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "pretixbase/js/asynctask.js" %}"></script>
|
<script type="text/javascript" src="{% static "pretixbase/js/asynctask.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "pretixbase/js/asyncdownload.js" %}"></script>
|
<script type="text/javascript" src="{% static "pretixbase/js/asyncdownload.js" %}"></script>
|
||||||
<script type="text/javascript" src="{% static "pretixpresale/js/ui/cart.js" %}"></script>
|
<script type="text/javascript" src="{% static "pretixpresale/js/ui/cart.js" %}"></script>
|
||||||
|
|||||||
@@ -217,8 +217,8 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% for item in tup.1 %}
|
{% for item in tup.1 %}
|
||||||
{% if item.has_variations %}
|
{% if item.has_variations %}
|
||||||
<div class="item-with-variations">
|
<details class="item-with-variations" {% if event.settings.show_variations_expanded %}open{% endif %}>
|
||||||
<div class="row-fluid product-row headline">
|
<summary class="row-fluid product-row headline">
|
||||||
<div class="col-md-8 col-xs-12">
|
<div class="col-md-8 col-xs-12">
|
||||||
{% if item.picture %}
|
{% if item.picture %}
|
||||||
<a href="{{ item.picture.url }}" class="productpicture"
|
<a href="{{ item.picture.url }}" class="productpicture"
|
||||||
@@ -270,7 +270,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</summary>
|
||||||
<div class="variations {% if not event.settings.show_variations_expanded %}variations-collapsed{% endif %}">
|
<div class="variations {% if not event.settings.show_variations_expanded %}variations-collapsed{% endif %}">
|
||||||
{% for var in item.available_variations %}
|
{% for var in item.available_variations %}
|
||||||
<div class="row-fluid product-row variation">
|
<div class="row-fluid product-row variation">
|
||||||
@@ -348,7 +348,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</details>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="row-fluid product-row simple">
|
<div class="row-fluid product-row simple">
|
||||||
<div class="col-md-8 col-xs-12">
|
<div class="col-md-8 col-xs-12">
|
||||||
|
|||||||
51
src/pretix/static/pretixpresale/js/ui/details.js
Normal file
51
src/pretix/static/pretixpresale/js/ui/details.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*global $ */
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
|
||||||
|
|
||||||
|
$("details summary, details summary a").click(function (e) {
|
||||||
|
var $details = $(this).closest("details");
|
||||||
|
var isOpen = $details.prop("open");
|
||||||
|
var $detailsNotSummary = $details.children(':not(summary)');
|
||||||
|
if ($detailsNotSummary.is(':animated')) {
|
||||||
|
e.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isOpen) {
|
||||||
|
$detailsNotSummary.stop().show().slideUp(500, function () {
|
||||||
|
$details.prop("open", false);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$detailsNotSummary.stop().hide();
|
||||||
|
$details.prop("open", true);
|
||||||
|
$detailsNotSummary.slideDown();
|
||||||
|
}
|
||||||
|
e.preventDefault();
|
||||||
|
return false;
|
||||||
|
}).keyup(function (event) {
|
||||||
|
if (32 == event.keyCode || (13 == event.keyCode && !isOpera)) {
|
||||||
|
// Space or Enter is pressed — trigger the `click` event on the `summary` element
|
||||||
|
// Opera already seems to trigger the `click` event when Enter is pressed
|
||||||
|
event.preventDefault();
|
||||||
|
$(this).click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('details').each(function () {
|
||||||
|
var $details = $(this),
|
||||||
|
$detailsSummary = $('summary', $details).first(),
|
||||||
|
$detailsNotSummary = $details.children(':not(summary)');
|
||||||
|
$details.prop('open', typeof $details.attr('open') == 'string');
|
||||||
|
if (!$details.prop('open')) {
|
||||||
|
$detailsNotSummary.hide();
|
||||||
|
}
|
||||||
|
$detailsSummary.attr({
|
||||||
|
'role': 'button',
|
||||||
|
'aria-controls': $details.attr('id')
|
||||||
|
}).prop('tabIndex', 0).bind('selectstart dragstart mousedown', function () {
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -103,11 +103,7 @@ $(function () {
|
|||||||
});
|
});
|
||||||
$(".js-only").removeClass("js-only");
|
$(".js-only").removeClass("js-only");
|
||||||
$(".js-hidden").hide();
|
$(".js-hidden").hide();
|
||||||
$(".variations-collapsed").hide();
|
|
||||||
$("a[data-toggle=variations]").click(function (e) {
|
|
||||||
$(this).closest(".item-with-variations").find(".variations").slideToggle();
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
$("div.collapsed").removeClass("collapsed").addClass("collapse");
|
$("div.collapsed").removeClass("collapsed").addClass("collapse");
|
||||||
$(".has-error, .alert-danger").each(function () {
|
$(".has-error, .alert-danger").each(function () {
|
||||||
$(this).closest("div.panel-collapse").collapse("show");
|
$(this).closest("div.panel-collapse").collapse("show");
|
||||||
|
|||||||
@@ -65,6 +65,20 @@
|
|||||||
line-height: inherit;
|
line-height: inherit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
details.item-with-variations {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
details.item-with-variations > summary::-webkit-details-marker {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
details summary {
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
.radio .variation-description {
|
.radio .variation-description {
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user