Albums
+-
+ {% for album in albums %}
+
- {{ album.name }} + {% endfor %} +
Images
+-
+ {% for image in images %}
+
-
+
diff --git a/runtests.py b/runtests.py index a2f428c..b284e99 100755 --- a/runtests.py +++ b/runtests.py @@ -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) diff --git a/sigal.py b/sigal.py index 8967bbf..8d65beb 100755 --- a/sigal.py +++ b/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 diff --git a/sigal/theme.py b/sigal/theme.py new file mode 100644 index 0000000..6611dc5 --- /dev/null +++ b/sigal/theme.py @@ -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() diff --git a/themes/default/css/style.css b/themes/default/css/style.css new file mode 100644 index 0000000..e6639e3 --- /dev/null +++ b/themes/default/css/style.css @@ -0,0 +1,3 @@ +#images li { + display: inline; +} \ No newline at end of file diff --git a/themes/default/index.html b/themes/default/index.html new file mode 100644 index 0000000..7b49821 --- /dev/null +++ b/themes/default/index.html @@ -0,0 +1,56 @@ + + +
+ + + +