| | @@ -427,11 +427,11 @@ |
| 427 | 427 | /* Generate the "user: USERNAME" at the end of the comment, together |
| 428 | 428 | ** with a hyperlink to another timeline for that user. |
| 429 | 429 | */ |
| 430 | 430 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 431 | 431 | if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){ |
| 432 | | - char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd", zDispUser, zDate); |
| 432 | + char *zLink = mprintf("%R/timeline?u=%h&c=%t&nd&n=200", zDispUser, zDate); |
| 433 | 433 | @ (user: %z(href("%z",zLink))%h(zDispUser)</a>%s(zTagList?",":"\051") |
| 434 | 434 | }else{ |
| 435 | 435 | @ (user: %h(zDispUser)%s(zTagList?",":"\051") |
| 436 | 436 | } |
| 437 | 437 | |
| | @@ -452,11 +452,11 @@ |
| 452 | 452 | while( z && z[0] ){ |
| 453 | 453 | for(i=0; z[i] && (z[i]!=',' || z[i+1]!=' '); i++){} |
| 454 | 454 | if( zThisTag==0 || memcmp(z, zThisTag, i)!=0 || zThisTag[i]!=0 ){ |
| 455 | 455 | blob_appendf(&links, |
| 456 | 456 | "%z%#h</a>%.2s", |
| 457 | | - href("%R/timeline?r=%#t&nd&c=%t",i,z,zDate), i,z, &z[i] |
| 457 | + href("%R/timeline?r=%#t&nd&c=%t&n=200",i,z,zDate), i,z, &z[i] |
| 458 | 458 | ); |
| 459 | 459 | }else{ |
| 460 | 460 | blob_appendf(&links, "%#h", i+2, z); |
| 461 | 461 | } |
| 462 | 462 | if( z[i]==0 ) break; |
| | @@ -1103,16 +1103,22 @@ |
| 1103 | 1103 | tagid = db_int(0, "SELECT tagid FROM tag WHERE tagname='sym-%q'",zBrName); |
| 1104 | 1104 | zThisTag = zBrName; |
| 1105 | 1105 | }else{ |
| 1106 | 1106 | tagid = 0; |
| 1107 | 1107 | } |
| 1108 | + if( tagid>0 |
| 1109 | + && db_int(0,"SELECT count(*) FROM tagxref WHERE tagid=%d",tagid)<=nEntry |
| 1110 | + ){ |
| 1111 | + zCirca = zBefore = zAfter = 0; |
| 1112 | + nEntry = -1; |
| 1113 | + } |
| 1108 | 1114 | if( zType[0]=='a' ){ |
| 1109 | 1115 | tmFlags = TIMELINE_BRIEF | TIMELINE_GRAPH; |
| 1110 | 1116 | }else{ |
| 1111 | 1117 | tmFlags = TIMELINE_GRAPH; |
| 1112 | 1118 | } |
| 1113 | | - url_add_parameter(&url, "n", mprintf("%d", nEntry)); |
| 1119 | + if( nEntry>0 ) url_add_parameter(&url, "n", mprintf("%d", nEntry)); |
| 1114 | 1120 | if( P("ng")!=0 || zSearch!=0 ){ |
| 1115 | 1121 | tmFlags &= ~TIMELINE_GRAPH; |
| 1116 | 1122 | url_add_parameter(&url, "ng", 0); |
| 1117 | 1123 | } |
| 1118 | 1124 | if( P("brbg")!=0 ){ |
| | @@ -1244,11 +1250,11 @@ |
| 1244 | 1250 | url_add_parameter(&url, "d", zUuid); |
| 1245 | 1251 | } |
| 1246 | 1252 | if( nEntry>20 ){ |
| 1247 | 1253 | timeline_submenu(&url, "20 Entries", "n", "20", 0); |
| 1248 | 1254 | } |
| 1249 | | - if( nEntry<200 ){ |
| 1255 | + if( nEntry<200 && nEntry>0 ){ |
| 1250 | 1256 | timeline_submenu(&url, "200 Entries", "n", "200", 0); |
| 1251 | 1257 | } |
| 1252 | 1258 | if( tmFlags & TIMELINE_FCHANGES ){ |
| 1253 | 1259 | timeline_submenu(&url, "Hide Files", "v", 0, 0); |
| 1254 | 1260 | }else{ |
| | @@ -1388,10 +1394,16 @@ |
| 1388 | 1394 | }else if( zType[0]=='g' ){ |
| 1389 | 1395 | zEType = "tag"; |
| 1390 | 1396 | } |
| 1391 | 1397 | } |
| 1392 | 1398 | if( zUser ){ |
| 1399 | + int n = db_int(0,"SELECT count(*) FROM event" |
| 1400 | + " WHERE user=%Q OR euser=%Q", zUser, zUser); |
| 1401 | + if( n<=nEntry ){ |
| 1402 | + zCirca = zBefore = zAfter = 0; |
| 1403 | + nEntry = -1; |
| 1404 | + } |
| 1393 | 1405 | blob_append_sql(&sql, " AND (event.user=%Q OR event.euser=%Q)", |
| 1394 | 1406 | zUser, zUser); |
| 1395 | 1407 | url_add_parameter(&url, "u", zUser); |
| 1396 | 1408 | zThisUser = zUser; |
| 1397 | 1409 | } |
| | @@ -1409,11 +1421,11 @@ |
| 1409 | 1421 | blob_append_sql(&sql, |
| 1410 | 1422 | " AND event.mtime>=%.17g AND event.mtime<=%.17g" |
| 1411 | 1423 | " ORDER BY event.mtime ASC", rAfter-ONE_SECOND, rBefore+ONE_SECOND); |
| 1412 | 1424 | url_add_parameter(&url, "a", zAfter); |
| 1413 | 1425 | url_add_parameter(&url, "b", zBefore); |
| 1414 | | - nEntry = 1000000; |
| 1426 | + nEntry = -1; |
| 1415 | 1427 | }else{ |
| 1416 | 1428 | blob_append_sql(&sql, |
| 1417 | 1429 | " AND event.mtime>=%.17g ORDER BY event.mtime ASC", |
| 1418 | 1430 | rAfter-ONE_SECOND); |
| 1419 | 1431 | url_add_parameter(&url, "a", zAfter); |
| | @@ -1440,19 +1452,19 @@ |
| 1440 | 1452 | if( useDividers ) timeline_add_dividers(rCirca, 0); |
| 1441 | 1453 | url_add_parameter(&url, "c", zCirca); |
| 1442 | 1454 | }else{ |
| 1443 | 1455 | blob_append_sql(&sql, " ORDER BY event.mtime DESC"); |
| 1444 | 1456 | } |
| 1445 | | - blob_append_sql(&sql, " LIMIT %d", nEntry); |
| 1457 | + if( nEntry>0 ) blob_append_sql(&sql, " LIMIT %d", nEntry); |
| 1446 | 1458 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 1447 | 1459 | |
| 1448 | 1460 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 1449 | 1461 | if( zYearMonth ){ |
| 1450 | 1462 | blob_appendf(&desc, "%s events for %h", zEType, zYearMonth); |
| 1451 | 1463 | }else if( zYearWeek ){ |
| 1452 | 1464 | blob_appendf(&desc, "%s events for year/week %h", zEType, zYearWeek); |
| 1453 | | - }else if( zAfter==0 && zBefore==0 && zCirca==0 ){ |
| 1465 | + }else if( zAfter==0 && zBefore==0 && zCirca==0 && nEntry>0 ){ |
| 1454 | 1466 | blob_appendf(&desc, "%d most recent %ss", n, zEType); |
| 1455 | 1467 | }else{ |
| 1456 | 1468 | blob_appendf(&desc, "%d %ss", n, zEType); |
| 1457 | 1469 | } |
| 1458 | 1470 | if( zUses ){ |
| | @@ -1522,11 +1534,11 @@ |
| 1522 | 1534 | } |
| 1523 | 1535 | } |
| 1524 | 1536 | if( nEntry>20 ){ |
| 1525 | 1537 | timeline_submenu(&url, "20 Entries", "n", "20", 0); |
| 1526 | 1538 | } |
| 1527 | | - if( nEntry<200 ){ |
| 1539 | + if( nEntry<200 && nEntry>0 ){ |
| 1528 | 1540 | timeline_submenu(&url, "200 Entries", "n", "200", 0); |
| 1529 | 1541 | } |
| 1530 | 1542 | if( zType[0]=='a' || zType[0]=='c' ){ |
| 1531 | 1543 | if( tmFlags & TIMELINE_FCHANGES ){ |
| 1532 | 1544 | timeline_submenu(&url, "Hide Files", "v", 0, 0); |
| 1533 | 1545 | |