Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | merge trunk |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | sqlite-min-to-3.7.17 |
| Files: | files | file ages | folders |
| SHA1: |
f52089d95e84324b491493c1fc85d4d0 |
| User & Date: | jan.nijtmans 2014-01-07 08:25:30.237 |
Context
|
2014-01-21
| ||
| 21:42 | Make sure that sqlite3_strglob() is available and use it: Less code duplication ... (check-in: 7829abd893 user: jan.nijtmans tags: trunk) | |
|
2014-01-07
| ||
| 08:25 | merge trunk ... (Closed-Leaf check-in: f52089d95e user: jan.nijtmans tags: sqlite-min-to-3.7.17) | |
| 03:58 | There's already an nFullName in FileTreeNode, so use that. Remove other pointless redundancy, too. ... (check-in: 6f1b5d6047 user: joel tags: trunk) | |
|
2014-01-06
| ||
| 10:50 | If fossil on Cygwin is compiled with --disable-internal-sqlite, those Cygwin specific fossil modifications are no longer necessary. ... (check-in: 4f1b310142 user: jan.nijtmans tags: sqlite-min-to-3.7.17) | |
Changes
Changes to src/browse.c.
| ︙ | ︙ | |||
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 |
** WEBPAGE: tree
**
** Query parameters:
**
** name=PATH Directory to display. Optional
** ci=LABEL Show only files in this check-in. Optional.
** re=REGEXP Show only files matching REGEXP. Optional.
*/
void page_tree(void){
char *zD = fossil_strdup(P("name"));
int nD = zD ? strlen(zD)+1 : 0;
const char *zCI = P("ci");
int rid = 0;
char *zUuid = 0;
Blob dirname;
Manifest *pM = 0;
int nFile = 0; /* Number of files */
int linkTrunk = 1; /* include link to "trunk" */
int linkTip = 1; /* include link to "tip" */
const char *zRE; /* the value for the re=REGEXP query parameter */
char *zREx = ""; /* Extra parameters for path hyperlinks */
ReCompiled *pRE = 0; /* Compiled regular expression */
FileTreeNode *p; /* One line of the tree */
FileTree sTree; /* The complete tree of files */
HQuery sURI; /* Hyperlink */
char *zProjectName = db_get("project-name", 0);
if( strcmp(PD("type",""),"flat")==0 ){ page_dir(); return; }
memset(&sTree, 0, sizeof(sTree));
login_check_credentials();
if( !g.perm.Read ){ login_needed(); return; }
while( nD>1 && zD[nD-2]=='/' ){ zD[(--nD)-1] = 0; }
style_header("File List");
sqlite3_create_function(g.db, "pathelement", 2, SQLITE_UTF8, 0,
pathelementFunc, 0, 0);
url_initialize(&sURI, "tree");
/* If a regular expression is specified, compile it */
zRE = P("re");
if( zRE ){
re_compile(&pRE, zRE, 0);
url_add_parameter(&sURI, "re", zRE);
zREx = mprintf("&re=%T", zRE);
| > > > | 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 |
** WEBPAGE: tree
**
** Query parameters:
**
** name=PATH Directory to display. Optional
** ci=LABEL Show only files in this check-in. Optional.
** re=REGEXP Show only files matching REGEXP. Optional.
** expand Begin with the tree fully expanded.
*/
void page_tree(void){
char *zD = fossil_strdup(P("name"));
int nD = zD ? strlen(zD)+1 : 0;
const char *zCI = P("ci");
int rid = 0;
char *zUuid = 0;
Blob dirname;
Manifest *pM = 0;
int nFile = 0; /* Number of files */
int linkTrunk = 1; /* include link to "trunk" */
int linkTip = 1; /* include link to "tip" */
const char *zRE; /* the value for the re=REGEXP query parameter */
char *zREx = ""; /* Extra parameters for path hyperlinks */
ReCompiled *pRE = 0; /* Compiled regular expression */
FileTreeNode *p; /* One line of the tree */
FileTree sTree; /* The complete tree of files */
HQuery sURI; /* Hyperlink */
int startExpanded; /* True to start out with the tree expanded */
char *zProjectName = db_get("project-name", 0);
if( strcmp(PD("type",""),"flat")==0 ){ page_dir(); return; }
memset(&sTree, 0, sizeof(sTree));
login_check_credentials();
if( !g.perm.Read ){ login_needed(); return; }
while( nD>1 && zD[nD-2]=='/' ){ zD[(--nD)-1] = 0; }
style_header("File List");
sqlite3_create_function(g.db, "pathelement", 2, SQLITE_UTF8, 0,
pathelementFunc, 0, 0);
url_initialize(&sURI, "tree");
startExpanded = P("expand")!=0;
/* If a regular expression is specified, compile it */
zRE = P("re");
if( zRE ){
re_compile(&pRE, zRE, 0);
url_add_parameter(&sURI, "re", zRE);
zREx = mprintf("&re=%T", zRE);
|
| ︙ | ︙ | |||
539 540 541 542 543 544 545 |
}else{
int n = db_int(0, "SELECT count(*) FROM plink");
@ <h2>%d(nFile) files from all %d(n) check-ins
@ %s(blob_str(&dirname))</h2>
}
| | > > > > > > > > | | < < < < > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 |
}else{
int n = db_int(0, "SELECT count(*) FROM plink");
@ <h2>%d(nFile) files from all %d(n) check-ins
@ %s(blob_str(&dirname))</h2>
}
/* Generate tree of lists.
**
** Each file and directory is a list element: <li>. Files have class=file
** and if the filename as the suffix "xyz" the file also has class=file-xyz.
** Directories have class=dir. The directory specfied by the name= query
** parameter (or the top-level directory if there is no name= query parameter)
** adds class=subdir.
**
** The <li> element for directories also contains a sublist <ul>
** for the contents of that directory.
*/
@ <div class="filetree"><ul>
if( nD ){
char *zLink = href("%s", url_render(&sURI, "name", 0, 0, 0));
@ <li class="dir">
@ %z(zLink)%h(zProjectName)</a>
}else{
@ <li class="dir subdir">
@ <a>%h(zProjectName)</a>
}
@ <ul>
for(p=sTree.pFirst; p; p=p->pNext){
if( p->isDir ){
if( p->nFullName==nD-1 ){
@ <li class="dir subdir">
@ <a>%h(p->zName)</a>
}else{
char *zLink = href("%s", url_render(&sURI, "name", p->zFullName, 0, 0));
@ <li class="dir">
@ %z(zLink)%h(p->zName)</a>
}
if( startExpanded || p->nFullName<=nD ){
@ <ul>
}else{
@ <ul style='display:none;'>
}
}else{
char *zLink;
if( zCI ){
zLink = href("%R/artifact/%s",p->zUuid);
}else{
zLink = href("%R/finfo?name=%T",p->zFullName);
}
@ <li class="%z(fileext_class(p->zName))">%z(zLink)%h(p->zName)</a>
}
if( p->isLast ){
int nClose = p->iLevel - (p->pNext ? p->pNext->iLevel : 0);
while( nClose-- > 0 ){
@ </ul>
}
}
}
@ </ul>
@ </ul></div>
@ <script>(function(){
@ function style(elem, prop){
@ return window.getComputedStyle(elem).getPropertyValue(prop);
@ }
@
@ function toggleAll(tree){
@ var lists = tree.querySelectorAll('.subdir > ul > li ul');
@ var display = 'block'; /* Default action: make all sublists visible */
@ for( var i=0; lists[i]; i++ ){
@ if( style(lists[i], 'display')!='none'){
@ display = 'none'; /* Any already visible - make them all hidden */
@ break;
@ }
@ }
@ for( var i=0; lists[i]; i++ ){
@ lists[i].style.display = display;
@ }
@ }
@
@ var outer_ul = document.querySelector('.filetree > ul');
@ outer_ul.querySelector('.subdir > a').style.cursor = 'pointer';
@ outer_ul.onclick = function( e ){
@ var a = e.target;
@ if( a.nodeName!='A' ) return;
@ if( a.parentNode.className.indexOf('subdir')>=0 ){
@ toggleAll(outer_ul);
@ return false;
@ }
@ if( style(a.parentNode, 'display')=='inline' ) return;
@ var ul = a.nextSibling;
@ while( ul && ul.nodeName!='UL' ) ul = ul.nextSibling;
@ ul.style.display = style(ul, 'display')=='none' ? 'block' : 'none';
@ return false;
@ }
@ }())</script>
style_footer();
/* We could free memory used by sTree here if we needed to. But
** the process is about to exit, so doing so would not really accomplish
** anything useful. */
}
|
| ︙ | ︙ |
Changes to src/main.c.
| ︙ | ︙ | |||
593 594 595 596 597 598 599 600 601 602 603 604 605 606 |
g.tcl.argc = g.argc;
g.tcl.argv = copy_args(g.argc, g.argv); /* save full arguments */
#endif
g.mainTimerId = fossil_timer_start();
g.zVfsName = find_option("vfs",0,1);
if( g.zVfsName==0 ){
g.zVfsName = fossil_getenv("FOSSIL_VFS");
}
if( g.zVfsName ){
sqlite3_vfs *pVfs = sqlite3_vfs_find(g.zVfsName);
if( pVfs ){
sqlite3_vfs_register(pVfs, 1);
}else{
fossil_fatal("no such VFS: \"%s\"", g.zVfsName);
| > > > > > | 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 |
g.tcl.argc = g.argc;
g.tcl.argv = copy_args(g.argc, g.argv); /* save full arguments */
#endif
g.mainTimerId = fossil_timer_start();
g.zVfsName = find_option("vfs",0,1);
if( g.zVfsName==0 ){
g.zVfsName = fossil_getenv("FOSSIL_VFS");
#if defined(__CYGWIN__)
if( g.zVfsName==0 ){
g.zVfsName = "win32-longpath";
}
#endif
}
if( g.zVfsName ){
sqlite3_vfs *pVfs = sqlite3_vfs_find(g.zVfsName);
if( pVfs ){
sqlite3_vfs_register(pVfs, 1);
}else{
fossil_fatal("no such VFS: \"%s\"", g.zVfsName);
|
| ︙ | ︙ |
Changes to src/style.c.
| ︙ | ︙ | |||
784 785 786 787 788 789 790 791 792 793 794 795 796 797 |
@ margin: 0;
@ padding: 0;
},
{ ".filetree li",
"tree-view list items",
@ display: inline;
},
{ ".filetree .subdir ul",
"tree-view lists below subdir",
@ position: relative;
@ display: block;
@ margin: 0 0 0 21px;
@ padding: 0;
},
| > > > | 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 |
@ margin: 0;
@ padding: 0;
},
{ ".filetree li",
"tree-view list items",
@ display: inline;
},
/* There is exactly one element with class="subdir". That element is
** the name of the directory specified by the "name=" query parameter,
** and the directory described by the text at the top of the page. */
{ ".filetree .subdir ul",
"tree-view lists below subdir",
@ position: relative;
@ display: block;
@ margin: 0 0 0 21px;
@ padding: 0;
},
|
| ︙ | ︙ |