Mercurial > sci
annotate scid/theme.h @ 32:081e1c258e64
misc: update copyright years
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 04 Aug 2022 14:59:33 +0200 |
parents | 43333d18e4b8 |
children | 1d0ddf9e6efd |
rev | line source |
---|---|
30 | 1 /* |
2 * theme.h -- theme management | |
3 * | |
32
081e1c258e64
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
30
diff
changeset
|
4 * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr> |
30 | 5 * |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef SCID_THEME_H |
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define SCID_THEME_H |
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
30 | 22 /** |
23 * \file theme.h | |
24 * \brief Theme management | |
25 * | |
26 * Themes are written in Javascript and usually with a combination of | |
27 * [mustache][] files as well. The Javascript code is executed before rendering | |
28 * the page with a JSON document containing the data to generate. | |
29 * | |
30 * This has been designed to address the issue that many web frameworks require | |
31 * different kind of HTML entities to generate the view and as such, the scid | |
32 * application can not generate those HTML tags. | |
33 * | |
34 * This module uses a global Javascript context to perform rendering, you must | |
35 * call theme_open before doing anything else. Once done, use theme_finish to | |
36 * cleanup resources. | |
37 */ | |
38 | |
29
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
39 #include <jansson.h> |
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
40 |
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
41 #include "pageutil.h" |
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
42 |
30 | 43 /** |
44 * Open the theme specified by directory path. | |
45 * | |
46 * \pre directory != NULL | |
47 * \param directory path to the theme directory (absolute path is recommended). | |
48 */ | |
49 void | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 theme_open(const char *directory); |
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
30 | 52 /** |
53 * Return the path to the filename relative to the theme directory. | |
54 * | |
55 * \pre filename != NULL | |
56 * \param filename the filename to append | |
57 * \return the full path | |
58 * \note This function return a thread-local static variable. | |
59 */ | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 const char * |
30 | 61 theme_path(const char *filename); |
29
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
62 |
30 | 63 /** |
64 * Render the index page. | |
65 * | |
66 * The document requires the following properties: | |
67 * | |
68 * ``` | |
69 * { | |
70 * "projects: [ | |
71 * { | |
72 * "name": "project name", | |
73 * "desc": "project short description", | |
74 * "url": "project URL or homepage", | |
75 * "jobs": [ | |
76 * { | |
77 * "job": job-id, | |
78 * "tag": "job tag / revision", | |
79 * "status": "failed / success" // failed if at least one has failed | |
80 * } | |
81 * ] | |
82 * "n-failed": number of failed jobs | |
83 * "n-succes": number of successful jobs | |
84 * } | |
85 * ] | |
86 * } | |
87 * ``` | |
88 * | |
89 * \pre doc != NULL | |
90 * \param doc the page document | |
91 * \return a newly allocated rendered string | |
92 * \note You must free the return value | |
93 */ | |
94 [[nodiscard]] | |
29
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
95 char * |
30 | 96 theme_page_index(const json_t *doc); |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
30 | 98 /** |
99 * Render the status page (for error code). | |
100 * | |
101 * The document requires the following properties: | |
102 * | |
103 * ``` | |
104 * { | |
105 * "status": number // Exemple: 400, 401 | |
106 * } | |
107 * ``` | |
108 * | |
109 * \param status the status code | |
110 * \return a newly allocated rendered string | |
111 * \note You must free the return value | |
112 */ | |
113 [[nodiscard]] | |
114 char * | |
115 theme_page_status(enum khttp status); | |
116 | |
117 /** | |
118 * Cleanup theme resources. | |
119 */ | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 void |
30 | 121 theme_finish(void); |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 #endif /* !SCID_THEME_H */ |