166 lines
7.0 KiB
HTML
166 lines
7.0 KiB
HTML
|
{% extends "base.html" %}
|
||
|
|
||
|
{% block content %}
|
||
|
<div class="row">
|
||
|
<div class="col-md-4">
|
||
|
<div class="card">
|
||
|
<div class="card-header">
|
||
|
<h4 class="card-title mb-0">{{ event.name }}</h4>
|
||
|
<h5 class="card-category mb-0">{{ event.eventtype.name }}</h5>
|
||
|
</div>
|
||
|
<div class="card-body">
|
||
|
{% if event.datebegin.date == event.dateend.date %}
|
||
|
<p>The <a href="#">{{ event.datebegin | date:"d-m-Y" }}</a> from <a href="#">{{ event.datebegin | date:"G:i" }}</a> to <a href="#">{{ event.dateend | date:"G:i" }}</a>
|
||
|
{% else %}
|
||
|
<p>From <a href="#">{{ event.datebegin | date:"d-m-Y, G:i" }}</a><br />
|
||
|
To <a href="#">{{ event.dateend | date:"d-m-Y, G:i" }}</a>
|
||
|
{% endif %}
|
||
|
{% if event.number_of_week_from_today > 0 %}
|
||
|
<br />In <span class="text-{% if event.number_of_week_from_today > 12 %}success{% elif event.number_of_week_from_today > 9 %}info{% elif event.number_of_week_from_today > 6 %}warning{% else %}danger{% endif %}"><b>{{event.number_of_week_from_today}} week(s)</b></span>
|
||
|
{% endif %}
|
||
|
</p>
|
||
|
<address>
|
||
|
{{ event.place.address }}<br \>
|
||
|
{{ event.place.postal }} {{ event.place.city }}</p>
|
||
|
{{ event.place.country }}
|
||
|
</address>
|
||
|
{% if event.place.nbkm %}
|
||
|
<p>{{ event.place.nbkm }}km ({{ event.place.timing }}min)</p>
|
||
|
<br />
|
||
|
{% endif %}
|
||
|
<h5 class="title mb-1">Participants</h5>
|
||
|
<input type="text" name="gymnast" placeholder="Add gymnast…" class="form-control mb-2" id="gymnast">
|
||
|
<table class="table tablesorte table-condensed table-striped" id="gymmanst_participant">
|
||
|
{% if gymnast_list %}
|
||
|
{% for gymnast in gymnast_list %}
|
||
|
<tr>
|
||
|
<td class="text-left">
|
||
|
<span class="tim-icons icon-simple-remove text-warning minusButton" data-gymnastid="{{ gymnast.0.id }}"></span>
|
||
|
</td>
|
||
|
<td class="text-left col-9">
|
||
|
<a href="{% url 'gymnast_details' gymnast.0.id %}">{{ gymnast.0.lastname }}, {{ gymnast.0.firstname }}</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
{% endfor %}
|
||
|
{% else %}
|
||
|
<tr class="minusButton"><td colspan="2">No partifcipants for now.</td></tr>
|
||
|
{% endif %}
|
||
|
</table>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="col-md-8">
|
||
|
<div class="card">
|
||
|
<div class="card-body">
|
||
|
<div id='map' style='width: 705px; height: 350px;'></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="card">
|
||
|
<div class="card-body">
|
||
|
{{ event.to_markdown | safe }}
|
||
|
<a href="{% url 'event_update' event.id %}">
|
||
|
<button type="submit" value="add" class="btn btn-icon btn-warning ">
|
||
|
<i class="tim-icons icon-pencil"></i>
|
||
|
</button>
|
||
|
</a>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block footerscript %}
|
||
|
<script type="text/javascript">
|
||
|
|
||
|
L.mapbox.accessToken = 'pk.eyJ1IjoiZ3RydWxsZW0iLCJhIjoiY2p2Mm5wa3YzMDE1eTQ0cDJlOGdsZno4ZCJ9.zrOWNO0F4VTd9_h-LSSkzw';
|
||
|
|
||
|
var geocoder = L.mapbox.geocoder('mapbox.places');
|
||
|
geocoder.query('{{ event.place.address }} {{ event.place.postal }} {{ event.place.city }}', showMap);
|
||
|
var map = L.mapbox.map('map').addLayer(L.mapbox.styleLayer('mapbox://styles/mapbox/streets-v11'));
|
||
|
// var map = L.mapbox.map('map').addLayer(L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v10'));
|
||
|
|
||
|
// L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||
|
// attribution: 'blablabla'
|
||
|
// }).addTo(map);
|
||
|
|
||
|
function showMap(err, data) {
|
||
|
// The geocoder can return an area, like a city, or a point, like an
|
||
|
// address. Here we handle both cases, by fitting the map bounds to an
|
||
|
// area or zooming to a point.
|
||
|
if (data.lbounds) {
|
||
|
map.fitBounds(data.lbounds);
|
||
|
} else if (data.latlng) {
|
||
|
map.setView([data.latlng[0], data.latlng[1]], 10);
|
||
|
L.marker([data.latlng[0], data.latlng[1]]).addTo(map);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$(function(){
|
||
|
$('[data-sort="table"]').tablesorter({
|
||
|
headers: {
|
||
|
0: { sorter: false },
|
||
|
},
|
||
|
sortList: [[1,0]]
|
||
|
})
|
||
|
|
||
|
function insert_selected_gymnast(gymnast_id, gymnast_name)
|
||
|
{
|
||
|
$('#gymmanst_participant').append('<tr><td class="text-left"><span class="tim-icons icon-simple-remove text-warning minusButton" data-gymnastid="{{ gymnast.0.id }}"></span></td><td class="text-left"><a href="/gymnast/' + gymnast_id + '/">' + gymnast_name + '</a></td></tr>');
|
||
|
|
||
|
$('#gymnast').val('');
|
||
|
$('#gymnast').focus();
|
||
|
}
|
||
|
|
||
|
$('body').on('click', '.minusButton', function(event){
|
||
|
$.ajax({
|
||
|
url: '/event/' + {{ event.id }} + '/remove_gymnast/' + $(this).data('gymnastid') + '/',
|
||
|
type: 'GET',
|
||
|
context: $(this),
|
||
|
}).done(function(){
|
||
|
$(this).closest('tr').fadeTo(1000, 0, function(){
|
||
|
$(this).remove();
|
||
|
});
|
||
|
}).fail(function(){
|
||
|
alert('Not done !');
|
||
|
});
|
||
|
return false;
|
||
|
});
|
||
|
|
||
|
$('#gymnast').autocomplete({
|
||
|
source: function(request, response){
|
||
|
$.ajax({
|
||
|
url: '/gymnast/lookup/?pattern=' + $('#gymnast').val(),
|
||
|
type: 'GET',
|
||
|
dataType: "json",
|
||
|
success: function(data){
|
||
|
if(data.length != 0){
|
||
|
response($.map(data, function(item){
|
||
|
return {
|
||
|
label: item.Name,
|
||
|
value: item.Name,
|
||
|
gymnastid: item.ID
|
||
|
}
|
||
|
}))
|
||
|
} else {
|
||
|
response([{ label: 'No result found.', value: '' }]);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
error: function(exception){
|
||
|
console.log(exception);
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
minLength: 3,
|
||
|
select: function (event, ui) {
|
||
|
$.ajax({
|
||
|
url: '/event/' + {{ event.id }} + '/link_with_gymnast/' + ui.item.gymnastid + '/'
|
||
|
}).done(function() {
|
||
|
insert_selected_gymnast(ui.item.gymnastid, ui.item.label);
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
{% endblock %}
|