%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2025 Best Practical Solutions, LLC
%#                                          <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%#
%#
%# LICENSE:
%#
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
%#
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
%# General Public License for more details.
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%# 02110-1301 or visit their web page on the internet at
%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
%#
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
%#
%# By intentionally submitting any modifications, corrections or
%# derivatives to this work, or any other work intended for use with
%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
%# you are the copyright holder for those contributions and you grant
%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
%# royalty-free, perpetual, license to use, copy, create derivative
%# works based on those contributions, and sublicense and distribute
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
<%ARGS>
$Object
$ShowHeaders       => 0
$ShowTitle         => 1
$ShowDisplayModes  => 1
$ScrollShowHistory => 0
$SingleTransaction => 0
$Title             => loc('History')
</%ARGS>
<%INIT>
my $record_type = $Object->RecordType;
my $histid      = "\L$record_type\E-" . $Object->id . "-history";
</%INIT>
<div class="history <% lc $record_type %>" id="<% $histid %>">
<%perl>
if ( $ShowDisplayModes or $ShowTitle or $ScrollShowHistory ) {
    my $title = $ShowTitle ? $Title : '&nbsp;';
    my @elements;
    if ( $ScrollShowHistory ) {
        push( @elements, qq{<span id="LoadAllHistoryContainer">} .
                         qq{<a href="#" id="LoadAllHistory">} .
                         loc('Load all history') .
                         qq{</a>} .
                         qq{</span>} );
    }

    if ( $ShowDisplayModes ) {
        if ( RT->Config->Get( 'QuoteFolding', $session{CurrentUser} ) ) {
            my $open_all  = $m->interp->apply_escapes( loc("Show all quoted text"), 'j' );
            my $open_html = $m->interp->apply_escapes( loc("Show all quoted text"), 'h' );
            my $close_all = $m->interp->apply_escapes( loc("Hide all quoted text"), 'j' );
            push( @elements, qq{<a href="#" data-direction="open" } .
                             qq{onclick="return toggle_all_folds(this, $open_all, $close_all);"} .
                             qq{>$open_html</a>} );
        }

        if ($ShowHeaders) {
            push( @elements, qq{<a href="?ForceShowHistory=1;id=} .
                             $Object->id.qq{#$histid">} .
                             loc("Show brief headers") .
                             qq{</a>} );
        } else {
            push( @elements, qq{<a href="?ForceShowHistory=1;ShowHeaders=1;id=} .
                             $Object->id.qq{#$histid">} .
                             loc("Show full headers") .
                             qq{</a>} );
        }
    }

    # Don't need to reverse history when showing a single transaction
    unless ( $SingleTransaction ) {
        my $href = $ARGS{ReverseHistoryOrderLink} || do {
            my $reverse_txns = $ARGS{'ReverseTxns'} // $DECODED_ARGS->{ReverseTxns};
            if ($reverse_txns) {

                # If we got something, reverse it for the link
                $reverse_txns = $reverse_txns eq 'ASC' ? 'DESC' : 'ASC';
            }
            else {
                # Default the link to the opposite of the config setting
                # Oldest Txns first is ASC, so reverse it for this option default
                $reverse_txns
                    = RT->Config->Get( "OldestTransactionsFirst", $session{'CurrentUser'} ) ? 'DESC' : 'ASC';
            }
            qq{?ForceShowHistory=1;ReverseTxns=$reverse_txns;id=} . $Object->id;
        };
        push @elements, qq{<a href="$href#$histid">} . loc("Reverse history order") . qq{</a>};
    }

    my $titleright;
    if ( @elements ) {
        # build the new link
        my $alt = loc('Options');
        $titleright = qq{<div class="btn-group dropdown"><a id="history-dropdown" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="fas fa-cog icon-bordered fa-2x" alt="$alt" data-toggle="tooltip" data-placement="top" data-original-title="$alt"></span></a><ul class="dropdown-menu dropdown-menu-right">};

        # foreach of the elements, build a new <li>$element</li> and append to the output.
        foreach my $element ( @elements ) {
            $titleright .= qq{<li class="dropdown-item">$element</li>};
        }

        $titleright .= q{</ul></div>};
    }

</%perl>
% $m->callback( CallbackName => 'BeforeTitle', %ARGS, title => \$title, titleright => \$titleright, ARGSRef => \%ARGS );
<& /Widgets/TitleBoxStart, title => $title, titleright_raw => $titleright, class => 'fullwidth' &>
% }

<div class="history-container">
