mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
* Data model and migration * Some backwards compatibility * CRUD for checkin lists * Show and perform checkins * Correct numbers in table and dashboard widget * event creation and cloning * Allow to link specific exports and pass options per query * Play with the CSV export * PDF export * Collapse exports by default * Improve PDF exporter * Addon stuff * Subevent stuff, pretixdroid tests * pretixdroid tests * Add CRUD API * Test compatibility * Fix test * DB-independent sorting behavior * Add CRUD and coyp tests * Re-enable pretixdroid plugin * pretixdroid config * Tests & fixes
This commit is contained in:
@@ -44,6 +44,199 @@ $(document).ajaxError(function (event, jqXHR, settings, thrownError) {
|
||||
}
|
||||
});
|
||||
|
||||
var form_handlers = function (el) {
|
||||
el.find(".datetimepicker").each(function() {
|
||||
$(this).datetimepicker({
|
||||
format: $("body").attr("data-datetimeformat"),
|
||||
locale: $("body").attr("data-datetimelocale"),
|
||||
useCurrent: false,
|
||||
showClear: !$(this).prop("required"),
|
||||
icons: {
|
||||
time: 'fa fa-clock-o',
|
||||
date: 'fa fa-calendar',
|
||||
up: 'fa fa-chevron-up',
|
||||
down: 'fa fa-chevron-down',
|
||||
previous: 'fa fa-chevron-left',
|
||||
next: 'fa fa-chevron-right',
|
||||
today: 'fa fa-screenshot',
|
||||
clear: 'fa fa-trash',
|
||||
close: 'fa fa-remove'
|
||||
}
|
||||
});
|
||||
if (!$(this).val()) {
|
||||
$(this).data("DateTimePicker").viewDate(moment().hour(0).minute(0).second(0));
|
||||
}
|
||||
});
|
||||
|
||||
el.find(".datepickerfield").each(function() {
|
||||
var opts = {
|
||||
format: $("body").attr("data-dateformat"),
|
||||
locale: $("body").attr("data-datetimelocale"),
|
||||
useCurrent: false,
|
||||
showClear: !$(this).prop("required"),
|
||||
icons: {
|
||||
time: 'fa fa-clock-o',
|
||||
date: 'fa fa-calendar',
|
||||
up: 'fa fa-chevron-up',
|
||||
down: 'fa fa-chevron-down',
|
||||
previous: 'fa fa-chevron-left',
|
||||
next: 'fa fa-chevron-right',
|
||||
today: 'fa fa-screenshot',
|
||||
clear: 'fa fa-trash',
|
||||
close: 'fa fa-remove'
|
||||
},
|
||||
};
|
||||
if ($(this).is('[data-is-payment-date]'))
|
||||
opts["daysOfWeekDisabled"] = JSON.parse($("body").attr("data-payment-weekdays-disabled"));
|
||||
$(this).datetimepicker(opts);
|
||||
if ($(this).parent().is('.splitdatetimerow')) {
|
||||
$(this).on("dp.change", function (ev) {
|
||||
var $timepicker = $(this).closest(".splitdatetimerow").find(".timepickerfield");
|
||||
var date = $(this).data('DateTimePicker').date();
|
||||
if (date === null) {
|
||||
return;
|
||||
}
|
||||
if ($timepicker.val() === "") {
|
||||
date.set({'hour': 0, 'minute': 0, 'second': 0});
|
||||
$timepicker.data('DateTimePicker').date(date);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
el.find(".timepickerfield").each(function() {
|
||||
var opts = {
|
||||
format: $("body").attr("data-timeformat"),
|
||||
locale: $("body").attr("data-datetimelocale"),
|
||||
useCurrent: false,
|
||||
showClear: !$(this).prop("required"),
|
||||
icons: {
|
||||
time: 'fa fa-clock-o',
|
||||
date: 'fa fa-calendar',
|
||||
up: 'fa fa-chevron-up',
|
||||
down: 'fa fa-chevron-down',
|
||||
previous: 'fa fa-chevron-left',
|
||||
next: 'fa fa-chevron-right',
|
||||
today: 'fa fa-screenshot',
|
||||
clear: 'fa fa-trash',
|
||||
close: 'fa fa-remove'
|
||||
}
|
||||
};
|
||||
if ($(this).is('[data-is-payment-date]'))
|
||||
opts["daysOfWeekDisabled"] = JSON.parse($("body").attr("data-payment-weekdays-disabled"));
|
||||
$(this).datetimepicker(opts);
|
||||
});
|
||||
|
||||
el.find(".datetimepicker[data-date-after], .datepickerfield[data-date-after]").each(function() {
|
||||
var later_field = $(this),
|
||||
earlier_field = $($(this).attr("data-date-after")),
|
||||
update = function () {
|
||||
var earlier = earlier_field.data('DateTimePicker').date(),
|
||||
later = later_field.data('DateTimePicker').date();
|
||||
if (earlier === null) {
|
||||
earlier = false;
|
||||
} else if (later !== null && later.isBefore(earlier) && !later.isSame(earlier)) {
|
||||
later_field.data('DateTimePicker').date(earlier.add(1, 'h'));
|
||||
}
|
||||
later_field.data('DateTimePicker').minDate(earlier);
|
||||
};
|
||||
update();
|
||||
earlier_field.on("dp.change", update);
|
||||
});
|
||||
|
||||
el.find(".datetimepicker[data-date-default]").each(function() {
|
||||
var fill_field = $(this),
|
||||
default_field = $($(this).attr("data-date-default")),
|
||||
show = function () {
|
||||
var fill_date = fill_field.data('DateTimePicker').date(),
|
||||
default_date = default_field.data('DateTimePicker').date();
|
||||
if (fill_date === null) {
|
||||
fill_field.data("DateTimePicker").defaultDate(default_date);
|
||||
}
|
||||
};
|
||||
fill_field.on("dp.show", show);
|
||||
});
|
||||
|
||||
el.find(".colorpickerfield").colorpicker({
|
||||
format: 'hex',
|
||||
align: 'left',
|
||||
customClass: 'colorpicker-2x',
|
||||
sliders: {
|
||||
saturation: {
|
||||
maxLeft: 200,
|
||||
maxTop: 200
|
||||
},
|
||||
hue: {
|
||||
maxTop: 200
|
||||
},
|
||||
alpha: {
|
||||
maxTop: 200
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
el.find("input[data-checkbox-dependency]").each(function () {
|
||||
var dependent = $(this),
|
||||
dependency = $($(this).attr("data-checkbox-dependency")),
|
||||
update = function () {
|
||||
var enabled = dependency.prop('checked');
|
||||
dependent.prop('disabled', !enabled).parents('.form-group').toggleClass('disabled', !enabled);
|
||||
if (!enabled) {
|
||||
dependent.prop('checked', false);
|
||||
}
|
||||
};
|
||||
update();
|
||||
dependency.on("change", update);
|
||||
});
|
||||
|
||||
el.find("input[data-inverse-dependency]").each(function () {
|
||||
var dependency = $(this).attr("data-inverse-dependency");
|
||||
if (dependency.substr(0, 1) === '<') {
|
||||
dependency = $(this).closest("form, .form-horizontal").find(dependency.substr(1));
|
||||
} else {
|
||||
dependency = $(dependency);
|
||||
}
|
||||
|
||||
var dependent = $(this),
|
||||
update = function () {
|
||||
var enabled = !dependency.prop('checked');
|
||||
dependent.prop('disabled', !enabled).parents('.form-group').toggleClass('disabled', !enabled);
|
||||
};
|
||||
update();
|
||||
dependency.on("change", update);
|
||||
});
|
||||
|
||||
el.find("input[data-display-dependency]").each(function () {
|
||||
var dependent = $(this),
|
||||
dependency = $($(this).attr("data-display-dependency")),
|
||||
update = function () {
|
||||
var enabled = (dependency.attr("type") === 'checkbox') ? dependency.prop('checked') : !!dependency.val();
|
||||
dependent.prop('disabled', !enabled).parents('.form-group').toggleClass('disabled', !enabled);
|
||||
};
|
||||
update();
|
||||
dependency.on("change", update);
|
||||
dependency.on("dp.change", update);
|
||||
});
|
||||
|
||||
el.find(".scrolling-multiple-choice").each(function () {
|
||||
var $small = $("<small>");
|
||||
var $a_all = $("<a>").addClass("choice-options-all").attr("href", "#").text(gettext("All"));
|
||||
var $a_none = $("<a>").addClass("choice-options-none").attr("href", "#").text(gettext("None"));
|
||||
$(this).prepend($small.append($a_all).append(" / ").append($a_none));
|
||||
|
||||
$(this).find(".choice-options-none").click(function (e) {
|
||||
$(this).closest(".scrolling-multiple-choice").find("input[type=checkbox]").prop("checked", false);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
$(this).find(".choice-options-all").click(function (e) {
|
||||
$(this).closest(".scrolling-multiple-choice").find("input[type=checkbox]").prop("checked", true);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
$(function () {
|
||||
"use strict";
|
||||
|
||||
@@ -53,6 +246,9 @@ $(function () {
|
||||
reorderMode: 'animate'
|
||||
}
|
||||
);
|
||||
$("[data-formset]").on("formAdded", "div", function (event) {
|
||||
form_handlers($(event.target));
|
||||
});
|
||||
$(document).on("click", ".variations .variations-select-all", function (e) {
|
||||
$(this).parent().parent().find("input[type=checkbox]").prop("checked", true).change();
|
||||
e.stopPropagation();
|
||||
@@ -137,175 +333,7 @@ $(function () {
|
||||
}
|
||||
});
|
||||
|
||||
$("#ajaxerr").on("click", ".ajaxerr-close", ajaxErrDialog.hide);
|
||||
moment.locale($("body").attr("data-datetimelocale"));
|
||||
|
||||
$(".datetimepicker").each(function() {
|
||||
$(this).datetimepicker({
|
||||
format: $("body").attr("data-datetimeformat"),
|
||||
locale: $("body").attr("data-datetimelocale"),
|
||||
useCurrent: false,
|
||||
showClear: !$(this).prop("required"),
|
||||
icons: {
|
||||
time: 'fa fa-clock-o',
|
||||
date: 'fa fa-calendar',
|
||||
up: 'fa fa-chevron-up',
|
||||
down: 'fa fa-chevron-down',
|
||||
previous: 'fa fa-chevron-left',
|
||||
next: 'fa fa-chevron-right',
|
||||
today: 'fa fa-screenshot',
|
||||
clear: 'fa fa-trash',
|
||||
close: 'fa fa-remove'
|
||||
}
|
||||
});
|
||||
if (!$(this).val()) {
|
||||
$(this).data("DateTimePicker").viewDate(moment().hour(0).minute(0).second(0));
|
||||
}
|
||||
});
|
||||
|
||||
$(".datepickerfield").each(function() {
|
||||
var opts = {
|
||||
format: $("body").attr("data-dateformat"),
|
||||
locale: $("body").attr("data-datetimelocale"),
|
||||
useCurrent: false,
|
||||
showClear: !$(this).prop("required"),
|
||||
icons: {
|
||||
time: 'fa fa-clock-o',
|
||||
date: 'fa fa-calendar',
|
||||
up: 'fa fa-chevron-up',
|
||||
down: 'fa fa-chevron-down',
|
||||
previous: 'fa fa-chevron-left',
|
||||
next: 'fa fa-chevron-right',
|
||||
today: 'fa fa-screenshot',
|
||||
clear: 'fa fa-trash',
|
||||
close: 'fa fa-remove'
|
||||
},
|
||||
};
|
||||
if ($(this).is('[data-is-payment-date]'))
|
||||
opts["daysOfWeekDisabled"] = JSON.parse($("body").attr("data-payment-weekdays-disabled"));
|
||||
$(this).datetimepicker(opts);
|
||||
if ($(this).parent().is('.splitdatetimerow')) {
|
||||
$(this).on("dp.change", function (ev) {
|
||||
var $timepicker = $(this).closest(".splitdatetimerow").find(".timepickerfield");
|
||||
var date = $(this).data('DateTimePicker').date();
|
||||
if (date === null) {
|
||||
return;
|
||||
}
|
||||
if ($timepicker.val() === "") {
|
||||
date.set({'hour': 0, 'minute': 0, 'second': 0});
|
||||
$timepicker.data('DateTimePicker').date(date);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(".timepickerfield").each(function() {
|
||||
var opts = {
|
||||
format: $("body").attr("data-timeformat"),
|
||||
locale: $("body").attr("data-datetimelocale"),
|
||||
useCurrent: false,
|
||||
showClear: !$(this).prop("required"),
|
||||
icons: {
|
||||
time: 'fa fa-clock-o',
|
||||
date: 'fa fa-calendar',
|
||||
up: 'fa fa-chevron-up',
|
||||
down: 'fa fa-chevron-down',
|
||||
previous: 'fa fa-chevron-left',
|
||||
next: 'fa fa-chevron-right',
|
||||
today: 'fa fa-screenshot',
|
||||
clear: 'fa fa-trash',
|
||||
close: 'fa fa-remove'
|
||||
}
|
||||
};
|
||||
if ($(this).is('[data-is-payment-date]'))
|
||||
opts["daysOfWeekDisabled"] = JSON.parse($("body").attr("data-payment-weekdays-disabled"));
|
||||
$(this).datetimepicker(opts);
|
||||
});
|
||||
|
||||
$(".datetimepicker[data-date-after], .datepickerfield[data-date-after]").each(function() {
|
||||
var later_field = $(this),
|
||||
earlier_field = $($(this).attr("data-date-after")),
|
||||
update = function () {
|
||||
var earlier = earlier_field.data('DateTimePicker').date(),
|
||||
later = later_field.data('DateTimePicker').date();
|
||||
if (earlier === null) {
|
||||
earlier = false;
|
||||
} else if (later !== null && later.isBefore(earlier) && !later.isSame(earlier)) {
|
||||
later_field.data('DateTimePicker').date(earlier.add(1, 'h'));
|
||||
}
|
||||
later_field.data('DateTimePicker').minDate(earlier);
|
||||
};
|
||||
update();
|
||||
earlier_field.on("dp.change", update);
|
||||
});
|
||||
|
||||
$(".datetimepicker[data-date-default]").each(function() {
|
||||
var fill_field = $(this),
|
||||
default_field = $($(this).attr("data-date-default")),
|
||||
show = function () {
|
||||
var fill_date = fill_field.data('DateTimePicker').date(),
|
||||
default_date = default_field.data('DateTimePicker').date();
|
||||
if (fill_date === null) {
|
||||
fill_field.data("DateTimePicker").defaultDate(default_date);
|
||||
}
|
||||
};
|
||||
fill_field.on("dp.show", show);
|
||||
});
|
||||
|
||||
$(".colorpickerfield").colorpicker({
|
||||
format: 'hex',
|
||||
align: 'left',
|
||||
customClass: 'colorpicker-2x',
|
||||
sliders: {
|
||||
saturation: {
|
||||
maxLeft: 200,
|
||||
maxTop: 200
|
||||
},
|
||||
hue: {
|
||||
maxTop: 200
|
||||
},
|
||||
alpha: {
|
||||
maxTop: 200
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("input[data-checkbox-dependency]").each(function () {
|
||||
var dependent = $(this),
|
||||
dependency = $($(this).attr("data-checkbox-dependency")),
|
||||
update = function () {
|
||||
var enabled = dependency.prop('checked');
|
||||
dependent.prop('disabled', !enabled).parents('.form-group').toggleClass('disabled', !enabled);
|
||||
if (!enabled) {
|
||||
dependent.prop('checked', false);
|
||||
}
|
||||
};
|
||||
update();
|
||||
dependency.on("change", update);
|
||||
});
|
||||
|
||||
$("input[data-inverse-dependency]").each(function () {
|
||||
var dependent = $(this),
|
||||
dependency = $($(this).attr("data-inverse-dependency")),
|
||||
update = function () {
|
||||
var enabled = !dependency.prop('checked');
|
||||
dependent.prop('disabled', !enabled).parents('.form-group').toggleClass('disabled', !enabled);
|
||||
};
|
||||
update();
|
||||
dependency.on("change", update);
|
||||
});
|
||||
|
||||
$("input[data-display-dependency]").each(function () {
|
||||
var dependent = $(this),
|
||||
dependency = $($(this).attr("data-display-dependency")),
|
||||
update = function () {
|
||||
var enabled = (dependency.attr("type") === 'checkbox') ? dependency.prop('checked') : !!dependency.val();
|
||||
dependent.prop('disabled', !enabled).parents('.form-group').toggleClass('disabled', !enabled);
|
||||
};
|
||||
update();
|
||||
dependency.on("change", update);
|
||||
dependency.on("dp.change", update);
|
||||
});
|
||||
form_handlers($("body"));
|
||||
|
||||
$(".qrcode-canvas").each(function() {
|
||||
$(this).qrcode(
|
||||
@@ -324,21 +352,6 @@ $(function () {
|
||||
return true;
|
||||
})
|
||||
|
||||
$(".scrolling-multiple-choice").each(function () {
|
||||
var $small = $("<small>");
|
||||
var $a_all = $("<a>").addClass("choice-options-all").attr("href", "#").text(gettext("All"));
|
||||
var $a_none = $("<a>").addClass("choice-options-none").attr("href", "#").text(gettext("None"));
|
||||
$(this).prepend($small.append($a_all).append(" / ").append($a_none));
|
||||
|
||||
$(this).find(".choice-options-none").click(function (e) {
|
||||
$(this).closest(".scrolling-multiple-choice").find("input[type=checkbox]").prop("checked", false);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
$(this).find(".choice-options-all").click(function (e) {
|
||||
$(this).closest(".scrolling-multiple-choice").find("input[type=checkbox]").prop("checked", true);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
})
|
||||
$("#ajaxerr").on("click", ".ajaxerr-close", ajaxErrDialog.hide);
|
||||
moment.locale($("body").attr("data-datetimelocale"));
|
||||
});
|
||||
|
||||
16
src/pretix/static/pretixcontrol/js/ui/subevent.js
Normal file
16
src/pretix/static/pretixcontrol/js/ui/subevent.js
Normal file
@@ -0,0 +1,16 @@
|
||||
/*globals $, Morris, gettext*/
|
||||
$(function () {
|
||||
if (!$("div[data-formset-prefix=checkinlist_set]").length) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $namef = $("input[id^=id_name]").first();
|
||||
var lastValue = $namef.val();
|
||||
$namef.change(function () {
|
||||
var field = $("div[data-formset-prefix=checkinlist_set] input[id$=name]").first();
|
||||
if (field.val() === lastValue) {
|
||||
lastValue = $(this).val();
|
||||
field.val(lastValue);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -251,7 +251,7 @@ label .optional {
|
||||
}
|
||||
}
|
||||
|
||||
div.scrolling-multiple-choice {
|
||||
div.scrolling-multiple-choice, div.scrolling-choice {
|
||||
height: 150px;
|
||||
border: 1px solid $input-border;
|
||||
border-radius: $input-border-radius;
|
||||
|
||||
Reference in New Issue
Block a user