timetable.html 3.98 KB
Newer Older
Andreas Valder's avatar
Andreas Valder committed
1 2 3 4
{% extends "base.html" %}
{% block content %}
<div class="panel-group" id="accordion">
	<div class="panel panel-default">
5
		<div class="hidden-print panel-heading">
6 7 8
			<h1 class="panel-title">Drehplan
				<a class="pull-right fa fa-calendar" aria-hidden="true" href="{{url_for('ical_all')}}" style="text-decoration: none"></a>
			</h1>
Andreas Valder's avatar
Andreas Valder committed
9
		</div>
10
		<div class="hidden-print">
11
			<div style="margin-top: 10px; padding: 15px;" class="col-xs-12">
12 13
				<a href="{{url_for('timetable', kw=kw-1) }}" class="pull-left btn btn-default">{{ "<<" }}</a>
				<a href="{{url_for('timetable', kw=kw+1) }}" class="pull-right btn btn-default">{{ ">>" }}</a>
14
				<a href="{{url_for('timetable', kw=0) }}" style="width: 80px;" class="btn btn-default center-block">today</a>
15
			</div>
16 17 18 19 20 21 22 23
			<input id="weeksel" type="week" class="center-block" value="{{ weekofyear }}"/>
			<script>
				$( function () {
					$("#weeksel").on("change", function() {
						window.location.href="{{ url_for('timetable') }}?date="+$("#weeksel").val()
					});
				});
			</script>
24
		</div>
25
		<div class="panel-body row table-responsive">
26
			<table id="timetable" class="table table-bordered col-xs-12" style="width: auto; min-width: 100%;">
27
				<tr><th style="width: 30px;"></th>{% for d in days if (d.index < 5) or (d.lectures|length) > 0 %}<th style="min-width: 10em;" colspan="{{d.maxcol}}">{{ d.date.strftime("%A (%d.%m.%Y)") }}</th>{% endfor %}</tr>
28
				{# iterating over each 15 min block #}
29
				{% for t in times %}
30
					{% set time_index = loop.index %}
31
					<tr{% if t.strftime("%M") == "00" %} class="hourlytime"{% endif %}>
32
						{# display time in first row if its a full hour #}
33
						{% if ((time_index - 1) is divisibleby 4) %} <td rowspan="4" style="vertical-align: top;">{{ t.strftime("%H:%M") }}</td> {% endif %}
34
						{# iterate over days if if it is a working day or we have lectures on that day (optionaly skip weekends) #}
35
						{% for d in days if (d.index < 5) or (d.lectures|length) > 0 %}
36 37 38
							{% for col in range(1,d.maxcol+1) %}

								{# iterate over all lextures but only consider those that are in the current column and happen in the 15 min block #}
39 40
								{# time_index starts at 0 so we use it directly and do not do +1 #}
								{% for l in d.lectures|selectattr('timetable_col','equalto',col) if ((l.time.time() >= t) and (l.time.time() < times[time_index])) %}
41
									{# handle the first column of a day specialy, set red background if hidden #}
42 43 44 45 46 47
									<td
										{% if col == 1 %} class="newday"{% endif %}
										{# we have to take into account that we might have rounded the start to 15-min intervalls #}
										rowspan="{{ ( (l.duration + ( ((t.minute + t.hour*60) - (l.time.time().minute + l.time.time().hour *60 )) |abs ) ) / 15)|round(method="ceil")|int }}"
										style="background: {% if l.visible and l.course.visible %}lightgrey;{% else %}#f2dede{% endif %}"
									>
48 49 50 51 52 53 54 55 56 57 58 59 60
										{# print the lecture block #}
										<p class="small">
											<strong>
												<a class="hidden-print" href="{{url_for('course', id=l.course_id)}}#lecture-{{l.id}}">
													{{l.course.short}}
												</a>
												<span class="visible-print-inline">{{l.course.short}}</span>
											</strong>
											<br>
											{{l.time.strftime("%H:%M")}} - {{l.time_end.strftime("%H:%M")}}<br>
											{{l.place}}
										</p>
									</td>
61
								{% else %}
62 63 64 65
									{# if the lecture is in the current collumn but not the current time slot #}
									{% for l in d.lectures|selectattr('timetable_col','equalto',col) if (l.time.time() < t) and (l.time_end.time() > t) %}
										{# this part is covered by another lecture using rowspan #}
									{% else %}
66
										{# no lecture right now, just end column #}
67 68
										<td {% if col == 1 %} class="newday"{% endif %}></td>
									{% endfor %}
69
								{% endfor %}
70 71
								{# end lecture #}

72
							{% endfor %}
73
							{# end day column #}
74
						{% endfor %}
75 76
						{# end day #}
					</tr>
77
				{% endfor %}
78
				{# end 15 min block #}
79
			</table>
Andreas Valder's avatar
Andreas Valder committed
80 81 82 83 84
		</div>
	</div>
</div>

{% endblock %}