changeset 73:b0d1166de7d3

themes: improve status
author David Demelier <markand@malikania.fr>
date Tue, 24 Jan 2023 10:51:48 +0100
parents 3a5ecc40451a
children 38bdcfb3d4f7
files scid/page-index.c themes/bulma/theme.js
diffstat 2 files changed, 56 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/scid/page-index.c	Tue Jan 24 10:22:55 2023 +0100
+++ b/scid/page-index.c	Tue Jan 24 10:51:48 2023 +0100
@@ -28,7 +28,8 @@
 static void
 set_job_status(json_t *project, json_t *job, json_t *jobresults, size_t *ns, size_t *nf)
 {
-	json_t *iter, *status;
+	const char *status;
+	json_t *iter;
 	int exitcode, sigcode;
 	size_t i;
 
@@ -42,8 +43,21 @@
 			(*nf)++;
 	}
 
-	/* At least one failed, set status to false. */
-	json_object_set_new(job, "status", json_boolean(nf));
+	/*
+	 * We have three possibilities:
+	 *
+	 * - unknown: no result performed,
+	 * - success: all results were successful,
+	 * - failed: at least one has failed.
+	 */
+	if (*nf == 0 && *ns == 0)
+		status = "unknown";
+	else if (*nf > 0)
+		status = "failed";
+	else
+		status = "success";
+
+	json_object_set_new(job, "status", json_string(status));
 }
 
 static void
--- a/themes/bulma/theme.js	Tue Jan 24 10:22:55 2023 +0100
+++ b/themes/bulma/theme.js	Tue Jan 24 10:51:48 2023 +0100
@@ -36,33 +36,40 @@
 	return job.exitcode !== 0 || job.sigcode !== 0;
 }
 
-function addStatusClasses(jobs)
-{
-	for (var j = 0; j < jobs.length; ++j) {
-		if (isFailed(jobs[j])) {
-			jobs[j].color = "is-danger";
-			jobs[j].textcolor = "has-text-danger";
-			jobs[j].status = "failed";
-		} else {
-			jobs[j].color = "is-success";
-			jobs[j].textcolor = "has-text-success";
-			jobs[j].status = "success";
-		}
-	}
-}
-
 function onPageIndex(rdr, data)
 {
 	/*
 	 * Add is-danger/is-success for every job depending on their success
 	 * status, this is required to show the appropriate tag.
 	 */
-	for (var i = 0; i < data.projects.length; ++i) {
-		addStatusClasses(data.projects[i].jobs);
+	for (var p = 0; p < data.projects.length; ++p) {
+		var jobs = data.projects[p].jobs;
+
+		for (var j = 0; j < jobs.length; ++j) {
+			switch (jobs[j].status) {
+			case "unknown":
+				jobs[j].color = "is-warning";
+				jobs[j].textcolor = "has-text-warning";
+				jobs[j].status = "pending";
+				break;
+			case "success":
+				jobs[j].color = "is-success";
+				jobs[j].textcolor = "has-text-success";
+				jobs[j].status = "success";
+				break;
+			case "failed":
+				jobs[j].color = "is-danger";
+				jobs[j].textcolor = "has-text-danger";
+				jobs[j].status = "failed";
+				break;
+			default:
+				break;
+			}
+		}
 
 		/* Hide card jobs table if empty. */
-		if (data.projects[i].jobs.length === 0)
-			data.projects[i].hidden = "hidden";
+		if (jobs.length === 0)
+			data.projects[p].hidden = "hidden";
 	}
 
 	render(rdr, "index.mustache", "sci -- index page", data);
@@ -70,10 +77,19 @@
 
 function onPageJobresults(rdr, data)
 {
-	/*
-	 * Add a status on failed/successful tasks.
-	 */
-	addStatusClasses(data.jobresults);
+	/* Add a status on failed/successful tasks. */
+	for (var i = 0; i < data.jobresults.length; ++i) {
+		var res = data.jobresults[i];
+
+		if (res.exitcode === 0 && res.sigcode === 0) {
+			res.textcolor = "has-text-success";
+			res.status = "success";
+		} else {
+			res.textcolor = "has-text-danger";
+			res.status = "failed";
+		}
+	}
+
 	render(rdr, "jobresults.mustache", "sci -- job results", data);
 }