--- /dev/null
+#!/bin/sh
+
+if [ "$_PATH" = "/courses/courses.css" ]; then
+ . $_EXEC/cgilite/file.sh
+ FILE $_EXEC/courses/courses.css
+ return 0
+fi
+
+. $_EXEC/pdiread.sh
+. $_EXEC/courses/l10n.sh
+. $_EXEC/courses/widgets.sh
+. $_EXEC/courses/list.sh
+
+unescape() { [ $# = 0 ] && sed -E 's;\\(.);\1;g' || printf %s "$*" |sed -E 's;\\(.);\1;g'; }
+upcase=' y;abcdefghijklmnopqrstuvwxyzäöüé;ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜÉ;; '
+
+order="$(GET o |grep -m1 -xE 'DOW|TOD')"
+edit="$(GET e |PATH)"
+
+[ "$order" ] || order=DOW
+edit="${edit##*/}"
+
+{ w_sort_courses
+ printf '
+ [form .newcourses action="/cards/new_course.sh" method="POST"
+ [button type="submit" %s]
+ ]' "$(l10n newcourse)"
+
+ [ "$edit" ] && edit_course "$edit"
+ printf '[div .courselist\n'
+ list_courses
+ printf ']'
+} | yield_page courses /courses/courses.css