add basic theme support

This commit is contained in:
Simon
2011-05-01 23:55:57 +02:00
parent 7d07eb50df
commit 4d5ffa835b
5 changed files with 142 additions and 0 deletions

View File

@@ -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)

View File

@@ -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
View 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()

View File

@@ -0,0 +1,3 @@
#images li {
display: inline;
}

56
themes/default/index.html Normal file
View 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>