summaryrefslogtreecommitdiffstats
path: root/nikola/plugins/task/galleries.py
diff options
context:
space:
mode:
Diffstat (limited to 'nikola/plugins/task/galleries.py')
-rw-r--r--nikola/plugins/task/galleries.py58
1 files changed, 40 insertions, 18 deletions
diff --git a/nikola/plugins/task/galleries.py b/nikola/plugins/task/galleries.py
index d3f1db7..edfd33d 100644
--- a/nikola/plugins/task/galleries.py
+++ b/nikola/plugins/task/galleries.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright © 2012-2015 Roberto Alsina and others.
+# Copyright © 2012-2016 Roberto Alsina and others.
# Permission is hereby granted, free of charge, to any
# person obtaining a copy of this software and associated
@@ -33,7 +33,6 @@ import io
import json
import mimetypes
import os
-import sys
try:
from urlparse import urljoin
except ImportError:
@@ -86,6 +85,8 @@ class Galleries(Task, ImageProcessor):
'tzinfo': site.tzinfo,
'comments_in_galleries': site.config['COMMENTS_IN_GALLERIES'],
'generate_rss': site.config['GENERATE_RSS'],
+ 'preserve_exif_data': site.config['PRESERVE_EXIF_DATA'],
+ 'exif_whitelist': site.config['EXIF_WHITELIST'],
}
# Verify that no folder in GALLERY_FOLDERS appears twice
@@ -93,8 +94,8 @@ class Galleries(Task, ImageProcessor):
for source, dest in self.kw['gallery_folders'].items():
if source in appearing_paths or dest in appearing_paths:
problem = source if source in appearing_paths else dest
- utils.LOGGER.error("The gallery input or output folder '{0}' appears in more than one entry in GALLERY_FOLDERS, exiting.".format(problem))
- sys.exit(1)
+ utils.LOGGER.error("The gallery input or output folder '{0}' appears in more than one entry in GALLERY_FOLDERS, ignoring.".format(problem))
+ continue
appearing_paths.add(source)
appearing_paths.add(dest)
@@ -115,10 +116,11 @@ class Galleries(Task, ImageProcessor):
if len(candidates) == 1:
return candidates[0]
self.logger.error("Gallery name '{0}' is not unique! Possible output paths: {1}".format(name, candidates))
+ raise RuntimeError("Gallery name '{0}' is not unique! Possible output paths: {1}".format(name, candidates))
else:
self.logger.error("Unknown gallery '{0}'!".format(name))
self.logger.info("Known galleries: " + str(list(self.proper_gallery_links.keys())))
- sys.exit(1)
+ raise RuntimeError("Unknown gallery '{0}'!".format(name))
def gallery_path(self, name, lang):
"""Link to an image gallery's path.
@@ -173,6 +175,7 @@ class Galleries(Task, ImageProcessor):
for k, v in self.site.GLOBAL_CONTEXT['template_hooks'].items():
self.kw['||template_hooks|{0}||'.format(k)] = v._items
+ self.site.scan_posts()
yield self.group_task()
template_name = "gallery.tmpl"
@@ -194,13 +197,6 @@ class Galleries(Task, ImageProcessor):
# Create image list, filter exclusions
image_list = self.get_image_list(gallery)
- # Sort as needed
- # Sort by date
- if self.kw['sort_by_date']:
- image_list.sort(key=lambda a: self.image_date(a))
- else: # Sort by name
- image_list.sort()
-
# Create thumbnails and large images in destination
for image in image_list:
for task in self.create_target_images(image, input_folder):
@@ -211,8 +207,6 @@ class Galleries(Task, ImageProcessor):
for task in self.remove_excluded_image(image, input_folder):
yield task
- crumbs = utils.get_crumbs(gallery, index_folder=self)
-
for lang in self.kw['translations']:
# save navigation links as dependencies
self.kw['navigation_links|{0}'.format(lang)] = self.kw['global_context']['navigation_links'](lang)
@@ -242,7 +236,7 @@ class Galleries(Task, ImageProcessor):
img_titles = []
for fn in image_name_list:
name_without_ext = os.path.splitext(os.path.basename(fn))[0]
- img_titles.append(utils.unslugify(name_without_ext))
+ img_titles.append(utils.unslugify(name_without_ext, lang))
else:
img_titles = [''] * len(image_name_list)
@@ -266,7 +260,7 @@ class Galleries(Task, ImageProcessor):
context["folders"] = natsort.natsorted(
folders, alg=natsort.ns.F | natsort.ns.IC)
- context["crumbs"] = crumbs
+ context["crumbs"] = utils.get_crumbs(gallery, index_folder=self, lang=lang)
context["permalink"] = self.site.link("gallery", gallery, lang)
context["enable_comments"] = self.kw['comments_in_galleries']
context["thumbnail_size"] = self.kw["thumbnail_size"]
@@ -423,6 +417,8 @@ class Galleries(Task, ImageProcessor):
# may break)
if post.title == 'index':
post.title = os.path.split(gallery)[1]
+ # Register the post (via #2417)
+ self.site.post_per_input_file[index_path] = post
else:
post = None
return post
@@ -482,7 +478,8 @@ class Galleries(Task, ImageProcessor):
'targets': [thumb_path],
'actions': [
(self.resize_image,
- (img, thumb_path, self.kw['thumbnail_size']))
+ (img, thumb_path, self.kw['thumbnail_size'], False, self.kw['preserve_exif_data'],
+ self.kw['exif_whitelist']))
],
'clean': True,
'uptodate': [utils.config_changed({
@@ -497,7 +494,8 @@ class Galleries(Task, ImageProcessor):
'targets': [orig_dest_path],
'actions': [
(self.resize_image,
- (img, orig_dest_path, self.kw['max_image_size']))
+ (img, orig_dest_path, self.kw['max_image_size'], False, self.kw['preserve_exif_data'],
+ self.kw['exif_whitelist']))
],
'clean': True,
'uptodate': [utils.config_changed({
@@ -558,6 +556,18 @@ class Galleries(Task, ImageProcessor):
url = '/'.join(os.path.relpath(p, os.path.dirname(output_name) + os.sep).split(os.sep))
return url
+ all_data = list(zip(img_list, thumbs, img_titles))
+
+ if self.kw['sort_by_date']:
+ all_data.sort(key=lambda a: self.image_date(a[0]))
+ else: # Sort by name
+ all_data.sort(key=lambda a: a[0])
+
+ if all_data:
+ img_list, thumbs, img_titles = zip(*all_data)
+ else:
+ img_list, thumbs, img_titles = [], [], []
+
photo_array = []
for img, thumb, title in zip(img_list, thumbs, img_titles):
w, h = _image_size_cache.get(thumb, (None, None))
@@ -591,6 +601,18 @@ class Galleries(Task, ImageProcessor):
def make_url(url):
return urljoin(self.site.config['BASE_URL'], url.lstrip('/'))
+ all_data = list(zip(img_list, dest_img_list, img_titles))
+
+ if self.kw['sort_by_date']:
+ all_data.sort(key=lambda a: self.image_date(a[0]))
+ else: # Sort by name
+ all_data.sort(key=lambda a: a[0])
+
+ if all_data:
+ img_list, dest_img_list, img_titles = zip(*all_data)
+ else:
+ img_list, dest_img_list, img_titles = [], [], []
+
items = []
for img, srcimg, title in list(zip(dest_img_list, img_list, img_titles))[:self.kw["feed_length"]]:
img_size = os.stat(