Fet Foto Gallery Design
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@ env
|
||||
*.log
|
||||
*.sock
|
||||
*.pid
|
||||
thumbs/*
|
||||
@@ -14,20 +14,8 @@ import os
|
||||
import re
|
||||
from PIL import Image, ExifTags, ImageOps
|
||||
from functools import partial
|
||||
#from .flatpages import FileLists
|
||||
|
||||
# This is the directory, required for absolute file paths
|
||||
#package_directory = os.path.dirname(os.path.abspath(__file__))
|
||||
# Loading the config file
|
||||
#cfg = Config((os.path.join(package_directory, '../config.cfg')))
|
||||
cfg = Config("config.cfg")
|
||||
# Loading constants from config file
|
||||
#FLATPAGES_AUTO_RELOAD = cfg.get("FLATPAGES_AUTO_RELOAD",True) # Default can be overwritten by config cfg
|
||||
#FLATPAGES_EXTENSION = cfg.get("FLATPAGES_EXTENSION",".md") # Default can be overwritten by config cfg
|
||||
#FLATPAGES_ROOT = os.path.abspath(cfg.pages_root)
|
||||
#FLATPAGES_DEFAULT_TEMPLATE = cfg.get("FLATPAGES_DEFAULT_TEMPLATE","gallery.html")
|
||||
|
||||
|
||||
|
||||
# Initialize application
|
||||
app = Flask(__name__)
|
||||
@@ -37,19 +25,16 @@ app.logger.setLevel(logging.DEBUG)
|
||||
|
||||
flatpages = FlatPagesIndex(app)
|
||||
flatpages_index.Links.endpoint="intern.post"
|
||||
flatpages_index.Links.image_url=lambda s,x: url_for(s.endpoint,name=x)
|
||||
flatpages_index.Links.thumb_url=lambda s,x: url_for("intern.thumb",size=128,name=x)
|
||||
flatpages_index.Links.image_url=lambda s,x: url_for("intern.post",name=x)
|
||||
|
||||
flatpages_index.Page.page_defaults={"type":"gallery"}
|
||||
flatpages.get('index')
|
||||
|
||||
app.logger.info('Initialize Foto Gallery App')
|
||||
app.logger.info('Initialize FET Foto Gallery App')
|
||||
app.logger.info('flatpages loaded %d pages' % len(flatpages._pages))
|
||||
app.logger.info("Data directory is: %s" % flatpages.root)
|
||||
app.logger.info("Url prefix;: %s" % cfg.url_prefix)
|
||||
app.url_map.strict_slashes=True
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -57,6 +42,7 @@ freezer = Freezer(app)
|
||||
|
||||
|
||||
page_blueprint = Blueprint('intern', __name__)
|
||||
api_blueprint = Blueprint('api', __name__)
|
||||
|
||||
@page_blueprint.route('/thumb<int:size>/<path:name>')
|
||||
def thumb(size=64,name=''):
|
||||
@@ -69,18 +55,19 @@ def thumb(size=64,name=''):
|
||||
print("creating thumb")
|
||||
image= Image.open(file_name,'r')
|
||||
s=size, size
|
||||
for orientation in ExifTags.TAGS.keys():
|
||||
if ExifTags.TAGS[orientation]=='Orientation':
|
||||
break
|
||||
exif=dict(image._getexif().items())
|
||||
if image._getexif() is not None:
|
||||
for orientation in ExifTags.TAGS.keys():
|
||||
if ExifTags.TAGS[orientation]=='Orientation':
|
||||
break
|
||||
exif=dict(image._getexif().items())
|
||||
|
||||
if exif[orientation] == 3:
|
||||
image=image.rotate(180, expand=True)
|
||||
elif exif[orientation] == 6:
|
||||
image=image.rotate(270, expand=True)
|
||||
elif exif[orientation] == 8:
|
||||
image=image.rotate(90, expand=True)
|
||||
thumb=ImageOps.fit(image,s,Image.ANTIALIAS)
|
||||
if exif[orientation] == 3:
|
||||
image=image.rotate(180, expand=True)
|
||||
elif exif[orientation] == 6:
|
||||
image=image.rotate(270, expand=True)
|
||||
elif exif[orientation] == 8:
|
||||
image=image.rotate(90, expand=True)
|
||||
thumb=ImageOps.fit(image,s,Image.ANTIALIAS)
|
||||
print("writing %s"% thumb_name)
|
||||
|
||||
os.makedirs(thumb_path,exist_ok=True)
|
||||
@@ -103,7 +90,6 @@ def post(name=''):
|
||||
page["has_img"]=True
|
||||
page.links.endpoint='intern.post'
|
||||
|
||||
|
||||
return render_template(page["template"], post=page,
|
||||
pth=page["dirpath"])
|
||||
|
||||
@@ -112,19 +98,21 @@ def post(name=''):
|
||||
elif os.path.exists(os.path.join('static',name)):
|
||||
print("send from static dir %s" % name)
|
||||
return send_from_directory('static',name)
|
||||
elif os.path.exists(os.path.join(cfg["fet_assets"],name)):
|
||||
return send_from_directory(cfg["fet_assets"],name)
|
||||
else:
|
||||
return send_from_directory('blueimp',name)
|
||||
|
||||
|
||||
@page_blueprint.route('/<path:name>.json',strict_slashes=False)
|
||||
@page_blueprint.route('/.json',strict_slashes=False)
|
||||
@api_blueprint.route('/<path:name>.json',strict_slashes=False)
|
||||
@api_blueprint.route('/.json',strict_slashes=False)
|
||||
def postjson(name='index'):
|
||||
print("Post: %s" % name)
|
||||
|
||||
page = flatpages.get(name)
|
||||
if not page is None:
|
||||
page["has_img"]=True # can be overwritten by file
|
||||
page.links.endpoint='intern.postjson'
|
||||
page.links.endpoint='api.postjson'
|
||||
|
||||
return jsonify(page=dict(page))
|
||||
|
||||
@@ -136,4 +124,5 @@ def postjson(name='index'):
|
||||
|
||||
|
||||
app.register_blueprint(page_blueprint, url_prefix=cfg.url_prefix,static_folder='static')
|
||||
app.register_blueprint(api_blueprint, url_prefix="/api/"+cfg.url_prefix,static_folder='static')
|
||||
app.add_url_rule('%s/<path:name>' % cfg.url_prefix,'page', post)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{# -*-jinja2-*- #}
|
||||
{% extends "layout.html" %}
|
||||
{% extends "layoutfetbs3.html" %}
|
||||
{% block content %}
|
||||
<h1>{{post.title}}</h1>
|
||||
<small> von {{post.author}} </small>
|
||||
{{post.html | safe}}
|
||||
{% if post.links.images |length > 0 %}
|
||||
|
||||
@@ -22,11 +23,11 @@
|
||||
<div id="links">
|
||||
{% for d in post.links.images %}
|
||||
<a href="{{d.url}}" title="{{d.title}}">
|
||||
<img src="{{d.thumb_url}}" alt="{{d.title}}" />
|
||||
<img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail" />
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<script src="/gallery/js/blueimp-gallery.min.js"></script>
|
||||
<script src="/galleries/js/blueimp-gallery.min.js"></script>
|
||||
<script>
|
||||
document.getElementById('links').onclick = function(event) {
|
||||
event = event || window.event
|
||||
|
||||
33
foto_gallery/templates/gallery_index.html
Normal file
33
foto_gallery/templates/gallery_index.html
Normal file
@@ -0,0 +1,33 @@
|
||||
{# -*-jinja2-*- #}
|
||||
{% extends "layoutfetbs3.html" %}
|
||||
{% block content %}
|
||||
|
||||
{{ post.html|safe }}
|
||||
|
||||
|
||||
{% if post.links.subindexpages | length > 0 %}
|
||||
<div class= "container-fluid" >
|
||||
<div class="row">
|
||||
|
||||
{% for d in post.links.subindexpages %}
|
||||
<div class="span6">
|
||||
<a href="{{d.url}}" class="gallery-block media">
|
||||
<img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail pull-left" />
|
||||
<div class="media-body">
|
||||
<small class="pull-right">{{d.date}} </small>
|
||||
<h2> {{d.title}} </h2>
|
||||
<div >{{d.desc}} </div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
{{ loop.cycle('','</div><div class="row">'.safe) }}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endblock %}
|
||||
@@ -1,26 +1,69 @@
|
||||
{# -*-jinja2-*- #}
|
||||
<html>
|
||||
<head></head>
|
||||
<LINK href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
||||
<head>
|
||||
<LINK href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" href="/gallery/css/blueimp-gallery.min.css" />
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<nav class="breadcrumb" style="background-color: #FFF">
|
||||
{% for b in post.links.breadcrumbs %}
|
||||
<a href="{#url_for('page',name=b.path)#}{{b.url}}" class="breadcrumb-item">{{b.title}} </a>
|
||||
{% endfor %}
|
||||
|
||||
</nav>
|
||||
<!-- <link rel="stylesheet" href="/gallery/blue2fetat.css" />-->
|
||||
</head>
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
<body>
|
||||
<div id="maincontainer" class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-10 offset-1">
|
||||
|
||||
<div class="header_wrap">
|
||||
<nav class="navbar navbar-expand-sm">
|
||||
|
||||
<div class="header d-print-none hidden-print">
|
||||
<a href="/home">
|
||||
<img alt="Logo2014_64" src="/gallery/logo2014_64.png" style="float:left;height:50px" height="50">
|
||||
</a>
|
||||
</div>
|
||||
<div class="header d-print-block d-none">
|
||||
<img alt="Logo2014_64" src="/gallery/logo2014_64.png" style="float:left;height:50px" height="50">
|
||||
|
||||
Fachschaft Elektrotechnik
|
||||
<hr>
|
||||
</div>
|
||||
<div id="menudiv" class="collapse navbar-collapse navbar-expand-sm">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li class="nav-item"><a class="nav-link" href="/home">Startseite</a>
|
||||
</li>
|
||||
<li class="nav-item"><a class="nav-link" href="/rubriken">Neuigkeiten</a></li>
|
||||
|
||||
<li><a href="/themengruppen">Information</a></li>
|
||||
<li><a href="/members">Mitarbeiter</a></li>
|
||||
<li><a href="/galleries">Fotos</a></li>
|
||||
<li><a href="/studien">Studien/Beispielsammlung</a></li>
|
||||
<li> <a href="/home/search">Suche</a></li>
|
||||
<li> <a href="/home/kontakt">Kontakt</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-10 offset-1">
|
||||
<nav class="breadcrumb" style="background-color: #FFF">
|
||||
{% for b in post.links.breadcrumbs %}
|
||||
<a href="{#url_for('page',name=b.path)#}{{b.url}}" class="breadcrumb-item">{{b.title}} </a> /
|
||||
{% endfor %}
|
||||
|
||||
</nav>
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
128
foto_gallery/templates/layoutfetbs3.html
Normal file
128
foto_gallery/templates/layoutfetbs3.html
Normal file
@@ -0,0 +1,128 @@
|
||||
{# -*-jinja2-*- #}
|
||||
<html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="https://www.fet.at/logo2014_64.png">
|
||||
|
||||
<link rel="alternate" hreflang="de" href="/de/home/search" />
|
||||
<link rel="alternate" hreflang="en" href="/en/home/search" />
|
||||
|
||||
<link rel="stylesheet" href="/galleries/blue2fetat.css" />
|
||||
<link rel="stylesheet" href="/galleries/css/blueimp-gallery.min.css" />
|
||||
|
||||
|
||||
|
||||
<script src="https://www.fet.at/assets/application-7cbec5b180d121b587cfe58e2d4517d1.js" type="text/javascript"></script>
|
||||
<title>Fetsite</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="maincontainer" class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1 header_span">
|
||||
<div class="header_wrap">
|
||||
<div class="header hidden-print">
|
||||
<a href="/home">
|
||||
<!-- <span class="feticon-fet_logo fa-4x color-1"> </span>-->
|
||||
<img alt="/galleries/Logo2014_64" height="50" src="/galleries/logo2014_64.png" style="float:left;height:50px" />
|
||||
</a> </div>
|
||||
<div class="header visible-print">
|
||||
<img alt="Logo2014_64" height="50" src="/galleries/logo2014_64.png" style="float:left;height:50px" />
|
||||
</div>
|
||||
<div class="visible-print">
|
||||
Fachschaft Elektrotechnik
|
||||
<hr/>
|
||||
</div>
|
||||
<div id="menudiv" style="margin-top:12px" class="hidden-print">
|
||||
<div class="navbar">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<!-- <a class="brand" href="#"></a>-->
|
||||
<a class ="btn btn-navbar" data-toggle="collapse" data-parent="#menudiv" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<div class="nav-collapse collapse">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li><a href="/home">Startseite</a>
|
||||
</li>
|
||||
<li><a href="/rubriken">Neuigkeiten</a></li>
|
||||
|
||||
<li><a href="/themengruppen">Information</a></li>
|
||||
<li><a href="/members">Mitarbeiter</a></li>
|
||||
<li><a href="/galleries">Fotos</a></li>
|
||||
<li><a href="/studien">Studien/Beispielsammlung</a></li>
|
||||
<li> <a href="/home/search">Suche</a></li>
|
||||
<li> <a href="/home/kontakt">Kontakt</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="nav nav-pills nav-stacked pull-right">
|
||||
<li>
|
||||
<!--<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" > <img alt="De" src="/flaggen/png/de.png" /> Deutsch<b class="caret"></b></a>-->
|
||||
<!-- Split button -->
|
||||
<div class="btn-group navbar-btn">
|
||||
<button type="button" class="btn btn-link dropdown-toggle" data-hover="dropdown" aria-expanded="false">
|
||||
<img alt="De" src="/flaggen/png/de.png" /> Deutsch
|
||||
</button>
|
||||
<button type="button" class="btn btn-link dropdown-toggle" data-hover="dropdown" data-toggle="dropdown" >
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="/de"><img alt="At" src="/flaggen/png/at.png" /> Deutsch</a> </li>
|
||||
|
||||
<li><a href="/en"><img alt="Gb" src="/flaggen/png/gb.png" /> English</a> </li>
|
||||
|
||||
</ul></div>
|
||||
</li><li>
|
||||
<a href="/users/auth/ldap"><i class="ficon ffi1-academic"></i>FET Login</a>
|
||||
</li></ul>
|
||||
|
||||
<!--<span class="pull-right"> <a href="/en"><img alt="Gb" src="/flaggen/png/gb.png" /> English</a>
|
||||
</span>-->
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$('.dropdown-toggle').click(function(e) {
|
||||
e.preventDefault();
|
||||
setTimeout($.proxy(function() {
|
||||
if ('ontouchstart' in document.documentElement) {
|
||||
$(this).siblings('.dropdown-backdrop').off().remove();
|
||||
}
|
||||
}, this), 0);
|
||||
});
|
||||
|
||||
</script>
|
||||
<div class="row-fluid">
|
||||
<div class="span10 offset1 header_span">
|
||||
<nav class="breadcrumb" style="background-color: #FFF">
|
||||
{% for b in post.links.breadcrumbs %}
|
||||
<a href="{#url_for('page',name=b.path)#}{{b.url}}" class="breadcrumb-item">{{b.title}} </a> /
|
||||
{% endfor %}
|
||||
|
||||
</nav>
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,5 +1,5 @@
|
||||
{# -*-jinja2-*- #}
|
||||
{% extends "layout.html" %}
|
||||
{% extends "layoutfetbs3.html" %}
|
||||
{% block content %}
|
||||
|
||||
<h1>{{post.title}}</h1>
|
||||
@@ -10,8 +10,8 @@
|
||||
<ul class="nav flex-column flex-sm-row " labeledby="up_head">
|
||||
{% for d in post.links.subindexpages %}
|
||||
<li class="nav-item">
|
||||
<a href="{{d.url}}" class="nav-link">
|
||||
<h6> {{d.title}} <small class="text-muted">{{d.desc}} </small> </h6>
|
||||
<a href="{{d.url}}" class="nav-link"> <img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail" />
|
||||
<h6> {{d.title}} ({{d.date}} <small class="text-muted">{{d.desc}} </small> </h6>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
@@ -27,7 +27,8 @@
|
||||
{% for d in post.links.subpages %}
|
||||
<li class="nav-item">
|
||||
<a href="{{d.url}}" class="nav-link text-info">
|
||||
<h6> {{d.title}} <small class="text-muted">{{d.desc}} </small>
|
||||
<h6> <img src="{{d.thumb_url}}" alt="{{d.title}}" class="img-thumbnail" />
|
||||
{{d.title}} <small class="text-muted">{{d.desc}} </small>
|
||||
</h6>
|
||||
</a>
|
||||
|
||||
|
||||
@@ -3,4 +3,5 @@ Frozen-Flask
|
||||
config
|
||||
uwsgi
|
||||
gevent
|
||||
Pillow
|
||||
git+https://github.com/andreassteph/flatpages_index.git
|
||||
|
||||
Reference in New Issue
Block a user