<&| $wrapper, title => _("Mason error") &>

Error in <& .line, file => $file, line => "@lines" &>
<pre><% $msg %></pre>

<% Jifty->web->return( label => _("Try again") ) %>

<h2>Call stack</h2>
<ul>
% for my $frame (@stack) {
%   next if $frame->filename =~ m{/HTML/Mason/};
    <li><& .line, file => $frame->filename, line => $frame->line &></li>
% }
</ul>
 
</&>

<%def .line>
<%args>
$file
$line
</%args>
%   my $path;
%   if (-w $file) {
%     $path = $file;
%     for (map {$_->[1]} @{Jifty->handler->mason->interp->comp_root}) {
%       last if $path =~ s/^\Q$_\E//;
%     }
%    if ($path ne $file) {
template <% Jifty->web->tangent( url =>"/__jifty/edit/mason_component$path",
                                 label => _("%1 line %2", $path, $line),
                                 parameters => { line => $line } ) %>
%    } else {
<% Jifty->web->tangent( url =>"/__jifty/edit/library$path",
                        label => _("%1 line %2", $path, $line),
                        parameters => { line => $line } ) %>
%   }
%  } else {
<% _("%1 line %2", $file, $line) %>
% }
</%def>

<%init>
my $wrapper = "/_elements/wrapper";

my $cont = Jifty->web->request->continuation;
$wrapper = "/__jifty/error/_elements/wrapper"
  if $cont
  and $cont->request->path eq "/__jifty/error/mason_internal_error";

# If we're not in devel, bail
if ( not Jifty->config->framework("DevelMode") or not $cont ) {
  $m->comp(
    $wrapper,
      content => sub {
        $m->comp( "_elements/error_text", error => "mason internal error" );
      },
      title => "Something went awry"
  );
  $m->abort;
}

my $e   = $cont->response->error;
my $msg = $e->message;
$msg =~ s/, <\S+> (line|chunk) \d+\././;

my $info  = $e->analyze_error;
my $file  = $info->{file};
my @lines = @{ $info->{lines} };
my @stack = @{ $info->{frames} };
</%init>
