Fossil SCM
Always supply an href= attribute on hyperlinks within the preview, even if the hyperlink is never used. Make the hyperlinked paths of the finfo page point to the tree-view rather than the flat-view. Provide links between the tree-view and the file-ages page.
Commit
4306ab81437b6736667e07c5b27af2b629e579a4
Parent
78a5dbea6c0b0a8…
2 files changed
+7
-6
+2
-2
+7
-6
| --- src/browse.c | ||
| +++ src/browse.c | ||
| @@ -473,10 +473,14 @@ | ||
| 473 | 473 | } |
| 474 | 474 | } |
| 475 | 475 | if( zCI ){ |
| 476 | 476 | style_submenu_element("All", "All", "%s", |
| 477 | 477 | url_render(&sURI, "ci", 0, 0, 0)); |
| 478 | + if( nD==0 ){ | |
| 479 | + style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%S", | |
| 480 | + zUuid); | |
| 481 | + } | |
| 478 | 482 | } |
| 479 | 483 | if( linkTrunk ){ |
| 480 | 484 | style_submenu_element("Trunk", "Trunk", "%s", |
| 481 | 485 | url_render(&sURI, "ci", "trunk", 0, 0)); |
| 482 | 486 | } |
| @@ -561,28 +565,24 @@ | ||
| 561 | 565 | ** The <li> element for directories also contains a sublist <ul> |
| 562 | 566 | ** for the contents of that directory. |
| 563 | 567 | */ |
| 564 | 568 | @ <div class="filetree"><ul> |
| 565 | 569 | if( nD ){ |
| 566 | - char *zLink = href("%s", url_render(&sURI, "name", 0, 0, 0)); | |
| 567 | 570 | @ <li class="dir"> |
| 568 | - @ %z(zLink)%h(zProjectName)</a> | |
| 569 | 571 | }else{ |
| 570 | 572 | @ <li class="dir subdir"> |
| 571 | - @ <a>%h(zProjectName)</a> | |
| 572 | 573 | } |
| 574 | + @ %z(href("%s",url_render(&sURI,"name",0,0,0)))%h(zProjectName)</a> | |
| 573 | 575 | @ <ul> |
| 574 | 576 | for(p=sTree.pFirst; p; p=p->pNext){ |
| 575 | 577 | if( p->isDir ){ |
| 576 | 578 | if( p->nFullName==nD-1 ){ |
| 577 | 579 | @ <li class="dir subdir"> |
| 578 | - @ <a>%h(p->zName)</a> | |
| 579 | 580 | }else{ |
| 580 | - char *zLink = href("%s", url_render(&sURI, "name", p->zFullName, 0, 0)); | |
| 581 | 581 | @ <li class="dir"> |
| 582 | - @ %z(zLink)%h(p->zName)</a> | |
| 583 | 582 | } |
| 583 | + @ %z(href("%s",url_render(&sURI,"name",p->zFullName,0,0)))%h(p->zName)</a> | |
| 584 | 584 | if( startExpanded || p->nFullName<=nD ){ |
| 585 | 585 | @ <ul> |
| 586 | 586 | }else{ |
| 587 | 587 | @ <ul style='display:none;'> |
| 588 | 588 | } |
| @@ -761,10 +761,11 @@ | ||
| 761 | 761 | if( zName==0 ) zName = "tip"; |
| 762 | 762 | rid = symbolic_name_to_rid(zName, "ci"); |
| 763 | 763 | if( rid==0 ){ |
| 764 | 764 | fossil_fatal("not a valid check-in: %s", zName); |
| 765 | 765 | } |
| 766 | + style_submenu_element("Tree-View", "Tree-View", "%R/tree?ci=%T", zName); | |
| 766 | 767 | style_header("File Ages", zName); |
| 767 | 768 | compute_fileage(rid); |
| 768 | 769 | baseTime = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid); |
| 769 | 770 | zBaseTime = db_text("","SELECT datetime(%.20g%s)", baseTime, timeline_utc()); |
| 770 | 771 | @ <h2>File Ages For Check-in |
| 771 | 772 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -473,10 +473,14 @@ | |
| 473 | } |
| 474 | } |
| 475 | if( zCI ){ |
| 476 | style_submenu_element("All", "All", "%s", |
| 477 | url_render(&sURI, "ci", 0, 0, 0)); |
| 478 | } |
| 479 | if( linkTrunk ){ |
| 480 | style_submenu_element("Trunk", "Trunk", "%s", |
| 481 | url_render(&sURI, "ci", "trunk", 0, 0)); |
| 482 | } |
| @@ -561,28 +565,24 @@ | |
| 561 | ** The <li> element for directories also contains a sublist <ul> |
| 562 | ** for the contents of that directory. |
| 563 | */ |
| 564 | @ <div class="filetree"><ul> |
| 565 | if( nD ){ |
| 566 | char *zLink = href("%s", url_render(&sURI, "name", 0, 0, 0)); |
| 567 | @ <li class="dir"> |
| 568 | @ %z(zLink)%h(zProjectName)</a> |
| 569 | }else{ |
| 570 | @ <li class="dir subdir"> |
| 571 | @ <a>%h(zProjectName)</a> |
| 572 | } |
| 573 | @ <ul> |
| 574 | for(p=sTree.pFirst; p; p=p->pNext){ |
| 575 | if( p->isDir ){ |
| 576 | if( p->nFullName==nD-1 ){ |
| 577 | @ <li class="dir subdir"> |
| 578 | @ <a>%h(p->zName)</a> |
| 579 | }else{ |
| 580 | char *zLink = href("%s", url_render(&sURI, "name", p->zFullName, 0, 0)); |
| 581 | @ <li class="dir"> |
| 582 | @ %z(zLink)%h(p->zName)</a> |
| 583 | } |
| 584 | if( startExpanded || p->nFullName<=nD ){ |
| 585 | @ <ul> |
| 586 | }else{ |
| 587 | @ <ul style='display:none;'> |
| 588 | } |
| @@ -761,10 +761,11 @@ | |
| 761 | if( zName==0 ) zName = "tip"; |
| 762 | rid = symbolic_name_to_rid(zName, "ci"); |
| 763 | if( rid==0 ){ |
| 764 | fossil_fatal("not a valid check-in: %s", zName); |
| 765 | } |
| 766 | style_header("File Ages", zName); |
| 767 | compute_fileage(rid); |
| 768 | baseTime = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid); |
| 769 | zBaseTime = db_text("","SELECT datetime(%.20g%s)", baseTime, timeline_utc()); |
| 770 | @ <h2>File Ages For Check-in |
| 771 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -473,10 +473,14 @@ | |
| 473 | } |
| 474 | } |
| 475 | if( zCI ){ |
| 476 | style_submenu_element("All", "All", "%s", |
| 477 | url_render(&sURI, "ci", 0, 0, 0)); |
| 478 | if( nD==0 ){ |
| 479 | style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%S", |
| 480 | zUuid); |
| 481 | } |
| 482 | } |
| 483 | if( linkTrunk ){ |
| 484 | style_submenu_element("Trunk", "Trunk", "%s", |
| 485 | url_render(&sURI, "ci", "trunk", 0, 0)); |
| 486 | } |
| @@ -561,28 +565,24 @@ | |
| 565 | ** The <li> element for directories also contains a sublist <ul> |
| 566 | ** for the contents of that directory. |
| 567 | */ |
| 568 | @ <div class="filetree"><ul> |
| 569 | if( nD ){ |
| 570 | @ <li class="dir"> |
| 571 | }else{ |
| 572 | @ <li class="dir subdir"> |
| 573 | } |
| 574 | @ %z(href("%s",url_render(&sURI,"name",0,0,0)))%h(zProjectName)</a> |
| 575 | @ <ul> |
| 576 | for(p=sTree.pFirst; p; p=p->pNext){ |
| 577 | if( p->isDir ){ |
| 578 | if( p->nFullName==nD-1 ){ |
| 579 | @ <li class="dir subdir"> |
| 580 | }else{ |
| 581 | @ <li class="dir"> |
| 582 | } |
| 583 | @ %z(href("%s",url_render(&sURI,"name",p->zFullName,0,0)))%h(p->zName)</a> |
| 584 | if( startExpanded || p->nFullName<=nD ){ |
| 585 | @ <ul> |
| 586 | }else{ |
| 587 | @ <ul style='display:none;'> |
| 588 | } |
| @@ -761,10 +761,11 @@ | |
| 761 | if( zName==0 ) zName = "tip"; |
| 762 | rid = symbolic_name_to_rid(zName, "ci"); |
| 763 | if( rid==0 ){ |
| 764 | fossil_fatal("not a valid check-in: %s", zName); |
| 765 | } |
| 766 | style_submenu_element("Tree-View", "Tree-View", "%R/tree?ci=%T", zName); |
| 767 | style_header("File Ages", zName); |
| 768 | compute_fileage(rid); |
| 769 | baseTime = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid); |
| 770 | zBaseTime = db_text("","SELECT datetime(%.20g%s)", baseTime, timeline_utc()); |
| 771 | @ <h2>File Ages For Check-in |
| 772 |
+2
-2
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -376,16 +376,16 @@ | ||
| 376 | 376 | blob_zero(&title); |
| 377 | 377 | if( baseCheckin ){ |
| 378 | 378 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 379 | 379 | char *zLink = href("%R/info/%S", zUuid); |
| 380 | 380 | blob_appendf(&title, "Ancestors of file "); |
| 381 | - hyperlinked_path(zFilename, &title, zUuid, "dir", ""); | |
| 381 | + hyperlinked_path(zFilename, &title, zUuid, "tree", ""); | |
| 382 | 382 | blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid); |
| 383 | 383 | fossil_free(zUuid); |
| 384 | 384 | }else{ |
| 385 | 385 | blob_appendf(&title, "History of files named "); |
| 386 | - hyperlinked_path(zFilename, &title, 0, "dir", ""); | |
| 386 | + hyperlinked_path(zFilename, &title, 0, "tree", ""); | |
| 387 | 387 | } |
| 388 | 388 | @ <h2>%b(&title)</h2> |
| 389 | 389 | blob_reset(&title); |
| 390 | 390 | pGraph = graph_init(); |
| 391 | 391 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 392 | 392 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -376,16 +376,16 @@ | |
| 376 | blob_zero(&title); |
| 377 | if( baseCheckin ){ |
| 378 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 379 | char *zLink = href("%R/info/%S", zUuid); |
| 380 | blob_appendf(&title, "Ancestors of file "); |
| 381 | hyperlinked_path(zFilename, &title, zUuid, "dir", ""); |
| 382 | blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid); |
| 383 | fossil_free(zUuid); |
| 384 | }else{ |
| 385 | blob_appendf(&title, "History of files named "); |
| 386 | hyperlinked_path(zFilename, &title, 0, "dir", ""); |
| 387 | } |
| 388 | @ <h2>%b(&title)</h2> |
| 389 | blob_reset(&title); |
| 390 | pGraph = graph_init(); |
| 391 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 392 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -376,16 +376,16 @@ | |
| 376 | blob_zero(&title); |
| 377 | if( baseCheckin ){ |
| 378 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", baseCheckin); |
| 379 | char *zLink = href("%R/info/%S", zUuid); |
| 380 | blob_appendf(&title, "Ancestors of file "); |
| 381 | hyperlinked_path(zFilename, &title, zUuid, "tree", ""); |
| 382 | blob_appendf(&title, " from check-in %z%.10s</a>", zLink, zUuid); |
| 383 | fossil_free(zUuid); |
| 384 | }else{ |
| 385 | blob_appendf(&title, "History of files named "); |
| 386 | hyperlinked_path(zFilename, &title, 0, "tree", ""); |
| 387 | } |
| 388 | @ <h2>%b(&title)</h2> |
| 389 | blob_reset(&title); |
| 390 | pGraph = graph_init(); |
| 391 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 392 |