diff --git a/.gitignore b/.gitignore index 640382e..a9d47db 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.pyc *_flymake .coverage +.DS_Store .pytest_cache/ .ropeproject/ .tox/ @@ -13,4 +14,4 @@ dist/ docs/_build htmlcov/ output/ -.DS_Store +tags diff --git a/setup.cfg b/setup.cfg index fa6e018..3c16108 100644 --- a/setup.cfg +++ b/setup.cfg @@ -6,3 +6,6 @@ ignore = .coveragerc tests readthedocs.yml + +[flake8] +ignore = E731 diff --git a/sigal/gallery.py b/sigal/gallery.py index 58ccec4..7563ec8 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -60,6 +60,7 @@ class Media: - ``filename``: Filename of the resized image. - ``thumbnail``: Location of the corresponding thumbnail image. - ``big``: If not None, location of the unmodified image. + - ``big_url``: If not None, url of the unmodified image. - ``exif``: If not None contains a dict with the most common tags. For more information, see :ref:`simple-exif-data`. - ``raw_exif``: If not ``None``, it contains the raw EXIF tags. @@ -69,7 +70,7 @@ class Media: type = '' def __init__(self, filename, path, settings): - self.src_filename = self.filename = self.url = filename + self.src_filename = self.filename = filename self.path = path self.settings = settings self.ext = os.path.splitext(filename)[1].lower() @@ -82,6 +83,9 @@ class Media: self.logger = logging.getLogger(__name__) self._get_metadata() + # default: title is the filename + if not self.title: + self.title = self.filename signals.media_initialized.send(self) def __repr__(self): @@ -90,6 +94,11 @@ class Media: def __str__(self): return join(self.path, self.filename) + @property + def url(self): + """URL of the media.""" + return url_from_path(self.filename) + @property def big(self): """Path to the original image, if ``keep_orig`` is set (relative to the @@ -104,9 +113,14 @@ class Media: check_or_create_dir(orig_path) big_path = join(orig_path, self.src_filename) if not isfile(big_path): - copy(self.src_path, big_path, - symlink=s['orig_link']) - return url_from_path(join(s['orig_dir'], self.src_filename)) + copy(self.src_path, big_path, symlink=s['orig_link']) + return join(s['orig_dir'], self.src_filename) + + @property + def big_url(self): + """URL of the original media.""" + if self.big is not None: + return url_from_path(self.big) @property def thumbnail(self): @@ -219,7 +233,7 @@ class Video(Media): if not settings['use_orig'] or not is_valid_html5_video(ext): video_format = settings['video_format'] ext = '.' + video_format - self.filename = self.url = base + ext + self.filename = base + ext self.mime = get_mime(ext) self.dst_path = join(settings['destination'], path, base + ext) else: @@ -409,16 +423,16 @@ class Album: if self._thumbnail: # stop if it is already set - return url_from_path(self._thumbnail) + return self._thumbnail # Test the thumbnail from the Markdown file. thumbnail = self.meta.get('thumbnail', [''])[0] if thumbnail and isfile(join(self.src_path, thumbnail)): - self._thumbnail = join(self.name, get_thumb(self.settings, - thumbnail)) + self._thumbnail = url_from_path(join( + self.name, get_thumb(self.settings, thumbnail))) self.logger.debug("Thumbnail for %r : %s", self, self._thumbnail) - return url_from_path(self._thumbnail) + return self._thumbnail else: # find and return the first landscape image for f in self.medias: @@ -431,17 +445,19 @@ class Album: size = get_size(f.src_path) if size['width'] > size['height']: - self._thumbnail = join(self.name, f.thumbnail) + self._thumbnail = (url_quote(self.name) + '/' + + f.thumbnail) self.logger.debug( - "Use 1st landscape image as thumbnail for %r :" - " %s", self, self._thumbnail) - return url_from_path(self._thumbnail) + "Use 1st landscape image as thumbnail for %r : %s", + self, self._thumbnail) + return self._thumbnail # else simply return the 1st media file if not self._thumbnail and self.medias: for media in self.medias: if media.thumbnail is not None: - self._thumbnail = join(self.name, media.thumbnail) + self._thumbnail = (url_quote(self.name) + '/' + + media.thumbnail) break else: self.logger.warning("No thumbnail found for %r", self) @@ -449,17 +465,18 @@ class Album: self.logger.debug("Use the 1st image as thumbnail for %r : %s", self, self._thumbnail) - return url_from_path(self._thumbnail) + return self._thumbnail # use the thumbnail of their sub-directories if not self._thumbnail: for path, album in self.gallery.get_albums(self.path): if album.thumbnail: - self._thumbnail = join(self.name, album.thumbnail) + self._thumbnail = (url_quote(self.name) + '/' + + album.thumbnail) self.logger.debug( "Using thumbnail from sub-directory for %r : %s", self, self._thumbnail) - return url_from_path(self._thumbnail) + return self._thumbnail self.logger.error('Thumbnail not found for %r', self) return None diff --git a/sigal/themes/colorbox/templates/album_list.html b/sigal/themes/colorbox/templates/album_list.html index 2ac5872..5415ac9 100644 --- a/sigal/themes/colorbox/templates/album_list.html +++ b/sigal/themes/colorbox/templates/album_list.html @@ -35,7 +35,7 @@ {% if album.medias %} {% macro img_description(media) -%} - {% if media.big %} data-big="{{ media.big }}"{% endif %} + {% if media.big %} data-big="{{ media.big_url }}"{% endif %} {% if media.exif %} {% if media.exif.datetime %} data-date=", {{ media.exif.datetime }}" @@ -48,39 +48,37 @@ {% if loop.index % nb_columns == 1 %}
{% endif%} - {% set media_title = media.title if media.title else media.filename %} {% if media.type == "image" %}
{% if 'sigal.plugins.media_page' in settings.plugins %} - + {% else %} - {% endif %} - {{ media.filename }} + {{ media.url }}
{% endif %} {% if media.type == "video" %} - {% set mhash = media.filename|replace('.', '')|replace(' ', '') %} + {% set mhash = media.url|replace('.', '')|replace(' ', '') %}
{% if 'sigal.plugins.media_page' in settings.plugins %} - - {{ media.filename }} + {% if media.big %} data-big="{{ media.big_url }}"{% endif %}> + {{ media.url }}
diff --git a/sigal/themes/colorbox/templates/media.html b/sigal/themes/colorbox/templates/media.html index 5fb4a46..6d57e12 100644 --- a/sigal/themes/colorbox/templates/media.html +++ b/sigal/themes/colorbox/templates/media.html @@ -1,13 +1,12 @@ {% extends "base.html" %} {% block content %} - {% set media_title = media.title if media.title else media.filename %}
{% if album.breadcrumb %}

{% for url, title in album.breadcrumb %} {{ title }} » {% endfor -%} - {{ media_title }} + {{ media.title }}


{% endif %} @@ -16,20 +15,20 @@ {% if media %}
{% if media.type == "image" %} - {{ media_title }} + {{ media.title }} {% endif %} {% if media.type == "video" %} {% endif %}

{% if previous_media %} - « previous + « previous {% endif %} {% if next_media %} - next » + next » {% endif %}

diff --git a/sigal/themes/galleria/templates/album.html b/sigal/themes/galleria/templates/album.html index bd8f320..001b3a2 100644 --- a/sigal/themes/galleria/templates/album.html +++ b/sigal/themes/galleria/templates/album.html @@ -7,7 +7,7 @@ {% endif %} @@ -47,7 +47,7 @@ {% block late_js %} {% macro img_description(media) -%} - {%- if media.big -%}Full size{%- endif -%} + {%- if media.big -%}Full size{%- endif -%} {# clean up tags and whitespace, including newlines, in the description #} {%- if media.description -%}
{{ media.description | striptags }}{%- endif -%} {%- if media.exif -%} @@ -81,18 +81,18 @@ var data = [ {% for media in album.medias -%} { - title: "{{ media.title if media.title else media.filename }}", + title: "{{ media.title }}", description: "{{ img_description(media) | e }}", thumb: "{{ media.thumbnail }}", {% if media.big %} - big: "{{ media.big }}", + big: "{{ media.big_url }}", {% endif %} {% if media.type == "image" %} - image: "{{ media.filename }}" + image: "{{ media.url }}" {% endif %} {% if media.type == "video" %} image: "{{ theme.url }}/img/empty.png", - layer: "" + layer: "" {% endif %} }, {% endfor %} diff --git a/sigal/themes/photoswipe/templates/album_list.html b/sigal/themes/photoswipe/templates/album_list.html index d2bfc23..f0f79b2 100644 --- a/sigal/themes/photoswipe/templates/album_list.html +++ b/sigal/themes/photoswipe/templates/album_list.html @@ -67,27 +67,26 @@ {% if album.medias %}