summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2008-12-07 14:57:55 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-12-07 14:57:55 (UTC)
commitb54ef9749c083afd86573112fad3b3ed8ee2d0e4 (patch) (unidiff)
treec23d5f0b32b15e7b6d9d455671a8f5acdc198417
parentc3c925f4eca3e863bedaae4cfe237c3ad52092b6 (diff)
downloadcgit-b54ef9749c083afd86573112fad3b3ed8ee2d0e4.zip
cgit-b54ef9749c083afd86573112fad3b3ed8ee2d0e4.tar.gz
cgit-b54ef9749c083afd86573112fad3b3ed8ee2d0e4.tar.bz2
ui-stats.c: reuse cgit_add_hidden_formfields()
This makes sure that the currect branch and path is preserved when changing the stats period or author count. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-stats.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/ui-stats.c b/ui-stats.c
index 1104485..9fc06d3 100644
--- a/ui-stats.c
+++ b/ui-stats.c
@@ -321,91 +321,90 @@ void print_authors(struct string_list *authors, int top,
321 for (j = 0; j < period->count; j++) 321 for (j = 0; j < period->count; j++)
322 period->dec(tm); 322 period->dec(tm);
323 for (j = 0; j < period->count; j++) { 323 for (j = 0; j < period->count; j++) {
324 tmp = period->pretty(tm); 324 tmp = period->pretty(tm);
325 period->inc(tm); 325 period->inc(tm);
326 date = string_list_lookup(tmp, items); 326 date = string_list_lookup(tmp, items);
327 if (!date) 327 if (!date)
328 html("<td>0</td>"); 328 html("<td>0</td>");
329 else { 329 else {
330 htmlf("<td>%d</td>", date->util); 330 htmlf("<td>%d</td>", date->util);
331 total += (size_t)date->util; 331 total += (size_t)date->util;
332 } 332 }
333 } 333 }
334 htmlf("<td class='sum'>%d</td></tr>", total); 334 htmlf("<td class='sum'>%d</td></tr>", total);
335 } 335 }
336 336
337 if (top < authors->nr) 337 if (top < authors->nr)
338 print_combined_authorrow(authors, top, authors->nr - 1, 338 print_combined_authorrow(authors, top, authors->nr - 1,
339 "Others (%d)", "left", "", "sum", period); 339 "Others (%d)", "left", "", "sum", period);
340 340
341 print_combined_authorrow(authors, 0, authors->nr - 1, "Total", 341 print_combined_authorrow(authors, 0, authors->nr - 1, "Total",
342 "total", "sum", "sum", period); 342 "total", "sum", "sum", period);
343 html("</table>"); 343 html("</table>");
344} 344}
345 345
346/* Create a sorted string_list with one entry per author. The util-field 346/* Create a sorted string_list with one entry per author. The util-field
347 * for each author is another string_list which is used to calculate the 347 * for each author is another string_list which is used to calculate the
348 * number of commits per time-interval. 348 * number of commits per time-interval.
349 */ 349 */
350void cgit_show_stats(struct cgit_context *ctx) 350void cgit_show_stats(struct cgit_context *ctx)
351{ 351{
352 struct string_list authors; 352 struct string_list authors;
353 struct cgit_period *period; 353 struct cgit_period *period;
354 int top, i; 354 int top, i;
355 const char *code = "w"; 355 const char *code = "w";
356 356
357 if (ctx->qry.period) 357 if (ctx->qry.period)
358 code = ctx->qry.period; 358 code = ctx->qry.period;
359 359
360 i = cgit_find_stats_period(code, &period); 360 i = cgit_find_stats_period(code, &period);
361 if (!i) { 361 if (!i) {
362 cgit_print_error(fmt("Unknown statistics type: %c", code)); 362 cgit_print_error(fmt("Unknown statistics type: %c", code));
363 return; 363 return;
364 } 364 }
365 if (i > ctx->repo->max_stats) { 365 if (i > ctx->repo->max_stats) {
366 cgit_print_error(fmt("Statistics type disabled: %s", 366 cgit_print_error(fmt("Statistics type disabled: %s",
367 period->name)); 367 period->name));
368 return; 368 return;
369 } 369 }
370 authors = collect_stats(ctx, period); 370 authors = collect_stats(ctx, period);
371 qsort(authors.items, authors.nr, sizeof(struct string_list_item), 371 qsort(authors.items, authors.nr, sizeof(struct string_list_item),
372 cmp_total_commits); 372 cmp_total_commits);
373 373
374 top = ctx->qry.ofs; 374 top = ctx->qry.ofs;
375 if (!top) 375 if (!top)
376 top = 10; 376 top = 10;
377 htmlf("<h2>Commits per author per %s", period->name); 377 htmlf("<h2>Commits per author per %s", period->name);
378 if (ctx->qry.path) { 378 if (ctx->qry.path) {
379 html(" (path '"); 379 html(" (path '");
380 html_txt(ctx->qry.path); 380 html_txt(ctx->qry.path);
381 html("')"); 381 html("')");
382 } 382 }
383 html("</h2>"); 383 html("</h2>");
384 384
385 html("<form method='get' action='.' style='float: right; text-align: right;'>"); 385 html("<form method='get' action='' style='float: right; text-align: right;'>");
386 if (strcmp(ctx->qry.head, ctx->repo->defbranch)) 386 cgit_add_hidden_formfields(1, 0, "stats");
387 htmlf("<input type='hidden' name='h' value='%s'/>", ctx->qry.head);
388 if (ctx->repo->max_stats > 1) { 387 if (ctx->repo->max_stats > 1) {
389 html("Period: "); 388 html("Period: ");
390 html("<select name='period' onchange='this.form.submit();'>"); 389 html("<select name='period' onchange='this.form.submit();'>");
391 for (i = 0; i < ctx->repo->max_stats; i++) 390 for (i = 0; i < ctx->repo->max_stats; i++)
392 htmlf("<option value='%c'%s>%s</option>", 391 htmlf("<option value='%c'%s>%s</option>",
393 periods[i].code, 392 periods[i].code,
394 period == &periods[i] ? " selected" : "", 393 period == &periods[i] ? " selected" : "",
395 periods[i].name); 394 periods[i].name);
396 html("</select><br/><br/>"); 395 html("</select><br/><br/>");
397 } 396 }
398 html("Authors: "); 397 html("Authors: ");
399 html(""); 398 html("");
400 html("<select name='ofs' onchange='this.form.submit();'>"); 399 html("<select name='ofs' onchange='this.form.submit();'>");
401 htmlf("<option value='10'%s>10</option>", top == 10 ? " selected" : ""); 400 htmlf("<option value='10'%s>10</option>", top == 10 ? " selected" : "");
402 htmlf("<option value='25'%s>25</option>", top == 25 ? " selected" : ""); 401 htmlf("<option value='25'%s>25</option>", top == 25 ? " selected" : "");
403 htmlf("<option value='50'%s>50</option>", top == 50 ? " selected" : ""); 402 htmlf("<option value='50'%s>50</option>", top == 50 ? " selected" : "");
404 htmlf("<option value='100'%s>100</option>", top == 100 ? " selected" : ""); 403 htmlf("<option value='100'%s>100</option>", top == 100 ? " selected" : "");
405 htmlf("<option value='-1'%s>All</option>", top == -1 ? " selected" : ""); 404 htmlf("<option value='-1'%s>All</option>", top == -1 ? " selected" : "");
406 html("</select>"); 405 html("</select>");
407 html("<noscript>&nbsp;&nbsp;<input type='submit' value='Reload'/></noscript>"); 406 html("<noscript>&nbsp;&nbsp;<input type='submit' value='Reload'/></noscript>");
408 html("</form>"); 407 html("</form>");
409 print_authors(&authors, top, period); 408 print_authors(&authors, top, period);
410} 409}
411 410