<!DOCTYPE html>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at .
http://www.apache.org/licenses/LICENSE-2.0 . Unless required by
applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either express or implied. See the License
for the specific language governing permissions and limitations under
the License. -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=0.5">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    
    <!-- Left empty on purpose!-->
    <title></title>

    <!-- Bootstrap -->
    
    <link href="css/bootstrap.min.css" rel="stylesheet" media="all">
    <link href="css/scaffolding.css?revision=f3a4716" rel="stylesheet" media="all">
    <link href="css/modal.css" rel="stylesheet" media="all">
    <link href="css/spinner.css" rel="stylesheet" media="all">
    <link rel="alternate" href="/api/static.lua"/>
    <link rel="stylesheet" href="css/hack.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  
  <body onload="parseURL();">
    <div id="portrait_notice" style="display: none;" class="card">Switch to landscape mode on your device for the best experience</div>
    <header class="navbar navbar-default" style="margin-bottom: 0px; background: linear-gradient(to bottom, rgba(229,229,229,1) 0%,rgba(191,191,191,1) 100%);">
      
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header collapse navbar-collapse">
      <a class="navbar-brand" href="./" onclick="location.href='./';"><span><img src="images/logo.png" alt="Foal logo" style="margin-top: -10px !important;" height="30"/>&nbsp;</a>
      </div>
    
    
    <!-- Quick search -->
    
            
      
      <form class="quickform" style="padding-top: 8px; float: left; page-break-before: avoid; page-break-after: avoid;" id="quickform" action="list.html" method="get" onsubmit="return search(this.elements['q'].value,this.elements['d'].getAttribute('data'), false, this.elements['checkall'].checked);">
        <div class="unifiedsearch">
        
        <input type="checkbox" style="display: none" id="checkall" name="checkall"/>
        
        <ul id="advanced_search">
          <li><b>Where to search:</b></li>
          <li><a href="javascript:void(0);" class="searchlistoption checked" onclick="search_set_list('this');" id="search_list_this">This list</a></li>
          <li><a href="javascript:void(0);" class="searchlistoption" onclick="search_set_list('domain');" id="search_list_domain">This domain</a></li>
          <li><a href="javascript:void(0);" class="searchlistoption" onclick="search_set_list('global');"  id="search_list_global">All lists</a></li>
          <li class="divider"></li>
          <li><b>Date range:</b>
            <span id='drh'><input title="Click to change the date range" style="padding-left: 20px; border: none; cursor: pointer; min-width: 200px; margin-right: 10px; background-color: transparent; font-size: 9pt;" name="d" id='d' data="lte=1M" value="Less than 1 month ago" onclick="datePicker(this);" readonly="readonly"/></span>
          </li>
          <li class="divider"></li>
          <li><b>Advanced filters:</b><br/>
            <div style="display: inline-block; width: 120px;">Author: </div><span id='hd_from'><input title="Name or email address" style="min-width: 200px; margin-right: 10px; background-color: white; font-size: 8pt;" name="header_from" id='header_from' value=""/></span><br/>
            <div style="display: inline-block; width: 120px;">Subject: </div><span id='hd_subject'><input style="min-width: 200px; margin-right: 10px; background-color: white; font-size: 8pt;" name="header_subject" id='header_subject' value=""/></span><br/>
            <div style="display: inline-block; width: 120px;">To: </div><span id='hd_to'><input title="Name or email address" style="min-width: 200px; margin-right: 10px; background-color: white; font-size: 8pt;" name="header_to" id='header_to' value=""/></span><br/>
            <div style="display: inline-block; width: 120px;">Body: </div><span id='hd_body'><input style="min-width: 200px; margin-right: 10px; background-color: white; font-size: 8pt;" name="header_body" id='header_body' value=""/></span><br/>
          </li>
        </ul>

        
        <input type="text" name="q" id="q" placeholder="Search this list..." style="border-top: none; border-bottom: none;"/>
        <button type="submit" title="Search!" value="Search!" class="btn btn-primary"><span class="glyphicon glyphicon-search"> </span></button>
        <div id="q-dropdown" onclick="toggleView('advanced_search');"><span class="glyphicon glyphicon-chevron-down" title="Search settings..."> </span></div>
        </div>
        
      </form>
      <form id="project_select_form">
        <select style="float: left; margin-top: 12px; display: none;" id="project_select" onchange='switch_project(this.value);'></select>
      </form>

    <!-- User preferences and display options -->
    <div id="preferences">
      <ul class="nav" id="preferences_ul">
        <li class="dropdown navbar-right" style="float: right;">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
            <img src="images/cog.png" alt="Display Settings" style="width: 32px;" title="Display Settings"/>
            <span class="caret"></span>
          </a>
            <div class="dropdown-menu" id="display_options_dropdown">
              <div style="display: block; width: 100%;">
                <div>
                  <b>List display mode:</b><br/><br/>
                  <input type="radio" id="display_mode_threaded" name="ui_threading" value="threaded" onchange="set_theme('threaded');"> <label for="display_mode_threaded">Threaded view</label><br/>
                  <input type="radio" id="display_mode_flat" name="ui_threading" value="flat" onchange="set_theme('flat');"> <label for="display_mode_flat">Flat view</label><br/>
                  <input type="radio" id="display_mode_treeview" name="ui_threading" value="treeview" onchange="set_theme('treeview');"> <label for="display_mode_treeview">Treeview</label><br/>
                  <br/>
                  <input type="checkbox" id="display_mode_compact" name="ui_compact_list" value="compact" onchange="set_theme(G_current_listmode, this.checked);"> <label for="display_mode_compact">Compact layout</label><br/>
                  <input type="checkbox" id="G_show_stats_sidebar" name="ui_stats_sidebar" value="compact" onchange="set_show_stats(this.checked);"> <label for="G_show_stats_sidebar">Show side-bar stats</label><br/>
                </div>
                <div>
                  <b>Email display mode:</b><br/><br/>
                  <input type="radio" id="email_mode_chatty" name="ui_emailmode" value="chatty" onchange="set_skin(true);"> <label for="email_mode_chatty">Modern rendering</label><br/>
                  <input type="radio" id="email_mode_plain" name="ui_emailmode" value="plain" onchange="set_skin(false);"> <label for="email_mode_plain">Legacy rendering</label><br/>
                </div>
              </div>
              <hr/>
              <div style="display: block; width: 100%; text-align: center;">
                <!-- text will be overwritten by init.js -->
                <span id="powered_by">Powered by Apache Pony Mail (Foal)</span>
              </div>
            </div>
        </li>

        <li class="dropdown navbar-right" id="login" style="float: right;">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img id="uimg" src="images/user_loggedout.png" alt="Logged out" style="width: 32px;"  title="Not logged in"/>
              <span class="caret"></span></a>
              <ul class="dropdown-menu" id="login_dropdown">
            </ul>
        </li>
      </ul>
    </div>

    
    </div>
    </header>
    
    <!-- quick-nav -->
    <header id="listview_header" class="navbar navbar-default" style="margin: 0px; height: 32px; margin-bottom: 10px; background: #FFF !important;">
      <!-- ML/search title -->
      <span id="listview_title"></span>
      <!-- ML nav chevrons -->
      <span id="listview_chevrons"> &nbsp;</span>
    </header>
    
    <div>
       <noscript>
          <div class="bs-callout bs-callout-alert">
            This site requires JavaScript enabled. Please enable it.
          </div>
      </noscript>
      
    <div>
      <div id="sidebar" class="hidden-xs hidden-sm col-md-3 col-lg-2" style="float: left;">&nbsp;
        <div id="sidebar_calendar"></div>
        <div id="sidebar_stats"></div>
        <div id="sidebar_wordcloud"></div>
        <div id="sidebar_subscribe"></div>
      </div>
      
      <!--
      <div id="datepicker_mobile_parent" style="margin-bottom: 5px;" class="col-xs-10 col-sm-10 hidden-md hidden-lg" style="float: left;">
          Pick a month: <select onchange="toggleEmail(this.value);" id="datepicker_mobile"></select>
      </div>
      -->
      <div id="list_picker" class="col-xs-12 col-md-8 col-lg-10" style="float: left;">
        <ul id="list_picker_ul">
          
        </ul>
      </div>
      <div id="emails_parent" class="col-xs-12 col-md-8 col-lg-10" style="float: left;">
        <div id="emails">
          
        </div>
      </div>
      </div>
    </div>
    <script src="js/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="></script>
    <script type="text/javascript">
      $(document).on("mobileinit", function() {
        $.mobile.keepNative = "input";
      });
    </script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <script src="js/config.js?revision=f3a4716"></script>
    <script src="js/wordcloud.js?revision=f3a4716"></script>
    <script src="js/ponymail.js?revision=f3a4716"></script>
    <div id="splash" class="splash fade-in"> &nbsp; </div>
    <div style="clear: both;"></div>
    <script type="text/javascript">
      let swipeDetect = new SwipeDetector(document.getElementById("emails"));
      swipeDetect.setCallback('left', ponymail_swipe);
      swipeDetect.setCallback('right', ponymail_swipe);
    </script>
  </body>
</html>
