#!/usr/bin/env bash # Generate index.html for slide overview # Usage: ./generate-index.sh COURSE="${1:-223015b}" BUILD_DIR="${2:-build/$COURSE}" # Course-specific configuration case "$COURSE" in 223015b) TITLE="Dateiformate, Schnittstellen, Speichermedien & Distributionswege" SUBTITLE="223015b · Modul \"Technik 1\" · 1. Semester" SLIDES_URL="https://librete.ch/hdm/223015b" ACCENT_COLOR="#1e5f8a" ACCENT_LIGHT="#e8f4fc" ;; 223015c) TITLE="Grundlagen IT- und Internettechnik" SUBTITLE="223015c · Modul \"Technik 1\" · 1. Semester" SLIDES_URL="https://librete.ch/hdm/223015c" ACCENT_COLOR="#d63384" ACCENT_LIGHT="#fce4ec" ;; *) TITLE="$COURSE - HdM Slides" SUBTITLE="Lecture Slides" SLIDES_URL="https://librete.ch/hdm/$COURSE" ACCENT_COLOR="#0066cc" ACCENT_LIGHT="#e8f4fc" ;; esac # Topic mappings for nice German titles declare -A TOPIC_MAP TOPIC_MAP["intro"]="Einführung" TOPIC_MAP["grundlagen-text-audio"]="Grundlagen, Text & Audio" TOPIC_MAP["bild-audio-video"]="Bild, Audio & Video" TOPIC_MAP["speichermedien-schnittstellen"]="Speichermedien & Schnittstellen" TOPIC_MAP["distribution-apis-zukunft"]="Distribution, APIs & Zukunft" TOPIC_MAP["vertiefung-offene-fragen"]="Vertiefung & Offene Fragen" TOPIC_MAP["geschichte-grundlagen-html"]="Geschichte, Grundlagen & HTML" TOPIC_MAP["netzwerke-protokolle-css"]="Netzwerke, Protokolle & CSS" TOPIC_MAP["interaktivitaet-javascript"]="Interaktivität & JavaScript" # Configure which topics should appear disabled per course # Two modes: fully disabled (non-clickable card) and buttons-disabled (link remains clickable, buttons are disabled) declare -A DISABLED_FULL declare -A DISABLED_BUTTONS # For course B: chapters 3,4,5 should be fully disabled DISABLED_FULL["223015b"]="speichermedien-schnittstellen distribution-apis-zukunft vertiefung-offene-fragen" # For course C: chapter 3 should keep link clickable but buttons disabled DISABLED_BUTTONS["223015c"]="interaktivitaet-javascript" cat > "$BUILD_DIR/index.html" << HEADER $TITLE

HdM Vorlesungen

$TITLE

$SUBTITLE

HdM Stuttgart · Sommersemester 2026 · Michael Czechowski

HEADER # Generate links for each kapitel (sorted) for html in $(ls "$BUILD_DIR"/[0-9][0-9]-*.html 2>/dev/null | sort); do filename=$(basename "$html") # Extract components from filename (format: NN-topic.html) kapitel_num=$(echo "$filename" | grep -oE '^[0-9]+' | sed 's/^0*//') topic_raw=$(echo "$filename" | sed -E 's/^[0-9]+-//' | sed 's/\.html$//') # Look up nice topic name or fallback topic="${TOPIC_MAP[$topic_raw]}" if [[ -z "$topic" ]]; then topic=$(echo "$topic_raw" | sed 's/-/ /g' | sed 's/.*/\\u&/') fi # Handle kapitel number if [[ "$kapitel_num" == "0" ]] || [[ -z "$kapitel_num" ]]; then kapitel_label="Einführung" else kapitel_label="Kapitel $kapitel_num" fi pdf_filename="${filename%.html}.pdf" # Determine whether this topic is configured as disabled for this course disabled_full=false disabled_buttons=false for t in ${DISABLED_FULL["$COURSE"]}; do if [[ "$topic_raw" == "$t" ]]; then disabled_full=true break fi done if [[ "$disabled_full" == false ]]; then for t in ${DISABLED_BUTTONS["$COURSE"]}; do if [[ "$topic_raw" == "$t" ]]; then disabled_buttons=true break fi done fi # Decide card class card_class="kapitel-card" if [[ "$disabled_full" == true ]] || [[ "$disabled_buttons" == true ]]; then card_class="$card_class disabled" fi # Build link/button HTML depending on disabled state if [[ "$disabled_full" == true ]]; then # non-interactive card (visually dimmed and not clickable) link_html="
$kapitel_label
$topic
" slides_html="Folien" pdf_html="" if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then pdf_html="PDF" fi elif [[ "$disabled_buttons" == true ]]; then # link stays clickable, but buttons are disabled; card appears dimmed link_html="
$kapitel_label
$topic
" slides_html="Folien" pdf_html="" if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then pdf_html="PDF" fi else # normal interactive card pdf_link="" if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then pdf_link="PDF" fi link_html="
$kapitel_label
$topic
" slides_html="Folien" pdf_html="$pdf_link" fi cat >> "$BUILD_DIR/index.html" << LINK
$link_html $slides_html $pdf_html
LINK done # Add klausurfolien entry if it exists (disabled — wird noch überarbeitet) if [[ -f "$BUILD_DIR/klausurfolien.html" ]]; then pdf_disabled="" if [[ -f "$BUILD_DIR/klausurfolien.pdf" ]]; then pdf_disabled="PDF" fi cat >> "$BUILD_DIR/index.html" << KLAUSUR
Folien $pdf_disabled
KLAUSUR fi # Add klausurfragen entry if it exists (disabled — wird noch überarbeitet) if [[ -f "$BUILD_DIR/klausurfragen.html" ]] || [[ -f "$BUILD_DIR/klausurfragen.pdf" ]]; then pdf_disabled="" if [[ -f "$BUILD_DIR/klausurfragen.pdf" ]]; then pdf_disabled="PDF" fi slides_disabled="" if [[ -f "$BUILD_DIR/klausurfragen.html" ]]; then slides_disabled="Folien" fi cat >> "$BUILD_DIR/index.html" << KLAUSURFRAGEN
$slides_disabled $pdf_disabled
KLAUSURFRAGEN fi cat >> "$BUILD_DIR/index.html" << FOOTER
QR Code

$SLIDES_URL

FOOTER echo "Generated $BUILD_DIR/index.html"