<!--
 Licensed 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>

<head>
<link rel="shortcut icon" href="{{ static_url('img/logo54x54.png') }}" type="image/x-icon" >
<style type="text/css">
{{ css }}
div.tight
{
  height:85%;
  overflow:auto;
}
</style>
<title>path browser for {{path}}</title>

</head>

<body>
  <div class="container">
  <div class="span6">
    <strong> path </strong> {{path}}
  </div>

  <div class="span12 tight">
    <pre>
{% for fn in listing %} {% try %} {% if not stat.S_ISDIR(get_stat(path, fn).st_mode) %}
  {{ format_prefix(fn, get_stat(path, fn)) }} <a href='/file/{{ os.path.join(path, fn) }}'>{{ fn }}</a> <a href='/download/{{ os.path.join(path, fn) }}'><font size=1>dl</font></a> {% else %}
  {{ format_prefix(fn, get_stat(path, fn)) }} <a href='/browse/{{ os.path.join(path, fn) }}'>{{ fn }}</a> {% end %} {% except %} {% continue %} {% end %} {% end %}
    </pre>
  </div>
  </div>
</body>

</html>
