- added special templates option per category
- changed layout for journal/articles: single page, per year grouping - adaptimg wide view
This commit is contained in:
parent
80b7dd3930
commit
a506d9d18f
14 changed files with 310 additions and 265 deletions
111
nasg.py
111
nasg.py
|
@ -196,9 +196,17 @@ class Category(NoDupeContainer):
|
|||
|
||||
def __init__(self, name=''):
|
||||
self.name = name
|
||||
self.topics = NoDupeContainer()
|
||||
super().__init__()
|
||||
|
||||
def append(self, post):
|
||||
if len(post.tags) == 1:
|
||||
topic = post.tags[0]
|
||||
if topic not in self.topics:
|
||||
t = NoDupeContainer()
|
||||
self.topics.append(topic, t)
|
||||
t = self.topics[topic]
|
||||
t.append(post.pubtime, post)
|
||||
return super().append(post.pubtime, post)
|
||||
|
||||
@property
|
||||
|
@ -222,6 +230,19 @@ class Category(NoDupeContainer):
|
|||
shared.config.get('common', 'domain')
|
||||
])
|
||||
|
||||
@property
|
||||
def is_altrender(self):
|
||||
return os.path.exists(
|
||||
os.path.join(
|
||||
shared.config.get('dirs', 'tmpl'),
|
||||
"%s_%s.html" % (
|
||||
self.__class__.__name__,
|
||||
self.name
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@property
|
||||
def url(self):
|
||||
if self.name:
|
||||
|
@ -253,7 +274,70 @@ class Category(NoDupeContainer):
|
|||
os.makedirs(x)
|
||||
return x
|
||||
|
||||
def write_feed(self, posttmpls):
|
||||
def write_html(self, path, content):
|
||||
with open(path, 'wt') as out:
|
||||
logging.debug('writing file %s', path)
|
||||
out.write(content)
|
||||
os.utime(path, (self.mtime, self.mtime))
|
||||
|
||||
|
||||
async def render(self):
|
||||
if self.is_altrender:
|
||||
self.render_onepage()
|
||||
else:
|
||||
self.render_paginated()
|
||||
self.render_feed()
|
||||
|
||||
def render_onepage(self):
|
||||
years = {}
|
||||
for k in list(sorted(self.data.keys(), reverse=True)):
|
||||
post = self.data[k]
|
||||
year = int(arrow.get(post.pubtime).format('YYYY'))
|
||||
if year not in years:
|
||||
years.update({year: []})
|
||||
years[year].append(post.tmplvars)
|
||||
|
||||
tmplvars = {
|
||||
'taxonomy': {
|
||||
'title': self.title,
|
||||
'name': self.name,
|
||||
'lastmod': arrow.get(self.mtime).format(
|
||||
shared.ARROWFORMAT['rcf']
|
||||
),
|
||||
'url': self.url,
|
||||
'feed': "%s/%s/" % (
|
||||
self.url,
|
||||
shared.config.get('site', 'feed')
|
||||
),
|
||||
},
|
||||
'site': shared.site,
|
||||
'by_year': years
|
||||
}
|
||||
dirname = self.path_paged(1)
|
||||
o = os.path.join(dirname, self.indexfile)
|
||||
logging.info(
|
||||
"Rendering category %s to %s",
|
||||
self.name,
|
||||
o
|
||||
)
|
||||
tmplfile = "%s_%s.html" % (
|
||||
self.__class__.__name__,
|
||||
self.name
|
||||
)
|
||||
r = shared.j2.get_template(tmplfile).render(tmplvars)
|
||||
self.write_html(o, r)
|
||||
|
||||
|
||||
def render_feed(self):
|
||||
start = 0
|
||||
end = int(shared.config.getint('display', 'pagination'))
|
||||
posttmpls = [
|
||||
self.data[k].tmplvars
|
||||
for k in list(sorted(
|
||||
self.data.keys(),
|
||||
reverse=True
|
||||
))[start:end]
|
||||
]
|
||||
dirname = self.path_paged(1, feed=True)
|
||||
o = os.path.join(dirname, self.feedfile)
|
||||
logging.info(
|
||||
|
@ -311,13 +395,7 @@ class Category(NoDupeContainer):
|
|||
)
|
||||
logging.info(r.text)
|
||||
|
||||
def write_html(self, path, content):
|
||||
with open(path, 'wt') as out:
|
||||
logging.debug('writing file %s', path)
|
||||
out.write(content)
|
||||
os.utime(path, (self.mtime, self.mtime))
|
||||
|
||||
async def render(self):
|
||||
def render_paginated(self):
|
||||
pagination = shared.config.getint('display', 'pagination')
|
||||
pages = ceil(len(self.data) / pagination)
|
||||
page = 1
|
||||
|
@ -367,11 +445,6 @@ class Category(NoDupeContainer):
|
|||
tmplfile = "%s.html" % (self.__class__.__name__)
|
||||
r = shared.j2.get_template(tmplfile).render(tmplvars)
|
||||
self.write_html(o, r)
|
||||
|
||||
# render feed
|
||||
if page == 1:
|
||||
self.write_feed(posttmpls)
|
||||
# inc. page counter
|
||||
page = page + 1
|
||||
|
||||
|
||||
|
@ -633,10 +706,6 @@ class Singular(object):
|
|||
def html(self):
|
||||
html = "%s" % (self.body)
|
||||
|
||||
## add photo
|
||||
#if self.photo:
|
||||
#html = "%s\n%s" % (str(self.photo), html)
|
||||
|
||||
return shared.Pandoc().convert(html)
|
||||
|
||||
@property
|
||||
|
@ -1455,6 +1524,7 @@ def build():
|
|||
for name, c in collector_categories:
|
||||
if not c.is_uptodate or shared.config.getboolean('params', 'force'):
|
||||
worker.append(c.render())
|
||||
|
||||
# TODO move ping to separate function and add it as a task
|
||||
# TODO separate an aiohttpworker?
|
||||
|
||||
|
@ -1471,8 +1541,13 @@ def build():
|
|||
src = shared.config.get('dirs', 'static')
|
||||
for item in os.listdir(src):
|
||||
s = os.path.join(src, item)
|
||||
stime = os.path.getmtime(s)
|
||||
d = os.path.join(shared.config.get('common', 'build'), item)
|
||||
if not os.path.exists(d) or shared.config.getboolean('params', 'force'):
|
||||
dtime = 0
|
||||
if os.path.exists(d):
|
||||
dtime = os.path.getmtime(d)
|
||||
|
||||
if not os.path.exists(d) or shared.config.getboolean('params', 'force') or dtime < stime:
|
||||
logging.debug("copying static file %s to %s", s, d)
|
||||
shutil.copy2(s, d)
|
||||
if '.html' in item:
|
||||
|
|
42
shared.py
42
shared.py
|
@ -671,48 +671,6 @@ def __setup_sitevars():
|
|||
SiteVars.update({'tips': tips})
|
||||
return SiteVars
|
||||
|
||||
|
||||
#def notify(msg):
|
||||
|
||||
### telegram notification, if set
|
||||
##if not config.has_section('api_telegram'):
|
||||
##return
|
||||
|
||||
##url = "https://api.telegram.org/bot%s/sendMessage" % (
|
||||
##config.get('api_telegram', 'api_token')
|
||||
##)
|
||||
##data = {
|
||||
##'chat_id': config.get('api_telegram', 'chat_id'),
|
||||
##'text': msg
|
||||
##}
|
||||
### fire and forget
|
||||
##try:
|
||||
##requests.post(url, data=data)
|
||||
##except BaseException:
|
||||
##pass
|
||||
|
||||
#headers = {
|
||||
#'Subject': 'notification from NASG',
|
||||
#'Content-Type': 'text/plain; charset=utf-8',
|
||||
#'Content-Disposition': 'inline',
|
||||
#'Content-Transfer-Encoding': '8bit',
|
||||
#'From': 'nasg@%s' % (socket.getfqdn()),
|
||||
#'To': config.get('author', 'email'),
|
||||
#'Date': arrow.now().strftime('%a, %d %b %Y %H:%M:%S %Z'),
|
||||
#}
|
||||
|
||||
## create the message
|
||||
#mail = ''
|
||||
#for key, value in headers.items():
|
||||
#mail += "%s: %s\n" % ( key, value )
|
||||
|
||||
## add contents
|
||||
#mail += "\n%s\n" % ( msg )
|
||||
|
||||
#s = smtplib.SMTP( '127.0.0.1', 25 )
|
||||
#s.sendmail( headers['From'], headers['To'], msg.encode("utf8") )
|
||||
#s.quit()
|
||||
|
||||
ARROWFORMAT = {
|
||||
'iso': 'YYYY-MM-DDTHH:mm:ssZ',
|
||||
'display': 'YYYY-MM-DD HH:mm',
|
||||
|
|
|
@ -8,14 +8,16 @@
|
|||
<section class="content-body h-feed">
|
||||
<aside class="follow">
|
||||
<p>
|
||||
<svg class="icon"><use xlink:href="#icon-rss" /></svg>
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-rss" />
|
||||
</svg>
|
||||
<a title="follow {{ taxonomy.title }}" href="{{ site.url }}{{ taxonomy.feed }}">Atom feed</a>
|
||||
</p>
|
||||
</aside>
|
||||
|
||||
<h1 class="p-name hide">{{ taxonomy.name }}</h1>
|
||||
{% for post in posts %}
|
||||
<article class="h-entry hentry">
|
||||
<article class="h-entry hentry" lang="{{ post.lang }}">
|
||||
<header>
|
||||
<h2>{% include 'Singular_title.html' %}</h2>
|
||||
</header>
|
||||
|
@ -25,7 +27,7 @@
|
|||
<div class="e-summary entry-summary">
|
||||
{{ post.summary }}
|
||||
<span class="more">
|
||||
<a href="/{{ post.slug }}" title="{{ post.title }}"></a>
|
||||
<a href="/{{ post.slug }}" title="{{ post.title }}">[…]</a>
|
||||
</span>
|
||||
<br class="clear" />
|
||||
</div>
|
||||
|
|
49
templates/Category_article.html
Normal file
49
templates/Category_article.html
Normal file
|
@ -0,0 +1,49 @@
|
|||
{% include 'block_header_open.html' %}
|
||||
<title>{{ taxonomy.title }}</title>
|
||||
<link rel="alternate" type="application/atom+xml" title="{{ taxonomy.title }} feed" href="{{ taxonomy.feed }}" />
|
||||
<link rel="self" href="{{ site.url }}{{ taxonomy.feed }}/" />
|
||||
|
||||
{% include 'block_header_close.html' %}
|
||||
|
||||
<section class="content-body h-feed">
|
||||
<aside class="follow">
|
||||
<p>
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-rss" />
|
||||
</svg>
|
||||
<a title="follow {{ taxonomy.title }}" href="{{ site.url }}{{ taxonomy.feed }}">Atom feed</a>
|
||||
</p>
|
||||
</aside>
|
||||
|
||||
<h1 class="p-name hide">{{ taxonomy.name }}</h1>
|
||||
|
||||
{% for year in by_year.keys()|sort(reverse=True) %}
|
||||
<h2>{{ year }}</h2>
|
||||
{% for post in by_year[year]|sort(attribute='pubtime',reverse=True) %}
|
||||
<article class="h-entry hentry" lang="{{ post.lang }}">
|
||||
<header>
|
||||
<h3>{% include 'Singular_title.html' %}</h3>
|
||||
</header>
|
||||
|
||||
{% if post.summary %}
|
||||
<div class="e-summary entry-summary">
|
||||
{{ post.summary }}
|
||||
<span class="more">
|
||||
<a href="/{{ post.slug }}" title="{{ post.title }}">[…]</a>
|
||||
</span>
|
||||
<br class="clear" />
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="e-content entry-content">
|
||||
{% if post.photo %}
|
||||
{{ post.photo }}
|
||||
{% endif %}
|
||||
{{ post.html }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</article>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
{% include 'block_footer.html' %}
|
1
templates/Category_journal.html
Symbolic link
1
templates/Category_journal.html
Symbolic link
|
@ -0,0 +1 @@
|
|||
Category_article.html
|
|
@ -1,86 +0,0 @@
|
|||
{% include 'block_header_open.html' %}
|
||||
<title>{{ taxonomy.title }}</title>
|
||||
<link rel="alternate" type="application/atom+xml" title="{{ taxonomy.title }} feed" href="{{ taxonomy.feed }}" />
|
||||
<link rel="self" href="{{ site.url }}{{ taxonomy.feed }}/" />
|
||||
|
||||
{% include 'block_header_close.html' %}
|
||||
|
||||
<section class="content-body h-feed photos">
|
||||
<aside class="follow">
|
||||
<p>
|
||||
<svg class="icon"><use xlink:href="#icon-rss" /></svg>
|
||||
<a title="follow {{ taxonomy.title }}" href="{{ site.url }}{{ taxonomy.feed }}">Atom feed</a>
|
||||
</p>
|
||||
</aside>
|
||||
|
||||
{% for post in posts %}
|
||||
{{ post.photo }}
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
{% if taxonomy.total > 1 %}
|
||||
|
||||
{# based on: http://dev.dbl-a.com/symfony-2-0/symfony2-and-twig-pagination/ #}
|
||||
<nav class="pagination">
|
||||
<ul>
|
||||
{% if taxonomy.page > 1 %}
|
||||
{% set prev = taxonomy.page - 1 %}
|
||||
<li>
|
||||
<a rel="prev" href="{{ taxonomy.url }}page/{{ prev }}">«</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="prev" href="{{ taxonomy.url }}">1</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if taxonomy.page - 4 > 0 %}
|
||||
<li>
|
||||
<span class="page-numbers dots">…</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if ( taxonomy.page - 1 > 1 ) %}
|
||||
<li>
|
||||
<a href="{{ taxonomy.url }}page/{{ taxonomy.page - 1 }}">{{ taxonomy.page - 1 }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<li>
|
||||
<span class="page-numbers taxonomy.page">{{ taxonomy.page }}</span>
|
||||
</li>
|
||||
|
||||
|
||||
{% if ( taxonomy.page + 1 <= taxonomy.total -1 ) %}
|
||||
<li>
|
||||
<a href="{{ taxonomy.url }}page/{{ taxonomy.page + 1 }}">{{ taxonomy.page + 1 }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if taxonomy.page + 3 < taxonomy.total %}
|
||||
<li>
|
||||
<span class="page-numbers dots">…</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if taxonomy.page != taxonomy.total %}
|
||||
<li>
|
||||
<a href="{{ taxonomy.url }}page/{{ taxonomy.total }}">{{ taxonomy.total }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if taxonomy.page < taxonomy.total %}
|
||||
{% set next = taxonomy.page + 1 %}
|
||||
<li>
|
||||
<a rel="next" href="{{ taxonomy.url }}page/{{ next }}">»</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% include 'block_footer.html' %}
|
|
@ -1,26 +1,28 @@
|
|||
<li class="h-entry p-comment">
|
||||
<span>
|
||||
<time class="dt-published" datetime="{{ comment.pubtime }}">
|
||||
{{ comment.pubdate }}
|
||||
</time>
|
||||
</span>
|
||||
<span class="p-author h-card">
|
||||
{% if comment.author.url %}
|
||||
<a class="url u-url" href="{{ comment.author.url }}">
|
||||
<span class="p-name fn">{{ comment.author.name }}</span>
|
||||
</a>
|
||||
{% else %}
|
||||
<span class="p-name fn">{{ comment.author.name }}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
<span>
|
||||
<time class="dt-published" datetime="{{ comment.pubtime }}">
|
||||
{{ comment.pubdate }}
|
||||
</time>
|
||||
</span>
|
||||
<span class="p-author h-card">
|
||||
{% if comment.author.url %}
|
||||
<a class="url u-url" href="{{ comment.author.url }}">
|
||||
<span class="p-name fn">{{ comment.author.name }}</span>
|
||||
</a>
|
||||
{% else %}
|
||||
<span class="p-name fn">{{ comment.author.name }}</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
{% if 'webmention' == comment.type %}
|
||||
<span class="source">
|
||||
<svg class="icon"><use xlink:href="#icon-link"></use></svg>
|
||||
<a class="u-url" href="{{ comment.source }}">{{ comment.source }}</a>
|
||||
</span>
|
||||
<span class="source">
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-link"></use>
|
||||
</svg>
|
||||
<a class="u-url" href="{{ comment.source }}">{{ comment.source }}</a>
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="reaction">
|
||||
<a class="u-url" href="{{ comment.source }}">{{ comment.type }} </a>
|
||||
</span>
|
||||
<span class="reaction">
|
||||
<a class="u-url" href="{{ comment.source }}">{{ comment.type }} </a>
|
||||
</span>
|
||||
{% endif %}
|
||||
</li>
|
||||
|
|
|
@ -15,12 +15,6 @@
|
|||
<article class="h-entry hentry singular" lang="{{ post.lang }}">
|
||||
<header>
|
||||
<h1>{% include 'Singular_title.html' %}</h1>
|
||||
{% if 'article' == post.category and post.age >= 2 %}
|
||||
<h2 class="old-warning">WARNING: this entry was published at {{ post.pubdate }}.<br />It might be outdated.</h2>
|
||||
{% endif %}
|
||||
{% for url in post.syndicate %}
|
||||
<a href="{{ url }}"></a>
|
||||
{% endfor %}
|
||||
</header>
|
||||
|
||||
{% if post.summary %}
|
||||
|
@ -52,15 +46,21 @@
|
|||
<p class="license">
|
||||
{% if post.licence.text == 'CC BY 4.0' %}
|
||||
<a rel="license" href="https://creativecommons.org/licenses/by/4.0/" class="hide u-license">CC BY 4.0</a>
|
||||
<svg class="icon"><use xlink:href="#icon-creative-commons" /></svg>
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-creative-commons" />
|
||||
</svg>
|
||||
Licensed under <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International</a>. You are free to share or republish, even if modified, if you link back here and indicate the modifications, even for commercial use.
|
||||
{% elif post.licence.text == 'CC BY-NC 4.0' %}
|
||||
<a rel="license" href="https://creativecommons.org/licenses/by-nc/4.0/" class="hide u-license">CC BY-NC 4.0</a>
|
||||
<svg class="icon"><use xlink:href="#icon-creative-commons" /></svg>
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-creative-commons" />
|
||||
</svg>
|
||||
Licensed under <a href="https://creativecommons.org/licenses/by-nc/4.0/">Creative Commons Attribution-NonCommercial 4.0 International</a>. You are free to share or republish, even if modified, if you link back here and indicate the modifications, for non commercial use. For commercial use please contact the author.
|
||||
{% else %}
|
||||
<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/" class="hide u-license">CC BY-NC-ND 4.0</a>
|
||||
<svg class="icon"><use xlink:href="#icon-creative-commons" /></svg>
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-creative-commons" />
|
||||
</svg>
|
||||
Licensed under <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International</a>. You are free to share if you link back here for non commercial use, but you can't publish any altered versions of it. For commercial use please contact the author.
|
||||
{% endif %}
|
||||
</p>
|
||||
|
@ -84,7 +84,9 @@
|
|||
<a rel="payment" title="pay {{ site.author.name }} via {{ data.label }} {{ data.value }}" href="{{ data.url }}">
|
||||
{{ data.value }}
|
||||
<span class="method">
|
||||
<svg class="icon"><use xlink:href="#icon-{{ method }}"></use></svg>
|
||||
<svg class="icon" width="16" height="16">
|
||||
<use xlink:href="#icon-{{ method }}"></use>
|
||||
</svg>
|
||||
with {{ data.label }}
|
||||
</span>
|
||||
</a>
|
||||
|
@ -93,10 +95,26 @@
|
|||
</ul>
|
||||
</aside>
|
||||
|
||||
{% if post.syndicate|length %}
|
||||
<section class="syndication">
|
||||
<!-- <h2><a name="syndication"></a>Syndicated copies</h2>
|
||||
<ul>
|
||||
{% for url in post.syndicate %}
|
||||
<li>
|
||||
<a href="{{ url }}" class="u-syndication"></a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
-->
|
||||
{% for url in post.syndicate %}
|
||||
<a href="{{ url }}" class="u-syndication"></a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if post.replies|length %}
|
||||
<section class="replies">
|
||||
<h6><a name="replies"></a>Replies</h6>
|
||||
<h2><a name="replies"></a>Replies</h2>
|
||||
<ol>
|
||||
{% for mtime, comment in post.replies %}
|
||||
{% include 'Comment.html' %}
|
||||
|
@ -106,7 +124,7 @@
|
|||
{% endif %}
|
||||
{% if post.reactions|length %}
|
||||
<section class="reactions">
|
||||
<h6><a name="reactions"></a>Reactions</h6>
|
||||
<h2><a name="reactions"></a>Reactions</h2>
|
||||
<dl>
|
||||
{% for character, comments in post.reactions.items() %}
|
||||
<dt>{{ character }}</dt>
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
{% if post.is_reply %}
|
||||
<span class="p-name">
|
||||
<svg class="icon"><use xlink:href="#icon-reply" /></svg>
|
||||
<svg class="icon" width="16" height="16"><use xlink:href="#icon-reply" /></svg>
|
||||
<a href="{{ post.slug }}" class="u-url" title="{{ post.title }}">
|
||||
RE:
|
||||
</a>
|
||||
<a href="{{ post.is_reply }}" class="u-in-reply-to" title="Reply to: {{ post.is_reply }}">
|
||||
{{ post.is_reply }}
|
||||
</a>
|
||||
|
|
|
@ -7,27 +7,27 @@
|
|||
<dl class="exif">
|
||||
{% if photo.exif.camera %}
|
||||
<dt>Camera</dt>
|
||||
<dd><svg class="icon"><use xlink:href="#icon-camera" /></svg>{{ photo.exif.camera }}</dd>
|
||||
<dd><svg class="icon" width="16" height="16"><use xlink:href="#icon-camera" /></svg>{{ photo.exif.camera }}</dd>
|
||||
{% endif %}
|
||||
{% if photo.exif.aperture %}
|
||||
<dt>Aperture</dt>
|
||||
<dd><svg class="icon"><use xlink:href="#icon-aperture" /></svg>f/{{ photo.exif.aperture }}</dd>
|
||||
<dd><svg class="icon" width="16" height="16"><use xlink:href="#icon-aperture" /></svg>f/{{ photo.exif.aperture }}</dd>
|
||||
{% endif %}
|
||||
{% if photo.exif.shutter_speed %}
|
||||
<dt>Shutter speed</dt>
|
||||
<dd><svg class="icon"><use xlink:href="#icon-clock" /></svg>{{ photo.exif.shutter_speed }} sec</dd>
|
||||
<dd><svg class="icon" width="16" height="16"><use xlink:href="#icon-clock" /></svg>{{ photo.exif.shutter_speed }} sec</dd>
|
||||
{% endif %}
|
||||
{% if photo.exif.focallength %}
|
||||
<dt>Focal length (as set)</dt>
|
||||
<dd><svg class="icon"><use xlink:href="#icon-focallength" /></svg>{{ photo.exif.focallength }}</dd>
|
||||
<dd><svg class="icon" width="16" height="16"><use xlink:href="#icon-focallength" /></svg>{{ photo.exif.focallength }}</dd>
|
||||
{% endif %}
|
||||
{% if photo.exif.iso %}
|
||||
<dt>Sensitivity</dt>
|
||||
<dd><svg class="icon"><use xlink:href="#icon-sensitivity" /></svg>ISO {{ photo.exif.iso }}</dd>
|
||||
<dd><svg class="icon" width="16" height="16"><use xlink:href="#icon-sensitivity" /></svg>ISO {{ photo.exif.iso }}</dd>
|
||||
{% endif %}
|
||||
{% if photo.exif.lens %}
|
||||
<dt>Lens</dt>
|
||||
<dd><svg class="icon"><use xlink:href="#icon-lens" /></svg>{{ photo.exif.lens }}</dd>
|
||||
<dd><svg class="icon" width="16" height="16"><use xlink:href="#icon-lens" /></svg>{{ photo.exif.lens }}</dd>
|
||||
{% endif %}
|
||||
</dl>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
<footer class="content-footer" id="main-footer">
|
||||
<nav class="footer-contact p-author h-card vcard limit">
|
||||
<h2>Author</h2>
|
||||
<dl>
|
||||
<dt>name</dt>
|
||||
<dd>
|
||||
|
@ -9,20 +10,17 @@
|
|||
</dd>
|
||||
<dt>email</dt>
|
||||
<dd>
|
||||
<svg class="icon"><use xlink:href="#icon-email" /></svg>
|
||||
<a rel="me" class="u-email email" href="mailto:{{ site.author.email }}">{{ site.author.email }}</a>
|
||||
</dd>
|
||||
{% if site.author.sip %}
|
||||
<dt>SIP</dt>
|
||||
<dd>
|
||||
<svg class="icon"><use xlink:href="#icon-phone" /></svg>
|
||||
<a rel="me" class="u-sip sip" href="sip:{{ site.author.sip }}">sip:{{ site.author.sip }}</a>
|
||||
</dd>
|
||||
{% endif %}
|
||||
{% if site.author.gpg %}
|
||||
<dt>GPG/PGP public key</dt>
|
||||
<dd>
|
||||
<svg class="icon"><use xlink:href="#icon-key" /></svg>
|
||||
<a rel="me" class="u-gpg gpg" href="{{ site.url }}/{{ site.author.gpg }}">GPG key</a>
|
||||
</dd>
|
||||
{% endif %}
|
||||
|
@ -32,7 +30,6 @@
|
|||
|
||||
<dt>{{ silo }}</dt>
|
||||
<dd>
|
||||
<svg class="icon"><use xlink:href="#icon-{{ silo }}" /></svg>
|
||||
<a rel="me" class="u-{{ silo }} url u-url" href="{{ url }}">{{ silo }}</a>
|
||||
</dd>
|
||||
{% endfor %}
|
||||
|
@ -40,5 +37,7 @@
|
|||
</nav>
|
||||
</footer>
|
||||
|
||||
{% include 'symbols.svg' %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'symbols.svg' %}
|
||||
|
||||
<header class="content-header" id="main-header">
|
||||
<nav class="content-navigation">
|
||||
|
@ -14,7 +13,7 @@
|
|||
{% set cssclass = 'active' %}
|
||||
{% endif %}
|
||||
<a title="home" href="/" class="{{ cssclass }}">
|
||||
<svg class="icon"><use xlink:href="#icon-home" /></svg>
|
||||
<svg class="icon" width="16" height="16"><use xlink:href="#icon-home" /></svg>
|
||||
home
|
||||
</a>
|
||||
</li>
|
||||
|
@ -24,7 +23,7 @@
|
|||
{% endif %}
|
||||
<li>
|
||||
<a title="photos" href="/category/photo/" class="{{ cssclass }}">
|
||||
<svg class="icon"><use xlink:href="#icon-photo" /></svg>
|
||||
<svg class="icon" width="18" height="16"><use xlink:href="#icon-photo" /></svg>
|
||||
photos
|
||||
</a>
|
||||
</li>
|
||||
|
@ -34,7 +33,7 @@
|
|||
{% endif %}
|
||||
<li>
|
||||
<a title="journal" href="/category/journal/" class="{{ cssclass }}">
|
||||
<svg class="icon"><use xlink:href="#icon-journal" /></svg>
|
||||
<svg class="icon" width="16" height="16"><use xlink:href="#icon-journal" /></svg>
|
||||
journal
|
||||
</a>
|
||||
</li>
|
||||
|
@ -44,7 +43,7 @@
|
|||
{% endif %}
|
||||
<li>
|
||||
<a title="IT" href="/category/article/" class="{{ cssclass }}">
|
||||
<svg class="icon"><use xlink:href="#icon-article" /></svg>
|
||||
<svg class="icon" width="16" height="16"><use xlink:href="#icon-article" /></svg>
|
||||
IT
|
||||
</a>
|
||||
</li>
|
||||
|
@ -54,7 +53,7 @@
|
|||
{% endif %}
|
||||
<li>
|
||||
<a title="notes" href="/category/note/" class="{{ cssclass }}">
|
||||
<svg class="icon"><use xlink:href="#icon-note" /></svg>
|
||||
<svg class="icon" width="16" height="16"><use xlink:href="#icon-note" /></svg>
|
||||
notes
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
@ -220,51 +220,6 @@ code.sourceCode span.va { color: turquoise; }
|
|||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
.h-entry {
|
||||
padding: 0 0.6rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.h-feed .h-entry {
|
||||
margin: 2rem 0 0 0;
|
||||
padding: 1rem;
|
||||
border-bottom: 2px solid #333;
|
||||
}
|
||||
|
||||
/* titles in taxonomy pages */
|
||||
.h-feed .h-entry h2 {
|
||||
border: none;
|
||||
font-size: 1rem;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* licence, time, author */
|
||||
.h-entry footer p {
|
||||
color: #999;
|
||||
padding: 0.3rem 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.h-entry footer a {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.h-entry footer a:hover {
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
.e-content a {
|
||||
color:#5193D4;
|
||||
}
|
||||
|
||||
.e-content a:hover {
|
||||
color:#71B3F4;
|
||||
}
|
||||
|
||||
.singular footer {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.footnoteRef,
|
||||
.footnoteRef:hover {
|
||||
|
@ -319,7 +274,6 @@ code.sourceCode span.va { color: turquoise; }
|
|||
color: #ccc;
|
||||
}
|
||||
|
||||
|
||||
.content-header a,
|
||||
.content-footer a {
|
||||
color: #cccccc;
|
||||
|
@ -361,6 +315,7 @@ code.sourceCode span.va { color: turquoise; }
|
|||
font-size: 0.86rem;
|
||||
}
|
||||
|
||||
.content-footer h2,
|
||||
.content-footer svg,
|
||||
.content-footer dl dt {
|
||||
display:none;
|
||||
|
@ -445,19 +400,85 @@ input[type=submit]:hover {
|
|||
border-bottom: 3px solid #fefefe;
|
||||
}
|
||||
|
||||
|
||||
.h-feed h2 {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.h-feed .h-entry {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.h-feed .h-entry h3 {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.h-feed .h-entry .e-summary,
|
||||
.h-feed .h-entry .e-content {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.h-feed .h-entry .e-content {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.h-entry.singular {
|
||||
padding: 0 0.6rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.h-entry.singular .e-content a,
|
||||
.h-entry.singular .e-summary a {
|
||||
color:#5193D4;
|
||||
}
|
||||
|
||||
.h-feed .h-entry h2 a:hover,
|
||||
.h-entry.singular .e-content a:hover,
|
||||
.h-entry.singular .e-summary a:hover {
|
||||
color:#71B3F4;
|
||||
}
|
||||
|
||||
|
||||
.h-entry.singular footer p {
|
||||
color: #999;
|
||||
padding: 0.3rem 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.h-entry.singular footer a {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.h-entry.singular footer a:hover {
|
||||
color: #eee;
|
||||
}
|
||||
|
||||
.h-entry.singular footer {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.reactions h2,
|
||||
.replies h2,
|
||||
.syndication h2 {
|
||||
border:none;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 1rem 0;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
figcaption dl * {
|
||||
font-size: 0.5rem;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
background-color: #111;
|
||||
text-align: left;
|
||||
max-width: 722px;
|
||||
max-width: 72ch;
|
||||
margin: 0 auto;
|
||||
background-color: #111;
|
||||
padding: 0.6rem;
|
||||
}
|
||||
|
||||
|
||||
.adaptimg {
|
||||
display: block;
|
||||
max-height: 98vh;
|
||||
|
@ -490,14 +511,11 @@ figcaption {
|
|||
border-bottom-color: #fff;
|
||||
}
|
||||
|
||||
.more {
|
||||
display:block;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
/*
|
||||
.more a:before {
|
||||
content:'Continue \00BB';
|
||||
}
|
||||
*/
|
||||
|
||||
.pagination ul {
|
||||
text-align:center;
|
||||
|
@ -542,14 +560,14 @@ figcaption {
|
|||
.w25 {
|
||||
width: 24%;
|
||||
}
|
||||
|
||||
/*
|
||||
.u-in-reply-to::before {
|
||||
content: 'RE:';
|
||||
dislay: inline-block;
|
||||
margin-right: 0.3rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
.search-section {
|
||||
margin-bottom: 1rem;
|
||||
|
@ -639,7 +657,7 @@ figcaption {
|
|||
*/
|
||||
|
||||
/* above is mobile first; this is the desktop */
|
||||
@media all and (min-width: 50rem) {
|
||||
@media all and (min-width: 56rem) {
|
||||
|
||||
.content-navigation ul li a {
|
||||
font-size: 0.9rem;
|
||||
|
@ -658,6 +676,19 @@ figcaption {
|
|||
margin: 0.1rem;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
max-width: 28%;
|
||||
}
|
||||
|
||||
|
||||
.adaptimg {
|
||||
max-width: 70%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -62,10 +62,4 @@
|
|||
<symbol id="icon-creative-commons" viewBox="0 0 16 16">
|
||||
<path d="M5.402 11.009c1.464 0 2.259-0.893 2.295-0.929 0.071-0.089 0.089-0.223 0.027-0.321l-0.402-0.732c-0.036-0.080-0.125-0.134-0.214-0.152-0.089-0.009-0.179 0.027-0.241 0.098-0.009 0-0.571 0.598-1.393 0.598-0.902 0-1.554-0.661-1.554-1.58 0-0.911 0.634-1.563 1.518-1.563 0.741 0 1.232 0.5 1.232 0.5 0.063 0.063 0.143 0.098 0.232 0.089s0.17-0.054 0.214-0.125l0.473-0.696c0.071-0.107 0.063-0.25-0.018-0.348-0.027-0.036-0.75-0.857-2.17-0.857-1.759 0-3.071 1.295-3.071 3.009 0 1.741 1.286 3.009 3.071 3.009zM11.027 11.009c1.473 0 2.259-0.893 2.295-0.929 0.071-0.089 0.089-0.223 0.036-0.321l-0.402-0.732c-0.045-0.080-0.125-0.134-0.223-0.152-0.089-0.009-0.179 0.027-0.241 0.098-0.009 0-0.571 0.598-1.393 0.598-0.902 0-1.554-0.661-1.554-1.58 0-0.911 0.634-1.563 1.518-1.563 0.75 0 1.232 0.5 1.232 0.5 0.063 0.063 0.143 0.098 0.232 0.089s0.17-0.054 0.214-0.125l0.473-0.696c0.071-0.107 0.063-0.25-0.018-0.348-0.027-0.036-0.75-0.857-2.17-0.857-1.75 0-3.071 1.295-3.071 3.009 0 1.741 1.286 3.009 3.071 3.009zM8 1.429c-3.625 0-6.571 2.946-6.571 6.571s2.946 6.571 6.571 6.571 6.571-2.946 6.571-6.571-2.946-6.571-6.571-6.571zM8 0c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8z"></path>
|
||||
</symbol>
|
||||
<symbol id="icon-btc" viewBox="0 0 12 16">
|
||||
<path d="M10.42 5.714c0.116 1.188-0.384 1.902-1.17 2.304 1.304 0.313 2.125 1.089 1.964 2.83-0.205 2.17-1.813 2.75-4.116 2.875v2.277h-1.375v-2.241c-0.348 0-0.714 0-1.089-0.009v2.25h-1.375v-2.277c-0.321 0-0.643-0.009-0.973-0.009h-1.786l0.277-1.634c1.009 0.018 0.991 0 0.991 0 0.384 0 0.491-0.277 0.518-0.455v-3.589h0.143c-0.054-0.009-0.107-0.009-0.143-0.009v-2.563c-0.054-0.286-0.232-0.607-0.795-0.607 0 0 0.018-0.018-0.991 0v-1.464l1.893 0.009c0.277 0 0.571 0 0.866-0.009v-2.25h1.375v2.205c0.366-0.009 0.732-0.018 1.089-0.018v-2.188h1.375v2.25c1.768 0.152 3.17 0.696 3.321 2.321zM8.5 10.58c0-1.768-2.911-1.509-3.839-1.509v3.018c0.929 0 3.839 0.196 3.839-1.509zM7.866 6.33c0-1.616-2.429-1.375-3.205-1.375v2.741c0.777 0 3.205 0.179 3.205-1.366z"></path>
|
||||
</symbol>
|
||||
<symbol id="icon-phone viewBox="0 0 16 16">
|
||||
<path d="M11 10c-1 1-1 2-2 2s-2-1-3-2-2-2-2-3 1-1 2-2-2-4-3-4-3 3-3 3c0 2 2.055 6.055 4 8s6 4 8 4c0 0 3-2 3-3s-3-4-4-3z"></path>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.7 KiB |
Loading…
Reference in a new issue