Major development update.

* Updated LICENSE, READMES/METADATA.md and TODO.md
* Added example blog to examples/
* Added preliminary Pygments support for embedding code in pages.
* Add preliminary Wordpress dump importer
* Expansions to template_tools and metadata to support Blog use case.
This commit is contained in:
Cassowary 2019-05-23 17:51:21 -07:00
parent 81532f3462
commit a0c4381c99
142 changed files with 1564 additions and 180 deletions

View File

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2018 Cas Rusnov Copyright (c) 2018,2019 Cas Rusnov
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -15,6 +15,8 @@ On-disk meatdata is stored as a file along side the non-metadata file with the e
All files define the following keys by default: All files define the following keys by default:
relpath
: The relative path to the root of the site, useful for prepending to image `src=` and other resource paths such as CSS files and fonts in order to maintain locally viewable output.
file_name file_name
: The local path of the file : The local path of the file
file_path file_path
@ -60,6 +62,14 @@ author_email
site_root site_root
: The full URL for the root of this web site used for links and whatnot, with ending slash. : The full URL for the root of this web site used for links and whatnot, with ending slash.
Special Keys that can be defined, these change the processing in predictable ways:
type
: Define that the file that this metadata is applied to as a specific type from the type mapping table. Useful values are `passthrough` and `templatable` with obvious outcomes.
wildcard_metadata
: Define a dictionary of file globs (patterns which match files such as `*.txt`), with the value being a dictionary of additional metadata to apply to the matched files. This is generally
defined at the top level of the project to make certain file patterns treated as special without having to give them their own metadata.
## CACHING STRATEGY ## ## CACHING STRATEGY ##

View File

@ -2,6 +2,7 @@
* Pygments pretty printing of source code et al. including exposing that to the template API (`pygment_format(get_file_content('whatever.py'))`). * Pygments pretty printing of source code et al. including exposing that to the template API (`pygment_format(get_file_content('whatever.py'))`).
* Smart CSS things (fill in the processors) * Smart CSS things (fill in the processors)
* Project global defines, parameters.
# Maybe # # Maybe #

View File

@ -1,7 +0,0 @@
{
"site_root":"https://example.com",
"title":"Test Metadata",
"author": "Test User",
"author_email": "test_user@example.com",
"uuid_oid_root": "pixywerk-demo"
}

View File

@ -1,5 +0,0 @@
{
"type": "templatable",
"title": "Test RSS Feed",
"subtitle": "Some Subtitle"
}

View File

@ -1,5 +0,0 @@
Some more post
la la la

View File

@ -1,4 +0,0 @@
{
"title":"Another Post(tm)",
"summary":"Yet another post"
}

View File

@ -1 +0,0 @@
Some content.

View File

@ -1,4 +0,0 @@
{
"title":"Test.cont",
"summary":"Some empty test content"
}

View File

@ -1 +0,0 @@
yo fresh

View File

@ -1,5 +0,0 @@
{
"foo":"bar",
"title":"A title",
"summary":"Just a post."
}

View File

@ -1,19 +0,0 @@
<h1>Index of all content</h1>
{% for f in get_file_list('*', sort_order='file_name') %}
<a href="{{ get_file_name(f['file_name']) }}">{{get_file_name(f['file_name'])}}</a>
{% endfor %}
<p>Including foo.cont.meta:
<pre>
{{ get_file_content('foo.cont.meta') }}
</pre>
</p>
<h1>Metadata</h1>
<table class="metadata">
<tr><th>key</th><th>value</th></tr>
{% set metadata = get_file_metadata('foo.cont') %}
{% for k in metadata.keys() %}
<tr><td>{{k}}</td><td>{{metadata[k]}}</td></tr>
{% endfor %}
</table>

View File

View File

@ -1,9 +0,0 @@
# README #
This is a test of the emergency compiled HTML system. This is only a *test*.
[Foo!](foo.html)
{% for i in range(100) %}
* {{ i }}
{% endfor %}

View File

@ -1,3 +0,0 @@
{
"pragma":["no-proc"]
}

View File

@ -1,9 +0,0 @@
# README #
This is a test of the emergency compiled HTML system. This is only a *test*.
[Foo!](foo.html)
{% for i in range(100) %}
* {{ i }}
{% endfor %}

View File

@ -1,3 +0,0 @@
{
"title":"Yo, markdown"
}

View File

@ -1,32 +0,0 @@
<!DOCTYPE html>
<head>
<title>Debug for {{path}}</title>
<style type="text/css">
table { border: 1px solid black; }
div { border: 1px solid black; }
td { border: 1px solid black; }
</style>
</head>
<body>
<p>{{path}}</p>
<h1>Content</h1>
<div class="content">
{{content}}
</div>
<h1>Environment</h1>
<table class="environment">
<tr><th>key</th><th>value</th></tr>
{% for k in environ.keys() %}
<tr><td>{{k}}</td><td>{{environ[k]}}</td></tr>
{% endfor %}
</table>
<h1>Metadata</h1>
<table class="metadata">
<tr><th>key</th><th>value</th></tr>
{% for k in metadata.keys() %}
<tr><td>{{k}}</td><td>{{metadata[k]}}</td></tr>
{% endfor %}
</table>
</body>

View File

@ -1,6 +0,0 @@
<table class="werk-file-list">
<tr class="werk-file-list-head"><th>file</th><th>type</th><th>size</th><th>last change</th></tr>
{% for f in files.keys() %}
<tr class="werk-file-list-item"><td><a href="/{{files[f].relpath}}">{{f}}</a></td><td>{{files[f].type}}</td><td>{{files[f].size}}</td><td>{{files[f].ctime | date}}</td></tr>
{% endfor %}
</table>

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<head>
<title>{{metadata.title}}</title>
<style type="text/css">
table { border: 1px solid black; }
div { border: 1px solid black; }
td { border: 1px solid black; }
</style>
</head>
<body>
{{content}}
</body>
</html>

View File

@ -1,2 +1,2 @@
build: src/templates/* src/* src/images/* src/posts/* build: src/templates/* src/* src/images/*
python -mpixywerk2 src publish python -mpixywerk2 src publish

View File

@ -0,0 +1,31 @@
<html>
<head>
<title>Pixywerk2 My first post</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div class="container">
<header><img src="images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>Pixywerk2 My first post</h1></header>
<article>
<img src="../images/20190415-0.jpg" class="featured">
<div class="byline">
<p>Author: Cas Rusnov</p>
<p>Published: 2019-05-14T06:44:41.240513+00:00
</p>
</div>
<p>This is an example post!</p>
<p>yo fresh</p>
<p>There are many posts like it but this one is mine.</p>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog </li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="images/link-box-variant.svg"></a></li>
<li>Github<img src="images/link-box-variant.svg"></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Pixywerk2 RSS Feed</title>
<subtitle>Website Compiler</subtitle>
<link href="https://pixywerk.com//atom.xml" rel="self" />
<link href="https://pixywerk.com/" />
<id>urn:uuid:2cbb1961-b1ca-3b73-a6ce-d2e2feae9ab4</id>
<updated>2019-05-20T06:32:27.357672+00:00</updated>
</feed>

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,344 @@
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-Bold.woff2') format('woff2'),
url('fonts/ExpletusSans-Bold.woff') format('woff');
font-style: regular;
font-weight: 700;
}
body { margin: 10% 10% 0 10% } @font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-BoldItalic.woff2') format('woff2'),
url('fonts/ExpletusSans-BoldItalic.woff') format('woff');
font-style: italic;
font-weight: 700;
}
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-Italic.woff2') format('woff2'),
url('fonts/ExpletusSans-Italic.woff') format('woff');
font-style: italic;
font-weight: 400;
}
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-Medium.woff2') format('woff2'),
url('fonts/ExpletusSans-Medium.woff') format('woff');
font-style: regular;
font-weight: 500;
}
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-MediumItalic.woff2') format('woff2'),
url('fonts/ExpletusSans-MediumItalic.woff') format('woff');
font-style: italic;
font-weight: 500;
}
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-Regular.woff2') format('woff2'),
url('fonts/ExpletusSans-Regular.woff') format('woff');
font-style: regular;
font-weight: 400;
}
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-SemiBold.woff2') format('woff2'),
url('fonts/ExpletusSans-SemiBold.woff') format('woff');
font-style: regular;
font-weight: 600;
}
@font-face {
font-family: 'Expletus Sans';
src: url('fonts/ExpletusSans-SemiBoldItalic.woff2') format('woff2'),
url('fonts/ExpletusSans-SemiBoldItalic.woff') format('woff');
font-style: italic;
font-weight: 600;
}
@font-face {
font-family: 'Teko';
src: url('fonts/Teko-Bold.woff2') format('woff2'),
url('fonts/Teko-Bold.woff') format('woff');
font-style: regular;
font-weight: 700;
}
@font-face {
font-family: 'Teko Light';
src: url('fonts/Teko-Light.woff2') format('woff2'),
url('fonts/Teko-Light.woff') format('woff');
font-style: regular;
font-weight: 300;
}
@font-face {
font-family: 'Teko Medium';
src: url('fonts/Teko-Medium.woff2') format('woff2'),
url('fonts/Teko-Medium.woff') format('woff');
font-style: regular;
font-weight: 500;
}
@font-face {
font-family: 'Teko';
src: url('fonts/Teko-Regular.woff2') format('woff2'),
url('fonts/Teko-Regular.woff') format('woff');
font-style: regular;
font-weight: 400;
}
@font-face {
font-family: 'Teko SemiBold';
src: url('fonts/Teko-SemiBold.woff2') format('woff2'),
url('fonts/Teko-SemiBold.woff') format('woff');
font-style: regular;
font-weight: 600;
}
body { margin: 0; font-family: Teko; font-size: 24pt; }
h1, h2, h3, h4 { font-family: 'Expletus Sans'; font-weight: 700 }
h1 { font-size: 150%; border-bottom: solid 1px black; }
h2 { font-size: 125%; }
h3 { font-size: 115%; }
h4 { font-size: 100%; }
.container {
height: 100%;
width: 100%;
display: grid;
grid-template-columns: 220px auto auto;
grid-template-rows: auto auto auto auto;
}
header {
border: 0;
padding-left: 20px;
height: 60px;
grid-column: 1 / 4;
background: black;
color: white;
}
header h1 { font-size: 18pt; border: none}
nav {
grid-row: 2 / 5;
grid-column: 1;
}
nav ul {
padding: 0;
}
nav ul li {
list-style-type: none;
padding: 1px 20px 1px 20px;
}
nav ul li:hover {
background: black;
color: white;
}
nav ul li:hover img {
filter: invert(1);
}
nav ul li a {
color: black;
text-decoration: none;
}
nav ul li:hover a:hover {
color: white;
text-decoration: underline;
}
nav ul li a:visited {
color: inherit;
}
article {
grid-row: 2 / 5;
grid-column: 2 / 4;
margin: 0 20px 0 20px;
}
footer {
font-size: 12pt;
grid-column: 1 / 4;
grid-row: 5;
background: black;
color: white;
padding-top: 10px;
padding-left: 20px;
}
.post div.featured {
max-height: 250px;
max-width: 100%;
overflow: hidden;
position: relative;
padding: 0;
}
.post div.featured img.featured {
max-width: initial;
width: 100%;
}
.post div.featured h1 {
position: absolute;
bottom: 0px;
left: 0;
color: white;
border: 0;
padding: 10px 30px 10px 30px;
background: rgba(0,0,0,0.5);
margin-top: 0.5em;
margin-bottom: 0.5em;
font-variant: small-caps;
}
.post div.byline {
margin-left: 30px;
font-size: 0.75em;
line-height: 0.75em;
}
.post div.article {
margin-left: 30Px;
}
.post div.article p {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.postgrid {
display: grid;
grid-template-columns: minmax(300px, 33%) minmax(300px, 33%) minmax(300px, 33%);
margin-bottom: 30px;
column-gap: 10px;
row-gap: 10px;
}
.postgrid-item {
height: 200px;
max-height: 200px;
max-width: 100%;
overflow: hidden;
position: relative;
}
.postgrid-item a img.featured {
max-width: 100%;
}
.postgrid-item a div {
position: absolute;
left: 0;
bottom: 0;
color: white;
border: 0;
padding: 10px 30px 10px 30px;
background: rgba(0,0,0,0.5);
margin-top: 0.5em;
margin-bottom: 0.5em;
font-variant: small-caps;
}
.hll { background-color: #ffffcc }
.c { color: #008800; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #AA22FF; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.ch { color: #008800; font-style: italic } /* Comment.Hashbang */
.cm { color: #008800; font-style: italic } /* Comment.Multiline */
.cp { color: #008800 } /* Comment.Preproc */
.cpf { color: #008800; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #008800; font-style: italic } /* Comment.Single */
.cs { color: #008800; font-weight: bold } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #888888 } /* Generic.Output */
.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0044DD } /* Generic.Traceback */
.kc { color: #AA22FF; font-weight: bold } /* Keyword.Constant */
.kd { color: #AA22FF; font-weight: bold } /* Keyword.Declaration */
.kn { color: #AA22FF; font-weight: bold } /* Keyword.Namespace */
.kp { color: #AA22FF } /* Keyword.Pseudo */
.kr { color: #AA22FF; font-weight: bold } /* Keyword.Reserved */
.kt { color: #00BB00; font-weight: bold } /* Keyword.Type */
.m { color: #666666 } /* Literal.Number */
.s { color: #BB4444 } /* Literal.String */
.na { color: #BB4444 } /* Name.Attribute */
.nb { color: #AA22FF } /* Name.Builtin */
.nc { color: #0000FF } /* Name.Class */
.no { color: #880000 } /* Name.Constant */
.nd { color: #AA22FF } /* Name.Decorator */
.ni { color: #999999; font-weight: bold } /* Name.Entity */
.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.nf { color: #00A000 } /* Name.Function */
.nl { color: #A0A000 } /* Name.Label */
.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.nt { color: #008000; font-weight: bold } /* Name.Tag */
.nv { color: #B8860B } /* Name.Variable */
.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mb { color: #666666 } /* Literal.Number.Bin */
.mf { color: #666666 } /* Literal.Number.Float */
.mh { color: #666666 } /* Literal.Number.Hex */
.mi { color: #666666 } /* Literal.Number.Integer */
.mo { color: #666666 } /* Literal.Number.Oct */
.sa { color: #BB4444 } /* Literal.String.Affix */
.sb { color: #BB4444 } /* Literal.String.Backtick */
.sc { color: #BB4444 } /* Literal.String.Char */
.dl { color: #BB4444 } /* Literal.String.Delimiter */
.sd { color: #BB4444; font-style: italic } /* Literal.String.Doc */
.s2 { color: #BB4444 } /* Literal.String.Double */
.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.sh { color: #BB4444 } /* Literal.String.Heredoc */
.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.sx { color: #008000 } /* Literal.String.Other */
.sr { color: #BB6688 } /* Literal.String.Regex */
.s1 { color: #BB4444 } /* Literal.String.Single */
.ss { color: #B8860B } /* Literal.String.Symbol */
.bp { color: #AA22FF } /* Name.Builtin.Pseudo */
.fm { color: #00A000 } /* Name.Function.Magic */
.vc { color: #B8860B } /* Name.Variable.Class */
.vg { color: #B8860B } /* Name.Variable.Global */
.vi { color: #B8860B } /* Name.Variable.Instance */
.vm { color: #B8860B } /* Name.Variable.Magic */
.il { color: #666666 } /* Literal.Number.Integer.Long */
div.code {
font-size: 0.5em;
border: 1px black solid;
padding: 1em;
margin: 0 1em 0 1em;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M13.94,14.81L11.73,17C11.08,17.67 10.22,18 9.36,18C8.5,18 7.64,17.67 7,17C5.67,15.71 5.67,13.58 7,12.26L8.35,10.9L8.34,11.5C8.33,12 8.41,12.5 8.57,12.94L8.62,13.09L8.22,13.5C7.91,13.8 7.74,14.21 7.74,14.64C7.74,15.07 7.91,15.47 8.22,15.78C8.83,16.4 9.89,16.4 10.5,15.78L12.7,13.59C13,13.28 13.18,12.87 13.18,12.44C13.18,12 13,11.61 12.7,11.3C12.53,11.14 12.44,10.92 12.44,10.68C12.44,10.45 12.53,10.23 12.7,10.06C13.03,9.73 13.61,9.74 13.94,10.06C14.57,10.7 14.92,11.54 14.92,12.44C14.92,13.34 14.57,14.18 13.94,14.81M17,11.74L15.66,13.1V12.5C15.67,12 15.59,11.5 15.43,11.06L15.38,10.92L15.78,10.5C16.09,10.2 16.26,9.79 16.26,9.36C16.26,8.93 16.09,8.53 15.78,8.22C15.17,7.6 14.1,7.61 13.5,8.22L11.3,10.42C11,10.72 10.82,11.13 10.82,11.56C10.82,12 11,12.39 11.3,12.7C11.47,12.86 11.56,13.08 11.56,13.32C11.56,13.56 11.47,13.78 11.3,13.94C11.13,14.11 10.91,14.19 10.68,14.19C10.46,14.19 10.23,14.11 10.06,13.94C8.75,12.63 8.75,10.5 10.06,9.19L12.27,7C13.58,5.67 15.71,5.68 17,7C17.65,7.62 18,8.46 18,9.36C18,10.26 17.65,11.1 17,11.74Z" /></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M2,5V13H4V11H10L12,9L10,7H4V5H2M20,5V7H12L14,9L12,11H20V13H22V5H20M12,13C12,13 10,15.17 10,16.5A2,2 0 0,0 12,18.5A2,2 0 0,0 14,16.5C14,15.17 12,13 12,13Z" /></svg>

After

Width:  |  Height:  |  Size: 448 B

View File

@ -1,13 +1,56 @@
<html> <html>
<head> <head>
<title></title> <title>Pixywerk2 Home</title>
<link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="./css/main.css">
</head> </head>
<body> <body>
<p>This is my index!!</p> <div class="container">
for i in posts[:5]: <header><img src="./images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>Pixywerk2 Home</h1></header>
get metadata, fill in post image/text summary with link
<article>
<h1>Pixywerk 2</h1>
<p>Pixywerk 2 is a simple static website compiler. It is primarily oriented around applying a tree-oriented metadata to each file, and complicated operations within the page templates.</p>
<h2>Latest blog posts</h2>
<div class="postgrid">
<div class="postgrid-item">
<a href="posts/post-2019-05-19.html">
<img src="images/2019-05-19.png" class="featured">
<div>Code Test Post</div></a>
</div>
<div class="postgrid-item">
<a href="posts/post-2019-05-16.another-post.html">
<img src="images/2019-05-16.png" class="featured">
<div>Another example post!</div></a>
</div>
<div class="postgrid-item">
<a href="posts/post-2019-04-15.html">
<img src="images/20190415-0.jpg" class="featured">
<div>My first post</div></a>
</div>
</div>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="./images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="./images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,44 @@
<html>
<head>
<title>Pixywerk2 My first post</title>
<link rel="stylesheet" type="text/css" href="./css/main.css">
</head>
<body>
<div class="container">
<header><img src="./images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>
Pixywerk
</h1></header>
<article class="post">
<div class="featured">
<h1>My first post</h1>
<img src="images/20190415-0.jpg" class="featured">
</div>
<div class="byline">
<p>Author: Cas Rusnov<br>
Published: 2019-05-16T05:37:20.372795+00:00
</p>
</div>
<div class="article">
<p>This is an example post!</p>
<p>yo fresh</p>
<p>There are many posts like it but this one is mine.</p>
</div>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="./images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="./images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,43 @@
<html>
<head>
<title>Pixywerk2 Another example post!</title>
<link rel="stylesheet" type="text/css" href="./css/main.css">
</head>
<body>
<div class="container">
<header><img src="./images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>
Pixywerk
</h1></header>
<article class="post">
<div class="featured">
<h1>Another example post!</h1>
<img src="images/2019-05-16.png" class="featured">
</div>
<div class="byline">
<p>Author: Cas Rusnov<br>
Published: 2019-05-17T01:36:35.179351+00:00
</p>
</div>
<div class="article">
<h1>Greetings humans!</h1>
<p>This is yet another example post! halelujah!</p>
</div>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="./images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="./images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -1,9 +1,12 @@
<html> <html>
<head> <head>
<title>My first post</title> <title>Pixywerk2 My first post</title>
<link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="css/main.css">
</head> </head>
<body> <body>
<div class="container">
<header><h1>Pixywerk2 My first post</h1></header>
<article>
<img src="../images/20190415-0.jpg" class="featured"> <img src="../images/20190415-0.jpg" class="featured">
<div class="byline"> <div class="byline">
<p>Author: Cas Rusnov</p> <p>Author: Cas Rusnov</p>
@ -14,5 +17,15 @@
<p>This is an example post!</p> <p>This is an example post!</p>
<p>yo fresh</p> <p>yo fresh</p>
<p>There are many posts like it but this one is mine.</p> <p>There are many posts like it but this one is mine.</p>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog </li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="images/link-box-variant.svg"></a></li>
<li>Github<img src="images/link-box-variant.svg"></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Pixywerk2 My first post</title>
<link rel="stylesheet" type="text/css" href="../css/main.css">
</head>
<body>
<div class="container">
<header><img src="../images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>
Pixywerk
</h1></header>
<article class="post">
<div class="featured">
<h1>My first post</h1>
<img src="../images/20190415-0.jpg" class="featured">
</div>
<div class="byline">
<p>Author: Cas Rusnov<br>
Published: 2019-05-20T01:56:41.720834+00:00
</p>
</div>
<div class="article">
<p>This is an example post!</p>
<p>yo fresh</p>
<p>There are many posts like it but this one is mine.</p>
</div>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="../images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="../images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,45 @@
<html>
<head>
<title>Pixywerk2 Another example post!</title>
<link rel="stylesheet" type="text/css" href="../css/main.css">
</head>
<body>
<div class="container">
<header><img src="../images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>
Pixywerk
</h1></header>
<article class="post">
<div class="featured">
<h1>Another example post!</h1>
<img src="../images/2019-05-16.png" class="featured">
</div>
<div class="byline">
<p>Author: Cas Rusnov<br>
Published: 2019-05-20T02:09:55.805659+00:00
</p>
</div>
<div class="article">
<h1>Greetings humans!</h1>
<p>This is yet another example post! halelujah!</p>
</div>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="../images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="../images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,111 @@
<html>
<head>
<title>Pixywerk2 Code Test Post</title>
<link rel="stylesheet" type="text/css" href="../css/main.css">
</head>
<body>
<div class="container">
<header><img src="../images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>
Pixywerk
</h1></header>
<article class="post">
<div class="featured">
<h1>Code Test Post</h1>
<img src="../images/2019-05-19.png" class="featured">
</div>
<div class="byline">
<p>Author: Cas Rusnov<br>
Published: 2019-05-20T06:31:37.352443+00:00
</p>
</div>
<div class="article">
<p>This is a code test post! Let's format some code!!</p>
<div class="code">
Some python code:
<div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;Package configuration.&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">setuptools</span> <span class="kn">import</span> <span class="n">find_packages</span><span class="p">,</span> <span class="n">setup</span>
<span class="n">LONG_DESCRIPTION</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;Pixywerk 2 is a filesystem based static site generator.&quot;&quot;&quot;</span>
<span class="n">INSTALL_REQUIRES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;yaml-1.3&quot;</span><span class="p">,</span> <span class="s2">&quot;markdown&quot;</span><span class="p">,</span> <span class="s2">&quot;jstyleson&quot;</span><span class="p">,</span> <span class="s2">&quot;jinja2&quot;</span><span class="p">,</span> <span class="s2">&quot;pygments&quot;</span><span class="p">]</span>
<span class="c1"># Extra dependencies</span>
<span class="n">EXTRAS_REQUIRE</span> <span class="o">=</span> <span class="p">{</span>
<span class="c1"># Test dependencies</span>
<span class="s2">&quot;tests&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;black&quot;</span><span class="p">,</span>
<span class="s2">&quot;bandit&gt;=1.1.0&quot;</span><span class="p">,</span>
<span class="s2">&quot;flake8&gt;=3.2.1&quot;</span><span class="p">,</span>
<span class="s2">&quot;mypy&gt;=0.470&quot;</span><span class="p">,</span>
<span class="s2">&quot;prospector[with_everything]&gt;=0.12.4&quot;</span><span class="p">,</span>
<span class="s2">&quot;pytest-cov&gt;=1.8.0&quot;</span><span class="p">,</span>
<span class="s2">&quot;pytest-xdist&gt;=1.15.0&quot;</span><span class="p">,</span>
<span class="s2">&quot;pytest&gt;=3.0.3&quot;</span><span class="p">,</span>
<span class="s2">&quot;sphinx_rtd_theme&gt;=0.1.6&quot;</span><span class="p">,</span>
<span class="s2">&quot;sphinx-argparse&gt;=0.1.15&quot;</span><span class="p">,</span>
<span class="s2">&quot;Sphinx&gt;=1.4.9&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="n">SETUP_REQUIRES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;pytest-runner&gt;=2.7.1&quot;</span><span class="p">,</span> <span class="s2">&quot;setuptools_scm&gt;=1.15.0&quot;</span><span class="p">]</span>
<span class="n">setup</span><span class="p">(</span>
<span class="n">author</span><span class="o">=</span><span class="s2">&quot;Cassowary Rusnov&quot;</span><span class="p">,</span>
<span class="n">author_email</span><span class="o">=</span><span class="s2">&quot;rusnovn@gmail.com&quot;</span><span class="p">,</span>
<span class="n">classifiers</span><span class="o">=</span><span class="p">[</span>
<span class="s2">&quot;Development Status :: 1 - Pre-alpha&quot;</span><span class="p">,</span>
<span class="s2">&quot;Environment :: Console&quot;</span><span class="p">,</span>
<span class="s2">&quot;License :: OSI Approved :: MIT&quot;</span><span class="p">,</span>
<span class="s2">&quot;Operating System :: POSIX :: Linux&quot;</span><span class="p">,</span>
<span class="s2">&quot;Programming Language :: Python :: 3.6&quot;</span><span class="p">,</span>
<span class="s2">&quot;Programming Language :: Python :: 3.7&quot;</span><span class="p">,</span>
<span class="s2">&quot;Programming Language :: Python :: 3 :: Only&quot;</span><span class="p">,</span>
<span class="s2">&quot;Topic :: Software Development :: Libraries :: Python Modules&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="n">description</span><span class="o">=</span><span class="s2">&quot;A filesystem-based website generator / CMS&quot;</span><span class="p">,</span>
<span class="c1"># entry_points={</span>
<span class="c1"># &#39;console_scripts&#39;: [</span>
<span class="c1"># &#39;cookbook = spicerack.cookbook:main&#39;,</span>
<span class="c1"># ],</span>
<span class="c1"># },</span>
<span class="n">include_package_data</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
<span class="n">extras_require</span><span class="o">=</span><span class="n">EXTRAS_REQUIRE</span><span class="p">,</span>
<span class="n">install_requires</span><span class="o">=</span><span class="n">INSTALL_REQUIRES</span><span class="p">,</span>
<span class="n">keywords</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;cms&quot;</span><span class="p">,</span> <span class="s2">&quot;website&quot;</span><span class="p">,</span> <span class="s2">&quot;compiler&quot;</span><span class="p">],</span>
<span class="n">license</span><span class="o">=</span><span class="s2">&quot;MIT&quot;</span><span class="p">,</span>
<span class="n">long_description</span><span class="o">=</span><span class="n">LONG_DESCRIPTION</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;pixywerk2&quot;</span><span class="p">,</span>
<span class="n">packages</span><span class="o">=</span><span class="n">find_packages</span><span class="p">(</span><span class="n">exclude</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;*.tests&quot;</span><span class="p">,</span> <span class="s2">&quot;*.tests.*&quot;</span><span class="p">]),</span>
<span class="n">platforms</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GNU/Linux&quot;</span><span class="p">],</span>
<span class="n">setup_requires</span><span class="o">=</span><span class="n">SETUP_REQUIRES</span><span class="p">,</span>
<span class="n">use_scm_version</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
<span class="n">url</span><span class="o">=</span><span class="s2">&quot;https://git.antpanethon.com/cas/pixywerk2&quot;</span><span class="p">,</span>
<span class="n">zip_safe</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
</div>
</div>
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="../images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="../images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,59 @@
"""Package configuration."""
from setuptools import find_packages, setup
LONG_DESCRIPTION = """Pixywerk 2 is a filesystem based static site generator."""
INSTALL_REQUIRES = ["yaml-1.3", "markdown", "jstyleson", "jinja2", "pygments"]
# Extra dependencies
EXTRAS_REQUIRE = {
# Test dependencies
"tests": [
"black",
"bandit>=1.1.0",
"flake8>=3.2.1",
"mypy>=0.470",
"prospector[with_everything]>=0.12.4",
"pytest-cov>=1.8.0",
"pytest-xdist>=1.15.0",
"pytest>=3.0.3",
"sphinx_rtd_theme>=0.1.6",
"sphinx-argparse>=0.1.15",
"Sphinx>=1.4.9",
]
}
SETUP_REQUIRES = ["pytest-runner>=2.7.1", "setuptools_scm>=1.15.0"]
setup(
author="Cassowary Rusnov",
author_email="rusnovn@gmail.com",
classifiers=[
"Development Status :: 1 - Pre-alpha",
"Environment :: Console",
"License :: OSI Approved :: MIT",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3 :: Only",
"Topic :: Software Development :: Libraries :: Python Modules",
],
description="A filesystem-based website generator / CMS",
# entry_points={
# 'console_scripts': [
# 'cookbook = spicerack.cookbook:main',
# ],
# },
include_package_data=True,
extras_require=EXTRAS_REQUIRE,
install_requires=INSTALL_REQUIRES,
keywords=["cms", "website", "compiler"],
license="MIT",
long_description=LONG_DESCRIPTION,
name="pixywerk2",
packages=find_packages(exclude=["*.tests", "*.tests.*"]),
platforms=["GNU/Linux"],
setup_requires=SETUP_REQUIRES,
use_scm_version=True,
url="https://git.antpanethon.com/cas/pixywerk2",
zip_safe=False,
)

View File

@ -1,9 +1,30 @@
<html> <html>
<head> <head>
<title>{{ metadata.title }}</title> <title>Pixywerk2 {{ metadata.title }}</title>
<link rel="stylesheet" type="text/css" href="css/main.css"> <link rel="stylesheet" type="text/css" href="{{metadata.relpath}}/css/main.css">
</head> </head>
<body> <body>
<div class="container">
{% block header %}
<header><img src="{{metadata.relpath}}/images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>{% block headertitle %}Pixywerk2 {{ metadata.title }}{% endblock %}</h1></header>
{% endblock %}
{% block content %}
<article>
{{ content }} {{ content }}
</article>
{% endblock %}
{% block nav %}
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="{{metadata.relpath}}/images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="{{metadata.relpath}}/images/link-box-variant.svg"></a></li>
</ul></nav>
{% endblock %}
{% block footer %}
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
{% endblock %}
</div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,23 @@
{% extends "default.jinja2" %}
{% block headertitle %}
Pixywerk
{% endblock %}
{% block content %}
<article class="post">
<div class="featured">
<h1>{{ metadata.title }}</h1>
<img src="{{metadata.relpath}}/{{metadata.featured}}" class="featured">
</div>
<div class="byline">
<p>Author: {{ metadata.author }}<br>
Published: {{ get_time_iso8601(metadata.stat.ctime) }}
{% if metadata.stat.mtime-metadata.stat.ctime > 512 %}
Updated: {{ get_time_iso8601(metadata.stat.mtime) }}
{% endif %}
</p>
</div>
<div class="article">
{{content}}
</div>
</article>
{% endblock %}

View File

@ -0,0 +1,31 @@
<html>
<head>
<title>Pixywerk2 </title>
<link rel="stylesheet" type="text/css" href="../css/main.css">
</head>
<body>
<div class="container">
<header><img src="../images/pipe-leak.svg" style="filter: invert(1); height: 2em; float: left; margin: 2px; padding: 0"><h1>Pixywerk2 </h1></header>
<article>
test test/test.thtml
<img src="../images/pipe-leak.svg">
</article>
<nav><ul>
<li>Documentation</li>
<li>Blog</li>
<li><a href="https://git.antpantheon.com/cas/pixywerk2">Gitea<img src="../images/link-box-variant.svg"></a></li>
<li><a href="https://www.github.com/chaomodus/pixywerk2">Github<img src="../images/link-box-variant.svg"></a></li>
</ul></nav>
<footer>Copyright &copy; 2019 by Cas Rusnov <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
</footer>
</div>
</body>
</html>

View File

@ -1,6 +1,7 @@
{ {
"author": "Cas Rusnov", "author": "Cas Rusnov",
"author_email": "rusnovn@gmail.com", "author_email": "pixywerk2@gmail.com",
"uuid-oid-root": "pixywerk.com/", "uuid-oid-root": "pixywerk.com/",
"site_root": "https://pixywerk.com/" "site_root": "https://pixywerk.com/",
"subtitle": "Website Compiler"
} }

View File

@ -9,7 +9,7 @@
<id>urn:uuid:{{ metadata.uuid }}</id> <id>urn:uuid:{{ metadata.uuid }}</id>
<updated>{{ get_time_iso8601(metadata['build-time']) }}</updated> <updated>{{ get_time_iso8601(metadata['build-time']) }}</updated>
{% set posts = get_file_list('blog_posts/*.cont') %} {% set posts = get_file_list('post-*.thtml', sort_order='file_name', reverse=True) %}
{% for post in posts %} {% for post in posts %}
{% set post_meta = get_file_metadata(post['file_path']) %} {% set post_meta = get_file_metadata(post['file_path']) %}
<entry> <entry>

View File

@ -0,0 +1,4 @@
{
"type": "templatable",
"title": "Pixywerk2 RSS Feed"
}

Some files were not shown because too many files have changed in this diff Show More