timetable.html 3.82 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="row hidden-print">
11
			<div  style="margin-top: 10px;" class="col-xs-12">
12 13 14
				<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>
				<a href="{{url_for('timetable', kw=0) }}" style="width: 80px;" class="center-block btn btn-default">today</a>
15 16
			</div>
       		</div>
17
		<div class="panel-body row table-responsive" style="margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px">
18
			<table id="timetable" class="table table-bordered col-xs-12" style="width: auto; min-width: 100%;">
19
				<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>
20
				{# iterating over each 15 min block #}
21
				{% for t in times %}
22
					{% set time_index = loop.index %}
23 24
					<tr height="12px" {% if t.strftime("%M") == "00" %} class="hourlytime" {% endif %}>
						{# display time in first row if its a full hour #}
25
						{% if ((time_index - 1) is divisibleby 4)  %} <td rowspan="4" style="vertical-align: top;">{{ t.strftime("%H:%M") }}</td> {% endif %}
26 27 28 29 30
						{# iterate over days if if it is a working day or we have lectures on that day (optionaly skip weekends) #}
						{% for d in days  if (d.index < 5) or (d.lectures|length) > 0 %}
							{% 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 #}
31 32
								{# 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])) %}
33
									{# handle the first column of a day specialy, set red background if hidden #}
34 35 36 37 38 39
									<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 %}"
									>
40 41 42 43 44 45 46 47 48 49 50 51 52
										{# 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>
53
								{% else %}
54 55 56 57
									{# 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 %}
58
										{# no lecture right now, just end column #}
59 60
										<td {% if col == 1 %} class="newday"{% endif %}></td>
									{% endfor %}
61
								{% endfor %}
62 63
								{# end lecture #}

64
							{% endfor %}
65
							{# end day column #}
66
						{% endfor %}
67 68
						{# end day #}
					</tr>
69
				{% endfor %}
70
				{# end 15 min block #}
71
			</table>
Andreas Valder's avatar
Andreas Valder committed
72 73 74 75 76 77
		</div>
	</div>
</div>
</div>

{% endblock %}