<!DOCTYPE html>
<html>
  <head>
    <title><%= title() // loc('korap_desc') %></title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=false, user-scalable=no" />
    <link href="<%= stash 'prefix' %>/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
    <link href="<%= stash 'prefix' %>/css/kalamar-<%= $Kalamar::VERSION %>.css" type="text/css" rel="stylesheet" />
%= javascript begin  
  window.KorAP = window.KorAP || {};
  % my $api = url_for('index');
  % $api =~ s!/$!!;
  KorAP.URL = '<%== $api %>';
% end

% if ($c->app->mode eq 'development') {
    <script data-main="/js/src/app/devel" src="/js/lib/require.js" async="async"></script>
% } else {
    <script src="<%= (stash('prefix') // '') . '/js/' . loc('jsFile', 'kalamar-' . $Kalamar::VERSION . '-en.js') %>" async="async"></script>
% };
  </head>
% my $embedded = 0;
% $embedded = 1 if stash('embedded');
  <body class="no-js<% if ($embedded) { %> embedded<% } %>">
    <script>document.body.classList.remove('no-js');</script>
    <div id="kalamar-bg"></div>

% if (!$embedded && !user_auth && stash('auth_support')) { # user not logged in
% content_for 'sidebar', begin
% if (flash('handle_or_email') && !param('handle_or_email')) {
%   param(handle_or_email => flash('handle_or_email'));
% };
<fieldset>
  %= form_for 'login', class => 'login', begin
  <legend><span><%= loc 'login' %></span></legend>
    %= csrf_field
    %= text_field 'handle_or_email', placeholder => loc('userormail')
    %= hidden_field fwd => $c->url_with
    <div>
      %= password_field 'pwd', placeholder => loc('pwd')
      <button type="submit"><span><%= loc 'go' %></span></button>
    </div>
    % end
    <p><%== loc 'loginExplanation' %></p>
%#  <ul>
%#    <li><%= link_to loc('register') => 'register' %></li>
%#    <li><%= link_to loc('pwdforgotten') => 'pwd_forgotten' %></li>
%#  </ul>

</fieldset>
% end
% }

    % my $aside = content_for('sidebar');
    <aside tabindex="0" class="<% unless (length($aside) > 0) { %>off<% } elsif (stash('sidebar_active')) { %>active<% } %>">
      <div>
      %= $aside
      </div>
    </aside>

    % unless ($embedded) {
      %= include 'partial/header'
    % }


    <noscript>
      <p id="activate"><%= loc 'activateJS' %></p>
    </noscript>
    
    <main<% if (stash 'main_class') { %> class="<%= stash 'main_class' %>"<% } %>>
    %= content
    </main>

    % unless ($embedded) {
    <footer>
      <a href="http://korap.ids-mannheim.de/"><%= loc 'about' %></a>
      <%= doc_link_to 'V '. $Kalamar::VERSION, 'korap', 'kalamar' %>
    </footer>
    % };
    %= notifications 'Kalamar::Plugin::Notifications'
  </body>
</html>
