From cf2dbd3d9094bd37d8ccc8b2fd4b3614014ee908 Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Thu, 16 Feb 2017 15:33:52 +0100
Subject: [PATCH] Introduce tagid filter to generate proper element ids

---
 server.py              | 11 +++++++++++
 templates/courses.html |  6 +++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/server.py b/server.py
index d98514e..dd29e09 100644
--- a/server.py
+++ b/server.py
@@ -272,6 +272,17 @@ def fixnl(s):
 	# To be remove, as soon as db schema is cleaned-up
 	return str(s).replace('\n', '<br>')
 
+@app.template_filter()
+def tagid(s):
+	if not s:
+		return 'EMPTY'
+	s = s.replace(' ', '_').lower()
+	r = ''
+	for c in s:
+		if c in string.ascii_lowercase+string.digits+'_':
+			r = r + c
+	return r
+
 @app.route('/')
 @register_navbar('Home', icon='home')
 def index():
diff --git a/templates/courses.html b/templates/courses.html
index b3dc3cf..86a4ab9 100644
--- a/templates/courses.html
+++ b/templates/courses.html
@@ -34,7 +34,7 @@
 		function autocollapse() {
 			if($("#xs-check").is(":visible")) {
 				/* Only expand current semester */
-				$(".collapse[id!='{{grouped_courses[1].grouper}}']").removeClass('in');
+				$(".collapse[id!='{{grouped_courses[1].grouper|tagid}}']").removeClass('in');
 			}
 		}
 		$(document).ready(autocollapse);
@@ -47,7 +47,7 @@
 <div class="row panel-group" id="accordion">
 	<div class="col-xs-12"><div class="panel panel-default">
 		<div class="panel-heading">
-			<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#{{g.grouper}}" style="color: #222;">
+			<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#{{g.grouper|tagid}}" style="color: #222;">
 				{% if groupedby == 'semester' %}
 				<h1 class="panel-title">{{g.grouper|semester(long=True)}} ({{g.list|length}} Veranstaltungen)</h1>
 				{% else %}
@@ -55,7 +55,7 @@
 				{% endif %}
 			</a>
 		</div>
-		<ul class="{% if not ismod() %}courses-list {% endif %}list-group panel-collapse collapse in" id="{{g.grouper}}">
+		<ul class="{% if not ismod() %}courses-list {% endif %}list-group panel-collapse collapse in" id="{{g.grouper|tagid}}">
 			{% for i in g.list|sort(attribute='title') %}
 				{% if groupedby == 'semester' %}
 					{{ course_list_item(i) }}
-- 
GitLab