Fossil SCM
Do not let the "Lines:" box go below one on the /timeline. If it does, automatically revert to 10 lines. Also, arrange for the default number of lines to be 50 in most cases, but only 11 if the c= (circa) query parameter is used. Use n=all to see the entire history of the graph.
Commit
99e081efe5e00c3a3064b9b629cb33fc3afd8167
Parent
b6e1f61aaaefdef…
7 files changed
+1
-1
+1
-1
+1
-1
+1
-1
+1
-1
+13
-2
+1
-1
+1
-1
| --- src/cgi.c | ||
| +++ src/cgi.c | ||
| @@ -498,11 +498,11 @@ | ||
| 498 | 498 | void cgi_replace_query_parameter(const char *zName, const char *zValue){ |
| 499 | 499 | int i; |
| 500 | 500 | for(i=0; i<nUsedQP; i++){ |
| 501 | 501 | if( fossil_strcmp(aParamQP[i].zName,zName)==0 ){ |
| 502 | 502 | aParamQP[i].zValue = zValue; |
| 503 | - assert( aParamQP[0].isQP ); | |
| 503 | + assert( aParamQP[i].isQP ); | |
| 504 | 504 | return; |
| 505 | 505 | } |
| 506 | 506 | } |
| 507 | 507 | cgi_set_parameter_nocopy(zName, zValue, 1); |
| 508 | 508 | } |
| 509 | 509 |
| --- src/cgi.c | |
| +++ src/cgi.c | |
| @@ -498,11 +498,11 @@ | |
| 498 | void cgi_replace_query_parameter(const char *zName, const char *zValue){ |
| 499 | int i; |
| 500 | for(i=0; i<nUsedQP; i++){ |
| 501 | if( fossil_strcmp(aParamQP[i].zName,zName)==0 ){ |
| 502 | aParamQP[i].zValue = zValue; |
| 503 | assert( aParamQP[0].isQP ); |
| 504 | return; |
| 505 | } |
| 506 | } |
| 507 | cgi_set_parameter_nocopy(zName, zValue, 1); |
| 508 | } |
| 509 |
| --- src/cgi.c | |
| +++ src/cgi.c | |
| @@ -498,11 +498,11 @@ | |
| 498 | void cgi_replace_query_parameter(const char *zName, const char *zValue){ |
| 499 | int i; |
| 500 | for(i=0; i<nUsedQP; i++){ |
| 501 | if( fossil_strcmp(aParamQP[i].zName,zName)==0 ){ |
| 502 | aParamQP[i].zValue = zValue; |
| 503 | assert( aParamQP[i].isQP ); |
| 504 | return; |
| 505 | } |
| 506 | } |
| 507 | cgi_set_parameter_nocopy(zName, zValue, 1); |
| 508 | } |
| 509 |
+1
-1
| --- src/event.c | ||
| +++ src/event.c | ||
| @@ -129,11 +129,11 @@ | ||
| 129 | 129 | if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){ |
| 130 | 130 | style_submenu_element("Edit", "Edit", "%s/eventedit?name=%s", |
| 131 | 131 | g.zTop, zEventId); |
| 132 | 132 | } |
| 133 | 133 | zETime = db_text(0, "SELECT datetime(%.17g)", pEvent->rEventDate); |
| 134 | - style_submenu_element("Context", 0, "%R/timeline?c=%.20s&n=11", zEventId); | |
| 134 | + style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zEventId); | |
| 135 | 135 | if( g.perm.Hyperlink ){ |
| 136 | 136 | if( verboseFlag ){ |
| 137 | 137 | style_submenu_element("Plain", 0, "%R/event?name=%.20s&aid=%s", |
| 138 | 138 | zEventId, zUuid); |
| 139 | 139 | if( nextRid ){ |
| 140 | 140 |
| --- src/event.c | |
| +++ src/event.c | |
| @@ -129,11 +129,11 @@ | |
| 129 | if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){ |
| 130 | style_submenu_element("Edit", "Edit", "%s/eventedit?name=%s", |
| 131 | g.zTop, zEventId); |
| 132 | } |
| 133 | zETime = db_text(0, "SELECT datetime(%.17g)", pEvent->rEventDate); |
| 134 | style_submenu_element("Context", 0, "%R/timeline?c=%.20s&n=11", zEventId); |
| 135 | if( g.perm.Hyperlink ){ |
| 136 | if( verboseFlag ){ |
| 137 | style_submenu_element("Plain", 0, "%R/event?name=%.20s&aid=%s", |
| 138 | zEventId, zUuid); |
| 139 | if( nextRid ){ |
| 140 |
| --- src/event.c | |
| +++ src/event.c | |
| @@ -129,11 +129,11 @@ | |
| 129 | if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){ |
| 130 | style_submenu_element("Edit", "Edit", "%s/eventedit?name=%s", |
| 131 | g.zTop, zEventId); |
| 132 | } |
| 133 | zETime = db_text(0, "SELECT datetime(%.17g)", pEvent->rEventDate); |
| 134 | style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zEventId); |
| 135 | if( g.perm.Hyperlink ){ |
| 136 | if( verboseFlag ){ |
| 137 | style_submenu_element("Plain", 0, "%R/event?name=%.20s&aid=%s", |
| 138 | zEventId, zUuid); |
| 139 | if( nextRid ){ |
| 140 |
+1
-1
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -917,11 +917,11 @@ | ||
| 917 | 917 | blob_zero(&links); |
| 918 | 918 | while( z && z[0] ){ |
| 919 | 919 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 920 | 920 | blob_appendf(&links, |
| 921 | 921 | "%z%#h</a>%.2s", |
| 922 | - href("%R/timeline?r=%#t&nd&c=%t&n=11",i,z,zDate), i,z, &z[i] | |
| 922 | + href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] | |
| 923 | 923 | ); |
| 924 | 924 | if( z[i]==0 ) break; |
| 925 | 925 | z += i+2; |
| 926 | 926 | } |
| 927 | 927 | @ tags: %s(blob_str(&links)), |
| 928 | 928 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -917,11 +917,11 @@ | |
| 917 | blob_zero(&links); |
| 918 | while( z && z[0] ){ |
| 919 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 920 | blob_appendf(&links, |
| 921 | "%z%#h</a>%.2s", |
| 922 | href("%R/timeline?r=%#t&nd&c=%t&n=11",i,z,zDate), i,z, &z[i] |
| 923 | ); |
| 924 | if( z[i]==0 ) break; |
| 925 | z += i+2; |
| 926 | } |
| 927 | @ tags: %s(blob_str(&links)), |
| 928 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -917,11 +917,11 @@ | |
| 917 | blob_zero(&links); |
| 918 | while( z && z[0] ){ |
| 919 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 920 | blob_appendf(&links, |
| 921 | "%z%#h</a>%.2s", |
| 922 | href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] |
| 923 | ); |
| 924 | if( z[i]==0 ) break; |
| 925 | z += i+2; |
| 926 | } |
| 927 | @ tags: %s(blob_str(&links)), |
| 928 |
+1
-1
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -1322,11 +1322,11 @@ | ||
| 1322 | 1322 | ); |
| 1323 | 1323 | db_multi_exec( |
| 1324 | 1324 | "REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)" |
| 1325 | 1325 | " SELECT ftsdocs.rowid, 1, 'c', ftsdocs.rid, NULL," |
| 1326 | 1326 | " printf('Check-in [%%.16s] on %%s',blob.uuid,datetime(event.mtime))," |
| 1327 | - " printf('/timeline?y=ci&n=11&c=%%.20s',blob.uuid)," | |
| 1327 | + " printf('/timeline?y=ci&c=%%.20s',blob.uuid)," | |
| 1328 | 1328 | " event.mtime" |
| 1329 | 1329 | " FROM ftsdocs, event, blob" |
| 1330 | 1330 | " WHERE ftsdocs.type='c' AND NOT ftsdocs.idxed" |
| 1331 | 1331 | " AND event.objid=ftsdocs.rid" |
| 1332 | 1332 | " AND blob.rid=ftsdocs.rid" |
| 1333 | 1333 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -1322,11 +1322,11 @@ | |
| 1322 | ); |
| 1323 | db_multi_exec( |
| 1324 | "REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)" |
| 1325 | " SELECT ftsdocs.rowid, 1, 'c', ftsdocs.rid, NULL," |
| 1326 | " printf('Check-in [%%.16s] on %%s',blob.uuid,datetime(event.mtime))," |
| 1327 | " printf('/timeline?y=ci&n=11&c=%%.20s',blob.uuid)," |
| 1328 | " event.mtime" |
| 1329 | " FROM ftsdocs, event, blob" |
| 1330 | " WHERE ftsdocs.type='c' AND NOT ftsdocs.idxed" |
| 1331 | " AND event.objid=ftsdocs.rid" |
| 1332 | " AND blob.rid=ftsdocs.rid" |
| 1333 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -1322,11 +1322,11 @@ | |
| 1322 | ); |
| 1323 | db_multi_exec( |
| 1324 | "REPLACE INTO ftsdocs(rowid,idxed,type,rid,name,label,url,mtime)" |
| 1325 | " SELECT ftsdocs.rowid, 1, 'c', ftsdocs.rid, NULL," |
| 1326 | " printf('Check-in [%%.16s] on %%s',blob.uuid,datetime(event.mtime))," |
| 1327 | " printf('/timeline?y=ci&c=%%.20s',blob.uuid)," |
| 1328 | " event.mtime" |
| 1329 | " FROM ftsdocs, event, blob" |
| 1330 | " WHERE ftsdocs.type='c' AND NOT ftsdocs.idxed" |
| 1331 | " AND event.objid=ftsdocs.rid" |
| 1332 | " AND blob.rid=ftsdocs.rid" |
| 1333 |
+1
-1
| --- src/sitemap.c | ||
| +++ src/sitemap.c | ||
| @@ -44,11 +44,11 @@ | ||
| 44 | 44 | @ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li> |
| 45 | 45 | @ </ul> |
| 46 | 46 | @ <li>%z(href("%R/timeline?n=200"))Project Timeline</a></li> |
| 47 | 47 | @ <ul> |
| 48 | 48 | @ <li>%z(href("%R/timeline?a=1970-01-01&y=ci&n=10"))First 10 checkins</a></li> |
| 49 | - @ <li>%z(href("%R/timeline?n=0&namechng"))All checkins with file name | |
| 49 | + @ <li>%z(href("%R/timeline?n=all&namechng"))All checkins with file name | |
| 50 | 50 | @ changes</a></li> |
| 51 | 51 | @ <li>%z(href("%R/reports"))Activity Reports</a></li> |
| 52 | 52 | @ </ul> |
| 53 | 53 | @ <li>Branches and Tags</a> |
| 54 | 54 | @ <ul> |
| 55 | 55 |
| --- src/sitemap.c | |
| +++ src/sitemap.c | |
| @@ -44,11 +44,11 @@ | |
| 44 | @ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li> |
| 45 | @ </ul> |
| 46 | @ <li>%z(href("%R/timeline?n=200"))Project Timeline</a></li> |
| 47 | @ <ul> |
| 48 | @ <li>%z(href("%R/timeline?a=1970-01-01&y=ci&n=10"))First 10 checkins</a></li> |
| 49 | @ <li>%z(href("%R/timeline?n=0&namechng"))All checkins with file name |
| 50 | @ changes</a></li> |
| 51 | @ <li>%z(href("%R/reports"))Activity Reports</a></li> |
| 52 | @ </ul> |
| 53 | @ <li>Branches and Tags</a> |
| 54 | @ <ul> |
| 55 |
| --- src/sitemap.c | |
| +++ src/sitemap.c | |
| @@ -44,11 +44,11 @@ | |
| 44 | @ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li> |
| 45 | @ </ul> |
| 46 | @ <li>%z(href("%R/timeline?n=200"))Project Timeline</a></li> |
| 47 | @ <ul> |
| 48 | @ <li>%z(href("%R/timeline?a=1970-01-01&y=ci&n=10"))First 10 checkins</a></li> |
| 49 | @ <li>%z(href("%R/timeline?n=all&namechng"))All checkins with file name |
| 50 | @ changes</a></li> |
| 51 | @ <li>%z(href("%R/reports"))Activity Reports</a></li> |
| 52 | @ </ul> |
| 53 | @ <li>Branches and Tags</a> |
| 54 | @ <ul> |
| 55 |
+13
-2
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -48,11 +48,11 @@ | ||
| 48 | 48 | ** Generate a hyperlink to a date & time. |
| 49 | 49 | */ |
| 50 | 50 | void hyperlink_to_date(const char *zDate, const char *zSuffix){ |
| 51 | 51 | if( zSuffix==0 ) zSuffix = ""; |
| 52 | 52 | if( g.perm.Hyperlink ){ |
| 53 | - @ %z(href("%R/timeline?n=11&c=%T",zDate))%s(zDate)</a>%s(zSuffix) | |
| 53 | + @ %z(href("%R/timeline?c=%T",zDate))%s(zDate)</a>%s(zSuffix) | |
| 54 | 54 | }else{ |
| 55 | 55 | @ %s(zDate)%s(zSuffix) |
| 56 | 56 | } |
| 57 | 57 | } |
| 58 | 58 | |
| @@ -1137,11 +1137,22 @@ | ||
| 1137 | 1137 | char *zOlderButton = 0; /* URL for Older button at the bottom */ |
| 1138 | 1138 | |
| 1139 | 1139 | /* Set number of rows to display */ |
| 1140 | 1140 | z = P("n"); |
| 1141 | 1141 | if( z ){ |
| 1142 | - nEntry = atoi(z); | |
| 1142 | + if( fossil_strcmp(z,"all")==0 ){ | |
| 1143 | + nEntry = 0; | |
| 1144 | + }else{ | |
| 1145 | + nEntry = atoi(z); | |
| 1146 | + if( nEntry<=0 ){ | |
| 1147 | + cgi_replace_query_parameter("n","10"); | |
| 1148 | + nEntry = 10; | |
| 1149 | + } | |
| 1150 | + } | |
| 1151 | + }else if( zCirca ){ | |
| 1152 | + cgi_replace_query_parameter("n","11"); | |
| 1153 | + nEntry = 11; | |
| 1143 | 1154 | }else{ |
| 1144 | 1155 | cgi_replace_query_parameter("n","50"); |
| 1145 | 1156 | nEntry = 50; |
| 1146 | 1157 | } |
| 1147 | 1158 | |
| 1148 | 1159 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -48,11 +48,11 @@ | |
| 48 | ** Generate a hyperlink to a date & time. |
| 49 | */ |
| 50 | void hyperlink_to_date(const char *zDate, const char *zSuffix){ |
| 51 | if( zSuffix==0 ) zSuffix = ""; |
| 52 | if( g.perm.Hyperlink ){ |
| 53 | @ %z(href("%R/timeline?n=11&c=%T",zDate))%s(zDate)</a>%s(zSuffix) |
| 54 | }else{ |
| 55 | @ %s(zDate)%s(zSuffix) |
| 56 | } |
| 57 | } |
| 58 | |
| @@ -1137,11 +1137,22 @@ | |
| 1137 | char *zOlderButton = 0; /* URL for Older button at the bottom */ |
| 1138 | |
| 1139 | /* Set number of rows to display */ |
| 1140 | z = P("n"); |
| 1141 | if( z ){ |
| 1142 | nEntry = atoi(z); |
| 1143 | }else{ |
| 1144 | cgi_replace_query_parameter("n","50"); |
| 1145 | nEntry = 50; |
| 1146 | } |
| 1147 | |
| 1148 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -48,11 +48,11 @@ | |
| 48 | ** Generate a hyperlink to a date & time. |
| 49 | */ |
| 50 | void hyperlink_to_date(const char *zDate, const char *zSuffix){ |
| 51 | if( zSuffix==0 ) zSuffix = ""; |
| 52 | if( g.perm.Hyperlink ){ |
| 53 | @ %z(href("%R/timeline?c=%T",zDate))%s(zDate)</a>%s(zSuffix) |
| 54 | }else{ |
| 55 | @ %s(zDate)%s(zSuffix) |
| 56 | } |
| 57 | } |
| 58 | |
| @@ -1137,11 +1137,22 @@ | |
| 1137 | char *zOlderButton = 0; /* URL for Older button at the bottom */ |
| 1138 | |
| 1139 | /* Set number of rows to display */ |
| 1140 | z = P("n"); |
| 1141 | if( z ){ |
| 1142 | if( fossil_strcmp(z,"all")==0 ){ |
| 1143 | nEntry = 0; |
| 1144 | }else{ |
| 1145 | nEntry = atoi(z); |
| 1146 | if( nEntry<=0 ){ |
| 1147 | cgi_replace_query_parameter("n","10"); |
| 1148 | nEntry = 10; |
| 1149 | } |
| 1150 | } |
| 1151 | }else if( zCirca ){ |
| 1152 | cgi_replace_query_parameter("n","11"); |
| 1153 | nEntry = 11; |
| 1154 | }else{ |
| 1155 | cgi_replace_query_parameter("n","50"); |
| 1156 | nEntry = 50; |
| 1157 | } |
| 1158 | |
| 1159 |
+1
-1
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -1252,11 +1252,11 @@ | ||
| 1252 | 1252 | blob_appendf(p->pOut, "%z[",href("%R/info/%s", zTarget)); |
| 1253 | 1253 | zTerm = "]</a>"; |
| 1254 | 1254 | } |
| 1255 | 1255 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1256 | 1256 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1257 | - blob_appendf(p->pOut, "<a href=\"%R/timeline?n=11&c=%T\">", zTarget); | |
| 1257 | + blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); | |
| 1258 | 1258 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1259 | 1259 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1260 | 1260 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1261 | 1261 | /* Probably an array subscript in code */ |
| 1262 | 1262 | zTerm = ""; |
| 1263 | 1263 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1252,11 +1252,11 @@ | |
| 1252 | blob_appendf(p->pOut, "%z[",href("%R/info/%s", zTarget)); |
| 1253 | zTerm = "]</a>"; |
| 1254 | } |
| 1255 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1256 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1257 | blob_appendf(p->pOut, "<a href=\"%R/timeline?n=11&c=%T\">", zTarget); |
| 1258 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1259 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1260 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1261 | /* Probably an array subscript in code */ |
| 1262 | zTerm = ""; |
| 1263 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1252,11 +1252,11 @@ | |
| 1252 | blob_appendf(p->pOut, "%z[",href("%R/info/%s", zTarget)); |
| 1253 | zTerm = "]</a>"; |
| 1254 | } |
| 1255 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1256 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1257 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1258 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1259 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1260 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1261 | /* Probably an array subscript in code */ |
| 1262 | zTerm = ""; |
| 1263 |