version 2.2.0 - mostly design cleanups
@@ -3,11 +3,11 @@ # -*- coding: utf-8 -*-
# vim: set fileencoding=utf-8 : __author__ = "Peter Molnar" -__copyright__ = "Copyright 2017, Peter Molnar" +__copyright__ = "Copyright 2018, Peter Molnar" __license__ = "GPLv3" -__version__ = "2.0" +__version__ = "2.2.0" __maintainer__ = "Peter Molnar" -__email__ = "hello@petermolnar.eu" +__email__ = "mail@petermolnar.net" __status__ = "Production" """
@@ -1,3 +1,35 @@
+#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# vim: set fileencoding=utf-8 : + +__author__ = "Peter Molnar" +__copyright__ = "Copyright 2017-2018, Peter Molnar" +__license__ = "GPLv3" +__version__ = "2.1.0" +__maintainer__ = "Peter Molnar" +__email__ = "mail@petermolnar.net" +__status__ = "Production" + +""" + fancy email module of NASG + Copyright (C) 2017-2018 Peter Molnar + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +""" + + from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage
@@ -5,9 +5,9 @@
__author__ = "Peter Molnar" __copyright__ = "Copyright 2017-2018, Peter Molnar" __license__ = "GPLv3" -__version__ = "2.1.0" +__version__ = "2.2.0" __maintainer__ = "Peter Molnar" -__email__ = "hello@petermolnar.eu" +__email__ = "mail@petermolnar.net" __status__ = "Production" """@@ -194,9 +194,10 @@ feeddir = 'feed'
pagedir = 'page' taxonomy = 'category' - def __init__(self, name=''): + def __init__(self, name='', is_front=False): self.name = name self.topics = NoDupeContainer() + self.is_front = is_front super().__init__() def append(self, post):@@ -297,6 +298,7 @@ years[year].append(post.tmplvars)
tmplvars = { 'taxonomy': { + 'add_welcome': self.is_front, 'title': self.title, 'name': self.name, 'lastmod': arrow.get(self.mtime).format(@@ -364,16 +366,23 @@ fg.logo('%s/favicon.png' % shared.site.get('url'))
fg.updated(arrow.get(self.mtime).to('utc').datetime) for p in reversed(posttmpls): - link = '%s/%s' % (shared.site.get('url'), p.get('slug')) + link = '%s/%s/' % (shared.site.get('url'), p.get('slug')) dt = arrow.get(p.get('pubtime')).to('utc') + content = p.get('html') + if p.get('photo'): + content = "%s\n\n%s" % (p.get('photo'), content) + fe = fg.add_entry() fe.id(link) - fe.link(href='%s/' % (link)) + fe.link(href=link) fe.title(p.get('title')) fe.published(dt.datetime) fe.updated(dt.datetime) - fe.content(content=p.get('html'), type='CDATA') + fe.content( + content, + type='CDATA' + ) fe.rights('%s %s %s' % ( dt.format('YYYY'), shared.site.get('author').get('name'),@@ -383,6 +392,9 @@
with open(o, 'wb') as f: f.write(fg.atom_str(pretty=True)) + #with open(o.replace('.xml', '.rss'), 'wb') as f: + #f.write(fg.rss_str(pretty=True)) + # ping pubsub r = requests.post( shared.site.get('websub').get('hub'),@@ -397,7 +409,12 @@ def render_paginated(self):
pagination = shared.config.getint('display', 'pagination') pages = ceil(len(self.data) / pagination) page = 1 + + while page <= pages: + add_welcome = False + if (self.is_front and page == 1): + add_welcome = True # list relevant post templates start = int((page - 1) * pagination) end = int(start + pagination)@@ -413,6 +430,7 @@ # TODO move the pagination links here, the one in jinja
# is overcomplicated tmplvars = { 'taxonomy': { + 'add_welcome': add_welcome, 'title': self.title, 'name': self.name, 'page': page,@@ -489,6 +507,8 @@ wdb.entry_done(incoming.get('id'))
wdb.finish() def queue_webmentions(self): + if self.is_future: + return wdb = shared.WebmentionQueue() for target in self.urls_to_ping: if not wdb.exists(self.url, target, self.published):@@ -728,6 +748,10 @@ return "RE: %s" % self.is_reply
return self.published.format(shared.ARROWFORMAT['display']) @property + def review(self): + return self.meta.get('review', False) + + @property def summary(self): s = self.meta.get('summary', '') if not s:@@ -785,12 +809,20 @@ 'replies': self.replies,
'reactions': self.reactions, 'syndicate': self.syndicate, 'tags': self.tags, - 'photo': False + 'photo': False, + 'enclosure': False, + 'review': self.review } if self.photo: self._tmplvars.update({ - 'photo': str(self.photo) + 'photo': str(self.photo), + 'enclosure': { + 'mime': self.photo.mime_type, + 'size': self.photo.mime_size, + 'url': self.photo.href + } }) + return self._tmplvars async def render(self):@@ -845,6 +877,16 @@ 'tags': list(set(self.meta.get('Subject', []))),
} @property + def mime_type(self): + return str(self.meta.get('MIMEType', 'image/jpeg')) + + @property + def mime_size(self): + if not self.is_downsizeable: + return int(os.path.getsize(self.fpath)) + return int(self.sizes[-1][1]['fsize']) + + @property def href(self): if len(self.target): return self.target@@ -996,7 +1038,8 @@ 'crop': shared.config.getboolean(
'crop', size, fallback=False - ) + ), + 'fsize': os.path.getsize(fpath) } )) return sorted(sizes, reverse=False)@@ -1174,7 +1217,6 @@ shared.config.getint('photo', 'default'),
width, height ) - @property def tmplvars(self):@@ -1481,7 +1523,7 @@ content = Content()
sdb = shared.SearchDB() magic = MagicPHP() - collector_front = Category() + collector_front = Category(is_front=True) collector_categories = NoDupeContainer() sitemap = {}
@@ -5,9 +5,9 @@
__author__ = "Peter Molnar" __copyright__ = "Copyright 2017-2018, Peter Molnar" __license__ = "GPLv3" -__version__ = "2.1.0" +__version__ = "2.2.0" __maintainer__ = "Peter Molnar" -__email__ = "hello@petermolnar.eu" +__email__ = "mail@petermolnar.net" __status__ = "Production" """
@@ -5,13 +5,21 @@ <link rel="self" href="{{ site.url }}{{ taxonomy.feed }}/" />
{% include 'block_header_close.html' %} +{% if taxonomy.add_welcome %} +<aside class="siteinfo limit"> + <p>Hi!</p> + <p>Your are on a personal homepage. It has been my home one the Internet for many years, although the URL had changed a few times. It's <a href="https://indieweb.org/">IndieWeb</a>-compatible, and all content is produced by me. </p> + <p>This page is a feed of everything that gets on the site.</p> +</aside> +{% endif %} + <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> + <a title="follow {{ taxonomy.title }}" rel="feed" href="{{ site.url }}{{ taxonomy.feed }}">Atom feed</a> </p> </aside>
@@ -11,7 +11,7 @@ <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> + <a title="follow {{ taxonomy.title }}" rel="feed" href="{{ site.url }}{{ taxonomy.feed }}">XML feed</a> </p> </aside>
@@ -1,9 +1,12 @@
<li class="h-entry p-comment"> - <span> - <time class="dt-published" datetime="{{ comment.pubtime }}"> - {{ comment.pubdate }} - </time> +{% if 'webmention' != comment.type %} + <span class="reaction"> + <a class="u-url" href="{{ comment.source }}">{{ comment.type }} </a> </span> +{% endif %} + <time class="dt-published" datetime="{{ comment.pubtime }}"> + {{ comment.pubdate }} + </time> from <span class="p-author h-card"> {% if comment.author.url %} <a class="url u-url" href="{{ comment.author.url }}">@@ -12,17 +15,13 @@ </a>
{% else %} <span class="p-name fn">{{ comment.author.name }}</span> {% endif %} - </span> + </span><br /> {% if 'webmention' == comment.type %} <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> {% endif %} </li>
@@ -17,6 +17,23 @@ <header>
<h1>{% include 'Singular_title.html' %}</h1> </header> +{% if post.review %} + <div class="h-review hreview"> + <h2>Review summary</h2> + <p> + <a href="{{ post.review.url }}" class="p-name url fn p-item h-product">{{ post.review.title }}</a> + </p> + <p> + <span class="rating"> + <span class="value">{{ post.review.rating }}</span> + out of + <span class="best">5</span> + </span> + </p> + <p class="p-summary">{{ post.review.summary }}</p> + </div> +{% endif %} + {% if post.summary %} <div class="e-summary entry-summary"> {{ post.summary }}@@ -34,66 +51,72 @@ </div>
</div> <footer> - <p class="published"> - <time class="dt-published" datetime="{{ post.pubtime }}">{{ post.pubdate }}</time> - </p> - <div class="hide"> - {% include 'block_author.html' %} - </div> - <p class="hide"> - <a class="u-url u-uuid" rel="bookmark" href="{{ site.url}}/{{ post.slug }}/"></a> - </p> - <p class="license"> + <dl> + <dt>Published</dt> + <dd class="published"> + <time class="dt-published" datetime="{{ post.pubtime }}">{{ post.pubdate }}</time> + </dd> + <dt>Author</dt> + <dd> + {% include 'block_author.html' %} + </dd> + <dt>Entry URL</dt> + <dd> + <a class="u-url u-uuid" rel="bookmark" href="{{ site.url}}/{{ post.slug }}/">{{ site.url}}/{{ post.slug }}/</a> + </dd> + <dt>License</dt> + <dd 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> + <a rel="license" href="https://creativecommons.org/licenses/by/4.0/" class="u-license">CC BY 4.0</a> <svg class="icon" width="16" height="16"> <use xlink:href="#icon-creative-commons" /> - </svg> + </svg><br /> 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> + <a rel="license" href="https://creativecommons.org/licenses/by-nc/4.0/" class="u-license">CC BY-NC 4.0</a> <svg class="icon" width="16" height="16"> <use xlink:href="#icon-creative-commons" /> - </svg> + </svg><br /> 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> + <a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/" class="u-license">CC BY-NC-ND 4.0</a> <svg class="icon" width="16" height="16"> <use xlink:href="#icon-creative-commons" /> - </svg> + </svg><br /> 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> + </dd> + <dt class="noprint">Leave a tip</dt> + <dd class="donation"> + <p> + {% if post.category == 'photo' %} + Did you like this photo?<br />Leave a tip! If you're interested in prints, please get in touch. + {% elif post.category == 'article' %} + Did you find this article useful?<br />Support me, so I can write more like this.<br />If you want my help for your project, get in touch. + {% elif post.category == 'journal' %} + Did you like this entry?<br />Encourage me to write more of them. + {% else %} + Did you like what you read?<br />Leave a tip!</a> + {% endif %} + </p> + <ul> + {% for method, data in site.tips.items() %} + <li> + <a rel="payment" title="pay {{ site.author.name }} via {{ data.label }} {{ data.value }}" href="{{ data.url }}"> + {{ data.value }} + <span class="method"> + <svg class="icon" width="16" height="16"> + <use xlink:href="#icon-{{ method }}"></use> + </svg> + with {{ data.label }} + </span> + </a> + </li> + {% endfor %} + </ul> + </dd> </footer> - <aside class="donation"> - <p> - {% if post.category == 'photo' %} - Did you like this photo?<br />Leave a tip! If you're interested in prints, please get in touch. - {% elif post.category == 'article' %} - Did you find this article useful?<br />Buy me a coffee, so I can write more like this.<br />If you want my help for your project, get in touch. - {% elif post.category == 'journal' %} - Did you like this entry?<br />Encourage me to write more of them. - {% else %} - Did you like what you read?<br />Leave a tip!</a> - {% endif %} - </p> - <ul> - {% for method, data in site.tips.items() %} - <li> - <a rel="payment" title="pay {{ site.author.name }} via {{ data.label }} {{ data.value }}" href="{{ data.url }}"> - {{ data.value }} - <span class="method"> - <svg class="icon" width="16" height="16"> - <use xlink:href="#icon-{{ method }}"></use> - </svg> - with {{ data.label }} - </span> - </a> - </li> - {% endfor %} - </ul> - </aside> {% if post.syndicate|length %} <section class="syndication">
@@ -3,7 +3,7 @@ {% if photo.target %}<a href="{{ photo.target }}" class="{{ photo.css }}">{% endif %}
<img src="{{ photo.src }}" title="{{ photo.title }}" alt="{{ photo.alt }}" class="adaptimg" width="{{ photo.width }}" height="{{ photo.height }}" /> {% if photo.target %}</a>{% endif %} <figcaption> -{{ photo.alt }}{% if photo.is_photo %}<span class="author"> - photo by {{ photo.author }}</span> +<span class="alt">{{ photo.alt }}</span>{% if photo.is_photo %}<span class="author"> - photo by {{ photo.author }}</span> <dl class="exif"> {% if photo.exif.camera %} <dt>Camera</dt>
@@ -1,23 +0,0 @@
-{% include 'block_header_open.html' %} -{% include 'block_header_close.html' %} - -<section class="content-body"> -{% for tname, posts in taxonomies %} - <details> - <summary>{{ tname }} [{{ posts|length }}]</summary> - <ol> - {% for post in posts %} - <li> - {{ post.title }} - <br /> - <a href="{{ post.url }}" title="{{ post.title }}"> - {{ post.url }} - </a> - </li> - {% endfor %} - </ol> - </details> -{% endfor %} -</section> - -{% include 'block_footer.html' %}
@@ -1,36 +0,0 @@
-{% include 'block_header_open.html' %} - <title>comment #{{ reply.id }} | {{ site.domain }}</title> - <link rel="canonical" href="{{ site.url }}/{{ site.commentspath }}/{{ reply.fname }}/" /> - <meta name="author" content="{{ reply.author.name }}"> -{% include 'block_header_close.html' %} - -<section class="content-body"> - <article class="h-entry p-comment"> - <a class="u-url u-uuid" href="{{ site.url }}/{{ site.commentspath }}/{{ reply.fname }}/"></a> - <header> - <div class="p-author h-card"> - {% if reply.author.url %} - <a class="url u-url" href="{{ reply.author.url }}"> - <span class="p-name fn">{{ reply.author.name }}</span> - </a> - {% else %} - <span class="p-name fn">{{ reply.author.name }}</span> - {% endif %} - </div> - <time class="dt-published" datetime="{{ reply.published|date('c') }}"> - {{ reply.published|date('%Y-%m-%d %H:%M') }} - </time> - </header> - <div class="e-content"> - {{ reply.html }} - </div> - <footer> - {% if reply.source|length > 0 %} - <a href="{{ reply.source }}" class="u-repost-of">{{ reply.source }}</a> - {% endif %} - <a class="u-in-comment-to" href="{{ reply.target }}"></a> - </footer> - </article> -</section> - -{% include 'block_footer.html' %}
@@ -1,32 +0,0 @@
-{% include 'block_header_open.html' %} -{% if post.title %} -<title>{{ post.title }} | {{ site.domain }}</title> -{% else %} -<title>{{ post.name }} | {{ site.domain }}</title> -{% endif %} -{% include 'block_header_close.html' %} - - -<section class="content-body"> - <article class="h-entry singular"> - <header> - <div class="content-inner hide"> - <h1> - <a class="u-url" href="/{{ post.slug }}" rel="bookmark" title="{{ post.title }}"> - <span class="p-name">{{ post.title }}</span> - </a> - </h1> - </div> - </header> - - <div class="e-content"> - <div class="content-inner"> - {{ post.html }} - <br class="clear" /> - </div> - </div> - - </article> -</section> - -{% include 'block_footer.html' %}
@@ -68,15 +68,15 @@ font-style: italic;
} p { - padding: 0.6rem 0; + padding: 0.6em 0; } li { - margin-left: 1.3rem; + margin-left: 1.3em; } ul li { - line-height: 1.6rem; + line-height: 1.6em; } li p {@@ -85,8 +85,8 @@ padding: 0;
} blockquote { - margin: 0.6rem; - padding-left: 0.6rem; + margin: 0.6em; + padding-left: 0.6em; border-left: 4px solid #999; color: #999; }@@ -98,7 +98,7 @@ width: 100%;
} td, th { - padding: 0.3rem; + padding: 0.3em; border: 1px solid #111; text-align:left; }@@ -115,15 +115,28 @@ tr:nth-child(even) {
background-color: #444; } +.content-header a, +.content-header a:hover, +.content-footer a, +.content-footer a:hover, +.footnoteRef a, +pre code, +.h-review h2, +input, +.reactions h2, +.replies h2, +.syndication h2, +hr { + border: none; +} + hr { display: block; height: 1px; - border: none; border-top: 1px solid #444; - margin: 1rem 0; + margin: 1em 0; clear:both; } - h1, h2, h3, h4, h5, h6, dt { font-weight:bold;@@ -131,43 +144,40 @@ clear:both;
} h1, h2, h3, h4, h5, h6 { - margin: 1.3rem 0 0.3rem 0; - padding: 0 0 0.3rem 0; + margin: 1.3em 0 0.3em 0; + padding: 0 0 0.3em 0; } h1 { - font-size: 1.2rem; + font-size: 1.2em; margin-top: 0; } h2 { - font-size: 1.1rem; + font-size: 1.1em; border-bottom: 2px solid #999; } h3 { - font-size: 1rem; + font-size: 1em; border-bottom: 1px dotted #777; } .icon { - /* svg sharpness hack */ transform: rotate(0deg); width: 16px; height: 16px; display: inline-block; fill: currentColor; - vertical-align:middle; overflow: visible; - vertical-align:calc; - margin-right: 0.1rem; + vertical-align:middle; } code, pre { font-family: "Courier New", "Courier", monospace; - font-size: 0.8rem; + font-size: 0.8em; color: limegreen; background-color: #222; border: 1px solid #666;@@ -178,16 +188,11 @@ }
pre { overflow: auto; - padding: 0.3rem; + padding: 0.3em; } code { - padding: 0.1rem; - -} - -pre code { - border: none; + padding: 0.1em; } code.sourceCode span.al { color: limegreen; }@@ -219,22 +224,30 @@ max-width: 72ch;
margin: 0 auto; } +.siteinfo { + line-height: 1.4em; + font-size: 0.9em; + padding: 1em; + font-style: italic; + color: #999; +} + +.footnotes ol li { + margin-bottom: 0.3em; +} + .footnoteRef, .footnoteRef:hover { border: 0; white-space: nowrap; } -.footnoteRef a { - border: none; -} - .footnoteRef sup { vertical-align: baseline; position: relative; - top: -0.3rem; - font-size: 0.8rem; - margin-right: 0.1rem; + top: -0.3em; + font-size: 0.8em; + margin-right: 0.1em; } .footnoteRef sup:before,@@ -242,10 +255,6 @@ .footnoteRef sup:after {
color: #33c; } -.footnotes ol li { - margin-bottom: 0.3rem; -} - .comments ol .u-repost-of, .footnotes ol li a { display: inline-block;@@ -257,14 +266,14 @@ max-width: 80%;
} .footnotes ol li a[href^="#"] { - margin: 0 0 0 0.6rem; + margin: 0 0 0 0.6em; max-width: 20%; - font-size: 0.6rem; + font-size: 0.6em; } .footnotes ol li a[href^="#"]:after { content: "back to text"; - margin: 0 0 0 0.2rem; + margin: 0 0 0 0.2em; color: #666; }@@ -275,25 +284,22 @@
.content-header a, .content-footer a { color: #cccccc; - border: none; } .content-header a:hover, .content-footer a:hover { color: #fefefe; - border: none; } .content-footer { - margin-top: 2rem; - padding: 0.3rem 0; + margin-top: 2em; + padding: 1em 0 0.6em 0; text-align: center; } .content-footer * { color: #999; display: inline-block; - vertical-align: top; } .content-footer a {@@ -305,18 +311,14 @@ color: #eee;
} .content-footer img { - width: 1rem; - margin: 0 0.3rem 0rem 0; + width: 1em; + margin: 0 0.3em 0em 0; } .content-footer dl { - font-size: 0.86rem; + font-size: 0.86em; } -.content-footer h2 { - display:none; - visibility: hidden; -} .content-footer dl dd, .content-footer dl dt,{@@ -325,7 +327,7 @@ }
.content-footer dl dd:after { content: '\00B7'; - margin: 0 0.3rem; + margin: 0 0.3em; } .content-footer dl dd:last-of-type:after {@@ -334,30 +336,28 @@ }
input { vertical-align:middle; - border: none; border-bottom: 3px solid #aaa; background-color: transparent; color: #ccc; - height: 1.6rem; - width: 6rem; - font-size: 0.8rem; + height: 1.6em; + width: 6em; + font-size: 0.8em; } -input[type=submit] { - - width: 2.2rem; +input.search-submit { + width: 3em; cursor: pointer; } input:focus, -input[type=submit]:hover { +input.search-submit:hover { border-bottom: 3px solid #fff; color: #fff; } .search-form { display: block; - padding: 0.3rem 0.1rem; + padding: 0.3em 0.1em; text-align: center; }@@ -370,18 +370,18 @@ }
.content-navigation ul li { margin:0; - padding: 0.3rem 0.3rem 0.3rem 0; + padding: 0.3em 0.3em 0.3em 0; display: inline-block; text-align: center; } .content-navigation ul li a { display:block; - padding:0 0.2rem; + padding:0 0.2em; font-weight: bold; border-bottom: 3px solid transparent; text-align: center; - font-size: 0.7rem; + font-size: 0.7em; } .content-navigation ul li a svg {@@ -398,29 +398,29 @@ border-bottom: 3px solid #fefefe;
} .h-feed h2 { - margin-bottom: 1rem; + margin-bottom: 1em; } .h-feed .h-entry { - margin: 0 1rem; + margin: 0 1em; } .h-feed .h-entry h3 { - font-size: 0.9rem; + font-size: 0.9em; } .h-feed .h-entry .e-summary, .h-feed .h-entry .e-content { - font-size: 0.8rem; + font-size: 0.8em; } .h-feed .h-entry .e-content { - margin-bottom: 3rem; + margin-bottom: 3em; } .h-entry.singular { - padding: 0 0.6rem; - font-size: 0.9rem; + padding: 0 0.6em; + font-size: 0.9em; } .h-entry .e-content a,@@ -432,20 +432,19 @@ .h-entry a:hover {
color:#71B3F4; } -/* -.h-feed .h-entry a.has-summary::after { - content: '\00BB'; +.h-entry.singular h1 { + margin: 2em 0 1em 0; } -*/ -.h-entry.singular h1 { - margin: 2rem 0 1rem 0; +.h-entry.singular footer { + margin: 2em 0; + font-size: 0.9em; } .h-entry.singular footer p { - color: #999; - padding: 0.3rem 0; + padding: 0.3em 0; display: inline-block; + color: #aaa; } .h-entry.singular footer a {@@ -456,32 +455,100 @@ .h-entry.singular footer a:hover {
color: #eee; } -.h-entry.singular footer { - margin: 2rem 0; +.h-entry.singular footer dl, +.h-entry.singular footer dt, +.h-entry.singular footer dd { + vertical-align:top; +} + +.h-entry.singular footer dt { + display: inline-block; + width: 18%; + margin: 0 1% 0 0; + text-align: right; +} + +.h-entry.singular footer dd { + display: inline-block; + width: 80%; } -.reactions h2, -.replies h2, -.syndication h2 { - border:none; + +.h-entry.singular footer img { + width: 1em; + height: auto; +} + +.donation ul, +.donation li { + list-style-type: none; +} + +.donation li { + margin: 0.6em 0.6em 0.6em 0; + display: inline-block; +} + +.donation p { + line-height: 1.2em; +} + +.donation li a { + display: inline-block; + border: 1px dashed #933; + padding: 0.6em 1em; + background-color: #111; + width: 16em; +} + +.donation .method { + margin-left: 0.6em; +} + +.donation li a:hover { + border: 1px solid #933; + color: #fff; } figure { - margin: 1rem 0; + margin: 1em 0; position:relative; + overflow: hidden; } -figcaption dl * { - font-size: 0.5rem; +figure figcaption { + padding: 0.3em 0; + text-align: center; } -figcaption { - max-width: 72ch; - margin: 0 auto; - background-color: #111; - padding: 0.6rem; +.exif { + font-size: 0.8em; +} + +figcaption .alt, +figcaption .author, +.h-feed figcaption, +.content-footer h2, +.reactions dl dt, +.reactions dl ul time, +.hide, +.exif dt { + display: none; + visibility: hidden; } +.exif dd { + display: inline-block; + margin: 0 0.6em 0 0; +} + +.exif .icon { + margin: 0 0.2em; + width: 1em; + vertical-align:text-bottom; +} + + .adaptimg { display: block; max-height: 98vh;@@ -490,20 +557,20 @@ width:auto;
height:auto; margin: 0 auto; padding: 0; - outline: 1px solid #000; + border: 1px solid #000; } .follow { cursor:pointer; display:block; text-align:right; - margin: 0.6rem 0; - font-size: 0.8rem; + margin: 0.6em 0; + font-size: 0.8em; } .follow a, .pagination a { - padding: 0 0 0.3rem 0; + padding: 0 0 0.3em 0; border-bottom: 3px solid #999; }@@ -515,7 +582,6 @@
.pagination ul { text-align:center; list-style-type: none; - font-size: 1.2rem; } .pagination li {@@ -524,23 +590,7 @@ }
.pagination a, .pagination span { - padding: 0.3rem 0.6rem; -} - -.exif { - font-size: 0.7rem; - margin-top: 0.3rem; -} - -.hide, -.exif dt { - display: none; - visibility: hidden; -} - -.exif dd { - display: inline-block; - margin: 0 0.6rem 0 0; + padding: 0.3em; } .w25,@@ -557,97 +607,71 @@ width: 24%;
} .search-section { - margin-bottom: 1rem; + margin-bottom: 1em; } .search-section summary { border-bottom: 2px solid #999; - padding: 0.3rem 0; + padding: 0.3em 0; font-weight: bold; } .search-section li { - margin: 1rem 0.6rem; + margin: 1em 0.6em; +} + +.replies { + font-size: 0.9em; } .replies ol { - margin: 0 0 0 1rem; + margin: 0 0 0 1em; } .replies li { - margin: 0 0 1rem 0; -} - -.replies li .p-author:before { - content: '\00B7'; - margin: 0 0.3rem; -} - -.replies li time { - font-size: 0.8rem; + margin: 0 0 1em 0; } .replies li .source { display: block; } -.reactions dl dt, -.reactions dl ul time { - display:none; - visibility: hidden; -} - .reactions dl ul, .reactions dl ul li { list-style-type: none; - display: inline-block; - padding: 0; - margin: 0 1rem 0 0; + margin: 0; } -.donation { - text-align: center; -} - -.donation ul { - list-style-type: none; +.h-review { + padding: 1em; + border: 2px dotted #999; + margin: 1em 0; } -.donation li { - display: inline; +.h-review h2 { + margin: 0; } - -.donation li a { - display: inline-block; - border: 1px dashed #933; - padding: 0.3rem; - background-color: #111; - width: 8rem; +.h-review p { + line-height: 1.2em; + margin: 0; + padding: 0.3em 0; } -.donation li .method { - display: block; - font-size: 0.7rem; +.h-review .rating { + font-size: 0.9em; } - -.donation li a:hover { - border: 1px solid #933; +.h-review .rating .best, +.h-review .rating .value { color: #fff; -} -/* -.donation li a { - display: block; + font-weight: bold; } -*/ - -/* above is mobile first; this is the desktop */ -@media all and (min-width: 56rem) { +@media all and (min-width: 56em) { .content-navigation ul li a { - font-size: 0.9rem; + font-size: 0.9em; } .content-navigation ul li a svg { display:inline-block;@@ -660,22 +684,8 @@ }
.search-form { float:right; - margin: 0.1rem; - } - - figcaption { - position: absolute; - right: 0; - top: 0; - max-width: 28%; + margin: 0.1em; } - - - .adaptimg { - max-width: 70%; - margin: 0; - } - }@@ -704,13 +714,21 @@
h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + + h3, + a, + .footnotes ol li a, + .h-feed .h-entry, + code, + pre { + border: none; + } p, li, blockquote, figure, .footnotes { page-break-inside: avoid !important; } a { - border: none; color: #000; }@@ -726,7 +744,8 @@ audio,
.footnotes ol li a[href^="#"], .footnotes ol li a[href^="#"]:after, .exif svg, - .donation { + .donation, + .noprint { display:none; visibility: hidden; }@@ -735,24 +754,22 @@ .footnotes ol li a {
display: block; overflow: visible; white-space: normal; - border: none; } code, pre { max-width: 96%; - border: none; color: #222; word-break: break-all; word-wrap: break-word; white-space: pre-wrap; overflow:initial; - line-height: 1rem; page-break-inside: enabled; font-family: "Courier", "Courier New", monospace !important; } pre { - border: 1pt solid #999; + border: 1pt dotted #666; + padding: 0.6em; } code.sourceCode span { color: black; }@@ -792,6 +809,5 @@ }
.h-feed .h-entry { page-break-after:always; - border:none; } }