History

Merge branch 'lh/about'

* lh/about: Add 'about site' and 'about repo' pages Prepare for 'about site' page / add 'root-readme' option to cgitrc Make it possible for a single cmd to work both with and without a repo Re-enable 'index-info' and add support for 'root-desc' in cgitrc Move included header-file out of repolist table Prepare for 'about repo' page

Lars Hjemli committed 18 years ago

Commit 905dbae2 parents d188ed4 71adba18 files · +100 −16Browse files

Unified · Split

8 files
  1. cgit.c +15 −1
  2. cgit.h +2 −0
  3. cmd.c +9 −0
  4. ui-repolist.c +9 −6
  5. ui-repolist.h +1 −0
  6. ui-shared.c +54 −4
  7. ui-summary.c +9 −5
  8. ui-summary.h +1 −0
cgit.c+15−1
@@ -19,6 +19,10 @@ void config_cb(const char *name, const char *value) · 18 unmodified lines
1919 {
2020 if (!strcmp(name, "root-title"))
2121 ctx.cfg.root_title = xstrdup(value);
22+ else if (!strcmp(name, "root-desc"))
23+ ctx.cfg.root_desc = xstrdup(value);
24+ else if (!strcmp(name, "root-readme"))
25+ ctx.cfg.root_readme = xstrdup(value);
2226 else if (!strcmp(name, "css"))
2327 ctx.cfg.css = xstrdup(value);
2428 else if (!strcmp(name, "logo"))
@@ -159,6 +163,7 @@ static void prepare_context(struct cgit_context *ctx) · 134 unmodified lines
159163 ctx->cfg.renamelimit = -1;
160164 ctx->cfg.robots = "index, nofollow";
161165 ctx->cfg.root_title = "Git repository browser";
166+ ctx->cfg.root_desc = "a fast webinterface for the git dscm";
162167 ctx->cfg.script_name = CGIT_SCRIPT_NAME;
163168 ctx->page.mimetype = "text/html";
164169 ctx->page.charset = PAGE_ENCODING;
@@ -304,7 +309,16 @@ static void process_request(struct cgit_context *ctx) · 139 unmodified lines
304309 return;
305310 }
306311
307− if (cmd->want_repo && prepare_repo_cmd(ctx))
312+ if (cmd->want_repo && !ctx->repo) {
313+ cgit_print_http_headers(ctx);
314+ cgit_print_docstart(ctx);
315+ cgit_print_pageheader(ctx);
316+ cgit_print_error(fmt("No repository selected"));
317+ cgit_print_docend();
318+ return;
319+ }
320+
321+ if (ctx->repo && prepare_repo_cmd(ctx))
308322 return;
309323
310324 if (cmd->want_layout) {
cgit.h+2−0
@@ -132,6 +132,8 @@ struct cgit_config { · 131 unmodified lines
132132 char *repo_group;
133133 char *robots;
134134 char *root_title;
135+ char *root_desc;
136+ char *root_readme;
135137 char *script_name;
136138 char *virtual_root;
137139 int cache_dynamic_ttl;
cmd.c+9−0
@@ -20,6 +20,14 @@ · 19 unmodified lines
2020 #include "ui-tag.h"
2121 #include "ui-tree.h"
2222
23+static void about_fn(struct cgit_context *ctx)
24+{
25+ if (ctx->repo)
26+ cgit_print_repo_readme();
27+ else
28+ cgit_print_site_readme();
29+}
30+
2331 static void blob_fn(struct cgit_context *ctx)
2432 {
2533 cgit_print_blob(ctx->qry.sha1, ctx->qry.path);
@@ -84,6 +92,7 @@ static void tree_fn(struct cgit_context *ctx) · 58 unmodified lines
8492 struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
8593 {
8694 static struct cgit_cmd cmds[] = {
95+ def_cmd(about, 0, 1),
8796 def_cmd(blob, 1, 0),
8897 def_cmd(commit, 1, 1),
8998 def_cmd(diff, 1, 1),
ui-repolist.c+9−6
@@ -61,12 +61,6 @@ int is_match(struct cgit_repo *repo) · 60 unmodified lines
6161
6262 void print_header(int columns)
6363 {
64− if (ctx.cfg.index_header) {
65− htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>",
66− columns);
67− html_include(ctx.cfg.index_header);
68− html("</td></tr>");
69− }
7064 html("<tr class='nohover'>"
7165 "<th class='left'>Name</th>"
7266 "<th class='left'>Description</th>"
@@ -90,6 +84,9 @@ void cgit_print_repolist() · 17 unmodified lines
9084 cgit_print_docstart(&ctx);
9185 cgit_print_pageheader(&ctx);
9286
87+ if (ctx.cfg.index_header)
88+ html_include(ctx.cfg.index_header);
89+
9390 html("<table summary='repository list' class='list nowrap'>");
9491 for (i=0; i<cgit_repolist.count; i++) {
9592 ctx.repo = &cgit_repolist.repos[i];
@@ -139,3 +136,9 @@ void cgit_print_repolist() · 43 unmodified lines
139136 cgit_print_error("No repositories found");
140137 cgit_print_docend();
141138 }
139+
140+void cgit_print_site_readme()
141+{
142+ if (ctx.cfg.root_readme)
143+ html_include(ctx.cfg.root_readme);
144+}
ui-repolist.h+1−0
@@ -2,5 +2,6 @@ · 1 unmodified line
22 #define UI_REPOLIST_H
33
44 extern void cgit_print_repolist();
5+extern void cgit_print_site_readme();
56
67 #endif /* UI_REPOLIST_H */
ui-shared.c+54−4
@@ -114,6 +114,49 @@ char *cgit_currurl() · 113 unmodified lines
114114 return fmt("%s/", ctx.cfg.virtual_root);
115115 }
116116
117+static void site_url(char *page, char *search)
118+{
119+ char *delim = "?";
120+
121+ if (ctx.cfg.virtual_root) {
122+ html_attr(ctx.cfg.virtual_root);
123+ if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/')
124+ html("/");
125+ } else
126+ html(ctx.cfg.script_name);
127+
128+ if (page) {
129+ htmlf("?p=%s", page);
130+ delim = "&";
131+ }
132+ if (search) {
133+ html(delim);
134+ html("q=");
135+ html_attr(search);
136+ }
137+}
138+
139+static void site_link(char *page, char *name, char *title, char *class,
140+ char *search)
141+{
142+ html("<a");
143+ if (title) {
144+ html(" title='");
145+ html_attr(title);
146+ html("'");
147+ }
148+ if (class) {
149+ html(" class='");
150+ html_attr(class);
151+ html("'");
152+ }
153+ html(" href='");
154+ site_url(page, search);
155+ html("'>");
156+ html_txt(name);
157+ html("</a>");
158+}
159+
117160 static char *repolink(char *title, char *class, char *page, char *head,
118161 char *path)
119162 {
@@ -510,7 +553,10 @@ void cgit_print_pageheader(struct cgit_context *ctx) · 390 unmodified lines
510553 html_txt(ctx->repo->desc);
511554 } else {
512555 html(">");
513− html_txt("a fast webinterface for the git dscm");
556+ if (ctx->cfg.root_desc)
557+ html_txt(ctx->cfg.root_desc);
558+ else if (ctx->cfg.index_info)
559+ html_include(ctx->cfg.index_info);
514560 }
515561 html("</td></tr></table>\n");
516562
@@ -528,6 +574,10 @@ void cgit_print_pageheader(struct cgit_context *ctx) · 11 unmodified lines
528574 ctx->qry.head, ctx->qry.sha1);
529575 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
530576 ctx->qry.sha1, ctx->qry.sha2, NULL);
577+ if (ctx->repo->readme)
578+ reporevlink("about", "about", NULL,
579+ hc(cmd, "about"), ctx->qry.head, NULL,
580+ NULL);
531581 html("</td><td class='form'>");
532582 html("<form class='right' method='get' action='");
533583 if (ctx->cfg.virtual_root)
@@ -546,9 +596,9 @@ void cgit_print_pageheader(struct cgit_context *ctx) · 12 unmodified lines
546596 html("<input type='submit' value='search'/>\n");
547597 html("</form>\n");
548598 } else {
549− html("<a class='active' href='");
550− html_attr(cgit_rooturl());
551− html("'>index</a>\n");
599+ site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL);
600+ if (ctx->cfg.root_readme)
601+ site_link("about", "about", NULL, hc(cmd, "about"), NULL);
552602 html("</td><td class='form'>");
553603 html("<form method='get' action='");
554604 html_attr(cgit_rooturl());
ui-summary.c+9−5
@@ -13,11 +13,6 @@ · 12 unmodified lines
1313
1414 void cgit_print_summary()
1515 {
16− if (ctx.repo->readme) {
17− html("<div id='summary'>");
18− html_include(ctx.repo->readme);
19− html("</div>");
20− }
2116 html("<table summary='repository info' class='list nowrap'>");
2217 cgit_print_branches(ctx.cfg.summary_branches);
2318 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
@@ -29,3 +24,12 @@ void cgit_print_summary() · 5 unmodified lines
2924 }
3025 html("</table>");
3126 }
27+
28+void cgit_print_repo_readme()
29+{
30+ if (ctx.repo->readme) {
31+ html("<div id='summary'>");
32+ html_include(ctx.repo->readme);
33+ html("</div>");
34+ }
35+}
ui-summary.h+1−0
@@ -2,5 +2,6 @@ · 1 unmodified line
22 #define UI_SUMMARY_H
33
44 extern void cgit_print_summary();
5+extern void cgit_print_repo_readme();
56
67 #endif /* UI_SUMMARY_H */