Fossil SCM
Fix the display of wiki and markdown on /artifact pages so that hyperlinks are shown as if relative to /doc/VERSION.
Commit
8af35d30a6b69c3878f478bb254efcf3527a2a443322a4edb58af426ea49ee68
Parent
f8d7f76bfdfe26a…
1 file changed
+9
-2
+9
-2
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -1325,10 +1325,11 @@ | ||
| 1325 | 1325 | /* |
| 1326 | 1326 | ** Possible flags for the second parameter to |
| 1327 | 1327 | ** object_description() |
| 1328 | 1328 | */ |
| 1329 | 1329 | #define OBJDESC_DETAIL 0x0001 /* more detail */ |
| 1330 | +#define OBJDESC_BASE 0x0002 /* Set <base> using this object */ | |
| 1330 | 1331 | #endif |
| 1331 | 1332 | |
| 1332 | 1333 | /* |
| 1333 | 1334 | ** Write a description of an object to the www reply. |
| 1334 | 1335 | ** |
| @@ -1354,10 +1355,11 @@ | ||
| 1354 | 1355 | int nWiki = 0; |
| 1355 | 1356 | int objType = 0; |
| 1356 | 1357 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 1357 | 1358 | int showDetail = (objdescFlags & OBJDESC_DETAIL)!=0; |
| 1358 | 1359 | char *prevName = 0; |
| 1360 | + int bNeedBase = (objdescFlags & OBJDESC_BASE)!=0; | |
| 1359 | 1361 | |
| 1360 | 1362 | db_prepare(&q, |
| 1361 | 1363 | "SELECT filename.name, datetime(event.mtime,toLocal())," |
| 1362 | 1364 | " coalesce(event.ecomment,event.comment)," |
| 1363 | 1365 | " coalesce(event.euser,event.user)," |
| @@ -1402,10 +1404,14 @@ | ||
| 1402 | 1404 | }else if( mPerm==PERM_EXE ){ |
| 1403 | 1405 | @ <li>Executable file |
| 1404 | 1406 | objType |= OBJTYPE_EXE; |
| 1405 | 1407 | }else{ |
| 1406 | 1408 | @ <li>File |
| 1409 | + if( bNeedBase ){ | |
| 1410 | + bNeedBase = 0; | |
| 1411 | + style_set_current_page("doc/%S/%s",zVers,zName); | |
| 1412 | + } | |
| 1407 | 1413 | } |
| 1408 | 1414 | objType |= OBJTYPE_CONTENT; |
| 1409 | 1415 | @ %z(href("%R/finfo?name=%T&m=%!S",zName,zUuid))%h(zName)</a> |
| 1410 | 1416 | tag_private_status(rid); |
| 1411 | 1417 | if( showDetail ){ |
| @@ -2068,11 +2074,11 @@ | ||
| 2068 | 2074 | int renderAsWiki = 0; |
| 2069 | 2075 | int renderAsHtml = 0; |
| 2070 | 2076 | int objType; |
| 2071 | 2077 | int asText; |
| 2072 | 2078 | const char *zUuid; |
| 2073 | - u32 objdescFlags = 0; | |
| 2079 | + u32 objdescFlags = OBJDESC_BASE; | |
| 2074 | 2080 | int descOnly = fossil_strcmp(g.zPath,"whatis")==0; |
| 2075 | 2081 | int isFile = fossil_strcmp(g.zPath,"file")==0; |
| 2076 | 2082 | const char *zLn = P("ln"); |
| 2077 | 2083 | const char *zName = P("name"); |
| 2078 | 2084 | HQuery url; |
| @@ -2145,10 +2151,12 @@ | ||
| 2145 | 2151 | @ <h2>Artifact %s(zUuid) (%d(rid)):</h2> |
| 2146 | 2152 | }else{ |
| 2147 | 2153 | @ <h2>Artifact %s(zUuid):</h2> |
| 2148 | 2154 | } |
| 2149 | 2155 | blob_zero(&downloadName); |
| 2156 | + asText = P("txt")!=0; | |
| 2157 | + if( asText ) objdescFlags &= ~OBJDESC_BASE; | |
| 2150 | 2158 | objType = object_description(rid, objdescFlags, &downloadName); |
| 2151 | 2159 | if( !descOnly && P("download")!=0 ){ |
| 2152 | 2160 | cgi_redirectf("%R/raw/%T?name=%s", blob_str(&downloadName), |
| 2153 | 2161 | db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid)); |
| 2154 | 2162 | /*NOTREACHED*/ |
| @@ -2183,11 +2191,10 @@ | ||
| 2183 | 2191 | style_submenu_element("Download", "%R/raw/%T?name=%s", |
| 2184 | 2192 | blob_str(&downloadName), zUuid); |
| 2185 | 2193 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 2186 | 2194 | style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid); |
| 2187 | 2195 | } |
| 2188 | - asText = P("txt")!=0; | |
| 2189 | 2196 | zMime = mimetype_from_name(blob_str(&downloadName)); |
| 2190 | 2197 | if( zMime ){ |
| 2191 | 2198 | if( fossil_strcmp(zMime, "text/html")==0 ){ |
| 2192 | 2199 | if( asText ){ |
| 2193 | 2200 | style_submenu_element("Html", "%s", url_render(&url, "txt", 0, 0, 0)); |
| 2194 | 2201 |
| --- 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 |