Skip to content
Snippets Groups Projects
Commit e7f1d902 authored by psy's avatar psy
Browse files

Merge branch 'feature/templates' into 'master'

add templates

See merge request !2
parents 746e46c4 469349a5
Branches
No related tags found
1 merge request!2add templates
Pipeline #9789 passed
......@@ -8,3 +8,4 @@ RUN apt-get -qq update && \
apt-get -qq clean
COPY directory-listing/create-index.py /usr/local/bin/create-directory-html-index
COPY directory-listing/templates/ /usr/local/share/templates/
#!/usr/bin/env python3
import pathlib
import jinja2
import os
import sys
from datetime import datetime
import argparse
def timestamp_to_datetime(timestamp):
return datetime.fromtimestamp(timestamp)
def main(inputfolder, outputfolder, ignore_files):
jinjaenv = jinja2.Environment(autoescape=jinja2.select_autoescape())
def main(inputfolder, outputfolder, template, ignore_files):
jinjaenv = jinja2.Environment(autoescape=jinja2.select_autoescape(), loader=jinja2.FileSystemLoader("/usr/local/share/templates"))
jinjaenv.filters["timestamp_to_datetime"] = timestamp_to_datetime
template = jinjaenv.from_string("""<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<style type="text/css">
body,html {
background: #fff;
font-family: "Bitstream Vera Sans","Lucida Grande","Lucida Sans Unicode",Lucidux,Verdana,Lucida,sans-serif;
}
tr:nth-child(even) {
background:#f4f4f4;
}
th,td {
padding:0.1em 0.5em;
}
th {
text-align:left;
font-weight:bold;
background:#eee;
border-bottom:1px solid #aaa;
}
#list {
border:1px solid #aaa;
width:100%;
}
a {
color:#a33;
}
a:hover {
color:#e33;
}
</style>
</head>
<body>
<h1>Index of /{{ path }}</h1>
<table id="list">
<thead>
<tr>
<th style="width:55%">
File Name
</th>
<th style="width:20%">
File Size</th>
<th style="width:25%">
Date
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="link">
<a href="../">Parent directory/</a>
</td>
<td class="size">-</td>
<td class="date">-</td>
</tr>
{% for entry, stat, is_dir in entries if not entry.startswith('.') %}
<tr>
<td class="link">
<a href="{{ entry + ('/' if is_dir else '') }}" title="{{ entry }}">{{ entry + ('/' if is_dir else '') }}</a>
</td>
<td class="size">{{ '-' if is_dir else stat.st_size|filesizeformat }}</td>
<td class="date">{{ (stat.st_mtime|timestamp_to_datetime).isoformat(timespec='seconds') }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p><a href="https://legal.cccv.de">Impressum - Datenschutzerklärung</a></p>
</body>
</html>
""")
template = jinjaenv.get_template(f"{template}.html.j2")
for path, dirs, files in os.walk(inputfolder):
dirs.sort()
files.sort()
......@@ -96,7 +29,11 @@ def main(inputfolder, outputfolder, ignore_files):
outputfile.close()
if __name__ == '__main__':
if len(sys.argv) != 3:
print(f'Usage: {sys.argv[0]} <directory tree to create index from> <output path for index tree>')
sys.exit(1)
main(inputfolder=sys.argv[1], outputfolder=sys.argv[2], ignore_files=['index.html'])
parser = argparse.ArgumentParser(description='Create html directory index for given path.')
parser.add_argument('path', type=pathlib.Path, help='Path to create index from')
parser.add_argument('output_directory', type=pathlib.Path, help='Directory for generated html files')
parser.add_argument('--template', help='Template to use without file extension (.html.j2)', default='default')
args = parser.parse_args()
main(inputfolder=args.path, outputfolder=args.output_directory, template=args.template, ignore_files=['index.html'])
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<style type="text/css">
body,html {
background: #fff;
font-family: "Bitstream Vera Sans","Lucida Grande","Lucida Sans Unicode",Lucidux,Verdana,Lucida,sans-serif;
}
tr:nth-child(even) {
background:#f4f4f4;
}
th,td {
padding:0.1em 0.5em;
}
th {
text-align:left;
font-weight:bold;
background:#eee;
border-bottom:1px solid #aaa;
}
#list {
border:1px solid #aaa;
width:100%;
}
a {
color:#a33;
}
a:hover {
color:#e33;
}
</style>
</head>
<body>
<h1>Index of /{{ path }}</h1>
<table id="list">
<thead>
<tr>
<th style="width:55%">
File Name
</th>
<th style="width:20%">
File Size</th>
<th style="width:25%">
Date
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="link">
<a href="../">Parent directory/</a>
</td>
<td class="size">-</td>
<td class="date">-</td>
</tr>
{% for entry, stat, is_dir in entries if not entry.startswith('.') %}
<tr>
<td class="link">
<a href="{{ entry + ('/' if is_dir else '') }}" title="{{ entry }}">{{ entry + ('/' if is_dir else '') }}</a>
</td>
<td class="size">{{ '-' if is_dir else stat.st_size|filesizeformat }}</td>
<td class="date">{{ (stat.st_mtime|timestamp_to_datetime).isoformat(timespec='seconds') }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p><a href="https://legal.cccv.de">Impressum - Datenschutzerklärung</a></p>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<style type="text/css">
body,html {
background: #fff;
font-family: "Bitstream Vera Sans","Lucida Grande","Lucida Sans Unicode",Lucidux,Verdana,Lucida,sans-serif;
}
tr:nth-child(even) {
background:#f4f4f4;
}
th,td {
padding:0.1em 0.5em;
}
th {
text-align:left;
font-weight:bold;
background:#eee;
border-bottom:1px solid #aaa;
}
#list {
border:1px solid #aaa;
width:100%;
}
a {
color:#a33;
}
a:hover {
color:#e33;
}
</style>
</head>
<body>
<h1>Index of /{{ path }}</h1>
<table id="list">
<thead>
<tr>
<th style="width:55%">
File Name
</th>
<th style="width:20%">
File Size</th>
</tr>
</thead>
<tbody>
<tr>
<td class="link">
<a href="../">Parent directory/</a>
</td>
<td class="size">-</td>
</tr>
{% for entry, stat, is_dir in entries if not entry.startswith('.') %}
<tr>
<td class="link">
<a href="{{ entry + ('/' if is_dir else '') }}" title="{{ entry }}">{{ entry + ('/' if is_dir else '') }}</a>
</td>
<td class="size">{{ '-' if is_dir else stat.st_size|filesizeformat }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p><a href="https://legal.cccv.de">Impressum - Datenschutzerklärung</a></p>
</body>
</html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment