- added special templates option per category

- changed layout for journal/articles: single page, per year grouping
- adaptimg wide view
This commit is contained in:
Peter Molnar 2018-03-28 14:19:14 +00:00
parent 80b7dd3930
commit a506d9d18f
14 changed files with 310 additions and 265 deletions

111
nasg.py
View file

@ -196,9 +196,17 @@ class Category(NoDupeContainer):
def __init__(self, name=''): def __init__(self, name=''):
self.name = name self.name = name
self.topics = NoDupeContainer()
super().__init__() super().__init__()
def append(self, post): 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) return super().append(post.pubtime, post)
@property @property
@ -222,6 +230,19 @@ class Category(NoDupeContainer):
shared.config.get('common', 'domain') 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 @property
def url(self): def url(self):
if self.name: if self.name:
@ -253,7 +274,70 @@ class Category(NoDupeContainer):
os.makedirs(x) os.makedirs(x)
return 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) dirname = self.path_paged(1, feed=True)
o = os.path.join(dirname, self.feedfile) o = os.path.join(dirname, self.feedfile)
logging.info( logging.info(
@ -311,13 +395,7 @@ class Category(NoDupeContainer):
) )
logging.info(r.text) logging.info(r.text)
def write_html(self, path, content): def render_paginated(self):
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):
pagination = shared.config.getint('display', 'pagination') pagination = shared.config.getint('display', 'pagination')
pages = ceil(len(self.data) / pagination) pages = ceil(len(self.data) / pagination)
page = 1 page = 1
@ -367,11 +445,6 @@ class Category(NoDupeContainer):
tmplfile = "%s.html" % (self.__class__.__name__) tmplfile = "%s.html" % (self.__class__.__name__)
r = shared.j2.get_template(tmplfile).render(tmplvars) r = shared.j2.get_template(tmplfile).render(tmplvars)
self.write_html(o, r) self.write_html(o, r)
# render feed
if page == 1:
self.write_feed(posttmpls)
# inc. page counter
page = page + 1 page = page + 1
@ -633,10 +706,6 @@ class Singular(object):
def html(self): def html(self):
html = "%s" % (self.body) html = "%s" % (self.body)
## add photo
#if self.photo:
#html = "%s\n%s" % (str(self.photo), html)
return shared.Pandoc().convert(html) return shared.Pandoc().convert(html)
@property @property
@ -1455,6 +1524,7 @@ def build():
for name, c in collector_categories: for name, c in collector_categories:
if not c.is_uptodate or shared.config.getboolean('params', 'force'): if not c.is_uptodate or shared.config.getboolean('params', 'force'):
worker.append(c.render()) worker.append(c.render())
# TODO move ping to separate function and add it as a task # TODO move ping to separate function and add it as a task
# TODO separate an aiohttpworker? # TODO separate an aiohttpworker?
@ -1471,8 +1541,13 @@ def build():
src = shared.config.get('dirs', 'static') src = shared.config.get('dirs', 'static')
for item in os.listdir(src): for item in os.listdir(src):
s = os.path.join(src, item) s = os.path.join(src, item)
stime = os.path.getmtime(s)
d = os.path.join(shared.config.get('common', 'build'), item) 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) logging.debug("copying static file %s to %s", s, d)
shutil.copy2(s, d) shutil.copy2(s, d)
if '.html' in item: if '.html' in item:

View file

@ -671,48 +671,6 @@ def __setup_sitevars():
SiteVars.update({'tips': tips}) SiteVars.update({'tips': tips})
return SiteVars 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 = { ARROWFORMAT = {
'iso': 'YYYY-MM-DDTHH:mm:ssZ', 'iso': 'YYYY-MM-DDTHH:mm:ssZ',
'display': 'YYYY-MM-DD HH:mm', 'display': 'YYYY-MM-DD HH:mm',

View file

@ -8,14 +8,16 @@
<section class="content-body h-feed"> <section class="content-body h-feed">
<aside class="follow"> <aside class="follow">
<p> <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> <a title="follow {{ taxonomy.title }}" href="{{ site.url }}{{ taxonomy.feed }}">Atom feed</a>
</p> </p>
</aside> </aside>
<h1 class="p-name hide">{{ taxonomy.name }}</h1> <h1 class="p-name hide">{{ taxonomy.name }}</h1>
{% for post in posts %} {% for post in posts %}
<article class="h-entry hentry"> <article class="h-entry hentry" lang="{{ post.lang }}">
<header> <header>
<h2>{% include 'Singular_title.html' %}</h2> <h2>{% include 'Singular_title.html' %}</h2>
</header> </header>
@ -25,7 +27,7 @@
<div class="e-summary entry-summary"> <div class="e-summary entry-summary">
{{ post.summary }} {{ post.summary }}
<span class="more"> <span class="more">
<a href="/{{ post.slug }}" title="{{ post.title }}"></a> <a href="/{{ post.slug }}" title="{{ post.title }}">[…]</a>
</span> </span>
<br class="clear" /> <br class="clear" />
</div> </div>

View 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' %}

View file

@ -0,0 +1 @@
Category_article.html

View file

@ -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' %}

View file

@ -1,26 +1,28 @@
<li class="h-entry p-comment"> <li class="h-entry p-comment">
<span> <span>
<time class="dt-published" datetime="{{ comment.pubtime }}"> <time class="dt-published" datetime="{{ comment.pubtime }}">
{{ comment.pubdate }} {{ comment.pubdate }}
</time> </time>
</span> </span>
<span class="p-author h-card"> <span class="p-author h-card">
{% if comment.author.url %} {% if comment.author.url %}
<a class="url u-url" href="{{ comment.author.url }}"> <a class="url u-url" href="{{ comment.author.url }}">
<span class="p-name fn">{{ comment.author.name }}</span> <span class="p-name fn">{{ comment.author.name }}</span>
</a> </a>
{% else %} {% else %}
<span class="p-name fn">{{ comment.author.name }}</span> <span class="p-name fn">{{ comment.author.name }}</span>
{% endif %} {% endif %}
</span> </span>
{% if 'webmention' == comment.type %} {% if 'webmention' == comment.type %}
<span class="source"> <span class="source">
<svg class="icon"><use xlink:href="#icon-link"></use></svg> <svg class="icon" width="16" height="16">
<a class="u-url" href="{{ comment.source }}">{{ comment.source }}</a> <use xlink:href="#icon-link"></use>
</span> </svg>
<a class="u-url" href="{{ comment.source }}">{{ comment.source }}</a>
</span>
{% else %} {% else %}
<span class="reaction"> <span class="reaction">
<a class="u-url" href="{{ comment.source }}">{{ comment.type }} </a> <a class="u-url" href="{{ comment.source }}">{{ comment.type }} </a>
</span> </span>
{% endif %} {% endif %}
</li> </li>

View file

@ -15,12 +15,6 @@
<article class="h-entry hentry singular" lang="{{ post.lang }}"> <article class="h-entry hentry singular" lang="{{ post.lang }}">
<header> <header>
<h1>{% include 'Singular_title.html' %}</h1> <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> </header>
{% if post.summary %} {% if post.summary %}
@ -52,15 +46,21 @@
<p class="license"> <p class="license">
{% if post.licence.text == 'CC BY 4.0' %} {% 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> <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. 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' %} {% 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> <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. 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 %} {% 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> <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. 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 %} {% endif %}
</p> </p>
@ -84,7 +84,9 @@
<a rel="payment" title="pay {{ site.author.name }} via {{ data.label }} {{ data.value }}" href="{{ data.url }}"> <a rel="payment" title="pay {{ site.author.name }} via {{ data.label }} {{ data.value }}" href="{{ data.url }}">
{{ data.value }} {{ data.value }}
<span class="method"> <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 }} with {{ data.label }}
</span> </span>
</a> </a>
@ -93,10 +95,26 @@
</ul> </ul>
</aside> </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 %} {% if post.replies|length %}
<section class="replies"> <section class="replies">
<h6><a name="replies"></a>Replies</h6> <h2><a name="replies"></a>Replies</h2>
<ol> <ol>
{% for mtime, comment in post.replies %} {% for mtime, comment in post.replies %}
{% include 'Comment.html' %} {% include 'Comment.html' %}
@ -106,7 +124,7 @@
{% endif %} {% endif %}
{% if post.reactions|length %} {% if post.reactions|length %}
<section class="reactions"> <section class="reactions">
<h6><a name="reactions"></a>Reactions</h6> <h2><a name="reactions"></a>Reactions</h2>
<dl> <dl>
{% for character, comments in post.reactions.items() %} {% for character, comments in post.reactions.items() %}
<dt>{{ character }}</dt> <dt>{{ character }}</dt>

View file

@ -1,6 +1,9 @@
{% if post.is_reply %} {% if post.is_reply %}
<span class="p-name"> <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 }}"> <a href="{{ post.is_reply }}" class="u-in-reply-to" title="Reply to: {{ post.is_reply }}">
{{ post.is_reply }} {{ post.is_reply }}
</a> </a>

View file

@ -7,27 +7,27 @@
<dl class="exif"> <dl class="exif">
{% if photo.exif.camera %} {% if photo.exif.camera %}
<dt>Camera</dt> <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 %} {% endif %}
{% if photo.exif.aperture %} {% if photo.exif.aperture %}
<dt>Aperture</dt> <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 %} {% endif %}
{% if photo.exif.shutter_speed %} {% if photo.exif.shutter_speed %}
<dt>Shutter speed</dt> <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 %} {% endif %}
{% if photo.exif.focallength %} {% if photo.exif.focallength %}
<dt>Focal length (as set)</dt> <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 %} {% endif %}
{% if photo.exif.iso %} {% if photo.exif.iso %}
<dt>Sensitivity</dt> <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 %} {% endif %}
{% if photo.exif.lens %} {% if photo.exif.lens %}
<dt>Lens</dt> <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 %} {% endif %}
</dl> </dl>
{% endif %} {% endif %}

View file

@ -1,6 +1,7 @@
<footer class="content-footer" id="main-footer"> <footer class="content-footer" id="main-footer">
<nav class="footer-contact p-author h-card vcard limit"> <nav class="footer-contact p-author h-card vcard limit">
<h2>Author</h2>
<dl> <dl>
<dt>name</dt> <dt>name</dt>
<dd> <dd>
@ -9,20 +10,17 @@
</dd> </dd>
<dt>email</dt> <dt>email</dt>
<dd> <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> <a rel="me" class="u-email email" href="mailto:{{ site.author.email }}">{{ site.author.email }}</a>
</dd> </dd>
{% if site.author.sip %} {% if site.author.sip %}
<dt>SIP</dt> <dt>SIP</dt>
<dd> <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> <a rel="me" class="u-sip sip" href="sip:{{ site.author.sip }}">sip:{{ site.author.sip }}</a>
</dd> </dd>
{% endif %} {% endif %}
{% if site.author.gpg %} {% if site.author.gpg %}
<dt>GPG/PGP public key</dt> <dt>GPG/PGP public key</dt>
<dd> <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> <a rel="me" class="u-gpg gpg" href="{{ site.url }}/{{ site.author.gpg }}">GPG key</a>
</dd> </dd>
{% endif %} {% endif %}
@ -32,7 +30,6 @@
<dt>{{ silo }}</dt> <dt>{{ silo }}</dt>
<dd> <dd>
<svg class="icon"><use xlink:href="#icon-{{ silo }}" /></svg>
<a rel="me" class="u-{{ silo }} url u-url" href="{{ url }}">{{ silo }}</a> <a rel="me" class="u-{{ silo }} url u-url" href="{{ url }}">{{ silo }}</a>
</dd> </dd>
{% endfor %} {% endfor %}
@ -40,5 +37,7 @@
</nav> </nav>
</footer> </footer>
{% include 'symbols.svg' %}
</body> </body>
</html> </html>

View file

@ -3,7 +3,6 @@
</style> </style>
</head> </head>
<body> <body>
{% include 'symbols.svg' %}
<header class="content-header" id="main-header"> <header class="content-header" id="main-header">
<nav class="content-navigation"> <nav class="content-navigation">
@ -14,7 +13,7 @@
{% set cssclass = 'active' %} {% set cssclass = 'active' %}
{% endif %} {% endif %}
<a title="home" href="/" class="{{ cssclass }}"> <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 home
</a> </a>
</li> </li>
@ -24,7 +23,7 @@
{% endif %} {% endif %}
<li> <li>
<a title="photos" href="/category/photo/" class="{{ cssclass }}"> <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 photos
</a> </a>
</li> </li>
@ -34,7 +33,7 @@
{% endif %} {% endif %}
<li> <li>
<a title="journal" href="/category/journal/" class="{{ cssclass }}"> <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 journal
</a> </a>
</li> </li>
@ -44,7 +43,7 @@
{% endif %} {% endif %}
<li> <li>
<a title="IT" href="/category/article/" class="{{ cssclass }}"> <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 IT
</a> </a>
</li> </li>
@ -54,7 +53,7 @@
{% endif %} {% endif %}
<li> <li>
<a title="notes" href="/category/note/" class="{{ cssclass }}"> <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 notes
</a> </a>
</li> </li>

View file

@ -148,7 +148,7 @@ h2 {
h3 { h3 {
font-size: 1rem; font-size: 1rem;
border-bottom: 1px dotted #777; border-bottom: 1px dotted #777;
} }
.icon { .icon {
@ -183,7 +183,7 @@ pre {
code { code {
padding: 0.1rem; padding: 0.1rem;
} }
pre code { pre code {
@ -220,51 +220,6 @@ code.sourceCode span.va { color: turquoise; }
margin: 1rem auto; 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,
.footnoteRef:hover { .footnoteRef:hover {
@ -319,7 +274,6 @@ code.sourceCode span.va { color: turquoise; }
color: #ccc; color: #ccc;
} }
.content-header a, .content-header a,
.content-footer a { .content-footer a {
color: #cccccc; color: #cccccc;
@ -361,6 +315,7 @@ code.sourceCode span.va { color: turquoise; }
font-size: 0.86rem; font-size: 0.86rem;
} }
.content-footer h2,
.content-footer svg, .content-footer svg,
.content-footer dl dt { .content-footer dl dt {
display:none; display:none;
@ -445,19 +400,85 @@ input[type=submit]:hover {
border-bottom: 3px solid #fefefe; 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 { figure {
margin: 1rem 0; margin: 1rem 0;
position:relative;
}
figcaption dl * {
font-size: 0.5rem;
} }
figcaption { figcaption {
background-color: #111; max-width: 72ch;
text-align: left;
max-width: 722px;
margin: 0 auto; margin: 0 auto;
background-color: #111;
padding: 0.6rem; padding: 0.6rem;
} }
.adaptimg { .adaptimg {
display: block; display: block;
max-height: 98vh; max-height: 98vh;
@ -490,14 +511,11 @@ figcaption {
border-bottom-color: #fff; border-bottom-color: #fff;
} }
.more { /*
display:block;
font-weight:bold;
}
.more a:before { .more a:before {
content:'Continue \00BB'; content:'Continue \00BB';
} }
*/
.pagination ul { .pagination ul {
text-align:center; text-align:center;
@ -542,14 +560,14 @@ figcaption {
.w25 { .w25 {
width: 24%; width: 24%;
} }
/*
.u-in-reply-to::before { .u-in-reply-to::before {
content: 'RE:'; content: 'RE:';
dislay: inline-block; dislay: inline-block;
margin-right: 0.3rem; margin-right: 0.3rem;
font-weight: bold; font-weight: bold;
} }
*/
.search-section { .search-section {
margin-bottom: 1rem; margin-bottom: 1rem;
@ -639,7 +657,7 @@ figcaption {
*/ */
/* above is mobile first; this is the desktop */ /* 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 { .content-navigation ul li a {
font-size: 0.9rem; font-size: 0.9rem;
@ -658,6 +676,19 @@ figcaption {
margin: 0.1rem; margin: 0.1rem;
} }
figcaption {
position: absolute;
right: 0;
top: 0;
max-width: 28%;
}
.adaptimg {
max-width: 70%;
margin: 0;
}
} }

View file

@ -62,10 +62,4 @@
<symbol id="icon-creative-commons" viewBox="0 0 16 16"> <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> <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>
<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> </svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB