summaryrefslogtreecommitdiffabout
path: root/ui-shared.c
authorLars Hjemli <hjemli@gmail.com>2008-08-06 09:07:13 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-08-06 09:21:30 (UTC)
commit65b7b876aaaf50fc15060533359d6561f4f1819a (patch) (unidiff)
treec5cfe73456cf31afb13bcb12c5331fa711f89d71 /ui-shared.c
parente5da4bca54574522b28f88cab0dc8ebad9e35a73 (diff)
downloadcgit-65b7b876aaaf50fc15060533359d6561f4f1819a.zip
cgit-65b7b876aaaf50fc15060533359d6561f4f1819a.tar.gz
cgit-65b7b876aaaf50fc15060533359d6561f4f1819a.tar.bz2
ui-tree: link to plain view instead of blob view
The urls for plain view makes it possible to download blobs without knowing their SHA1, but the function needs to be promoted and the link from tree view seems like a perfect fit. PS: Although hidden, the blob view still is nice for direct blob access so there's no point in removing it. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'ui-shared.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-shared.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 4408969..a2e0dd2 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -118,256 +118,262 @@ static void site_url(char *page, char *search, int ofs)
118{ 118{
119 char *delim = "?"; 119 char *delim = "?";
120 120
121 if (ctx.cfg.virtual_root) { 121 if (ctx.cfg.virtual_root) {
122 html_attr(ctx.cfg.virtual_root); 122 html_attr(ctx.cfg.virtual_root);
123 if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/') 123 if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/')
124 html("/"); 124 html("/");
125 } else 125 } else
126 html(ctx.cfg.script_name); 126 html(ctx.cfg.script_name);
127 127
128 if (page) { 128 if (page) {
129 htmlf("?p=%s", page); 129 htmlf("?p=%s", page);
130 delim = "&"; 130 delim = "&";
131 } 131 }
132 if (search) { 132 if (search) {
133 html(delim); 133 html(delim);
134 html("q="); 134 html("q=");
135 html_attr(search); 135 html_attr(search);
136 delim = "&"; 136 delim = "&";
137 } 137 }
138 if (ofs) { 138 if (ofs) {
139 html(delim); 139 html(delim);
140 htmlf("ofs=%d", ofs); 140 htmlf("ofs=%d", ofs);
141 } 141 }
142} 142}
143 143
144static void site_link(char *page, char *name, char *title, char *class, 144static void site_link(char *page, char *name, char *title, char *class,
145 char *search, int ofs) 145 char *search, int ofs)
146{ 146{
147 html("<a"); 147 html("<a");
148 if (title) { 148 if (title) {
149 html(" title='"); 149 html(" title='");
150 html_attr(title); 150 html_attr(title);
151 html("'"); 151 html("'");
152 } 152 }
153 if (class) { 153 if (class) {
154 html(" class='"); 154 html(" class='");
155 html_attr(class); 155 html_attr(class);
156 html("'"); 156 html("'");
157 } 157 }
158 html(" href='"); 158 html(" href='");
159 site_url(page, search, ofs); 159 site_url(page, search, ofs);
160 html("'>"); 160 html("'>");
161 html_txt(name); 161 html_txt(name);
162 html("</a>"); 162 html("</a>");
163} 163}
164 164
165void cgit_index_link(char *name, char *title, char *class, char *pattern, 165void cgit_index_link(char *name, char *title, char *class, char *pattern,
166 int ofs) 166 int ofs)
167{ 167{
168 site_link(NULL, name, title, class, pattern, ofs); 168 site_link(NULL, name, title, class, pattern, ofs);
169} 169}
170 170
171static char *repolink(char *title, char *class, char *page, char *head, 171static char *repolink(char *title, char *class, char *page, char *head,
172 char *path) 172 char *path)
173{ 173{
174 char *delim = "?"; 174 char *delim = "?";
175 175
176 html("<a"); 176 html("<a");
177 if (title) { 177 if (title) {
178 html(" title='"); 178 html(" title='");
179 html_attr(title); 179 html_attr(title);
180 html("'"); 180 html("'");
181 } 181 }
182 if (class) { 182 if (class) {
183 html(" class='"); 183 html(" class='");
184 html_attr(class); 184 html_attr(class);
185 html("'"); 185 html("'");
186 } 186 }
187 html(" href='"); 187 html(" href='");
188 if (ctx.cfg.virtual_root) { 188 if (ctx.cfg.virtual_root) {
189 html_attr(ctx.cfg.virtual_root); 189 html_attr(ctx.cfg.virtual_root);
190 if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/') 190 if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/')
191 html("/"); 191 html("/");
192 html_attr(ctx.repo->url); 192 html_attr(ctx.repo->url);
193 if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/') 193 if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/')
194 html("/"); 194 html("/");
195 if (page) { 195 if (page) {
196 html(page); 196 html(page);
197 html("/"); 197 html("/");
198 if (path) 198 if (path)
199 html_attr(path); 199 html_attr(path);
200 } 200 }
201 } else { 201 } else {
202 html(ctx.cfg.script_name); 202 html(ctx.cfg.script_name);
203 html("?url="); 203 html("?url=");
204 html_attr(ctx.repo->url); 204 html_attr(ctx.repo->url);
205 if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/') 205 if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/')
206 html("/"); 206 html("/");
207 if (page) { 207 if (page) {
208 html(page); 208 html(page);
209 html("/"); 209 html("/");
210 if (path) 210 if (path)
211 html_attr(path); 211 html_attr(path);
212 } 212 }
213 delim = "&amp;"; 213 delim = "&amp;";
214 } 214 }
215 if (head && strcmp(head, ctx.repo->defbranch)) { 215 if (head && strcmp(head, ctx.repo->defbranch)) {
216 html(delim); 216 html(delim);
217 html("h="); 217 html("h=");
218 html_attr(head); 218 html_attr(head);
219 delim = "&amp;"; 219 delim = "&amp;";
220 } 220 }
221 return fmt("%s", delim); 221 return fmt("%s", delim);
222} 222}
223 223
224static void reporevlink(char *page, char *name, char *title, char *class, 224static void reporevlink(char *page, char *name, char *title, char *class,
225 char *head, char *rev, char *path) 225 char *head, char *rev, char *path)
226{ 226{
227 char *delim; 227 char *delim;
228 228
229 delim = repolink(title, class, page, head, path); 229 delim = repolink(title, class, page, head, path);
230 if (rev && strcmp(rev, ctx.qry.head)) { 230 if (rev && strcmp(rev, ctx.qry.head)) {
231 html(delim); 231 html(delim);
232 html("id="); 232 html("id=");
233 html_attr(rev); 233 html_attr(rev);
234 } 234 }
235 html("'>"); 235 html("'>");
236 html_txt(name); 236 html_txt(name);
237 html("</a>"); 237 html("</a>");
238} 238}
239 239
240void cgit_tree_link(char *name, char *title, char *class, char *head, 240void cgit_tree_link(char *name, char *title, char *class, char *head,
241 char *rev, char *path) 241 char *rev, char *path)
242{ 242{
243 reporevlink("tree", name, title, class, head, rev, path); 243 reporevlink("tree", name, title, class, head, rev, path);
244} 244}
245 245
246void cgit_plain_link(char *name, char *title, char *class, char *head,
247 char *rev, char *path)
248{
249 reporevlink("plain", name, title, class, head, rev, path);
250}
251
246void cgit_log_link(char *name, char *title, char *class, char *head, 252void cgit_log_link(char *name, char *title, char *class, char *head,
247 char *rev, char *path, int ofs, char *grep, char *pattern) 253 char *rev, char *path, int ofs, char *grep, char *pattern)
248{ 254{
249 char *delim; 255 char *delim;
250 256
251 delim = repolink(title, class, "log", head, path); 257 delim = repolink(title, class, "log", head, path);
252 if (rev && strcmp(rev, ctx.qry.head)) { 258 if (rev && strcmp(rev, ctx.qry.head)) {
253 html(delim); 259 html(delim);
254 html("id="); 260 html("id=");
255 html_attr(rev); 261 html_attr(rev);
256 delim = "&"; 262 delim = "&";
257 } 263 }
258 if (grep && pattern) { 264 if (grep && pattern) {
259 html(delim); 265 html(delim);
260 html("qt="); 266 html("qt=");
261 html_attr(grep); 267 html_attr(grep);
262 delim = "&"; 268 delim = "&";
263 html(delim); 269 html(delim);
264 html("q="); 270 html("q=");
265 html_attr(pattern); 271 html_attr(pattern);
266 } 272 }
267 if (ofs > 0) { 273 if (ofs > 0) {
268 html(delim); 274 html(delim);
269 html("ofs="); 275 html("ofs=");
270 htmlf("%d", ofs); 276 htmlf("%d", ofs);
271 } 277 }
272 html("'>"); 278 html("'>");
273 html_txt(name); 279 html_txt(name);
274 html("</a>"); 280 html("</a>");
275} 281}
276 282
277void cgit_commit_link(char *name, char *title, char *class, char *head, 283void cgit_commit_link(char *name, char *title, char *class, char *head,
278 char *rev) 284 char *rev)
279{ 285{
280 if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { 286 if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) {
281 name[ctx.cfg.max_msg_len] = '\0'; 287 name[ctx.cfg.max_msg_len] = '\0';
282 name[ctx.cfg.max_msg_len - 1] = '.'; 288 name[ctx.cfg.max_msg_len - 1] = '.';
283 name[ctx.cfg.max_msg_len - 2] = '.'; 289 name[ctx.cfg.max_msg_len - 2] = '.';
284 name[ctx.cfg.max_msg_len - 3] = '.'; 290 name[ctx.cfg.max_msg_len - 3] = '.';
285 } 291 }
286 reporevlink("commit", name, title, class, head, rev, NULL); 292 reporevlink("commit", name, title, class, head, rev, NULL);
287} 293}
288 294
289void cgit_refs_link(char *name, char *title, char *class, char *head, 295void cgit_refs_link(char *name, char *title, char *class, char *head,
290 char *rev, char *path) 296 char *rev, char *path)
291{ 297{
292 reporevlink("refs", name, title, class, head, rev, path); 298 reporevlink("refs", name, title, class, head, rev, path);
293} 299}
294 300
295void cgit_snapshot_link(char *name, char *title, char *class, char *head, 301void cgit_snapshot_link(char *name, char *title, char *class, char *head,
296 char *rev, char *archivename) 302 char *rev, char *archivename)
297{ 303{
298 reporevlink("snapshot", name, title, class, head, rev, archivename); 304 reporevlink("snapshot", name, title, class, head, rev, archivename);
299} 305}
300 306
301void cgit_diff_link(char *name, char *title, char *class, char *head, 307void cgit_diff_link(char *name, char *title, char *class, char *head,
302 char *new_rev, char *old_rev, char *path) 308 char *new_rev, char *old_rev, char *path)
303{ 309{
304 char *delim; 310 char *delim;
305 311
306 delim = repolink(title, class, "diff", head, path); 312 delim = repolink(title, class, "diff", head, path);
307 if (new_rev && strcmp(new_rev, ctx.qry.head)) { 313 if (new_rev && strcmp(new_rev, ctx.qry.head)) {
308 html(delim); 314 html(delim);
309 html("id="); 315 html("id=");
310 html_attr(new_rev); 316 html_attr(new_rev);
311 delim = "&amp;"; 317 delim = "&amp;";
312 } 318 }
313 if (old_rev) { 319 if (old_rev) {
314 html(delim); 320 html(delim);
315 html("id2="); 321 html("id2=");
316 html_attr(old_rev); 322 html_attr(old_rev);
317 } 323 }
318 html("'>"); 324 html("'>");
319 html_txt(name); 325 html_txt(name);
320 html("</a>"); 326 html("</a>");
321} 327}
322 328
323void cgit_patch_link(char *name, char *title, char *class, char *head, 329void cgit_patch_link(char *name, char *title, char *class, char *head,
324 char *rev) 330 char *rev)
325{ 331{
326 reporevlink("patch", name, title, class, head, rev, NULL); 332 reporevlink("patch", name, title, class, head, rev, NULL);
327} 333}
328 334
329void cgit_object_link(struct object *obj) 335void cgit_object_link(struct object *obj)
330{ 336{
331 char *page, *arg, *url; 337 char *page, *arg, *url;
332 338
333 if (obj->type == OBJ_COMMIT) { 339 if (obj->type == OBJ_COMMIT) {
334 cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL, 340 cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL,
335 ctx.qry.head, sha1_to_hex(obj->sha1)); 341 ctx.qry.head, sha1_to_hex(obj->sha1));
336 return; 342 return;
337 } else if (obj->type == OBJ_TREE) { 343 } else if (obj->type == OBJ_TREE) {
338 page = "tree"; 344 page = "tree";
339 arg = "id"; 345 arg = "id";
340 } else if (obj->type == OBJ_TAG) { 346 } else if (obj->type == OBJ_TAG) {
341 page = "tag"; 347 page = "tag";
342 arg = "id"; 348 arg = "id";
343 } else { 349 } else {
344 page = "blob"; 350 page = "blob";
345 arg = "id"; 351 arg = "id";
346 } 352 }
347 353
348 url = cgit_pageurl(ctx.qry.repo, page, 354 url = cgit_pageurl(ctx.qry.repo, page,
349 fmt("%s=%s", arg, sha1_to_hex(obj->sha1))); 355 fmt("%s=%s", arg, sha1_to_hex(obj->sha1)));
350 html_link_open(url, NULL, NULL); 356 html_link_open(url, NULL, NULL);
351 htmlf("%s %s", typename(obj->type), 357 htmlf("%s %s", typename(obj->type),
352 sha1_to_hex(obj->sha1)); 358 sha1_to_hex(obj->sha1));
353 html_link_close(); 359 html_link_close();
354} 360}
355 361
356void cgit_print_date(time_t secs, char *format, int local_time) 362void cgit_print_date(time_t secs, char *format, int local_time)
357{ 363{
358 char buf[64]; 364 char buf[64];
359 struct tm *time; 365 struct tm *time;
360 366
361 if (!secs) 367 if (!secs)
362 return; 368 return;
363 if(local_time) 369 if(local_time)
364 time = localtime(&secs); 370 time = localtime(&secs);
365 else 371 else
366 time = gmtime(&secs); 372 time = gmtime(&secs);
367 strftime(buf, sizeof(buf)-1, format, time); 373 strftime(buf, sizeof(buf)-1, format, time);
368 html_txt(buf); 374 html_txt(buf);
369} 375}
370 376
371void cgit_print_age(time_t t, time_t max_relative, char *format) 377void cgit_print_age(time_t t, time_t max_relative, char *format)
372{ 378{
373 time_t now, secs; 379 time_t now, secs;