mirror of https://github.com/saimn/sigal.git
Browse Source
- New optional parameter added to `Writer.__init__` to specify the template file - modified version of colorbox theme created that supports generating media pages and linking to them (if javascript is not supported) - `media_page` plugin created that responds to the `gallery_build` signal, and generates pages for each media element based on the media.html template, including links to the next and previous image (if applicable)pull/124/head
15 changed files with 1084 additions and 1 deletions
@ -0,0 +1,92 @@
|
||||
# -*- coding: utf-8 -*- |
||||
|
||||
# Copyright (c) 2009-2014 - Simon Conseil |
||||
# Copyright (c) 2013 - Christophe-Marie Duquesne |
||||
# Copyright (c) 2014 - Jamie Starke |
||||
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
# of this software and associated documentation files (the "Software"), to |
||||
# deal in the Software without restriction, including without limitation the |
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
||||
# sell copies of the Software, and to permit persons to whom the Software is |
||||
# furnished to do so, subject to the following conditions: |
||||
|
||||
# The above copyright notice and this permission notice shall be included in |
||||
# all copies or substantial portions of the Software. |
||||
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
||||
# IN THE SOFTWARE. |
||||
|
||||
import os |
||||
|
||||
"""Plugin which generates pages for each image. |
||||
""" |
||||
|
||||
import logging |
||||
from sigal import signals |
||||
from sigal.writer import Writer |
||||
|
||||
import codecs |
||||
from sigal.utils import check_or_create_dir |
||||
from sigal.utils import url_from_path |
||||
from sigal.pkgmeta import __url__ as sigal_link |
||||
|
||||
logger = logging.getLogger(__name__) |
||||
|
||||
class PageWriter(Writer): |
||||
'''A writer for writing media pages, based on writer''' |
||||
def __init__(self, settings, index_title=""): |
||||
super(PageWriter, self).__init__( |
||||
settings, index_title=index_title, template_file="media.html") |
||||
|
||||
def write(self, album, media_group): |
||||
''' Generate the media page and save it ''' |
||||
|
||||
file_path = os.path.join(album.dst_path, media_group[0].filename) |
||||
|
||||
page = self.template.render({ |
||||
'album': album, |
||||
'media': media_group[0], |
||||
'previous_media': media_group[-1], |
||||
'next_media': media_group[1], |
||||
'index_title': self.index_title, |
||||
'settings': self.settings, |
||||
'sigal_link': sigal_link, |
||||
'theme': {'name': os.path.basename(self.theme), |
||||
'url': url_from_path(os.path.relpath(self.theme_path, |
||||
file_path))}, |
||||
}) |
||||
|
||||
output_file = "%s.html" % file_path |
||||
|
||||
with codecs.open(output_file, 'w', 'utf-8') as f: |
||||
f.write(page) |
||||
|
||||
def generate_media_pages(gallery): |
||||
'''Generates and writes the media pages for all media in the gallery''' |
||||
|
||||
writer = PageWriter(gallery.settings,index_title=gallery.title) |
||||
|
||||
for album in gallery.albums.values(): |
||||
|
||||
medias = album.medias |
||||
next_medias = medias[1:] + [None] |
||||
previous_medias = [None] + medias[:-1] |
||||
|
||||
# The media group allows us to easily get next and previous links |
||||
media_groups = zip(medias, next_medias, previous_medias) |
||||
|
||||
for media_group in media_groups: |
||||
writer.write(album,media_group) |
||||
|
||||
filenames = [os.path.join(album.dst_path, media.filename) |
||||
for album in gallery.albums.values() |
||||
for media in album.medias] |
||||
|
||||
def register(settings): |
||||
signals.gallery_build.connect(generate_media_pages) |
||||
@ -0,0 +1,269 @@
|
||||
/* |
||||
* Skeleton V1.2 |
||||
* Copyright 2011, Dave Gamache |
||||
* www.getskeleton.com |
||||
* Free to use under the MIT license. |
||||
* http://www.opensource.org/licenses/mit-license.php |
||||
* 6/20/2012 |
||||
*/ |
||||
|
||||
|
||||
/* Table of Content |
||||
================================================== |
||||
#Reset & Basics |
||||
#Basic Styles |
||||
#Site Styles |
||||
#Typography |
||||
#Links |
||||
#Lists |
||||
#Images |
||||
#Buttons |
||||
#Forms |
||||
#Misc */ |
||||
|
||||
|
||||
/* #Reset & Basics (Inspired by E. Meyers) |
||||
================================================== */ |
||||
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { |
||||
margin: 0; |
||||
padding: 0; |
||||
border: 0; |
||||
font-size: 100%; |
||||
font: inherit; |
||||
vertical-align: baseline; } |
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { |
||||
display: block; } |
||||
body { |
||||
line-height: 1; } |
||||
ol, ul { |
||||
list-style: none; } |
||||
blockquote, q { |
||||
quotes: none; } |
||||
blockquote:before, blockquote:after, |
||||
q:before, q:after { |
||||
content: ''; |
||||
content: none; } |
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; } |
||||
|
||||
|
||||
/* #Basic Styles |
||||
================================================== */ |
||||
body { |
||||
background: #fff; |
||||
font: 14px/21px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; |
||||
color: #444; |
||||
-webkit-font-smoothing: antialiased; /* Fix for webkit rendering */ |
||||
-webkit-text-size-adjust: 100%; |
||||
} |
||||
|
||||
|
||||
/* #Typography |
||||
================================================== */ |
||||
h1, h2, h3, h4, h5, h6 { |
||||
color: #181818; |
||||
font-family: "Georgia", "Times New Roman", serif; |
||||
font-weight: normal; } |
||||
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } |
||||
h1 { font-size: 46px; line-height: 50px; margin-bottom: 14px;} |
||||
h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; } |
||||
h3 { font-size: 28px; line-height: 34px; margin-bottom: 8px; } |
||||
h4 { font-size: 21px; line-height: 30px; margin-bottom: 4px; } |
||||
h5 { font-size: 17px; line-height: 24px; } |
||||
h6 { font-size: 14px; line-height: 21px; } |
||||
.subheader { color: #777; } |
||||
|
||||
p { margin: 0 0 20px 0; } |
||||
p img { margin: 0; } |
||||
p.lead { font-size: 21px; line-height: 27px; color: #777; } |
||||
|
||||
em { font-style: italic; } |
||||
strong { font-weight: bold; color: #333; } |
||||
small { font-size: 80%; } |
||||
|
||||
/* Blockquotes */ |
||||
blockquote, blockquote p { font-size: 17px; line-height: 24px; color: #777; font-style: italic; } |
||||
blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; } |
||||
blockquote cite { display: block; font-size: 12px; color: #555; } |
||||
blockquote cite:before { content: "\2014 \0020"; } |
||||
blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; } |
||||
|
||||
hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; } |
||||
|
||||
|
||||
/* #Links |
||||
================================================== */ |
||||
a, a:visited { color: #333; text-decoration: underline; outline: 0; } |
||||
a:hover, a:focus { color: #000; } |
||||
p a, p a:visited { line-height: inherit; } |
||||
|
||||
|
||||
/* #Lists |
||||
================================================== */ |
||||
ul, ol { margin-bottom: 20px; } |
||||
ul { list-style: none outside; } |
||||
ol { list-style: decimal; } |
||||
ol, ul.square, ul.circle, ul.disc { margin-left: 30px; } |
||||
ul.square { list-style: square outside; } |
||||
ul.circle { list-style: circle outside; } |
||||
ul.disc { list-style: disc outside; } |
||||
ul ul, ul ol, |
||||
ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; } |
||||
ul ul li, ul ol li, |
||||
ol ol li, ol ul li { margin-bottom: 6px; } |
||||
li { line-height: 18px; margin-bottom: 12px; } |
||||
ul.large li { line-height: 21px; } |
||||
li p { line-height: 21px; } |
||||
|
||||
/* #Images |
||||
================================================== */ |
||||
|
||||
img.scale-with-grid { |
||||
max-width: 100%; |
||||
height: auto; } |
||||
|
||||
|
||||
/* #Buttons |
||||
================================================== */ |
||||
|
||||
.button, |
||||
button, |
||||
input[type="submit"], |
||||
input[type="reset"], |
||||
input[type="button"] { |
||||
background: #eee; /* Old browsers */ |
||||
background: #eee -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */ |
||||
background: #eee -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */ |
||||
background: #eee -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */ |
||||
background: #eee -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */ |
||||
background: #eee -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */ |
||||
background: #eee linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */ |
||||
border: 1px solid #aaa; |
||||
border-top: 1px solid #ccc; |
||||
border-left: 1px solid #ccc; |
||||
-moz-border-radius: 3px; |
||||
-webkit-border-radius: 3px; |
||||
border-radius: 3px; |
||||
color: #444; |
||||
display: inline-block; |
||||
font-size: 11px; |
||||
font-weight: bold; |
||||
text-decoration: none; |
||||
text-shadow: 0 1px rgba(255, 255, 255, .75); |
||||
cursor: pointer; |
||||
margin-bottom: 20px; |
||||
line-height: normal; |
||||
padding: 8px 10px; |
||||
font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; } |
||||
|
||||
.button:hover, |
||||
button:hover, |
||||
input[type="submit"]:hover, |
||||
input[type="reset"]:hover, |
||||
input[type="button"]:hover { |
||||
color: #222; |
||||
background: #ddd; /* Old browsers */ |
||||
background: #ddd -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */ |
||||
background: #ddd -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */ |
||||
background: #ddd -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */ |
||||
background: #ddd -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */ |
||||
background: #ddd -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */ |
||||
background: #ddd linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */ |
||||
border: 1px solid #888; |
||||
border-top: 1px solid #aaa; |
||||
border-left: 1px solid #aaa; } |
||||
|
||||
.button:active, |
||||
button:active, |
||||
input[type="submit"]:active, |
||||
input[type="reset"]:active, |
||||
input[type="button"]:active { |
||||
border: 1px solid #666; |
||||
background: #ccc; /* Old browsers */ |
||||
background: #ccc -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */ |
||||
background: #ccc -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */ |
||||
background: #ccc -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */ |
||||
background: #ccc -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */ |
||||
background: #ccc -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */ |
||||
background: #ccc linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ } |
||||
|
||||
.button.full-width, |
||||
button.full-width, |
||||
input[type="submit"].full-width, |
||||
input[type="reset"].full-width, |
||||
input[type="button"].full-width { |
||||
width: 100%; |
||||
padding-left: 0 !important; |
||||
padding-right: 0 !important; |
||||
text-align: center; } |
||||
|
||||
/* Fix for odd Mozilla border & padding issues */ |
||||
button::-moz-focus-inner, |
||||
input::-moz-focus-inner { |
||||
border: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
|
||||
/* #Forms |
||||
================================================== */ |
||||
|
||||
form { |
||||
margin-bottom: 20px; } |
||||
fieldset { |
||||
margin-bottom: 20px; } |
||||
input[type="text"], |
||||
input[type="password"], |
||||
input[type="email"], |
||||
textarea, |
||||
select { |
||||
border: 1px solid #ccc; |
||||
padding: 6px 4px; |
||||
outline: none; |
||||
-moz-border-radius: 2px; |
||||
-webkit-border-radius: 2px; |
||||
border-radius: 2px; |
||||
font: 13px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; |
||||
color: #777; |
||||
margin: 0; |
||||
width: 210px; |
||||
max-width: 100%; |
||||
display: block; |
||||
margin-bottom: 20px; |
||||
background: #fff; } |
||||
select { |
||||
padding: 0; } |
||||
input[type="text"]:focus, |
||||
input[type="password"]:focus, |
||||
input[type="email"]:focus, |
||||
textarea:focus { |
||||
border: 1px solid #aaa; |
||||
color: #444; |
||||
-moz-box-shadow: 0 0 3px rgba(0,0,0,.2); |
||||
-webkit-box-shadow: 0 0 3px rgba(0,0,0,.2); |
||||
box-shadow: 0 0 3px rgba(0,0,0,.2); } |
||||
textarea { |
||||
min-height: 60px; } |
||||
label, |
||||
legend { |
||||
display: block; |
||||
font-weight: bold; |
||||
font-size: 13px; } |
||||
select { |
||||
width: 220px; } |
||||
input[type="checkbox"] { |
||||
display: inline; } |
||||
label span, |
||||
legend span { |
||||
font-weight: normal; |
||||
font-size: 13px; |
||||
color: #444; } |
||||
|
||||
/* #Misc |
||||
================================================== */ |
||||
.remove-bottom { margin-bottom: 0 !important; } |
||||
.half-bottom { margin-bottom: 10px !important; } |
||||
.add-bottom { margin-bottom: 20px !important; } |
||||
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
/* |
||||
Colorbox Core Style: |
||||
The following CSS is consistent between example themes and should not be altered. |
||||
*/ |
||||
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} |
||||
#cboxWrapper {max-width:none;} |
||||
#cboxOverlay{position:fixed; width:100%; height:100%;} |
||||
#cboxMiddleLeft, #cboxBottomLeft{clear:left;} |
||||
#cboxContent{position:relative;} |
||||
#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} |
||||
#cboxTitle{margin:0;} |
||||
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} |
||||
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} |
||||
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} |
||||
.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} |
||||
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} |
||||
|
||||
/* |
||||
User Style: |
||||
Change the following styles to modify the appearance of Colorbox. They are |
||||
ordered & tabbed in a way that represents the nesting of the generated HTML. |
||||
*/ |
||||
#cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);} |
||||
#colorbox{outline:0;} |
||||
#cboxContent{margin-top:20px;background:#000;} |
||||
.cboxIframe{background:#fff;} |
||||
#cboxError{padding:50px; border:1px solid #ccc;} |
||||
#cboxLoadedContent{border:5px solid #000; background:#fff;} |
||||
#cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;} |
||||
#cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;} |
||||
#cboxLoadingGraphic{background:url(../images/loading.gif) no-repeat center center;} |
||||
|
||||
/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ |
||||
#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } |
||||
|
||||
/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ |
||||
#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} |
||||
|
||||
#cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;} |
||||
#cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(../images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;} |
||||
#cboxPrevious:hover{background-position:bottom left;} |
||||
#cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(../images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;} |
||||
#cboxNext:hover{background-position:bottom right;} |
||||
#cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(../images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;} |
||||
#cboxClose:hover{background-position:bottom center;} |
||||
@ -0,0 +1,58 @@
|
||||
/* |
||||
* Skeleton V1.2 |
||||
* Copyright 2011, Dave Gamache |
||||
* www.getskeleton.com |
||||
* Free to use under the MIT license. |
||||
* http://www.opensource.org/licenses/mit-license.php |
||||
* 6/20/2012 |
||||
*/ |
||||
|
||||
/* Table of Content |
||||
================================================== |
||||
#Site Styles |
||||
#Page Styles |
||||
#Media Queries |
||||
#Font-Face */ |
||||
|
||||
/* #Site Styles |
||||
================================================== */ |
||||
|
||||
/* #Page Styles |
||||
================================================== */ |
||||
|
||||
/* #Media Queries |
||||
================================================== */ |
||||
|
||||
/* Smaller than standard 960 (devices and browsers) */ |
||||
@media only screen and (max-width: 959px) {} |
||||
|
||||
/* Tablet Portrait size to standard 960 (devices and browsers) */ |
||||
@media only screen and (min-width: 768px) and (max-width: 959px) {} |
||||
|
||||
/* All Mobile Sizes (devices and browser) */ |
||||
@media only screen and (max-width: 767px) {} |
||||
|
||||
/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ |
||||
@media only screen and (min-width: 480px) and (max-width: 767px) {} |
||||
|
||||
/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ |
||||
@media only screen and (max-width: 479px) {} |
||||
|
||||
|
||||
/* #Font-Face |
||||
================================================== */ |
||||
/* This is the proper syntax for an @font-face file |
||||
Just create a "fonts" folder at the root, |
||||
copy your FontName into code below and remove |
||||
comment brackets */ |
||||
|
||||
/* @font-face { |
||||
font-family: 'FontName'; |
||||
src: url('../fonts/FontName.eot'); |
||||
src: url('../fonts/FontName.eot?iefix') format('eot'), |
||||
url('../fonts/FontName.woff') format('woff'), |
||||
url('../fonts/FontName.ttf') format('truetype'), |
||||
url('../fonts/FontName.svg#webfontZam02nTh') format('svg'); |
||||
font-weight: normal; |
||||
font-style: normal; } |
||||
*/ |
||||
@ -0,0 +1,242 @@
|
||||
/* |
||||
* Skeleton V1.2 |
||||
* Copyright 2011, Dave Gamache |
||||
* www.getskeleton.com |
||||
* Free to use under the MIT license. |
||||
* http://www.opensource.org/licenses/mit-license.php |
||||
* 6/20/2012 |
||||
*/ |
||||
|
||||
|
||||
/* Table of Contents |
||||
================================================== |
||||
#Base 960 Grid |
||||
#Tablet (Portrait) |
||||
#Mobile (Portrait) |
||||
#Mobile (Landscape) |
||||
#Clearing */ |
||||
|
||||
|
||||
|
||||
/* #Base 960 Grid |
||||
================================================== */ |
||||
|
||||
.container { position: relative; width: 960px; margin: 0 auto; padding: 0; } |
||||
.container .column, |
||||
.container .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; } |
||||
.row { margin-bottom: 20px; } |
||||
|
||||
/* Nested Column Classes */ |
||||
.column.alpha, .columns.alpha { margin-left: 0; } |
||||
.column.omega, .columns.omega { margin-right: 0; } |
||||
|
||||
/* Base Grid */ |
||||
.container .one.column, |
||||
.container .one.columns { width: 40px; } |
||||
.container .two.columns { width: 100px; } |
||||
.container .three.columns { width: 160px; } |
||||
.container .four.columns { width: 220px; } |
||||
.container .five.columns { width: 280px; } |
||||
.container .six.columns { width: 340px; } |
||||
.container .seven.columns { width: 400px; } |
||||
.container .eight.columns { width: 460px; } |
||||
.container .nine.columns { width: 520px; } |
||||
.container .ten.columns { width: 580px; } |
||||
.container .eleven.columns { width: 640px; } |
||||
.container .twelve.columns { width: 700px; } |
||||
.container .thirteen.columns { width: 760px; } |
||||
.container .fourteen.columns { width: 820px; } |
||||
.container .fifteen.columns { width: 880px; } |
||||
.container .sixteen.columns { width: 940px; } |
||||
|
||||
.container .one-third.column { width: 300px; } |
||||
.container .two-thirds.column { width: 620px; } |
||||
|
||||
/* Offsets */ |
||||
.container .offset-by-one { padding-left: 60px; } |
||||
.container .offset-by-two { padding-left: 120px; } |
||||
.container .offset-by-three { padding-left: 180px; } |
||||
.container .offset-by-four { padding-left: 240px; } |
||||
.container .offset-by-five { padding-left: 300px; } |
||||
.container .offset-by-six { padding-left: 360px; } |
||||
.container .offset-by-seven { padding-left: 420px; } |
||||
.container .offset-by-eight { padding-left: 480px; } |
||||
.container .offset-by-nine { padding-left: 540px; } |
||||
.container .offset-by-ten { padding-left: 600px; } |
||||
.container .offset-by-eleven { padding-left: 660px; } |
||||
.container .offset-by-twelve { padding-left: 720px; } |
||||
.container .offset-by-thirteen { padding-left: 780px; } |
||||
.container .offset-by-fourteen { padding-left: 840px; } |
||||
.container .offset-by-fifteen { padding-left: 900px; } |
||||
|
||||
|
||||
|
||||
/* #Tablet (Portrait) |
||||
================================================== */ |
||||
|
||||
/* Note: Design for a width of 768px */ |
||||
|
||||
@media only screen and (min-width: 768px) and (max-width: 959px) { |
||||
.container { width: 768px; } |
||||
.container .column, |
||||
.container .columns { margin-left: 10px; margin-right: 10px; } |
||||
.column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; } |
||||
.column.omega, .columns.omega { margin-right: 0; margin-left: 10px; } |
||||
.alpha.omega { margin-left: 0; margin-right: 0; } |
||||
|
||||
.container .one.column, |
||||
.container .one.columns { width: 28px; } |
||||
.container .two.columns { width: 76px; } |
||||
.container .three.columns { width: 124px; } |
||||
.container .four.columns { width: 172px; } |
||||
.container .five.columns { width: 220px; } |
||||
.container .six.columns { width: 268px; } |
||||
.container .seven.columns { width: 316px; } |
||||
.container .eight.columns { width: 364px; } |
||||
.container .nine.columns { width: 412px; } |
||||
.container .ten.columns { width: 460px; } |
||||
.container .eleven.columns { width: 508px; } |
||||
.container .twelve.columns { width: 556px; } |
||||
.container .thirteen.columns { width: 604px; } |
||||
.container .fourteen.columns { width: 652px; } |
||||
.container .fifteen.columns { width: 700px; } |
||||
.container .sixteen.columns { width: 748px; } |
||||
|
||||
.container .one-third.column { width: 236px; } |
||||
.container .two-thirds.column { width: 492px; } |
||||
|
||||
/* Offsets */ |
||||
.container .offset-by-one { padding-left: 48px; } |
||||
.container .offset-by-two { padding-left: 96px; } |
||||
.container .offset-by-three { padding-left: 144px; } |
||||
.container .offset-by-four { padding-left: 192px; } |
||||
.container .offset-by-five { padding-left: 240px; } |
||||
.container .offset-by-six { padding-left: 288px; } |
||||
.container .offset-by-seven { padding-left: 336px; } |
||||
.container .offset-by-eight { padding-left: 384px; } |
||||
.container .offset-by-nine { padding-left: 432px; } |
||||
.container .offset-by-ten { padding-left: 480px; } |
||||
.container .offset-by-eleven { padding-left: 528px; } |
||||
.container .offset-by-twelve { padding-left: 576px; } |
||||
.container .offset-by-thirteen { padding-left: 624px; } |
||||
.container .offset-by-fourteen { padding-left: 672px; } |
||||
.container .offset-by-fifteen { padding-left: 720px; } |
||||
} |
||||
|
||||
|
||||
/* #Mobile (Portrait) |
||||
================================================== */ |
||||
|
||||
/* Note: Design for a width of 320px */ |
||||
|
||||
@media only screen and (max-width: 767px) { |
||||
.container { width: 300px; } |
||||
.container .columns, |
||||
.container .column { margin: 0; } |
||||
|
||||
.container .one.column, |
||||
.container .one.columns, |
||||
.container .two.columns, |
||||
.container .three.columns, |
||||
.container .four.columns, |
||||
.container .five.columns, |
||||
.container .six.columns, |
||||
.container .seven.columns, |
||||
.container .eight.columns, |
||||
.container .nine.columns, |
||||
.container .ten.columns, |
||||
.container .eleven.columns, |
||||
.container .twelve.columns, |
||||
.container .thirteen.columns, |
||||
.container .fourteen.columns, |
||||
.container .fifteen.columns, |
||||
.container .sixteen.columns, |
||||
.container .one-third.column, |
||||
.container .two-thirds.column { width: 300px; } |
||||
|
||||
/* Offsets */ |
||||
.container .offset-by-one, |
||||
.container .offset-by-two, |
||||
.container .offset-by-three, |
||||
.container .offset-by-four, |
||||
.container .offset-by-five, |
||||
.container .offset-by-six, |
||||
.container .offset-by-seven, |
||||
.container .offset-by-eight, |
||||
.container .offset-by-nine, |
||||
.container .offset-by-ten, |
||||
.container .offset-by-eleven, |
||||
.container .offset-by-twelve, |
||||
.container .offset-by-thirteen, |
||||
.container .offset-by-fourteen, |
||||
.container .offset-by-fifteen { padding-left: 0; } |
||||
|
||||
} |
||||
|
||||
|
||||
/* #Mobile (Landscape) |
||||
================================================== */ |
||||
|
||||
/* Note: Design for a width of 480px */ |
||||
|
||||
@media only screen and (min-width: 480px) and (max-width: 767px) { |
||||
.container { width: 420px; } |
||||
.container .columns, |
||||
.container .column { margin: 0; } |
||||
|
||||
.container .one.column, |
||||
.container .one.columns, |
||||
.container .two.columns, |
||||
.container .three.columns, |
||||
.container .four.columns, |
||||
.container .five.columns, |
||||
.container .six.columns, |
||||
.container .seven.columns, |
||||
.container .eight.columns, |
||||
.container .nine.columns, |
||||
.container .ten.columns, |
||||
.container .eleven.columns, |
||||
.container .twelve.columns, |
||||
.container .thirteen.columns, |
||||
.container .fourteen.columns, |
||||
.container .fifteen.columns, |
||||
.container .sixteen.columns, |
||||
.container .one-third.column, |
||||
.container .two-thirds.column { width: 420px; } |
||||
} |
||||
|
||||
|
||||
/* #Clearing |
||||
================================================== */ |
||||
|
||||
/* Self Clearing Goodness */ |
||||
.container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; } |
||||
|
||||
/* Use clearfix class on parent to clear nested columns, |
||||
or wrap each row of columns in a <div class="row"> */ |
||||
.clearfix:before, |
||||
.clearfix:after, |
||||
.row:before, |
||||
.row:after { |
||||
content: '\0020'; |
||||
display: block; |
||||
overflow: hidden; |
||||
visibility: hidden; |
||||
width: 0; |
||||
height: 0; } |
||||
.row:after, |
||||
.clearfix:after { |
||||
clear: both; } |
||||
.row, |
||||
.clearfix { |
||||
zoom: 1; } |
||||
|
||||
/* You can also use a <br class="clear" /> to clear columns */ |
||||
.clear { |
||||
clear: both; |
||||
display: block; |
||||
overflow: hidden; |
||||
visibility: hidden; |
||||
width: 0; |
||||
height: 0; |
||||
} |
||||
@ -0,0 +1,86 @@
|
||||
body { |
||||
font: 100%/1.4 "PT Sans", sans-serif; |
||||
} |
||||
|
||||
h1, h2, h3, h4, h5, h6 { |
||||
font-family: "PT Sans", sans-serif; |
||||
} |
||||
|
||||
ul { |
||||
list-style: disc outside; |
||||
padding-left: 20px; |
||||
} |
||||
|
||||
.container { |
||||
margin: 0 0 0 40px; |
||||
} |
||||
|
||||
header h1 a { |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.sidebar h1 { |
||||
font-size: 35px; |
||||
line-height: 40px; |
||||
margin: 40px 0; |
||||
} |
||||
.sidebar h1 a { |
||||
text-decoration: none; |
||||
} |
||||
.sidebar footer { |
||||
position: absolute; |
||||
bottom: 40px; |
||||
} |
||||
|
||||
.thumbnail { |
||||
text-align: center; |
||||
} |
||||
.thumbnail img { |
||||
max-width: 100%; |
||||
height: auto; |
||||
margin: 0 5px 5px 0; |
||||
border: 10px solid #fff; |
||||
border-radius: 2px 2px 2px 2px; |
||||
box-shadow: 0 0 3px #B1B1B1; |
||||
padding: 0 0 2px; |
||||
} |
||||
.thumbnail img:hover { |
||||
box-shadow: 0 0 5px #818181; |
||||
} |
||||
|
||||
.album_title { |
||||
display: block; |
||||
} |
||||
|
||||
#cboxTitle { |
||||
max-width: 90%; |
||||
} |
||||
#cboxTitle a, #cboxTitle a:visited { |
||||
color: #ccc; |
||||
} |
||||
|
||||
@media only screen and (min-width: 767px) { |
||||
header { |
||||
margin-top: 40px; |
||||
} |
||||
|
||||
.sidebar { |
||||
position: fixed; |
||||
height: 100%; |
||||
width: 220px; |
||||
} |
||||
} |
||||
@media only screen and (max-width: 767px) { |
||||
.container { |
||||
padding-bottom: 40px; |
||||
} |
||||
|
||||
.sidebar footer { |
||||
bottom: 10px; |
||||
} |
||||
} |
||||
@media only screen and (min-width: 768px) and (max-width: 959px) { |
||||
.sidebar { |
||||
width: 172px; |
||||
} |
||||
} |
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,171 @@
|
||||
<!doctype html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
|
||||
<title>{{ album.title }}</title> |
||||
<meta name="description" content=""> |
||||
<meta name="author" content="{{ author }}"> |
||||
<meta name="viewport" content="width=device-width"> |
||||
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=PT+Sans"> |
||||
<link rel="stylesheet" href="{{ theme.url }}/css/style.min.css"> |
||||
<!--[if lt IE 9]> |
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
||||
<![endif]--> |
||||
</head> |
||||
<body> |
||||
<div class="container"> |
||||
<div class="four columns"> |
||||
<div class="sidebar"> |
||||
<h1><a href="{{ album.index_url }}">{{ index_title }}</a></h1> |
||||
{% if settings.links %} |
||||
<nav id="menu"> |
||||
<ul> |
||||
{% for title, link in settings.links %} |
||||
<li><a href="{{ link }}">{{ title }}</a></li> |
||||
{% endfor %} |
||||
</ul> |
||||
</nav> |
||||
{% endif %} |
||||
<footer> |
||||
<p>{% if author %}© {{ author }} - {% endif %} |
||||
Generated by <a href="{{ sigal_link }}">sigal</a></p> |
||||
</footer> |
||||
</div> |
||||
</div> |
||||
|
||||
<div id="main" role="main" class="twelve columns offset-by-four"> |
||||
<header> |
||||
{% if album.breadcrumb %} |
||||
<h2> |
||||
{% for url, title in album.breadcrumb %} |
||||
<a href="{{ url }}">{{ title }}</a>{% if not loop.last %} » {% endif %} |
||||
{% endfor -%} |
||||
</h2> |
||||
<hr> |
||||
{% endif %} |
||||
</header> |
||||
|
||||
{% set numbers = ["zero", "one", "two", "three", "four", "five", "six", |
||||
"seven", "eight", "nine", "ten", "eleven", "twelve"] %} |
||||
{% set column_size = settings.colorbox_column_size %} |
||||
{% set nb_columns = (12 / column_size)|int %} |
||||
{% set column_size_t = numbers[column_size] %} |
||||
|
||||
{% if album.albums %} |
||||
{% for alb in album.albums %} |
||||
{% if loop.index % nb_columns == 1 %} |
||||
<div id="albums" class="row"> |
||||
{% endif%} |
||||
<div class="{{ column_size_t }} columns thumbnail |
||||
{% if loop.index % nb_columns == 1 %}alpha{% endif%} |
||||
{% if loop.index % nb_columns == 0 %}omega{% endif%}"> |
||||
<a href="{{ alb.url }}"> |
||||
<img src="{{ alb.thumbnail }}" class="album_thumb" |
||||
alt="{{ alb.title }}" title="{{ alb.title }}" /></a> |
||||
<span class="album_title">{{ alb.title }}</span> |
||||
</div> |
||||
{% if loop.last or loop.index % nb_columns == 0 %} |
||||
</div> |
||||
{% endif%} |
||||
{% endfor %} |
||||
{% endif %} |
||||
|
||||
{% if album.medias %} |
||||
{% macro img_description(media) -%} |
||||
{% if media.big %} data-big="{{ media.big }}"{% endif %} |
||||
{% if media.exif %} |
||||
{% if media.exif.datetime %} |
||||
data-date=", {{ media.exif.datetime }}" |
||||
{% endif %} |
||||
{% endif %} |
||||
{%- endmacro %} |
||||
<div id="gallery" class="row"> |
||||
{% for media in album.medias %} |
||||
{% if media.type == "image" %} |
||||
<div class="{{ column_size_t }} columns thumbnail |
||||
{% if loop.index % nb_columns == 1 %}alpha{% endif%} |
||||
{% if loop.index % nb_columns == 0 %}omega{% endif%}"> |
||||
<a href="{{ media.filename }}.html" class="gallery" |
||||
title="{{ media.title if media.title else media.filename }}" |
||||
data-href="{{media.filename}}" {{ img_description(media) }}> |
||||
<img src="{{ media.thumbnail }}" alt="{{ media.filename }}" |
||||
title="{{ media.title if media.title else media.filename }}" /></a> |
||||
</div> |
||||
{% endif %} |
||||
{% if media.type == "video" %} |
||||
<div class="{{ column_size_t }} columns thumbnail |
||||
{% if loop.index % nb_columns == 1 %}alpha{% endif%} |
||||
{% if loop.index % nb_columns == 0 %}omega{% endif%}"> |
||||
<a href="{{ media.filename }}.html" |
||||
data-href="#{{ media.filename|replace('.', '')|replace(' ', '') }}" |
||||
class="gallery" inline='yes' title="{{ media.filename }}" |
||||
{% if media.big %} data-big="{{ media.big }}"{% endif %}> |
||||
<img src="{{ media.thumbnail }}" alt="{{ media.filename }}" |
||||
title="{{ media.title if media.title else media.filename }}" /></a> |
||||
</div> |
||||
<!-- This contains the hidden content for the video --> |
||||
<div style='display:none'> |
||||
<div id="{{ media.filename|replace('.', '')|replace(' ', '') }}"> |
||||
<video controls> |
||||
<source src='{{ media.filename }}' type='video/webm' /> |
||||
</video> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
{% endfor %} |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% if album.zip %} |
||||
<div id="additionnal-infos" class="row"> |
||||
<p><a href="{{ album.zip }}" |
||||
title="Download a zip archive with all images">Download ZIP</a></p> |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% if album.description %} |
||||
<div id="description" class="row"> |
||||
{{ album.description }} |
||||
</div> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
|
||||
{% if album.medias %} |
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> |
||||
<script>!window.jQuery && document.write(unescape('%3Cscript src="{{ theme.url }}/js/jquery-1.10.2.min.js"%3E%3C/script%3E'))</script> |
||||
<script src="{{ theme.url }}/js/jquery.colorbox.min.js"></script> |
||||
|
||||
<script> |
||||
$(".gallery").colorbox({ |
||||
rel:"gallery", |
||||
transition:"none", |
||||
maxWidth: "90%", |
||||
maxHeight: "90%", |
||||
scalePhotos: true, |
||||
current: "{current} / {total}", |
||||
title: function () { |
||||
title = this.title; |
||||
if(this.hasAttribute("data-big")) { |
||||
title += " (full size)".link(this.getAttribute("data-big")); |
||||
} |
||||
if(this.hasAttribute("data-date")) { |
||||
title += this.getAttribute("data-date"); |
||||
} |
||||
return title; |
||||
}, |
||||
href: function () { |
||||
return this.getAttribute("data-href"); |
||||
}, |
||||
inline: function() { |
||||
return this.hasAttribute("inline"); |
||||
} |
||||
}); |
||||
</script> |
||||
{% endif %} |
||||
{% include 'analytics.html' %} |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,102 @@
|
||||
<!doctype html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
|
||||
<title>{{ album.title }}</title> |
||||
<meta name="description" content=""> |
||||
<meta name="author" content="{{ author }}"> |
||||
<meta name="viewport" content="width=device-width"> |
||||
|
||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=PT+Sans"> |
||||
<link rel="stylesheet" href="{{ theme.url }}/css/style.min.css"> |
||||
<!--[if lt IE 9]> |
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
||||
<![endif]--> |
||||
</head> |
||||
<body> |
||||
<div class="container"> |
||||
<div class="four columns"> |
||||
<div class="sidebar"> |
||||
<h1><a href="{{ album.index_url }}">{{ index_title }}</a></h1> |
||||
{% if settings.links %} |
||||
<nav id="menu"> |
||||
<ul> |
||||
{% for title, link in settings.links %} |
||||
<li><a href="{{ link }}">{{ title }}</a></li> |
||||
{% endfor %} |
||||
</ul> |
||||
</nav> |
||||
{% endif %} |
||||
<footer> |
||||
<p>{% if author %}© {{ author }} - {% endif %} |
||||
Generated by <a href="{{ sigal_link }}">sigal</a></p> |
||||
</footer> |
||||
</div> |
||||
</div> |
||||
|
||||
<div id="main" role="main" class="twelve columns offset-by-four"> |
||||
<header> |
||||
{% if album.breadcrumb %} |
||||
<h2> |
||||
{% for url, title in album.breadcrumb %} |
||||
<a href="{{ url }}">{{ title }}</a> » |
||||
{% endfor -%} |
||||
<a href="#">{{ media.title if media.title else media.filename }}</a> |
||||
</h2> |
||||
<hr> |
||||
{% endif %} |
||||
</header> |
||||
|
||||
{% set numbers = ["zero", "one", "two", "three", "four", "five", "six", |
||||
"seven", "eight", "nine", "ten", "eleven", "twelve"] %} |
||||
{% set column_size = settings.colorbox_column_size %} |
||||
{% set nb_columns = (12 / column_size)|int %} |
||||
{% set column_size_t = numbers[column_size] %} |
||||
|
||||
{% if media %} |
||||
{% macro img_description(media) -%} |
||||
{% if media.big %} data-big="{{ media.big }}"{% endif %} |
||||
{% if media.exif %} |
||||
{% if media.exif.datetime %} |
||||
data-date=", {{ media.exif.datetime }}" |
||||
{% endif %} |
||||
{% endif %} |
||||
{%- endmacro %} |
||||
|
||||
{% if media.type == "image" %} |
||||
<div class="twelve columns thumbnail"> |
||||
<img src="{{ media.filename }}" alt="{{ media.title if media.title else media.filename }}" |
||||
title="{{ media.title if media.title else media.filename }}" /> |
||||
</div> |
||||
{% endif %} |
||||
{% if media.type == "video" %} |
||||
<div class="twelve columns thumbnail"> |
||||
<video controls> |
||||
<source src='{{ media.filename }}' type='video/webm' /> |
||||
</video> |
||||
</div> |
||||
{% endif %} |
||||
{% endif %} |
||||
|
||||
<div class="two columns offset-by-four"> |
||||
{% if previous_media %} |
||||
<a href="{{ previous_media.filename }}.html">« previous</a> |
||||
{% else %} |
||||
|
||||
{% endif %} |
||||
</div> |
||||
|
||||
<div class="two columns"> |
||||
{% if next_media %} |
||||
<a href="{{ next_media.filename }}.html">next »</a> |
||||
{% endif %} |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
{% include 'analytics.html' %} |
||||
</body> |
||||
</html> |
||||
Loading…
Reference in new issue