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).

stephan 2016-02-20 13:21 trunk
Commit e8735d6a4726c7e4d61ea5be0425854b86aa0260
+6 -6
--- src/attach.c
+++ src/attach.c
@@ -122,17 +122,17 @@
122122
zSrc = "Deleted from";
123123
}else {
124124
zSrc = "Added to";
125125
}
126126
if( type==1 ){
127
- @ %s(zSrc) ticket <a href="%R/tktview?name=%s(zTarget)">
127
+ @ %s(zSrc) ticket <a href="%R/tktview/%s(zTarget)">
128128
@ %S(zTarget)</a>
129129
}else if( type==2 ){
130130
@ %s(zSrc) tech note <a href="%R/technote/%s(zTarget)">
131131
@ %S(zTarget)</a>
132132
}else{
133
- @ %s(zSrc) wiki page <a href="%R/wiki?name=%t(zTarget)">
133
+ @ %s(zSrc) wiki page <a href="%R/wiki/%t(zTarget)">
134134
@ %h(zTarget)</a>
135135
}
136136
}else{
137137
if( zSrc==0 || zSrc[0]==0 ){
138138
@ Deleted
@@ -287,11 +287,11 @@
287287
}
288288
if( !db_exists("SELECT 1 FROM tag WHERE tagname='wiki-%q'", zPage) ){
289289
fossil_redirect_home();
290290
}
291291
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>",
293293
zPage, zPage);
294294
}else if ( zTechNote ){
295295
if( g.perm.Write==0 || g.perm.ApndWiki==0 || g.perm.Attach==0 ){
296296
login_needed(g.anon.Write && g.anon.ApndWiki && g.anon.Attach);
297297
return;
@@ -403,11 +403,11 @@
403403
fossil_free(zTargetType);
404404
}
405405
406406
/*
407407
** WEBPAGE: ainfo
408
-** URL: /ainfo?name=ARTIFACTID
408
+** URL: /ainfo/ARTIFACTID
409409
**
410410
** Show the details of an attachment artifact.
411411
*/
412412
void ainfo_page(void){
413413
int rid; /* RID for the control artifact */
@@ -531,11 +531,11 @@
531531
if( strcmp(zModAction,"delete")==0 ){
532532
moderation_disapprove(rid);
533533
if( zTktUuid ){
534534
cgi_redirectf("%R/tktview/%!S", zTktUuid);
535535
}else{
536
- cgi_redirectf("%R/wiki?name=%t", zWikiName);
536
+ cgi_redirectf("%R/wiki/%t", zWikiName);
537537
}
538538
return;
539539
}
540540
if( strcmp(zModAction,"approve")==0 ){
541541
moderation_approve(rid);
@@ -568,11 +568,11 @@
568568
@ <tr><th>Tech Note:</th>
569569
@ <td>%z(href("%R/technote/%s",zTNUuid))%s(zTNUuid)</a></td></tr>
570570
}
571571
if( zWikiName ){
572572
@ <tr><th>Wiki&nbsp;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>
574574
}
575575
@ <tr><th>Date:</th><td>
576576
hyperlink_to_date(zDate, "</td></tr>");
577577
@ <tr><th>User:</th><td>
578578
hyperlink_to_user(pAttach->zUser, zDate, "</td></tr>");
579579
--- 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&nbsp;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&nbsp;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 @@
8585
8686
for(i=0; zPath[i]; i=j){
8787
for(j=i; zPath[j] && zPath[j]!='/'; j++){}
8888
if( zPath[j] && g.perm.Hyperlink ){
8989
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);
9191
blob_appendf(pOut, "%s%z%#h</a>",
9292
zSep, zLink, j-i, &zPath[i]);
9393
}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);
9595
blob_appendf(pOut, "%s%z%#h</a>",
9696
zSep, zLink, j-i, &zPath[i]);
9797
}
9898
}else{
9999
blob_appendf(pOut, "%s%#h", zSep, j-i, &zPath[i]);
@@ -186,21 +186,21 @@
186186
if( linkTip ){
187187
style_submenu_element("Tip", "Tip", "%s",
188188
url_render(&sURI, "ci", "tip", 0, 0));
189189
}
190190
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>]
192192
@ %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);
194194
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",
196196
zUuid);
197197
}
198198
}else{
199199
@ <h2>The union of all files from all check-ins
200200
@ %s(blob_str(&dirname))</h2>
201
- zSubdirLink = mprintf("%R/dir?name=%T", zPrefix);
201
+ zSubdirLink = mprintf("%R/dir/%T", zPrefix);
202202
}
203203
style_submenu_element("All", "All", "%s",
204204
url_render(&sURI, "ci", 0, 0, 0));
205205
style_submenu_element("Tree-View", "Tree-View", "%s",
206206
url_render(&sURI, "type", "tree", 0, 0));
@@ -290,11 +290,11 @@
290290
const char *zLink;
291291
if( zCI ){
292292
const char *zUuid = db_column_text(&q, 1);
293293
zLink = href("%R/artifact/%!S",zUuid);
294294
}else{
295
- zLink = href("%R/finfo?name=%T%T",zPrefix,zFN);
295
+ zLink = href("%R/finfo/%T%T",zPrefix,zFN);
296296
}
297297
@ <li class="%z(fileext_class(zFN))">%z(zLink)%h(zFN)</a></li>
298298
}
299299
}
300300
db_finalize(&q);
@@ -628,11 +628,11 @@
628628
style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0);
629629
if( zCI ){
630630
style_submenu_element("All", "All", "%s",
631631
url_render(&sURI, "ci", 0, 0, 0));
632632
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",
634634
zUuid);
635635
}
636636
}
637637
if( linkTrunk ){
638638
style_submenu_element("Trunk", "Trunk", "%s",
@@ -708,11 +708,11 @@
708708
if( zCI ){
709709
@ <h2>%s(zObjType) from
710710
if( sqlite3_strnicmp(zCI, zUuid, (int)strlen(zCI))!=0 ){
711711
@ "%h(zCI)"
712712
}
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))
714714
}else{
715715
int n = db_int(0, "SELECT count(*) FROM plink");
716716
@ <h2>%s(zObjType) from all %d(n) check-ins %s(blob_str(&dirname))
717717
}
718718
if( useMtime ){
@@ -772,11 +772,11 @@
772772
const char *zFileClass = fileext_class(p->zName);
773773
char *zLink;
774774
if( zCI ){
775775
zLink = href("%R/artifact/%!S",p->zUuid);
776776
}else{
777
- zLink = href("%R/finfo?name=%T",p->zFullName);
777
+ zLink = href("%R/finfo/%T",p->zFullName);
778778
}
779779
@ <li class="%z(zFileClass)%s(zLastClass)"><div class="filetreeline">
780780
@ %z(zLink)%h(p->zName)</a>
781781
if( p->mtime>0 ){
782782
char *zAge = human_readable_age(rNow - p->mtime);
783783
--- 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 @@
23532353
clr = gradient_color(clr1, clr2, ann.nVers-1, i);
23542354
ann.aVers[i].zBgColor = mprintf("#%06x", clr);
23552355
}
23562356
23572357
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);
23592359
@ <h2>Ancestors of %z(zLink)%h(zFilename)</a> analyzed:</h2>
23602360
@ <ol>
23612361
for(p=ann.aVers, i=0; i<ann.nVers; i++, p++){
23622362
@ <li><span style='background-color:%s(p->zBgColor);'>%s(p->zDate)
23632363
@ check-in %z(href("%R/info/%!S",p->zMUuid))%S(p->zMUuid)</a>
@@ -2381,16 +2381,16 @@
23812381
@ </ol>
23822382
@ <hr>
23832383
}
23842384
if( !ann.bLimit ){
23852385
@ <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>
23872387
@ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2>
23882388
iLimit = ann.nVers+10;
23892389
}else{
23902390
@ <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>
23922392
@ from check-in %z(href("%R/info/%!S",zCI))%S(zCI)</a>:</h2>
23932393
}
23942394
@ <pre>
23952395
for(i=0; i<ann.nOrig; i++){
23962396
int iVers = ann.aOrig[i].iVers;
23972397
--- 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 @@
150150
blob_appendf(&title, "Tech-note %S", zId);
151151
tail = fullbody;
152152
}
153153
style_header("%s", blob_str(&title));
154154
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);
156156
if( g.perm.Attach ){
157157
style_submenu_element("Attach", "Add an attachment",
158158
"%R/attachadd?technote=%!S&from=%R/technote/%!S",
159159
zId, zId);
160160
}
@@ -162,28 +162,28 @@
162162
zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate);
163163
style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId);
164164
if( g.perm.Hyperlink ){
165165
if( verboseFlag ){
166166
style_submenu_element("Plain", 0,
167
- "%R/technote?name=%!S&aid=%s&mimetype=text/plain",
167
+ "%R/technote/%!S&aid=%s&mimetype=text/plain",
168168
zId, zUuid);
169169
if( nextRid ){
170170
char *zNext;
171171
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",
173173
zId, zNext);
174174
free(zNext);
175175
}
176176
if( prevRid ){
177177
char *zPrev;
178178
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",
180180
zId, zPrev);
181181
free(zPrev);
182182
}
183183
}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",
185185
zId, zUuid);
186186
}
187187
}
188188
189189
if( verboseFlag && g.perm.Hyperlink ){
@@ -448,14 +448,14 @@
448448
@ Internal error: Fossil tried to make an invalid artifact for
449449
@ the edited technote.
450450
style_footer();
451451
return;
452452
}
453
- cgi_redirectf("technote?name=%T", zId);
453
+ cgi_redirectf("technote/%T", zId);
454454
}
455455
if( P("cancel")!=0 ){
456
- cgi_redirectf("technote?name=%T", zId);
456
+ cgi_redirectf("technote/%T", zId);
457457
return;
458458
}
459459
if( zBody==0 ){
460460
zBody = mprintf("Insert new content here...");
461461
}
462462
--- 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 @@
276276
/* Values for the debug= query parameter to finfo */
277277
#define FINFO_DEBUG_MLINK 0x01
278278
279279
/*
280280
** WEBPAGE: finfo
281
-** URL: /finfo?name=FILENAME
281
+** URL: /finfo/FILENAME
282282
**
283283
** Show the change history for a single file.
284284
**
285285
** Additional query parameters:
286286
**
@@ -326,11 +326,11 @@
326326
@ No such file: %h(zFilename)
327327
style_footer();
328328
return;
329329
}
330330
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);
332332
}
333333
if( baseCheckin ){
334334
compute_direct_ancestors(baseCheckin);
335335
}
336336
url_add_parameter(&url, "name", zFilename);
@@ -399,11 +399,11 @@
399399
if( n>0 ){
400400
blob_appendf(&title, "First %d ancestors of file ", n);
401401
}else{
402402
blob_appendf(&title, "Ancestors of file ");
403403
}
404
- blob_appendf(&title,"<a href='%R/finfo?name=%T'>%h</a>",
404
+ blob_appendf(&title,"<a href='%R/finfo/%T'>%h</a>",
405405
zFilename, zFilename);
406406
if( fShowId ) blob_appendf(&title, " (%d)", fnid);
407407
blob_appendf(&title, " from check-in %z%S</a>", zLink, zUuid);
408408
if( fShowId ) blob_appendf(&title, " (%d)", baseCheckin);
409409
fossil_free(zUuid);
@@ -487,11 +487,11 @@
487487
@ <b>Added</b>
488488
}else if( pfnid ){
489489
char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d",
490490
pfnid);
491491
@ <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>
493493
}
494494
@ %z(href("%R/artifact/%!S",zUuid))[%S(zUuid)]</a>
495495
if( fShowId ){
496496
@ (%d(frid))
497497
}
@@ -504,11 +504,11 @@
504504
" WHERE mid=%d"
505505
" AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q))",
506506
fmid, zFilename);
507507
if( zNewName ){
508508
@ <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
510510
fossil_free(zNewName);
511511
}else{
512512
@ <b>Deleted</b> by check-in
513513
}
514514
}
@@ -538,11 +538,11 @@
538538
@ parents=%d(aParent[0])
539539
for(ii=1; ii<nParent; ii++){
540540
@ %d(aParent[ii])
541541
}
542542
}
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);
544544
@ %z(zAncLink)[ancestry]</a>
545545
}
546546
tag_private_status(frid);
547547
@ </td></tr>
548548
}
@@ -562,11 +562,11 @@
562562
style_footer();
563563
}
564564
565565
/*
566566
** WEBPAGE: mlink
567
-** URL: /mlink?name=FILENAME
567
+** URL: /mlink/FILENAME
568568
** URL: /mlink?ci=NAME
569569
**
570570
** Show all MLINK table entries for a particular file, or for
571571
** a particular check-in. This screen is intended for use by developers
572572
** in debugging Fossil.
@@ -602,11 +602,11 @@
602602
" AND event.objid=mlink.mid"
603603
" ORDER BY 1 DESC",
604604
fnid
605605
);
606606
@ <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>
608608
@ <div class='brlist'>
609609
@ <table id='mlinktable'>
610610
@ <thead><tr>
611611
@ <th>Date</th>
612612
@ <th>Check-in</th>
@@ -648,11 +648,11 @@
648648
}else{
649649
@ <td><i>(New)</i></td>
650650
}
651651
@ <td align='center'>%s(isExe?"&#x2713;":"")</td>
652652
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>
654654
}else{
655655
@ <td></td>
656656
}
657657
@ </tr>
658658
}
@@ -698,11 +698,11 @@
698698
const char *zPrior = db_column_text(&q,4);
699699
const char *zParent = db_column_text(&q,5);
700700
int isExec = db_column_int(&q,6);
701701
int isAux = db_column_int(&q,7);
702702
@ <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>
704704
if( zParent ){
705705
@ <td><a href='%R/info/%!S(zPid)'>%S(zParent)</a></td>
706706
}else{
707707
@ <td><i>(New)</i></td>
708708
}
@@ -719,11 +719,11 @@
719719
}else{
720720
@ <td><i>(New)</i></td>
721721
}
722722
@ <td align='center'>%s(isExec?"&#x2713;":"")</td>
723723
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>
725725
}else{
726726
@ <td></td>
727727
}
728728
@ </tr>
729729
}
730730
--- 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?"&#x2713;":"")</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?"&#x2713;":"")</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?"&#x2713;":"")</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?"&#x2713;":"")</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 @@
396396
append_diff(zOld, zNew, diffFlags, pRe);
397397
}
398398
}else{
399399
if( zOld && zNew ){
400400
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>
402402
@ from %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a>
403403
@ to %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>.
404404
}else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){
405405
@ 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>.
408408
}else{
409
- @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a> became
409
+ @ %z(href("%R/finfo/%T",zName))%h(zName)</a> became
410410
if( mperm==PERM_EXE ){
411411
@ executable with contents
412412
}else if( mperm==PERM_LNK ){
413413
@ a symlink with target
414414
}else{
@@ -415,14 +415,14 @@
415415
@ a regular file with contents
416416
}
417417
@ %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>.
418418
}
419419
}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>
421421
@ version %z(href("%R/artifact/%!S",zOld))[%S(zOld)]</a>.
422422
}else{
423
- @ Added %z(href("%R/finfo?name=%T",zName))%h(zName)</a>
423
+ @ Added %z(href("%R/finfo/%T",zName))%h(zName)</a>
424424
@ version %z(href("%R/artifact/%!S",zNew))[%S(zNew)]</a>.
425425
}
426426
if( diffFlags ){
427427
append_diff(zOld, zNew, diffFlags, pRe);
428428
}else if( zOld && zNew && fossil_strcmp(zOld,zNew)!=0 ){
@@ -500,12 +500,12 @@
500500
}
501501
502502
/*
503503
** WEBPAGE: vinfo
504504
** WEBPAGE: ci
505
-** URL: /ci?name=ARTIFACTID
506
-** URL: /vinfo?name=ARTIFACTID
505
+** URL: /ci/ARTIFACTID
506
+** URL: /vinfo/ARTIFACTID
507507
**
508508
** Display information about a particular check-in.
509509
**
510510
** We also jump here from /info if the name is a check-in
511511
**
@@ -676,11 +676,11 @@
676676
}
677677
@ </td></tr>
678678
@ <tr><th>Other&nbsp;Links:</th>
679679
@ <td>
680680
@ %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>
682682
@ | %z(href("%R/tree?nofiles&type=tree&ci=%!S",zUuid))folders</a>
683683
@ | %z(href("%R/artifact/%!S",zUuid))manifest</a>
684684
if( g.anon.Write ){
685685
@ | %z(href("%R/ci_edit?r=%!S",zUuid))edit</a>
686686
}
@@ -768,11 +768,11 @@
768768
style_footer();
769769
}
770770
771771
/*
772772
** WEBPAGE: winfo
773
-** URL: /winfo?name=UUID
773
+** URL: /winfo/UUID
774774
**
775775
** Display information about a wiki page.
776776
*/
777777
void winfo_page(void){
778778
int rid;
@@ -799,11 +799,11 @@
799799
** Next, check if the wiki page still exists; if not, we cannot
800800
** redirect to it.
801801
*/
802802
if( db_exists("SELECT 1 FROM tagxref JOIN tag USING(tagid)"
803803
" 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);
805805
/*NOTREACHED*/
806806
}else{
807807
cgi_redirectf("%R/modreq");
808808
/*NOTREACHED*/
809809
}
@@ -814,13 +814,13 @@
814814
}
815815
style_header("Update of \"%h\"", pWiki->zWikiTitle);
816816
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
817817
zDate = db_text(0, "SELECT datetime(%.17g)", pWiki->rDate);
818818
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",
820820
pWiki->zWikiTitle);
821
- style_submenu_element("Page", "Page", "wiki?name=%t",
821
+ style_submenu_element("Page", "Page", "wiki/%t",
822822
pWiki->zWikiTitle);
823823
login_anonymous_available();
824824
@ <div class="section">Overview</div>
825825
@ <p><table class="label-value">
826826
@ <tr><th>Artifact&nbsp;ID:</th>
@@ -1245,11 +1245,11 @@
12451245
objType |= OBJTYPE_EXE;
12461246
}else{
12471247
@ <li>File
12481248
}
12491249
objType |= OBJTYPE_CONTENT;
1250
- @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a>
1250
+ @ %z(href("%R/finfo/%T",zName))%h(zName)</a>
12511251
tag_private_status(rid);
12521252
if( showDetail ){
12531253
@ <ul>
12541254
}
12551255
prevName = fossil_strdup(zName);
@@ -1269,11 +1269,11 @@
12691269
@ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
12701270
}
12711271
@ &mdash; %!W(zCom) (user:
12721272
hyperlink_to_user(zUser,zDate,")");
12731273
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>
12751275
@ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers))
12761276
@ [annotate]</a>
12771277
@ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers))
12781278
@ [blame]</a>
12791279
}
@@ -1306,11 +1306,11 @@
13061306
@ Also wiki page
13071307
}else{
13081308
@ Wiki page
13091309
}
13101310
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
13121312
hyperlink_to_user(zUser,zDate," on");
13131313
hyperlink_to_date(zDate,".");
13141314
nWiki++;
13151315
cnt++;
13161316
if( pDownloadName && blob_size(pDownloadName)==0 ){
@@ -1384,17 +1384,17 @@
13841384
@ Attachment "%h(zFilename)" to
13851385
}
13861386
objType |= OBJTYPE_ATTACHMENT;
13871387
if( strlen(zTarget)==UUID_SIZE && validate16(zTarget,UUID_SIZE) ){
13881388
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>]
13901390
}else{
13911391
@ ticket [%S(zTarget)]
13921392
}
13931393
}else{
13941394
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>]
13961396
}else{
13971397
@ wiki page [%h(zTarget)]
13981398
}
13991399
}
14001400
@ added by
@@ -1520,11 +1520,11 @@
15201520
style_footer();
15211521
}
15221522
15231523
/*
15241524
** WEBPAGE: raw
1525
-** URL: /raw?name=ARTIFACTID&m=TYPE
1525
+** URL: /raw/ARTIFACTID&m=TYPE
15261526
**
15271527
** Return the uninterpreted content of an artifact. Used primarily
15281528
** to view artifacts that are images.
15291529
*/
15301530
void rawartifact_page(void){
@@ -1612,11 +1612,11 @@
16121612
}
16131613
}
16141614
16151615
/*
16161616
** WEBPAGE: hexdump
1617
-** URL: /hexdump?name=ARTIFACTID
1617
+** URL: /hexdump/ARTIFACTID
16181618
**
16191619
** Show the complete content of a file identified by ARTIFACTID
16201620
** as preformatted text.
16211621
**
16221622
** Other parameters:
@@ -1653,11 +1653,11 @@
16531653
}
16541654
blob_zero(&downloadName);
16551655
if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
16561656
object_description(rid, objdescFlags, &downloadName);
16571657
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);
16591659
@ <hr />
16601660
content_get(rid, &content);
16611661
@ <blockquote><pre>
16621662
hexdump(&content);
16631663
@ </pre></blockquote>
@@ -1851,11 +1851,11 @@
18511851
if( rid==0 ) fossil_redirect_home();
18521852
if( descOnly || P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
18531853
blob_zero(&downloadName);
18541854
objType = object_description(rid, objdescFlags, &downloadName);
18551855
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),
18571857
db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid));
18581858
/*NOTREACHED*/
18591859
}
18601860
if( g.perm.Admin ){
18611861
const char *zUuid = db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid);
@@ -1889,11 +1889,11 @@
18891889
@ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p>
18901890
}
18911891
db_finalize(&q);
18921892
}
18931893
style_submenu_element("Download", "Download",
1894
- "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
1894
+ "%R/raw/%T/%s", blob_str(&downloadName), zUuid);
18951895
if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
18961896
style_submenu_element("Check-ins Using", "Check-ins Using",
18971897
"%R/timeline?n=200&uf=%s",zUuid);
18981898
}
18991899
asText = P("txt")!=0;
@@ -1938,11 +1938,11 @@
19381938
@ width="100%%" frameborder="0" marginwidth="0" marginheight="0"
19391939
@ sandbox="allow-same-origin"
19401940
@ onload="this.height=this.contentDocument.documentElement.scrollHeight;">
19411941
@ </iframe>
19421942
}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);
19441944
blob_to_utf8_no_bom(&content, 0);
19451945
zMime = mimetype_from_content(&content);
19461946
@ <blockquote>
19471947
if( zMime==0 ){
19481948
const char *z;
@@ -1967,11 +1967,11 @@
19671967
style_footer();
19681968
}
19691969
19701970
/*
19711971
** WEBPAGE: tinfo
1972
-** URL: /tinfo?name=ARTIFACTID
1972
+** URL: /tinfo/ARTIFACTID
19731973
**
19741974
** Show the details of a ticket change control artifact.
19751975
*/
19761976
void tinfo_page(void){
19771977
int rid;
@@ -2485,11 +2485,11 @@
24852485
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
24862486
zComment = db_text(0, "SELECT coalesce(ecomment,comment)"
24872487
" FROM event WHERE objid=%d", rid);
24882488
if( zComment==0 ) fossil_redirect_home();
24892489
if( P("cancel") ){
2490
- cgi_redirectf("ci?name=%s", zUuid);
2490
+ cgi_redirectf("ci/%s", zUuid);
24912491
}
24922492
if( g.perm.Setup ) zChngTime = P("chngtime");
24932493
zNewComment = PD("c",zComment);
24942494
zUser = db_text(0, "SELECT coalesce(euser,user)"
24952495
" FROM event WHERE objid=%d", rid);
@@ -2548,11 +2548,11 @@
25482548
if( zHideFlag[0] ) hide_branch();
25492549
if( zCloseFlag[0] ) close_leaf(rid);
25502550
if( zNewTagFlag[0] && zNewTag[0] ) add_tag(zNewTag);
25512551
if( zNewBrFlag[0] && zNewBranch[0] ) change_branch(rid,zNewBranch);
25522552
apply_newtags(&ctrl, rid, zUuid);
2553
- cgi_redirectf("ci?name=%s", zUuid);
2553
+ cgi_redirectf("ci/%s", zUuid);
25542554
}
25552555
blob_zero(&comment);
25562556
blob_append(&comment, zNewComment, -1);
25572557
zUuid[10] = 0;
25582558
style_header("Edit Check-in [%s]", zUuid);
25592559
--- 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&nbsp;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&nbsp;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 @ &mdash; %!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&nbsp;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&nbsp;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 @ &mdash; %!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 @@
260260
cson_object_set_s(zEntry, zKeySize,
261261
cson_value_new_integer( (cson_int_t)sz ));
262262
cson_object_set_s(zEntry, zKeyTime,
263263
cson_value_new_integer( (cson_int_t)ts ));
264264
cson_object_set_s(zEntry, zKeyRaw,
265
- json_new_string_f("/raw/%T?name=%t",
265
+ json_new_string_f("/raw/%T/%t",
266266
fullName, u));
267267
}
268268
}
269269
db_finalize(&q);
270270
if(pM){
271271
--- 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
--- src/json_timeline.c
+++ src/json_timeline.c
@@ -350,11 +350,11 @@
350350
}
351351
cson_object_set(row, "size", json_new_int(db_column_int(&q,5)));
352352
353353
cson_object_set(row, "state",
354354
json_new_string(json_artifact_status_to_string(isNew,isDel)));
355
- zDownload = mprintf("/raw/%s?name=%s",
355
+ zDownload = mprintf("/raw/%s/%s",
356356
/* reminder: g.zBaseURL is of course not set for CLI mode. */
357357
db_column_text(&q,2),
358358
db_column_text(&q,3));
359359
cson_object_set(row, "downloadPath", json_new_string(zDownload));
360360
free(zDownload);
361361
--- 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 @@
559559
const char *zOld = db_column_text(&q, 1);
560560
const char *zNew = db_column_text(&q, 2);
561561
const char *zUuid = db_column_text(&q, 3);
562562
@ <tr>
563563
@ <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>
566566
@ <td>%z(href("%R/info/%!S",zUuid))%S(zUuid)</a></td></tr>
567567
}
568568
@ </table>
569569
db_finalize(&q);
570570
style_footer();
571571
--- 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 @@
780780
blob_reset(&content);
781781
@ %s(pState->zWikiEnd)
782782
}
783783
}else if( azName[i][0]=='#' ){
784784
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>
786786
}else if( zData[0]==0 ){
787787
@ <td valign="top">&nbsp;</td>
788788
}else{
789789
@ <td valign="top">
790790
@ %h(zData)
791791
--- 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">&nbsp;</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">&nbsp;</td>
788 }else{
789 @ <td valign="top">
790 @ %h(zData)
791
+2 -2
--- src/search.c
+++ src/search.c
@@ -680,11 +680,11 @@
680680
" AND tagxref.tagid=tag.tagid"
681681
" GROUP BY 1"
682682
")"
683683
"INSERT INTO x(label,url,score,id,date,snip)"
684684
" SELECT printf('Wiki: %%s',name),"
685
- " printf('/wiki?name=%%s',urlencode(name)),"
685
+ " printf('/wiki/%%s',urlencode(name)),"
686686
" search_score(),"
687687
" 'w'||rid,"
688688
" datetime(mtime),"
689689
" search_snippet()"
690690
" FROM wiki"
@@ -1577,11 +1577,11 @@
15771577
if( db_changes()==0 ) return;
15781578
db_multi_exec(
15791579
"REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)"
15801580
" SELECT ftsdocs.rowid, 1, 'w', ftsdocs.rid, ftsdocs.name,"
15811581
" 'Wiki: '||ftsdocs.name,"
1582
- " '/wiki?name='||urlencode(ftsdocs.name),"
1582
+ " '/wiki/'||urlencode(ftsdocs.name),"
15831583
" tagxref.mtime"
15841584
" FROM ftsdocs, tagxref"
15851585
" WHERE ftsdocs.type='w' AND NOT ftsdocs.idxed"
15861586
" AND tagxref.rid=ftsdocs.rid"
15871587
);
15881588
--- 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 @@
436436
int sz;
437437
if( n<=0 ) continue;
438438
sz = (int)(100*n/mxEvent);
439439
if( sz==0 ) sz = 1;
440440
@<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>
442442
@ <td>%d(n)</td>
443443
@ <td>
444444
@ <div class='statistics-report-graph-line'
445445
@ style='width:%d(sz)%%;'>&nbsp;</div>
446446
@ </td>
447447
--- 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)%%;'>&nbsp;</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)%%;'>&nbsp;</div>
446 @ </td>
447
+1 -1
--- src/timeline.c
+++ src/timeline.c
@@ -1139,11 +1139,11 @@
11391139
);
11401140
blob_zero(&out);
11411141
while( db_step(&q)==SQLITE_ROW ){
11421142
const char *zFN = db_column_text(&q, 0);
11431143
blob_appendf(&out, "%s%z%h</a>", zSep,
1144
- href("%R/finfo?name=%t", zFN), zFN);
1144
+ href("%R/finfo/%t", zFN), zFN);
11451145
zSep = " or ";
11461146
}
11471147
db_finalize(&q);
11481148
return blob_str(&out);
11491149
}
11501150
--- 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 @@
439439
@ </ul></font>
440440
}
441441
442442
/*
443443
** WEBPAGE: tktview
444
-** URL: tktview?name=UUID
444
+** URL: tktview/UUID
445445
**
446446
** View a ticket identified by the name= query parameter.
447447
*/
448448
void tktview_page(void){
449449
const char *zScript;
@@ -451,11 +451,11 @@
451451
const char *zUuid = PD("name","");
452452
453453
login_check_credentials();
454454
if( !g.perm.RdTkt ){ login_needed(g.anon.RdTkt); return; }
455455
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",
457457
g.zTop, PD("name",""));
458458
}
459459
if( g.perm.Hyperlink ){
460460
style_submenu_element("History", "History Of This Ticket",
461461
"%s/tkthistory/%T", g.zTop, zUuid);
@@ -744,11 +744,11 @@
744744
login_needed(g.anon.ApndTkt || g.anon.WrTkt);
745745
return;
746746
}
747747
zName = P("name");
748748
if( P("cancel") ){
749
- cgi_redirectf("tktview?name=%T", zName);
749
+ cgi_redirectf("tktview/%T", zName);
750750
}
751751
style_header("Edit Ticket");
752752
if( zName==0 || (nName = strlen(zName))<4 || nName>UUID_SIZE
753753
|| !validate16(zName,nName) ){
754754
@ <span class="tktError">Not a valid ticket id: \"%h(zName)\"</span>
@@ -827,11 +827,11 @@
827827
return zErr;
828828
}
829829
830830
/*
831831
** WEBPAGE: tkttimeline
832
-** URL: /tkttimeline?name=TICKETUUID&y=TYPE
832
+** URL: /tkttimeline/TICKETUUID&y=TYPE
833833
**
834834
** Show the change history for a single ticket in timeline format.
835835
*/
836836
void tkttimeline_page(void){
837837
Stmt q;
@@ -850,14 +850,14 @@
850850
}
851851
zUuid = PD("name","");
852852
zType = PD("y","a");
853853
if( zType[0]!='c' ){
854854
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);
856856
}else{
857857
style_submenu_element("Timeline", "Timeline",
858
- "%s/tkttimeline?name=%T", g.zTop, zUuid);
858
+ "%s/tkttimeline/%T", g.zTop, zUuid);
859859
}
860860
style_submenu_element("History", "History",
861861
"%s/tkthistory/%s", g.zTop, zUuid);
862862
style_submenu_element("Status", "Status",
863863
"%s/info/%s", g.zTop, zUuid);
@@ -906,11 +906,11 @@
906906
style_footer();
907907
}
908908
909909
/*
910910
** WEBPAGE: tkthistory
911
-** URL: /tkthistory?name=TICKETUUID
911
+** URL: /tkthistory/TICKETUUID
912912
**
913913
** Show the complete change history for a single ticket
914914
*/
915915
void tkthistory_page(void){
916916
Stmt q;
@@ -927,13 +927,13 @@
927927
zUuid = PD("name","");
928928
zTitle = mprintf("History Of Ticket %h", zUuid);
929929
style_submenu_element("Status", "Status",
930930
"%s/info/%s", g.zTop, zUuid);
931931
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);
933933
style_submenu_element("Timeline", "Timeline",
934
- "%s/tkttimeline?name=%s", g.zTop, zUuid);
934
+ "%s/tkttimeline/%s", g.zTop, zUuid);
935935
if( P("plaintext")!=0 ){
936936
style_submenu_element("Formatted", "Formatted",
937937
"%R/tkthistory/%s", zUuid);
938938
}else{
939939
style_submenu_element("Plaintext", "Plaintext",
940940
--- 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 @@
231231
}
232232
#if 0
233233
if( (ok & W_BLOG)!=0
234234
#endif
235235
if( (ok & W_SANDBOX)!=0 ){
236
- style_submenu_element("Sandbox", "Sandbox", "%R/wiki?name=Sandbox");
236
+ style_submenu_element("Sandbox", "Sandbox", "%R/wiki/Sandbox");
237237
}
238238
}
239239
240240
/*
241241
** WEBPAGE: wikihelp
@@ -254,18 +254,18 @@
254254
@ %h(zWikiHomePageName)</a> wiki home page.</li>
255255
}
256256
}
257257
{ char *zHomePageName = db_get("project-name",0);
258258
if( zHomePageName ){
259
- @ <li> %z(href("%R/wiki?name=%t",zHomePageName))
259
+ @ <li> %z(href("%R/wiki/%t",zHomePageName))
260260
@ %h(zHomePageName)</a> project home page.</li>
261261
}
262262
}
263263
@ <li> %z(href("%R/timeline?y=w"))Recent changes</a> to wiki pages.</li>
264264
@ <li> Formatting rules for %z(href("%R/wiki_rules"))Fossil Wiki</a> and for
265265
@ %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>
267267
@ to experiment.</li>
268268
if( g.anon.NewWiki ){
269269
@ <li> Create a %z(href("%R/wikinew"))new wiki page</a>.</li>
270270
if( g.anon.Write ){
271271
@ <li> Create a %z(href("%R/technoteedit"))new tech-note</a>.</li>
@@ -299,11 +299,11 @@
299299
style_footer();
300300
}
301301
302302
/*
303303
** WEBPAGE: wiki
304
-** URL: /wiki?name=PAGENAME
304
+** URL: /wiki/PAGENAME
305305
*/
306306
void wiki_page(void){
307307
char *zTag;
308308
int rid = 0;
309309
int isSandbox;
@@ -352,23 +352,23 @@
352352
}
353353
zMimetype = wiki_filter_mimetypes(zMimetype);
354354
if( !g.isHome ){
355355
if( rid ){
356356
style_submenu_element("Diff", "Last change",
357
- "%R/wdiff?name=%T&a=%d", zPageName, rid);
357
+ "%R/wdiff/%T&a=%d", zPageName, rid);
358358
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
359359
style_submenu_element("Details", "Details",
360360
"%R/info/%s", zUuid);
361361
}
362362
if( (rid && g.anon.WrWiki) || (!rid && g.anon.NewWiki) ){
363363
if( db_get_boolean("wysiwyg-wiki", 0) ){
364364
style_submenu_element("Edit", "Edit Wiki Page",
365
- "%s/wikiedit?name=%T&wysiwyg=1",
365
+ "%s/wikiedit/%T&wysiwyg=1",
366366
g.zTop, zPageName);
367367
}else{
368368
style_submenu_element("Edit", "Edit Wiki Page",
369
- "%s/wikiedit?name=%T",
369
+ "%s/wikiedit/%T",
370370
g.zTop, zPageName);
371371
}
372372
}
373373
if( rid && g.anon.ApndWiki && g.anon.Attach ){
374374
style_submenu_element("Attach", "Add An Attachment",
@@ -375,15 +375,15 @@
375375
"%s/attachadd?page=%T&from=%s/wiki%%3fname=%T",
376376
g.zTop, zPageName, g.zTop, zPageName);
377377
}
378378
if( rid && g.anon.ApndWiki ){
379379
style_submenu_element("Append", "Add A Comment",
380
- "%s/wikiappend?name=%T&mimetype=%s",
380
+ "%s/wikiappend/%T&mimetype=%s",
381381
g.zTop, zPageName, zMimetype);
382382
}
383383
if( g.perm.Hyperlink ){
384
- style_submenu_element("History", "History", "%s/whistory?name=%T",
384
+ style_submenu_element("History", "History", "%s/whistory/%T",
385385
g.zTop, zPageName);
386386
}
387387
}
388388
style_set_current_page("%T?name=%T", g.zPath, zPageName);
389389
style_header("%s", zPageName);
@@ -453,11 +453,11 @@
453453
return azStyles[1];
454454
}
455455
456456
/*
457457
** WEBPAGE: wikiedit
458
-** URL: /wikiedit?name=PAGENAME
458
+** URL: /wikiedit/PAGENAME
459459
**
460460
** Edit a wiki page.
461461
*/
462462
void wikiedit_page(void){
463463
char *zTag;
@@ -547,14 +547,14 @@
547547
blob_appendf(&wiki, "Z %b\n", &cksum);
548548
blob_reset(&cksum);
549549
wiki_put(&wiki, 0, wiki_need_moderation(0));
550550
}
551551
db_end_transaction(0);
552
- cgi_redirectf("wiki?name=%T", zPageName);
552
+ cgi_redirectf("wiki/%T", zPageName);
553553
}
554554
if( P("cancel")!=0 ){
555
- cgi_redirectf("wiki?name=%T", zPageName);
555
+ cgi_redirectf("wiki/%T", zPageName);
556556
return;
557557
}
558558
if( zBody==0 ){
559559
zBody = mprintf("<i>Empty Page</i>");
560560
}
@@ -638,13 +638,13 @@
638638
zMimetype = wiki_filter_mimetypes(P("mimetype"));
639639
if( zName[0] && wiki_name_is_wellformed((const unsigned char *)zName) ){
640640
if( fossil_strcmp(zMimetype,"text/x-fossil-wiki")==0
641641
&& db_get_boolean("wysiwyg-wiki", 0)
642642
){
643
- cgi_redirectf("wikiedit?name=%T&wysiwyg=1", zName);
643
+ cgi_redirectf("wikiedit/%T&wysiwyg=1", zName);
644644
}else{
645
- cgi_redirectf("wikiedit?name=%T&mimetype=%s", zName, zMimetype);
645
+ cgi_redirectf("wikiedit/%T&mimetype=%s", zName, zMimetype);
646646
}
647647
}
648648
style_header("Create A New Wiki Page");
649649
wiki_standard_submenu(W_ALL_BUT(W_NEW));
650650
@ <p>Rules for wiki page names:</p>
@@ -701,11 +701,11 @@
701701
fossil_free(zDate);
702702
}
703703
704704
/*
705705
** WEBPAGE: wikiappend
706
-** URL: /wikiappend?name=PAGENAME&mimetype=MIMETYPE
706
+** URL: /wikiappend/PAGENAME&mimetype=MIMETYPE
707707
**
708708
** Append text to the end of a wiki page.
709709
*/
710710
void wikiappend_page(void){
711711
char *zTag;
@@ -782,14 +782,14 @@
782782
blob_appendf(&wiki, "Z %b\n", &cksum);
783783
blob_reset(&cksum);
784784
wiki_put(&wiki, rid, wiki_need_moderation(0));
785785
db_end_transaction(0);
786786
}
787
- cgi_redirectf("wiki?name=%T", zPageName);
787
+ cgi_redirectf("wiki/%T", zPageName);
788788
}
789789
if( P("cancel")!=0 ){
790
- cgi_redirectf("wiki?name=%T", zPageName);
790
+ cgi_redirectf("wiki/%T", zPageName);
791791
return;
792792
}
793793
style_set_current_page("%T?name=%T", g.zPath, zPageName);
794794
style_header("Append Comment To: %s", zPageName);
795795
if( !goodCaptcha ){
@@ -833,17 +833,17 @@
833833
** Function called to output extra text at the end of each line in
834834
** a wiki history listing.
835835
*/
836836
static void wiki_history_extra(int rid){
837837
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>
839839
}
840840
}
841841
842842
/*
843843
** WEBPAGE: whistory
844
-** URL: /whistory?name=PAGENAME
844
+** URL: /whistory/PAGENAME
845845
**
846846
** Show the complete change history for a single wiki page.
847847
*/
848848
void whistory_page(void){
849849
Stmt q;
@@ -866,11 +866,11 @@
866866
style_footer();
867867
}
868868
869869
/*
870870
** WEBPAGE: wdiff
871
-** URL: /whistory?name=PAGENAME&a=RID1&b=RID2
871
+** URL: /whistory/PAGENAME&a=RID1&b=RID2
872872
**
873873
** Show the difference between two wiki pages.
874874
*/
875875
void wdiff_page(void){
876876
int rid1, rid2;
@@ -956,13 +956,13 @@
956956
wiki_prepare_page_list(&q);
957957
while( db_step(&q)==SQLITE_ROW ){
958958
const char *zName = db_column_text(&q, 0);
959959
int size = db_column_int(&q, 1);
960960
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>
962962
}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>
964964
}
965965
}
966966
db_finalize(&q);
967967
@ </ul>
968968
style_footer();
@@ -986,11 +986,11 @@
986986
"SELECT substr(tagname, 6, 1000) FROM tag WHERE tagname like 'wiki-%%%q%%'"
987987
" ORDER BY lower(tagname) /*sort*/" ,
988988
zTitle);
989989
while( db_step(&q)==SQLITE_ROW ){
990990
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>
992992
}
993993
db_finalize(&q);
994994
@ </ul>
995995
style_footer();
996996
}
997997
--- 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
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -1259,11 +1259,11 @@
12591259
}
12601260
}else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-'
12611261
&& db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){
12621262
blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget);
12631263
}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);
12651265
}else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){
12661266
/* Probably an array subscript in code */
12671267
zTerm = "";
12681268
}else if( (p->state & (WIKI_NOBADLINKS|WIKI_LINKSONLY))!=0 ){
12691269
zTerm = "";
12701270
--- 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

Keyboard Shortcuts

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