| @@ -0,0 +1,4 @@ | |||||
| # Pelican LaTeX theme | |||||
| A theme for pelican which mimics the look of LaTeX documents. | |||||
| @@ -0,0 +1,69 @@ | |||||
| .highlight .hll { background-color: #ffffcc } | |||||
| .highlight { background: #f8f8f8; } | |||||
| .highlight .c { color: #408080; font-style: italic } /* Comment */ | |||||
| .highlight .err { border: 1px solid #FF0000 } /* Error */ | |||||
| .highlight .k { color: #008000; font-weight: bold } /* Keyword */ | |||||
| .highlight .o { color: #666666 } /* Operator */ | |||||
| .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ | |||||
| .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ | |||||
| .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ | |||||
| .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ | |||||
| .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ | |||||
| .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ | |||||
| .highlight .gd { color: #A00000 } /* Generic.Deleted */ | |||||
| .highlight .ge { font-style: italic } /* Generic.Emph */ | |||||
| .highlight .gr { color: #FF0000 } /* Generic.Error */ | |||||
| .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | |||||
| .highlight .gi { color: #00A000 } /* Generic.Inserted */ | |||||
| .highlight .go { color: #888888 } /* Generic.Output */ | |||||
| .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ | |||||
| .highlight .gs { font-weight: bold } /* Generic.Strong */ | |||||
| .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | |||||
| .highlight .gt { color: #0044DD } /* Generic.Traceback */ | |||||
| .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ | |||||
| .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ | |||||
| .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ | |||||
| .highlight .kp { color: #008000 } /* Keyword.Pseudo */ | |||||
| .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ | |||||
| .highlight .kt { color: #B00040 } /* Keyword.Type */ | |||||
| .highlight .m { color: #666666 } /* Literal.Number */ | |||||
| .highlight .s { color: #BA2121 } /* Literal.String */ | |||||
| .highlight .na { color: #7D9029 } /* Name.Attribute */ | |||||
| .highlight .nb { color: #008000 } /* Name.Builtin */ | |||||
| .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ | |||||
| .highlight .no { color: #880000 } /* Name.Constant */ | |||||
| .highlight .nd { color: #AA22FF } /* Name.Decorator */ | |||||
| .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ | |||||
| .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ | |||||
| .highlight .nf { color: #0000FF } /* Name.Function */ | |||||
| .highlight .nl { color: #A0A000 } /* Name.Label */ | |||||
| .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ | |||||
| .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ | |||||
| .highlight .nv { color: #19177C } /* Name.Variable */ | |||||
| .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ | |||||
| .highlight .w { color: #bbbbbb } /* Text.Whitespace */ | |||||
| .highlight .mb { color: #666666 } /* Literal.Number.Bin */ | |||||
| .highlight .mf { color: #666666 } /* Literal.Number.Float */ | |||||
| .highlight .mh { color: #666666 } /* Literal.Number.Hex */ | |||||
| .highlight .mi { color: #666666 } /* Literal.Number.Integer */ | |||||
| .highlight .mo { color: #666666 } /* Literal.Number.Oct */ | |||||
| .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ | |||||
| .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ | |||||
| .highlight .sc { color: #BA2121 } /* Literal.String.Char */ | |||||
| .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ | |||||
| .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ | |||||
| .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ | |||||
| .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ | |||||
| .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ | |||||
| .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ | |||||
| .highlight .sx { color: #008000 } /* Literal.String.Other */ | |||||
| .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ | |||||
| .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ | |||||
| .highlight .ss { color: #19177C } /* Literal.String.Symbol */ | |||||
| .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ | |||||
| .highlight .fm { color: #0000FF } /* Name.Function.Magic */ | |||||
| .highlight .vc { color: #19177C } /* Name.Variable.Class */ | |||||
| .highlight .vg { color: #19177C } /* Name.Variable.Global */ | |||||
| .highlight .vi { color: #19177C } /* Name.Variable.Instance */ | |||||
| .highlight .vm { color: #19177C } /* Name.Variable.Magic */ | |||||
| .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ | |||||
| @@ -0,0 +1,404 @@ | |||||
| @import url("pygment.css"); | |||||
| @font-face { | |||||
| font-family: 'Latin Modern'; | |||||
| font-style: normal; | |||||
| font-weight: normal; | |||||
| font-display: swap; | |||||
| src: url('../fonts/LM-regular.woff2') format('woff2'), | |||||
| url('../fonts/LM-regular.woff') format('woff'), | |||||
| url('../fonts/LM-regular.ttf') format('truetype'); | |||||
| } | |||||
| @font-face { | |||||
| font-family: 'Latin Modern'; | |||||
| font-style: italic; | |||||
| font-weight: normal; | |||||
| font-display: swap; | |||||
| src: url('../fonts/LM-italic.woff2') format('woff2'), | |||||
| url('../fonts/LM-italic.woff') format('woff'), | |||||
| url('../fonts/LM-italic.ttf') format('truetype'); | |||||
| } | |||||
| @font-face { | |||||
| font-family: 'Latin Modern'; | |||||
| font-style: normal; | |||||
| font-weight: bold; | |||||
| font-display: swap; | |||||
| src: url('../fonts/LM-bold.woff2') format('woff2'), | |||||
| url('../fonts/LM-bold.woff') format('woff'), | |||||
| url('../fonts/LM-bold.ttf') format('truetype'); | |||||
| } | |||||
| @font-face { | |||||
| font-family: 'Latin Modern'; | |||||
| font-style: italic; | |||||
| font-weight: bold; | |||||
| font-display: swap; | |||||
| src: url('../fonts/LM-bold-italic.woff2') format('woff2'), | |||||
| url('../fonts/LM-bold-italic.woff') format('woff'), | |||||
| url('../fonts/LM-bold-italic.ttf') format('truetype'); | |||||
| } | |||||
| *, *::before, *::after { | |||||
| box-sizing: border-box; | |||||
| } | |||||
| body, h1, h2, h3, h4, p, ul[class], ol[class], li, figure, figcaption, dl, dd { | |||||
| margin: 0; | |||||
| } | |||||
| html, body { | |||||
| height: 98%; | |||||
| max-width: 1280px; | |||||
| margin: auto; | |||||
| } | |||||
| html { | |||||
| font-size: 1rem; | |||||
| scroll-behavior: smooth; | |||||
| } | |||||
| body { | |||||
| display: flex; | |||||
| flex-flow: column nowrap; | |||||
| font-family: 'Latin Modern', Georgia, Cambria, 'Times New Roman', Times, serif; | |||||
| line-height: 1.8; | |||||
| min-height: 100vh; | |||||
| overflow-x: hidden; | |||||
| margin: 0 auto; | |||||
| padding: 2rem 1.25rem; | |||||
| color: hsl(0, 5%, 10%); | |||||
| background-color: hsl(210, 20%, 98%); | |||||
| text-rendering: optimizeLegibility; | |||||
| } | |||||
| p { | |||||
| text-align: justify; | |||||
| hyphens: auto; | |||||
| margin-top: 1rem; | |||||
| } | |||||
| a:not([class]) { | |||||
| text-decoration-skip-ink: auto; | |||||
| } | |||||
| a, a:visited { | |||||
| color: #a00; | |||||
| } | |||||
| a:focus { | |||||
| outline-offset: 2px; | |||||
| outline: 2px solid hsl(220, 90%, 52%); | |||||
| } | |||||
| h1 { | |||||
| font-size: 2.5rem; | |||||
| line-height: 3.25rem; | |||||
| margin-bottom: 1.625rem; | |||||
| } | |||||
| h2 { | |||||
| font-size: 1.7rem; | |||||
| line-height: 2rem; | |||||
| margin-top: 3rem; | |||||
| } | |||||
| h3 { | |||||
| font-size: 1.4rem; | |||||
| margin-top: 2.5rem; | |||||
| } | |||||
| h4 { | |||||
| font-size: 1.2rem; | |||||
| margin-top: 2rem; | |||||
| } | |||||
| h5 { | |||||
| font-size: 1rem; | |||||
| margin-top: 1.8rem; | |||||
| } | |||||
| h6 { | |||||
| font-size: 1rem; | |||||
| font-style: italic; | |||||
| font-weight: normal; | |||||
| margin-top: 2.5rem; | |||||
| } | |||||
| h3, h4, h5, h6 { | |||||
| line-height: 1.625rem; | |||||
| } | |||||
| h1 + h2 { | |||||
| margin-top: 1.625rem; | |||||
| } | |||||
| h2 + h3, h3 + h4, h4 + h5 { | |||||
| margin-top: 0.8rem; | |||||
| } | |||||
| h5 + h6 { | |||||
| margin-top: -0.8rem; | |||||
| } | |||||
| h2, h3, h4, h5, h6 { | |||||
| margin-bottom: 0.8rem; | |||||
| } | |||||
| ul, ol { | |||||
| padding: 0; | |||||
| } | |||||
| #banner, #contentinfo { | |||||
| width: 100%; | |||||
| text-align: center; | |||||
| } | |||||
| #contentinfo { | |||||
| flex-shrink: 0; | |||||
| margin-top: 40px | |||||
| } | |||||
| #container { | |||||
| flex: 1 0 auto; | |||||
| display: flex; | |||||
| align-items: stretch; | |||||
| max-width: 100%; | |||||
| } | |||||
| @media only screen and (max-width: 1024px) { | |||||
| #container { | |||||
| flex-flow: row wrap; | |||||
| } | |||||
| } | |||||
| #menu { | |||||
| min-width: 300px; | |||||
| } | |||||
| .menuitems { | |||||
| list-style: none; | |||||
| } | |||||
| #content { | |||||
| flex: 1 1 auto; | |||||
| } | |||||
| #post-list li { | |||||
| list-style: none; | |||||
| } | |||||
| .entry-title { | |||||
| text-align: center; | |||||
| } | |||||
| div.post-info { | |||||
| text-align: center; | |||||
| } | |||||
| .author a { | |||||
| margin: 0.85rem 0; | |||||
| font-variant-caps: small-caps; | |||||
| text-align: center; | |||||
| } | |||||
| footer.post-info { | |||||
| display: flex; | |||||
| flex-flow: row wrap; | |||||
| justify-content: space-between; | |||||
| padding: 1rem; | |||||
| } | |||||
| .entry-title { | |||||
| text-align: center; | |||||
| } | |||||
| /* | |||||
| * Links | |||||
| */ | |||||
| .entry-content a { | |||||
| counter-increment: entrylinks; | |||||
| text-decoration: none; | |||||
| color: inherit; | |||||
| outline: none; | |||||
| cursor: default; | |||||
| pointer-events: none; | |||||
| } | |||||
| .entry-content a:after { | |||||
| content: '[' counter(entrylinks) ']'; | |||||
| margin-left: 2px; | |||||
| color: #a00; | |||||
| cursor: pointer; | |||||
| pointer-events: auto; | |||||
| } | |||||
| /* | |||||
| * Lists | |||||
| */ | |||||
| .entry-content ol, | |||||
| .entry-content ul { | |||||
| padding-left: 40px; | |||||
| } | |||||
| .entry-content li>ol, | |||||
| .entry-content li>ul { | |||||
| padding-left: 20px; | |||||
| } | |||||
| /* | |||||
| * Images | |||||
| */ | |||||
| .entry-content img { | |||||
| counter-increment: figures; | |||||
| display: block; | |||||
| max-width: 80%; | |||||
| margin: 0 auto 0 auto; | |||||
| padding: 1rem; | |||||
| } | |||||
| .entry-content img~em{ | |||||
| display: block; | |||||
| margin: 0 auto 0 auto; | |||||
| text-align: center; | |||||
| font-style: normal; | |||||
| } | |||||
| .entry-content img~em:before { | |||||
| content: 'Figure ' counter(figures) ': '; | |||||
| font-weight: bold; | |||||
| } | |||||
| /* | |||||
| * Tables | |||||
| */ | |||||
| .entry-content table:not([class="highlighttable"]) { | |||||
| counter-increment: tables; | |||||
| max-width: 80%; | |||||
| margin: 0 auto 0 auto; | |||||
| padding: 1rem; | |||||
| border-collapse: collapse; | |||||
| border-spacing: 0; | |||||
| } | |||||
| .entry-content table~p > em{ | |||||
| display: block; | |||||
| margin: 0 auto 0 auto; | |||||
| text-align: center; | |||||
| font-style: normal; | |||||
| } | |||||
| .entry-content table~p > em:before { | |||||
| content: 'Table ' counter(tables) ': '; | |||||
| font-weight: bold; | |||||
| } | |||||
| .entry-content th, td { | |||||
| padding: 0.5rem; | |||||
| } | |||||
| .entry-content td { | |||||
| border-bottom: 1px solid hsl(0, 0%, 85%); | |||||
| } | |||||
| .entry-content th:not([align]), td:not([align]) { | |||||
| text-align: left; | |||||
| } | |||||
| .entry-content th:empty, | |||||
| .entry-content td:empty { | |||||
| border-left: 1px solid hsl(0, 0%, 85%); | |||||
| width: 0; | |||||
| padding: 0; | |||||
| } | |||||
| .entry-content th:empty~th:empty, | |||||
| .entry-content td:empty~td:empty { | |||||
| border-left: 1px double hsl(0, 0%, 85%); | |||||
| } | |||||
| .entry-content thead th { | |||||
| border-bottom: 2px solid hsl(0, 0%, 70%); | |||||
| } | |||||
| .entry-content tfoot th { | |||||
| border-top: 2px solid hsl(0, 0%, 70%); | |||||
| } | |||||
| /* | |||||
| * Code | |||||
| */ | |||||
| .entry-content table.highlighttable, | |||||
| .entry-content div.highlight { | |||||
| width: 100%; | |||||
| max-width: 100%; | |||||
| } | |||||
| .entry-content div.highlight { | |||||
| counter-increment: listings; | |||||
| } | |||||
| .entry-content table.highlighttable~p > em, | |||||
| .entry-content div.highlight~p > em { | |||||
| display: block; | |||||
| margin: 0 auto 0 auto; | |||||
| text-align: center; | |||||
| font-style: normal; | |||||
| } | |||||
| .entry-content table.highlighttable~p > em:before, | |||||
| .entry-content div.highlight~p > em:before { | |||||
| content: 'Listing ' counter(listings) ': '; | |||||
| font-weight: bold; | |||||
| } | |||||
| .entry-content td.linenos, | |||||
| .entry-content td.code { | |||||
| border-bottom: none; | |||||
| } | |||||
| .entry-content code, pre { | |||||
| font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; | |||||
| font-size: 85%; | |||||
| } | |||||
| .entry-content pre { | |||||
| max-width: 100%; | |||||
| overflow: auto; | |||||
| border-radius: 4px; | |||||
| } | |||||
| .entry-content pre code { | |||||
| font-size: 95%; | |||||
| position: relative; | |||||
| } | |||||
| .linenos { | |||||
| width: 3em; | |||||
| } | |||||
| /* This is old stuff, inherited from LaTeX.css, probably unused */ | |||||
| /* Nested ordered list for ToC */ | |||||
| .toc ol { | |||||
| counter-reset: item; | |||||
| padding-left: 2rem; | |||||
| } | |||||
| .toc li { | |||||
| display: block; | |||||
| } | |||||
| .toc li:before { | |||||
| content: counters(item, '.') ' '; | |||||
| counter-increment: item; | |||||
| padding-right: 0.85rem; | |||||
| } | |||||
| /* Make footnote text smaller and left align it (looks bad with long URLs) */ | |||||
| .footnotes p { | |||||
| text-align: left; | |||||
| line-height: 1.5; | |||||
| font-size: 85%; | |||||
| margin-bottom: 0.4rem; | |||||
| } | |||||
| .footnotes { | |||||
| border-top: 1px solid hsl(0, 0%, 39%); | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block title %}{{ SITENAME }} - Archives{% endblock %} | |||||
| {% block content %} | |||||
| <h1>Archives for {{ SITENAME }}</h1> | |||||
| <dl> | |||||
| {% for article in dates %} | |||||
| <dt>{{ article.locale_date }}</dt> | |||||
| <dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd> | |||||
| {% endfor %} | |||||
| </dl> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,69 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block html_lang %}{{ article.lang }}{% endblock %} | |||||
| {% block title %}{{ SITENAME }} - {{ article.title }}{% endblock %} | |||||
| {% block head %} | |||||
| {{ super() }} | |||||
| {% import 'translations.html' as translations with context %} | |||||
| {% if translations.entry_hreflang(article) %} | |||||
| {{ translations.entry_hreflang(article) }} | |||||
| {% endif %} | |||||
| {% if article.description %} | |||||
| <meta name="description" content="{{article.description}}" /> | |||||
| {% endif %} | |||||
| {% for tag in article.tags %} | |||||
| <meta name="tags" content="{{tag}}" /> | |||||
| {% endfor %} | |||||
| {% endblock %} | |||||
| {% block content %} | |||||
| <section id="content" class="body"> | |||||
| <header> | |||||
| <h2 class="entry-title"> | |||||
| <a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" | |||||
| title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h2> | |||||
| {% import 'translations.html' as translations with context %} | |||||
| {{ translations.translations_for(article) }} | |||||
| <div class="post-info"> | |||||
| <time class="published" datetime="{{ article.date.isoformat() }}"> | |||||
| {{ article.locale_date }} | |||||
| </time> | |||||
| {% if article.modified %} | |||||
| <time class="modified" datetime="{{ article.modified.isoformat() }}"> | |||||
| {{ article.locale_modified }} | |||||
| </time> | |||||
| {% endif %} | |||||
| {% if article.authors %} | |||||
| <address class="vcard author"> | |||||
| By {% for author in article.authors %}<a class="url fn" href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a>{% endfor %} | |||||
| </address> | |||||
| {% endif %} | |||||
| </div> | |||||
| </header> | |||||
| <div class="entry-content"> | |||||
| {{ article.content }} | |||||
| </div><!-- /.entry-content --> | |||||
| <footer class="post-info"> | |||||
| {% if article.category %} | |||||
| <div class="category"> | |||||
| Category: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a> | |||||
| </div> | |||||
| {% endif %} | |||||
| {% if article.tags %} | |||||
| <div class="tags"> | |||||
| Tags: | |||||
| {% for tag in article.tags %} | |||||
| <a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a> | |||||
| {% endfor %} | |||||
| </div> | |||||
| {% endif %} | |||||
| </footer><!-- /.post-info --> | |||||
| </section> | |||||
| {% endblock %} | |||||
| <!-- vim:ts=2:sw=2:et:ft=html --> | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "index.html" %} | |||||
| {% block title %}{{ SITENAME }} - Articles by {{ author }}{% endblock %} | |||||
| {% block content_title %} | |||||
| <h2>Articles by {{ author }}</h2> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,12 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block title %}{{ SITENAME }} - Authors{% endblock %} | |||||
| {% block content %} | |||||
| <h1>Authors on {{ SITENAME }}</h1> | |||||
| <ul> | |||||
| {% for author, articles in authors|sort %} | |||||
| <li><a href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a> ({{ articles|count }})</li> | |||||
| {% endfor %} | |||||
| </ul> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,82 @@ | |||||
| <!DOCTYPE html> | |||||
| <html lang="{% block html_lang %}{{ DEFAULT_LANG }}{% endblock html_lang %}"> | |||||
| <head> | |||||
| {% block head %} | |||||
| <title>{% block title %}{{ SITENAME }}{% endblock title %}</title> | |||||
| <meta charset="utf-8" /> | |||||
| <link rel="stylesheet" type="text/css" href="{{ SITE_URL }}/theme/css/site.css" /> | |||||
| {% if FEED_ALL_ATOM %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if FEED_ALL_ATOM_URL %}{{ FEED_ALL_ATOM_URL }}{% else %}{{ FEED_ALL_ATOM }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Full Atom Feed" /> | |||||
| {% endif %} | |||||
| {% if FEED_ALL_RSS %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if FEED_ALL_RSS_URL %}{{ FEED_ALL_RSS_URL }}{% else %}{{ FEED_ALL_RSS }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Full RSS Feed" /> | |||||
| {% endif %} | |||||
| {% if FEED_ATOM %} | |||||
| <link href="{{ FEED_DOMAIN }}/{%if FEED_ATOM_URL %}{{ FEED_ATOM_URL }}{% else %}{{ FEED_ATOM }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" /> | |||||
| {% endif %} | |||||
| {% if FEED_RSS %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if FEED_RSS_URL %}{{ FEED_RSS_URL }}{% else %}{{ FEED_RSS }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" /> | |||||
| {% endif %} | |||||
| {% if CATEGORY_FEED_ATOM and category %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_ATOM_URL %}{{ CATEGORY_FEED_ATOM_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_ATOM.format(slug=category.slug) }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Categories Atom Feed" /> | |||||
| {% endif %} | |||||
| {% if CATEGORY_FEED_RSS and category %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_RSS_URL %}{{ CATEGORY_FEED_RSS_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_RSS.format(slug=category.slug) }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Categories RSS Feed" /> | |||||
| {% endif %} | |||||
| {% if TAG_FEED_ATOM and tag %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if TAG_FEED_ATOM_URL %}{{ TAG_FEED_ATOM_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_ATOM.format(slug=tag.slug) }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Tags Atom Feed" /> | |||||
| {% endif %} | |||||
| {% if TAG_FEED_RSS and tag %} | |||||
| <link href="{{ FEED_DOMAIN }}/{% if TAG_FEED_RSS_URL %}{{ TAG_FEED_RSS_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_RSS.format(slug=tag.slug) }}{% endif %}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Tags RSS Feed" /> | |||||
| {% endif %} | |||||
| {% endblock head %} | |||||
| </head> | |||||
| <body id="index" class="home"> | |||||
| <header id="banner" class="body"> | |||||
| <h1><a href="{{ SITEURL }}/">{{ SITENAME }} <strong>{{ SITESUBTITLE }}</strong></a></h1> | |||||
| </header><!-- /#banner --> | |||||
| <div id="container"> | |||||
| <nav id="menu"> | |||||
| {% for title, link in MENUITEMS %} | |||||
| <ul class="menuitems"> | |||||
| <li><a href="{{ link }}">{{ title }}</a></li> | |||||
| </ul> | |||||
| {% endfor %} | |||||
| {% if DISPLAY_PAGES_ON_MENU %} | |||||
| <ul id="pages" class="menuitems"> | |||||
| {% for p in pages %} | |||||
| <li{% if p == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></li> | |||||
| {% endfor %} | |||||
| </ul> | |||||
| {% endif %} | |||||
| {% if DISPLAY_CATEGORIES_ON_MENU %} | |||||
| <ul id="categories" class="menuitems"> | |||||
| {% for cat, null in categories %} | |||||
| <li{% if cat == category %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li> | |||||
| {% endfor %} | |||||
| </ul> | |||||
| {% endif %} | |||||
| </nav><!-- /#menu --> | |||||
| {% block content %} | |||||
| {% endblock %} | |||||
| </div> | |||||
| <footer id="contentinfo" class="body"> | |||||
| <address id="about" class="vcard body"> | |||||
| Proudly powered by <a href="http://getpelican.com/">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>. | |||||
| </address><!-- /#about --> | |||||
| </footer><!-- /#contentinfo --> | |||||
| </body> | |||||
| </html> | |||||
| <!-- vim:ts=2:sw=2:et:ft=html --> | |||||
| @@ -0,0 +1,12 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block title %}{{ SITENAME }} - Categories{% endblock %} | |||||
| {% block content %} | |||||
| <h1>Categories on {{ SITENAME }}</h1> | |||||
| <ul> | |||||
| {% for category, articles in categories|sort %} | |||||
| <li><a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a> ({{ articles|count }})</li> | |||||
| {% endfor %} | |||||
| </ul> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,8 @@ | |||||
| {% extends "index.html" %} | |||||
| {% block title %}{{ SITENAME }} - {{ category }} category{% endblock %} | |||||
| {% block content_title %} | |||||
| <h2>Articles in the {{ category }} category</h2> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,14 @@ | |||||
| {% if GOSQUARED_SITENAME %} | |||||
| <script type="text/javascript"> | |||||
| var GoSquared={}; | |||||
| GoSquared.acct = "{{ GOSQUARED_SITENAME }}"; | |||||
| (function(w){ | |||||
| function gs(){ | |||||
| w._gstc_lt=+(new Date); var d=document; | |||||
| var g = d.createElement("script"); g.type = "text/javascript"; g.async = true; g.src = "https://d1l6p2sc9645hc.cloudfront.net/tracker.js"; | |||||
| var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(g, s); | |||||
| } | |||||
| w.addEventListener?w.addEventListener("load",gs,false):w.attachEvent("onload",gs); | |||||
| })(window); | |||||
| </script> | |||||
| {% endif %} | |||||
| @@ -0,0 +1,44 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block content %} | |||||
| <section id="content"> | |||||
| {% block content_title %} | |||||
| <h2>All articles</h2> | |||||
| {% endblock %} | |||||
| <ol id="post-list"> | |||||
| {% for article in articles_page.object_list %} | |||||
| <li> | |||||
| <article class="hentry"> | |||||
| <header> | |||||
| <h2 class="entry-title"> | |||||
| <a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a> | |||||
| </h2> | |||||
| <div class="post-info"> | |||||
| <time class="published" datetime="{{ article.date.isoformat() }}"> {{ article.locale_date }} </time> | |||||
| <address class="vcard author">By | |||||
| {% for author in article.authors %} | |||||
| <a class="url fn" href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a> | |||||
| {% endfor %} | |||||
| </address> | |||||
| </div><!-- /.post-info --> | |||||
| </header> | |||||
| <div class="entry-content"> | |||||
| {{ article.summary }} | |||||
| </div><!-- /.entry-content --> | |||||
| </article> | |||||
| </li> | |||||
| {% endfor %} | |||||
| </ol><!-- /#posts-list --> | |||||
| {% if articles_page.has_other_pages() %} | |||||
| {% include 'pagination.html' %} | |||||
| {% endif %} | |||||
| </section><!-- /#content --> | |||||
| {% endblock content %} | |||||
| <!-- vim:ts=2:sw=2:et:ft=html --> | |||||
| @@ -0,0 +1,27 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block html_lang %}{{ page.lang }}{% endblock %} | |||||
| {% block title %}{{ SITENAME }} - {{ page.title }}{%endblock%} | |||||
| {% block head %} | |||||
| {{ super() }} | |||||
| {% import 'translations.html' as translations with context %} | |||||
| {% if translations.entry_hreflang(page) %} | |||||
| {{ translations.entry_hreflang(page) }} | |||||
| {% endif %} | |||||
| {% endblock %} | |||||
| {% block content %} | |||||
| <h1>{{ page.title }}</h1> | |||||
| {% import 'translations.html' as translations with context %} | |||||
| {{ translations.translations_for(page) }} | |||||
| {{ page.content }} | |||||
| {% if page.modified %} | |||||
| <p> | |||||
| Last updated: {{ page.locale_modified }} | |||||
| </p> | |||||
| {% endif %} | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,11 @@ | |||||
| {% if DEFAULT_PAGINATION %} | |||||
| <p class="paginator"> | |||||
| {% if articles_page.has_previous() %} | |||||
| <a href="{{ SITEURL }}/{{ articles_previous_page.url }}">«</a> | |||||
| {% endif %} | |||||
| Page {{ articles_page.number }} / {{ articles_paginator.num_pages }} | |||||
| {% if articles_page.has_next() %} | |||||
| <a href="{{ SITEURL }}/{{ articles_next_page.url }}">»</a> | |||||
| {% endif %} | |||||
| </p> | |||||
| {% endif %} | |||||
| @@ -0,0 +1,14 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block title %}{{ SITENAME }} - {{ period | reverse | join(' ') }} archives{% endblock %} | |||||
| {% block content %} | |||||
| <h1>Archives for {{ period | reverse | join(' ') }}</h1> | |||||
| <dl> | |||||
| {% for article in dates %} | |||||
| <dt>{{ article.locale_date }}</dt> | |||||
| <dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd> | |||||
| {% endfor %} | |||||
| </dl> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,7 @@ | |||||
| {% extends "index.html" %} | |||||
| {% block title %}{{ SITENAME }} - {{ tag }} tag{% endblock %} | |||||
| {% block content_title %} | |||||
| <h2>Articles tagged with {{ tag }}</h2> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,12 @@ | |||||
| {% extends "base.html" %} | |||||
| {% block title %}{{ SITENAME }} - Tags{% endblock %} | |||||
| {% block content %} | |||||
| <h1>Tags for {{ SITENAME }}</h1> | |||||
| <ul> | |||||
| {% for tag, articles in tags|sort %} | |||||
| <li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a> ({{ articles|count }})</li> | |||||
| {% endfor %} | |||||
| </ul> | |||||
| {% endblock %} | |||||
| @@ -0,0 +1,16 @@ | |||||
| {% macro translations_for(article) %} | |||||
| {% if article.translations %} | |||||
| Translations: | |||||
| {% for translation in article.translations %} | |||||
| <a href="{{ SITEURL }}/{{ translation.url }}" hreflang="{{ translation.lang }}">{{ translation.lang }}</a> | |||||
| {% endfor %} | |||||
| {% endif %} | |||||
| {% endmacro %} | |||||
| {% macro entry_hreflang(entry) %} | |||||
| {% if entry.translations %} | |||||
| {% for translation in entry.translations %} | |||||
| <link rel="alternate" hreflang="{{ translation.lang }}" href="{{ SITEURL }}/{{ translation.url }}"> | |||||
| {% endfor %} | |||||
| {% endif %} | |||||
| {% endmacro %} | |||||