]> gitweb.ps.run Git - ps-cgit/commitdiff
Merge branch 'lh/about'
authorLars Hjemli <hjemli@gmail.com>
Mon, 28 Apr 2008 23:13:08 +0000 (01:13 +0200)
committerLars Hjemli <hjemli@gmail.com>
Mon, 28 Apr 2008 23:13:08 +0000 (01:13 +0200)
* 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

cgit.c
cgit.h
cmd.c
ui-repolist.c
ui-repolist.h
ui-shared.c
ui-summary.c
ui-summary.h

diff --git a/cgit.c b/cgit.c
index 38b0ba5d0616d29f291a9017ec59cac5522cf4ff..a402758fab53bc2c099e7b803fa8deee68226250 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -19,6 +19,10 @@ void config_cb(const char *name, const char *value)
 {
        if (!strcmp(name, "root-title"))
                ctx.cfg.root_title = xstrdup(value);
+       else if (!strcmp(name, "root-desc"))
+               ctx.cfg.root_desc = xstrdup(value);
+       else if (!strcmp(name, "root-readme"))
+               ctx.cfg.root_readme = xstrdup(value);
        else if (!strcmp(name, "css"))
                ctx.cfg.css = xstrdup(value);
        else if (!strcmp(name, "logo"))
@@ -159,6 +163,7 @@ static void prepare_context(struct cgit_context *ctx)
        ctx->cfg.renamelimit = -1;
        ctx->cfg.robots = "index, nofollow";
        ctx->cfg.root_title = "Git repository browser";
+       ctx->cfg.root_desc = "a fast webinterface for the git dscm";
        ctx->cfg.script_name = CGIT_SCRIPT_NAME;
        ctx->page.mimetype = "text/html";
        ctx->page.charset = PAGE_ENCODING;
@@ -304,7 +309,16 @@ static void process_request(struct cgit_context *ctx)
                return;
        }
 
-       if (cmd->want_repo && prepare_repo_cmd(ctx))
+       if (cmd->want_repo && !ctx->repo) {
+               cgit_print_http_headers(ctx);
+               cgit_print_docstart(ctx);
+               cgit_print_pageheader(ctx);
+               cgit_print_error(fmt("No repository selected"));
+               cgit_print_docend();
+               return;
+       }
+
+       if (ctx->repo && prepare_repo_cmd(ctx))
                return;
 
        if (cmd->want_layout) {
diff --git a/cgit.h b/cgit.h
index a3b65354388018646a58e0b6a12a3c28282d4cf6..daebeff704f4df080b1a8085c0b8b0adebab826c 100644 (file)
--- a/cgit.h
+++ b/cgit.h
@@ -132,6 +132,8 @@ struct cgit_config {
        char *repo_group;
        char *robots;
        char *root_title;
+       char *root_desc;
+       char *root_readme;
        char *script_name;
        char *virtual_root;
        int cache_dynamic_ttl;
diff --git a/cmd.c b/cmd.c
index e0eacbe584a5e26120d7dde526a9552071042d91..6cc91e62b4ec557ff9e2e877442fd637a1557a78 100644 (file)
--- a/cmd.c
+++ b/cmd.c
 #include "ui-tag.h"
 #include "ui-tree.h"
 
+static void about_fn(struct cgit_context *ctx)
+{
+       if (ctx->repo)
+               cgit_print_repo_readme();
+       else
+               cgit_print_site_readme();
+}
+
 static void blob_fn(struct cgit_context *ctx)
 {
        cgit_print_blob(ctx->qry.sha1, ctx->qry.path);
@@ -84,6 +92,7 @@ static void tree_fn(struct cgit_context *ctx)
 struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
 {
        static struct cgit_cmd cmds[] = {
+               def_cmd(about, 0, 1),
                def_cmd(blob, 1, 0),
                def_cmd(commit, 1, 1),
                def_cmd(diff, 1, 1),
index 98009c019b497d4c4b5d4ec58dc5186fa03cac5c..3f78e28a8677773cb221deb8358417475bca8c56 100644 (file)
@@ -61,12 +61,6 @@ int is_match(struct cgit_repo *repo)
 
 void print_header(int columns)
 {
-       if (ctx.cfg.index_header) {
-               htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>",
-                     columns);
-               html_include(ctx.cfg.index_header);
-               html("</td></tr>");
-       }
        html("<tr class='nohover'>"
             "<th class='left'>Name</th>"
             "<th class='left'>Description</th>"
@@ -90,6 +84,9 @@ void cgit_print_repolist()
        cgit_print_docstart(&ctx);
        cgit_print_pageheader(&ctx);
 
+       if (ctx.cfg.index_header)
+               html_include(ctx.cfg.index_header);
+
        html("<table summary='repository list' class='list nowrap'>");
        for (i=0; i<cgit_repolist.count; i++) {
                ctx.repo = &cgit_repolist.repos[i];
@@ -139,3 +136,9 @@ void cgit_print_repolist()
                cgit_print_error("No repositories found");
        cgit_print_docend();
 }
+
+void cgit_print_site_readme()
+{
+       if (ctx.cfg.root_readme)
+               html_include(ctx.cfg.root_readme);
+}
index c23e5d2f159336989c6a316a2e0948d4b9d6b4ed..5b1e5427ef2b364348531a398497983c7ab6f0f3 100644 (file)
@@ -2,5 +2,6 @@
 #define UI_REPOLIST_H
 
 extern void cgit_print_repolist();
+extern void cgit_print_site_readme();
 
 #endif /* UI_REPOLIST_H */
index 8a804c23b8997b4e75b328746027d411c43d63d1..d08ede90b8125a63d1b553c8c78b02e18dd133e8 100644 (file)
@@ -114,6 +114,49 @@ char *cgit_currurl()
                return fmt("%s/", ctx.cfg.virtual_root);
 }
 
+static void site_url(char *page, char *search)
+{
+       char *delim = "?";
+
+       if (ctx.cfg.virtual_root) {
+               html_attr(ctx.cfg.virtual_root);
+               if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/')
+                       html("/");
+       } else
+               html(ctx.cfg.script_name);
+
+       if (page) {
+               htmlf("?p=%s", page);
+               delim = "&";
+       }
+       if (search) {
+               html(delim);
+               html("q=");
+               html_attr(search);
+       }
+}
+
+static void site_link(char *page, char *name, char *title, char *class,
+                      char *search)
+{
+       html("<a");
+       if (title) {
+               html(" title='");
+               html_attr(title);
+               html("'");
+       }
+       if (class) {
+               html(" class='");
+               html_attr(class);
+               html("'");
+       }
+       html(" href='");
+       site_url(page, search);
+       html("'>");
+       html_txt(name);
+       html("</a>");
+}
+
 static char *repolink(char *title, char *class, char *page, char *head,
                      char *path)
 {
@@ -510,7 +553,10 @@ void cgit_print_pageheader(struct cgit_context *ctx)
                html_txt(ctx->repo->desc);
        } else {
                html(">");
-               html_txt("a fast webinterface for the git dscm");
+               if (ctx->cfg.root_desc)
+                       html_txt(ctx->cfg.root_desc);
+               else if (ctx->cfg.index_info)
+                       html_include(ctx->cfg.index_info);
        }
        html("</td></tr></table>\n");
 
@@ -528,6 +574,10 @@ void cgit_print_pageheader(struct cgit_context *ctx)
                                 ctx->qry.head, ctx->qry.sha1);
                cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
                               ctx->qry.sha1, ctx->qry.sha2, NULL);
+               if (ctx->repo->readme)
+                       reporevlink("about", "about", NULL,
+                                   hc(cmd, "about"), ctx->qry.head, NULL,
+                                   NULL);
                html("</td><td class='form'>");
                html("<form class='right' method='get' action='");
                if (ctx->cfg.virtual_root)
@@ -546,9 +596,9 @@ void cgit_print_pageheader(struct cgit_context *ctx)
                html("<input type='submit' value='search'/>\n");
                html("</form>\n");
        } else {
-               html("<a class='active' href='");
-               html_attr(cgit_rooturl());
-               html("'>index</a>\n");
+               site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL);
+               if (ctx->cfg.root_readme)
+                       site_link("about", "about", NULL, hc(cmd, "about"), NULL);
                html("</td><td class='form'>");
                html("<form method='get' action='");
                html_attr(cgit_rooturl());
index 318148a66b741113a0133c232f84f6cc2494dff9..ad0b4a7b251a448201b6d509e6949fe68c1647c8 100644 (file)
 
 void cgit_print_summary()
 {
-       if (ctx.repo->readme) {
-               html("<div id='summary'>");
-               html_include(ctx.repo->readme);
-               html("</div>");
-       }
        html("<table summary='repository info' class='list nowrap'>");
        cgit_print_branches(ctx.cfg.summary_branches);
        html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
@@ -29,3 +24,12 @@ void cgit_print_summary()
        }
        html("</table>");
 }
+
+void cgit_print_repo_readme()
+{
+       if (ctx.repo->readme) {
+               html("<div id='summary'>");
+               html_include(ctx.repo->readme);
+               html("</div>");
+       }
+}
index 37aedd24554a73faf55fd6c358c95221bef1bfa5..3e130394915d6b7d77785a311fab4f528bd0ed9b 100644 (file)
@@ -2,5 +2,6 @@
 #define UI_SUMMARY_H
 
 extern void cgit_print_summary();
+extern void cgit_print_repo_readme();
 
 #endif /* UI_SUMMARY_H */