# HG changeset patch # User David Demelier # Date 1674553908 -3600 # Node ID b0d1166de7d3707dfcc194a4898e591cd2411551 # Parent 3a5ecc40451a495aff445e685c145f2332f93fbb themes: improve status diff -r 3a5ecc40451a -r b0d1166de7d3 scid/page-index.c --- 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 diff -r 3a5ecc40451a -r b0d1166de7d3 themes/bulma/theme.js --- 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); }