From 2bc287f3b7447a5cf1dc6de642e59fd2f04fd436 Mon Sep 17 00:00:00 2001 From: Marcus Kammer Date: Wed, 10 Jul 2024 22:28:47 +0200 Subject: [PATCH] Show questionnaire results in columns per row --- dev.metalisp.survey.asd | 2 +- src/survey.lisp | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/dev.metalisp.survey.asd b/dev.metalisp.survey.asd index 1b08e54..3d89fb1 100644 --- a/dev.metalisp.survey.asd +++ b/dev.metalisp.survey.asd @@ -2,7 +2,7 @@ (defsystem "dev.metalisp.survey" :description "A simple survey" - :version "0.2.2" + :version "0.2.3" :author "Marcus Kammer " :source-control "git@git.sr.ht:~marcuskammer/dev.metalisp.survey" :licence "MIT" diff --git a/src/survey.lisp b/src/survey.lisp index ba633c7..2d142a0 100644 --- a/src/survey.lisp +++ b/src/survey.lisp @@ -75,6 +75,11 @@ (defun results-not-null (results) (some (lambda (x) (and (listp x) (not (null x)))) results)) +(defun group-in-chunks (lst) + "Group LST into sublists of three elements." + (loop for i from 0 by 3 while (< i (length lst)) + collect (subseq lst i (min (+ i 3) (length lst))))) + (defun view (survey &optional results) "Generates the view to show the survey created." (check-type survey survey) @@ -109,14 +114,17 @@ (loop for (type data) on results by #'cddr unless (eq type :sus) do (progn (:h3 :class "py-1" (format nil "~a" type)) - (loop for row in data - do (:ul :class "list-group py-3" - (loop for data in row - for i from 0 - do (:li :class (if (zerop i) - "list-group-item active" - "list-group-item") - data))))))))))) + (:div :class "container" + (loop for row in (group-in-chunks data) + do (:div :class "row" + (loop for col in row + do (:ul :class "col-4 list-group py-3" + (loop for entry in col + for i from 0 + do (:li :class (if (zerop i) + "list-group-item active" + "list-group-item") + entry)))))))))))))) (defun extract-numbers (results) "Extract numbers from a questionnaire RESULTS list. Returns a list of integers."