diff --git a/templates/timetable.html b/templates/timetable.html index c7ba24d7f644458e5e8fbd75ce2478a2c04009ae..f0dfa4d9f11142df8bb12fd797581fa659c9ca4d 100644 --- a/templates/timetable.html +++ b/templates/timetable.html @@ -15,36 +15,51 @@ <div class="panel-body row table-responsive" style="margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px"> <table id="timetable" class="table table-bordered col-xs-12" style="width: auto; min-width: 100%;"> <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> + {# iterating over each 15 min block #} {% for t in times %} - {% set time_loop = loop %} - <tr height="12px" {% if t.strftime("%M") == "00" %} class="hourlytime" {% endif %}> - {% if ((loop.index - 1) is divisibleby 4) %} <td rowspan="4" style="vertical-align: top;">{{ t.strftime("%H:%M") }}</td> {% endif %} - {% for d in days if (d.index < 5) or (d.lectures|length) > 0 %} - {% for i in range(1,d.maxcol+1) %} - {% for l in d.lectures|selectattr('timetable_col','equalto',i) if (((l.time.time() > t) and (l.time.time() < times[time_loop.index+1])) != (l.time.time() == t ) ) %} - <td {% if i == 1 %} class="newday"{% endif %} rowspan="{{l.duration / 15}}" style="background: {% if l.visible and l.course.visible %}lightgrey;{% else %}#f2dede{% endif %}"> - <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> - {% else %} - {% for l in d.lectures|selectattr('timetable_col','equalto',i) if (l.time.time() < t) and (l.time_end.time() > t) %} + {% set time_loop = loop %} + <tr height="12px" {% if t.strftime("%M") == "00" %} class="hourlytime" {% endif %}> + {# display time in first row if its a full hour #} + {% if ((loop.index - 1) is divisibleby 4) %} <td rowspan="4" style="vertical-align: top;">{{ t.strftime("%H:%M") }}</td> {% endif %} + {# 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 #} + {% for l in d.lectures|selectattr('timetable_col','equalto',col) if (((l.time.time() > t) and (l.time.time() < times[time_loop.index+1])) != (l.time.time() == t ) ) %} + {# handle the first column of a day specialy, set red background if hidden #} + <td {% if col == 1 %} class="newday"{% endif %} rowspan="{{ (l.duration / 15)|round(method="ceil") }}" style="background: {% if l.visible and l.course.visible %}lightgrey;{% else %}#f2dede{% endif %}"> + {# 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> {% else %} - <td {% if i == 1 %} class="newday"{% endif %}></td> + {# 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 %} + {# no lecture right now, jsut end column #} + <td {% if col == 1 %} class="newday"{% endif %}></td> + {% endfor %} {% endfor %} + {# end lecture #} + {% endfor %} + {# end day column #} {% endfor %} - {% endfor %} - </tr> + {# end day #} + </tr> {% endfor %} + {# end 15 min block #} </table> </div> </div>