css: change to be a list

Without changing the default behaviour of including
/cgit.css if nothing declared, allow the "css" config
to be given multiple times listing one or more
alternative URL paths to be included in the document
head area.

Signed-off-by: Andy Green <andy@warmcat.com>
Signed-off-by: Christian Hesse <mail@eworm.de>
This commit is contained in:
Andy Green 2018-07-03 11:33:59 +08:00 committed by Jason A. Donenfeld
parent 91f25909b9
commit 093ac96970
4 changed files with 22 additions and 7 deletions

3
cgit.c
View File

@ -142,7 +142,7 @@ static void config_cb(const char *name, const char *value)
else if (!strcmp(name, "root-readme")) else if (!strcmp(name, "root-readme"))
ctx.cfg.root_readme = xstrdup(value); ctx.cfg.root_readme = xstrdup(value);
else if (!strcmp(name, "css")) else if (!strcmp(name, "css"))
ctx.cfg.css = xstrdup(value); string_list_append(&ctx.cfg.css, xstrdup(value));
else if (!strcmp(name, "favicon")) else if (!strcmp(name, "favicon"))
ctx.cfg.favicon = xstrdup(value); ctx.cfg.favicon = xstrdup(value);
else if (!strcmp(name, "footer")) else if (!strcmp(name, "footer"))
@ -378,7 +378,6 @@ static void prepare_context(void)
ctx.cfg.case_sensitive_sort = 1; ctx.cfg.case_sensitive_sort = 1;
ctx.cfg.branch_sort = 0; ctx.cfg.branch_sort = 0;
ctx.cfg.commit_sort = 0; ctx.cfg.commit_sort = 0;
ctx.cfg.css = "/cgit.css";
ctx.cfg.logo = "/cgit.png"; ctx.cfg.logo = "/cgit.png";
ctx.cfg.favicon = "/favicon.ico"; ctx.cfg.favicon = "/favicon.ico";
ctx.cfg.local_time = 0; ctx.cfg.local_time = 0;

2
cgit.h
View File

@ -195,7 +195,6 @@ struct cgit_config {
char *cache_root; char *cache_root;
char *clone_prefix; char *clone_prefix;
char *clone_url; char *clone_url;
char *css;
char *favicon; char *favicon;
char *footer; char *footer;
char *head_include; char *head_include;
@ -206,6 +205,7 @@ struct cgit_config {
char *module_link; char *module_link;
char *project_list; char *project_list;
struct string_list readme; struct string_list readme;
struct string_list css;
char *robots; char *robots;
char *root_title; char *root_title;
char *root_desc; char *root_desc;

View File

@ -126,7 +126,8 @@ commit-sort::
css:: css::
Url which specifies the css document to include in all cgit pages. Url which specifies the css document to include in all cgit pages.
Default value: "/cgit.css". Default value: "/cgit.css". May be given multiple times, each
css URL path is added in the head section of the document in turn.
email-filter:: email-filter::
Specifies a command which will be invoked to format names and email Specifies a command which will be invoked to format names and email

View File

@ -768,6 +768,18 @@ static void print_rel_vcs_link(const char *url)
html(" Git repository'/>\n"); html(" Git repository'/>\n");
} }
static int emit_css_link(struct string_list_item *s, void *arg)
{
html("<link rel='stylesheet' type='text/css' href='");
if (s)
html_attr(s->string);
else
html_attr((const char *)arg);
html("'/>\n");
return 0;
}
void cgit_print_docstart(void) void cgit_print_docstart(void)
{ {
char *host = cgit_hosturl(); char *host = cgit_hosturl();
@ -787,9 +799,12 @@ void cgit_print_docstart(void)
htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version); htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version);
if (ctx.cfg.robots && *ctx.cfg.robots) if (ctx.cfg.robots && *ctx.cfg.robots)
htmlf("<meta name='robots' content='%s'/>\n", ctx.cfg.robots); htmlf("<meta name='robots' content='%s'/>\n", ctx.cfg.robots);
html("<link rel='stylesheet' type='text/css' href='");
html_attr(ctx.cfg.css); if (ctx.cfg.css.items)
html("'/>\n"); for_each_string_list(&ctx.cfg.css, emit_css_link, NULL);
else
emit_css_link(NULL, "/cgit.css");
if (ctx.cfg.favicon) { if (ctx.cfg.favicon) {
html("<link rel='shortcut icon' href='"); html("<link rel='shortcut icon' href='");
html_attr(ctx.cfg.favicon); html_attr(ctx.cfg.favicon);