Fossil SCM
Add the 'onlyhidden' query parameter to show only check-ins tagged as "hidden" for the /leaves, /brtimeline, and /tagtimeline web pages.
Commit
82b9140f3091a21822bef75a8d3d682edb2521308065d070e9300f92526c9516
Parent
8e5ea60baa6550a…
3 files changed
+9
-4
+11
-3
+9
-4
+9
-4
| --- src/branch.c | ||
| +++ src/branch.c | ||
| @@ -618,17 +618,20 @@ | ||
| 618 | 618 | ** |
| 619 | 619 | ** Query parameters: |
| 620 | 620 | ** |
| 621 | 621 | ** ng No graph |
| 622 | 622 | ** hide Hide check-ins with "hidden" tag |
| 623 | +** onlyhidden Show only check-ins with "hidden" tag | |
| 623 | 624 | ** brbg Background color by branch name |
| 624 | 625 | ** ubg Background color by user name |
| 625 | 626 | */ |
| 626 | 627 | void brtimeline_page(void){ |
| 627 | 628 | Blob sql = empty_blob; |
| 628 | 629 | Stmt q; |
| 629 | - int tmFlags; /* Timeline display flags */ | |
| 630 | + int tmFlags; /* Timeline display flags */ | |
| 631 | + int fHide = PB("hide")!=0; /* The "hide" query parameter */ | |
| 632 | + int fOnlyHidden = PB("onlyhidden")!=0; /* The "onlyhidden" query parameter */ | |
| 630 | 633 | |
| 631 | 634 | login_check_credentials(); |
| 632 | 635 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 633 | 636 | |
| 634 | 637 | style_header("Branches"); |
| @@ -639,14 +642,16 @@ | ||
| 639 | 642 | @ <h2>The initial check-in for each branch:</h2> |
| 640 | 643 | blob_append(&sql, timeline_query_for_www(), -1); |
| 641 | 644 | blob_append_sql(&sql, |
| 642 | 645 | "AND blob.rid IN (SELECT rid FROM tagxref" |
| 643 | 646 | " WHERE tagtype>0 AND tagid=%d AND srcid!=0)", TAG_BRANCH); |
| 644 | - if( PB("hide") ){ | |
| 647 | + if( fHide || fOnlyHidden ){ | |
| 648 | + const char* zUnaryOp = fHide ? "NOT" : ""; | |
| 645 | 649 | blob_append_sql(&sql, |
| 646 | - " AND NOT EXISTS(SELECT 1 FROM tagxref" | |
| 647 | - " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", TAG_HIDDEN); | |
| 650 | + " AND %s EXISTS(SELECT 1 FROM tagxref" | |
| 651 | + " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", | |
| 652 | + zUnaryOp/*safe-for-%s*/, TAG_HIDDEN); | |
| 648 | 653 | } |
| 649 | 654 | db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_sql_text(&sql)); |
| 650 | 655 | blob_reset(&sql); |
| 651 | 656 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 652 | 657 | ** many descenders to (off-screen) parents. */ |
| 653 | 658 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -618,17 +618,20 @@ | |
| 618 | ** |
| 619 | ** Query parameters: |
| 620 | ** |
| 621 | ** ng No graph |
| 622 | ** hide Hide check-ins with "hidden" tag |
| 623 | ** brbg Background color by branch name |
| 624 | ** ubg Background color by user name |
| 625 | */ |
| 626 | void brtimeline_page(void){ |
| 627 | Blob sql = empty_blob; |
| 628 | Stmt q; |
| 629 | int tmFlags; /* Timeline display flags */ |
| 630 | |
| 631 | login_check_credentials(); |
| 632 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 633 | |
| 634 | style_header("Branches"); |
| @@ -639,14 +642,16 @@ | |
| 639 | @ <h2>The initial check-in for each branch:</h2> |
| 640 | blob_append(&sql, timeline_query_for_www(), -1); |
| 641 | blob_append_sql(&sql, |
| 642 | "AND blob.rid IN (SELECT rid FROM tagxref" |
| 643 | " WHERE tagtype>0 AND tagid=%d AND srcid!=0)", TAG_BRANCH); |
| 644 | if( PB("hide") ){ |
| 645 | blob_append_sql(&sql, |
| 646 | " AND NOT EXISTS(SELECT 1 FROM tagxref" |
| 647 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", TAG_HIDDEN); |
| 648 | } |
| 649 | db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_sql_text(&sql)); |
| 650 | blob_reset(&sql); |
| 651 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 652 | ** many descenders to (off-screen) parents. */ |
| 653 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -618,17 +618,20 @@ | |
| 618 | ** |
| 619 | ** Query parameters: |
| 620 | ** |
| 621 | ** ng No graph |
| 622 | ** hide Hide check-ins with "hidden" tag |
| 623 | ** onlyhidden Show only check-ins with "hidden" tag |
| 624 | ** brbg Background color by branch name |
| 625 | ** ubg Background color by user name |
| 626 | */ |
| 627 | void brtimeline_page(void){ |
| 628 | Blob sql = empty_blob; |
| 629 | Stmt q; |
| 630 | int tmFlags; /* Timeline display flags */ |
| 631 | int fHide = PB("hide")!=0; /* The "hide" query parameter */ |
| 632 | int fOnlyHidden = PB("onlyhidden")!=0; /* The "onlyhidden" query parameter */ |
| 633 | |
| 634 | login_check_credentials(); |
| 635 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 636 | |
| 637 | style_header("Branches"); |
| @@ -639,14 +642,16 @@ | |
| 642 | @ <h2>The initial check-in for each branch:</h2> |
| 643 | blob_append(&sql, timeline_query_for_www(), -1); |
| 644 | blob_append_sql(&sql, |
| 645 | "AND blob.rid IN (SELECT rid FROM tagxref" |
| 646 | " WHERE tagtype>0 AND tagid=%d AND srcid!=0)", TAG_BRANCH); |
| 647 | if( fHide || fOnlyHidden ){ |
| 648 | const char* zUnaryOp = fHide ? "NOT" : ""; |
| 649 | blob_append_sql(&sql, |
| 650 | " AND %s EXISTS(SELECT 1 FROM tagxref" |
| 651 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", |
| 652 | zUnaryOp/*safe-for-%s*/, TAG_HIDDEN); |
| 653 | } |
| 654 | db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_sql_text(&sql)); |
| 655 | blob_reset(&sql); |
| 656 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 657 | ** many descenders to (off-screen) parents. */ |
| 658 |
+11
-3
| --- src/descendants.c | ||
| +++ src/descendants.c | ||
| @@ -456,10 +456,11 @@ | ||
| 456 | 456 | ** |
| 457 | 457 | ** all Show all leaves |
| 458 | 458 | ** closed Show only closed leaves |
| 459 | 459 | ** ng No graph |
| 460 | 460 | ** hide Hide check-ins with "hidden" tag |
| 461 | +** onlyhidden Show only check-ins with "hidden" tag | |
| 461 | 462 | ** brbg Background color by branch name |
| 462 | 463 | ** ubg Background color by user name |
| 463 | 464 | */ |
| 464 | 465 | void leaves_page(void){ |
| 465 | 466 | Blob sql; |
| @@ -466,10 +467,11 @@ | ||
| 466 | 467 | Stmt q; |
| 467 | 468 | int showAll = P("all")!=0; |
| 468 | 469 | int showClosed = P("closed")!=0; |
| 469 | 470 | int fNg = PB("ng")!=0; /* Flag for the "ng" query parameter */ |
| 470 | 471 | int fHide = PB("hide")!=0; /* Flag for the "hide" query parameter */ |
| 472 | + int fOnlyHidden = PB("onlyhidden")!=0; /* "onlyhidden" query parameter */ | |
| 471 | 473 | int fBrBg = PB("brbg")!=0; /* Flag for the "brbg" query parameter */ |
| 472 | 474 | int fUBg = PB("ubg")!=0; /* Flag for the "ubg" query parameter */ |
| 473 | 475 | Blob QueryParams = empty_blob; /* Concatenated query parameters */ |
| 474 | 476 | char *zParamSep = 0; /* Query parameter separator */ |
| 475 | 477 | int tmFlags; /* Timeline display flags */ |
| @@ -481,10 +483,14 @@ | ||
| 481 | 483 | zParamSep = "&"; |
| 482 | 484 | } |
| 483 | 485 | if( fHide ){ |
| 484 | 486 | blob_appendf(&QueryParams, "%s%s", zParamSep, "hide"); |
| 485 | 487 | zParamSep = "&"; |
| 488 | + } | |
| 489 | + if( fOnlyHidden ){ | |
| 490 | + blob_appendf(&QueryParams, "%s%s", zParamSep, "onlyhidden"); | |
| 491 | + zParamSep = "&"; | |
| 486 | 492 | } |
| 487 | 493 | if( fBrBg ){ |
| 488 | 494 | blob_appendf(&QueryParams, "%s%s", zParamSep, "brbg"); |
| 489 | 495 | zParamSep = "&"; |
| 490 | 496 | } |
| @@ -538,14 +544,16 @@ | ||
| 538 | 544 | if( showClosed ){ |
| 539 | 545 | blob_append_sql(&sql," AND %z", leaf_is_closed_sql("blob.rid")); |
| 540 | 546 | }else if( !showAll ){ |
| 541 | 547 | blob_append_sql(&sql," AND NOT %z", leaf_is_closed_sql("blob.rid")); |
| 542 | 548 | } |
| 543 | - if( fHide ){ | |
| 549 | + if( fHide || fOnlyHidden ){ | |
| 550 | + const char* zUnaryOp = fHide ? "NOT" : ""; | |
| 544 | 551 | blob_append_sql(&sql, |
| 545 | - " AND NOT EXISTS(SELECT 1 FROM tagxref" | |
| 546 | - " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", TAG_HIDDEN); | |
| 552 | + " AND %s EXISTS(SELECT 1 FROM tagxref" | |
| 553 | + " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", | |
| 554 | + zUnaryOp/*safe-for-%s*/, TAG_HIDDEN); | |
| 547 | 555 | } |
| 548 | 556 | db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_sql_text(&sql)); |
| 549 | 557 | blob_reset(&sql); |
| 550 | 558 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 551 | 559 | ** many descenders to (off-screen) parents. */ |
| 552 | 560 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -456,10 +456,11 @@ | |
| 456 | ** |
| 457 | ** all Show all leaves |
| 458 | ** closed Show only closed leaves |
| 459 | ** ng No graph |
| 460 | ** hide Hide check-ins with "hidden" tag |
| 461 | ** brbg Background color by branch name |
| 462 | ** ubg Background color by user name |
| 463 | */ |
| 464 | void leaves_page(void){ |
| 465 | Blob sql; |
| @@ -466,10 +467,11 @@ | |
| 466 | Stmt q; |
| 467 | int showAll = P("all")!=0; |
| 468 | int showClosed = P("closed")!=0; |
| 469 | int fNg = PB("ng")!=0; /* Flag for the "ng" query parameter */ |
| 470 | int fHide = PB("hide")!=0; /* Flag for the "hide" query parameter */ |
| 471 | int fBrBg = PB("brbg")!=0; /* Flag for the "brbg" query parameter */ |
| 472 | int fUBg = PB("ubg")!=0; /* Flag for the "ubg" query parameter */ |
| 473 | Blob QueryParams = empty_blob; /* Concatenated query parameters */ |
| 474 | char *zParamSep = 0; /* Query parameter separator */ |
| 475 | int tmFlags; /* Timeline display flags */ |
| @@ -481,10 +483,14 @@ | |
| 481 | zParamSep = "&"; |
| 482 | } |
| 483 | if( fHide ){ |
| 484 | blob_appendf(&QueryParams, "%s%s", zParamSep, "hide"); |
| 485 | zParamSep = "&"; |
| 486 | } |
| 487 | if( fBrBg ){ |
| 488 | blob_appendf(&QueryParams, "%s%s", zParamSep, "brbg"); |
| 489 | zParamSep = "&"; |
| 490 | } |
| @@ -538,14 +544,16 @@ | |
| 538 | if( showClosed ){ |
| 539 | blob_append_sql(&sql," AND %z", leaf_is_closed_sql("blob.rid")); |
| 540 | }else if( !showAll ){ |
| 541 | blob_append_sql(&sql," AND NOT %z", leaf_is_closed_sql("blob.rid")); |
| 542 | } |
| 543 | if( fHide ){ |
| 544 | blob_append_sql(&sql, |
| 545 | " AND NOT EXISTS(SELECT 1 FROM tagxref" |
| 546 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", TAG_HIDDEN); |
| 547 | } |
| 548 | db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_sql_text(&sql)); |
| 549 | blob_reset(&sql); |
| 550 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 551 | ** many descenders to (off-screen) parents. */ |
| 552 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -456,10 +456,11 @@ | |
| 456 | ** |
| 457 | ** all Show all leaves |
| 458 | ** closed Show only closed leaves |
| 459 | ** ng No graph |
| 460 | ** hide Hide check-ins with "hidden" tag |
| 461 | ** onlyhidden Show only check-ins with "hidden" tag |
| 462 | ** brbg Background color by branch name |
| 463 | ** ubg Background color by user name |
| 464 | */ |
| 465 | void leaves_page(void){ |
| 466 | Blob sql; |
| @@ -466,10 +467,11 @@ | |
| 467 | Stmt q; |
| 468 | int showAll = P("all")!=0; |
| 469 | int showClosed = P("closed")!=0; |
| 470 | int fNg = PB("ng")!=0; /* Flag for the "ng" query parameter */ |
| 471 | int fHide = PB("hide")!=0; /* Flag for the "hide" query parameter */ |
| 472 | int fOnlyHidden = PB("onlyhidden")!=0; /* "onlyhidden" query parameter */ |
| 473 | int fBrBg = PB("brbg")!=0; /* Flag for the "brbg" query parameter */ |
| 474 | int fUBg = PB("ubg")!=0; /* Flag for the "ubg" query parameter */ |
| 475 | Blob QueryParams = empty_blob; /* Concatenated query parameters */ |
| 476 | char *zParamSep = 0; /* Query parameter separator */ |
| 477 | int tmFlags; /* Timeline display flags */ |
| @@ -481,10 +483,14 @@ | |
| 483 | zParamSep = "&"; |
| 484 | } |
| 485 | if( fHide ){ |
| 486 | blob_appendf(&QueryParams, "%s%s", zParamSep, "hide"); |
| 487 | zParamSep = "&"; |
| 488 | } |
| 489 | if( fOnlyHidden ){ |
| 490 | blob_appendf(&QueryParams, "%s%s", zParamSep, "onlyhidden"); |
| 491 | zParamSep = "&"; |
| 492 | } |
| 493 | if( fBrBg ){ |
| 494 | blob_appendf(&QueryParams, "%s%s", zParamSep, "brbg"); |
| 495 | zParamSep = "&"; |
| 496 | } |
| @@ -538,14 +544,16 @@ | |
| 544 | if( showClosed ){ |
| 545 | blob_append_sql(&sql," AND %z", leaf_is_closed_sql("blob.rid")); |
| 546 | }else if( !showAll ){ |
| 547 | blob_append_sql(&sql," AND NOT %z", leaf_is_closed_sql("blob.rid")); |
| 548 | } |
| 549 | if( fHide || fOnlyHidden ){ |
| 550 | const char* zUnaryOp = fHide ? "NOT" : ""; |
| 551 | blob_append_sql(&sql, |
| 552 | " AND %s EXISTS(SELECT 1 FROM tagxref" |
| 553 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", |
| 554 | zUnaryOp/*safe-for-%s*/, TAG_HIDDEN); |
| 555 | } |
| 556 | db_prepare(&q, "%s ORDER BY event.mtime DESC", blob_sql_text(&sql)); |
| 557 | blob_reset(&sql); |
| 558 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 559 | ** many descenders to (off-screen) parents. */ |
| 560 |
+9
-4
| --- src/tag.c | ||
| +++ src/tag.c | ||
| @@ -690,17 +690,20 @@ | ||
| 690 | 690 | ** |
| 691 | 691 | ** Query parameters: |
| 692 | 692 | ** |
| 693 | 693 | ** ng No graph |
| 694 | 694 | ** hide Hide check-ins with "hidden" tag |
| 695 | +** onlyhidden Show only check-ins with "hidden" tag | |
| 695 | 696 | ** brbg Background color by branch name |
| 696 | 697 | ** ubg Background color by user name |
| 697 | 698 | */ |
| 698 | 699 | void tagtimeline_page(void){ |
| 699 | 700 | Blob sql = empty_blob; |
| 700 | 701 | Stmt q; |
| 701 | - int tmFlags; /* Timeline display flags */ | |
| 702 | + int tmFlags; /* Timeline display flags */ | |
| 703 | + int fHide = PB("hide")!=0; /* The "hide" query parameter */ | |
| 704 | + int fOnlyHidden = PB("onlyhidden")!=0; /* The "onlyhidden" query parameter */ | |
| 702 | 705 | |
| 703 | 706 | login_check_credentials(); |
| 704 | 707 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 705 | 708 | |
| 706 | 709 | style_header("Tagged Check-ins"); |
| @@ -713,14 +716,16 @@ | ||
| 713 | 716 | blob_append_sql(&sql, |
| 714 | 717 | "AND blob.rid IN (SELECT rid FROM tagxref" |
| 715 | 718 | " WHERE tagtype=1 AND srcid>0" |
| 716 | 719 | " AND tagid IN (SELECT tagid FROM tag " |
| 717 | 720 | " WHERE tagname GLOB 'sym-*'))"); |
| 718 | - if( PB("hide") ){ | |
| 721 | + if( fHide || fOnlyHidden ){ | |
| 722 | + const char* zUnaryOp = fHide ? "NOT" : ""; | |
| 719 | 723 | blob_append_sql(&sql, |
| 720 | - " AND NOT EXISTS(SELECT 1 FROM tagxref" | |
| 721 | - " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", TAG_HIDDEN); | |
| 724 | + " AND %s EXISTS(SELECT 1 FROM tagxref" | |
| 725 | + " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", | |
| 726 | + zUnaryOp/*safe-for-%s*/, TAG_HIDDEN); | |
| 722 | 727 | } |
| 723 | 728 | db_prepare(&q, "%s ORDER BY event.mtime DESC /*sort*/", blob_sql_text(&sql)); |
| 724 | 729 | blob_reset(&sql); |
| 725 | 730 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 726 | 731 | ** many descenders to (off-screen) parents. */ |
| 727 | 732 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -690,17 +690,20 @@ | |
| 690 | ** |
| 691 | ** Query parameters: |
| 692 | ** |
| 693 | ** ng No graph |
| 694 | ** hide Hide check-ins with "hidden" tag |
| 695 | ** brbg Background color by branch name |
| 696 | ** ubg Background color by user name |
| 697 | */ |
| 698 | void tagtimeline_page(void){ |
| 699 | Blob sql = empty_blob; |
| 700 | Stmt q; |
| 701 | int tmFlags; /* Timeline display flags */ |
| 702 | |
| 703 | login_check_credentials(); |
| 704 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 705 | |
| 706 | style_header("Tagged Check-ins"); |
| @@ -713,14 +716,16 @@ | |
| 713 | blob_append_sql(&sql, |
| 714 | "AND blob.rid IN (SELECT rid FROM tagxref" |
| 715 | " WHERE tagtype=1 AND srcid>0" |
| 716 | " AND tagid IN (SELECT tagid FROM tag " |
| 717 | " WHERE tagname GLOB 'sym-*'))"); |
| 718 | if( PB("hide") ){ |
| 719 | blob_append_sql(&sql, |
| 720 | " AND NOT EXISTS(SELECT 1 FROM tagxref" |
| 721 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", TAG_HIDDEN); |
| 722 | } |
| 723 | db_prepare(&q, "%s ORDER BY event.mtime DESC /*sort*/", blob_sql_text(&sql)); |
| 724 | blob_reset(&sql); |
| 725 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 726 | ** many descenders to (off-screen) parents. */ |
| 727 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -690,17 +690,20 @@ | |
| 690 | ** |
| 691 | ** Query parameters: |
| 692 | ** |
| 693 | ** ng No graph |
| 694 | ** hide Hide check-ins with "hidden" tag |
| 695 | ** onlyhidden Show only check-ins with "hidden" tag |
| 696 | ** brbg Background color by branch name |
| 697 | ** ubg Background color by user name |
| 698 | */ |
| 699 | void tagtimeline_page(void){ |
| 700 | Blob sql = empty_blob; |
| 701 | Stmt q; |
| 702 | int tmFlags; /* Timeline display flags */ |
| 703 | int fHide = PB("hide")!=0; /* The "hide" query parameter */ |
| 704 | int fOnlyHidden = PB("onlyhidden")!=0; /* The "onlyhidden" query parameter */ |
| 705 | |
| 706 | login_check_credentials(); |
| 707 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 708 | |
| 709 | style_header("Tagged Check-ins"); |
| @@ -713,14 +716,16 @@ | |
| 716 | blob_append_sql(&sql, |
| 717 | "AND blob.rid IN (SELECT rid FROM tagxref" |
| 718 | " WHERE tagtype=1 AND srcid>0" |
| 719 | " AND tagid IN (SELECT tagid FROM tag " |
| 720 | " WHERE tagname GLOB 'sym-*'))"); |
| 721 | if( fHide || fOnlyHidden ){ |
| 722 | const char* zUnaryOp = fHide ? "NOT" : ""; |
| 723 | blob_append_sql(&sql, |
| 724 | " AND %s EXISTS(SELECT 1 FROM tagxref" |
| 725 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid)\n", |
| 726 | zUnaryOp/*safe-for-%s*/, TAG_HIDDEN); |
| 727 | } |
| 728 | db_prepare(&q, "%s ORDER BY event.mtime DESC /*sort*/", blob_sql_text(&sql)); |
| 729 | blob_reset(&sql); |
| 730 | /* Always specify TIMELINE_DISJOINT, or graph_finish() may fail because of too |
| 731 | ** many descenders to (off-screen) parents. */ |
| 732 |