%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2026 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 }}}
% if ( not $htmx_load ) {
<div class="<% $class %>">
% }

% if ( not $hide_chrome ) {
  <& TitleBoxStart, %ARGS &>
% }

%   if ( $htmx_load ) {
      <& HTMXLoadStart, htmx_get => $htmx_get, htmx_post => $htmx_post, htmx_params => $htmx_params, htmx_values => $htmx_values, htmx_id => $htmx_id &>
%  }

<% $content | n %>

%   if ( $htmx_load ) {
      <& HTMXLoadEnd &>
%  }

% if ( not $hide_chrome ) {
  <& TitleBoxEnd &>
% }

% if ( not $htmx_load ) {
</div>
% }

<%ARGS>
$class => ''
$hide_empty => 0
$hide_chrome => 0
$htmx_load => undef
$htmx_get => undef
$htmx_post => undef
$htmx_params => undef
$htmx_values => undef
$htmx_id => undef
</%ARGS>
<%INIT>

# With $htmx_load => 1, TitleBox builds the box and the title on the
# initial load with an htmx trigger. HTMX will then
# issue another request to load the body.

# Pass $htmx_load => 0 to build an entire component on the initial
# render like pre-htmx RT.

my $content;

# If htmx_load is set to 0 explicitly, render with titlebox even for /Views/
if ( $m->request_path =~ /^(?:\/SelfService)?\/Views/ && $m->request_path !~ m{(?:\/SelfService)?/Widgets/} && ( $htmx_load // 1 ) ) {

    # HTMX load, send content with no titlebox
    $m->out( $m->content );
    return;
}
elsif ( my $name = $m->notes('HTMXLoadComponent') ) {
    # Request for a mason component
    $htmx_load //= 1;
    $htmx_get = RT->Config->Get('WebPath') . ( $session{CurrentUser}->Privileged ? '' : '/SelfService' ) . '/Views/Component/' . $name . '?From=' . RT->Config->Get('WebPath') . $m->request_path;
}

$content = $m->content unless $htmx_load && RT::Interface::Web->ModernClient();

$m->callback( CallbackName => "ModifyContent", ARGSRef => \%ARGS, Content => \$content,
    Class => \$class, HideEmpty => \$hide_empty, HideChrome => \$hide_chrome );
return if $hide_empty && $content =~ /^\s*$/s;
</%INIT>
