2021-07-31 13:28:17 +02:00

336 lines
10 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "layout.html" %}
{% from "_macros.html" import render_cropper_header, render_end_container_handling, render_jquery_steps_header, render_google_place_autocomplete_field, render_google_place_autocomplete_header, render_cropper_header, render_cropper_code, render_crop_image_form_section, render_radio_buttons, render_field_with_errors, render_field %}
{%- block title -%}
{{ _('Create event') }}
{%- endblock -%}
{% block header_before_site_js %}
{{ render_jquery_steps_header() }}
{{ render_cropper_header() }}
<script>
$( function() {
{{ render_cropper_code() }}
var form = $("#main-form");
form.validate({
rules: {
start: {
dateRange: ["#start", "#end"]
},
end: {
dateRangeDay: ["#start", "#end"]
},
event_place_id: {
required: {
param: true,
depends: function(element) {
return $('input[type=radio][name=event_place_choice]:checked').val() == "1";
}
}
},
"new_event_place-name": {
required: {
param: true,
depends: function(element) {
return $('input[type=radio][name=event_place_choice]:checked').val() == "2";
}
}
},
organizer_id: {
min: {
param: 1,
depends: function(element) {
return $('input[type=radio][name=organizer_choice]:checked').val() == "1";
}
}
},
"new_organizer-name": {
required: {
param: true,
depends: function(element) {
return $('input[type=radio][name=organizer_choice]:checked').val() == "2";
}
}
}
}
});
function update_place_container(value) {
switch (value) {
case '1':
$('#existing_place_container').show();
$('#new_place_container').hide();
break;
case '2':
$('#existing_place_container').hide();
$('#new_place_container').show();
break;
}
}
$('#event_place_id').select2({
width: '100%',
theme: 'bootstrap4',
tags: true,
ajax: {
url: "{{ url_for('js_autocomplete_place') }}",
dataType: 'json',
delay: 250,
cache: true,
data: function (params) {
return {
keyword: params.term,
admin_unit_id: '{{ admin_unit.id }}'
};
}
},
placeholder: "{{ _('Enter place or address') }}",
createTag: function (params) {
var term = $.trim(params.term);
if (term === '') {
return null;
}
return {
id: term,
text: "{{ _('Just use %(term)s', term='%(term)s') }}".replace("%(term)s", term),
term: term,
is_new_tag: true
}
},
insertTag: function (data, tag) {
data.push(tag);
},
templateResult: function (state) {
if ("is_new_tag" in state) {
return $("<strong>" + state.text + "</strong>");
}
return state.text;
}
});
function get_gmaps_place_details(place_id) {
$.ajax({
url: "{{ url_for('js_autocomplete_gmaps_place') }}",
type: "get",
dataType: "json",
data: "gmaps_id=" + place_id,
success: function (data) {
fill_place_form_with_gmaps_place(data, 'new_event_place-');
$('#new_place_container').find(':input').valid();
}
});
}
$('#event_place_id').on('select2:close', function (e) {
var dataArray = $(e.target).select2('data');
var data = {};
if (dataArray.length > 0) {
data = dataArray[0];
}
if ("is_new_tag" in data || "gmaps_id" in data) {
$(this).val(null).trigger('change');
$('input[type=radio][name=event_place_choice][value=2]').click();
reset_place_form('new_event_place-');
if ("is_new_tag" in data) {
$('#new_event_place-name').val(data.term);
} else {
$('#new_event_place-name').val(data.main_text);
get_gmaps_place_details(data.gmaps_id);
}
$('#new_place_container').find(':input').valid();
$(this).removeClass('is-valid');
} else {
$(this).valid();
}
});
$('input[type=radio][name=event_place_choice]').on('change', function() {
update_place_container($(this).val());
});
$('#new_place_container_search_link').click(function(e){
e.preventDefault();
e.stopPropagation();
reset_place_form('new_event_place-');
$('input[type=radio][name=event_place_choice][value=1]').click();
});
update_place_container($('input[type=radio][name=event_place_choice]:checked').val());
function update_organizer_container(value) {
switch (value) {
case '1':
$('#existing_organizer_container').show();
$('#new_organizer_container').hide();
break;
case '2':
$('#existing_organizer_container').hide();
$('#new_organizer_container').show();
break;
}
}
$('input[type=radio][name=organizer_choice]').on('change', function() {
update_organizer_container($(this).val());
});
$('#organizer_id').on('select2:select', function (e) {
$(this).valid();
});
update_organizer_container($('input[type=radio][name=organizer_choice]:checked').val());
{{ render_end_container_handling() }}
});
</script>
{% endblock %}
{% block content %}
<h1>{{ _('Create event') }}</h1>
<form id="main-form" action="" method="POST" enctype="multipart/form-data">
{{ form.hidden_tag() }}
<div class="card mb-4">
<div class="card-header">
{{ _('Event') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.name) }}
{{ render_field_with_errors(form.description, style="min-height:10rem;") }}
</div>
</div>
<div class="card mb-4">
<div class="card-header">
{{ _('Event date') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.start, **{"data-range-to":"#end", "data-range-max-days": "14"}) }}
{{ render_field_with_errors(form.end, is_collapsible=1) }}
{{ render_field_with_errors(form.recurrence_rule, ri="rrule") }}
</div>
</div>
<div class="card mb-4">
<div class="card-header">
{{ _('Organizer') }} *
</div>
<div class="card-body">
<div>
<div class="form-text mt-0 text-muted w-100">{{ _("Select the organizer. If the organizer is not yet on the list, just enter it.") }}</div>
{{ render_radio_buttons(form.organizer_choice) }}
</div>
<div class="my-2" id="existing_organizer_container">
{{ render_field_with_errors(form.organizer_id, class="autocomplete w-100", is_required=True) }}
</div>
<div class="my-2" id="new_organizer_container">
{{ form.new_organizer.hidden_tag() }}
{{ render_field_with_errors(form.new_organizer.form.name, is_required=True) }}
{{ form.new_organizer.form.location.hidden_tag() }}
{{ render_field_with_errors(form.new_organizer.form.location.street) }}
{{ render_field_with_errors(form.new_organizer.form.location.postalCode) }}
{{ render_field_with_errors(form.new_organizer.form.location.city) }}
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
{{ _('Place') }} *
</div>
<div class="card-body">
<div>
<div class="form-text mt-0 text-muted w-100">{{ _("Choose where the event takes place. If the venue is not yet in the list, just enter it.") }}</div>
<div style="display: none;">{{ render_radio_buttons(form.event_place_choice) }}</div>
</div>
<div class="my-2" id="existing_place_container">
{{ render_field_with_errors(form.event_place_id, class="w-100", is_required=True) }}
</div>
<div class="my-2" id="new_place_container">
{{ form.new_event_place.hidden_tag() }}
{{ render_field_with_errors(form.new_event_place.form.name, is_required=True) }}
{{ form.new_event_place.form.location.hidden_tag() }}
{{ render_field_with_errors(form.new_event_place.form.location.street) }}
{{ render_field_with_errors(form.new_event_place.form.location.postalCode) }}
{{ render_field_with_errors(form.new_event_place.form.location.city) }}
{{ render_field_with_errors(form.new_event_place.form.location.state) }}
{{ render_field_with_errors(form.new_event_place.form.location.latitude) }}
{{ render_field_with_errors(form.new_event_place.form.location.longitude) }}
<div class="my-4">
<a href="#" id="new_place_container_search_link"><i class="fa fa-search"></i> {{ _('Switch to place search') }}</a>
</div>
</div>
</div>
</div>
{{ render_crop_image_form_section(form.photo) }}
<div class="card mb-4">
<div class="card-header">
{{ _('Access') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.accessible_for_free, ri="switch") }}
{{ render_field_with_errors(form.registration_required, ri="switch") }}
{{ render_field_with_errors(form.price_info) }}
{{ render_field_with_errors(form.ticket_link) }}
{{ render_field_with_errors(form.booked_up, ri="switch") }}
{{ render_field_with_errors(form.attendance_mode, class="autocomplete w-100") }}
</div>
</div>
<div class="card mb-4">
<div class="card-header">
{{ _('Target group') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.target_group_origin, class="autocomplete w-100") }}
{{ render_field_with_errors(form.kid_friendly, ri="switch") }}
{{ render_field_with_errors(form.age_from) }}
{{ render_field_with_errors(form.age_to) }}
{{ render_field_with_errors(form.expected_participants) }}
</div>
</div>
<div class="card mb-4">
<div class="card-header">
{{ _('Additional information') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.category_ids, class="autocomplete-multi w-100") }}
{{ render_field_with_errors(form.tags) }}
{{ render_field_with_errors(form.external_link) }}
</div>
</div>
{% if form.rating.choices|length > 1 %}
<div class="card mb-4">
<div class="card-header">
{{ _('Rating') }}
</div>
<div class="card-body">
{{ render_field_with_errors(form.rating) }}
</div>
</div>
{% endif %}
{{ render_field(form.submit) }}
</form>
{% endblock %}