diff --git a/.gitignore b/.gitignore index 5ff6309..4a13688 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,8 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +### nix / direnv +.direnv +result diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..e39aab5 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,4 @@ +out +latexout +latex.out +direnv diff --git a/docs/uebungen/.latexmkrc b/docs/uebungen/.latexmkrc new file mode 100644 index 0000000..80954ed --- /dev/null +++ b/docs/uebungen/.latexmkrc @@ -0,0 +1,2 @@ +$out_dir = "out"; +$pdf_mode = 4; # lualatex diff --git a/docs/uebungen/resources/05 - Facelets und PrimeFaces - Aufgaben.pdf b/docs/uebungen/resources/05 - Facelets und PrimeFaces - Aufgaben.pdf new file mode 100644 index 0000000..bc707d3 Binary files /dev/null and b/docs/uebungen/resources/05 - Facelets und PrimeFaces - Aufgaben.pdf differ diff --git a/docs/uebungen/uebung-5.tex b/docs/uebungen/uebung-5.tex new file mode 100644 index 0000000..643b676 --- /dev/null +++ b/docs/uebungen/uebung-5.tex @@ -0,0 +1,20 @@ +\documentclass{uebung} + +\author{Linus Nagel} +\chapter{5} + +\begin{document} + +\maketitle + +\begin{exercises} +\item Worum handelt es sich bei Facelets und welche Vorteile bietet die Verwendung von Facelets? +\item Wie können Templates mit Facelets erstellt bzw. verwendet werden? +\item Worum handelt es sich bei PrimeFaces? +\item Welcher Namespace wird für die Verwendung von PrimeFaces benutzt? +\item Wie kann per Ajax auf die Eingabe eines Tastenklicks reagiert werden? +\item Zählen Sie vier PrimeFaces-Komponenten auf und geben deren Funktion an. +\item Erstellen Sie eine JSF-Seite, die eine Klappliste anzeigt in der einer der Werte „Farben“, „Zahlen“ oder „Buchstaben“ ausgewählt werden kann. Darunter befindet sich eine Klappliste die zunächst nur den Inhalt „---“ hat. Nach einer Auswahl in der ersten Klappliste soll ein AJAX-Request generiert werden, der den Inhalt der zweiten Klappliste setzt (denken Sie sich zu den in Klappliste 1 auswählbaren Werten passende Werte aus). +\end{exercises} + +\end{document} diff --git a/docs/uebungen/uebung.cls b/docs/uebungen/uebung.cls new file mode 100644 index 0000000..448008b --- /dev/null +++ b/docs/uebungen/uebung.cls @@ -0,0 +1,142 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{uebung}[Sem3 Web Engineering Exercise Sheet Class] + +% Base class with options +\LoadClass[11pt,a4paper]{article} + +% Required packages +\RequirePackage[german]{babel} +\RequirePackage{geometry} +\RequirePackage{fancyhdr} +\RequirePackage{titlesec} +\RequirePackage{enumitem} +\RequirePackage{listings} +\RequirePackage{xcolor} +\RequirePackage{graphicx} +\RequirePackage{amsmath} +\RequirePackage{hyperref} + +% Define chapter counter for exercise sheets +\newcounter{chapter} +\renewcommand{\thechapter}{\arabic{chapter}} + +% Page geometry +\geometry{a4paper, left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm} + +% Colors for code listings +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +% Code listing style +\lstdefinestyle{mystyle}{ + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2, + frame=single, + framesep=5pt +} + +\lstset{style=mystyle} + +% Header and footer setup +\pagestyle{fancy} +\fancyhf{} +\fancyhead[L]{\textbf{Übung Web-Engineering}} +\fancyhead[R]{\textbf{Aufgabenblatt zu Kapitel \thechapter}} +\fancyfoot[C]{\thepage} + +% Title format +\renewcommand{\maketitle}{ + \begin{center} + \LARGE\textbf{Übung Web-Engineering}\\ + \Large\textbf{Aufgabenblatt zu Kapitel \thechapter} + \vspace{1cm} + + \large\textbf{Aufgaben – \@author} + \end{center} + \vspace{0.5cm} +} + +% Section formatting +\titleformat{\section} + {\large\bfseries} + {} + {0em} + {} + [\titlerule] + +% Exercise item formatting +\newlist{exercises}{enumerate}{1} +\setlist[exercises]{ + label=\arabic*), + leftmargin=*, + itemsep=1em, + before=\vspace{1.0cm} +} + +% Java code environment +\lstnewenvironment{javaCode}[1][] + {\lstset{style=mystyle, language=Java, #1}} + {} + +% JSP/HTML code environment +\lstnewenvironment{htmlCode}[1][] + {\lstset{style=mystyle, language=HTML, #1}} + {} + +% XML code environment +\lstnewenvironment{xmlCode}[1][] + {\lstset{style=mystyle, language=XML, #1}} + {} + +% Subsection for code examples +\newcommand{\codeexample}[1]{ + \vspace{0.5em} + \noindent\textbf{Beispiel:} + \vspace{0.3em} + #1 +} + +% Environment for multi-page content +\newenvironment{multipagecontent} + {\par\vspace{1em}} + {\par\vspace{1em}} + +% Command for page breaks with continuation marker +\newcommand{\continuepage}{ + \vfill + \centerline{\textit{Fortsetzung auf nächster Seite...}} + \newpage + \centerline{\textit{Fortsetzung von vorheriger Seite...}} + \vspace{1em} +} + +% Hyperref setup +\hypersetup{ + colorlinks=true, + linkcolor=blue, + filecolor=magenta, + urlcolor=cyan, + pdftitle={Web Engineering Übungen}, + pdfauthor={Linus Nagel} +} + +% Chapter command for exercise sheets +\newcommand{\chapter}[1]{\setcounter{chapter}{#1}} + +\endinput diff --git a/flake.nix b/flake.nix index 182b67f..6a927be 100644 --- a/flake.nix +++ b/flake.nix @@ -18,17 +18,86 @@ system, ... }: - with pkgs.lib; { - # packages.default = with pkgs; mkDerivation { + with pkgs.lib; let + latexPackages = with pkgs; [ + latexrun + (texlive.withPackages + (ps: + with ps; [ + amsmath + biber + biblatex + changepage + csquotes + enumitem + fontaxes + latexmk + listings + minted + newtx + newtxsf + newtxtt + scheme-medium + textpos + times + titlesec + transparent + upquote + ])) + ]; + in { + # Per-system attributes can be defined here. The self' and inputs' + # module parameters provide easy access to attributes of the same + # system. + packages = with pkgs; let + fmtNum = strings.fixedWidthNumber 2; + fmtReleaseName = sem: author: chap: "${fmtNum sem} - ${fmtNum chap} - ${author.lastName}, ${author.firstName}.pdf"; + fmtRelease = fmtReleaseName 3 { + firstName = "Linus"; + lastName = "Nagel"; + }; + mkUebungPdf = n: args: + stdenvNoCC.mkDerivation rec { + name = fmtRelease n; + version = "1.0.0"; + src = ./.; + buildInputs = latexPackages; + buildPhase = + # sh + '' + cd docs/uebungen + + latexmk \ + -pdf \ + -l -dir-report -file-line-error -verbose \ + -interaction=nonstopmode \ + "uebung-${toString n}.tex" + ''; + installPhase = + # sh + '' + mkdir -p $out/share $out/log $out/artifacts + cp out/uebung-${toString n}.pdf "$out/share/${name}" + cp out/*.log $out/log/ + cp out/* $out/artifacts + ''; + } + // args; + in { + "uebung-5" = mkUebungPdf 5 {}; + }; - # }; devShells.default = with pkgs; mkShell { - packages = [ - openjdk - jetty - ant - ]; + nativeBuildInputs = []; + packages = + [ + mermaid-cli + openjdk + jetty + ant + ] + ++ latexPackages; shellHook = '' echo "Usage Example:" @@ -37,6 +106,9 @@ }; }; flake = { + # The usual flake attributes can be defined here, including system- + # agnostic ones like nixosModule and system-enumerating ones, although + # those are more easily expressed in perSystem. }; }; }