Fossil SCM

help: added optional 'hidden' flag to WEBPAGE/COMMAND/SETTING entries, which causes them to be elided from most listings. They can still be invoked by the help system if their name is used, but they won't be listed. This is primarily intended for internal-use ajax routes.

stephan 2021-09-08 17:23 trunk
Commit 701c6dc284c2c4f5f47659f0a93b872e31757cb322ff650d22823f08a6692a5f
--- src/dispatch.c
+++ src/dispatch.c
@@ -48,10 +48,12 @@
4848
#define CMDFLAG_SETTING 0x0020 /* A setting */
4949
#define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
5050
#define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
5151
#define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
5252
#define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */
53
+/* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */
54
+#define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
5355
/**************************************************************************/
5456
5557
/* Values for the 2nd parameter to dispatch_name_search() */
5658
#define CMDFLAG_ANY 0x0038 /* Match anything */
5759
#define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */
@@ -551,10 +553,11 @@
551553
}else{
552554
fossil_print("---\n");
553555
}
554556
for(i=0; i<MX_COMMAND; i++){
555557
if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
558
+ else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
556559
if( useHtml ){
557560
Blob html;
558561
blob_init(&html, 0, 0);
559562
help_to_html(aCommand[i].zHelp, &html);
560563
fossil_print("<h1>%h</h1>\n", aCommand[i].zName);
@@ -829,10 +832,11 @@
829832
const char *z = aCommand[i].zName;
830833
const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :"";
831834
const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":"";
832835
if( '/'==*z || strncmp(z,"test",4)==0 ) continue;
833836
if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue;
837
+ else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
834838
@ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li>
835839
}
836840
@ </ul></div>
837841
838842
@ <a name='webpages'></a>
@@ -840,10 +844,11 @@
840844
@ <div class="columns" style="column-width: 18ex;">
841845
@ <ul>
842846
for(i=0; i<MX_COMMAND; i++){
843847
const char *z = aCommand[i].zName;
844848
if( '/'!=*z ) continue;
849
+ else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
845850
if( aCommand[i].zHelp[0] ){
846851
@ <li><a href="%R/help?cmd=%s(z)">%s(z+1)</a></li>
847852
}else{
848853
@ <li>%s(z+1)</li>
849854
}
@@ -855,10 +860,11 @@
855860
@ <div class="columns" style="column-width: 20ex;">
856861
@ <ul>
857862
for(i=0; i<MX_COMMAND; i++){
858863
const char *z = aCommand[i].zName;
859864
if( strncmp(z,"test",4)!=0 ) continue;
865
+ else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
860866
if( aCommand[i].zHelp[0] ){
861867
@ <li><a href="%R/help?cmd=%s(z)">%s(z)</a></li>
862868
}else{
863869
@ <li>%s(z)</li>
864870
}
@@ -870,10 +876,11 @@
870876
@ <div class="columns" style="column-width: 20ex;">
871877
@ <ul>
872878
for(i=0; i<MX_COMMAND; i++){
873879
const char *z = aCommand[i].zName;
874880
if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)==0 ) continue;
881
+ else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
875882
if( aCommand[i].zHelp[0] ){
876883
@ <li><a href="%R/help?cmd=%s(z)">%s(z)</a></li>
877884
}else{
878885
@ <li>%s(z)</li>
879886
}
@@ -985,10 +992,11 @@
985992
}else{
986993
int i, nCmd;
987994
const char *aCmd[MX_COMMAND];
988995
for(i=nCmd=0; i<MX_COMMAND; i++){
989996
if( (aCommand[i].eCmdFlags & cmdMask)==0 ) continue;
997
+ else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
990998
aCmd[nCmd++] = aCommand[i].zName;
991999
}
9921000
multi_column_list(aCmd, nCmd);
9931001
}
9941002
}
9951003
--- src/dispatch.c
+++ src/dispatch.c
@@ -48,10 +48,12 @@
48 #define CMDFLAG_SETTING 0x0020 /* A setting */
49 #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
50 #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
51 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
52 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */
 
 
53 /**************************************************************************/
54
55 /* Values for the 2nd parameter to dispatch_name_search() */
56 #define CMDFLAG_ANY 0x0038 /* Match anything */
57 #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */
@@ -551,10 +553,11 @@
551 }else{
552 fossil_print("---\n");
553 }
554 for(i=0; i<MX_COMMAND; i++){
555 if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
 
556 if( useHtml ){
557 Blob html;
558 blob_init(&html, 0, 0);
559 help_to_html(aCommand[i].zHelp, &html);
560 fossil_print("<h1>%h</h1>\n", aCommand[i].zName);
@@ -829,10 +832,11 @@
829 const char *z = aCommand[i].zName;
830 const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :"";
831 const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":"";
832 if( '/'==*z || strncmp(z,"test",4)==0 ) continue;
833 if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue;
 
834 @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li>
835 }
836 @ </ul></div>
837
838 @ <a name='webpages'></a>
@@ -840,10 +844,11 @@
840 @ <div class="columns" style="column-width: 18ex;">
841 @ <ul>
842 for(i=0; i<MX_COMMAND; i++){
843 const char *z = aCommand[i].zName;
844 if( '/'!=*z ) continue;
 
845 if( aCommand[i].zHelp[0] ){
846 @ <li><a href="%R/help?cmd=%s(z)">%s(z+1)</a></li>
847 }else{
848 @ <li>%s(z+1)</li>
849 }
@@ -855,10 +860,11 @@
855 @ <div class="columns" style="column-width: 20ex;">
856 @ <ul>
857 for(i=0; i<MX_COMMAND; i++){
858 const char *z = aCommand[i].zName;
859 if( strncmp(z,"test",4)!=0 ) continue;
 
860 if( aCommand[i].zHelp[0] ){
861 @ <li><a href="%R/help?cmd=%s(z)">%s(z)</a></li>
862 }else{
863 @ <li>%s(z)</li>
864 }
@@ -870,10 +876,11 @@
870 @ <div class="columns" style="column-width: 20ex;">
871 @ <ul>
872 for(i=0; i<MX_COMMAND; i++){
873 const char *z = aCommand[i].zName;
874 if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)==0 ) continue;
 
875 if( aCommand[i].zHelp[0] ){
876 @ <li><a href="%R/help?cmd=%s(z)">%s(z)</a></li>
877 }else{
878 @ <li>%s(z)</li>
879 }
@@ -985,10 +992,11 @@
985 }else{
986 int i, nCmd;
987 const char *aCmd[MX_COMMAND];
988 for(i=nCmd=0; i<MX_COMMAND; i++){
989 if( (aCommand[i].eCmdFlags & cmdMask)==0 ) continue;
 
990 aCmd[nCmd++] = aCommand[i].zName;
991 }
992 multi_column_list(aCmd, nCmd);
993 }
994 }
995
--- src/dispatch.c
+++ src/dispatch.c
@@ -48,10 +48,12 @@
48 #define CMDFLAG_SETTING 0x0020 /* A setting */
49 #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
50 #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
51 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
52 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */
53 /* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */
54 #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
55 /**************************************************************************/
56
57 /* Values for the 2nd parameter to dispatch_name_search() */
58 #define CMDFLAG_ANY 0x0038 /* Match anything */
59 #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */
@@ -551,10 +553,11 @@
553 }else{
554 fossil_print("---\n");
555 }
556 for(i=0; i<MX_COMMAND; i++){
557 if( (aCommand[i].eCmdFlags & mask)==0 ) continue;
558 else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
559 if( useHtml ){
560 Blob html;
561 blob_init(&html, 0, 0);
562 help_to_html(aCommand[i].zHelp, &html);
563 fossil_print("<h1>%h</h1>\n", aCommand[i].zName);
@@ -829,10 +832,11 @@
832 const char *z = aCommand[i].zName;
833 const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :"";
834 const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":"";
835 if( '/'==*z || strncmp(z,"test",4)==0 ) continue;
836 if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue;
837 else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
838 @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li>
839 }
840 @ </ul></div>
841
842 @ <a name='webpages'></a>
@@ -840,10 +844,11 @@
844 @ <div class="columns" style="column-width: 18ex;">
845 @ <ul>
846 for(i=0; i<MX_COMMAND; i++){
847 const char *z = aCommand[i].zName;
848 if( '/'!=*z ) continue;
849 else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
850 if( aCommand[i].zHelp[0] ){
851 @ <li><a href="%R/help?cmd=%s(z)">%s(z+1)</a></li>
852 }else{
853 @ <li>%s(z+1)</li>
854 }
@@ -855,10 +860,11 @@
860 @ <div class="columns" style="column-width: 20ex;">
861 @ <ul>
862 for(i=0; i<MX_COMMAND; i++){
863 const char *z = aCommand[i].zName;
864 if( strncmp(z,"test",4)!=0 ) continue;
865 else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
866 if( aCommand[i].zHelp[0] ){
867 @ <li><a href="%R/help?cmd=%s(z)">%s(z)</a></li>
868 }else{
869 @ <li>%s(z)</li>
870 }
@@ -870,10 +876,11 @@
876 @ <div class="columns" style="column-width: 20ex;">
877 @ <ul>
878 for(i=0; i<MX_COMMAND; i++){
879 const char *z = aCommand[i].zName;
880 if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)==0 ) continue;
881 else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue;
882 if( aCommand[i].zHelp[0] ){
883 @ <li><a href="%R/help?cmd=%s(z)">%s(z)</a></li>
884 }else{
885 @ <li>%s(z)</li>
886 }
@@ -985,10 +992,11 @@
992 }else{
993 int i, nCmd;
994 const char *aCmd[MX_COMMAND];
995 for(i=nCmd=0; i<MX_COMMAND; i++){
996 if( (aCommand[i].eCmdFlags & cmdMask)==0 ) continue;
997 else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue;
998 aCmd[nCmd++] = aCommand[i].zName;
999 }
1000 multi_column_list(aCmd, nCmd);
1001 }
1002 }
1003
--- src/mkindex.c
+++ src/mkindex.c
@@ -91,10 +91,11 @@
9191
#define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
9292
#define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
9393
#define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
9494
#define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */
9595
#define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */
96
+#define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
9697
/**************************************************************************/
9798
9899
/*
99100
** Each entry looks like this:
100101
*/
@@ -257,10 +258,12 @@
257258
aEntry[nUsed].iWidth = atoi(&zLine[i+6]);
258259
}else if( j>8 && strncmp(&zLine[i], "default=", 8)==0 ){
259260
aEntry[nUsed].zDflt = string_dup(&zLine[i+8], j-8);
260261
}else if( j>9 && strncmp(&zLine[i], "variable=", 9)==0 ){
261262
aEntry[nUsed].zVar = string_dup(&zLine[i+9], j-9);
263
+ }else if( j==6 && strncmp(&zLine[i], "hidden", 6)==0 ){
264
+ aEntry[nUsed].eType |= CMDFLAG_HIDDEN;
262265
}else{
263266
fprintf(stderr, "%s:%d: unknown option: '%.*s'\n",
264267
zFile, nLine, j, &zLine[i]);
265268
nErr++;
266269
}
267270
--- src/mkindex.c
+++ src/mkindex.c
@@ -91,10 +91,11 @@
91 #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
92 #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
93 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
94 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */
95 #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */
 
96 /**************************************************************************/
97
98 /*
99 ** Each entry looks like this:
100 */
@@ -257,10 +258,12 @@
257 aEntry[nUsed].iWidth = atoi(&zLine[i+6]);
258 }else if( j>8 && strncmp(&zLine[i], "default=", 8)==0 ){
259 aEntry[nUsed].zDflt = string_dup(&zLine[i+8], j-8);
260 }else if( j>9 && strncmp(&zLine[i], "variable=", 9)==0 ){
261 aEntry[nUsed].zVar = string_dup(&zLine[i+9], j-9);
 
 
262 }else{
263 fprintf(stderr, "%s:%d: unknown option: '%.*s'\n",
264 zFile, nLine, j, &zLine[i]);
265 nErr++;
266 }
267
--- src/mkindex.c
+++ src/mkindex.c
@@ -91,10 +91,11 @@
91 #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */
92 #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */
93 #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */
94 #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */
95 #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */
96 #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */
97 /**************************************************************************/
98
99 /*
100 ** Each entry looks like this:
101 */
@@ -257,10 +258,12 @@
258 aEntry[nUsed].iWidth = atoi(&zLine[i+6]);
259 }else if( j>8 && strncmp(&zLine[i], "default=", 8)==0 ){
260 aEntry[nUsed].zDflt = string_dup(&zLine[i+8], j-8);
261 }else if( j>9 && strncmp(&zLine[i], "variable=", 9)==0 ){
262 aEntry[nUsed].zVar = string_dup(&zLine[i+9], j-9);
263 }else if( j==6 && strncmp(&zLine[i], "hidden", 6)==0 ){
264 aEntry[nUsed].eType |= CMDFLAG_HIDDEN;
265 }else{
266 fprintf(stderr, "%s:%d: unknown option: '%.*s'\n",
267 zFile, nLine, j, &zLine[i]);
268 nErr++;
269 }
270
+1 -1
--- src/wiki.c
+++ src/wiki.c
@@ -1189,11 +1189,11 @@
11891189
cgi_set_content_type("application/json");
11901190
wiki_render_page_list_json(verbose, includeContent);
11911191
}
11921192
11931193
/*
1194
-** WEBPAGE: wikiajax
1194
+** WEBPAGE: wikiajax hidden
11951195
**
11961196
** An internal dispatcher for wiki AJAX operations. Not for direct
11971197
** client use. All routes defined by this interface are app-internal,
11981198
** subject to change
11991199
*/
12001200
--- src/wiki.c
+++ src/wiki.c
@@ -1189,11 +1189,11 @@
1189 cgi_set_content_type("application/json");
1190 wiki_render_page_list_json(verbose, includeContent);
1191 }
1192
1193 /*
1194 ** WEBPAGE: wikiajax
1195 **
1196 ** An internal dispatcher for wiki AJAX operations. Not for direct
1197 ** client use. All routes defined by this interface are app-internal,
1198 ** subject to change
1199 */
1200
--- src/wiki.c
+++ src/wiki.c
@@ -1189,11 +1189,11 @@
1189 cgi_set_content_type("application/json");
1190 wiki_render_page_list_json(verbose, includeContent);
1191 }
1192
1193 /*
1194 ** WEBPAGE: wikiajax hidden
1195 **
1196 ** An internal dispatcher for wiki AJAX operations. Not for direct
1197 ** client use. All routes defined by this interface are app-internal,
1198 ** subject to change
1199 */
1200

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button