add basic theme support
This commit is contained in:
@@ -27,6 +27,7 @@ import os
|
||||
import sys
|
||||
from sigal.image import Gallery
|
||||
from sigal.params import read_params
|
||||
from sigal.theme import Theme
|
||||
|
||||
if __name__ == '__main__':
|
||||
print ":: Reading parameters ..."
|
||||
@@ -45,4 +46,6 @@ if __name__ == '__main__':
|
||||
# print "thumbnails : %s" % filelist[1]
|
||||
# print "big images : %s" % filelist[2]
|
||||
|
||||
r = Theme(params, "./output")
|
||||
r.render()
|
||||
sys.exit(0)
|
||||
|
||||
4
sigal.py
4
sigal.py
@@ -34,6 +34,7 @@ import sys
|
||||
from optparse import OptionParser
|
||||
from sigal.image import Gallery
|
||||
from sigal.params import read_params
|
||||
from sigal.theme import Theme
|
||||
|
||||
def main():
|
||||
"main program"
|
||||
@@ -72,6 +73,9 @@ def main():
|
||||
gallery = Gallery(params)
|
||||
gallery.build(input_dir, output_dir, force=options.force)
|
||||
|
||||
r = Theme(params, output_dir)
|
||||
r.render()
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
76
sigal/theme.py
Normal file
76
sigal/theme.py
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
"""render theme for sigal"""
|
||||
|
||||
import os
|
||||
from distutils.dir_util import copy_tree
|
||||
from jinja2 import Environment, PackageLoader
|
||||
import sigal.image
|
||||
|
||||
DEFAULT_THEME = "default"
|
||||
INDEX_PAGE = "index.html"
|
||||
|
||||
class Theme():
|
||||
""" Generate html """
|
||||
|
||||
def __init__(self, params, path, theme=DEFAULT_THEME, tpl=INDEX_PAGE):
|
||||
self.path = path
|
||||
self.bigimg = params.getint('sigal', 'big_img')
|
||||
self.bigimg_dir = params.get('sigal', 'bigimg_dir')
|
||||
self.thumb_dir = params.get('sigal', 'thumb_dir')
|
||||
self.thumb_prefix = params.get('sigal', 'thumb_prefix')
|
||||
self.fileExtList = params.get('sigal', 'fileExtList')
|
||||
|
||||
env = Environment(loader=PackageLoader('sigal',
|
||||
os.path.join('..', 'themes', theme)))
|
||||
self.theme_dir = os.path.join('themes', theme)
|
||||
self.template = env.get_template(tpl)
|
||||
|
||||
|
||||
def filelist(self):
|
||||
"get the list of directories with files of particular extensions"
|
||||
ignored_dir = [self.thumb_dir, self.bigimg_dir, 'css']
|
||||
|
||||
for dirpath, dirnames, filenames in os.walk(self.path):
|
||||
# filelist = [os.path.normcase(f) for f in os.listdir(dir)]
|
||||
if os.path.split(dirpath)[1] not in ignored_dir:
|
||||
imglist = [f for f in filenames \
|
||||
if os.path.splitext(f)[1] in self.fileExtList]
|
||||
dirlist = [d for d in dirnames if d not in ignored_dir]
|
||||
yield dirpath, dirlist, imglist
|
||||
|
||||
def render(self):
|
||||
|
||||
copy_tree(os.path.abspath(self.theme_dir),
|
||||
os.path.abspath(self.path))
|
||||
|
||||
# loop on directories
|
||||
for dirpath, dirnames, imglist in self.filelist():
|
||||
|
||||
theme = { 'path': os.path.relpath(self.path, dirpath) }
|
||||
|
||||
images = []
|
||||
for i in imglist:
|
||||
image = {
|
||||
'file': i,
|
||||
'thumb': os.path.join(self.thumb_dir, self.thumb_prefix+i)
|
||||
}
|
||||
images.append(image)
|
||||
# print image
|
||||
|
||||
albums = []
|
||||
for d in dirnames:
|
||||
album = {'path': d+"/"+INDEX_PAGE,
|
||||
'name': d
|
||||
}
|
||||
albums.append(album)
|
||||
# print album
|
||||
|
||||
page = self.template.render(title=dirpath, images=images,
|
||||
albums=albums, theme=theme)
|
||||
|
||||
# save
|
||||
f = open(dirpath+"/"+INDEX_PAGE,"w")
|
||||
f.write(page)
|
||||
f.close()
|
||||
3
themes/default/css/style.css
Normal file
3
themes/default/css/style.css
Normal file
@@ -0,0 +1,3 @@
|
||||
#images li {
|
||||
display: inline;
|
||||
}
|
||||
56
themes/default/index.html
Normal file
56
themes/default/index.html
Normal file
@@ -0,0 +1,56 @@
|
||||
<!doctype html>
|
||||
<html lang="en" class="no-js">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
|
||||
<title>{{ title }}</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link rel="shortcut icon" href="/favicon.ico">
|
||||
<link rel="stylesheet" href="{{ theme.path }}/css/style.css?v=2">
|
||||
<!-- <link rel="stylesheet" media="handheld" href="css/handheld.css?v=2"> -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<header>
|
||||
</header>
|
||||
|
||||
<div id="main" role="main">
|
||||
{% if albums %}
|
||||
<h1>Albums</h1>
|
||||
<ul id="albums">
|
||||
{% for album in albums %}
|
||||
<li><a href="{{ album.path }}">{{ album.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if images %}
|
||||
<h1>Images</h1>
|
||||
<ul id="images">
|
||||
{% for image in images %}
|
||||
<li><a href="{{ image.file }}">
|
||||
<img src="{{ image.thumb }}" alt="{{ image.file }}" /></a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> -->
|
||||
<!-- <script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.5.1.min.js"%3E%3C/script%3E'))</script> -->
|
||||
<!-- <script src="js/plugins.js"></script> -->
|
||||
<!-- <script src="js/script.js"></script> -->
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user