Fossil SCM
fix for last directory in list
Commit
3638635d0d1df9f40dd7cde4b27f54a1439d5530
Parent
f74480823802cbb…
1 file changed
+25
-7
+25
-7
| --- src/browse.c | ||
| +++ src/browse.c | ||
| @@ -740,14 +740,13 @@ | ||
| 740 | 740 | p = sortTreeByMtime(sTree.pFirst); |
| 741 | 741 | memset(&sTree, 0, sizeof(sTree)); |
| 742 | 742 | relinkTree(&sTree, p); |
| 743 | 743 | } |
| 744 | 744 | for(p=sTree.pFirst, nDir=0; p; p=p->pNext){ |
| 745 | - const char *zLastClass = p->pSibling==0 ? " last" : ""; | |
| 746 | 745 | if( p->pChild ){ |
| 747 | 746 | const char *zSubdirClass = p->nFullName==nD-1 ? " subdir" : ""; |
| 748 | - @ <li class="dir%s(zSubdirClass)%s(zLastClass)"><div class="filetreeline"> | |
| 747 | + @ <li class="dir%s(zSubdirClass)"><div class="filetreeline"> | |
| 749 | 748 | @ %z(href("%s",url_render(&sURI,"name",p->zFullName,0,0)))%h(p->zName)</a> |
| 750 | 749 | if( p->mtime>0.0 ){ |
| 751 | 750 | char *zAge = human_readable_age(rNow - p->mtime); |
| 752 | 751 | @ <div class="filetreeage">%s(zAge)</div> |
| 753 | 752 | } |
| @@ -760,15 +759,15 @@ | ||
| 760 | 759 | nDir++; |
| 761 | 760 | }else if( !showDirOnly ){ |
| 762 | 761 | const char *zFileClass = fileext_class(p->zName); |
| 763 | 762 | char *zLink; |
| 764 | 763 | if( zCI ){ |
| 765 | - zLink = href("%R/artifact/%.16s",p->zUuid); | |
| 764 | + zLink = href("%R/artifact/%s",p->zUuid); | |
| 766 | 765 | }else{ |
| 767 | 766 | zLink = href("%R/finfo?name=%T",p->zFullName); |
| 768 | 767 | } |
| 769 | - @ <li class="%z(zFileClass)%s(zLastClass)"><div class="filetreeline"> | |
| 768 | + @ <li class="%z(zFileClass)"><div class="filetreeline"> | |
| 770 | 769 | @ %z(zLink)%h(p->zName)</a> |
| 771 | 770 | if( p->mtime>0 ){ |
| 772 | 771 | char *zAge = human_readable_age(rNow - p->mtime); |
| 773 | 772 | @ <div class="filetreeage">%s(zAge)</div> |
| 774 | 773 | } |
| @@ -781,11 +780,28 @@ | ||
| 781 | 780 | } |
| 782 | 781 | } |
| 783 | 782 | } |
| 784 | 783 | @ </ul> |
| 785 | 784 | @ </ul></div> |
| 786 | - @ <script>(function(){ | |
| 785 | + @ <script>function fixLast(){ | |
| 786 | + @ var dirs = document.querySelectorAll('.filetree ul'); | |
| 787 | + @ for( var i = 0; i < dirs.length; i++ ){ | |
| 788 | + @ var node = dirs[i]; | |
| 789 | + @ var last = true; | |
| 790 | + @ for( var j = node.children.length-1; j >= 0; j-- ){ | |
| 791 | + @ if( !node.children[j].hidden ){ | |
| 792 | + @ if( last ){ | |
| 793 | + @ node.children[j].classList.add('last'); | |
| 794 | + @ last = false; | |
| 795 | + @ }else{ | |
| 796 | + @ node.children[j].classList.remove('last'); | |
| 797 | + @ } | |
| 798 | + @ } | |
| 799 | + @ } | |
| 800 | + @ } | |
| 801 | + @ } | |
| 802 | + @ (function(){ | |
| 787 | 803 | @ function isExpanded(ul){ |
| 788 | 804 | @ return ul.className==''; |
| 789 | 805 | @ } |
| 790 | 806 | @ |
| 791 | 807 | @ function toggleDir(ul, useInitValue){ |
| @@ -850,12 +866,13 @@ | ||
| 850 | 866 | @ while( ul && ul.nodeName!='UL' ) ul = ul.nextSibling; |
| 851 | 867 | @ if( !ul ) return true; /* This is a file link, not a directory */ |
| 852 | 868 | @ toggleDir(ul); |
| 853 | 869 | @ return false; |
| 854 | 870 | @ } |
| 855 | - @ }())</script> | |
| 856 | - @ <script>function filter_list(t){ | |
| 871 | + @ fixLast(); | |
| 872 | + @ }()) | |
| 873 | + @ function filter_list(t){ | |
| 857 | 874 | @ var outer_ul = document.querySelector('.filetree > ul'); |
| 858 | 875 | @ var links = outer_ul.querySelectorAll('.file a'); |
| 859 | 876 | @ for( var i = 0; i < links.length; i++ ){ |
| 860 | 877 | @ var node = links[i]; |
| 861 | 878 | @ if( node.innerHTML.lastIndexOf(t) == -1 ){ |
| @@ -880,10 +897,11 @@ | ||
| 880 | 897 | @ node.hidden = false; |
| 881 | 898 | @ node = node.parentNode; |
| 882 | 899 | @ } |
| 883 | 900 | @ } |
| 884 | 901 | @ } |
| 902 | + @ fixLast(); | |
| 885 | 903 | @ }</script> |
| 886 | 904 | style_footer(); |
| 887 | 905 | |
| 888 | 906 | /* We could free memory used by sTree here if we needed to. But |
| 889 | 907 | ** the process is about to exit, so doing so would not really accomplish |
| 890 | 908 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -740,14 +740,13 @@ | |
| 740 | p = sortTreeByMtime(sTree.pFirst); |
| 741 | memset(&sTree, 0, sizeof(sTree)); |
| 742 | relinkTree(&sTree, p); |
| 743 | } |
| 744 | for(p=sTree.pFirst, nDir=0; p; p=p->pNext){ |
| 745 | const char *zLastClass = p->pSibling==0 ? " last" : ""; |
| 746 | if( p->pChild ){ |
| 747 | const char *zSubdirClass = p->nFullName==nD-1 ? " subdir" : ""; |
| 748 | @ <li class="dir%s(zSubdirClass)%s(zLastClass)"><div class="filetreeline"> |
| 749 | @ %z(href("%s",url_render(&sURI,"name",p->zFullName,0,0)))%h(p->zName)</a> |
| 750 | if( p->mtime>0.0 ){ |
| 751 | char *zAge = human_readable_age(rNow - p->mtime); |
| 752 | @ <div class="filetreeage">%s(zAge)</div> |
| 753 | } |
| @@ -760,15 +759,15 @@ | |
| 760 | nDir++; |
| 761 | }else if( !showDirOnly ){ |
| 762 | const char *zFileClass = fileext_class(p->zName); |
| 763 | char *zLink; |
| 764 | if( zCI ){ |
| 765 | zLink = href("%R/artifact/%.16s",p->zUuid); |
| 766 | }else{ |
| 767 | zLink = href("%R/finfo?name=%T",p->zFullName); |
| 768 | } |
| 769 | @ <li class="%z(zFileClass)%s(zLastClass)"><div class="filetreeline"> |
| 770 | @ %z(zLink)%h(p->zName)</a> |
| 771 | if( p->mtime>0 ){ |
| 772 | char *zAge = human_readable_age(rNow - p->mtime); |
| 773 | @ <div class="filetreeage">%s(zAge)</div> |
| 774 | } |
| @@ -781,11 +780,28 @@ | |
| 781 | } |
| 782 | } |
| 783 | } |
| 784 | @ </ul> |
| 785 | @ </ul></div> |
| 786 | @ <script>(function(){ |
| 787 | @ function isExpanded(ul){ |
| 788 | @ return ul.className==''; |
| 789 | @ } |
| 790 | @ |
| 791 | @ function toggleDir(ul, useInitValue){ |
| @@ -850,12 +866,13 @@ | |
| 850 | @ while( ul && ul.nodeName!='UL' ) ul = ul.nextSibling; |
| 851 | @ if( !ul ) return true; /* This is a file link, not a directory */ |
| 852 | @ toggleDir(ul); |
| 853 | @ return false; |
| 854 | @ } |
| 855 | @ }())</script> |
| 856 | @ <script>function filter_list(t){ |
| 857 | @ var outer_ul = document.querySelector('.filetree > ul'); |
| 858 | @ var links = outer_ul.querySelectorAll('.file a'); |
| 859 | @ for( var i = 0; i < links.length; i++ ){ |
| 860 | @ var node = links[i]; |
| 861 | @ if( node.innerHTML.lastIndexOf(t) == -1 ){ |
| @@ -880,10 +897,11 @@ | |
| 880 | @ node.hidden = false; |
| 881 | @ node = node.parentNode; |
| 882 | @ } |
| 883 | @ } |
| 884 | @ } |
| 885 | @ }</script> |
| 886 | style_footer(); |
| 887 | |
| 888 | /* We could free memory used by sTree here if we needed to. But |
| 889 | ** the process is about to exit, so doing so would not really accomplish |
| 890 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -740,14 +740,13 @@ | |
| 740 | p = sortTreeByMtime(sTree.pFirst); |
| 741 | memset(&sTree, 0, sizeof(sTree)); |
| 742 | relinkTree(&sTree, p); |
| 743 | } |
| 744 | for(p=sTree.pFirst, nDir=0; p; p=p->pNext){ |
| 745 | if( p->pChild ){ |
| 746 | const char *zSubdirClass = p->nFullName==nD-1 ? " subdir" : ""; |
| 747 | @ <li class="dir%s(zSubdirClass)"><div class="filetreeline"> |
| 748 | @ %z(href("%s",url_render(&sURI,"name",p->zFullName,0,0)))%h(p->zName)</a> |
| 749 | if( p->mtime>0.0 ){ |
| 750 | char *zAge = human_readable_age(rNow - p->mtime); |
| 751 | @ <div class="filetreeage">%s(zAge)</div> |
| 752 | } |
| @@ -760,15 +759,15 @@ | |
| 759 | nDir++; |
| 760 | }else if( !showDirOnly ){ |
| 761 | const char *zFileClass = fileext_class(p->zName); |
| 762 | char *zLink; |
| 763 | if( zCI ){ |
| 764 | zLink = href("%R/artifact/%s",p->zUuid); |
| 765 | }else{ |
| 766 | zLink = href("%R/finfo?name=%T",p->zFullName); |
| 767 | } |
| 768 | @ <li class="%z(zFileClass)"><div class="filetreeline"> |
| 769 | @ %z(zLink)%h(p->zName)</a> |
| 770 | if( p->mtime>0 ){ |
| 771 | char *zAge = human_readable_age(rNow - p->mtime); |
| 772 | @ <div class="filetreeage">%s(zAge)</div> |
| 773 | } |
| @@ -781,11 +780,28 @@ | |
| 780 | } |
| 781 | } |
| 782 | } |
| 783 | @ </ul> |
| 784 | @ </ul></div> |
| 785 | @ <script>function fixLast(){ |
| 786 | @ var dirs = document.querySelectorAll('.filetree ul'); |
| 787 | @ for( var i = 0; i < dirs.length; i++ ){ |
| 788 | @ var node = dirs[i]; |
| 789 | @ var last = true; |
| 790 | @ for( var j = node.children.length-1; j >= 0; j-- ){ |
| 791 | @ if( !node.children[j].hidden ){ |
| 792 | @ if( last ){ |
| 793 | @ node.children[j].classList.add('last'); |
| 794 | @ last = false; |
| 795 | @ }else{ |
| 796 | @ node.children[j].classList.remove('last'); |
| 797 | @ } |
| 798 | @ } |
| 799 | @ } |
| 800 | @ } |
| 801 | @ } |
| 802 | @ (function(){ |
| 803 | @ function isExpanded(ul){ |
| 804 | @ return ul.className==''; |
| 805 | @ } |
| 806 | @ |
| 807 | @ function toggleDir(ul, useInitValue){ |
| @@ -850,12 +866,13 @@ | |
| 866 | @ while( ul && ul.nodeName!='UL' ) ul = ul.nextSibling; |
| 867 | @ if( !ul ) return true; /* This is a file link, not a directory */ |
| 868 | @ toggleDir(ul); |
| 869 | @ return false; |
| 870 | @ } |
| 871 | @ fixLast(); |
| 872 | @ }()) |
| 873 | @ function filter_list(t){ |
| 874 | @ var outer_ul = document.querySelector('.filetree > ul'); |
| 875 | @ var links = outer_ul.querySelectorAll('.file a'); |
| 876 | @ for( var i = 0; i < links.length; i++ ){ |
| 877 | @ var node = links[i]; |
| 878 | @ if( node.innerHTML.lastIndexOf(t) == -1 ){ |
| @@ -880,10 +897,11 @@ | |
| 897 | @ node.hidden = false; |
| 898 | @ node = node.parentNode; |
| 899 | @ } |
| 900 | @ } |
| 901 | @ } |
| 902 | @ fixLast(); |
| 903 | @ }</script> |
| 904 | style_footer(); |
| 905 | |
| 906 | /* We could free memory used by sTree here if we needed to. But |
| 907 | ** the process is about to exit, so doing so would not really accomplish |
| 908 |