WIP: mainpage list of repositories
[webgit] / src / actions.c
1 /*
2     cehtehs git web frontend
3
4   Copyright (C)
5     2007,               Christian Thaeter <ct@pipapo.org>
6
7   This program is free software; you can redistribute it and/or
8   modify it under the terms of the GNU General Public License as
9   published by the Free Software Foundation; either version 2 of the
10   License, or (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program; if not, write to the Free Software
19   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 #include "actions.h"
23
24 #include "cwa.h"
25
26 Html
27 ctgit_summary_link (struct ctgit_query* query, struct ctgit_repo_info* n)
28 {
29   return html (
30                html_tag ("a",
31                          html_attr ("href", html_fmt ("%s?repo=%s&action=summary",
32                                                       query->request->script_name,
33                                                       n->name)
34                                     )
35                          ),
36                n->name
37                );
38 }
39
40
41 static Html
42 ctgit_main_action (struct ctgit_query* query)
43 {
44   Html ret = html();
45
46   LLIST_FOREACH (&query->repos, node)
47     {
48       struct ctgit_repo_info* n = (struct ctgit_repo_info*)node;
49
50       //fprintf(stderr,"repo %s\n", n->name);
51
52       html_append (ret, html( ctgit_summary_link (query, n), html_nl()));
53     }
54
55
56   return html (ret, html_nl ());
57 }
58
59 static Html
60 ctgit_summary_action (struct ctgit_query* query)
61 {
62   return html("summary");
63 }
64
65 static Html
66 ctgit_log_action (struct ctgit_query* query)
67 {
68   return html("log");
69 }
70
71 static Html
72 ctgit_diff_action (struct ctgit_query* query)
73 {
74   return html("diff");
75 }
76
77 static Html
78 ctgit_object_action (struct ctgit_query* query)
79 {
80   return html("object");
81 }
82
83 static Html
84 ctgit_raw_action (struct ctgit_query* query)
85 {
86   return html("raw");
87 }
88
89 static Html
90 ctgit_tag_action (struct ctgit_query* query)
91 {
92   return html("tag");
93 }
94
95 static Html
96 ctgit_edit_action (struct ctgit_query* query)
97 {
98   return html("edit");
99 }
100
101 static Html
102 ctgit_commit_action (struct ctgit_query* query)
103 {
104   return html("commit");
105 }
106
107
108 Html
109 ctgit_action_dispatch (struct ctgit_query* query)
110 {
111 #define CTGIT_ACTION(name, _) {#name, ctgit_##name##_action},
112   struct action_table{
113     char* name;
114     Html (*cb)(struct ctgit_query* query);
115   } cmds[] = {CTGIT_ACTIONS {"", NULL}};
116 #undef CTGIT_ACTION
117
118   for (struct action_table* j = cmds; j->cb; ++j)
119     {
120       if (!strcmp (j->name, query->action))
121         return j->cb (query);
122     }
123   return html("error, no such action");
124 }
125
126