Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Replace the circumstantial "Trunk", "All" and "Tip" link the /dir|/tree|/file submenu section by 1 multi-choice element in the recent open branches + "All Checkins" and "tip" special entries. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | dir_page_recent_branch_menu |
| Files: | files | file ages | folders |
| SHA3-256: |
5a3f0386aea3b961a8e48d3636ee52bf |
| User & Date: | mgagnon 2025-10-09 23:11:32.914 |
Context
|
2025-10-10
| ||
| 16:32 | Add support the branch name selection box in the submenu. ... (check-in: 5f158ae84c user: drh tags: trunk) | |
|
2025-10-09
| ||
| 23:11 | Replace the circumstantial "Trunk", "All" and "Tip" link the /dir|/tree|/file submenu section by 1 multi-choice element in the recent open branches + "All Checkins" and "tip" special entries. ... (Closed-Leaf check-in: 5a3f0386ae user: mgagnon tags: dir_page_recent_branch_menu) | |
| 18:22 | stash drop help tweak suggested in [forum:d5c5c0f980|forum post d5c5c0f980]. ... (check-in: e2783d0789 user: stephan tags: trunk) | |
Changes
Changes to src/branch.c.
| ︙ | ︙ | |||
1088 1089 1090 1091 1092 1093 1094 |
if( PB("ng")==0 ) tmFlags |= TIMELINE_GRAPH;
if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR;
if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR;
www_print_timeline(&q, tmFlags, 0, 0, 0, 0, 0, brtimeline_extra);
db_finalize(&q);
style_finish_page();
}
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 |
if( PB("ng")==0 ) tmFlags |= TIMELINE_GRAPH;
if( PB("brbg")!=0 ) tmFlags |= TIMELINE_BRCOLOR;
if( PB("ubg")!=0 ) tmFlags |= TIMELINE_UCOLOR;
www_print_timeline(&q, tmFlags, 0, 0, 0, 0, 0, brtimeline_extra);
db_finalize(&q);
style_finish_page();
}
/*
** Generate a multichoice submenu for the few recent active branches. zName is
** the query parameter used to select the current checkin. zCI is optional and
** represent the currently selected checkin, so if it is a checkin hash
** instead of a branch, it can be part of the multichoice menu.
*/
void generate_branch_submenu_multichoice(
const char* zName, /* Query parameter name */
const char* zCI /* Current checkin */
){
Stmt q;
const int brFlags = BRL_ORDERBY_MTIME | BRL_OPEN_ONLY;
static const char *zBranchMenuList[32*2]; /* 2 per entries */
const int nLimit = count(zBranchMenuList)/2;
int i = 0;
if( zName == 0 ) zName = "ci";
branch_prepare_list_query(&q, brFlags, 0, nLimit, 0);
zBranchMenuList[i++] = "";
zBranchMenuList[i++] = "All Checkins";
if( zCI ){
zCI = fossil_strdup(zCI);
zBranchMenuList[i++] = zCI;
zBranchMenuList[i++] = zCI;
}
/* If current checkin is not "tip", add it to the list */
if( zCI==0 || strcmp(zCI, "tip") ){
zBranchMenuList[i++] = "tip";
zBranchMenuList[i++] = "tip";
}
while( i/2 < nLimit && db_step(&q)==SQLITE_ROW ){
const char* zBr = fossil_strdup(db_column_text(&q, 0));
/* zCI is already in the list, don't add it twice */
if( zCI==0 || strcmp(zBr, zCI) ){
zBranchMenuList[i++] = zBr;
zBranchMenuList[i++] = zBr;
}
}
db_finalize(&q);
style_submenu_multichoice(zName, i/2, zBranchMenuList, 0);
}
|
Changes to src/browse.c.
| ︙ | ︙ | |||
169 170 171 172 173 174 175 |
char *zPrefix;
Stmt q;
const char *zCI = P("ci");
int rid = 0;
char *zUuid = 0;
Manifest *pM = 0;
const char *zSubdirLink;
| < < | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
char *zPrefix;
Stmt q;
const char *zCI = P("ci");
int rid = 0;
char *zUuid = 0;
Manifest *pM = 0;
const char *zSubdirLink;
HQuery sURI;
int isSymbolicCI = 0; /* ci= is symbolic name, not a hash prefix */
int isBranchCI = 0; /* True if ci= refers to a branch name */
char *zHeader = 0;
const char *zRegexp; /* The re= query parameter */
char *zMatch; /* Extra title text describing the match */
int bDocDir = PB("dx") || strncmp(g.zPath, "docdir", 6)==0;
|
| ︙ | ︙ | |||
196 197 198 199 200 201 202 |
** specific check-in does not exist, clear zCI. zCI==0 will cause all
** files from all check-ins to be displayed.
*/
if( bDocDir && zCI==0 ) zCI = "trunk";
if( zCI ){
pM = manifest_get_by_name(zCI, &rid);
if( pM ){
| < < < | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
** specific check-in does not exist, clear zCI. zCI==0 will cause all
** files from all check-ins to be displayed.
*/
if( bDocDir && zCI==0 ) zCI = "trunk";
if( zCI ){
pM = manifest_get_by_name(zCI, &rid);
if( pM ){
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
isSymbolicCI = (sqlite3_strnicmp(zUuid, zCI, strlen(zCI))!=0);
isBranchCI = branch_includes_uuid(zCI, zUuid);
if( bDocDir ) zCI = mprintf("%S", zUuid);
Th_StoreUnsafe("current_checkin", zCI);
}else{
zCI = 0;
|
| ︙ | ︙ | |||
281 282 283 284 285 286 287 |
if( nD==0 && !bDocDir ){
style_submenu_element("File Ages", "%R/fileage?name=%T", zCI);
}
}else{
@ in any check-in</h2>
zSubdirLink = mprintf("%R/dir?name=%T", zPrefix);
}
| < < < < < < < < > > > > > | 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
if( nD==0 && !bDocDir ){
style_submenu_element("File Ages", "%R/fileage?name=%T", zCI);
}
}else{
@ in any check-in</h2>
zSubdirLink = mprintf("%R/dir?name=%T", zPrefix);
}
if( zD && !bDocDir ){
style_submenu_element("History","%R/timeline?chng=%T/*", zD);
}
if( !bDocDir ){
style_submenu_element("Tree-View", "%s",
url_render(&sURI, "type", "tree", 0, 0));
}
if( !bDocDir ){
/* Generate the Branch list submenu */
generate_branch_submenu_multichoice("ci", zCI);
}
/* Compute the temporary table "localfiles" containing the names
** of all files and subdirectories in the zD[] directory.
**
** Subdirectory names begin with "/". This causes them to sort
** first and it also gives us an easy way to distinguish files
** from directories in the loop that follows.
|
| ︙ | ︙ | |||
703 704 705 706 707 708 709 |
char *zUuid = 0;
Blob dirname;
Manifest *pM = 0;
double rNow = 0;
char *zNow = 0;
int useMtime = atoi(PD("mtime","0"));
int sortOrder = atoi(PD("sort",useMtime?"1":"0"));
| < < | 695 696 697 698 699 700 701 702 703 704 705 706 707 708 |
char *zUuid = 0;
Blob dirname;
Manifest *pM = 0;
double rNow = 0;
char *zNow = 0;
int useMtime = atoi(PD("mtime","0"));
int sortOrder = atoi(PD("sort",useMtime?"1":"0"));
const char *zRE; /* the value for the re=REGEXP query parameter */
const char *zObjType; /* "files" by default or "folders" for "nofiles" */
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 */
|
| ︙ | ︙ | |||
760 761 762 763 764 765 766 |
/* If a specific check-in is requested, fetch and parse it. If the
** specific check-in does not exist, clear zCI. zCI==0 will cause all
** files from all check-ins to be displayed.
*/
if( zCI ){
pM = manifest_get_by_name(zCI, &rid);
if( pM ){
| < < < > > > | 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 |
/* If a specific check-in is requested, fetch and parse it. If the
** specific check-in does not exist, clear zCI. zCI==0 will cause all
** files from all check-ins to be displayed.
*/
if( zCI ){
pM = manifest_get_by_name(zCI, &rid);
if( pM ){
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
rNow = db_double(0.0, "SELECT mtime FROM event WHERE objid=%d", rid);
zNow = db_text("", "SELECT datetime(mtime,toLocal())"
" FROM event WHERE objid=%d", rid);
isSymbolicCI = (sqlite3_strnicmp(zUuid, zCI, strlen(zCI)) != 0);
isBranchCI = branch_includes_uuid(zCI, zUuid);
Th_StoreUnsafe("current_checkin", zCI);
}else{
zCI = 0;
}
}
if( zCI==0 ){
rNow = db_double(0.0, "SELECT max(mtime) FROM event");
zNow = db_text("", "SELECT datetime(max(mtime),toLocal()) FROM event");
}
/* Generate the Branch list submenu */
generate_branch_submenu_multichoice("ci", zCI);
assert( isSymbolicCI==0 || (zCI!=0 && zCI[0]!=0) );
if( zD==0 ){
if( zCI ){
zHeader = mprintf("Top-level Files of %s", zCI);
}else{
zHeader = mprintf("All Top-level Files");
}
|
| ︙ | ︙ | |||
816 817 818 819 820 821 822 |
"0", "Sort By Filename",
"1", "Sort By Age",
"2", "Sort By Size"
};
style_submenu_multichoice("sort", 3, sort_orders, 0);
}
if( zCI ){
| < < < < < < < < | 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 |
"0", "Sort By Filename",
"1", "Sort By Age",
"2", "Sort By Size"
};
style_submenu_multichoice("sort", 3, sort_orders, 0);
}
if( zCI ){
if( nD==0 && !showDirOnly ){
style_submenu_element("File Ages", "%R/fileage?name=%T", zCI);
}
}
style_submenu_element("Flat-View", "%s",
url_render(&sURI, "type", "flat", 0, 0));
/* Compute the file hierarchy.
*/
if( zCI ){
Stmt q;
|
| ︙ | ︙ | |||
1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 |
}
zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid);
isBranchCI = branch_includes_uuid(zName,zUuid);
baseTime = db_double(0.0,"SELECT mtime FROM event WHERE objid=%d", rid);
zNow = db_text("", "SELECT datetime(mtime,toLocal()) FROM event"
" WHERE objid=%d", rid);
style_submenu_element("Tree-View", "%R/tree?ci=%T&mtime=1&type=tree", zName);
style_header("File Ages");
zGlob = P("glob");
cgi_check_for_malice();
compute_fileage(rid,zGlob);
db_multi_exec("CREATE INDEX fileage_ix1 ON fileage(mid,pathname);");
if( fossil_strcmp(zName,"tip")==0 ){
| > > > > | 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 |
}
zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid);
isBranchCI = branch_includes_uuid(zName,zUuid);
baseTime = db_double(0.0,"SELECT mtime FROM event WHERE objid=%d", rid);
zNow = db_text("", "SELECT datetime(mtime,toLocal()) FROM event"
" WHERE objid=%d", rid);
style_submenu_element("Tree-View", "%R/tree?ci=%T&mtime=1&type=tree", zName);
/* Generate the Branch list submenu */
generate_branch_submenu_multichoice("name", zName);
style_header("File Ages");
zGlob = P("glob");
cgi_check_for_malice();
compute_fileage(rid,zGlob);
db_multi_exec("CREATE INDEX fileage_ix1 ON fileage(mid,pathname);");
if( fossil_strcmp(zName,"tip")==0 ){
|
| ︙ | ︙ |