Fossil SCM
Improved /taglist page.
Commit
239a3fa34eebb1ce7423e2f56fcd2c93897b9051ad4fd106ea19f78c26b07a33
Parent
dc15083b9ab67f1…
1 file changed
+26
-12
+26
-12
| --- src/tag.c | ||
| +++ src/tag.c | ||
| @@ -851,31 +851,45 @@ | ||
| 851 | 851 | login_anonymous_available(); |
| 852 | 852 | style_header("Tags"); |
| 853 | 853 | style_adunit_config(ADUNIT_RIGHT_OK); |
| 854 | 854 | style_submenu_element("Timeline", "tagtimeline"); |
| 855 | 855 | @ <h2>Non-propagating tags:</h2> |
| 856 | + @ <table class='sortable' data-column-types='ktn' data-init-sort='2'> | |
| 857 | + @ <thead><tr> | |
| 858 | + @ <th>Tag Name</th> | |
| 859 | + @ <th>Most Recent</th> | |
| 860 | + @ <th>Count</th> | |
| 861 | + @ </tr></thead><tbody> | |
| 862 | + | |
| 856 | 863 | db_prepare(&q, |
| 857 | - "SELECT substr(tagname,5)" | |
| 858 | - " FROM tag" | |
| 859 | - " WHERE EXISTS(SELECT 1 FROM tagxref" | |
| 860 | - " WHERE tagid=tag.tagid" | |
| 861 | - " AND tagtype=1)" | |
| 862 | - " AND tagname GLOB 'sym-*'" | |
| 863 | - " ORDER BY tagname COLLATE uintnocase" | |
| 864 | + "SELECT substr(tagname,5),\n" | |
| 865 | + "row_number()OVER(ORDER BY tagname COLLATE uintnocase),\n" | |
| 866 | + "substr(datetime(max(mtime)),1,16),\n" | |
| 867 | + "count(*)\n" | |
| 868 | + "FROM tagxref JOIN tag USING(tagid)\n" | |
| 869 | + "WHERE tagname like 'sym-%%'\n" | |
| 870 | + "AND tagxref.tagtype=1\n" | |
| 871 | + "GROUP BY 1\n" | |
| 872 | + "ORDER BY 3 DESC;\n" | |
| 864 | 873 | ); |
| 865 | - @ <ul> | |
| 866 | 874 | while( db_step(&q)==SQLITE_ROW ){ |
| 867 | 875 | const char *zName = db_column_text(&q, 0); |
| 876 | + int rn = db_column_int(&q, 1); | |
| 877 | + const char *zDate = db_column_text(&q, 2); | |
| 878 | + int cnt = db_column_int(&q, 3); | |
| 879 | + @ <tr><td data-sortkey="%06x(rn)">\ | |
| 868 | 880 | if( g.perm.Hyperlink ){ |
| 869 | - @ <li>%z(chref("taglink","%R/timeline?t=%T",zName)) | |
| 870 | - @ %h(zName)</a></li> | |
| 881 | + @ %z(chref("taglink","%R/timeline?t=%T",zName))%h(zName)</a></td>\ | |
| 871 | 882 | }else{ |
| 872 | - @ <li><span class="tagDsp">%h(zName)</span></li> | |
| 883 | + @ <span class="tagDsp">%h(zName)</span></td>\ | |
| 873 | 884 | } |
| 885 | + @ <td> %h(zDate) </td>\ | |
| 886 | + @ <td align="center">%d(cnt)</td></tr> | |
| 874 | 887 | } |
| 875 | - @ </ul> | |
| 888 | + @ </table> | |
| 876 | 889 | db_finalize(&q); |
| 890 | + style_table_sorter(); | |
| 877 | 891 | style_finish_page(); |
| 878 | 892 | } |
| 879 | 893 | |
| 880 | 894 | /* |
| 881 | 895 | ** WEBPAGE: /tagtimeline |
| 882 | 896 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -851,31 +851,45 @@ | |
| 851 | login_anonymous_available(); |
| 852 | style_header("Tags"); |
| 853 | style_adunit_config(ADUNIT_RIGHT_OK); |
| 854 | style_submenu_element("Timeline", "tagtimeline"); |
| 855 | @ <h2>Non-propagating tags:</h2> |
| 856 | db_prepare(&q, |
| 857 | "SELECT substr(tagname,5)" |
| 858 | " FROM tag" |
| 859 | " WHERE EXISTS(SELECT 1 FROM tagxref" |
| 860 | " WHERE tagid=tag.tagid" |
| 861 | " AND tagtype=1)" |
| 862 | " AND tagname GLOB 'sym-*'" |
| 863 | " ORDER BY tagname COLLATE uintnocase" |
| 864 | ); |
| 865 | @ <ul> |
| 866 | while( db_step(&q)==SQLITE_ROW ){ |
| 867 | const char *zName = db_column_text(&q, 0); |
| 868 | if( g.perm.Hyperlink ){ |
| 869 | @ <li>%z(chref("taglink","%R/timeline?t=%T",zName)) |
| 870 | @ %h(zName)</a></li> |
| 871 | }else{ |
| 872 | @ <li><span class="tagDsp">%h(zName)</span></li> |
| 873 | } |
| 874 | } |
| 875 | @ </ul> |
| 876 | db_finalize(&q); |
| 877 | style_finish_page(); |
| 878 | } |
| 879 | |
| 880 | /* |
| 881 | ** WEBPAGE: /tagtimeline |
| 882 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -851,31 +851,45 @@ | |
| 851 | login_anonymous_available(); |
| 852 | style_header("Tags"); |
| 853 | style_adunit_config(ADUNIT_RIGHT_OK); |
| 854 | style_submenu_element("Timeline", "tagtimeline"); |
| 855 | @ <h2>Non-propagating tags:</h2> |
| 856 | @ <table class='sortable' data-column-types='ktn' data-init-sort='2'> |
| 857 | @ <thead><tr> |
| 858 | @ <th>Tag Name</th> |
| 859 | @ <th>Most Recent</th> |
| 860 | @ <th>Count</th> |
| 861 | @ </tr></thead><tbody> |
| 862 | |
| 863 | db_prepare(&q, |
| 864 | "SELECT substr(tagname,5),\n" |
| 865 | "row_number()OVER(ORDER BY tagname COLLATE uintnocase),\n" |
| 866 | "substr(datetime(max(mtime)),1,16),\n" |
| 867 | "count(*)\n" |
| 868 | "FROM tagxref JOIN tag USING(tagid)\n" |
| 869 | "WHERE tagname like 'sym-%%'\n" |
| 870 | "AND tagxref.tagtype=1\n" |
| 871 | "GROUP BY 1\n" |
| 872 | "ORDER BY 3 DESC;\n" |
| 873 | ); |
| 874 | while( db_step(&q)==SQLITE_ROW ){ |
| 875 | const char *zName = db_column_text(&q, 0); |
| 876 | int rn = db_column_int(&q, 1); |
| 877 | const char *zDate = db_column_text(&q, 2); |
| 878 | int cnt = db_column_int(&q, 3); |
| 879 | @ <tr><td data-sortkey="%06x(rn)">\ |
| 880 | if( g.perm.Hyperlink ){ |
| 881 | @ %z(chref("taglink","%R/timeline?t=%T",zName))%h(zName)</a></td>\ |
| 882 | }else{ |
| 883 | @ <span class="tagDsp">%h(zName)</span></td>\ |
| 884 | } |
| 885 | @ <td> %h(zDate) </td>\ |
| 886 | @ <td align="center">%d(cnt)</td></tr> |
| 887 | } |
| 888 | @ </table> |
| 889 | db_finalize(&q); |
| 890 | style_table_sorter(); |
| 891 | style_finish_page(); |
| 892 | } |
| 893 | |
| 894 | /* |
| 895 | ** WEBPAGE: /tagtimeline |
| 896 |