summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.css25
-rw-r--r--cgit.h22
-rw-r--r--ui-commit.c4
-rw-r--r--ui-shared.c47
-rw-r--r--ui-summary.c4
5 files changed, 94 insertions, 8 deletions
diff --git a/cgit.css b/cgit.css
index 95c3e40..327eaba 100644
--- a/cgit.css
+++ b/cgit.css
@@ -388,3 +388,28 @@ td.toplevel-repo {
388table.list td.sublevel-repo { 388table.list td.sublevel-repo {
389 padding-left: 1.5em; 389 padding-left: 1.5em;
390} 390}
391
392span.age-mins {
393 font-weight: bold;
394 color: #080;
395}
396
397span.age-hours {
398 color: #080;
399}
400
401span.age-days {
402 color: #040;
403}
404
405span.age-weeks {
406 color: #444;
407}
408
409span.age-months {
410 color: #888;
411}
412
413span.age-years {
414 color: #bbb;
415}
diff --git a/cgit.h b/cgit.h
index 8927236..4da2d3d 100644
--- a/cgit.h
+++ b/cgit.h
@@ -29,6 +29,25 @@
29#define CMD_BLOB 6 29#define CMD_BLOB 6
30#define CMD_SNAPSHOT 7 30#define CMD_SNAPSHOT 7
31 31
32
33/*
34 * Dateformats used on misc. pages
35 */
36#define FMT_LONGDATE "%Y-%m-%d %H:%M:%S"
37#define FMT_SHORTDATE "%Y-%m-%d"
38
39
40/*
41 * Limits used for relative dates
42 */
43#define TM_MIN 60
44#define TM_HOUR (TM_MIN * 60)
45#define TM_DAY (TM_HOUR * 24)
46#define TM_WEEK (TM_DAY * 7)
47#define TM_YEAR (TM_DAY * 365)
48#define TM_MONTH (TM_YEAR / 12.0)
49
50
32typedef void (*configfn)(const char *name, const char *value); 51typedef void (*configfn)(const char *name, const char *value);
33typedef void (*filepair_fn)(struct diff_filepair *pair); 52typedef void (*filepair_fn)(struct diff_filepair *pair);
34typedef void (*linediff_fn)(char *line, int len); 53typedef void (*linediff_fn)(char *line, int len);
@@ -181,7 +200,8 @@ extern char *cgit_pageurl(const char *reponame, const char *pagename,
181 const char *query); 200 const char *query);
182 201
183extern void cgit_print_error(char *msg); 202extern void cgit_print_error(char *msg);
184extern void cgit_print_date(unsigned long secs); 203extern void cgit_print_date(time_t secs, char *format);
204extern void cgit_print_age(time_t t, time_t max_relative, char *format);
185extern void cgit_print_docstart(char *title, struct cacheitem *item); 205extern void cgit_print_docstart(char *title, struct cacheitem *item);
186extern void cgit_print_docend(); 206extern void cgit_print_docend();
187extern void cgit_print_pageheader(char *title, int show_search); 207extern void cgit_print_pageheader(char *title, int show_search);
diff --git a/ui-commit.c b/ui-commit.c
index ff1fad3..59eeb1d 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -172,14 +172,14 @@ void cgit_print_commit(const char *hex)
172 html(" "); 172 html(" ");
173 html_txt(info->author_email); 173 html_txt(info->author_email);
174 html("</td><td class='right'>"); 174 html("</td><td class='right'>");
175 cgit_print_date(info->author_date); 175 cgit_print_date(info->author_date, FMT_LONGDATE);
176 html("</td></tr>\n"); 176 html("</td></tr>\n");
177 html("<tr><th>committer</th><td>"); 177 html("<tr><th>committer</th><td>");
178 html_txt(info->committer); 178 html_txt(info->committer);
179 html(" "); 179 html(" ");
180 html_txt(info->committer_email); 180 html_txt(info->committer_email);
181 html("</td><td class='right'>"); 181 html("</td><td class='right'>");
182 cgit_print_date(info->committer_date); 182 cgit_print_date(info->committer_date, FMT_LONGDATE);
183 html("</td></tr>\n"); 183 html("</td></tr>\n");
184 html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='"); 184 html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='");
185 query = fmt("h=%s&id=%s", sha1_to_hex(commit->object.sha1), 185 query = fmt("h=%s&id=%s", sha1_to_hex(commit->object.sha1),
diff --git a/ui-shared.c b/ui-shared.c
index c7fbc5e..acc771b 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -88,16 +88,57 @@ char *cgit_currurl()
88} 88}
89 89
90 90
91void cgit_print_date(unsigned long secs) 91void cgit_print_date(time_t secs, char *format)
92{ 92{
93 char buf[32]; 93 char buf[64];
94 struct tm *time; 94 struct tm *time;
95 95
96 time = gmtime(&secs); 96 time = gmtime(&secs);
97 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time); 97 strftime(buf, sizeof(buf)-1, format, time);
98 html_txt(buf); 98 html_txt(buf);
99} 99}
100 100
101void cgit_print_age(time_t t, time_t max_relative, char *format)
102{
103 time_t now, secs;
104
105 time(&now);
106 secs = now - t;
107
108 if (secs > max_relative && max_relative >= 0) {
109 cgit_print_date(t, format);
110 return;
111 }
112
113 if (secs < TM_HOUR * 2) {
114 htmlf("<span class='age-mins'>%.0f min.</span>",
115 secs * 1.0 / TM_MIN);
116 return;
117 }
118 if (secs < TM_DAY * 2) {
119 htmlf("<span class='age-hours'>%.0f hours</span>",
120 secs * 1.0 / TM_HOUR);
121 return;
122 }
123 if (secs < TM_WEEK * 2) {
124 htmlf("<span class='age-days'>%.0f days</span>",
125 secs * 1.0 / TM_DAY);
126 return;
127 }
128 if (secs < TM_MONTH * 2) {
129 htmlf("<span class='age-weeks'>%.0f weeks</span>",
130 secs * 1.0 / TM_WEEK);
131 return;
132 }
133 if (secs < TM_YEAR * 2) {
134 htmlf("<span class='age-months'>%.0f months</span>",
135 secs * 1.0 / TM_MONTH);
136 return;
137 }
138 htmlf("<span class='age-years'>%.0f years</span>",
139 secs * 1.0 / TM_YEAR);
140}
141
101void cgit_print_docstart(char *title, struct cacheitem *item) 142void cgit_print_docstart(char *title, struct cacheitem *item)
102{ 143{
103 html("Content-Type: text/html; charset=utf-8\n"); 144 html("Content-Type: text/html; charset=utf-8\n");
diff --git a/ui-summary.c b/ui-summary.c
index e7158cc..20394de 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -28,7 +28,7 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
28 html_txt(buf); 28 html_txt(buf);
29 html_link_close(); 29 html_link_close();
30 html("</td><td>"); 30 html("</td><td>");
31 cgit_print_date(commit->date); 31 cgit_print_date(commit->date, FMT_LONGDATE);
32 html("</td><td>"); 32 html("</td><td>");
33 html_txt(info->author); 33 html_txt(info->author);
34 html("</td><td>"); 34 html("</td><td>");
@@ -108,7 +108,7 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,
108 html_link_close(); 108 html_link_close();
109 html("</td><td>"); 109 html("</td><td>");
110 if (info->tagger_date > 0) 110 if (info->tagger_date > 0)
111 cgit_print_date(info->tagger_date); 111 cgit_print_date(info->tagger_date, FMT_LONGDATE);
112 html("</td><td>"); 112 html("</td><td>");
113 if (info->tagger) 113 if (info->tagger)
114 html(info->tagger); 114 html(info->tagger);