/*globals $, Morris, gettext, RRule, RRuleSet*/ $(document).on("pretix:bind-forms", function () { if (!$("div[data-formset-prefix=checkinlist_set]").length) { return; } function parse_weekday(wd) { map = { 'MO': 0, 'TU': 1, 'WE': 2, 'TH': 3, 'FR': 4, 'SA': 5, 'SU': 6 } if (wd.indexOf(",") > 0) { var wds = []; $.each(wd.split(","), function (k, v) { wds.push(map[v]); }); return wds; } else { return map[wd]; } } function rrule_preview() { var ruleset = new rrule.RRuleSet(); $(".rrule-form").each(function () { if ($(this).find("input[name$=DELETE]").prop("checked")) { return; } var rule_args = {}; var $form = $(this); var freq = $form.find("select[name*=freq]").val(); if (!$form.find("input[name*=dtstart]").data("DateTimePicker")) { // uninitialized return; } var dtstart = $form.find("input[name*=dtstart]").data("DateTimePicker").date(); dtstart = dtstart.add(dtstart.utcOffset(), 'm').add(12, 'h').utcOffset(0); rule_args.dtstart = dtstart.toDate(); rule_args.interval = parseInt($form.find("input[name*=interval]").val()) || 1; if (freq === 'yearly') { rule_args.freq = rrule.RRule.YEARLY; var same = $form.find("input[name*=yearly_same]:checked").val(); if (same === "off") { rule_args.bysetpos = parseInt($form.find("select[name*=yearly_bysetpos]").val()); rule_args.byweekday = parse_weekday($form.find("select[name*=yearly_byweekday]").val()); rule_args.bymonth = parseInt($form.find("select[name*=yearly_bymonth]").val()); } } else if (freq === 'monthly') { rule_args.freq = rrule.RRule.MONTHLY; var same = $form.find("input[name*=monthly_same]:checked").val(); if (same === "off") { rule_args.bysetpos = parseInt($form.find("select[name*=monthly_bysetpos]").val()); rule_args.byweekday = parse_weekday($form.find("select[name*=monthly_byweekday]").val()); } } else if (freq === 'weekly') { rule_args.freq = rrule.RRule.WEEKLY; var days = []; $form.find("input[name*=weekly_byweekday]:checked").each(function () { days.push(parse_weekday($(this).val())); }); if (days.length !== 0) { rule_args.byweekday = days; } } else if (freq === 'daily') { rule_args.freq = rrule.RRule.DAILY; } var end = $form.find("input[name*=end]:checked").val(); if (end === "count") { rule_args.count = parseInt($form.find("input[name*=count]").val()) || 1; } else { var date = $form.find("input[name*=until]").data("DateTimePicker").date(); if (date !== null) { // rrule.until is non-inclusive, whereas in pretix-backend "until" is inclusive => add 1 day // date is a Moment-object. Moment.add() mutates, but is save to do here date.add(1, 'days'); rule_args.until = date; } } if ($form.find("input[name*=exclude]").prop("checked")) { ruleset.exrule(new rrule.RRule(rule_args)); $form.closest(".panel").addClass("panel-danger").removeClass("panel-default"); } else { ruleset.rrule(new rrule.RRule(rule_args)); $form.closest(".panel").addClass("panel-default").removeClass("panel-danger"); } }); var all_dates = ruleset.all(); var format = $("body").attr("data-longdateformat") + " (dddd)"; $("#rrule-preview").html(""); if (all_dates.length > 20) { $("#rrule-preview").html(""); all_dates.slice(0, 10).forEach(function(element) { $("#rrule-preview").append($("