version 2.2.0 - mostly design cleanups

This commit is contained in:
Peter Molnar 2018-04-30 19:44:04 +00:00
parent f84088f311
commit 5e0dc9e0d9
15 changed files with 391 additions and 361 deletions

View file

@ -3,11 +3,11 @@
# 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"
"""

View file

@ -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

64
nasg.py
View file

@ -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 @@ class Category(NoDupeContainer):
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 @@ class Category(NoDupeContainer):
tmplvars = {
'taxonomy': {
'add_welcome': self.is_front,
'title': self.title,
'name': self.name,
'lastmod': arrow.get(self.mtime).format(
@ -364,16 +366,23 @@ class Category(NoDupeContainer):
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 @@ class Category(NoDupeContainer):
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 @@ class Category(NoDupeContainer):
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 @@ class Category(NoDupeContainer):
# is overcomplicated
tmplvars = {
'taxonomy': {
'add_welcome': add_welcome,
'title': self.title,
'name': self.name,
'page': page,
@ -489,6 +507,8 @@ class Singular(object):
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):
@ -727,6 +747,10 @@ class Singular(object):
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', '')
@ -785,12 +809,20 @@ class Singular(object):
'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):
@ -844,6 +876,16 @@ class WebImage(object):
'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):
@ -996,7 +1038,8 @@ class WebImage(object):
'crop',
size,
fallback=False
)
),
'fsize': os.path.getsize(fpath)
}
))
return sorted(sizes, reverse=False)
@ -1175,7 +1218,6 @@ class WebImage(object):
height
)
@property
def tmplvars(self):
src_width, src_height = self.src_size
@ -1481,7 +1523,7 @@ def build():
sdb = shared.SearchDB()
magic = MagicPHP()
collector_front = Category()
collector_front = Category(is_front=True)
collector_categories = NoDupeContainer()
sitemap = {}

View file

@ -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"
"""

View file

@ -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"
"""
@ -431,6 +431,7 @@ class SearchDB(BaseDB):
return False
def search_by_query(self, query):
logging.info("query is: %s", query)
ret = {}
cursor = self.db.cursor()
cursor.execute('''SELECT

View file

@ -5,13 +5,21 @@
{% 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>

View file

@ -11,7 +11,7 @@
<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>

View file

@ -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,7 +15,7 @@
{% 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">
@ -20,9 +23,5 @@
</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>

View file

@ -17,6 +17,23 @@
<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>
<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">

View file

@ -3,7 +3,7 @@
<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>

View file

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

View file

@ -1,13 +1,13 @@
<footer class="content-footer" id="main-footer">
<nav class="footer-contact p-author h-card vcard limit">
<h2>Author</h2>
<h2>Site author</h2>
<dl>
<dt>
<img class="photo avatar u-photo u-avatar" src="{{ site.author.avatar }}" alt="Photo of {{ site.author.name }}" />
</dt>
<dd>
<a class="fn p-name url u-url u-uid" href="{{ site.author.url }}/about.html">
<a class="fn p-name url u-url u-uid" href="/about.html">
{{ site.author.name }}
</a>
</dd>
@ -34,7 +34,7 @@
{% if site.author.gpg %}
<dt>GPG</dt>
<dd>
<a rel="me" class="u-gpg gpg" href="{{ site.url }}/{{ site.author.gpg }}">key</a>
<a rel="me" class="u-gpg gpg" href="/{{ site.author.gpg }}">key</a>
</dd>
{% endif %}
{% if site.author.flickr %}

View file

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

View file

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

View file

@ -68,15 +68,15 @@ em {
}
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 @@ li p {
}
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 @@ table {
}
td, th {
padding: 0.3rem;
padding: 0.3em;
border: 1px solid #111;
text-align:left;
}
@ -115,59 +115,69 @@ 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;
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 {
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 @@ code.sourceCode span.va { color: turquoise; }
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 @@ code.sourceCode span.va { color: turquoise; }
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 @@ code.sourceCode span.va { color: turquoise; }
}
.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 @@ code.sourceCode span.va { color: turquoise; }
.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 @@ code.sourceCode span.va { color: turquoise; }
}
.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 @@ code.sourceCode span.va { color: turquoise; }
.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 @@ code.sourceCode span.va { color: turquoise; }
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 @@ input[type=submit]:hover {
.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 @@ input[type=submit]:hover {
}
.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 @@ input[type=submit]:hover {
color:#71B3F4;
}
/*
.h-feed .h-entry a.has-summary::after {
content: '\00BB';
}
*/
.h-entry.singular h1 {
margin: 2rem 0 1rem 0;
margin: 2em 0 1em 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 @@ input[type=submit]: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;
}
.reactions h2,
.replies h2,
.syndication h2 {
border:none;
.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%;
}
.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 @@ figcaption {
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 @@ figcaption {
.pagination ul {
text-align:center;
list-style-type: none;
font-size: 1.2rem;
}
.pagination li {
@ -524,23 +590,7 @@ figcaption {
.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 @@ figcaption {
}
.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;
.h-review {
padding: 1em;
border: 2px dotted #999;
margin: 1em 0;
}
.donation ul {
list-style-type: none;
.h-review h2 {
margin: 0;
}
.donation li {
display: inline;
.h-review p {
line-height: 1.2em;
margin: 0;
padding: 0.3em 0;
}
.donation li a {
display: inline-block;
border: 1px dashed #933;
padding: 0.3rem;
background-color: #111;
width: 8rem;
.h-review .rating {
font-size: 0.9em;
}
.donation li .method {
display: block;
font-size: 0.7rem;
}
.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 @@ figcaption {
.search-form {
float:right;
margin: 0.1rem;
margin: 0.1em;
}
figcaption {
position: absolute;
right: 0;
top: 0;
max-width: 28%;
}
.adaptimg {
max-width: 70%;
margin: 0;
}
}
@ -704,13 +714,21 @@ figcaption {
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 @@ figcaption {
.footnotes ol li a[href^="#"],
.footnotes ol li a[href^="#"]:after,
.exif svg,
.donation {
.donation,
.noprint {
display:none;
visibility: hidden;
}
@ -735,24 +754,22 @@ figcaption {
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 @@ figcaption {
.h-feed .h-entry {
page-break-after:always;
border:none;
}
}