Fossil SCM
Add Previous/Following Day/Week/Month links on timeline pages that use the ymd, yw, or ym query parameters.
Commit
96cd802a7659caf66299528e542777eb24fc6208132941a55d3d36b0a6a082f2
Parent
79f7808ba4b9532…
1 file changed
+72
-4
+72
-4
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1734,11 +1734,13 @@ | ||
| 1734 | 1734 | int you_rid = name_to_typed_rid(P("you"),"ci");/* you= for common ancst */ |
| 1735 | 1735 | int pd_rid; |
| 1736 | 1736 | double rBefore, rAfter, rCirca; /* Boundary times */ |
| 1737 | 1737 | const char *z; |
| 1738 | 1738 | char *zOlderButton = 0; /* URL for Older button at the bottom */ |
| 1739 | + char *zOlderButtonLabel = 0; /* Label for the Older Button */ | |
| 1739 | 1740 | char *zNewerButton = 0; /* URL for Newer button at the top */ |
| 1741 | + char *zNewerButtonLabel = 0; /* Label for the Newer button */ | |
| 1740 | 1742 | int selectedRid = 0; /* Show a highlight on this RID */ |
| 1741 | 1743 | int secondaryRid = 0; /* Show secondary highlight */ |
| 1742 | 1744 | int disableY = 0; /* Disable type selector on submenu */ |
| 1743 | 1745 | int advancedMenu = 0; /* Use the advanced menu design */ |
| 1744 | 1746 | char *zPlural; /* Ending for plural forms */ |
| @@ -2225,23 +2227,46 @@ | ||
| 2225 | 2227 | } |
| 2226 | 2228 | if( bisectLocal || zBisect!=0 ){ |
| 2227 | 2229 | blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog) "); |
| 2228 | 2230 | } |
| 2229 | 2231 | if( zYearMonth ){ |
| 2232 | + char *zNext; | |
| 2230 | 2233 | zYearMonth = timeline_expand_datetime(zYearMonth); |
| 2231 | 2234 | if( strlen(zYearMonth)>7 ){ |
| 2232 | 2235 | zYearMonth = mprintf("%.7s", zYearMonth); |
| 2233 | 2236 | } |
| 2234 | 2237 | if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){ |
| 2235 | 2238 | zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');"); |
| 2236 | 2239 | } |
| 2240 | + zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','+1 month');", | |
| 2241 | + zYearMonth); | |
| 2242 | + if( db_int(0, | |
| 2243 | + "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" | |
| 2244 | + " WHERE blob.rid=event.objid AND mtime>=julianday('%q-01')%s)", | |
| 2245 | + zNext, blob_sql_text(&cond)) | |
| 2246 | + ){ | |
| 2247 | + zNewerButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0)); | |
| 2248 | + zNewerButtonLabel = "Following month"; | |
| 2249 | + } | |
| 2250 | + fossil_free(zNext); | |
| 2251 | + zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','-1 month');", | |
| 2252 | + zYearMonth); | |
| 2253 | + if( db_int(0, | |
| 2254 | + "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" | |
| 2255 | + " WHERE blob.rid=event.objid AND mtime<julianday('%q-01')%s)", | |
| 2256 | + zYearMonth, blob_sql_text(&cond)) | |
| 2257 | + ){ | |
| 2258 | + zOlderButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0)); | |
| 2259 | + zOlderButtonLabel = "Previous month"; | |
| 2260 | + } | |
| 2261 | + fossil_free(zNext); | |
| 2237 | 2262 | blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%m',event.mtime) ", |
| 2238 | 2263 | zYearMonth); |
| 2239 | 2264 | nEntry = -1; |
| 2240 | 2265 | } |
| 2241 | 2266 | else if( zYearWeek ){ |
| 2242 | - char *z; | |
| 2267 | + char *z, *zNext; | |
| 2243 | 2268 | zYearWeek = timeline_expand_datetime(zYearWeek); |
| 2244 | 2269 | z = db_text(0, "SELECT strftime('%%Y-%%W',%Q)", zYearWeek); |
| 2245 | 2270 | if( z && z[0] ){ |
| 2246 | 2271 | zYearWeekStart = db_text(0, "SELECT date(%Q,'-6 days','weekday 1')", |
| 2247 | 2272 | zYearWeek); |
| @@ -2259,20 +2284,61 @@ | ||
| 2259 | 2284 | "SELECT date('now','-6 days','weekday 1');"); |
| 2260 | 2285 | zYearWeek = db_text(0, |
| 2261 | 2286 | "SELECT strftime('%%Y-%%W','now','-6 days','weekday 1')"); |
| 2262 | 2287 | } |
| 2263 | 2288 | } |
| 2289 | + zNext = db_text(0, "SELECT date(%Q,'+7 day');", zYearWeekStart); | |
| 2290 | + if( db_int(0, | |
| 2291 | + "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" | |
| 2292 | + " WHERE blob.rid=event.objid AND mtime>=julianday(%Q)%s)", | |
| 2293 | + zNext, blob_sql_text(&cond)) | |
| 2294 | + ){ | |
| 2295 | + zNewerButton = fossil_strdup(url_render(&url, "yw", zNext, 0, 0)); | |
| 2296 | + zNewerButtonLabel = "Following week"; | |
| 2297 | + } | |
| 2298 | + fossil_free(zNext); | |
| 2299 | + zNext = db_text(0, "SELECT date(%Q,'-7 days');", zYearWeekStart); | |
| 2300 | + if( db_int(0, | |
| 2301 | + "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" | |
| 2302 | + " WHERE blob.rid=event.objid AND mtime<julianday(%Q)%s)", | |
| 2303 | + zYearWeekStart, blob_sql_text(&cond)) | |
| 2304 | + ){ | |
| 2305 | + zOlderButton = fossil_strdup(url_render(&url, "yw", zNext, 0, 0)); | |
| 2306 | + zOlderButtonLabel = "Previous week"; | |
| 2307 | + } | |
| 2308 | + fossil_free(zNext); | |
| 2264 | 2309 | blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%W',event.mtime) ", |
| 2265 | 2310 | zYearWeek); |
| 2266 | 2311 | nEntry = -1; |
| 2267 | 2312 | } |
| 2268 | 2313 | else if( zDay ){ |
| 2314 | + char *zNext; | |
| 2269 | 2315 | zDay = timeline_expand_datetime(zDay); |
| 2270 | 2316 | zDay = db_text(0, "SELECT date(%Q)", zDay); |
| 2271 | 2317 | if( zDay==0 || zDay[0]==0 ){ |
| 2272 | 2318 | zDay = db_text(0, "SELECT date('now')"); |
| 2273 | 2319 | } |
| 2320 | + zNext = db_text(0, "SELECT date(%Q,'+1 day');", zDay); | |
| 2321 | + if( db_int(0, | |
| 2322 | + "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" | |
| 2323 | + " WHERE blob.rid=event.objid AND mtime>=julianday(%Q)%s)", | |
| 2324 | + zNext, blob_sql_text(&cond)) | |
| 2325 | + ){ | |
| 2326 | + zNewerButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0)); | |
| 2327 | + zNewerButtonLabel = "Following day"; | |
| 2328 | + } | |
| 2329 | + fossil_free(zNext); | |
| 2330 | + zNext = db_text(0, "SELECT date(%Q,'-1 day');", zDay); | |
| 2331 | + if( db_int(0, | |
| 2332 | + "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" | |
| 2333 | + " WHERE blob.rid=event.objid AND mtime<julianday(%Q)%s)", | |
| 2334 | + zDay, blob_sql_text(&cond)) | |
| 2335 | + ){ | |
| 2336 | + zOlderButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0)); | |
| 2337 | + zOlderButtonLabel = "Previous day"; | |
| 2338 | + } | |
| 2339 | + fossil_free(zNext); | |
| 2274 | 2340 | blob_append_sql(&cond, " AND %Q=date(event.mtime) ", |
| 2275 | 2341 | zDay); |
| 2276 | 2342 | nEntry = -1; |
| 2277 | 2343 | } |
| 2278 | 2344 | else if( zNDays ){ |
| @@ -2468,11 +2534,11 @@ | ||
| 2468 | 2534 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 2469 | 2535 | |
| 2470 | 2536 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 2471 | 2537 | zPlural = n==1 ? "" : "s"; |
| 2472 | 2538 | if( zYearMonth ){ |
| 2473 | - blob_appendf(&desc, "%d %s%s for month beginning %h-01", | |
| 2539 | + blob_appendf(&desc, "%d %s%s for the month beginning %h-01", | |
| 2474 | 2540 | n, zEType, zPlural, zYearMonth); |
| 2475 | 2541 | }else if( zYearWeek ){ |
| 2476 | 2542 | blob_appendf(&desc, "%d %s%s for week %h beginning on %h", |
| 2477 | 2543 | n, zEType, zPlural, zYearWeek, zYearWeekStart); |
| 2478 | 2544 | }else if( zDay ){ |
| @@ -2561,10 +2627,11 @@ | ||
| 2561 | 2627 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2562 | 2628 | " WHERE blob.rid=event.objid AND mtime<=%.17g%s)", |
| 2563 | 2629 | rDate-ONE_SECOND, blob_sql_text(&cond)) |
| 2564 | 2630 | ){ |
| 2565 | 2631 | zOlderButton = fossil_strdup(url_render(&url, "b", zDate, "a", 0)); |
| 2632 | + zOlderButtonLabel = "More"; | |
| 2566 | 2633 | } |
| 2567 | 2634 | free(zDate); |
| 2568 | 2635 | } |
| 2569 | 2636 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 2570 | 2637 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| @@ -2576,10 +2643,11 @@ | ||
| 2576 | 2643 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2577 | 2644 | " WHERE blob.rid=event.objid AND mtime>=%.17g%s)", |
| 2578 | 2645 | rDate+ONE_SECOND, blob_sql_text(&cond)) |
| 2579 | 2646 | ){ |
| 2580 | 2647 | zNewerButton = fossil_strdup(url_render(&url, "a", zDate, "b", 0)); |
| 2648 | + zNewerButton = "More"; | |
| 2581 | 2649 | } |
| 2582 | 2650 | free(zDate); |
| 2583 | 2651 | } |
| 2584 | 2652 | if( advancedMenu ){ |
| 2585 | 2653 | if( zType[0]=='a' || zType[0]=='c' ){ |
| @@ -2645,17 +2713,17 @@ | ||
| 2645 | 2713 | if( zError ){ |
| 2646 | 2714 | @ <p class="generalError">%h(zError)</p> |
| 2647 | 2715 | } |
| 2648 | 2716 | |
| 2649 | 2717 | if( zNewerButton ){ |
| 2650 | - @ %z(chref("button","%z",zNewerButton))More ↑</a> | |
| 2718 | + @ %z(chref("button","%z",zNewerButton))%h(zNewerButtonLabel) ↑</a> | |
| 2651 | 2719 | } |
| 2652 | 2720 | www_print_timeline(&q, tmFlags, zThisUser, zThisTag, zBrName, |
| 2653 | 2721 | selectedRid, secondaryRid, 0); |
| 2654 | 2722 | db_finalize(&q); |
| 2655 | 2723 | if( zOlderButton ){ |
| 2656 | - @ %z(chref("button","%z",zOlderButton))More ↓</a> | |
| 2724 | + @ %z(chref("button","%z",zOlderButton))%h(zOlderButtonLabel) ↓</a> | |
| 2657 | 2725 | } |
| 2658 | 2726 | document_emit_js(/*handles pikchrs rendered above*/); |
| 2659 | 2727 | style_finish_page("timeline"); |
| 2660 | 2728 | } |
| 2661 | 2729 | |
| 2662 | 2730 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1734,11 +1734,13 @@ | |
| 1734 | int you_rid = name_to_typed_rid(P("you"),"ci");/* you= for common ancst */ |
| 1735 | int pd_rid; |
| 1736 | double rBefore, rAfter, rCirca; /* Boundary times */ |
| 1737 | const char *z; |
| 1738 | char *zOlderButton = 0; /* URL for Older button at the bottom */ |
| 1739 | char *zNewerButton = 0; /* URL for Newer button at the top */ |
| 1740 | int selectedRid = 0; /* Show a highlight on this RID */ |
| 1741 | int secondaryRid = 0; /* Show secondary highlight */ |
| 1742 | int disableY = 0; /* Disable type selector on submenu */ |
| 1743 | int advancedMenu = 0; /* Use the advanced menu design */ |
| 1744 | char *zPlural; /* Ending for plural forms */ |
| @@ -2225,23 +2227,46 @@ | |
| 2225 | } |
| 2226 | if( bisectLocal || zBisect!=0 ){ |
| 2227 | blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog) "); |
| 2228 | } |
| 2229 | if( zYearMonth ){ |
| 2230 | zYearMonth = timeline_expand_datetime(zYearMonth); |
| 2231 | if( strlen(zYearMonth)>7 ){ |
| 2232 | zYearMonth = mprintf("%.7s", zYearMonth); |
| 2233 | } |
| 2234 | if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){ |
| 2235 | zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');"); |
| 2236 | } |
| 2237 | blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%m',event.mtime) ", |
| 2238 | zYearMonth); |
| 2239 | nEntry = -1; |
| 2240 | } |
| 2241 | else if( zYearWeek ){ |
| 2242 | char *z; |
| 2243 | zYearWeek = timeline_expand_datetime(zYearWeek); |
| 2244 | z = db_text(0, "SELECT strftime('%%Y-%%W',%Q)", zYearWeek); |
| 2245 | if( z && z[0] ){ |
| 2246 | zYearWeekStart = db_text(0, "SELECT date(%Q,'-6 days','weekday 1')", |
| 2247 | zYearWeek); |
| @@ -2259,20 +2284,61 @@ | |
| 2259 | "SELECT date('now','-6 days','weekday 1');"); |
| 2260 | zYearWeek = db_text(0, |
| 2261 | "SELECT strftime('%%Y-%%W','now','-6 days','weekday 1')"); |
| 2262 | } |
| 2263 | } |
| 2264 | blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%W',event.mtime) ", |
| 2265 | zYearWeek); |
| 2266 | nEntry = -1; |
| 2267 | } |
| 2268 | else if( zDay ){ |
| 2269 | zDay = timeline_expand_datetime(zDay); |
| 2270 | zDay = db_text(0, "SELECT date(%Q)", zDay); |
| 2271 | if( zDay==0 || zDay[0]==0 ){ |
| 2272 | zDay = db_text(0, "SELECT date('now')"); |
| 2273 | } |
| 2274 | blob_append_sql(&cond, " AND %Q=date(event.mtime) ", |
| 2275 | zDay); |
| 2276 | nEntry = -1; |
| 2277 | } |
| 2278 | else if( zNDays ){ |
| @@ -2468,11 +2534,11 @@ | |
| 2468 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 2469 | |
| 2470 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 2471 | zPlural = n==1 ? "" : "s"; |
| 2472 | if( zYearMonth ){ |
| 2473 | blob_appendf(&desc, "%d %s%s for month beginning %h-01", |
| 2474 | n, zEType, zPlural, zYearMonth); |
| 2475 | }else if( zYearWeek ){ |
| 2476 | blob_appendf(&desc, "%d %s%s for week %h beginning on %h", |
| 2477 | n, zEType, zPlural, zYearWeek, zYearWeekStart); |
| 2478 | }else if( zDay ){ |
| @@ -2561,10 +2627,11 @@ | |
| 2561 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2562 | " WHERE blob.rid=event.objid AND mtime<=%.17g%s)", |
| 2563 | rDate-ONE_SECOND, blob_sql_text(&cond)) |
| 2564 | ){ |
| 2565 | zOlderButton = fossil_strdup(url_render(&url, "b", zDate, "a", 0)); |
| 2566 | } |
| 2567 | free(zDate); |
| 2568 | } |
| 2569 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 2570 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| @@ -2576,10 +2643,11 @@ | |
| 2576 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2577 | " WHERE blob.rid=event.objid AND mtime>=%.17g%s)", |
| 2578 | rDate+ONE_SECOND, blob_sql_text(&cond)) |
| 2579 | ){ |
| 2580 | zNewerButton = fossil_strdup(url_render(&url, "a", zDate, "b", 0)); |
| 2581 | } |
| 2582 | free(zDate); |
| 2583 | } |
| 2584 | if( advancedMenu ){ |
| 2585 | if( zType[0]=='a' || zType[0]=='c' ){ |
| @@ -2645,17 +2713,17 @@ | |
| 2645 | if( zError ){ |
| 2646 | @ <p class="generalError">%h(zError)</p> |
| 2647 | } |
| 2648 | |
| 2649 | if( zNewerButton ){ |
| 2650 | @ %z(chref("button","%z",zNewerButton))More ↑</a> |
| 2651 | } |
| 2652 | www_print_timeline(&q, tmFlags, zThisUser, zThisTag, zBrName, |
| 2653 | selectedRid, secondaryRid, 0); |
| 2654 | db_finalize(&q); |
| 2655 | if( zOlderButton ){ |
| 2656 | @ %z(chref("button","%z",zOlderButton))More ↓</a> |
| 2657 | } |
| 2658 | document_emit_js(/*handles pikchrs rendered above*/); |
| 2659 | style_finish_page("timeline"); |
| 2660 | } |
| 2661 | |
| 2662 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1734,11 +1734,13 @@ | |
| 1734 | int you_rid = name_to_typed_rid(P("you"),"ci");/* you= for common ancst */ |
| 1735 | int pd_rid; |
| 1736 | double rBefore, rAfter, rCirca; /* Boundary times */ |
| 1737 | const char *z; |
| 1738 | char *zOlderButton = 0; /* URL for Older button at the bottom */ |
| 1739 | char *zOlderButtonLabel = 0; /* Label for the Older Button */ |
| 1740 | char *zNewerButton = 0; /* URL for Newer button at the top */ |
| 1741 | char *zNewerButtonLabel = 0; /* Label for the Newer button */ |
| 1742 | int selectedRid = 0; /* Show a highlight on this RID */ |
| 1743 | int secondaryRid = 0; /* Show secondary highlight */ |
| 1744 | int disableY = 0; /* Disable type selector on submenu */ |
| 1745 | int advancedMenu = 0; /* Use the advanced menu design */ |
| 1746 | char *zPlural; /* Ending for plural forms */ |
| @@ -2225,23 +2227,46 @@ | |
| 2227 | } |
| 2228 | if( bisectLocal || zBisect!=0 ){ |
| 2229 | blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog) "); |
| 2230 | } |
| 2231 | if( zYearMonth ){ |
| 2232 | char *zNext; |
| 2233 | zYearMonth = timeline_expand_datetime(zYearMonth); |
| 2234 | if( strlen(zYearMonth)>7 ){ |
| 2235 | zYearMonth = mprintf("%.7s", zYearMonth); |
| 2236 | } |
| 2237 | if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){ |
| 2238 | zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');"); |
| 2239 | } |
| 2240 | zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','+1 month');", |
| 2241 | zYearMonth); |
| 2242 | if( db_int(0, |
| 2243 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2244 | " WHERE blob.rid=event.objid AND mtime>=julianday('%q-01')%s)", |
| 2245 | zNext, blob_sql_text(&cond)) |
| 2246 | ){ |
| 2247 | zNewerButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0)); |
| 2248 | zNewerButtonLabel = "Following month"; |
| 2249 | } |
| 2250 | fossil_free(zNext); |
| 2251 | zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','-1 month');", |
| 2252 | zYearMonth); |
| 2253 | if( db_int(0, |
| 2254 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2255 | " WHERE blob.rid=event.objid AND mtime<julianday('%q-01')%s)", |
| 2256 | zYearMonth, blob_sql_text(&cond)) |
| 2257 | ){ |
| 2258 | zOlderButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0)); |
| 2259 | zOlderButtonLabel = "Previous month"; |
| 2260 | } |
| 2261 | fossil_free(zNext); |
| 2262 | blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%m',event.mtime) ", |
| 2263 | zYearMonth); |
| 2264 | nEntry = -1; |
| 2265 | } |
| 2266 | else if( zYearWeek ){ |
| 2267 | char *z, *zNext; |
| 2268 | zYearWeek = timeline_expand_datetime(zYearWeek); |
| 2269 | z = db_text(0, "SELECT strftime('%%Y-%%W',%Q)", zYearWeek); |
| 2270 | if( z && z[0] ){ |
| 2271 | zYearWeekStart = db_text(0, "SELECT date(%Q,'-6 days','weekday 1')", |
| 2272 | zYearWeek); |
| @@ -2259,20 +2284,61 @@ | |
| 2284 | "SELECT date('now','-6 days','weekday 1');"); |
| 2285 | zYearWeek = db_text(0, |
| 2286 | "SELECT strftime('%%Y-%%W','now','-6 days','weekday 1')"); |
| 2287 | } |
| 2288 | } |
| 2289 | zNext = db_text(0, "SELECT date(%Q,'+7 day');", zYearWeekStart); |
| 2290 | if( db_int(0, |
| 2291 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2292 | " WHERE blob.rid=event.objid AND mtime>=julianday(%Q)%s)", |
| 2293 | zNext, blob_sql_text(&cond)) |
| 2294 | ){ |
| 2295 | zNewerButton = fossil_strdup(url_render(&url, "yw", zNext, 0, 0)); |
| 2296 | zNewerButtonLabel = "Following week"; |
| 2297 | } |
| 2298 | fossil_free(zNext); |
| 2299 | zNext = db_text(0, "SELECT date(%Q,'-7 days');", zYearWeekStart); |
| 2300 | if( db_int(0, |
| 2301 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2302 | " WHERE blob.rid=event.objid AND mtime<julianday(%Q)%s)", |
| 2303 | zYearWeekStart, blob_sql_text(&cond)) |
| 2304 | ){ |
| 2305 | zOlderButton = fossil_strdup(url_render(&url, "yw", zNext, 0, 0)); |
| 2306 | zOlderButtonLabel = "Previous week"; |
| 2307 | } |
| 2308 | fossil_free(zNext); |
| 2309 | blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%W',event.mtime) ", |
| 2310 | zYearWeek); |
| 2311 | nEntry = -1; |
| 2312 | } |
| 2313 | else if( zDay ){ |
| 2314 | char *zNext; |
| 2315 | zDay = timeline_expand_datetime(zDay); |
| 2316 | zDay = db_text(0, "SELECT date(%Q)", zDay); |
| 2317 | if( zDay==0 || zDay[0]==0 ){ |
| 2318 | zDay = db_text(0, "SELECT date('now')"); |
| 2319 | } |
| 2320 | zNext = db_text(0, "SELECT date(%Q,'+1 day');", zDay); |
| 2321 | if( db_int(0, |
| 2322 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2323 | " WHERE blob.rid=event.objid AND mtime>=julianday(%Q)%s)", |
| 2324 | zNext, blob_sql_text(&cond)) |
| 2325 | ){ |
| 2326 | zNewerButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0)); |
| 2327 | zNewerButtonLabel = "Following day"; |
| 2328 | } |
| 2329 | fossil_free(zNext); |
| 2330 | zNext = db_text(0, "SELECT date(%Q,'-1 day');", zDay); |
| 2331 | if( db_int(0, |
| 2332 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2333 | " WHERE blob.rid=event.objid AND mtime<julianday(%Q)%s)", |
| 2334 | zDay, blob_sql_text(&cond)) |
| 2335 | ){ |
| 2336 | zOlderButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0)); |
| 2337 | zOlderButtonLabel = "Previous day"; |
| 2338 | } |
| 2339 | fossil_free(zNext); |
| 2340 | blob_append_sql(&cond, " AND %Q=date(event.mtime) ", |
| 2341 | zDay); |
| 2342 | nEntry = -1; |
| 2343 | } |
| 2344 | else if( zNDays ){ |
| @@ -2468,11 +2534,11 @@ | |
| 2534 | db_multi_exec("%s", blob_sql_text(&sql)); |
| 2535 | |
| 2536 | n = db_int(0, "SELECT count(*) FROM timeline WHERE etype!='div' /*scan*/"); |
| 2537 | zPlural = n==1 ? "" : "s"; |
| 2538 | if( zYearMonth ){ |
| 2539 | blob_appendf(&desc, "%d %s%s for the month beginning %h-01", |
| 2540 | n, zEType, zPlural, zYearMonth); |
| 2541 | }else if( zYearWeek ){ |
| 2542 | blob_appendf(&desc, "%d %s%s for week %h beginning on %h", |
| 2543 | n, zEType, zPlural, zYearWeek, zYearWeekStart); |
| 2544 | }else if( zDay ){ |
| @@ -2561,10 +2627,11 @@ | |
| 2627 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2628 | " WHERE blob.rid=event.objid AND mtime<=%.17g%s)", |
| 2629 | rDate-ONE_SECOND, blob_sql_text(&cond)) |
| 2630 | ){ |
| 2631 | zOlderButton = fossil_strdup(url_render(&url, "b", zDate, "a", 0)); |
| 2632 | zOlderButtonLabel = "More"; |
| 2633 | } |
| 2634 | free(zDate); |
| 2635 | } |
| 2636 | zDate = db_text(0, "SELECT max(timestamp) FROM timeline /*scan*/"); |
| 2637 | if( (!zDate || !zDate[0]) && ( zAfter || zBefore ) ){ |
| @@ -2576,10 +2643,11 @@ | |
| 2643 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2644 | " WHERE blob.rid=event.objid AND mtime>=%.17g%s)", |
| 2645 | rDate+ONE_SECOND, blob_sql_text(&cond)) |
| 2646 | ){ |
| 2647 | zNewerButton = fossil_strdup(url_render(&url, "a", zDate, "b", 0)); |
| 2648 | zNewerButton = "More"; |
| 2649 | } |
| 2650 | free(zDate); |
| 2651 | } |
| 2652 | if( advancedMenu ){ |
| 2653 | if( zType[0]=='a' || zType[0]=='c' ){ |
| @@ -2645,17 +2713,17 @@ | |
| 2713 | if( zError ){ |
| 2714 | @ <p class="generalError">%h(zError)</p> |
| 2715 | } |
| 2716 | |
| 2717 | if( zNewerButton ){ |
| 2718 | @ %z(chref("button","%z",zNewerButton))%h(zNewerButtonLabel) ↑</a> |
| 2719 | } |
| 2720 | www_print_timeline(&q, tmFlags, zThisUser, zThisTag, zBrName, |
| 2721 | selectedRid, secondaryRid, 0); |
| 2722 | db_finalize(&q); |
| 2723 | if( zOlderButton ){ |
| 2724 | @ %z(chref("button","%z",zOlderButton))%h(zOlderButtonLabel) ↓</a> |
| 2725 | } |
| 2726 | document_emit_js(/*handles pikchrs rendered above*/); |
| 2727 | style_finish_page("timeline"); |
| 2728 | } |
| 2729 | |
| 2730 |