Fossil SCM

Fix the display of wiki and markdown on /artifact pages so that hyperlinks are shown as if relative to /doc/VERSION.

drh 2019-02-20 20:32 trunk
Commit 8af35d30a6b69c3878f478bb254efcf3527a2a443322a4edb58af426ea49ee68
1 file changed +9 -2
+9 -2
--- src/info.c
+++ src/info.c
@@ -1325,10 +1325,11 @@
13251325
/*
13261326
** Possible flags for the second parameter to
13271327
** object_description()
13281328
*/
13291329
#define OBJDESC_DETAIL 0x0001 /* more detail */
1330
+#define OBJDESC_BASE 0x0002 /* Set <base> using this object */
13301331
#endif
13311332
13321333
/*
13331334
** Write a description of an object to the www reply.
13341335
**
@@ -1354,10 +1355,11 @@
13541355
int nWiki = 0;
13551356
int objType = 0;
13561357
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
13571358
int showDetail = (objdescFlags & OBJDESC_DETAIL)!=0;
13581359
char *prevName = 0;
1360
+ int bNeedBase = (objdescFlags & OBJDESC_BASE)!=0;
13591361
13601362
db_prepare(&q,
13611363
"SELECT filename.name, datetime(event.mtime,toLocal()),"
13621364
" coalesce(event.ecomment,event.comment),"
13631365
" coalesce(event.euser,event.user),"
@@ -1402,10 +1404,14 @@
14021404
}else if( mPerm==PERM_EXE ){
14031405
@ <li>Executable file
14041406
objType |= OBJTYPE_EXE;
14051407
}else{
14061408
@ <li>File
1409
+ if( bNeedBase ){
1410
+ bNeedBase = 0;
1411
+ style_set_current_page("doc/%S/%s",zVers,zName);
1412
+ }
14071413
}
14081414
objType |= OBJTYPE_CONTENT;
14091415
@ %z(href("%R/finfo?name=%T&m=%!S",zName,zUuid))%h(zName)</a>
14101416
tag_private_status(rid);
14111417
if( showDetail ){
@@ -2068,11 +2074,11 @@
20682074
int renderAsWiki = 0;
20692075
int renderAsHtml = 0;
20702076
int objType;
20712077
int asText;
20722078
const char *zUuid;
2073
- u32 objdescFlags = 0;
2079
+ u32 objdescFlags = OBJDESC_BASE;
20742080
int descOnly = fossil_strcmp(g.zPath,"whatis")==0;
20752081
int isFile = fossil_strcmp(g.zPath,"file")==0;
20762082
const char *zLn = P("ln");
20772083
const char *zName = P("name");
20782084
HQuery url;
@@ -2145,10 +2151,12 @@
21452151
@ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
21462152
}else{
21472153
@ <h2>Artifact %s(zUuid):</h2>
21482154
}
21492155
blob_zero(&downloadName);
2156
+ asText = P("txt")!=0;
2157
+ if( asText ) objdescFlags &= ~OBJDESC_BASE;
21502158
objType = object_description(rid, objdescFlags, &downloadName);
21512159
if( !descOnly && P("download")!=0 ){
21522160
cgi_redirectf("%R/raw/%T?name=%s", blob_str(&downloadName),
21532161
db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid));
21542162
/*NOTREACHED*/
@@ -2183,11 +2191,10 @@
21832191
style_submenu_element("Download", "%R/raw/%T?name=%s",
21842192
blob_str(&downloadName), zUuid);
21852193
if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
21862194
style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid);
21872195
}
2188
- asText = P("txt")!=0;
21892196
zMime = mimetype_from_name(blob_str(&downloadName));
21902197
if( zMime ){
21912198
if( fossil_strcmp(zMime, "text/html")==0 ){
21922199
if( asText ){
21932200
style_submenu_element("Html", "%s", url_render(&url, "txt", 0, 0, 0));
21942201
--- src/info.c
+++ src/info.c
@@ -1325,10 +1325,11 @@
1325 /*
1326 ** Possible flags for the second parameter to
1327 ** object_description()
1328 */
1329 #define OBJDESC_DETAIL 0x0001 /* more detail */
 
1330 #endif
1331
1332 /*
1333 ** Write a description of an object to the www reply.
1334 **
@@ -1354,10 +1355,11 @@
1354 int nWiki = 0;
1355 int objType = 0;
1356 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1357 int showDetail = (objdescFlags & OBJDESC_DETAIL)!=0;
1358 char *prevName = 0;
 
1359
1360 db_prepare(&q,
1361 "SELECT filename.name, datetime(event.mtime,toLocal()),"
1362 " coalesce(event.ecomment,event.comment),"
1363 " coalesce(event.euser,event.user),"
@@ -1402,10 +1404,14 @@
1402 }else if( mPerm==PERM_EXE ){
1403 @ <li>Executable file
1404 objType |= OBJTYPE_EXE;
1405 }else{
1406 @ <li>File
 
 
 
 
1407 }
1408 objType |= OBJTYPE_CONTENT;
1409 @ %z(href("%R/finfo?name=%T&m=%!S",zName,zUuid))%h(zName)</a>
1410 tag_private_status(rid);
1411 if( showDetail ){
@@ -2068,11 +2074,11 @@
2068 int renderAsWiki = 0;
2069 int renderAsHtml = 0;
2070 int objType;
2071 int asText;
2072 const char *zUuid;
2073 u32 objdescFlags = 0;
2074 int descOnly = fossil_strcmp(g.zPath,"whatis")==0;
2075 int isFile = fossil_strcmp(g.zPath,"file")==0;
2076 const char *zLn = P("ln");
2077 const char *zName = P("name");
2078 HQuery url;
@@ -2145,10 +2151,12 @@
2145 @ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
2146 }else{
2147 @ <h2>Artifact %s(zUuid):</h2>
2148 }
2149 blob_zero(&downloadName);
 
 
2150 objType = object_description(rid, objdescFlags, &downloadName);
2151 if( !descOnly && P("download")!=0 ){
2152 cgi_redirectf("%R/raw/%T?name=%s", blob_str(&downloadName),
2153 db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid));
2154 /*NOTREACHED*/
@@ -2183,11 +2191,10 @@
2183 style_submenu_element("Download", "%R/raw/%T?name=%s",
2184 blob_str(&downloadName), zUuid);
2185 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
2186 style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid);
2187 }
2188 asText = P("txt")!=0;
2189 zMime = mimetype_from_name(blob_str(&downloadName));
2190 if( zMime ){
2191 if( fossil_strcmp(zMime, "text/html")==0 ){
2192 if( asText ){
2193 style_submenu_element("Html", "%s", url_render(&url, "txt", 0, 0, 0));
2194
--- src/info.c
+++ src/info.c
@@ -1325,10 +1325,11 @@
1325 /*
1326 ** Possible flags for the second parameter to
1327 ** object_description()
1328 */
1329 #define OBJDESC_DETAIL 0x0001 /* more detail */
1330 #define OBJDESC_BASE 0x0002 /* Set <base> using this object */
1331 #endif
1332
1333 /*
1334 ** Write a description of an object to the www reply.
1335 **
@@ -1354,10 +1355,11 @@
1355 int nWiki = 0;
1356 int objType = 0;
1357 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1358 int showDetail = (objdescFlags & OBJDESC_DETAIL)!=0;
1359 char *prevName = 0;
1360 int bNeedBase = (objdescFlags & OBJDESC_BASE)!=0;
1361
1362 db_prepare(&q,
1363 "SELECT filename.name, datetime(event.mtime,toLocal()),"
1364 " coalesce(event.ecomment,event.comment),"
1365 " coalesce(event.euser,event.user),"
@@ -1402,10 +1404,14 @@
1404 }else if( mPerm==PERM_EXE ){
1405 @ <li>Executable file
1406 objType |= OBJTYPE_EXE;
1407 }else{
1408 @ <li>File
1409 if( bNeedBase ){
1410 bNeedBase = 0;
1411 style_set_current_page("doc/%S/%s",zVers,zName);
1412 }
1413 }
1414 objType |= OBJTYPE_CONTENT;
1415 @ %z(href("%R/finfo?name=%T&m=%!S",zName,zUuid))%h(zName)</a>
1416 tag_private_status(rid);
1417 if( showDetail ){
@@ -2068,11 +2074,11 @@
2074 int renderAsWiki = 0;
2075 int renderAsHtml = 0;
2076 int objType;
2077 int asText;
2078 const char *zUuid;
2079 u32 objdescFlags = OBJDESC_BASE;
2080 int descOnly = fossil_strcmp(g.zPath,"whatis")==0;
2081 int isFile = fossil_strcmp(g.zPath,"file")==0;
2082 const char *zLn = P("ln");
2083 const char *zName = P("name");
2084 HQuery url;
@@ -2145,10 +2151,12 @@
2151 @ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
2152 }else{
2153 @ <h2>Artifact %s(zUuid):</h2>
2154 }
2155 blob_zero(&downloadName);
2156 asText = P("txt")!=0;
2157 if( asText ) objdescFlags &= ~OBJDESC_BASE;
2158 objType = object_description(rid, objdescFlags, &downloadName);
2159 if( !descOnly && P("download")!=0 ){
2160 cgi_redirectf("%R/raw/%T?name=%s", blob_str(&downloadName),
2161 db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid));
2162 /*NOTREACHED*/
@@ -2183,11 +2191,10 @@
2191 style_submenu_element("Download", "%R/raw/%T?name=%s",
2192 blob_str(&downloadName), zUuid);
2193 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
2194 style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid);
2195 }
 
2196 zMime = mimetype_from_name(blob_str(&downloadName));
2197 if( zMime ){
2198 if( fossil_strcmp(zMime, "text/html")==0 ){
2199 if( asText ){
2200 style_submenu_element("Html", "%s", url_render(&url, "txt", 0, 0, 0));
2201

Keyboard Shortcuts

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