Fossil SCM
Initial go at replacing URLs in the form ?name=xyz with /xyz except in places where doing so is either known to break (style_set_current_page() calls) or would require notable refactoring (/dir hyperlink generation).
Commit
e8735d6a4726c7e4d61ea5be0425854b86aa0260
Parent
576d64c94311fca…
16 files changed
+6
-6
+10
-10
+3
-3
+7
-7
+11
-11
+27
-27
+1
-1
+1
-1
+2
-2
+1
-1
+2
-2
+1
-1
+1
-1
+9
-9
+23
-23
+1
-1
+6
-6
| --- src/attach.c | ||
| +++ src/attach.c | ||
| @@ -122,17 +122,17 @@ | ||
| 122 | 122 | zSrc = "Deleted from"; |
| 123 | 123 | }else { |
| 124 | 124 | zSrc = "Added to"; |
| 125 | 125 | } |
| 126 | 126 | if( type==1 ){ |
| 127 | - @ %s(zSrc) ticket <a href="%R/tktview?name=%s(zTarget)"> | |
| 127 | + @ %s(zSrc) ticket <a href="%R/tktview/%s(zTarget)"> | |
| 128 | 128 | @ %S(zTarget)</a> |
| 129 | 129 | }else if( type==2 ){ |
| 130 | 130 | @ %s(zSrc) tech note <a href="%R/technote/%s(zTarget)"> |
| 131 | 131 | @ %S(zTarget)</a> |
| 132 | 132 | }else{ |
| 133 | - @ %s(zSrc) wiki page <a href="%R/wiki?name=%t(zTarget)"> | |
| 133 | + @ %s(zSrc) wiki page <a href="%R/wiki/%t(zTarget)"> | |
| 134 | 134 | @ %h(zTarget)</a> |
| 135 | 135 | } |
| 136 | 136 | }else{ |
| 137 | 137 | if( zSrc==0 || zSrc[0]==0 ){ |
| 138 | 138 | @ Deleted |
| @@ -287,11 +287,11 @@ | ||
| 287 | 287 | } |
| 288 | 288 | if( !db_exists("SELECT 1 FROM tag WHERE tagname='wiki-%q'", zPage) ){ |
| 289 | 289 | fossil_redirect_home(); |
| 290 | 290 | } |
| 291 | 291 | zTarget = zPage; |
| 292 | - zTargetType = mprintf("Wiki Page <a href=\"%R/wiki?name=%h\">%h</a>", | |
| 292 | + zTargetType = mprintf("Wiki Page <a href=\"%R/wiki/%h\">%h</a>", | |
| 293 | 293 | zPage, zPage); |
| 294 | 294 | }else if ( zTechNote ){ |
| 295 | 295 | if( g.perm.Write==0 || g.perm.ApndWiki==0 || g.perm.Attach==0 ){ |
| 296 | 296 | login_needed(g.anon.Write && g.anon.ApndWiki && g.anon.Attach); |
| 297 | 297 | return; |
| @@ -403,11 +403,11 @@ | ||
| 403 | 403 | fossil_free(zTargetType); |
| 404 | 404 | } |
| 405 | 405 | |
| 406 | 406 | /* |
| 407 | 407 | ** WEBPAGE: ainfo |
| 408 | -** URL: /ainfo?name=ARTIFACTID | |
| 408 | +** URL: /ainfo/ARTIFACTID | |
| 409 | 409 | ** |
| 410 | 410 | ** Show the details of an attachment artifact. |
| 411 | 411 | */ |
| 412 | 412 | void ainfo_page(void){ |
| 413 | 413 | int rid; /* RID for the control artifact */ |
| @@ -531,11 +531,11 @@ | ||
| 531 | 531 | if( strcmp(zModAction,"delete")==0 ){ |
| 532 | 532 | moderation_disapprove(rid); |
| 533 | 533 | if( zTktUuid ){ |
| 534 | 534 | cgi_redirectf("%R/tktview/%!S", zTktUuid); |
| 535 | 535 | }else{ |
| 536 | - cgi_redirectf("%R/wiki?name=%t", zWikiName); | |
| 536 | + cgi_redirectf("%R/wiki/%t", zWikiName); | |
| 537 | 537 | } |
| 538 | 538 | return; |
| 539 | 539 | } |
| 540 | 540 | if( strcmp(zModAction,"approve")==0 ){ |
| 541 | 541 | moderation_approve(rid); |
| @@ -568,11 +568,11 @@ | ||
| 568 | 568 | @ <tr><th>Tech Note:</th> |
| 569 | 569 | @ <td>%z(href("%R/technote/%s",zTNUuid))%s(zTNUuid)</a></td></tr> |
| 570 | 570 | } |
| 571 | 571 | if( zWikiName ){ |
| 572 | 572 | @ <tr><th>Wiki Page:</th> |
| 573 | - @ <td>%z(href("%R/wiki?name=%t",zWikiName))%h(zWikiName)</a></td></tr> | |
| 573 | + @ <td>%z(href("%R/wiki/%t",zWikiName))%h(zWikiName)</a></td></tr> | |
| 574 | 574 | } |
| 575 | 575 | @ <tr><th>Date:</th><td> |
| 576 | 576 | hyperlink_to_date(zDate, "</td></tr>"); |
| 577 | 577 | @ <tr><th>User:</th><td> |
| 578 | 578 | hyperlink_to_user(pAttach->zUser, zDate, "</td></tr>"); |
| 579 | 579 |
| --- src/attach.c | |
| +++ src/attach.c | |
| @@ -122,17 +122,17 @@ | |
| 122 | zSrc = "Deleted from"; |
| 123 | }else { |
| 124 | zSrc = "Added to"; |
| 125 | } |
| 126 | if( type==1 ){ |
| 127 | @ %s(zSrc) ticket <a href="%R/tktview?name=%s(zTarget)"> |
| 128 | @ %S(zTarget)</a> |
| 129 | }else if( type==2 ){ |
| 130 | @ %s(zSrc) tech note <a href="%R/technote/%s(zTarget)"> |
| 131 | @ %S(zTarget)</a> |
| 132 | }else{ |
| 133 | @ %s(zSrc) wiki page <a href="%R/wiki?name=%t(zTarget)"> |
| 134 | @ %h(zTarget)</a> |
| 135 | } |
| 136 | }else{ |
| 137 | if( zSrc==0 || zSrc[0]==0 ){ |
| 138 | @ Deleted |
| @@ -287,11 +287,11 @@ | |
| 287 | } |
| 288 | if( !db_exists("SELECT 1 FROM tag WHERE tagname='wiki-%q'", zPage) ){ |
| 289 | fossil_redirect_home(); |
| 290 | } |
| 291 | zTarget = zPage; |
| 292 | zTargetType = mprintf("Wiki Page <a href=\"%R/wiki?name=%h\">%h</a>", |
| 293 | zPage, zPage); |
| 294 | }else if ( zTechNote ){ |
| 295 | if( g.perm.Write==0 || g.perm.ApndWiki==0 || g.perm.Attach==0 ){ |
| 296 | login_needed(g.anon.Write && g.anon.ApndWiki && g.anon.Attach); |
| 297 | return; |
| @@ -403,11 +403,11 @@ | |
| 403 | fossil_free(zTargetType); |
| 404 | } |
| 405 | |
| 406 | /* |
| 407 | ** WEBPAGE: ainfo |
| 408 | ** URL: /ainfo?name=ARTIFACTID |
| 409 | ** |
| 410 | ** Show the details of an attachment artifact. |
| 411 | */ |
| 412 | void ainfo_page(void){ |
| 413 | int rid; /* RID for the control artifact */ |
| @@ -531,11 +531,11 @@ | |
| 531 | if( strcmp(zModAction,"delete")==0 ){ |
| 532 | moderation_disapprove(rid); |
| 533 | if( zTktUuid ){ |
| 534 | cgi_redirectf("%R/tktview/%!S", zTktUuid); |
| 535 | }else{ |
| 536 | cgi_redirectf("%R/wiki?name=%t", zWikiName); |
| 537 | } |
| 538 | return; |
| 539 | } |
| 540 | if( strcmp(zModAction,"approve")==0 ){ |
| 541 | moderation_approve(rid); |
| @@ -568,11 +568,11 @@ | |
| 568 | @ <tr><th>Tech Note:</th> |
| 569 | @ <td>%z(href("%R/technote/%s",zTNUuid))%s(zTNUuid)</a></td></tr> |
| 570 | } |
| 571 | if( zWikiName ){ |
| 572 | @ <tr><th>Wiki Page:</th> |
| 573 | @ <td>%z(href("%R/wiki?name=%t",zWikiName))%h(zWikiName)</a></td></tr> |
| 574 | } |
| 575 | @ <tr><th>Date:</th><td> |
| 576 | hyperlink_to_date(zDate, "</td></tr>"); |
| 577 | @ <tr><th>User:</th><td> |
| 578 | hyperlink_to_user(pAttach->zUser, zDate, "</td></tr>"); |
| 579 |
| --- src/attach.c | |
| +++ src/attach.c | |
| @@ -122,17 +122,17 @@ | |
| 122 | zSrc = "Deleted from"; |
| 123 | }else { |
| 124 | zSrc = "Added to"; |
| 125 | } |
| 126 | if( type==1 ){ |
| 127 | @ %s(zSrc) ticket <a href="%R/tktview/%s(zTarget)"> |
| 128 | @ %S(zTarget)</a> |
| 129 | }else if( type==2 ){ |
| 130 | @ %s(zSrc) tech note <a href="%R/technote/%s(zTarget)"> |
| 131 | @ %S(zTarget)</a> |
| 132 | }else{ |
| 133 | @ %s(zSrc) wiki page <a href="%R/wiki/%t(zTarget)"> |
| 134 | @ %h(zTarget)</a> |
| 135 | } |
| 136 | }else{ |
| 137 | if( zSrc==0 || zSrc[0]==0 ){ |
| 138 | @ Deleted |
| @@ -287,11 +287,11 @@ | |
| 287 | } |
| 288 | if( !db_exists("SELECT 1 FROM tag WHERE tagname='wiki-%q'", zPage) ){ |
| 289 | fossil_redirect_home(); |
| 290 | } |
| 291 | zTarget = zPage; |
| 292 | zTargetType = mprintf("Wiki Page <a href=\"%R/wiki/%h\">%h</a>", |
| 293 | zPage, zPage); |
| 294 | }else if ( zTechNote ){ |
| 295 | if( g.perm.Write==0 || g.perm.ApndWiki==0 || g.perm.Attach==0 ){ |
| 296 | login_needed(g.anon.Write && g.anon.ApndWiki && g.anon.Attach); |
| 297 | return; |
| @@ -403,11 +403,11 @@ | |
| 403 | fossil_free(zTargetType); |
| 404 | } |
| 405 | |
| 406 | /* |
| 407 | ** WEBPAGE: ainfo |
| 408 | ** URL: /ainfo/ARTIFACTID |
| 409 | ** |
| 410 | ** Show the details of an attachment artifact. |
| 411 | */ |
| 412 | void ainfo_page(void){ |
| 413 | int rid; /* RID for the control artifact */ |
| @@ -531,11 +531,11 @@ | |
| 531 | if( strcmp(zModAction,"delete")==0 ){ |
| 532 | moderation_disapprove(rid); |
| 533 | if( zTktUuid ){ |
| 534 | cgi_redirectf("%R/tktview/%!S", zTktUuid); |
| 535 | }else{ |
| 536 | cgi_redirectf("%R/wiki/%t", zWikiName); |
| 537 | } |
| 538 | return; |
| 539 | } |
| 540 | if( strcmp(zModAction,"approve")==0 ){ |
| 541 | moderation_approve(rid); |
| @@ -568,11 +568,11 @@ | |
| 568 | @ <tr><th>Tech Note:</th> |
| 569 | @ <td>%z(href("%R/technote/%s",zTNUuid))%s(zTNUuid)</a></td></tr> |
| 570 | } |
| 571 | if( zWikiName ){ |
| 572 | @ <tr><th>Wiki Page:</th> |
| 573 | @ <td>%z(href("%R/wiki/%t",zWikiName))%h(zWikiName)</a></td></tr> |
| 574 | } |
| 575 | @ <tr><th>Date:</th><td> |
| 576 | hyperlink_to_date(zDate, "</td></tr>"); |
| 577 | @ <tr><th>User:</th><td> |
| 578 | hyperlink_to_user(pAttach->zUser, zDate, "</td></tr>"); |
| 579 |
+10
-10
| --- src/browse.c | ||
| +++ src/browse.c | ||
| @@ -85,15 +85,15 @@ | ||
| 85 | 85 | |
| 86 | 86 | for(i=0; zPath[i]; i=j){ |
| 87 | 87 | for(j=i; zPath[j] && zPath[j]!='/'; j++){} |
| 88 | 88 | if( zPath[j] && g.perm.Hyperlink ){ |
| 89 | 89 | if( zCI ){ |
| 90 | - char *zLink = href("%R/%s?name=%#T%s&ci=%!S", zURI, j, zPath, zREx,zCI); | |
| 90 | + char *zLink = href("%R/%s/%#T%s?ci=%!S", zURI, j, zPath, zREx,zCI); | |
| 91 | 91 | blob_appendf(pOut, "%s%z%#h</a>", |
| 92 | 92 | zSep, zLink, j-i, &zPath[i]); |
| 93 | 93 | }else{ |
| 94 | - char *zLink = href("%R/%s?name=%#T%s", zURI, j, zPath, zREx); | |
| 94 | + char *zLink = href("%R/%s/%#T%s", zURI, j, zPath, zREx); | |
| 95 | 95 | blob_appendf(pOut, "%s%z%#h</a>", |
| 96 | 96 | zSep, zLink, j-i, &zPath[i]); |
| 97 | 97 | } |
| 98 | 98 | }else{ |
| 99 | 99 | blob_appendf(pOut, "%s%#h", zSep, j-i, &zPath[i]); |
| @@ -186,21 +186,21 @@ | ||
| 186 | 186 | if( linkTip ){ |
| 187 | 187 | style_submenu_element("Tip", "Tip", "%s", |
| 188 | 188 | url_render(&sURI, "ci", "tip", 0, 0)); |
| 189 | 189 | } |
| 190 | 190 | if( zCI ){ |
| 191 | - @ <h2>Files of check-in [%z(href("vinfo?name=%!S",zUuid))%S(zUuid)</a>] | |
| 191 | + @ <h2>Files of check-in [%z(href("vinfo/%!S",zUuid))%S(zUuid)</a>] | |
| 192 | 192 | @ %s(blob_str(&dirname))</h2> |
| 193 | - zSubdirLink = mprintf("%R/dir?ci=%!S&name=%T", zUuid, zPrefix); | |
| 193 | + zSubdirLink = mprintf("%R/dir/?ci=%!S&name=%T", zUuid, zPrefix); | |
| 194 | 194 | if( nD==0 ){ |
| 195 | - style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%!S", | |
| 195 | + style_submenu_element("File Ages", "File Ages", "%R/fileage/%!S", | |
| 196 | 196 | zUuid); |
| 197 | 197 | } |
| 198 | 198 | }else{ |
| 199 | 199 | @ <h2>The union of all files from all check-ins |
| 200 | 200 | @ %s(blob_str(&dirname))</h2> |
| 201 | - zSubdirLink = mprintf("%R/dir?name=%T", zPrefix); | |
| 201 | + zSubdirLink = mprintf("%R/dir/%T", zPrefix); | |
| 202 | 202 | } |
| 203 | 203 | style_submenu_element("All", "All", "%s", |
| 204 | 204 | url_render(&sURI, "ci", 0, 0, 0)); |
| 205 | 205 | style_submenu_element("Tree-View", "Tree-View", "%s", |
| 206 | 206 | url_render(&sURI, "type", "tree", 0, 0)); |
| @@ -290,11 +290,11 @@ | ||
| 290 | 290 | const char *zLink; |
| 291 | 291 | if( zCI ){ |
| 292 | 292 | const char *zUuid = db_column_text(&q, 1); |
| 293 | 293 | zLink = href("%R/artifact/%!S",zUuid); |
| 294 | 294 | }else{ |
| 295 | - zLink = href("%R/finfo?name=%T%T",zPrefix,zFN); | |
| 295 | + zLink = href("%R/finfo/%T%T",zPrefix,zFN); | |
| 296 | 296 | } |
| 297 | 297 | @ <li class="%z(fileext_class(zFN))">%z(zLink)%h(zFN)</a></li> |
| 298 | 298 | } |
| 299 | 299 | } |
| 300 | 300 | db_finalize(&q); |
| @@ -628,11 +628,11 @@ | ||
| 628 | 628 | style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0); |
| 629 | 629 | if( zCI ){ |
| 630 | 630 | style_submenu_element("All", "All", "%s", |
| 631 | 631 | url_render(&sURI, "ci", 0, 0, 0)); |
| 632 | 632 | if( nD==0 && !showDirOnly ){ |
| 633 | - style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%s", | |
| 633 | + style_submenu_element("File Ages", "File Ages", "%R/fileage/%s", | |
| 634 | 634 | zUuid); |
| 635 | 635 | } |
| 636 | 636 | } |
| 637 | 637 | if( linkTrunk ){ |
| 638 | 638 | style_submenu_element("Trunk", "Trunk", "%s", |
| @@ -708,11 +708,11 @@ | ||
| 708 | 708 | if( zCI ){ |
| 709 | 709 | @ <h2>%s(zObjType) from |
| 710 | 710 | if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){ |
| 711 | 711 | @ "%h(zCI)" |
| 712 | 712 | } |
| 713 | - @ [%z(href("vinfo?name=%!S",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname)) | |
| 713 | + @ [%z(href("vinfo/%!S",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname)) | |
| 714 | 714 | }else{ |
| 715 | 715 | int n = db_int(0, "SELECT count(*) FROM plink"); |
| 716 | 716 | @ <h2>%s(zObjType) from all %d(n) check-ins %s(blob_str(&dirname)) |
| 717 | 717 | } |
| 718 | 718 | if( useMtime ){ |
| @@ -772,11 +772,11 @@ | ||
| 772 | 772 | const char *zFileClass = fileext_class(p->zName); |
| 773 | 773 | char *zLink; |
| 774 | 774 | if( zCI ){ |
| 775 | 775 | zLink = href("%R/artifact/%!S",p->zUuid); |
| 776 | 776 | }else{ |
| 777 | - zLink = href("%R/finfo?name=%T",p->zFullName); | |
| 777 | + zLink = href("%R/finfo/%T",p->zFullName); | |
| 778 | 778 | } |
| 779 | 779 | @ <li class="%z(zFileClass)%s(zLastClass)"><div class="filetreeline"> |
| 780 | 780 | @ %z(zLink)%h(p->zName)</a> |
| 781 | 781 | if( p->mtime>0 ){ |
| 782 | 782 | char *zAge = human_readable_age(rNow - p->mtime); |
| 783 | 783 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -85,15 +85,15 @@ | |
| 85 | |
| 86 | for(i=0; zPath[i]; i=j){ |
| 87 | for(j=i; zPath[j] && zPath[j]!='/'; j++){} |
| 88 | if( zPath[j] && g.perm.Hyperlink ){ |
| 89 | if( zCI ){ |
| 90 | char *zLink = href("%R/%s?name=%#T%s&ci=%!S", zURI, j, zPath, zREx,zCI); |
| 91 | blob_appendf(pOut, "%s%z%#h</a>", |
| 92 | zSep, zLink, j-i, &zPath[i]); |
| 93 | }else{ |
| 94 | char *zLink = href("%R/%s?name=%#T%s", zURI, j, zPath, zREx); |
| 95 | blob_appendf(pOut, "%s%z%#h</a>", |
| 96 | zSep, zLink, j-i, &zPath[i]); |
| 97 | } |
| 98 | }else{ |
| 99 | blob_appendf(pOut, "%s%#h", zSep, j-i, &zPath[i]); |
| @@ -186,21 +186,21 @@ | |
| 186 | if( linkTip ){ |
| 187 | style_submenu_element("Tip", "Tip", "%s", |
| 188 | url_render(&sURI, "ci", "tip", 0, 0)); |
| 189 | } |
| 190 | if( zCI ){ |
| 191 | @ <h2>Files of check-in [%z(href("vinfo?name=%!S",zUuid))%S(zUuid)</a>] |
| 192 | @ %s(blob_str(&dirname))</h2> |
| 193 | zSubdirLink = mprintf("%R/dir?ci=%!S&name=%T", zUuid, zPrefix); |
| 194 | if( nD==0 ){ |
| 195 | style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%!S", |
| 196 | zUuid); |
| 197 | } |
| 198 | }else{ |
| 199 | @ <h2>The union of all files from all check-ins |
| 200 | @ %s(blob_str(&dirname))</h2> |
| 201 | zSubdirLink = mprintf("%R/dir?name=%T", zPrefix); |
| 202 | } |
| 203 | style_submenu_element("All", "All", "%s", |
| 204 | url_render(&sURI, "ci", 0, 0, 0)); |
| 205 | style_submenu_element("Tree-View", "Tree-View", "%s", |
| 206 | url_render(&sURI, "type", "tree", 0, 0)); |
| @@ -290,11 +290,11 @@ | |
| 290 | const char *zLink; |
| 291 | if( zCI ){ |
| 292 | const char *zUuid = db_column_text(&q, 1); |
| 293 | zLink = href("%R/artifact/%!S",zUuid); |
| 294 | }else{ |
| 295 | zLink = href("%R/finfo?name=%T%T",zPrefix,zFN); |
| 296 | } |
| 297 | @ <li class="%z(fileext_class(zFN))">%z(zLink)%h(zFN)</a></li> |
| 298 | } |
| 299 | } |
| 300 | db_finalize(&q); |
| @@ -628,11 +628,11 @@ | |
| 628 | style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0); |
| 629 | if( zCI ){ |
| 630 | style_submenu_element("All", "All", "%s", |
| 631 | url_render(&sURI, "ci", 0, 0, 0)); |
| 632 | if( nD==0 && !showDirOnly ){ |
| 633 | style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%s", |
| 634 | zUuid); |
| 635 | } |
| 636 | } |
| 637 | if( linkTrunk ){ |
| 638 | style_submenu_element("Trunk", "Trunk", "%s", |
| @@ -708,11 +708,11 @@ | |
| 708 | if( zCI ){ |
| 709 | @ <h2>%s(zObjType) from |
| 710 | if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){ |
| 711 | @ "%h(zCI)" |
| 712 | } |
| 713 | @ [%z(href("vinfo?name=%!S",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname)) |
| 714 | }else{ |
| 715 | int n = db_int(0, "SELECT count(*) FROM plink"); |
| 716 | @ <h2>%s(zObjType) from all %d(n) check-ins %s(blob_str(&dirname)) |
| 717 | } |
| 718 | if( useMtime ){ |
| @@ -772,11 +772,11 @@ | |
| 772 | const char *zFileClass = fileext_class(p->zName); |
| 773 | char *zLink; |
| 774 | if( zCI ){ |
| 775 | zLink = href("%R/artifact/%!S",p->zUuid); |
| 776 | }else{ |
| 777 | zLink = href("%R/finfo?name=%T",p->zFullName); |
| 778 | } |
| 779 | @ <li class="%z(zFileClass)%s(zLastClass)"><div class="filetreeline"> |
| 780 | @ %z(zLink)%h(p->zName)</a> |
| 781 | if( p->mtime>0 ){ |
| 782 | char *zAge = human_readable_age(rNow - p->mtime); |
| 783 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -85,15 +85,15 @@ | |
| 85 | |
| 86 | for(i=0; zPath[i]; i=j){ |
| 87 | for(j=i; zPath[j] && zPath[j]!='/'; j++){} |
| 88 | if( zPath[j] && g.perm.Hyperlink ){ |
| 89 | if( zCI ){ |
| 90 | char *zLink = href("%R/%s/%#T%s?ci=%!S", zURI, j, zPath, zREx,zCI); |
| 91 | blob_appendf(pOut, "%s%z%#h</a>", |
| 92 | zSep, zLink, j-i, &zPath[i]); |
| 93 | }else{ |
| 94 | char *zLink = href("%R/%s/%#T%s", zURI, j, zPath, zREx); |
| 95 | blob_appendf(pOut, "%s%z%#h</a>", |
| 96 | zSep, zLink, j-i, &zPath[i]); |
| 97 | } |
| 98 | }else{ |
| 99 | blob_appendf(pOut, "%s%#h", zSep, j-i, &zPath[i]); |
| @@ -186,21 +186,21 @@ | |
| 186 | if( linkTip ){ |
| 187 | style_submenu_element("Tip", "Tip", "%s", |
| 188 | url_render(&sURI, "ci", "tip", 0, 0)); |
| 189 | } |
| 190 | if( zCI ){ |
| 191 | @ <h2>Files of check-in [%z(href("vinfo/%!S",zUuid))%S(zUuid)</a>] |
| 192 | @ %s(blob_str(&dirname))</h2> |
| 193 | zSubdirLink = mprintf("%R/dir/?ci=%!S&name=%T", zUuid, zPrefix); |
| 194 | if( nD==0 ){ |
| 195 | style_submenu_element("File Ages", "File Ages", "%R/fileage/%!S", |
| 196 | zUuid); |
| 197 | } |
| 198 | }else{ |
| 199 | @ <h2>The union of all files from all check-ins |
| 200 | @ %s(blob_str(&dirname))</h2> |
| 201 | zSubdirLink = mprintf("%R/dir/%T", zPrefix); |
| 202 | } |
| 203 | style_submenu_element("All", "All", "%s", |
| 204 | url_render(&sURI, "ci", 0, 0, 0)); |
| 205 | style_submenu_element("Tree-View", "Tree-View", "%s", |
| 206 | url_render(&sURI, "type", "tree", 0, 0)); |
| @@ -290,11 +290,11 @@ | |
| 290 | const char *zLink; |
| 291 | if( zCI ){ |
| 292 | const char *zUuid = db_column_text(&q, 1); |
| 293 | zLink = href("%R/artifact/%!S",zUuid); |
| 294 | }else{ |
| 295 | zLink = href("%R/finfo/%T%T",zPrefix,zFN); |
| 296 | } |
| 297 | @ <li class="%z(fileext_class(zFN))">%z(zLink)%h(zFN)</a></li> |
| 298 | } |
| 299 | } |
| 300 | db_finalize(&q); |
| @@ -628,11 +628,11 @@ | |
| 628 | style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0); |
| 629 | if( zCI ){ |
| 630 | style_submenu_element("All", "All", "%s", |
| 631 | url_render(&sURI, "ci", 0, 0, 0)); |
| 632 | if( nD==0 && !showDirOnly ){ |
| 633 | style_submenu_element("File Ages", "File Ages", "%R/fileage/%s", |
| 634 | zUuid); |
| 635 | } |
| 636 | } |
| 637 | if( linkTrunk ){ |
| 638 | style_submenu_element("Trunk", "Trunk", "%s", |
| @@ -708,11 +708,11 @@ | |
| 708 | if( zCI ){ |
| 709 | @ <h2>%s(zObjType) from |
| 710 | if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){ |
| 711 | @ "%h(zCI)" |
| 712 | } |
| 713 | @ [%z(href("vinfo/%!S",zUuid))%S(zUuid)</a>] %s(blob_str(&dirname)) |
| 714 | }else{ |
| 715 | int n = db_int(0, "SELECT count(*) FROM plink"); |
| 716 | @ <h2>%s(zObjType) from all %d(n) check-ins %s(blob_str(&dirname)) |
| 717 | } |
| 718 | if( useMtime ){ |
| @@ -772,11 +772,11 @@ | |
| 772 | const char *zFileClass = fileext_class(p->zName); |
| 773 | char *zLink; |
| 774 | if( zCI ){ |
| 775 | zLink = href("%R/artifact/%!S",p->zUuid); |
| 776 | }else{ |
| 777 | zLink = href("%R/finfo/%T",p->zFullName); |
| 778 | } |
| 779 | @ <li class="%z(zFileClass)%s(zLastClass)"><div class="filetreeline"> |
| 780 | @ %z(zLink)%h(p->zName)</a> |
| 781 | if( p->mtime>0 ){ |
| 782 | char *zAge = human_readable_age(rNow - p->mtime); |
| 783 |
+3
-3
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -2353,11 +2353,11 @@ | ||
| 2353 | 2353 | clr = gradient_color(clr1, clr2, ann.nVers-1, i); |
| 2354 | 2354 | ann.aVers[i].zBgColor = mprintf("#%06x", clr); |
| 2355 | 2355 | } |
| 2356 | 2356 | |
| 2357 | 2357 | if( showLog ){ |
| 2358 | - char *zLink = href("%R/finfo?name=%t&ci=%!S",zFilename,zCI); | |
| 2358 | + char *zLink = href("%R/finfo/%t?ci=%!S",zFilename,zCI); | |
| 2359 | 2359 | @ <h2>Ancestors of %z(zLink)%h(zFilename)</a> analyzed:</h2> |
| 2360 | 2360 | @ <ol> |
| 2361 | 2361 | for(p=ann.aVers, i=0; i<ann.nVers; i++, p++){ |
| 2362 | 2362 | @ <li><span style='background-color:%s(p->zBgColor);'>%s(p->zDate) |
| 2363 | 2363 | @ check-in %z(href("%R/info/%!S",p->zMUuid))%S(p->zMUuid)</a> |
| @@ -2381,16 +2381,16 @@ | ||
| 2381 | 2381 | @ </ol> |
| 2382 | 2382 | @ <hr> |
| 2383 | 2383 | } |
| 2384 | 2384 | if( !ann.bLimit ){ |
| 2385 | 2385 | @ <h2>Origin for each line in |
| 2386 | - @ %z(href("%R/finfo?name=%h&ci=%!S", zFilename, zCI))%h(zFilename)</a> | |
| 2386 | + @ %z(href("%R/finfo/%h?ci=%!S", zFilename, zCI))%h(zFilename)</a> | |
| 2387 | 2387 | @ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2> |
| 2388 | 2388 | iLimit = ann.nVers+10; |
| 2389 | 2389 | }else{ |
| 2390 | 2390 | @ <h2>Lines added by the %d(iLimit) most recent ancestors of |
| 2391 | - @ %z(href("%R/finfo?name=%h&ci=%!S", zFilename, zCI))%h(zFilename)</a> | |
| 2391 | + @ %z(href("%R/finfo/%h?ci=%!S", zFilename, zCI))%h(zFilename)</a> | |
| 2392 | 2392 | @ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2> |
| 2393 | 2393 | } |
| 2394 | 2394 | @ <pre> |
| 2395 | 2395 | for(i=0; i<ann.nOrig; i++){ |
| 2396 | 2396 | int iVers = ann.aOrig[i].iVers; |
| 2397 | 2397 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -2353,11 +2353,11 @@ | |
| 2353 | clr = gradient_color(clr1, clr2, ann.nVers-1, i); |
| 2354 | ann.aVers[i].zBgColor = mprintf("#%06x", clr); |
| 2355 | } |
| 2356 | |
| 2357 | if( showLog ){ |
| 2358 | char *zLink = href("%R/finfo?name=%t&ci=%!S",zFilename,zCI); |
| 2359 | @ <h2>Ancestors of %z(zLink)%h(zFilename)</a> analyzed:</h2> |
| 2360 | @ <ol> |
| 2361 | for(p=ann.aVers, i=0; i<ann.nVers; i++, p++){ |
| 2362 | @ <li><span style='background-color:%s(p->zBgColor);'>%s(p->zDate) |
| 2363 | @ check-in %z(href("%R/info/%!S",p->zMUuid))%S(p->zMUuid)</a> |
| @@ -2381,16 +2381,16 @@ | |
| 2381 | @ </ol> |
| 2382 | @ <hr> |
| 2383 | } |
| 2384 | if( !ann.bLimit ){ |
| 2385 | @ <h2>Origin for each line in |
| 2386 | @ %z(href("%R/finfo?name=%h&ci=%!S", zFilename, zCI))%h(zFilename)</a> |
| 2387 | @ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2> |
| 2388 | iLimit = ann.nVers+10; |
| 2389 | }else{ |
| 2390 | @ <h2>Lines added by the %d(iLimit) most recent ancestors of |
| 2391 | @ %z(href("%R/finfo?name=%h&ci=%!S", zFilename, zCI))%h(zFilename)</a> |
| 2392 | @ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2> |
| 2393 | } |
| 2394 | @ <pre> |
| 2395 | for(i=0; i<ann.nOrig; i++){ |
| 2396 | int iVers = ann.aOrig[i].iVers; |
| 2397 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -2353,11 +2353,11 @@ | |
| 2353 | clr = gradient_color(clr1, clr2, ann.nVers-1, i); |
| 2354 | ann.aVers[i].zBgColor = mprintf("#%06x", clr); |
| 2355 | } |
| 2356 | |
| 2357 | if( showLog ){ |
| 2358 | char *zLink = href("%R/finfo/%t?ci=%!S",zFilename,zCI); |
| 2359 | @ <h2>Ancestors of %z(zLink)%h(zFilename)</a> analyzed:</h2> |
| 2360 | @ <ol> |
| 2361 | for(p=ann.aVers, i=0; i<ann.nVers; i++, p++){ |
| 2362 | @ <li><span style='background-color:%s(p->zBgColor);'>%s(p->zDate) |
| 2363 | @ check-in %z(href("%R/info/%!S",p->zMUuid))%S(p->zMUuid)</a> |
| @@ -2381,16 +2381,16 @@ | |
| 2381 | @ </ol> |
| 2382 | @ <hr> |
| 2383 | } |
| 2384 | if( !ann.bLimit ){ |
| 2385 | @ <h2>Origin for each line in |
| 2386 | @ %z(href("%R/finfo/%h?ci=%!S", zFilename, zCI))%h(zFilename)</a> |
| 2387 | @ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2> |
| 2388 | iLimit = ann.nVers+10; |
| 2389 | }else{ |
| 2390 | @ <h2>Lines added by the %d(iLimit) most recent ancestors of |
| 2391 | @ %z(href("%R/finfo/%h?ci=%!S", zFilename, zCI))%h(zFilename)</a> |
| 2392 | @ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2> |
| 2393 | } |
| 2394 | @ <pre> |
| 2395 | for(i=0; i<ann.nOrig; i++){ |
| 2396 | int iVers = ann.aOrig[i].iVers; |
| 2397 |
+7
-7
| --- src/event.c | ||
| +++ src/event.c | ||
| @@ -150,11 +150,11 @@ | ||
| 150 | 150 | blob_appendf(&title, "Tech-note %S", zId); |
| 151 | 151 | tail = fullbody; |
| 152 | 152 | } |
| 153 | 153 | style_header("%s", blob_str(&title)); |
| 154 | 154 | if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){ |
| 155 | - style_submenu_element("Edit", 0, "%R/technoteedit?name=%!S", zId); | |
| 155 | + style_submenu_element("Edit", 0, "%R/technoteedit/%!S", zId); | |
| 156 | 156 | if( g.perm.Attach ){ |
| 157 | 157 | style_submenu_element("Attach", "Add an attachment", |
| 158 | 158 | "%R/attachadd?technote=%!S&from=%R/technote/%!S", |
| 159 | 159 | zId, zId); |
| 160 | 160 | } |
| @@ -162,28 +162,28 @@ | ||
| 162 | 162 | zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate); |
| 163 | 163 | style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId); |
| 164 | 164 | if( g.perm.Hyperlink ){ |
| 165 | 165 | if( verboseFlag ){ |
| 166 | 166 | style_submenu_element("Plain", 0, |
| 167 | - "%R/technote?name=%!S&aid=%s&mimetype=text/plain", | |
| 167 | + "%R/technote/%!S&aid=%s&mimetype=text/plain", | |
| 168 | 168 | zId, zUuid); |
| 169 | 169 | if( nextRid ){ |
| 170 | 170 | char *zNext; |
| 171 | 171 | zNext = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nextRid); |
| 172 | - style_submenu_element("Next", 0,"%R/technote?name=%!S&aid=%s&v", | |
| 172 | + style_submenu_element("Next", 0,"%R/technote/%!S&aid=%s&v", | |
| 173 | 173 | zId, zNext); |
| 174 | 174 | free(zNext); |
| 175 | 175 | } |
| 176 | 176 | if( prevRid ){ |
| 177 | 177 | char *zPrev; |
| 178 | 178 | zPrev = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", prevRid); |
| 179 | - style_submenu_element("Prev", 0, "%R/technote?name=%!S&aid=%s&v", | |
| 179 | + style_submenu_element("Prev", 0, "%R/technote/%!S&aid=%s&v", | |
| 180 | 180 | zId, zPrev); |
| 181 | 181 | free(zPrev); |
| 182 | 182 | } |
| 183 | 183 | }else{ |
| 184 | - style_submenu_element("Detail", 0, "%R/technote?name=%!S&aid=%s&v", | |
| 184 | + style_submenu_element("Detail", 0, "%R/technote/%!S&aid=%s&v", | |
| 185 | 185 | zId, zUuid); |
| 186 | 186 | } |
| 187 | 187 | } |
| 188 | 188 | |
| 189 | 189 | if( verboseFlag && g.perm.Hyperlink ){ |
| @@ -448,14 +448,14 @@ | ||
| 448 | 448 | @ Internal error: Fossil tried to make an invalid artifact for |
| 449 | 449 | @ the edited technote. |
| 450 | 450 | style_footer(); |
| 451 | 451 | return; |
| 452 | 452 | } |
| 453 | - cgi_redirectf("technote?name=%T", zId); | |
| 453 | + cgi_redirectf("technote/%T", zId); | |
| 454 | 454 | } |
| 455 | 455 | if( P("cancel")!=0 ){ |
| 456 | - cgi_redirectf("technote?name=%T", zId); | |
| 456 | + cgi_redirectf("technote/%T", zId); | |
| 457 | 457 | return; |
| 458 | 458 | } |
| 459 | 459 | if( zBody==0 ){ |
| 460 | 460 | zBody = mprintf("Insert new content here..."); |
| 461 | 461 | } |
| 462 | 462 |
| --- src/event.c | |
| +++ src/event.c | |
| @@ -150,11 +150,11 @@ | |
| 150 | blob_appendf(&title, "Tech-note %S", zId); |
| 151 | tail = fullbody; |
| 152 | } |
| 153 | style_header("%s", blob_str(&title)); |
| 154 | if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){ |
| 155 | style_submenu_element("Edit", 0, "%R/technoteedit?name=%!S", zId); |
| 156 | if( g.perm.Attach ){ |
| 157 | style_submenu_element("Attach", "Add an attachment", |
| 158 | "%R/attachadd?technote=%!S&from=%R/technote/%!S", |
| 159 | zId, zId); |
| 160 | } |
| @@ -162,28 +162,28 @@ | |
| 162 | zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate); |
| 163 | style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId); |
| 164 | if( g.perm.Hyperlink ){ |
| 165 | if( verboseFlag ){ |
| 166 | style_submenu_element("Plain", 0, |
| 167 | "%R/technote?name=%!S&aid=%s&mimetype=text/plain", |
| 168 | zId, zUuid); |
| 169 | if( nextRid ){ |
| 170 | char *zNext; |
| 171 | zNext = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nextRid); |
| 172 | style_submenu_element("Next", 0,"%R/technote?name=%!S&aid=%s&v", |
| 173 | zId, zNext); |
| 174 | free(zNext); |
| 175 | } |
| 176 | if( prevRid ){ |
| 177 | char *zPrev; |
| 178 | zPrev = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", prevRid); |
| 179 | style_submenu_element("Prev", 0, "%R/technote?name=%!S&aid=%s&v", |
| 180 | zId, zPrev); |
| 181 | free(zPrev); |
| 182 | } |
| 183 | }else{ |
| 184 | style_submenu_element("Detail", 0, "%R/technote?name=%!S&aid=%s&v", |
| 185 | zId, zUuid); |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | if( verboseFlag && g.perm.Hyperlink ){ |
| @@ -448,14 +448,14 @@ | |
| 448 | @ Internal error: Fossil tried to make an invalid artifact for |
| 449 | @ the edited technote. |
| 450 | style_footer(); |
| 451 | return; |
| 452 | } |
| 453 | cgi_redirectf("technote?name=%T", zId); |
| 454 | } |
| 455 | if( P("cancel")!=0 ){ |
| 456 | cgi_redirectf("technote?name=%T", zId); |
| 457 | return; |
| 458 | } |
| 459 | if( zBody==0 ){ |
| 460 | zBody = mprintf("Insert new content here..."); |
| 461 | } |
| 462 |
| --- src/event.c | |
| +++ src/event.c | |
| @@ -150,11 +150,11 @@ | |
| 150 | blob_appendf(&title, "Tech-note %S", zId); |
| 151 | tail = fullbody; |
| 152 | } |
| 153 | style_header("%s", blob_str(&title)); |
| 154 | if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){ |
| 155 | style_submenu_element("Edit", 0, "%R/technoteedit/%!S", zId); |
| 156 | if( g.perm.Attach ){ |
| 157 | style_submenu_element("Attach", "Add an attachment", |
| 158 | "%R/attachadd?technote=%!S&from=%R/technote/%!S", |
| 159 | zId, zId); |
| 160 | } |
| @@ -162,28 +162,28 @@ | |
| 162 | zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate); |
| 163 | style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId); |
| 164 | if( g.perm.Hyperlink ){ |
| 165 | if( verboseFlag ){ |
| 166 | style_submenu_element("Plain", 0, |
| 167 | "%R/technote/%!S&aid=%s&mimetype=text/plain", |
| 168 | zId, zUuid); |
| 169 | if( nextRid ){ |
| 170 | char *zNext; |
| 171 | zNext = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", nextRid); |
| 172 | style_submenu_element("Next", 0,"%R/technote/%!S&aid=%s&v", |
| 173 | zId, zNext); |
| 174 | free(zNext); |
| 175 | } |
| 176 | if( prevRid ){ |
| 177 | char *zPrev; |
| 178 | zPrev = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", prevRid); |
| 179 | style_submenu_element("Prev", 0, "%R/technote/%!S&aid=%s&v", |
| 180 | zId, zPrev); |
| 181 | free(zPrev); |
| 182 | } |
| 183 | }else{ |
| 184 | style_submenu_element("Detail", 0, "%R/technote/%!S&aid=%s&v", |
| 185 | zId, zUuid); |
| 186 | } |
| 187 | } |
| 188 | |
| 189 | if( verboseFlag && g.perm.Hyperlink ){ |
| @@ -448,14 +448,14 @@ | |
| 448 | @ Internal error: Fossil tried to make an invalid artifact for |
| 449 | @ the edited technote. |
| 450 | style_footer(); |
| 451 | return; |
| 452 | } |
| 453 | cgi_redirectf("technote/%T", zId); |
| 454 | } |
| 455 | if( P("cancel")!=0 ){ |
| 456 | cgi_redirectf("technote/%T", zId); |
| 457 | return; |
| 458 | } |
| 459 | if( zBody==0 ){ |
| 460 | zBody = mprintf("Insert new content here..."); |
| 461 | } |
| 462 |
+11
-11
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -276,11 +276,11 @@ | ||
| 276 | 276 | /* Values for the debug= query parameter to finfo */ |
| 277 | 277 | #define FINFO_DEBUG_MLINK 0x01 |
| 278 | 278 | |
| 279 | 279 | /* |
| 280 | 280 | ** WEBPAGE: finfo |
| 281 | -** URL: /finfo?name=FILENAME | |
| 281 | +** URL: /finfo/FILENAME | |
| 282 | 282 | ** |
| 283 | 283 | ** Show the change history for a single file. |
| 284 | 284 | ** |
| 285 | 285 | ** Additional query parameters: |
| 286 | 286 | ** |
| @@ -326,11 +326,11 @@ | ||
| 326 | 326 | @ No such file: %h(zFilename) |
| 327 | 327 | style_footer(); |
| 328 | 328 | return; |
| 329 | 329 | } |
| 330 | 330 | if( g.perm.Admin ){ |
| 331 | - style_submenu_element("MLink Table", "mtab", "%R/mlink?name=%t", zFilename); | |
| 331 | + style_submenu_element("MLink Table", "mtab", "%R/mlink/%t", zFilename); | |
| 332 | 332 | } |
| 333 | 333 | if( baseCheckin ){ |
| 334 | 334 | compute_direct_ancestors(baseCheckin); |
| 335 | 335 | } |
| 336 | 336 | url_add_parameter(&url, "name", zFilename); |
| @@ -399,11 +399,11 @@ | ||
| 399 | 399 | if( n>0 ){ |
| 400 | 400 | blob_appendf(&title, "First %d ancestors of file ", n); |
| 401 | 401 | }else{ |
| 402 | 402 | blob_appendf(&title, "Ancestors of file "); |
| 403 | 403 | } |
| 404 | - blob_appendf(&title,"<a href='%R/finfo?name=%T'>%h</a>", | |
| 404 | + blob_appendf(&title,"<a href='%R/finfo/%T'>%h</a>", | |
| 405 | 405 | zFilename, zFilename); |
| 406 | 406 | if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 407 | 407 | blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid); |
| 408 | 408 | if( fShowId ) blob_appendf(&title, " (%d)", baseCheckin); |
| 409 | 409 | fossil_free(zUuid); |
| @@ -487,11 +487,11 @@ | ||
| 487 | 487 | @ <b>Added</b> |
| 488 | 488 | }else if( pfnid ){ |
| 489 | 489 | char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d", |
| 490 | 490 | pfnid); |
| 491 | 491 | @ <b>Renamed</b> from |
| 492 | - @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a> | |
| 492 | + @ %z(href("%R/finfo/%t", zPrevName))%h(zPrevName)</a> | |
| 493 | 493 | } |
| 494 | 494 | @ %z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a> |
| 495 | 495 | if( fShowId ){ |
| 496 | 496 | @ (%d(frid)) |
| 497 | 497 | } |
| @@ -504,11 +504,11 @@ | ||
| 504 | 504 | " WHERE mid=%d" |
| 505 | 505 | " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))", |
| 506 | 506 | fmid, zFilename); |
| 507 | 507 | if( zNewName ){ |
| 508 | 508 | @ <b>Renamed</b> to |
| 509 | - @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a> by check-in | |
| 509 | + @ %z(href("%R/finfo/%t",zNewName))%h(zNewName)</a> by check-in | |
| 510 | 510 | fossil_free(zNewName); |
| 511 | 511 | }else{ |
| 512 | 512 | @ <b>Deleted</b> by check-in |
| 513 | 513 | } |
| 514 | 514 | } |
| @@ -538,11 +538,11 @@ | ||
| 538 | 538 | @ parents=%d(aParent[0]) |
| 539 | 539 | for(ii=1; ii<nParent; ii++){ |
| 540 | 540 | @ %d(aParent[ii]) |
| 541 | 541 | } |
| 542 | 542 | } |
| 543 | - zAncLink = href("%R/finfo?name=%T&ci=%!S&debug=1",zFilename,zCkin); | |
| 543 | + zAncLink = href("%R/finfo/%T?ci=%!S&debug=1",zFilename,zCkin); | |
| 544 | 544 | @ %z(zAncLink)[ancestry]</a> |
| 545 | 545 | } |
| 546 | 546 | tag_private_status(frid); |
| 547 | 547 | @ </td></tr> |
| 548 | 548 | } |
| @@ -562,11 +562,11 @@ | ||
| 562 | 562 | style_footer(); |
| 563 | 563 | } |
| 564 | 564 | |
| 565 | 565 | /* |
| 566 | 566 | ** WEBPAGE: mlink |
| 567 | -** URL: /mlink?name=FILENAME | |
| 567 | +** URL: /mlink/FILENAME | |
| 568 | 568 | ** URL: /mlink?ci=NAME |
| 569 | 569 | ** |
| 570 | 570 | ** Show all MLINK table entries for a particular file, or for |
| 571 | 571 | ** a particular check-in. This screen is intended for use by developers |
| 572 | 572 | ** in debugging Fossil. |
| @@ -602,11 +602,11 @@ | ||
| 602 | 602 | " AND event.objid=mlink.mid" |
| 603 | 603 | " ORDER BY 1 DESC", |
| 604 | 604 | fnid |
| 605 | 605 | ); |
| 606 | 606 | @ <h1>MLINK table for file |
| 607 | - @ <a href='%R/finfo?name=%t(zFName)'>%h(zFName)</a></h1> | |
| 607 | + @ <a href='%R/finfo/%t(zFName)'>%h(zFName)</a></h1> | |
| 608 | 608 | @ <div class='brlist'> |
| 609 | 609 | @ <table id='mlinktable'> |
| 610 | 610 | @ <thead><tr> |
| 611 | 611 | @ <th>Date</th> |
| 612 | 612 | @ <th>Check-in</th> |
| @@ -648,11 +648,11 @@ | ||
| 648 | 648 | }else{ |
| 649 | 649 | @ <td><i>(New)</i></td> |
| 650 | 650 | } |
| 651 | 651 | @ <td align='center'>%s(isExe?"✓":"")</td> |
| 652 | 652 | if( zPrior ){ |
| 653 | - @ <td><a href='%R/finfo?name=%t(zPrior)'>%h(zPrior)</a></td> | |
| 653 | + @ <td><a href='%R/finfo/%t(zPrior)'>%h(zPrior)</a></td> | |
| 654 | 654 | }else{ |
| 655 | 655 | @ <td></td> |
| 656 | 656 | } |
| 657 | 657 | @ </tr> |
| 658 | 658 | } |
| @@ -698,11 +698,11 @@ | ||
| 698 | 698 | const char *zPrior = db_column_text(&q,4); |
| 699 | 699 | const char *zParent = db_column_text(&q,5); |
| 700 | 700 | int isExec = db_column_int(&q,6); |
| 701 | 701 | int isAux = db_column_int(&q,7); |
| 702 | 702 | @ <tr> |
| 703 | - @ <td><a href='%R/finfo?name=%t(zName)'>%h(zName)</a></td> | |
| 703 | + @ <td><a href='%R/finfo/%t(zName)'>%h(zName)</a></td> | |
| 704 | 704 | if( zParent ){ |
| 705 | 705 | @ <td><a href='%R/info/%!S(zPid)'>%S(zParent)</a></td> |
| 706 | 706 | }else{ |
| 707 | 707 | @ <td><i>(New)</i></td> |
| 708 | 708 | } |
| @@ -719,11 +719,11 @@ | ||
| 719 | 719 | }else{ |
| 720 | 720 | @ <td><i>(New)</i></td> |
| 721 | 721 | } |
| 722 | 722 | @ <td align='center'>%s(isExec?"✓":"")</td> |
| 723 | 723 | if( zPrior ){ |
| 724 | - @ <td><a href='%R/finfo?name=%t(zPrior)'>%h(zPrior)</a></td> | |
| 724 | + @ <td><a href='%R/finfo/%t(zPrior)'>%h(zPrior)</a></td> | |
| 725 | 725 | }else{ |
| 726 | 726 | @ <td></td> |
| 727 | 727 | } |
| 728 | 728 | @ </tr> |
| 729 | 729 | } |
| 730 | 730 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -276,11 +276,11 @@ | |
| 276 | /* Values for the debug= query parameter to finfo */ |
| 277 | #define FINFO_DEBUG_MLINK 0x01 |
| 278 | |
| 279 | /* |
| 280 | ** WEBPAGE: finfo |
| 281 | ** URL: /finfo?name=FILENAME |
| 282 | ** |
| 283 | ** Show the change history for a single file. |
| 284 | ** |
| 285 | ** Additional query parameters: |
| 286 | ** |
| @@ -326,11 +326,11 @@ | |
| 326 | @ No such file: %h(zFilename) |
| 327 | style_footer(); |
| 328 | return; |
| 329 | } |
| 330 | if( g.perm.Admin ){ |
| 331 | style_submenu_element("MLink Table", "mtab", "%R/mlink?name=%t", zFilename); |
| 332 | } |
| 333 | if( baseCheckin ){ |
| 334 | compute_direct_ancestors(baseCheckin); |
| 335 | } |
| 336 | url_add_parameter(&url, "name", zFilename); |
| @@ -399,11 +399,11 @@ | |
| 399 | if( n>0 ){ |
| 400 | blob_appendf(&title, "First %d ancestors of file ", n); |
| 401 | }else{ |
| 402 | blob_appendf(&title, "Ancestors of file "); |
| 403 | } |
| 404 | blob_appendf(&title,"<a href='%R/finfo?name=%T'>%h</a>", |
| 405 | zFilename, zFilename); |
| 406 | if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 407 | blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid); |
| 408 | if( fShowId ) blob_appendf(&title, " (%d)", baseCheckin); |
| 409 | fossil_free(zUuid); |
| @@ -487,11 +487,11 @@ | |
| 487 | @ <b>Added</b> |
| 488 | }else if( pfnid ){ |
| 489 | char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d", |
| 490 | pfnid); |
| 491 | @ <b>Renamed</b> from |
| 492 | @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a> |
| 493 | } |
| 494 | @ %z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a> |
| 495 | if( fShowId ){ |
| 496 | @ (%d(frid)) |
| 497 | } |
| @@ -504,11 +504,11 @@ | |
| 504 | " WHERE mid=%d" |
| 505 | " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))", |
| 506 | fmid, zFilename); |
| 507 | if( zNewName ){ |
| 508 | @ <b>Renamed</b> to |
| 509 | @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a> by check-in |
| 510 | fossil_free(zNewName); |
| 511 | }else{ |
| 512 | @ <b>Deleted</b> by check-in |
| 513 | } |
| 514 | } |
| @@ -538,11 +538,11 @@ | |
| 538 | @ parents=%d(aParent[0]) |
| 539 | for(ii=1; ii<nParent; ii++){ |
| 540 | @ %d(aParent[ii]) |
| 541 | } |
| 542 | } |
| 543 | zAncLink = href("%R/finfo?name=%T&ci=%!S&debug=1",zFilename,zCkin); |
| 544 | @ %z(zAncLink)[ancestry]</a> |
| 545 | } |
| 546 | tag_private_status(frid); |
| 547 | @ </td></tr> |
| 548 | } |
| @@ -562,11 +562,11 @@ | |
| 562 | style_footer(); |
| 563 | } |
| 564 | |
| 565 | /* |
| 566 | ** WEBPAGE: mlink |
| 567 | ** URL: /mlink?name=FILENAME |
| 568 | ** URL: /mlink?ci=NAME |
| 569 | ** |
| 570 | ** Show all MLINK table entries for a particular file, or for |
| 571 | ** a particular check-in. This screen is intended for use by developers |
| 572 | ** in debugging Fossil. |
| @@ -602,11 +602,11 @@ | |
| 602 | " AND event.objid=mlink.mid" |
| 603 | " ORDER BY 1 DESC", |
| 604 | fnid |
| 605 | ); |
| 606 | @ <h1>MLINK table for file |
| 607 | @ <a href='%R/finfo?name=%t(zFName)'>%h(zFName)</a></h1> |
| 608 | @ <div class='brlist'> |
| 609 | @ <table id='mlinktable'> |
| 610 | @ <thead><tr> |
| 611 | @ <th>Date</th> |
| 612 | @ <th>Check-in</th> |
| @@ -648,11 +648,11 @@ | |
| 648 | }else{ |
| 649 | @ <td><i>(New)</i></td> |
| 650 | } |
| 651 | @ <td align='center'>%s(isExe?"✓":"")</td> |
| 652 | if( zPrior ){ |
| 653 | @ <td><a href='%R/finfo?name=%t(zPrior)'>%h(zPrior)</a></td> |
| 654 | }else{ |
| 655 | @ <td></td> |
| 656 | } |
| 657 | @ </tr> |
| 658 | } |
| @@ -698,11 +698,11 @@ | |
| 698 | const char *zPrior = db_column_text(&q,4); |
| 699 | const char *zParent = db_column_text(&q,5); |
| 700 | int isExec = db_column_int(&q,6); |
| 701 | int isAux = db_column_int(&q,7); |
| 702 | @ <tr> |
| 703 | @ <td><a href='%R/finfo?name=%t(zName)'>%h(zName)</a></td> |
| 704 | if( zParent ){ |
| 705 | @ <td><a href='%R/info/%!S(zPid)'>%S(zParent)</a></td> |
| 706 | }else{ |
| 707 | @ <td><i>(New)</i></td> |
| 708 | } |
| @@ -719,11 +719,11 @@ | |
| 719 | }else{ |
| 720 | @ <td><i>(New)</i></td> |
| 721 | } |
| 722 | @ <td align='center'>%s(isExec?"✓":"")</td> |
| 723 | if( zPrior ){ |
| 724 | @ <td><a href='%R/finfo?name=%t(zPrior)'>%h(zPrior)</a></td> |
| 725 | }else{ |
| 726 | @ <td></td> |
| 727 | } |
| 728 | @ </tr> |
| 729 | } |
| 730 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -276,11 +276,11 @@ | |
| 276 | /* Values for the debug= query parameter to finfo */ |
| 277 | #define FINFO_DEBUG_MLINK 0x01 |
| 278 | |
| 279 | /* |
| 280 | ** WEBPAGE: finfo |
| 281 | ** URL: /finfo/FILENAME |
| 282 | ** |
| 283 | ** Show the change history for a single file. |
| 284 | ** |
| 285 | ** Additional query parameters: |
| 286 | ** |
| @@ -326,11 +326,11 @@ | |
| 326 | @ No such file: %h(zFilename) |
| 327 | style_footer(); |
| 328 | return; |
| 329 | } |
| 330 | if( g.perm.Admin ){ |
| 331 | style_submenu_element("MLink Table", "mtab", "%R/mlink/%t", zFilename); |
| 332 | } |
| 333 | if( baseCheckin ){ |
| 334 | compute_direct_ancestors(baseCheckin); |
| 335 | } |
| 336 | url_add_parameter(&url, "name", zFilename); |
| @@ -399,11 +399,11 @@ | |
| 399 | if( n>0 ){ |
| 400 | blob_appendf(&title, "First %d ancestors of file ", n); |
| 401 | }else{ |
| 402 | blob_appendf(&title, "Ancestors of file "); |
| 403 | } |
| 404 | blob_appendf(&title,"<a href='%R/finfo/%T'>%h</a>", |
| 405 | zFilename, zFilename); |
| 406 | if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 407 | blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid); |
| 408 | if( fShowId ) blob_appendf(&title, " (%d)", baseCheckin); |
| 409 | fossil_free(zUuid); |
| @@ -487,11 +487,11 @@ | |
| 487 | @ <b>Added</b> |
| 488 | }else if( pfnid ){ |
| 489 | char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d", |
| 490 | pfnid); |
| 491 | @ <b>Renamed</b> from |
| 492 | @ %z(href("%R/finfo/%t", zPrevName))%h(zPrevName)</a> |
| 493 | } |
| 494 | @ %z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a> |
| 495 | if( fShowId ){ |
| 496 | @ (%d(frid)) |
| 497 | } |
| @@ -504,11 +504,11 @@ | |
| 504 | " WHERE mid=%d" |
| 505 | " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))", |
| 506 | fmid, zFilename); |
| 507 | if( zNewName ){ |
| 508 | @ <b>Renamed</b> to |
| 509 | @ %z(href("%R/finfo/%t",zNewName))%h(zNewName)</a> by check-in |
| 510 | fossil_free(zNewName); |
| 511 | }else{ |
| 512 | @ <b>Deleted</b> by check-in |
| 513 | } |
| 514 | } |
| @@ -538,11 +538,11 @@ | |
| 538 | @ parents=%d(aParent[0]) |
| 539 | for(ii=1; ii<nParent; ii++){ |
| 540 | @ %d(aParent[ii]) |
| 541 | } |
| 542 | } |
| 543 | zAncLink = href("%R/finfo/%T?ci=%!S&debug=1",zFilename,zCkin); |
| 544 | @ %z(zAncLink)[ancestry]</a> |
| 545 | } |
| 546 | tag_private_status(frid); |
| 547 | @ </td></tr> |
| 548 | } |
| @@ -562,11 +562,11 @@ | |
| 562 | style_footer(); |
| 563 | } |
| 564 | |
| 565 | /* |
| 566 | ** WEBPAGE: mlink |
| 567 | ** URL: /mlink/FILENAME |
| 568 | ** URL: /mlink?ci=NAME |
| 569 | ** |
| 570 | ** Show all MLINK table entries for a particular file, or for |
| 571 | ** a particular check-in. This screen is intended for use by developers |
| 572 | ** in debugging Fossil. |
| @@ -602,11 +602,11 @@ | |
| 602 | " AND event.objid=mlink.mid" |
| 603 | " ORDER BY 1 DESC", |
| 604 | fnid |
| 605 | ); |
| 606 | @ <h1>MLINK table for file |
| 607 | @ <a href='%R/finfo/%t(zFName)'>%h(zFName)</a></h1> |
| 608 | @ <div class='brlist'> |
| 609 | @ <table id='mlinktable'> |
| 610 | @ <thead><tr> |
| 611 | @ <th>Date</th> |
| 612 | @ <th>Check-in</th> |
| @@ -648,11 +648,11 @@ | |
| 648 | }else{ |
| 649 | @ <td><i>(New)</i></td> |
| 650 | } |
| 651 | @ <td align='center'>%s(isExe?"✓":"")</td> |
| 652 | if( zPrior ){ |
| 653 | @ <td><a href='%R/finfo/%t(zPrior)'>%h(zPrior)</a></td> |
| 654 | }else{ |
| 655 | @ <td></td> |
| 656 | } |
| 657 | @ </tr> |
| 658 | } |
| @@ -698,11 +698,11 @@ | |
| 698 | const char *zPrior = db_column_text(&q,4); |
| 699 | const char *zParent = db_column_text(&q,5); |
| 700 | int isExec = db_column_int(&q,6); |
| 701 | int isAux = db_column_int(&q,7); |
| 702 | @ <tr> |
| 703 | @ <td><a href='%R/finfo/%t(zName)'>%h(zName)</a></td> |
| 704 | if( zParent ){ |
| 705 | @ <td><a href='%R/info/%!S(zPid)'>%S(zParent)</a></td> |
| 706 | }else{ |
| 707 | @ <td><i>(New)</i></td> |
| 708 | } |
| @@ -719,11 +719,11 @@ | |
| 719 | }else{ |
| 720 | @ <td><i>(New)</i></td> |
| 721 | } |
| 722 | @ <td align='center'>%s(isExec?"✓":"")</td> |
| 723 | if( zPrior ){ |
| 724 | @ <td><a href='%R/finfo/%t(zPrior)'>%h(zPrior)</a></td> |
| 725 | }else{ |
| 726 | @ <td></td> |
| 727 | } |
| 728 | @ </tr> |
| 729 | } |
| 730 |
+27
-27
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -396,19 +396,19 @@ | ||
| 396 | 396 | append_diff(zOld, zNew, diffFlags, pRe); |
| 397 | 397 | } |
| 398 | 398 | }else{ |
| 399 | 399 | if( zOld && zNew ){ |
| 400 | 400 | if( fossil_strcmp(zOld, zNew)!=0 ){ |
| 401 | - @ Modified %z(href("%R/finfo?name=%T",zName))%h(zName)</a> | |
| 401 | + @ Modified %z(href("%R/finfo/%T",zName))%h(zName)</a> | |
| 402 | 402 | @ from %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a> |
| 403 | 403 | @ to %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 404 | 404 | }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){ |
| 405 | 405 | @ Name change |
| 406 | - @ from %z(href("%R/finfo?name=%T",zOldName))%h(zOldName)</a> | |
| 407 | - @ to %z(href("%R/finfo?name=%T",zName))%h(zName)</a>. | |
| 406 | + @ from %z(href("%R/finfo/%T",zOldName))%h(zOldName)</a> | |
| 407 | + @ to %z(href("%R/finfo/%T",zName))%h(zName)</a>. | |
| 408 | 408 | }else{ |
| 409 | - @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> became | |
| 409 | + @ %z(href("%R/finfo/%T",zName))%h(zName)</a> became | |
| 410 | 410 | if( mperm==PERM_EXE ){ |
| 411 | 411 | @ executable with contents |
| 412 | 412 | }else if( mperm==PERM_LNK ){ |
| 413 | 413 | @ a symlink with target |
| 414 | 414 | }else{ |
| @@ -415,14 +415,14 @@ | ||
| 415 | 415 | @ a regular file with contents |
| 416 | 416 | } |
| 417 | 417 | @ %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 418 | 418 | } |
| 419 | 419 | }else if( zOld ){ |
| 420 | - @ Deleted %z(href("%R/finfo?name=%T",zName))%h(zName)</a> | |
| 420 | + @ Deleted %z(href("%R/finfo/%T",zName))%h(zName)</a> | |
| 421 | 421 | @ version %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a>. |
| 422 | 422 | }else{ |
| 423 | - @ Added %z(href("%R/finfo?name=%T",zName))%h(zName)</a> | |
| 423 | + @ Added %z(href("%R/finfo/%T",zName))%h(zName)</a> | |
| 424 | 424 | @ version %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 425 | 425 | } |
| 426 | 426 | if( diffFlags ){ |
| 427 | 427 | append_diff(zOld, zNew, diffFlags, pRe); |
| 428 | 428 | }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){ |
| @@ -500,12 +500,12 @@ | ||
| 500 | 500 | } |
| 501 | 501 | |
| 502 | 502 | /* |
| 503 | 503 | ** WEBPAGE: vinfo |
| 504 | 504 | ** WEBPAGE: ci |
| 505 | -** URL: /ci?name=ARTIFACTID | |
| 506 | -** URL: /vinfo?name=ARTIFACTID | |
| 505 | +** URL: /ci/ARTIFACTID | |
| 506 | +** URL: /vinfo/ARTIFACTID | |
| 507 | 507 | ** |
| 508 | 508 | ** Display information about a particular check-in. |
| 509 | 509 | ** |
| 510 | 510 | ** We also jump here from /info if the name is a check-in |
| 511 | 511 | ** |
| @@ -676,11 +676,11 @@ | ||
| 676 | 676 | } |
| 677 | 677 | @ </td></tr> |
| 678 | 678 | @ <tr><th>Other Links:</th> |
| 679 | 679 | @ <td> |
| 680 | 680 | @ %z(href("%R/tree?ci=%!S",zUuid))files</a> |
| 681 | - @ | %z(href("%R/fileage?name=%!S",zUuid))file ages</a> | |
| 681 | + @ | %z(href("%R/fileage/%!S",zUuid))file ages</a> | |
| 682 | 682 | @ | %z(href("%R/tree?nofiles&type=tree&ci=%!S",zUuid))folders</a> |
| 683 | 683 | @ | %z(href("%R/artifact/%!S",zUuid))manifest</a> |
| 684 | 684 | if( g.anon.Write ){ |
| 685 | 685 | @ | %z(href("%R/ci_edit?r=%!S",zUuid))edit</a> |
| 686 | 686 | } |
| @@ -768,11 +768,11 @@ | ||
| 768 | 768 | style_footer(); |
| 769 | 769 | } |
| 770 | 770 | |
| 771 | 771 | /* |
| 772 | 772 | ** WEBPAGE: winfo |
| 773 | -** URL: /winfo?name=UUID | |
| 773 | +** URL: /winfo/UUID | |
| 774 | 774 | ** |
| 775 | 775 | ** Display information about a wiki page. |
| 776 | 776 | */ |
| 777 | 777 | void winfo_page(void){ |
| 778 | 778 | int rid; |
| @@ -799,11 +799,11 @@ | ||
| 799 | 799 | ** Next, check if the wiki page still exists; if not, we cannot |
| 800 | 800 | ** redirect to it. |
| 801 | 801 | */ |
| 802 | 802 | if( db_exists("SELECT 1 FROM tagxref JOIN tag USING(tagid)" |
| 803 | 803 | " WHERE rid=%d AND tagname LIKE 'wiki-%%'", rid) ){ |
| 804 | - cgi_redirectf("%R/wiki?name=%T", pWiki->zWikiTitle); | |
| 804 | + cgi_redirectf("%R/wiki/%T", pWiki->zWikiTitle); | |
| 805 | 805 | /*NOTREACHED*/ |
| 806 | 806 | }else{ |
| 807 | 807 | cgi_redirectf("%R/modreq"); |
| 808 | 808 | /*NOTREACHED*/ |
| 809 | 809 | } |
| @@ -814,13 +814,13 @@ | ||
| 814 | 814 | } |
| 815 | 815 | style_header("Update of \"%h\"", pWiki->zWikiTitle); |
| 816 | 816 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 817 | 817 | zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate); |
| 818 | 818 | style_submenu_element("Raw", "Raw", "artifact/%s", zUuid); |
| 819 | - style_submenu_element("History", "History", "whistory?name=%t", | |
| 819 | + style_submenu_element("History", "History", "whistory/%t", | |
| 820 | 820 | pWiki->zWikiTitle); |
| 821 | - style_submenu_element("Page", "Page", "wiki?name=%t", | |
| 821 | + style_submenu_element("Page", "Page", "wiki/%t", | |
| 822 | 822 | pWiki->zWikiTitle); |
| 823 | 823 | login_anonymous_available(); |
| 824 | 824 | @ <div class="section">Overview</div> |
| 825 | 825 | @ <p><table class="label-value"> |
| 826 | 826 | @ <tr><th>Artifact ID:</th> |
| @@ -1245,11 +1245,11 @@ | ||
| 1245 | 1245 | objType |= OBJTYPE_EXE; |
| 1246 | 1246 | }else{ |
| 1247 | 1247 | @ <li>File |
| 1248 | 1248 | } |
| 1249 | 1249 | objType |= OBJTYPE_CONTENT; |
| 1250 | - @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> | |
| 1250 | + @ %z(href("%R/finfo/%T",zName))%h(zName)</a> | |
| 1251 | 1251 | tag_private_status(rid); |
| 1252 | 1252 | if( showDetail ){ |
| 1253 | 1253 | @ <ul> |
| 1254 | 1254 | } |
| 1255 | 1255 | prevName = fossil_strdup(zName); |
| @@ -1269,11 +1269,11 @@ | ||
| 1269 | 1269 | @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a> |
| 1270 | 1270 | } |
| 1271 | 1271 | @ — %!W(zCom) (user: |
| 1272 | 1272 | hyperlink_to_user(zUser,zDate,")"); |
| 1273 | 1273 | if( g.perm.Hyperlink ){ |
| 1274 | - @ %z(href("%R/finfo?name=%T&ci=%!S",zName,zVers))[ancestry]</a> | |
| 1274 | + @ %z(href("%R/finfo/%T?ci=%!S",zName,zVers))[ancestry]</a> | |
| 1275 | 1275 | @ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers)) |
| 1276 | 1276 | @ [annotate]</a> |
| 1277 | 1277 | @ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers)) |
| 1278 | 1278 | @ [blame]</a> |
| 1279 | 1279 | } |
| @@ -1306,11 +1306,11 @@ | ||
| 1306 | 1306 | @ Also wiki page |
| 1307 | 1307 | }else{ |
| 1308 | 1308 | @ Wiki page |
| 1309 | 1309 | } |
| 1310 | 1310 | objType |= OBJTYPE_WIKI; |
| 1311 | - @ [%z(href("%R/wiki?name=%t",zPagename))%h(zPagename)</a>] by | |
| 1311 | + @ [%z(href("%R/wiki/%t",zPagename))%h(zPagename)</a>] by | |
| 1312 | 1312 | hyperlink_to_user(zUser,zDate," on"); |
| 1313 | 1313 | hyperlink_to_date(zDate,"."); |
| 1314 | 1314 | nWiki++; |
| 1315 | 1315 | cnt++; |
| 1316 | 1316 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| @@ -1384,17 +1384,17 @@ | ||
| 1384 | 1384 | @ Attachment "%h(zFilename)" to |
| 1385 | 1385 | } |
| 1386 | 1386 | objType |= OBJTYPE_ATTACHMENT; |
| 1387 | 1387 | if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){ |
| 1388 | 1388 | if( g.perm.Hyperlink && g.anon.RdTkt ){ |
| 1389 | - @ ticket [%z(href("%R/tktview?name=%!S",zTarget))%S(zTarget)</a>] | |
| 1389 | + @ ticket [%z(href("%R/tktview/%!S",zTarget))%S(zTarget)</a>] | |
| 1390 | 1390 | }else{ |
| 1391 | 1391 | @ ticket [%S(zTarget)] |
| 1392 | 1392 | } |
| 1393 | 1393 | }else{ |
| 1394 | 1394 | if( g.perm.Hyperlink && g.anon.RdWiki ){ |
| 1395 | - @ wiki page [%z(href("%R/wiki?name=%t",zTarget))%h(zTarget)</a>] | |
| 1395 | + @ wiki page [%z(href("%R/wiki/%t",zTarget))%h(zTarget)</a>] | |
| 1396 | 1396 | }else{ |
| 1397 | 1397 | @ wiki page [%h(zTarget)] |
| 1398 | 1398 | } |
| 1399 | 1399 | } |
| 1400 | 1400 | @ added by |
| @@ -1520,11 +1520,11 @@ | ||
| 1520 | 1520 | style_footer(); |
| 1521 | 1521 | } |
| 1522 | 1522 | |
| 1523 | 1523 | /* |
| 1524 | 1524 | ** WEBPAGE: raw |
| 1525 | -** URL: /raw?name=ARTIFACTID&m=TYPE | |
| 1525 | +** URL: /raw/ARTIFACTID&m=TYPE | |
| 1526 | 1526 | ** |
| 1527 | 1527 | ** Return the uninterpreted content of an artifact. Used primarily |
| 1528 | 1528 | ** to view artifacts that are images. |
| 1529 | 1529 | */ |
| 1530 | 1530 | void rawartifact_page(void){ |
| @@ -1612,11 +1612,11 @@ | ||
| 1612 | 1612 | } |
| 1613 | 1613 | } |
| 1614 | 1614 | |
| 1615 | 1615 | /* |
| 1616 | 1616 | ** WEBPAGE: hexdump |
| 1617 | -** URL: /hexdump?name=ARTIFACTID | |
| 1617 | +** URL: /hexdump/ARTIFACTID | |
| 1618 | 1618 | ** |
| 1619 | 1619 | ** Show the complete content of a file identified by ARTIFACTID |
| 1620 | 1620 | ** as preformatted text. |
| 1621 | 1621 | ** |
| 1622 | 1622 | ** Other parameters: |
| @@ -1653,11 +1653,11 @@ | ||
| 1653 | 1653 | } |
| 1654 | 1654 | blob_zero(&downloadName); |
| 1655 | 1655 | if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL; |
| 1656 | 1656 | object_description(rid, objdescFlags, &downloadName); |
| 1657 | 1657 | style_submenu_element("Download", "Download", |
| 1658 | - "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid); | |
| 1658 | + "%s/raw/%T/%s", g.zTop, blob_str(&downloadName), zUuid); | |
| 1659 | 1659 | @ <hr /> |
| 1660 | 1660 | content_get(rid, &content); |
| 1661 | 1661 | @ <blockquote><pre> |
| 1662 | 1662 | hexdump(&content); |
| 1663 | 1663 | @ </pre></blockquote> |
| @@ -1851,11 +1851,11 @@ | ||
| 1851 | 1851 | if( rid==0 ) fossil_redirect_home(); |
| 1852 | 1852 | if( descOnly || P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL; |
| 1853 | 1853 | blob_zero(&downloadName); |
| 1854 | 1854 | objType = object_description(rid, objdescFlags, &downloadName); |
| 1855 | 1855 | if( !descOnly && P("download")!=0 ){ |
| 1856 | - cgi_redirectf("%R/raw/%T?name=%s", blob_str(&downloadName), | |
| 1856 | + cgi_redirectf("%R/raw/%T/%s", blob_str(&downloadName), | |
| 1857 | 1857 | db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid)); |
| 1858 | 1858 | /*NOTREACHED*/ |
| 1859 | 1859 | } |
| 1860 | 1860 | if( g.perm.Admin ){ |
| 1861 | 1861 | const char *zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid); |
| @@ -1889,11 +1889,11 @@ | ||
| 1889 | 1889 | @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p> |
| 1890 | 1890 | } |
| 1891 | 1891 | db_finalize(&q); |
| 1892 | 1892 | } |
| 1893 | 1893 | style_submenu_element("Download", "Download", |
| 1894 | - "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid); | |
| 1894 | + "%R/raw/%T/%s", blob_str(&downloadName), zUuid); | |
| 1895 | 1895 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 1896 | 1896 | style_submenu_element("Check-ins Using", "Check-ins Using", |
| 1897 | 1897 | "%R/timeline?n=200&uf=%s",zUuid); |
| 1898 | 1898 | } |
| 1899 | 1899 | asText = P("txt")!=0; |
| @@ -1938,11 +1938,11 @@ | ||
| 1938 | 1938 | @ width="100%%" frameborder="0" marginwidth="0" marginheight="0" |
| 1939 | 1939 | @ sandbox="allow-same-origin" |
| 1940 | 1940 | @ onload="this.height=this.contentDocument.documentElement.scrollHeight;"> |
| 1941 | 1941 | @ </iframe> |
| 1942 | 1942 | }else{ |
| 1943 | - style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid); | |
| 1943 | + style_submenu_element("Hex","Hex", "%s/hexdump/%s", g.zTop, zUuid); | |
| 1944 | 1944 | blob_to_utf8_no_bom(&content, 0); |
| 1945 | 1945 | zMime = mimetype_from_content(&content); |
| 1946 | 1946 | @ <blockquote> |
| 1947 | 1947 | if( zMime==0 ){ |
| 1948 | 1948 | const char *z; |
| @@ -1967,11 +1967,11 @@ | ||
| 1967 | 1967 | style_footer(); |
| 1968 | 1968 | } |
| 1969 | 1969 | |
| 1970 | 1970 | /* |
| 1971 | 1971 | ** WEBPAGE: tinfo |
| 1972 | -** URL: /tinfo?name=ARTIFACTID | |
| 1972 | +** URL: /tinfo/ARTIFACTID | |
| 1973 | 1973 | ** |
| 1974 | 1974 | ** Show the details of a ticket change control artifact. |
| 1975 | 1975 | */ |
| 1976 | 1976 | void tinfo_page(void){ |
| 1977 | 1977 | int rid; |
| @@ -2485,11 +2485,11 @@ | ||
| 2485 | 2485 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 2486 | 2486 | zComment = db_text(0, "SELECT coalesce(ecomment,comment)" |
| 2487 | 2487 | " FROM event WHERE objid=%d", rid); |
| 2488 | 2488 | if( zComment==0 ) fossil_redirect_home(); |
| 2489 | 2489 | if( P("cancel") ){ |
| 2490 | - cgi_redirectf("ci?name=%s", zUuid); | |
| 2490 | + cgi_redirectf("ci/%s", zUuid); | |
| 2491 | 2491 | } |
| 2492 | 2492 | if( g.perm.Setup ) zChngTime = P("chngtime"); |
| 2493 | 2493 | zNewComment = PD("c",zComment); |
| 2494 | 2494 | zUser = db_text(0, "SELECT coalesce(euser,user)" |
| 2495 | 2495 | " FROM event WHERE objid=%d", rid); |
| @@ -2548,11 +2548,11 @@ | ||
| 2548 | 2548 | if( zHideFlag[0] ) hide_branch(); |
| 2549 | 2549 | if( zCloseFlag[0] ) close_leaf(rid); |
| 2550 | 2550 | if( zNewTagFlag[0] && zNewTag[0] ) add_tag(zNewTag); |
| 2551 | 2551 | if( zNewBrFlag[0] && zNewBranch[0] ) change_branch(rid,zNewBranch); |
| 2552 | 2552 | apply_newtags(&ctrl, rid, zUuid); |
| 2553 | - cgi_redirectf("ci?name=%s", zUuid); | |
| 2553 | + cgi_redirectf("ci/%s", zUuid); | |
| 2554 | 2554 | } |
| 2555 | 2555 | blob_zero(&comment); |
| 2556 | 2556 | blob_append(&comment, zNewComment, -1); |
| 2557 | 2557 | zUuid[10] = 0; |
| 2558 | 2558 | style_header("Edit Check-in [%s]", zUuid); |
| 2559 | 2559 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -396,19 +396,19 @@ | |
| 396 | append_diff(zOld, zNew, diffFlags, pRe); |
| 397 | } |
| 398 | }else{ |
| 399 | if( zOld && zNew ){ |
| 400 | if( fossil_strcmp(zOld, zNew)!=0 ){ |
| 401 | @ Modified %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 402 | @ from %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a> |
| 403 | @ to %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 404 | }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){ |
| 405 | @ Name change |
| 406 | @ from %z(href("%R/finfo?name=%T",zOldName))%h(zOldName)</a> |
| 407 | @ to %z(href("%R/finfo?name=%T",zName))%h(zName)</a>. |
| 408 | }else{ |
| 409 | @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> became |
| 410 | if( mperm==PERM_EXE ){ |
| 411 | @ executable with contents |
| 412 | }else if( mperm==PERM_LNK ){ |
| 413 | @ a symlink with target |
| 414 | }else{ |
| @@ -415,14 +415,14 @@ | |
| 415 | @ a regular file with contents |
| 416 | } |
| 417 | @ %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 418 | } |
| 419 | }else if( zOld ){ |
| 420 | @ Deleted %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 421 | @ version %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a>. |
| 422 | }else{ |
| 423 | @ Added %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 424 | @ version %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 425 | } |
| 426 | if( diffFlags ){ |
| 427 | append_diff(zOld, zNew, diffFlags, pRe); |
| 428 | }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){ |
| @@ -500,12 +500,12 @@ | |
| 500 | } |
| 501 | |
| 502 | /* |
| 503 | ** WEBPAGE: vinfo |
| 504 | ** WEBPAGE: ci |
| 505 | ** URL: /ci?name=ARTIFACTID |
| 506 | ** URL: /vinfo?name=ARTIFACTID |
| 507 | ** |
| 508 | ** Display information about a particular check-in. |
| 509 | ** |
| 510 | ** We also jump here from /info if the name is a check-in |
| 511 | ** |
| @@ -676,11 +676,11 @@ | |
| 676 | } |
| 677 | @ </td></tr> |
| 678 | @ <tr><th>Other Links:</th> |
| 679 | @ <td> |
| 680 | @ %z(href("%R/tree?ci=%!S",zUuid))files</a> |
| 681 | @ | %z(href("%R/fileage?name=%!S",zUuid))file ages</a> |
| 682 | @ | %z(href("%R/tree?nofiles&type=tree&ci=%!S",zUuid))folders</a> |
| 683 | @ | %z(href("%R/artifact/%!S",zUuid))manifest</a> |
| 684 | if( g.anon.Write ){ |
| 685 | @ | %z(href("%R/ci_edit?r=%!S",zUuid))edit</a> |
| 686 | } |
| @@ -768,11 +768,11 @@ | |
| 768 | style_footer(); |
| 769 | } |
| 770 | |
| 771 | /* |
| 772 | ** WEBPAGE: winfo |
| 773 | ** URL: /winfo?name=UUID |
| 774 | ** |
| 775 | ** Display information about a wiki page. |
| 776 | */ |
| 777 | void winfo_page(void){ |
| 778 | int rid; |
| @@ -799,11 +799,11 @@ | |
| 799 | ** Next, check if the wiki page still exists; if not, we cannot |
| 800 | ** redirect to it. |
| 801 | */ |
| 802 | if( db_exists("SELECT 1 FROM tagxref JOIN tag USING(tagid)" |
| 803 | " WHERE rid=%d AND tagname LIKE 'wiki-%%'", rid) ){ |
| 804 | cgi_redirectf("%R/wiki?name=%T", pWiki->zWikiTitle); |
| 805 | /*NOTREACHED*/ |
| 806 | }else{ |
| 807 | cgi_redirectf("%R/modreq"); |
| 808 | /*NOTREACHED*/ |
| 809 | } |
| @@ -814,13 +814,13 @@ | |
| 814 | } |
| 815 | style_header("Update of \"%h\"", pWiki->zWikiTitle); |
| 816 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 817 | zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate); |
| 818 | style_submenu_element("Raw", "Raw", "artifact/%s", zUuid); |
| 819 | style_submenu_element("History", "History", "whistory?name=%t", |
| 820 | pWiki->zWikiTitle); |
| 821 | style_submenu_element("Page", "Page", "wiki?name=%t", |
| 822 | pWiki->zWikiTitle); |
| 823 | login_anonymous_available(); |
| 824 | @ <div class="section">Overview</div> |
| 825 | @ <p><table class="label-value"> |
| 826 | @ <tr><th>Artifact ID:</th> |
| @@ -1245,11 +1245,11 @@ | |
| 1245 | objType |= OBJTYPE_EXE; |
| 1246 | }else{ |
| 1247 | @ <li>File |
| 1248 | } |
| 1249 | objType |= OBJTYPE_CONTENT; |
| 1250 | @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> |
| 1251 | tag_private_status(rid); |
| 1252 | if( showDetail ){ |
| 1253 | @ <ul> |
| 1254 | } |
| 1255 | prevName = fossil_strdup(zName); |
| @@ -1269,11 +1269,11 @@ | |
| 1269 | @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a> |
| 1270 | } |
| 1271 | @ — %!W(zCom) (user: |
| 1272 | hyperlink_to_user(zUser,zDate,")"); |
| 1273 | if( g.perm.Hyperlink ){ |
| 1274 | @ %z(href("%R/finfo?name=%T&ci=%!S",zName,zVers))[ancestry]</a> |
| 1275 | @ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers)) |
| 1276 | @ [annotate]</a> |
| 1277 | @ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers)) |
| 1278 | @ [blame]</a> |
| 1279 | } |
| @@ -1306,11 +1306,11 @@ | |
| 1306 | @ Also wiki page |
| 1307 | }else{ |
| 1308 | @ Wiki page |
| 1309 | } |
| 1310 | objType |= OBJTYPE_WIKI; |
| 1311 | @ [%z(href("%R/wiki?name=%t",zPagename))%h(zPagename)</a>] by |
| 1312 | hyperlink_to_user(zUser,zDate," on"); |
| 1313 | hyperlink_to_date(zDate,"."); |
| 1314 | nWiki++; |
| 1315 | cnt++; |
| 1316 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| @@ -1384,17 +1384,17 @@ | |
| 1384 | @ Attachment "%h(zFilename)" to |
| 1385 | } |
| 1386 | objType |= OBJTYPE_ATTACHMENT; |
| 1387 | if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){ |
| 1388 | if( g.perm.Hyperlink && g.anon.RdTkt ){ |
| 1389 | @ ticket [%z(href("%R/tktview?name=%!S",zTarget))%S(zTarget)</a>] |
| 1390 | }else{ |
| 1391 | @ ticket [%S(zTarget)] |
| 1392 | } |
| 1393 | }else{ |
| 1394 | if( g.perm.Hyperlink && g.anon.RdWiki ){ |
| 1395 | @ wiki page [%z(href("%R/wiki?name=%t",zTarget))%h(zTarget)</a>] |
| 1396 | }else{ |
| 1397 | @ wiki page [%h(zTarget)] |
| 1398 | } |
| 1399 | } |
| 1400 | @ added by |
| @@ -1520,11 +1520,11 @@ | |
| 1520 | style_footer(); |
| 1521 | } |
| 1522 | |
| 1523 | /* |
| 1524 | ** WEBPAGE: raw |
| 1525 | ** URL: /raw?name=ARTIFACTID&m=TYPE |
| 1526 | ** |
| 1527 | ** Return the uninterpreted content of an artifact. Used primarily |
| 1528 | ** to view artifacts that are images. |
| 1529 | */ |
| 1530 | void rawartifact_page(void){ |
| @@ -1612,11 +1612,11 @@ | |
| 1612 | } |
| 1613 | } |
| 1614 | |
| 1615 | /* |
| 1616 | ** WEBPAGE: hexdump |
| 1617 | ** URL: /hexdump?name=ARTIFACTID |
| 1618 | ** |
| 1619 | ** Show the complete content of a file identified by ARTIFACTID |
| 1620 | ** as preformatted text. |
| 1621 | ** |
| 1622 | ** Other parameters: |
| @@ -1653,11 +1653,11 @@ | |
| 1653 | } |
| 1654 | blob_zero(&downloadName); |
| 1655 | if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL; |
| 1656 | object_description(rid, objdescFlags, &downloadName); |
| 1657 | style_submenu_element("Download", "Download", |
| 1658 | "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid); |
| 1659 | @ <hr /> |
| 1660 | content_get(rid, &content); |
| 1661 | @ <blockquote><pre> |
| 1662 | hexdump(&content); |
| 1663 | @ </pre></blockquote> |
| @@ -1851,11 +1851,11 @@ | |
| 1851 | if( rid==0 ) fossil_redirect_home(); |
| 1852 | if( descOnly || P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL; |
| 1853 | blob_zero(&downloadName); |
| 1854 | objType = object_description(rid, objdescFlags, &downloadName); |
| 1855 | if( !descOnly && P("download")!=0 ){ |
| 1856 | cgi_redirectf("%R/raw/%T?name=%s", blob_str(&downloadName), |
| 1857 | db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid)); |
| 1858 | /*NOTREACHED*/ |
| 1859 | } |
| 1860 | if( g.perm.Admin ){ |
| 1861 | const char *zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid); |
| @@ -1889,11 +1889,11 @@ | |
| 1889 | @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p> |
| 1890 | } |
| 1891 | db_finalize(&q); |
| 1892 | } |
| 1893 | style_submenu_element("Download", "Download", |
| 1894 | "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid); |
| 1895 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 1896 | style_submenu_element("Check-ins Using", "Check-ins Using", |
| 1897 | "%R/timeline?n=200&uf=%s",zUuid); |
| 1898 | } |
| 1899 | asText = P("txt")!=0; |
| @@ -1938,11 +1938,11 @@ | |
| 1938 | @ width="100%%" frameborder="0" marginwidth="0" marginheight="0" |
| 1939 | @ sandbox="allow-same-origin" |
| 1940 | @ onload="this.height=this.contentDocument.documentElement.scrollHeight;"> |
| 1941 | @ </iframe> |
| 1942 | }else{ |
| 1943 | style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid); |
| 1944 | blob_to_utf8_no_bom(&content, 0); |
| 1945 | zMime = mimetype_from_content(&content); |
| 1946 | @ <blockquote> |
| 1947 | if( zMime==0 ){ |
| 1948 | const char *z; |
| @@ -1967,11 +1967,11 @@ | |
| 1967 | style_footer(); |
| 1968 | } |
| 1969 | |
| 1970 | /* |
| 1971 | ** WEBPAGE: tinfo |
| 1972 | ** URL: /tinfo?name=ARTIFACTID |
| 1973 | ** |
| 1974 | ** Show the details of a ticket change control artifact. |
| 1975 | */ |
| 1976 | void tinfo_page(void){ |
| 1977 | int rid; |
| @@ -2485,11 +2485,11 @@ | |
| 2485 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 2486 | zComment = db_text(0, "SELECT coalesce(ecomment,comment)" |
| 2487 | " FROM event WHERE objid=%d", rid); |
| 2488 | if( zComment==0 ) fossil_redirect_home(); |
| 2489 | if( P("cancel") ){ |
| 2490 | cgi_redirectf("ci?name=%s", zUuid); |
| 2491 | } |
| 2492 | if( g.perm.Setup ) zChngTime = P("chngtime"); |
| 2493 | zNewComment = PD("c",zComment); |
| 2494 | zUser = db_text(0, "SELECT coalesce(euser,user)" |
| 2495 | " FROM event WHERE objid=%d", rid); |
| @@ -2548,11 +2548,11 @@ | |
| 2548 | if( zHideFlag[0] ) hide_branch(); |
| 2549 | if( zCloseFlag[0] ) close_leaf(rid); |
| 2550 | if( zNewTagFlag[0] && zNewTag[0] ) add_tag(zNewTag); |
| 2551 | if( zNewBrFlag[0] && zNewBranch[0] ) change_branch(rid,zNewBranch); |
| 2552 | apply_newtags(&ctrl, rid, zUuid); |
| 2553 | cgi_redirectf("ci?name=%s", zUuid); |
| 2554 | } |
| 2555 | blob_zero(&comment); |
| 2556 | blob_append(&comment, zNewComment, -1); |
| 2557 | zUuid[10] = 0; |
| 2558 | style_header("Edit Check-in [%s]", zUuid); |
| 2559 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -396,19 +396,19 @@ | |
| 396 | append_diff(zOld, zNew, diffFlags, pRe); |
| 397 | } |
| 398 | }else{ |
| 399 | if( zOld && zNew ){ |
| 400 | if( fossil_strcmp(zOld, zNew)!=0 ){ |
| 401 | @ Modified %z(href("%R/finfo/%T",zName))%h(zName)</a> |
| 402 | @ from %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a> |
| 403 | @ to %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 404 | }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){ |
| 405 | @ Name change |
| 406 | @ from %z(href("%R/finfo/%T",zOldName))%h(zOldName)</a> |
| 407 | @ to %z(href("%R/finfo/%T",zName))%h(zName)</a>. |
| 408 | }else{ |
| 409 | @ %z(href("%R/finfo/%T",zName))%h(zName)</a> became |
| 410 | if( mperm==PERM_EXE ){ |
| 411 | @ executable with contents |
| 412 | }else if( mperm==PERM_LNK ){ |
| 413 | @ a symlink with target |
| 414 | }else{ |
| @@ -415,14 +415,14 @@ | |
| 415 | @ a regular file with contents |
| 416 | } |
| 417 | @ %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 418 | } |
| 419 | }else if( zOld ){ |
| 420 | @ Deleted %z(href("%R/finfo/%T",zName))%h(zName)</a> |
| 421 | @ version %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a>. |
| 422 | }else{ |
| 423 | @ Added %z(href("%R/finfo/%T",zName))%h(zName)</a> |
| 424 | @ version %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>. |
| 425 | } |
| 426 | if( diffFlags ){ |
| 427 | append_diff(zOld, zNew, diffFlags, pRe); |
| 428 | }else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){ |
| @@ -500,12 +500,12 @@ | |
| 500 | } |
| 501 | |
| 502 | /* |
| 503 | ** WEBPAGE: vinfo |
| 504 | ** WEBPAGE: ci |
| 505 | ** URL: /ci/ARTIFACTID |
| 506 | ** URL: /vinfo/ARTIFACTID |
| 507 | ** |
| 508 | ** Display information about a particular check-in. |
| 509 | ** |
| 510 | ** We also jump here from /info if the name is a check-in |
| 511 | ** |
| @@ -676,11 +676,11 @@ | |
| 676 | } |
| 677 | @ </td></tr> |
| 678 | @ <tr><th>Other Links:</th> |
| 679 | @ <td> |
| 680 | @ %z(href("%R/tree?ci=%!S",zUuid))files</a> |
| 681 | @ | %z(href("%R/fileage/%!S",zUuid))file ages</a> |
| 682 | @ | %z(href("%R/tree?nofiles&type=tree&ci=%!S",zUuid))folders</a> |
| 683 | @ | %z(href("%R/artifact/%!S",zUuid))manifest</a> |
| 684 | if( g.anon.Write ){ |
| 685 | @ | %z(href("%R/ci_edit?r=%!S",zUuid))edit</a> |
| 686 | } |
| @@ -768,11 +768,11 @@ | |
| 768 | style_footer(); |
| 769 | } |
| 770 | |
| 771 | /* |
| 772 | ** WEBPAGE: winfo |
| 773 | ** URL: /winfo/UUID |
| 774 | ** |
| 775 | ** Display information about a wiki page. |
| 776 | */ |
| 777 | void winfo_page(void){ |
| 778 | int rid; |
| @@ -799,11 +799,11 @@ | |
| 799 | ** Next, check if the wiki page still exists; if not, we cannot |
| 800 | ** redirect to it. |
| 801 | */ |
| 802 | if( db_exists("SELECT 1 FROM tagxref JOIN tag USING(tagid)" |
| 803 | " WHERE rid=%d AND tagname LIKE 'wiki-%%'", rid) ){ |
| 804 | cgi_redirectf("%R/wiki/%T", pWiki->zWikiTitle); |
| 805 | /*NOTREACHED*/ |
| 806 | }else{ |
| 807 | cgi_redirectf("%R/modreq"); |
| 808 | /*NOTREACHED*/ |
| 809 | } |
| @@ -814,13 +814,13 @@ | |
| 814 | } |
| 815 | style_header("Update of \"%h\"", pWiki->zWikiTitle); |
| 816 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 817 | zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate); |
| 818 | style_submenu_element("Raw", "Raw", "artifact/%s", zUuid); |
| 819 | style_submenu_element("History", "History", "whistory/%t", |
| 820 | pWiki->zWikiTitle); |
| 821 | style_submenu_element("Page", "Page", "wiki/%t", |
| 822 | pWiki->zWikiTitle); |
| 823 | login_anonymous_available(); |
| 824 | @ <div class="section">Overview</div> |
| 825 | @ <p><table class="label-value"> |
| 826 | @ <tr><th>Artifact ID:</th> |
| @@ -1245,11 +1245,11 @@ | |
| 1245 | objType |= OBJTYPE_EXE; |
| 1246 | }else{ |
| 1247 | @ <li>File |
| 1248 | } |
| 1249 | objType |= OBJTYPE_CONTENT; |
| 1250 | @ %z(href("%R/finfo/%T",zName))%h(zName)</a> |
| 1251 | tag_private_status(rid); |
| 1252 | if( showDetail ){ |
| 1253 | @ <ul> |
| 1254 | } |
| 1255 | prevName = fossil_strdup(zName); |
| @@ -1269,11 +1269,11 @@ | |
| 1269 | @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a> |
| 1270 | } |
| 1271 | @ — %!W(zCom) (user: |
| 1272 | hyperlink_to_user(zUser,zDate,")"); |
| 1273 | if( g.perm.Hyperlink ){ |
| 1274 | @ %z(href("%R/finfo/%T?ci=%!S",zName,zVers))[ancestry]</a> |
| 1275 | @ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers)) |
| 1276 | @ [annotate]</a> |
| 1277 | @ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers)) |
| 1278 | @ [blame]</a> |
| 1279 | } |
| @@ -1306,11 +1306,11 @@ | |
| 1306 | @ Also wiki page |
| 1307 | }else{ |
| 1308 | @ Wiki page |
| 1309 | } |
| 1310 | objType |= OBJTYPE_WIKI; |
| 1311 | @ [%z(href("%R/wiki/%t",zPagename))%h(zPagename)</a>] by |
| 1312 | hyperlink_to_user(zUser,zDate," on"); |
| 1313 | hyperlink_to_date(zDate,"."); |
| 1314 | nWiki++; |
| 1315 | cnt++; |
| 1316 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| @@ -1384,17 +1384,17 @@ | |
| 1384 | @ Attachment "%h(zFilename)" to |
| 1385 | } |
| 1386 | objType |= OBJTYPE_ATTACHMENT; |
| 1387 | if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){ |
| 1388 | if( g.perm.Hyperlink && g.anon.RdTkt ){ |
| 1389 | @ ticket [%z(href("%R/tktview/%!S",zTarget))%S(zTarget)</a>] |
| 1390 | }else{ |
| 1391 | @ ticket [%S(zTarget)] |
| 1392 | } |
| 1393 | }else{ |
| 1394 | if( g.perm.Hyperlink && g.anon.RdWiki ){ |
| 1395 | @ wiki page [%z(href("%R/wiki/%t",zTarget))%h(zTarget)</a>] |
| 1396 | }else{ |
| 1397 | @ wiki page [%h(zTarget)] |
| 1398 | } |
| 1399 | } |
| 1400 | @ added by |
| @@ -1520,11 +1520,11 @@ | |
| 1520 | style_footer(); |
| 1521 | } |
| 1522 | |
| 1523 | /* |
| 1524 | ** WEBPAGE: raw |
| 1525 | ** URL: /raw/ARTIFACTID&m=TYPE |
| 1526 | ** |
| 1527 | ** Return the uninterpreted content of an artifact. Used primarily |
| 1528 | ** to view artifacts that are images. |
| 1529 | */ |
| 1530 | void rawartifact_page(void){ |
| @@ -1612,11 +1612,11 @@ | |
| 1612 | } |
| 1613 | } |
| 1614 | |
| 1615 | /* |
| 1616 | ** WEBPAGE: hexdump |
| 1617 | ** URL: /hexdump/ARTIFACTID |
| 1618 | ** |
| 1619 | ** Show the complete content of a file identified by ARTIFACTID |
| 1620 | ** as preformatted text. |
| 1621 | ** |
| 1622 | ** Other parameters: |
| @@ -1653,11 +1653,11 @@ | |
| 1653 | } |
| 1654 | blob_zero(&downloadName); |
| 1655 | if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL; |
| 1656 | object_description(rid, objdescFlags, &downloadName); |
| 1657 | style_submenu_element("Download", "Download", |
| 1658 | "%s/raw/%T/%s", g.zTop, blob_str(&downloadName), zUuid); |
| 1659 | @ <hr /> |
| 1660 | content_get(rid, &content); |
| 1661 | @ <blockquote><pre> |
| 1662 | hexdump(&content); |
| 1663 | @ </pre></blockquote> |
| @@ -1851,11 +1851,11 @@ | |
| 1851 | if( rid==0 ) fossil_redirect_home(); |
| 1852 | if( descOnly || P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL; |
| 1853 | blob_zero(&downloadName); |
| 1854 | objType = object_description(rid, objdescFlags, &downloadName); |
| 1855 | if( !descOnly && P("download")!=0 ){ |
| 1856 | cgi_redirectf("%R/raw/%T/%s", blob_str(&downloadName), |
| 1857 | db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid)); |
| 1858 | /*NOTREACHED*/ |
| 1859 | } |
| 1860 | if( g.perm.Admin ){ |
| 1861 | const char *zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid); |
| @@ -1889,11 +1889,11 @@ | |
| 1889 | @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p> |
| 1890 | } |
| 1891 | db_finalize(&q); |
| 1892 | } |
| 1893 | style_submenu_element("Download", "Download", |
| 1894 | "%R/raw/%T/%s", blob_str(&downloadName), zUuid); |
| 1895 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 1896 | style_submenu_element("Check-ins Using", "Check-ins Using", |
| 1897 | "%R/timeline?n=200&uf=%s",zUuid); |
| 1898 | } |
| 1899 | asText = P("txt")!=0; |
| @@ -1938,11 +1938,11 @@ | |
| 1938 | @ width="100%%" frameborder="0" marginwidth="0" marginheight="0" |
| 1939 | @ sandbox="allow-same-origin" |
| 1940 | @ onload="this.height=this.contentDocument.documentElement.scrollHeight;"> |
| 1941 | @ </iframe> |
| 1942 | }else{ |
| 1943 | style_submenu_element("Hex","Hex", "%s/hexdump/%s", g.zTop, zUuid); |
| 1944 | blob_to_utf8_no_bom(&content, 0); |
| 1945 | zMime = mimetype_from_content(&content); |
| 1946 | @ <blockquote> |
| 1947 | if( zMime==0 ){ |
| 1948 | const char *z; |
| @@ -1967,11 +1967,11 @@ | |
| 1967 | style_footer(); |
| 1968 | } |
| 1969 | |
| 1970 | /* |
| 1971 | ** WEBPAGE: tinfo |
| 1972 | ** URL: /tinfo/ARTIFACTID |
| 1973 | ** |
| 1974 | ** Show the details of a ticket change control artifact. |
| 1975 | */ |
| 1976 | void tinfo_page(void){ |
| 1977 | int rid; |
| @@ -2485,11 +2485,11 @@ | |
| 2485 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 2486 | zComment = db_text(0, "SELECT coalesce(ecomment,comment)" |
| 2487 | " FROM event WHERE objid=%d", rid); |
| 2488 | if( zComment==0 ) fossil_redirect_home(); |
| 2489 | if( P("cancel") ){ |
| 2490 | cgi_redirectf("ci/%s", zUuid); |
| 2491 | } |
| 2492 | if( g.perm.Setup ) zChngTime = P("chngtime"); |
| 2493 | zNewComment = PD("c",zComment); |
| 2494 | zUser = db_text(0, "SELECT coalesce(euser,user)" |
| 2495 | " FROM event WHERE objid=%d", rid); |
| @@ -2548,11 +2548,11 @@ | |
| 2548 | if( zHideFlag[0] ) hide_branch(); |
| 2549 | if( zCloseFlag[0] ) close_leaf(rid); |
| 2550 | if( zNewTagFlag[0] && zNewTag[0] ) add_tag(zNewTag); |
| 2551 | if( zNewBrFlag[0] && zNewBranch[0] ) change_branch(rid,zNewBranch); |
| 2552 | apply_newtags(&ctrl, rid, zUuid); |
| 2553 | cgi_redirectf("ci/%s", zUuid); |
| 2554 | } |
| 2555 | blob_zero(&comment); |
| 2556 | blob_append(&comment, zNewComment, -1); |
| 2557 | zUuid[10] = 0; |
| 2558 | style_header("Edit Check-in [%s]", zUuid); |
| 2559 |
+1
-1
| --- src/json_dir.c | ||
| +++ src/json_dir.c | ||
| @@ -260,11 +260,11 @@ | ||
| 260 | 260 | cson_object_set_s(zEntry, zKeySize, |
| 261 | 261 | cson_value_new_integer( (cson_int_t)sz )); |
| 262 | 262 | cson_object_set_s(zEntry, zKeyTime, |
| 263 | 263 | cson_value_new_integer( (cson_int_t)ts )); |
| 264 | 264 | cson_object_set_s(zEntry, zKeyRaw, |
| 265 | - json_new_string_f("/raw/%T?name=%t", | |
| 265 | + json_new_string_f("/raw/%T/%t", | |
| 266 | 266 | fullName, u)); |
| 267 | 267 | } |
| 268 | 268 | } |
| 269 | 269 | db_finalize(&q); |
| 270 | 270 | if(pM){ |
| 271 | 271 |
| --- src/json_dir.c | |
| +++ src/json_dir.c | |
| @@ -260,11 +260,11 @@ | |
| 260 | cson_object_set_s(zEntry, zKeySize, |
| 261 | cson_value_new_integer( (cson_int_t)sz )); |
| 262 | cson_object_set_s(zEntry, zKeyTime, |
| 263 | cson_value_new_integer( (cson_int_t)ts )); |
| 264 | cson_object_set_s(zEntry, zKeyRaw, |
| 265 | json_new_string_f("/raw/%T?name=%t", |
| 266 | fullName, u)); |
| 267 | } |
| 268 | } |
| 269 | db_finalize(&q); |
| 270 | if(pM){ |
| 271 |
| --- src/json_dir.c | |
| +++ src/json_dir.c | |
| @@ -260,11 +260,11 @@ | |
| 260 | cson_object_set_s(zEntry, zKeySize, |
| 261 | cson_value_new_integer( (cson_int_t)sz )); |
| 262 | cson_object_set_s(zEntry, zKeyTime, |
| 263 | cson_value_new_integer( (cson_int_t)ts )); |
| 264 | cson_object_set_s(zEntry, zKeyRaw, |
| 265 | json_new_string_f("/raw/%T/%t", |
| 266 | fullName, u)); |
| 267 | } |
| 268 | } |
| 269 | db_finalize(&q); |
| 270 | if(pM){ |
| 271 |
+1
-1
| --- src/json_timeline.c | ||
| +++ src/json_timeline.c | ||
| @@ -350,11 +350,11 @@ | ||
| 350 | 350 | } |
| 351 | 351 | cson_object_set(row, "size", json_new_int(db_column_int(&q,5))); |
| 352 | 352 | |
| 353 | 353 | cson_object_set(row, "state", |
| 354 | 354 | json_new_string(json_artifact_status_to_string(isNew,isDel))); |
| 355 | - zDownload = mprintf("/raw/%s?name=%s", | |
| 355 | + zDownload = mprintf("/raw/%s/%s", | |
| 356 | 356 | /* reminder: g.zBaseURL is of course not set for CLI mode. */ |
| 357 | 357 | db_column_text(&q,2), |
| 358 | 358 | db_column_text(&q,3)); |
| 359 | 359 | cson_object_set(row, "downloadPath", json_new_string(zDownload)); |
| 360 | 360 | free(zDownload); |
| 361 | 361 |
| --- src/json_timeline.c | |
| +++ src/json_timeline.c | |
| @@ -350,11 +350,11 @@ | |
| 350 | } |
| 351 | cson_object_set(row, "size", json_new_int(db_column_int(&q,5))); |
| 352 | |
| 353 | cson_object_set(row, "state", |
| 354 | json_new_string(json_artifact_status_to_string(isNew,isDel))); |
| 355 | zDownload = mprintf("/raw/%s?name=%s", |
| 356 | /* reminder: g.zBaseURL is of course not set for CLI mode. */ |
| 357 | db_column_text(&q,2), |
| 358 | db_column_text(&q,3)); |
| 359 | cson_object_set(row, "downloadPath", json_new_string(zDownload)); |
| 360 | free(zDownload); |
| 361 |
| --- src/json_timeline.c | |
| +++ src/json_timeline.c | |
| @@ -350,11 +350,11 @@ | |
| 350 | } |
| 351 | cson_object_set(row, "size", json_new_int(db_column_int(&q,5))); |
| 352 | |
| 353 | cson_object_set(row, "state", |
| 354 | json_new_string(json_artifact_status_to_string(isNew,isDel))); |
| 355 | zDownload = mprintf("/raw/%s/%s", |
| 356 | /* reminder: g.zBaseURL is of course not set for CLI mode. */ |
| 357 | db_column_text(&q,2), |
| 358 | db_column_text(&q,3)); |
| 359 | cson_object_set(row, "downloadPath", json_new_string(zDownload)); |
| 360 | free(zDownload); |
| 361 |
+2
-2
| --- src/path.c | ||
| +++ src/path.c | ||
| @@ -559,12 +559,12 @@ | ||
| 559 | 559 | const char *zOld = db_column_text(&q, 1); |
| 560 | 560 | const char *zNew = db_column_text(&q, 2); |
| 561 | 561 | const char *zUuid = db_column_text(&q, 3); |
| 562 | 562 | @ <tr> |
| 563 | 563 | @ <td>%z(href("%R/timeline?c=%t",zDate))%s(zDate)</a></td> |
| 564 | - @ <td>%z(href("%R/finfo?name=%t",zOld))%h(zOld)</a></td> | |
| 565 | - @ <td>%z(href("%R/finfo?name=%t",zNew))%h(zNew)</a></td> | |
| 564 | + @ <td>%z(href("%R/finfo/%t",zOld))%h(zOld)</a></td> | |
| 565 | + @ <td>%z(href("%R/finfo/%t",zNew))%h(zNew)</a></td> | |
| 566 | 566 | @ <td>%z(href("%R/info/%!S",zUuid))%S(zUuid)</a></td></tr> |
| 567 | 567 | } |
| 568 | 568 | @ </table> |
| 569 | 569 | db_finalize(&q); |
| 570 | 570 | style_footer(); |
| 571 | 571 |
| --- src/path.c | |
| +++ src/path.c | |
| @@ -559,12 +559,12 @@ | |
| 559 | const char *zOld = db_column_text(&q, 1); |
| 560 | const char *zNew = db_column_text(&q, 2); |
| 561 | const char *zUuid = db_column_text(&q, 3); |
| 562 | @ <tr> |
| 563 | @ <td>%z(href("%R/timeline?c=%t",zDate))%s(zDate)</a></td> |
| 564 | @ <td>%z(href("%R/finfo?name=%t",zOld))%h(zOld)</a></td> |
| 565 | @ <td>%z(href("%R/finfo?name=%t",zNew))%h(zNew)</a></td> |
| 566 | @ <td>%z(href("%R/info/%!S",zUuid))%S(zUuid)</a></td></tr> |
| 567 | } |
| 568 | @ </table> |
| 569 | db_finalize(&q); |
| 570 | style_footer(); |
| 571 |
| --- src/path.c | |
| +++ src/path.c | |
| @@ -559,12 +559,12 @@ | |
| 559 | const char *zOld = db_column_text(&q, 1); |
| 560 | const char *zNew = db_column_text(&q, 2); |
| 561 | const char *zUuid = db_column_text(&q, 3); |
| 562 | @ <tr> |
| 563 | @ <td>%z(href("%R/timeline?c=%t",zDate))%s(zDate)</a></td> |
| 564 | @ <td>%z(href("%R/finfo/%t",zOld))%h(zOld)</a></td> |
| 565 | @ <td>%z(href("%R/finfo/%t",zNew))%h(zNew)</a></td> |
| 566 | @ <td>%z(href("%R/info/%!S",zUuid))%S(zUuid)</a></td></tr> |
| 567 | } |
| 568 | @ </table> |
| 569 | db_finalize(&q); |
| 570 | style_footer(); |
| 571 |
+1
-1
| --- src/report.c | ||
| +++ src/report.c | ||
| @@ -780,11 +780,11 @@ | ||
| 780 | 780 | blob_reset(&content); |
| 781 | 781 | @ %s(pState->zWikiEnd) |
| 782 | 782 | } |
| 783 | 783 | }else if( azName[i][0]=='#' ){ |
| 784 | 784 | zTid = zData; |
| 785 | - @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> | |
| 785 | + @ <td valign="top">%z(href("%R/tktview/%h",zData))%h(zData)</a></td> | |
| 786 | 786 | }else if( zData[0]==0 ){ |
| 787 | 787 | @ <td valign="top"> </td> |
| 788 | 788 | }else{ |
| 789 | 789 | @ <td valign="top"> |
| 790 | 790 | @ %h(zData) |
| 791 | 791 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -780,11 +780,11 @@ | |
| 780 | blob_reset(&content); |
| 781 | @ %s(pState->zWikiEnd) |
| 782 | } |
| 783 | }else if( azName[i][0]=='#' ){ |
| 784 | zTid = zData; |
| 785 | @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> |
| 786 | }else if( zData[0]==0 ){ |
| 787 | @ <td valign="top"> </td> |
| 788 | }else{ |
| 789 | @ <td valign="top"> |
| 790 | @ %h(zData) |
| 791 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -780,11 +780,11 @@ | |
| 780 | blob_reset(&content); |
| 781 | @ %s(pState->zWikiEnd) |
| 782 | } |
| 783 | }else if( azName[i][0]=='#' ){ |
| 784 | zTid = zData; |
| 785 | @ <td valign="top">%z(href("%R/tktview/%h",zData))%h(zData)</a></td> |
| 786 | }else if( zData[0]==0 ){ |
| 787 | @ <td valign="top"> </td> |
| 788 | }else{ |
| 789 | @ <td valign="top"> |
| 790 | @ %h(zData) |
| 791 |
+2
-2
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -680,11 +680,11 @@ | ||
| 680 | 680 | " AND tagxref.tagid=tag.tagid" |
| 681 | 681 | " GROUP BY 1" |
| 682 | 682 | ")" |
| 683 | 683 | "INSERT INTO x(label,url,score,id,date,snip)" |
| 684 | 684 | " SELECT printf('Wiki: %%s',name)," |
| 685 | - " printf('/wiki?name=%%s',urlencode(name))," | |
| 685 | + " printf('/wiki/%%s',urlencode(name))," | |
| 686 | 686 | " search_score()," |
| 687 | 687 | " 'w'||rid," |
| 688 | 688 | " datetime(mtime)," |
| 689 | 689 | " search_snippet()" |
| 690 | 690 | " FROM wiki" |
| @@ -1577,11 +1577,11 @@ | ||
| 1577 | 1577 | if( db_changes()==0 ) return; |
| 1578 | 1578 | db_multi_exec( |
| 1579 | 1579 | "REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)" |
| 1580 | 1580 | " SELECT ftsdocs.rowid, 1, 'w', ftsdocs.rid, ftsdocs.name," |
| 1581 | 1581 | " 'Wiki: '||ftsdocs.name," |
| 1582 | - " '/wiki?name='||urlencode(ftsdocs.name)," | |
| 1582 | + " '/wiki/'||urlencode(ftsdocs.name)," | |
| 1583 | 1583 | " tagxref.mtime" |
| 1584 | 1584 | " FROM ftsdocs, tagxref" |
| 1585 | 1585 | " WHERE ftsdocs.type='w' AND NOT ftsdocs.idxed" |
| 1586 | 1586 | " AND tagxref.rid=ftsdocs.rid" |
| 1587 | 1587 | ); |
| 1588 | 1588 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -680,11 +680,11 @@ | |
| 680 | " AND tagxref.tagid=tag.tagid" |
| 681 | " GROUP BY 1" |
| 682 | ")" |
| 683 | "INSERT INTO x(label,url,score,id,date,snip)" |
| 684 | " SELECT printf('Wiki: %%s',name)," |
| 685 | " printf('/wiki?name=%%s',urlencode(name))," |
| 686 | " search_score()," |
| 687 | " 'w'||rid," |
| 688 | " datetime(mtime)," |
| 689 | " search_snippet()" |
| 690 | " FROM wiki" |
| @@ -1577,11 +1577,11 @@ | |
| 1577 | if( db_changes()==0 ) return; |
| 1578 | db_multi_exec( |
| 1579 | "REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)" |
| 1580 | " SELECT ftsdocs.rowid, 1, 'w', ftsdocs.rid, ftsdocs.name," |
| 1581 | " 'Wiki: '||ftsdocs.name," |
| 1582 | " '/wiki?name='||urlencode(ftsdocs.name)," |
| 1583 | " tagxref.mtime" |
| 1584 | " FROM ftsdocs, tagxref" |
| 1585 | " WHERE ftsdocs.type='w' AND NOT ftsdocs.idxed" |
| 1586 | " AND tagxref.rid=ftsdocs.rid" |
| 1587 | ); |
| 1588 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -680,11 +680,11 @@ | |
| 680 | " AND tagxref.tagid=tag.tagid" |
| 681 | " GROUP BY 1" |
| 682 | ")" |
| 683 | "INSERT INTO x(label,url,score,id,date,snip)" |
| 684 | " SELECT printf('Wiki: %%s',name)," |
| 685 | " printf('/wiki/%%s',urlencode(name))," |
| 686 | " search_score()," |
| 687 | " 'w'||rid," |
| 688 | " datetime(mtime)," |
| 689 | " search_snippet()" |
| 690 | " FROM wiki" |
| @@ -1577,11 +1577,11 @@ | |
| 1577 | if( db_changes()==0 ) return; |
| 1578 | db_multi_exec( |
| 1579 | "REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)" |
| 1580 | " SELECT ftsdocs.rowid, 1, 'w', ftsdocs.rid, ftsdocs.name," |
| 1581 | " 'Wiki: '||ftsdocs.name," |
| 1582 | " '/wiki/'||urlencode(ftsdocs.name)," |
| 1583 | " tagxref.mtime" |
| 1584 | " FROM ftsdocs, tagxref" |
| 1585 | " WHERE ftsdocs.type='w' AND NOT ftsdocs.idxed" |
| 1586 | " AND tagxref.rid=ftsdocs.rid" |
| 1587 | ); |
| 1588 |
+1
-1
| --- src/statrep.c | ||
| +++ src/statrep.c | ||
| @@ -436,11 +436,11 @@ | ||
| 436 | 436 | int sz; |
| 437 | 437 | if( n<=0 ) continue; |
| 438 | 438 | sz = (int)(100*n/mxEvent); |
| 439 | 439 | if( sz==0 ) sz = 1; |
| 440 | 440 | @<tr class='row%d(++nRowNumber%2)'> |
| 441 | - @ <td>%z(href("%R/finfo?name=%T",zFile))%h(zFile)</a></td> | |
| 441 | + @ <td>%z(href("%R/finfo/%T",zFile))%h(zFile)</a></td> | |
| 442 | 442 | @ <td>%d(n)</td> |
| 443 | 443 | @ <td> |
| 444 | 444 | @ <div class='statistics-report-graph-line' |
| 445 | 445 | @ style='width:%d(sz)%%;'> </div> |
| 446 | 446 | @ </td> |
| 447 | 447 |
| --- src/statrep.c | |
| +++ src/statrep.c | |
| @@ -436,11 +436,11 @@ | |
| 436 | int sz; |
| 437 | if( n<=0 ) continue; |
| 438 | sz = (int)(100*n/mxEvent); |
| 439 | if( sz==0 ) sz = 1; |
| 440 | @<tr class='row%d(++nRowNumber%2)'> |
| 441 | @ <td>%z(href("%R/finfo?name=%T",zFile))%h(zFile)</a></td> |
| 442 | @ <td>%d(n)</td> |
| 443 | @ <td> |
| 444 | @ <div class='statistics-report-graph-line' |
| 445 | @ style='width:%d(sz)%%;'> </div> |
| 446 | @ </td> |
| 447 |
| --- src/statrep.c | |
| +++ src/statrep.c | |
| @@ -436,11 +436,11 @@ | |
| 436 | int sz; |
| 437 | if( n<=0 ) continue; |
| 438 | sz = (int)(100*n/mxEvent); |
| 439 | if( sz==0 ) sz = 1; |
| 440 | @<tr class='row%d(++nRowNumber%2)'> |
| 441 | @ <td>%z(href("%R/finfo/%T",zFile))%h(zFile)</a></td> |
| 442 | @ <td>%d(n)</td> |
| 443 | @ <td> |
| 444 | @ <div class='statistics-report-graph-line' |
| 445 | @ style='width:%d(sz)%%;'> </div> |
| 446 | @ </td> |
| 447 |
+1
-1
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1139,11 +1139,11 @@ | ||
| 1139 | 1139 | ); |
| 1140 | 1140 | blob_zero(&out); |
| 1141 | 1141 | while( db_step(&q)==SQLITE_ROW ){ |
| 1142 | 1142 | const char *zFN = db_column_text(&q, 0); |
| 1143 | 1143 | blob_appendf(&out, "%s%z%h</a>", zSep, |
| 1144 | - href("%R/finfo?name=%t", zFN), zFN); | |
| 1144 | + href("%R/finfo/%t", zFN), zFN); | |
| 1145 | 1145 | zSep = " or "; |
| 1146 | 1146 | } |
| 1147 | 1147 | db_finalize(&q); |
| 1148 | 1148 | return blob_str(&out); |
| 1149 | 1149 | } |
| 1150 | 1150 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1139,11 +1139,11 @@ | |
| 1139 | ); |
| 1140 | blob_zero(&out); |
| 1141 | while( db_step(&q)==SQLITE_ROW ){ |
| 1142 | const char *zFN = db_column_text(&q, 0); |
| 1143 | blob_appendf(&out, "%s%z%h</a>", zSep, |
| 1144 | href("%R/finfo?name=%t", zFN), zFN); |
| 1145 | zSep = " or "; |
| 1146 | } |
| 1147 | db_finalize(&q); |
| 1148 | return blob_str(&out); |
| 1149 | } |
| 1150 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1139,11 +1139,11 @@ | |
| 1139 | ); |
| 1140 | blob_zero(&out); |
| 1141 | while( db_step(&q)==SQLITE_ROW ){ |
| 1142 | const char *zFN = db_column_text(&q, 0); |
| 1143 | blob_appendf(&out, "%s%z%h</a>", zSep, |
| 1144 | href("%R/finfo/%t", zFN), zFN); |
| 1145 | zSep = " or "; |
| 1146 | } |
| 1147 | db_finalize(&q); |
| 1148 | return blob_str(&out); |
| 1149 | } |
| 1150 |
+9
-9
| --- src/tkt.c | ||
| +++ src/tkt.c | ||
| @@ -439,11 +439,11 @@ | ||
| 439 | 439 | @ </ul></font> |
| 440 | 440 | } |
| 441 | 441 | |
| 442 | 442 | /* |
| 443 | 443 | ** WEBPAGE: tktview |
| 444 | -** URL: tktview?name=UUID | |
| 444 | +** URL: tktview/UUID | |
| 445 | 445 | ** |
| 446 | 446 | ** View a ticket identified by the name= query parameter. |
| 447 | 447 | */ |
| 448 | 448 | void tktview_page(void){ |
| 449 | 449 | const char *zScript; |
| @@ -451,11 +451,11 @@ | ||
| 451 | 451 | const char *zUuid = PD("name",""); |
| 452 | 452 | |
| 453 | 453 | login_check_credentials(); |
| 454 | 454 | if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; } |
| 455 | 455 | if( g.anon.WrTkt || g.anon.ApndTkt ){ |
| 456 | - style_submenu_element("Edit", "Edit The Ticket", "%s/tktedit?name=%T", | |
| 456 | + style_submenu_element("Edit", "Edit The Ticket", "%s/tktedit/%T", | |
| 457 | 457 | g.zTop, PD("name","")); |
| 458 | 458 | } |
| 459 | 459 | if( g.perm.Hyperlink ){ |
| 460 | 460 | style_submenu_element("History", "History Of This Ticket", |
| 461 | 461 | "%s/tkthistory/%T", g.zTop, zUuid); |
| @@ -744,11 +744,11 @@ | ||
| 744 | 744 | login_needed(g.anon.ApndTkt || g.anon.WrTkt); |
| 745 | 745 | return; |
| 746 | 746 | } |
| 747 | 747 | zName = P("name"); |
| 748 | 748 | if( P("cancel") ){ |
| 749 | - cgi_redirectf("tktview?name=%T", zName); | |
| 749 | + cgi_redirectf("tktview/%T", zName); | |
| 750 | 750 | } |
| 751 | 751 | style_header("Edit Ticket"); |
| 752 | 752 | if( zName==0 || (nName = strlen(zName))<4 || nName>UUID_SIZE |
| 753 | 753 | || !validate16(zName,nName) ){ |
| 754 | 754 | @ <span class="tktError">Not a valid ticket id: \"%h(zName)\"</span> |
| @@ -827,11 +827,11 @@ | ||
| 827 | 827 | return zErr; |
| 828 | 828 | } |
| 829 | 829 | |
| 830 | 830 | /* |
| 831 | 831 | ** WEBPAGE: tkttimeline |
| 832 | -** URL: /tkttimeline?name=TICKETUUID&y=TYPE | |
| 832 | +** URL: /tkttimeline/TICKETUUID&y=TYPE | |
| 833 | 833 | ** |
| 834 | 834 | ** Show the change history for a single ticket in timeline format. |
| 835 | 835 | */ |
| 836 | 836 | void tkttimeline_page(void){ |
| 837 | 837 | Stmt q; |
| @@ -850,14 +850,14 @@ | ||
| 850 | 850 | } |
| 851 | 851 | zUuid = PD("name",""); |
| 852 | 852 | zType = PD("y","a"); |
| 853 | 853 | if( zType[0]!='c' ){ |
| 854 | 854 | style_submenu_element("Check-ins", "Check-ins", |
| 855 | - "%s/tkttimeline?name=%T&y=ci", g.zTop, zUuid); | |
| 855 | + "%s/tkttimeline/%T&y=ci", g.zTop, zUuid); | |
| 856 | 856 | }else{ |
| 857 | 857 | style_submenu_element("Timeline", "Timeline", |
| 858 | - "%s/tkttimeline?name=%T", g.zTop, zUuid); | |
| 858 | + "%s/tkttimeline/%T", g.zTop, zUuid); | |
| 859 | 859 | } |
| 860 | 860 | style_submenu_element("History", "History", |
| 861 | 861 | "%s/tkthistory/%s", g.zTop, zUuid); |
| 862 | 862 | style_submenu_element("Status", "Status", |
| 863 | 863 | "%s/info/%s", g.zTop, zUuid); |
| @@ -906,11 +906,11 @@ | ||
| 906 | 906 | style_footer(); |
| 907 | 907 | } |
| 908 | 908 | |
| 909 | 909 | /* |
| 910 | 910 | ** WEBPAGE: tkthistory |
| 911 | -** URL: /tkthistory?name=TICKETUUID | |
| 911 | +** URL: /tkthistory/TICKETUUID | |
| 912 | 912 | ** |
| 913 | 913 | ** Show the complete change history for a single ticket |
| 914 | 914 | */ |
| 915 | 915 | void tkthistory_page(void){ |
| 916 | 916 | Stmt q; |
| @@ -927,13 +927,13 @@ | ||
| 927 | 927 | zUuid = PD("name",""); |
| 928 | 928 | zTitle = mprintf("History Of Ticket %h", zUuid); |
| 929 | 929 | style_submenu_element("Status", "Status", |
| 930 | 930 | "%s/info/%s", g.zTop, zUuid); |
| 931 | 931 | style_submenu_element("Check-ins", "Check-ins", |
| 932 | - "%s/tkttimeline?name=%s&y=ci", g.zTop, zUuid); | |
| 932 | + "%s/tkttimeline/%s&y=ci", g.zTop, zUuid); | |
| 933 | 933 | style_submenu_element("Timeline", "Timeline", |
| 934 | - "%s/tkttimeline?name=%s", g.zTop, zUuid); | |
| 934 | + "%s/tkttimeline/%s", g.zTop, zUuid); | |
| 935 | 935 | if( P("plaintext")!=0 ){ |
| 936 | 936 | style_submenu_element("Formatted", "Formatted", |
| 937 | 937 | "%R/tkthistory/%s", zUuid); |
| 938 | 938 | }else{ |
| 939 | 939 | style_submenu_element("Plaintext", "Plaintext", |
| 940 | 940 |
| --- src/tkt.c | |
| +++ src/tkt.c | |
| @@ -439,11 +439,11 @@ | |
| 439 | @ </ul></font> |
| 440 | } |
| 441 | |
| 442 | /* |
| 443 | ** WEBPAGE: tktview |
| 444 | ** URL: tktview?name=UUID |
| 445 | ** |
| 446 | ** View a ticket identified by the name= query parameter. |
| 447 | */ |
| 448 | void tktview_page(void){ |
| 449 | const char *zScript; |
| @@ -451,11 +451,11 @@ | |
| 451 | const char *zUuid = PD("name",""); |
| 452 | |
| 453 | login_check_credentials(); |
| 454 | if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; } |
| 455 | if( g.anon.WrTkt || g.anon.ApndTkt ){ |
| 456 | style_submenu_element("Edit", "Edit The Ticket", "%s/tktedit?name=%T", |
| 457 | g.zTop, PD("name","")); |
| 458 | } |
| 459 | if( g.perm.Hyperlink ){ |
| 460 | style_submenu_element("History", "History Of This Ticket", |
| 461 | "%s/tkthistory/%T", g.zTop, zUuid); |
| @@ -744,11 +744,11 @@ | |
| 744 | login_needed(g.anon.ApndTkt || g.anon.WrTkt); |
| 745 | return; |
| 746 | } |
| 747 | zName = P("name"); |
| 748 | if( P("cancel") ){ |
| 749 | cgi_redirectf("tktview?name=%T", zName); |
| 750 | } |
| 751 | style_header("Edit Ticket"); |
| 752 | if( zName==0 || (nName = strlen(zName))<4 || nName>UUID_SIZE |
| 753 | || !validate16(zName,nName) ){ |
| 754 | @ <span class="tktError">Not a valid ticket id: \"%h(zName)\"</span> |
| @@ -827,11 +827,11 @@ | |
| 827 | return zErr; |
| 828 | } |
| 829 | |
| 830 | /* |
| 831 | ** WEBPAGE: tkttimeline |
| 832 | ** URL: /tkttimeline?name=TICKETUUID&y=TYPE |
| 833 | ** |
| 834 | ** Show the change history for a single ticket in timeline format. |
| 835 | */ |
| 836 | void tkttimeline_page(void){ |
| 837 | Stmt q; |
| @@ -850,14 +850,14 @@ | |
| 850 | } |
| 851 | zUuid = PD("name",""); |
| 852 | zType = PD("y","a"); |
| 853 | if( zType[0]!='c' ){ |
| 854 | style_submenu_element("Check-ins", "Check-ins", |
| 855 | "%s/tkttimeline?name=%T&y=ci", g.zTop, zUuid); |
| 856 | }else{ |
| 857 | style_submenu_element("Timeline", "Timeline", |
| 858 | "%s/tkttimeline?name=%T", g.zTop, zUuid); |
| 859 | } |
| 860 | style_submenu_element("History", "History", |
| 861 | "%s/tkthistory/%s", g.zTop, zUuid); |
| 862 | style_submenu_element("Status", "Status", |
| 863 | "%s/info/%s", g.zTop, zUuid); |
| @@ -906,11 +906,11 @@ | |
| 906 | style_footer(); |
| 907 | } |
| 908 | |
| 909 | /* |
| 910 | ** WEBPAGE: tkthistory |
| 911 | ** URL: /tkthistory?name=TICKETUUID |
| 912 | ** |
| 913 | ** Show the complete change history for a single ticket |
| 914 | */ |
| 915 | void tkthistory_page(void){ |
| 916 | Stmt q; |
| @@ -927,13 +927,13 @@ | |
| 927 | zUuid = PD("name",""); |
| 928 | zTitle = mprintf("History Of Ticket %h", zUuid); |
| 929 | style_submenu_element("Status", "Status", |
| 930 | "%s/info/%s", g.zTop, zUuid); |
| 931 | style_submenu_element("Check-ins", "Check-ins", |
| 932 | "%s/tkttimeline?name=%s&y=ci", g.zTop, zUuid); |
| 933 | style_submenu_element("Timeline", "Timeline", |
| 934 | "%s/tkttimeline?name=%s", g.zTop, zUuid); |
| 935 | if( P("plaintext")!=0 ){ |
| 936 | style_submenu_element("Formatted", "Formatted", |
| 937 | "%R/tkthistory/%s", zUuid); |
| 938 | }else{ |
| 939 | style_submenu_element("Plaintext", "Plaintext", |
| 940 |
| --- src/tkt.c | |
| +++ src/tkt.c | |
| @@ -439,11 +439,11 @@ | |
| 439 | @ </ul></font> |
| 440 | } |
| 441 | |
| 442 | /* |
| 443 | ** WEBPAGE: tktview |
| 444 | ** URL: tktview/UUID |
| 445 | ** |
| 446 | ** View a ticket identified by the name= query parameter. |
| 447 | */ |
| 448 | void tktview_page(void){ |
| 449 | const char *zScript; |
| @@ -451,11 +451,11 @@ | |
| 451 | const char *zUuid = PD("name",""); |
| 452 | |
| 453 | login_check_credentials(); |
| 454 | if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; } |
| 455 | if( g.anon.WrTkt || g.anon.ApndTkt ){ |
| 456 | style_submenu_element("Edit", "Edit The Ticket", "%s/tktedit/%T", |
| 457 | g.zTop, PD("name","")); |
| 458 | } |
| 459 | if( g.perm.Hyperlink ){ |
| 460 | style_submenu_element("History", "History Of This Ticket", |
| 461 | "%s/tkthistory/%T", g.zTop, zUuid); |
| @@ -744,11 +744,11 @@ | |
| 744 | login_needed(g.anon.ApndTkt || g.anon.WrTkt); |
| 745 | return; |
| 746 | } |
| 747 | zName = P("name"); |
| 748 | if( P("cancel") ){ |
| 749 | cgi_redirectf("tktview/%T", zName); |
| 750 | } |
| 751 | style_header("Edit Ticket"); |
| 752 | if( zName==0 || (nName = strlen(zName))<4 || nName>UUID_SIZE |
| 753 | || !validate16(zName,nName) ){ |
| 754 | @ <span class="tktError">Not a valid ticket id: \"%h(zName)\"</span> |
| @@ -827,11 +827,11 @@ | |
| 827 | return zErr; |
| 828 | } |
| 829 | |
| 830 | /* |
| 831 | ** WEBPAGE: tkttimeline |
| 832 | ** URL: /tkttimeline/TICKETUUID&y=TYPE |
| 833 | ** |
| 834 | ** Show the change history for a single ticket in timeline format. |
| 835 | */ |
| 836 | void tkttimeline_page(void){ |
| 837 | Stmt q; |
| @@ -850,14 +850,14 @@ | |
| 850 | } |
| 851 | zUuid = PD("name",""); |
| 852 | zType = PD("y","a"); |
| 853 | if( zType[0]!='c' ){ |
| 854 | style_submenu_element("Check-ins", "Check-ins", |
| 855 | "%s/tkttimeline/%T&y=ci", g.zTop, zUuid); |
| 856 | }else{ |
| 857 | style_submenu_element("Timeline", "Timeline", |
| 858 | "%s/tkttimeline/%T", g.zTop, zUuid); |
| 859 | } |
| 860 | style_submenu_element("History", "History", |
| 861 | "%s/tkthistory/%s", g.zTop, zUuid); |
| 862 | style_submenu_element("Status", "Status", |
| 863 | "%s/info/%s", g.zTop, zUuid); |
| @@ -906,11 +906,11 @@ | |
| 906 | style_footer(); |
| 907 | } |
| 908 | |
| 909 | /* |
| 910 | ** WEBPAGE: tkthistory |
| 911 | ** URL: /tkthistory/TICKETUUID |
| 912 | ** |
| 913 | ** Show the complete change history for a single ticket |
| 914 | */ |
| 915 | void tkthistory_page(void){ |
| 916 | Stmt q; |
| @@ -927,13 +927,13 @@ | |
| 927 | zUuid = PD("name",""); |
| 928 | zTitle = mprintf("History Of Ticket %h", zUuid); |
| 929 | style_submenu_element("Status", "Status", |
| 930 | "%s/info/%s", g.zTop, zUuid); |
| 931 | style_submenu_element("Check-ins", "Check-ins", |
| 932 | "%s/tkttimeline/%s&y=ci", g.zTop, zUuid); |
| 933 | style_submenu_element("Timeline", "Timeline", |
| 934 | "%s/tkttimeline/%s", g.zTop, zUuid); |
| 935 | if( P("plaintext")!=0 ){ |
| 936 | style_submenu_element("Formatted", "Formatted", |
| 937 | "%R/tkthistory/%s", zUuid); |
| 938 | }else{ |
| 939 | style_submenu_element("Plaintext", "Plaintext", |
| 940 |
+23
-23
| --- src/wiki.c | ||
| +++ src/wiki.c | ||
| @@ -231,11 +231,11 @@ | ||
| 231 | 231 | } |
| 232 | 232 | #if 0 |
| 233 | 233 | if( (ok & W_BLOG)!=0 |
| 234 | 234 | #endif |
| 235 | 235 | if( (ok & W_SANDBOX)!=0 ){ |
| 236 | - style_submenu_element("Sandbox", "Sandbox", "%R/wiki?name=Sandbox"); | |
| 236 | + style_submenu_element("Sandbox", "Sandbox", "%R/wiki/Sandbox"); | |
| 237 | 237 | } |
| 238 | 238 | } |
| 239 | 239 | |
| 240 | 240 | /* |
| 241 | 241 | ** WEBPAGE: wikihelp |
| @@ -254,18 +254,18 @@ | ||
| 254 | 254 | @ %h(zWikiHomePageName)</a> wiki home page.</li> |
| 255 | 255 | } |
| 256 | 256 | } |
| 257 | 257 | { char *zHomePageName = db_get("project-name",0); |
| 258 | 258 | if( zHomePageName ){ |
| 259 | - @ <li> %z(href("%R/wiki?name=%t",zHomePageName)) | |
| 259 | + @ <li> %z(href("%R/wiki/%t",zHomePageName)) | |
| 260 | 260 | @ %h(zHomePageName)</a> project home page.</li> |
| 261 | 261 | } |
| 262 | 262 | } |
| 263 | 263 | @ <li> %z(href("%R/timeline?y=w"))Recent changes</a> to wiki pages.</li> |
| 264 | 264 | @ <li> Formatting rules for %z(href("%R/wiki_rules"))Fossil Wiki</a> and for |
| 265 | 265 | @ %z(href("%R/md_rules"))Markdown Wiki</a>.</li> |
| 266 | - @ <li> Use the %z(href("%R/wiki?name=Sandbox"))Sandbox</a> | |
| 266 | + @ <li> Use the %z(href("%R/wiki/Sandbox"))Sandbox</a> | |
| 267 | 267 | @ to experiment.</li> |
| 268 | 268 | if( g.anon.NewWiki ){ |
| 269 | 269 | @ <li> Create a %z(href("%R/wikinew"))new wiki page</a>.</li> |
| 270 | 270 | if( g.anon.Write ){ |
| 271 | 271 | @ <li> Create a %z(href("%R/technoteedit"))new tech-note</a>.</li> |
| @@ -299,11 +299,11 @@ | ||
| 299 | 299 | style_footer(); |
| 300 | 300 | } |
| 301 | 301 | |
| 302 | 302 | /* |
| 303 | 303 | ** WEBPAGE: wiki |
| 304 | -** URL: /wiki?name=PAGENAME | |
| 304 | +** URL: /wiki/PAGENAME | |
| 305 | 305 | */ |
| 306 | 306 | void wiki_page(void){ |
| 307 | 307 | char *zTag; |
| 308 | 308 | int rid = 0; |
| 309 | 309 | int isSandbox; |
| @@ -352,23 +352,23 @@ | ||
| 352 | 352 | } |
| 353 | 353 | zMimetype = wiki_filter_mimetypes(zMimetype); |
| 354 | 354 | if( !g.isHome ){ |
| 355 | 355 | if( rid ){ |
| 356 | 356 | style_submenu_element("Diff", "Last change", |
| 357 | - "%R/wdiff?name=%T&a=%d", zPageName, rid); | |
| 357 | + "%R/wdiff/%T&a=%d", zPageName, rid); | |
| 358 | 358 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 359 | 359 | style_submenu_element("Details", "Details", |
| 360 | 360 | "%R/info/%s", zUuid); |
| 361 | 361 | } |
| 362 | 362 | if( (rid && g.anon.WrWiki) || (!rid && g.anon.NewWiki) ){ |
| 363 | 363 | if( db_get_boolean("wysiwyg-wiki", 0) ){ |
| 364 | 364 | style_submenu_element("Edit", "Edit Wiki Page", |
| 365 | - "%s/wikiedit?name=%T&wysiwyg=1", | |
| 365 | + "%s/wikiedit/%T&wysiwyg=1", | |
| 366 | 366 | g.zTop, zPageName); |
| 367 | 367 | }else{ |
| 368 | 368 | style_submenu_element("Edit", "Edit Wiki Page", |
| 369 | - "%s/wikiedit?name=%T", | |
| 369 | + "%s/wikiedit/%T", | |
| 370 | 370 | g.zTop, zPageName); |
| 371 | 371 | } |
| 372 | 372 | } |
| 373 | 373 | if( rid && g.anon.ApndWiki && g.anon.Attach ){ |
| 374 | 374 | style_submenu_element("Attach", "Add An Attachment", |
| @@ -375,15 +375,15 @@ | ||
| 375 | 375 | "%s/attachadd?page=%T&from=%s/wiki%%3fname=%T", |
| 376 | 376 | g.zTop, zPageName, g.zTop, zPageName); |
| 377 | 377 | } |
| 378 | 378 | if( rid && g.anon.ApndWiki ){ |
| 379 | 379 | style_submenu_element("Append", "Add A Comment", |
| 380 | - "%s/wikiappend?name=%T&mimetype=%s", | |
| 380 | + "%s/wikiappend/%T&mimetype=%s", | |
| 381 | 381 | g.zTop, zPageName, zMimetype); |
| 382 | 382 | } |
| 383 | 383 | if( g.perm.Hyperlink ){ |
| 384 | - style_submenu_element("History", "History", "%s/whistory?name=%T", | |
| 384 | + style_submenu_element("History", "History", "%s/whistory/%T", | |
| 385 | 385 | g.zTop, zPageName); |
| 386 | 386 | } |
| 387 | 387 | } |
| 388 | 388 | style_set_current_page("%T?name=%T", g.zPath, zPageName); |
| 389 | 389 | style_header("%s", zPageName); |
| @@ -453,11 +453,11 @@ | ||
| 453 | 453 | return azStyles[1]; |
| 454 | 454 | } |
| 455 | 455 | |
| 456 | 456 | /* |
| 457 | 457 | ** WEBPAGE: wikiedit |
| 458 | -** URL: /wikiedit?name=PAGENAME | |
| 458 | +** URL: /wikiedit/PAGENAME | |
| 459 | 459 | ** |
| 460 | 460 | ** Edit a wiki page. |
| 461 | 461 | */ |
| 462 | 462 | void wikiedit_page(void){ |
| 463 | 463 | char *zTag; |
| @@ -547,14 +547,14 @@ | ||
| 547 | 547 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 548 | 548 | blob_reset(&cksum); |
| 549 | 549 | wiki_put(&wiki, 0, wiki_need_moderation(0)); |
| 550 | 550 | } |
| 551 | 551 | db_end_transaction(0); |
| 552 | - cgi_redirectf("wiki?name=%T", zPageName); | |
| 552 | + cgi_redirectf("wiki/%T", zPageName); | |
| 553 | 553 | } |
| 554 | 554 | if( P("cancel")!=0 ){ |
| 555 | - cgi_redirectf("wiki?name=%T", zPageName); | |
| 555 | + cgi_redirectf("wiki/%T", zPageName); | |
| 556 | 556 | return; |
| 557 | 557 | } |
| 558 | 558 | if( zBody==0 ){ |
| 559 | 559 | zBody = mprintf("<i>Empty Page</i>"); |
| 560 | 560 | } |
| @@ -638,13 +638,13 @@ | ||
| 638 | 638 | zMimetype = wiki_filter_mimetypes(P("mimetype")); |
| 639 | 639 | if( zName[0] && wiki_name_is_wellformed((const unsigned char *)zName) ){ |
| 640 | 640 | if( fossil_strcmp(zMimetype,"text/x-fossil-wiki")==0 |
| 641 | 641 | && db_get_boolean("wysiwyg-wiki", 0) |
| 642 | 642 | ){ |
| 643 | - cgi_redirectf("wikiedit?name=%T&wysiwyg=1", zName); | |
| 643 | + cgi_redirectf("wikiedit/%T&wysiwyg=1", zName); | |
| 644 | 644 | }else{ |
| 645 | - cgi_redirectf("wikiedit?name=%T&mimetype=%s", zName, zMimetype); | |
| 645 | + cgi_redirectf("wikiedit/%T&mimetype=%s", zName, zMimetype); | |
| 646 | 646 | } |
| 647 | 647 | } |
| 648 | 648 | style_header("Create A New Wiki Page"); |
| 649 | 649 | wiki_standard_submenu(W_ALL_BUT(W_NEW)); |
| 650 | 650 | @ <p>Rules for wiki page names:</p> |
| @@ -701,11 +701,11 @@ | ||
| 701 | 701 | fossil_free(zDate); |
| 702 | 702 | } |
| 703 | 703 | |
| 704 | 704 | /* |
| 705 | 705 | ** WEBPAGE: wikiappend |
| 706 | -** URL: /wikiappend?name=PAGENAME&mimetype=MIMETYPE | |
| 706 | +** URL: /wikiappend/PAGENAME&mimetype=MIMETYPE | |
| 707 | 707 | ** |
| 708 | 708 | ** Append text to the end of a wiki page. |
| 709 | 709 | */ |
| 710 | 710 | void wikiappend_page(void){ |
| 711 | 711 | char *zTag; |
| @@ -782,14 +782,14 @@ | ||
| 782 | 782 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 783 | 783 | blob_reset(&cksum); |
| 784 | 784 | wiki_put(&wiki, rid, wiki_need_moderation(0)); |
| 785 | 785 | db_end_transaction(0); |
| 786 | 786 | } |
| 787 | - cgi_redirectf("wiki?name=%T", zPageName); | |
| 787 | + cgi_redirectf("wiki/%T", zPageName); | |
| 788 | 788 | } |
| 789 | 789 | if( P("cancel")!=0 ){ |
| 790 | - cgi_redirectf("wiki?name=%T", zPageName); | |
| 790 | + cgi_redirectf("wiki/%T", zPageName); | |
| 791 | 791 | return; |
| 792 | 792 | } |
| 793 | 793 | style_set_current_page("%T?name=%T", g.zPath, zPageName); |
| 794 | 794 | style_header("Append Comment To: %s", zPageName); |
| 795 | 795 | if( !goodCaptcha ){ |
| @@ -833,17 +833,17 @@ | ||
| 833 | 833 | ** Function called to output extra text at the end of each line in |
| 834 | 834 | ** a wiki history listing. |
| 835 | 835 | */ |
| 836 | 836 | static void wiki_history_extra(int rid){ |
| 837 | 837 | if( db_exists("SELECT 1 FROM tagxref WHERE rid=%d", rid) ){ |
| 838 | - @ %z(href("%R/wdiff?name=%t&a=%d",zWikiPageName,rid))[diff]</a> | |
| 838 | + @ %z(href("%R/wdiff/%t&a=%d",zWikiPageName,rid))[diff]</a> | |
| 839 | 839 | } |
| 840 | 840 | } |
| 841 | 841 | |
| 842 | 842 | /* |
| 843 | 843 | ** WEBPAGE: whistory |
| 844 | -** URL: /whistory?name=PAGENAME | |
| 844 | +** URL: /whistory/PAGENAME | |
| 845 | 845 | ** |
| 846 | 846 | ** Show the complete change history for a single wiki page. |
| 847 | 847 | */ |
| 848 | 848 | void whistory_page(void){ |
| 849 | 849 | Stmt q; |
| @@ -866,11 +866,11 @@ | ||
| 866 | 866 | style_footer(); |
| 867 | 867 | } |
| 868 | 868 | |
| 869 | 869 | /* |
| 870 | 870 | ** WEBPAGE: wdiff |
| 871 | -** URL: /whistory?name=PAGENAME&a=RID1&b=RID2 | |
| 871 | +** URL: /whistory/PAGENAME&a=RID1&b=RID2 | |
| 872 | 872 | ** |
| 873 | 873 | ** Show the difference between two wiki pages. |
| 874 | 874 | */ |
| 875 | 875 | void wdiff_page(void){ |
| 876 | 876 | int rid1, rid2; |
| @@ -956,13 +956,13 @@ | ||
| 956 | 956 | wiki_prepare_page_list(&q); |
| 957 | 957 | while( db_step(&q)==SQLITE_ROW ){ |
| 958 | 958 | const char *zName = db_column_text(&q, 0); |
| 959 | 959 | int size = db_column_int(&q, 1); |
| 960 | 960 | if( size>0 ){ |
| 961 | - @ <li>%z(href("%R/wiki?name=%T",zName))%h(zName)</a></li> | |
| 961 | + @ <li>%z(href("%R/wiki/%T",zName))%h(zName)</a></li> | |
| 962 | 962 | }else if( showAll ){ |
| 963 | - @ <li>%z(href("%R/wiki?name=%T",zName))<s>%h(zName)</s></a></li> | |
| 963 | + @ <li>%z(href("%R/wiki/%T",zName))<s>%h(zName)</s></a></li> | |
| 964 | 964 | } |
| 965 | 965 | } |
| 966 | 966 | db_finalize(&q); |
| 967 | 967 | @ </ul> |
| 968 | 968 | style_footer(); |
| @@ -986,11 +986,11 @@ | ||
| 986 | 986 | "SELECT substr(tagname, 6, 1000) FROM tag WHERE tagname like 'wiki-%%%q%%'" |
| 987 | 987 | " ORDER BY lower(tagname) /*sort*/" , |
| 988 | 988 | zTitle); |
| 989 | 989 | while( db_step(&q)==SQLITE_ROW ){ |
| 990 | 990 | const char *zName = db_column_text(&q, 0); |
| 991 | - @ <li>%z(href("%R/wiki?name=%T",zName))%h(zName)</a></li> | |
| 991 | + @ <li>%z(href("%R/wiki/%T",zName))%h(zName)</a></li> | |
| 992 | 992 | } |
| 993 | 993 | db_finalize(&q); |
| 994 | 994 | @ </ul> |
| 995 | 995 | style_footer(); |
| 996 | 996 | } |
| 997 | 997 |
| --- src/wiki.c | |
| +++ src/wiki.c | |
| @@ -231,11 +231,11 @@ | |
| 231 | } |
| 232 | #if 0 |
| 233 | if( (ok & W_BLOG)!=0 |
| 234 | #endif |
| 235 | if( (ok & W_SANDBOX)!=0 ){ |
| 236 | style_submenu_element("Sandbox", "Sandbox", "%R/wiki?name=Sandbox"); |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | /* |
| 241 | ** WEBPAGE: wikihelp |
| @@ -254,18 +254,18 @@ | |
| 254 | @ %h(zWikiHomePageName)</a> wiki home page.</li> |
| 255 | } |
| 256 | } |
| 257 | { char *zHomePageName = db_get("project-name",0); |
| 258 | if( zHomePageName ){ |
| 259 | @ <li> %z(href("%R/wiki?name=%t",zHomePageName)) |
| 260 | @ %h(zHomePageName)</a> project home page.</li> |
| 261 | } |
| 262 | } |
| 263 | @ <li> %z(href("%R/timeline?y=w"))Recent changes</a> to wiki pages.</li> |
| 264 | @ <li> Formatting rules for %z(href("%R/wiki_rules"))Fossil Wiki</a> and for |
| 265 | @ %z(href("%R/md_rules"))Markdown Wiki</a>.</li> |
| 266 | @ <li> Use the %z(href("%R/wiki?name=Sandbox"))Sandbox</a> |
| 267 | @ to experiment.</li> |
| 268 | if( g.anon.NewWiki ){ |
| 269 | @ <li> Create a %z(href("%R/wikinew"))new wiki page</a>.</li> |
| 270 | if( g.anon.Write ){ |
| 271 | @ <li> Create a %z(href("%R/technoteedit"))new tech-note</a>.</li> |
| @@ -299,11 +299,11 @@ | |
| 299 | style_footer(); |
| 300 | } |
| 301 | |
| 302 | /* |
| 303 | ** WEBPAGE: wiki |
| 304 | ** URL: /wiki?name=PAGENAME |
| 305 | */ |
| 306 | void wiki_page(void){ |
| 307 | char *zTag; |
| 308 | int rid = 0; |
| 309 | int isSandbox; |
| @@ -352,23 +352,23 @@ | |
| 352 | } |
| 353 | zMimetype = wiki_filter_mimetypes(zMimetype); |
| 354 | if( !g.isHome ){ |
| 355 | if( rid ){ |
| 356 | style_submenu_element("Diff", "Last change", |
| 357 | "%R/wdiff?name=%T&a=%d", zPageName, rid); |
| 358 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 359 | style_submenu_element("Details", "Details", |
| 360 | "%R/info/%s", zUuid); |
| 361 | } |
| 362 | if( (rid && g.anon.WrWiki) || (!rid && g.anon.NewWiki) ){ |
| 363 | if( db_get_boolean("wysiwyg-wiki", 0) ){ |
| 364 | style_submenu_element("Edit", "Edit Wiki Page", |
| 365 | "%s/wikiedit?name=%T&wysiwyg=1", |
| 366 | g.zTop, zPageName); |
| 367 | }else{ |
| 368 | style_submenu_element("Edit", "Edit Wiki Page", |
| 369 | "%s/wikiedit?name=%T", |
| 370 | g.zTop, zPageName); |
| 371 | } |
| 372 | } |
| 373 | if( rid && g.anon.ApndWiki && g.anon.Attach ){ |
| 374 | style_submenu_element("Attach", "Add An Attachment", |
| @@ -375,15 +375,15 @@ | |
| 375 | "%s/attachadd?page=%T&from=%s/wiki%%3fname=%T", |
| 376 | g.zTop, zPageName, g.zTop, zPageName); |
| 377 | } |
| 378 | if( rid && g.anon.ApndWiki ){ |
| 379 | style_submenu_element("Append", "Add A Comment", |
| 380 | "%s/wikiappend?name=%T&mimetype=%s", |
| 381 | g.zTop, zPageName, zMimetype); |
| 382 | } |
| 383 | if( g.perm.Hyperlink ){ |
| 384 | style_submenu_element("History", "History", "%s/whistory?name=%T", |
| 385 | g.zTop, zPageName); |
| 386 | } |
| 387 | } |
| 388 | style_set_current_page("%T?name=%T", g.zPath, zPageName); |
| 389 | style_header("%s", zPageName); |
| @@ -453,11 +453,11 @@ | |
| 453 | return azStyles[1]; |
| 454 | } |
| 455 | |
| 456 | /* |
| 457 | ** WEBPAGE: wikiedit |
| 458 | ** URL: /wikiedit?name=PAGENAME |
| 459 | ** |
| 460 | ** Edit a wiki page. |
| 461 | */ |
| 462 | void wikiedit_page(void){ |
| 463 | char *zTag; |
| @@ -547,14 +547,14 @@ | |
| 547 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 548 | blob_reset(&cksum); |
| 549 | wiki_put(&wiki, 0, wiki_need_moderation(0)); |
| 550 | } |
| 551 | db_end_transaction(0); |
| 552 | cgi_redirectf("wiki?name=%T", zPageName); |
| 553 | } |
| 554 | if( P("cancel")!=0 ){ |
| 555 | cgi_redirectf("wiki?name=%T", zPageName); |
| 556 | return; |
| 557 | } |
| 558 | if( zBody==0 ){ |
| 559 | zBody = mprintf("<i>Empty Page</i>"); |
| 560 | } |
| @@ -638,13 +638,13 @@ | |
| 638 | zMimetype = wiki_filter_mimetypes(P("mimetype")); |
| 639 | if( zName[0] && wiki_name_is_wellformed((const unsigned char *)zName) ){ |
| 640 | if( fossil_strcmp(zMimetype,"text/x-fossil-wiki")==0 |
| 641 | && db_get_boolean("wysiwyg-wiki", 0) |
| 642 | ){ |
| 643 | cgi_redirectf("wikiedit?name=%T&wysiwyg=1", zName); |
| 644 | }else{ |
| 645 | cgi_redirectf("wikiedit?name=%T&mimetype=%s", zName, zMimetype); |
| 646 | } |
| 647 | } |
| 648 | style_header("Create A New Wiki Page"); |
| 649 | wiki_standard_submenu(W_ALL_BUT(W_NEW)); |
| 650 | @ <p>Rules for wiki page names:</p> |
| @@ -701,11 +701,11 @@ | |
| 701 | fossil_free(zDate); |
| 702 | } |
| 703 | |
| 704 | /* |
| 705 | ** WEBPAGE: wikiappend |
| 706 | ** URL: /wikiappend?name=PAGENAME&mimetype=MIMETYPE |
| 707 | ** |
| 708 | ** Append text to the end of a wiki page. |
| 709 | */ |
| 710 | void wikiappend_page(void){ |
| 711 | char *zTag; |
| @@ -782,14 +782,14 @@ | |
| 782 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 783 | blob_reset(&cksum); |
| 784 | wiki_put(&wiki, rid, wiki_need_moderation(0)); |
| 785 | db_end_transaction(0); |
| 786 | } |
| 787 | cgi_redirectf("wiki?name=%T", zPageName); |
| 788 | } |
| 789 | if( P("cancel")!=0 ){ |
| 790 | cgi_redirectf("wiki?name=%T", zPageName); |
| 791 | return; |
| 792 | } |
| 793 | style_set_current_page("%T?name=%T", g.zPath, zPageName); |
| 794 | style_header("Append Comment To: %s", zPageName); |
| 795 | if( !goodCaptcha ){ |
| @@ -833,17 +833,17 @@ | |
| 833 | ** Function called to output extra text at the end of each line in |
| 834 | ** a wiki history listing. |
| 835 | */ |
| 836 | static void wiki_history_extra(int rid){ |
| 837 | if( db_exists("SELECT 1 FROM tagxref WHERE rid=%d", rid) ){ |
| 838 | @ %z(href("%R/wdiff?name=%t&a=%d",zWikiPageName,rid))[diff]</a> |
| 839 | } |
| 840 | } |
| 841 | |
| 842 | /* |
| 843 | ** WEBPAGE: whistory |
| 844 | ** URL: /whistory?name=PAGENAME |
| 845 | ** |
| 846 | ** Show the complete change history for a single wiki page. |
| 847 | */ |
| 848 | void whistory_page(void){ |
| 849 | Stmt q; |
| @@ -866,11 +866,11 @@ | |
| 866 | style_footer(); |
| 867 | } |
| 868 | |
| 869 | /* |
| 870 | ** WEBPAGE: wdiff |
| 871 | ** URL: /whistory?name=PAGENAME&a=RID1&b=RID2 |
| 872 | ** |
| 873 | ** Show the difference between two wiki pages. |
| 874 | */ |
| 875 | void wdiff_page(void){ |
| 876 | int rid1, rid2; |
| @@ -956,13 +956,13 @@ | |
| 956 | wiki_prepare_page_list(&q); |
| 957 | while( db_step(&q)==SQLITE_ROW ){ |
| 958 | const char *zName = db_column_text(&q, 0); |
| 959 | int size = db_column_int(&q, 1); |
| 960 | if( size>0 ){ |
| 961 | @ <li>%z(href("%R/wiki?name=%T",zName))%h(zName)</a></li> |
| 962 | }else if( showAll ){ |
| 963 | @ <li>%z(href("%R/wiki?name=%T",zName))<s>%h(zName)</s></a></li> |
| 964 | } |
| 965 | } |
| 966 | db_finalize(&q); |
| 967 | @ </ul> |
| 968 | style_footer(); |
| @@ -986,11 +986,11 @@ | |
| 986 | "SELECT substr(tagname, 6, 1000) FROM tag WHERE tagname like 'wiki-%%%q%%'" |
| 987 | " ORDER BY lower(tagname) /*sort*/" , |
| 988 | zTitle); |
| 989 | while( db_step(&q)==SQLITE_ROW ){ |
| 990 | const char *zName = db_column_text(&q, 0); |
| 991 | @ <li>%z(href("%R/wiki?name=%T",zName))%h(zName)</a></li> |
| 992 | } |
| 993 | db_finalize(&q); |
| 994 | @ </ul> |
| 995 | style_footer(); |
| 996 | } |
| 997 |
| --- src/wiki.c | |
| +++ src/wiki.c | |
| @@ -231,11 +231,11 @@ | |
| 231 | } |
| 232 | #if 0 |
| 233 | if( (ok & W_BLOG)!=0 |
| 234 | #endif |
| 235 | if( (ok & W_SANDBOX)!=0 ){ |
| 236 | style_submenu_element("Sandbox", "Sandbox", "%R/wiki/Sandbox"); |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | /* |
| 241 | ** WEBPAGE: wikihelp |
| @@ -254,18 +254,18 @@ | |
| 254 | @ %h(zWikiHomePageName)</a> wiki home page.</li> |
| 255 | } |
| 256 | } |
| 257 | { char *zHomePageName = db_get("project-name",0); |
| 258 | if( zHomePageName ){ |
| 259 | @ <li> %z(href("%R/wiki/%t",zHomePageName)) |
| 260 | @ %h(zHomePageName)</a> project home page.</li> |
| 261 | } |
| 262 | } |
| 263 | @ <li> %z(href("%R/timeline?y=w"))Recent changes</a> to wiki pages.</li> |
| 264 | @ <li> Formatting rules for %z(href("%R/wiki_rules"))Fossil Wiki</a> and for |
| 265 | @ %z(href("%R/md_rules"))Markdown Wiki</a>.</li> |
| 266 | @ <li> Use the %z(href("%R/wiki/Sandbox"))Sandbox</a> |
| 267 | @ to experiment.</li> |
| 268 | if( g.anon.NewWiki ){ |
| 269 | @ <li> Create a %z(href("%R/wikinew"))new wiki page</a>.</li> |
| 270 | if( g.anon.Write ){ |
| 271 | @ <li> Create a %z(href("%R/technoteedit"))new tech-note</a>.</li> |
| @@ -299,11 +299,11 @@ | |
| 299 | style_footer(); |
| 300 | } |
| 301 | |
| 302 | /* |
| 303 | ** WEBPAGE: wiki |
| 304 | ** URL: /wiki/PAGENAME |
| 305 | */ |
| 306 | void wiki_page(void){ |
| 307 | char *zTag; |
| 308 | int rid = 0; |
| 309 | int isSandbox; |
| @@ -352,23 +352,23 @@ | |
| 352 | } |
| 353 | zMimetype = wiki_filter_mimetypes(zMimetype); |
| 354 | if( !g.isHome ){ |
| 355 | if( rid ){ |
| 356 | style_submenu_element("Diff", "Last change", |
| 357 | "%R/wdiff/%T&a=%d", zPageName, rid); |
| 358 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 359 | style_submenu_element("Details", "Details", |
| 360 | "%R/info/%s", zUuid); |
| 361 | } |
| 362 | if( (rid && g.anon.WrWiki) || (!rid && g.anon.NewWiki) ){ |
| 363 | if( db_get_boolean("wysiwyg-wiki", 0) ){ |
| 364 | style_submenu_element("Edit", "Edit Wiki Page", |
| 365 | "%s/wikiedit/%T&wysiwyg=1", |
| 366 | g.zTop, zPageName); |
| 367 | }else{ |
| 368 | style_submenu_element("Edit", "Edit Wiki Page", |
| 369 | "%s/wikiedit/%T", |
| 370 | g.zTop, zPageName); |
| 371 | } |
| 372 | } |
| 373 | if( rid && g.anon.ApndWiki && g.anon.Attach ){ |
| 374 | style_submenu_element("Attach", "Add An Attachment", |
| @@ -375,15 +375,15 @@ | |
| 375 | "%s/attachadd?page=%T&from=%s/wiki%%3fname=%T", |
| 376 | g.zTop, zPageName, g.zTop, zPageName); |
| 377 | } |
| 378 | if( rid && g.anon.ApndWiki ){ |
| 379 | style_submenu_element("Append", "Add A Comment", |
| 380 | "%s/wikiappend/%T&mimetype=%s", |
| 381 | g.zTop, zPageName, zMimetype); |
| 382 | } |
| 383 | if( g.perm.Hyperlink ){ |
| 384 | style_submenu_element("History", "History", "%s/whistory/%T", |
| 385 | g.zTop, zPageName); |
| 386 | } |
| 387 | } |
| 388 | style_set_current_page("%T?name=%T", g.zPath, zPageName); |
| 389 | style_header("%s", zPageName); |
| @@ -453,11 +453,11 @@ | |
| 453 | return azStyles[1]; |
| 454 | } |
| 455 | |
| 456 | /* |
| 457 | ** WEBPAGE: wikiedit |
| 458 | ** URL: /wikiedit/PAGENAME |
| 459 | ** |
| 460 | ** Edit a wiki page. |
| 461 | */ |
| 462 | void wikiedit_page(void){ |
| 463 | char *zTag; |
| @@ -547,14 +547,14 @@ | |
| 547 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 548 | blob_reset(&cksum); |
| 549 | wiki_put(&wiki, 0, wiki_need_moderation(0)); |
| 550 | } |
| 551 | db_end_transaction(0); |
| 552 | cgi_redirectf("wiki/%T", zPageName); |
| 553 | } |
| 554 | if( P("cancel")!=0 ){ |
| 555 | cgi_redirectf("wiki/%T", zPageName); |
| 556 | return; |
| 557 | } |
| 558 | if( zBody==0 ){ |
| 559 | zBody = mprintf("<i>Empty Page</i>"); |
| 560 | } |
| @@ -638,13 +638,13 @@ | |
| 638 | zMimetype = wiki_filter_mimetypes(P("mimetype")); |
| 639 | if( zName[0] && wiki_name_is_wellformed((const unsigned char *)zName) ){ |
| 640 | if( fossil_strcmp(zMimetype,"text/x-fossil-wiki")==0 |
| 641 | && db_get_boolean("wysiwyg-wiki", 0) |
| 642 | ){ |
| 643 | cgi_redirectf("wikiedit/%T&wysiwyg=1", zName); |
| 644 | }else{ |
| 645 | cgi_redirectf("wikiedit/%T&mimetype=%s", zName, zMimetype); |
| 646 | } |
| 647 | } |
| 648 | style_header("Create A New Wiki Page"); |
| 649 | wiki_standard_submenu(W_ALL_BUT(W_NEW)); |
| 650 | @ <p>Rules for wiki page names:</p> |
| @@ -701,11 +701,11 @@ | |
| 701 | fossil_free(zDate); |
| 702 | } |
| 703 | |
| 704 | /* |
| 705 | ** WEBPAGE: wikiappend |
| 706 | ** URL: /wikiappend/PAGENAME&mimetype=MIMETYPE |
| 707 | ** |
| 708 | ** Append text to the end of a wiki page. |
| 709 | */ |
| 710 | void wikiappend_page(void){ |
| 711 | char *zTag; |
| @@ -782,14 +782,14 @@ | |
| 782 | blob_appendf(&wiki, "Z %b\n", &cksum); |
| 783 | blob_reset(&cksum); |
| 784 | wiki_put(&wiki, rid, wiki_need_moderation(0)); |
| 785 | db_end_transaction(0); |
| 786 | } |
| 787 | cgi_redirectf("wiki/%T", zPageName); |
| 788 | } |
| 789 | if( P("cancel")!=0 ){ |
| 790 | cgi_redirectf("wiki/%T", zPageName); |
| 791 | return; |
| 792 | } |
| 793 | style_set_current_page("%T?name=%T", g.zPath, zPageName); |
| 794 | style_header("Append Comment To: %s", zPageName); |
| 795 | if( !goodCaptcha ){ |
| @@ -833,17 +833,17 @@ | |
| 833 | ** Function called to output extra text at the end of each line in |
| 834 | ** a wiki history listing. |
| 835 | */ |
| 836 | static void wiki_history_extra(int rid){ |
| 837 | if( db_exists("SELECT 1 FROM tagxref WHERE rid=%d", rid) ){ |
| 838 | @ %z(href("%R/wdiff/%t&a=%d",zWikiPageName,rid))[diff]</a> |
| 839 | } |
| 840 | } |
| 841 | |
| 842 | /* |
| 843 | ** WEBPAGE: whistory |
| 844 | ** URL: /whistory/PAGENAME |
| 845 | ** |
| 846 | ** Show the complete change history for a single wiki page. |
| 847 | */ |
| 848 | void whistory_page(void){ |
| 849 | Stmt q; |
| @@ -866,11 +866,11 @@ | |
| 866 | style_footer(); |
| 867 | } |
| 868 | |
| 869 | /* |
| 870 | ** WEBPAGE: wdiff |
| 871 | ** URL: /whistory/PAGENAME&a=RID1&b=RID2 |
| 872 | ** |
| 873 | ** Show the difference between two wiki pages. |
| 874 | */ |
| 875 | void wdiff_page(void){ |
| 876 | int rid1, rid2; |
| @@ -956,13 +956,13 @@ | |
| 956 | wiki_prepare_page_list(&q); |
| 957 | while( db_step(&q)==SQLITE_ROW ){ |
| 958 | const char *zName = db_column_text(&q, 0); |
| 959 | int size = db_column_int(&q, 1); |
| 960 | if( size>0 ){ |
| 961 | @ <li>%z(href("%R/wiki/%T",zName))%h(zName)</a></li> |
| 962 | }else if( showAll ){ |
| 963 | @ <li>%z(href("%R/wiki/%T",zName))<s>%h(zName)</s></a></li> |
| 964 | } |
| 965 | } |
| 966 | db_finalize(&q); |
| 967 | @ </ul> |
| 968 | style_footer(); |
| @@ -986,11 +986,11 @@ | |
| 986 | "SELECT substr(tagname, 6, 1000) FROM tag WHERE tagname like 'wiki-%%%q%%'" |
| 987 | " ORDER BY lower(tagname) /*sort*/" , |
| 988 | zTitle); |
| 989 | while( db_step(&q)==SQLITE_ROW ){ |
| 990 | const char *zName = db_column_text(&q, 0); |
| 991 | @ <li>%z(href("%R/wiki/%T",zName))%h(zName)</a></li> |
| 992 | } |
| 993 | db_finalize(&q); |
| 994 | @ </ul> |
| 995 | style_footer(); |
| 996 | } |
| 997 |
+1
-1
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -1259,11 +1259,11 @@ | ||
| 1259 | 1259 | } |
| 1260 | 1260 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1261 | 1261 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1262 | 1262 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1263 | 1263 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1264 | - blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); | |
| 1264 | + blob_appendf(p->pOut, "<a href=\"%R/wiki/%T\">", z); | |
| 1265 | 1265 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1266 | 1266 | /* Probably an array subscript in code */ |
| 1267 | 1267 | zTerm = ""; |
| 1268 | 1268 | }else if( (p->state & (WIKI_NOBADLINKS|WIKI_LINKSONLY))!=0 ){ |
| 1269 | 1269 | zTerm = ""; |
| 1270 | 1270 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1259,11 +1259,11 @@ | |
| 1259 | } |
| 1260 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1261 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1262 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1263 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1264 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1265 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1266 | /* Probably an array subscript in code */ |
| 1267 | zTerm = ""; |
| 1268 | }else if( (p->state & (WIKI_NOBADLINKS|WIKI_LINKSONLY))!=0 ){ |
| 1269 | zTerm = ""; |
| 1270 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1259,11 +1259,11 @@ | |
| 1259 | } |
| 1260 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1261 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1262 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1263 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1264 | blob_appendf(p->pOut, "<a href=\"%R/wiki/%T\">", z); |
| 1265 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1266 | /* Probably an array subscript in code */ |
| 1267 | zTerm = ""; |
| 1268 | }else if( (p->state & (WIKI_NOBADLINKS|WIKI_LINKSONLY))!=0 ){ |
| 1269 | zTerm = ""; |
| 1270 |