Mercurial > sci
annotate scid/theme.h @ 37:62aefd02ac59
make: remove config.mk
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 07 Aug 2022 08:41:06 +0200 |
parents | 1d0ddf9e6efd |
children | 752bb1cd2dd8 |
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. | |
33
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
32
diff
changeset
|
37 * |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
32
diff
changeset
|
38 * This module logs message with tag `theme`. |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
32
diff
changeset
|
39 * |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
32
diff
changeset
|
40 * [mustache]: https://mustache.github.io/ |
30 | 41 */ |
42 | |
29
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
43 #include <jansson.h> |
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
44 |
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
45 #include "pageutil.h" |
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
46 |
30 | 47 /** |
48 * Open the theme specified by directory path. | |
49 * | |
50 * \pre directory != NULL | |
51 * \param directory path to the theme directory (absolute path is recommended). | |
52 */ | |
53 void | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 theme_open(const char *directory); |
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
30 | 56 /** |
57 * Return the path to the filename relative to the theme directory. | |
58 * | |
59 * \pre filename != NULL | |
60 * \param filename the filename to append | |
61 * \return the full path | |
62 * \note This function return a thread-local static variable. | |
63 */ | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 const char * |
30 | 65 theme_path(const char *filename); |
29
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
66 |
30 | 67 /** |
68 * Render the index page. | |
69 * | |
70 * The document requires the following properties: | |
71 * | |
72 * ``` | |
73 * { | |
74 * "projects: [ | |
75 * { | |
76 * "name": "project name", | |
77 * "desc": "project short description", | |
78 * "url": "project URL or homepage", | |
79 * "jobs": [ | |
80 * { | |
81 * "job": job-id, | |
82 * "tag": "job tag / revision", | |
83 * "status": "failed / success" // failed if at least one has failed | |
84 * } | |
85 * ] | |
86 * "n-failed": number of failed jobs | |
87 * "n-succes": number of successful jobs | |
88 * } | |
89 * ] | |
90 * } | |
91 * ``` | |
92 * | |
93 * \pre doc != NULL | |
94 * \param doc the page document | |
95 * \return a newly allocated rendered string | |
96 * \note You must free the return value | |
97 */ | |
29
695637f1d8a7
scid: first index page in javascript
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
98 char * |
30 | 99 theme_page_index(const json_t *doc); |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
30 | 101 /** |
102 * Render the status page (for error code). | |
103 * | |
104 * The document requires the following properties: | |
105 * | |
106 * ``` | |
107 * { | |
108 * "status": number // Exemple: 400, 401 | |
109 * } | |
110 * ``` | |
111 * | |
112 * \param status the status code | |
113 * \return a newly allocated rendered string | |
114 * \note You must free the return value | |
115 */ | |
116 char * | |
117 theme_page_status(enum khttp status); | |
118 | |
119 /** | |
120 * Cleanup theme resources. | |
121 */ | |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 void |
30 | 123 theme_finish(void); |
28
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 |
4c16bb25e4f1
scid: implement themes in javascript
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 #endif /* !SCID_THEME_H */ |