all repos — nasg @ a506d9d18fe98cf667e45566b3f7be3dd47bbdd3

- added special templates option per category
- changed layout for journal/articles: single page, per year grouping
- adaptimg wide view
Peter Molnar hello@petermolnar.eu
Wed, 28 Mar 2018 14:19:14 +0000
commit

a506d9d18fe98cf667e45566b3f7be3dd47bbdd3

parent

80b7dd39308f1da12a426fc11a98ea0d7a23b348

M nasg.pynasg.py

@@ -196,9 +196,17 @@ taxonomy = 'category'

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

@@ -223,6 +231,19 @@ 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: url = "/%s/%s/" % (

@@ -253,7 +274,70 @@ if not os.path.isdir(x):

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

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

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

@@ -632,10 +705,6 @@

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

@@ -1455,6 +1524,7 @@ # render categories

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 @@ logging.info('copying static files')

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:
M shared.pyshared.py

@@ -671,48 +671,6 @@

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',
M templates/Category.htmltemplates/Category.html

@@ -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 @@ {% if post.summary %}

<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>
A templates/Category_article.html

@@ -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' %}
A templates/Category_journal.html

@@ -0,0 +1,1 @@

+Category_article.html
D templates/Category_photo.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' %}
M templates/Comment.htmltemplates/Comment.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>
M templates/Singular.htmltemplates/Singular.html

@@ -15,12 +15,6 @@ <section class="content-body">

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

<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 @@ <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"><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 @@ {% endfor %}

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

{% 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>
M templates/Singular_title.htmltemplates/Singular_title.html

@@ -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>
M templates/WebImage.htmltemplates/WebImage.html

@@ -7,27 +7,27 @@ {{ photo.alt }}{% if photo.is_photo %}<span class="author"> - photo by {{ photo.author }}</span>

<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 %}
M templates/block_footer.htmltemplates/block_footer.html

@@ -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 @@ <a class="fn p-name url u-url u-uid" href="{{ site.author.url }}/about.html">{{ site.author.name }}</a>

</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,13 +30,14 @@ {% for silo, url in site.author.socials.items() %}

<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 %} </dl> </nav> </footer> + +{% include 'symbols.svg' %} </body> </html>
M templates/block_header_close.htmltemplates/block_header_close.html

@@ -3,7 +3,6 @@ {% include 'style-dark.css' %}

</style> </head> <body> -{% include 'symbols.svg' %} <header class="content-header" id="main-header"> <nav class="content-navigation">

@@ -14,7 +13,7 @@ {% if taxonomy is defined and taxonomy.name == '' %}

{% 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 @@ {% set cssclass = 'active' %}

{% 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 @@ {% set cssclass = 'active' %}

{% 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 @@ {% set cssclass = 'active' %}

{% 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 @@ {% set cssclass = 'active' %}

{% 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>
M templates/style-dark.csstemplates/style-dark.css

@@ -148,7 +148,7 @@

h3 { font-size: 1rem; border-bottom: 1px dotted #777; - + } .icon {

@@ -183,7 +183,7 @@ }

code { padding: 0.1rem; - + } pre code {

@@ -220,51 +220,6 @@ max-width: 72ch;

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 @@ .footnotes ol li a[href^="#"]:hover:after {

color: #ccc; } - .content-header a, .content-footer a { color: #cccccc;

@@ -361,6 +315,7 @@ .content-footer dl {

font-size: 0.86rem; } +.content-footer h2, .content-footer svg, .content-footer dl dt { display:none;

@@ -445,19 +400,85 @@ .content-navigation ul li a: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 { + max-width: 72ch; + margin: 0 auto; background-color: #111; - text-align: left; - max-width: 722px; - margin: 0 auto; padding: 0.6rem; } - .adaptimg { display: block; max-height: 98vh;

@@ -490,14 +511,11 @@ .pagination a:hover {

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

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

*/ /* 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;

@@ -656,6 +674,19 @@

.search-form { float:right; margin: 0.1rem; + } + + figcaption { + position: absolute; + right: 0; + top: 0; + max-width: 28%; + } + + + .adaptimg { + max-width: 70%; + margin: 0; } }
M templates/symbols.svgtemplates/symbols.svg

@@ -62,10 +62,4 @@ </symbol>

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