Sketch menu contents
[webgit] / src / object_blob.c
1 /*
2     cehtehs git web frontend
3
4   Copyright (C)
5     2007, 2008,         Christian Thaeter <ct@pipapo.org>
6
7   This program is free software: you can redistribute it and/or modify
8   it under the terms of the GNU Affero General Public License as published by
9   the Free Software Foundation, either version 3 of the License, or
10   (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 Affero General Public License for more details.
16
17   You should have received a copy of the GNU Affero General Public License
18   along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "object.h"
22
23 /*
24   Display blobs
25 */
26 static Html
27 webgit_object_blob_menu_action (struct webgit_repo_info* repo, unsigned char* sha1, void* buf, unsigned long size)
28 {
29   (void) repo;
30   (void) sha1;
31   (void) buf;
32   (void) size;
33   return html (html_tag ("div"),
34                "Project or webgit logo<br />",
35                "diff against.. <br />",
36                "log <br />",
37                "history <br />",
38                "blame <br />",
39                "Back to tree <br />",
40                "link to project summary <br />",
41                "link to main page <br />"
42                );
43 }
44
45 static Html
46 webgit_object_blob_content_action (struct webgit_repo_info* repo, unsigned char* sha1, void* buf, unsigned long size)
47 {
48   (void) sha1;
49
50   if (!memchr(buf, 0, size>8192 ? 8192 : size))
51     {
52       return html (html_tag ("pre"), html_strndup (buf, size));
53     }
54   else
55     {
56       struct webgit_query* query = repo->query;
57       const char* mimetype = webgit_mimetype (query->path);
58
59       Html ret;
60
61       if (mimetype && !strncmp(mimetype, "image/", 6))
62         {
63           /* inline image */
64           ret = html (
65                       html_tag ("img",
66                                 html_attr ("src",
67                                            html_fmt ("%s?repo=%s&action=raw&object=%s&path=%s",
68                                                      query->request->script_name,
69                                                      query->repo, query->object, query->path)
70                                            ),
71                                 html_attr ("alt", query->path ? query->path : query->object)
72                                 )
73                       );
74         }
75       else
76         {
77           /* link to raw data */
78           ret = html ("binary blob");
79         }
80       free ((char*)mimetype);
81
82       return ret;
83     }
84 }
85
86
87 Html
88 webgit_object_blob_action (struct webgit_repo_info* repo, unsigned char* sha1)
89 {
90   void* buf;
91   unsigned long size;
92
93   buf = read_object_with_reference (sha1, "blob", &size, NULL);
94
95   return html(
96               html(html_tag("div", html_attr("id", "sub-menu")), webgit_object_blob_menu_action (repo, sha1, buf, size)), html_nl (),
97               html(html_tag("div", html_attr("id", "content")), webgit_object_blob_content_action (repo, sha1, buf, size)), html_nl ()
98               );
99 }
100
101 /*
102 //      Local Variables:
103 //      mode: C
104 //      c-file-style: "gnu"
105 //      indent-tabs-mode: nil
106 //      End:
107 */