Compare commits
No commits in common. "main" and "v0.2.21" have entirely different histories.
23 changed files with 65 additions and 151 deletions
|
@ -1,14 +1,5 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## 0.2.35
|
|
||||||
|
|
||||||
- Use _Lora_ font for the article body.
|
|
||||||
|
|
||||||
## 0.2.24
|
|
||||||
|
|
||||||
- Better default fonts - `sans-serif` style for the index and the titles,
|
|
||||||
`serif` for the articles' body.
|
|
||||||
|
|
||||||
## 0.2.19
|
## 0.2.19
|
||||||
|
|
||||||
- Added `short_feed` configuration flag to permanently disable returning the
|
- Added `short_feed` configuration flag to permanently disable returning the
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
__version__ = "0.2.35"
|
__version__ = '0.2.21'
|
||||||
|
|
|
@ -61,17 +61,20 @@ class BlogApp(Flask):
|
||||||
with open(md_file, "r") as f:
|
with open(md_file, "r") as f:
|
||||||
metadata["uri"] = "/article/" + page[:-3]
|
metadata["uri"] = "/article/" + page[:-3]
|
||||||
|
|
||||||
for line in f:
|
for line in f.readlines():
|
||||||
if not line:
|
if not line:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not (m := re.match(r"^\[//]: # \(([^:]+):\s*(.*)\)\s*$", line)):
|
if not (m := re.match(r"^\[//]: # \(([^:]+):\s*([^)]+)\)\s*$", line)):
|
||||||
break
|
break
|
||||||
|
|
||||||
if m.group(1) == "published":
|
if m.group(1) == "published":
|
||||||
|
try:
|
||||||
|
metadata[m.group(1)] = datetime.date.fromisoformat(m.group(2))
|
||||||
|
except ValueError:
|
||||||
metadata[m.group(1)] = datetime.datetime.fromisoformat(
|
metadata[m.group(1)] = datetime.datetime.fromisoformat(
|
||||||
m.group(2)
|
m.group(2)
|
||||||
).date()
|
)
|
||||||
else:
|
else:
|
||||||
metadata[m.group(1)] = m.group(2)
|
metadata[m.group(1)] = m.group(2)
|
||||||
|
|
||||||
|
@ -140,7 +143,7 @@ class BlogApp(Flask):
|
||||||
else None
|
else None
|
||||||
),
|
),
|
||||||
content=markdown(
|
content=markdown(
|
||||||
f.read(), extensions=["fenced_code", "codehilite", "tables", MarkdownLatex()]
|
f.read(), extensions=["fenced_code", "codehilite", MarkdownLatex()]
|
||||||
),
|
),
|
||||||
skip_header=skip_header,
|
skip_header=skip_header,
|
||||||
skip_html_head=skip_html_head,
|
skip_html_head=skip_html_head,
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from urllib.parse import urljoin
|
|
||||||
|
|
||||||
from flask import (
|
from flask import (
|
||||||
jsonify,
|
jsonify,
|
||||||
|
@ -162,29 +160,22 @@ def rss_route():
|
||||||
<link>{base_link}{link}</link>
|
<link>{base_link}{link}</link>
|
||||||
<pubDate>{published}</pubDate>
|
<pubDate>{published}</pubDate>
|
||||||
<description><![CDATA[{content}]]></description>
|
<description><![CDATA[{content}]]></description>
|
||||||
<media:content medium="image" url="{image}" width="200" height="150" />
|
<media:content medium="image" url="{base_link}{image}" width="200" height="150" />
|
||||||
</item>
|
</item>
|
||||||
"""
|
"""
|
||||||
).format(
|
).format(
|
||||||
base_link=config.link,
|
base_link=config.link,
|
||||||
title=page.get("title", "[No Title]"),
|
title=page.get("title", "[No Title]"),
|
||||||
link=page.get("uri", ""),
|
link=page.get("uri", ""),
|
||||||
published=(
|
published=page["published"].strftime(
|
||||||
page["published"].strftime("%a, %d %b %Y %H:%M:%S GMT")
|
"%a, %d %b %Y %H:%M:%S GMT"
|
||||||
|
)
|
||||||
if "published" in page
|
if "published" in page
|
||||||
else ""
|
else "",
|
||||||
),
|
content=page.get("description", "")
|
||||||
content=(
|
|
||||||
page.get("description", "")
|
|
||||||
if short_description
|
if short_description
|
||||||
else page.get("content", "")
|
else page.get("content", ""),
|
||||||
),
|
image=page.get("image", ""),
|
||||||
image=(
|
|
||||||
urljoin(config.link, page["image"])
|
|
||||||
if page.get("image")
|
|
||||||
and not re.search(r"^https?://", page["image"])
|
|
||||||
else page.get("image", "")
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
for _, page in pages
|
for _, page in pages
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,31 +2,22 @@ main .content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
font-size: 0.95em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main .content p,
|
main .content p,
|
||||||
main .content ul,
|
main .content ul {
|
||||||
main .content ol {
|
|
||||||
font-family: Lora, "Palatino Linotype", "Book Antiqua", "New York", "DejaVu serif", serif;
|
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
line-height: 1.5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main .content code, .codehilite {
|
main .content code, .codehilite {
|
||||||
font-size: 0.9em;
|
font-size: .85em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 767px) {
|
@media screen and (max-width: 767px) {
|
||||||
main {
|
main {
|
||||||
font-size: 0.95em;
|
font-size: 0.9em;
|
||||||
padding: 0.25em 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
main p {
|
|
||||||
padding: 0.25em;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,14 +45,13 @@ a:hover {
|
||||||
|
|
||||||
@media screen and (min-width: 1024px) {
|
@media screen and (min-width: 1024px) {
|
||||||
main .container {
|
main .container {
|
||||||
max-width: 40em;
|
max-width: 35em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.codehilite {
|
.codehilite {
|
||||||
padding: 0 .5em;
|
padding: 0 .5em;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-image-container {
|
.main-image-container {
|
||||||
|
|
|
@ -2,8 +2,7 @@ html {
|
||||||
height: -webkit-fill-available;
|
height: -webkit-fill-available;
|
||||||
height: -moz-available;
|
height: -moz-available;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
/* font-family: Lora, "Palatino Linotype", "Book Antiqua", "New York", "DejaVu serif", serif; */
|
font-family: -apple-system, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Open Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +95,18 @@ main {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 0 0.25em;
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
main {
|
||||||
|
padding: 0 0.75em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 768px) {
|
||||||
|
main {
|
||||||
|
padding: 0 2em;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
|
@ -109,10 +119,6 @@ h2 {
|
||||||
line-height: 1.1em;
|
line-height: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
font-family: -apple-system, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Open Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: .65em;
|
font-size: .65em;
|
||||||
|
@ -123,7 +129,3 @@ footer {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
box-shadow: 1px -2px 2px 0 #bbb;
|
box-shadow: 1px -2px 2px 0 #bbb;
|
||||||
}
|
}
|
||||||
|
|
||||||
.index {
|
|
||||||
font-family: -apple-system, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Open Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,36 +0,0 @@
|
||||||
/* lora-regular - latin */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lora';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
src: url('/fonts/Lora-Regular.eot'); /* IE9 Compat Modes */
|
|
||||||
src: local('Lora'), local('Lora-Regular'),
|
|
||||||
url('/fonts/Lora-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
|
||||||
url('/fonts/Lora-Regular.woff2') format('woff2'), /* Super Modern Browsers */
|
|
||||||
url('/fonts/Lora-Regular.woff') format('woff'), /* Modern Browsers */
|
|
||||||
url('/fonts/Lora-Regular.ttf') format('truetype'); /* Safari, Android, iOS */
|
|
||||||
}
|
|
||||||
/* lora-700 - latin */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lora';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
src: url('/fonts/Lora-Bold.eot'); /* IE9 Compat Modes */
|
|
||||||
src: local('Lora Bold'), local('Lora-Bold'),
|
|
||||||
url('/fonts/Lora-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
|
||||||
url('/fonts/Lora-Bold.woff2') format('woff2'), /* Super Modern Browsers */
|
|
||||||
url('/fonts/Lora-Bold.woff') format('woff'), /* Modern Browsers */
|
|
||||||
url('/fonts/Lora-Bold.ttf') format('truetype'); /* Safari, Android, iOS */
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Lora';
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 400;
|
|
||||||
src: url('/fonts/Lora-Italic.eot'); /* IE9 Compat Modes */
|
|
||||||
src: local('Lora Italic'), local('Lora-Italic'),
|
|
||||||
url('/fonts/Lora-Italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
|
||||||
url('/fonts/Lora-Italic.woff2') format('woff2'), /* Super Modern Browsers */
|
|
||||||
url('/fonts/Lora-Italic.woff') format('woff'), /* Modern Browsers */
|
|
||||||
url('/fonts/Lora-Italic.ttf') format('truetype'); /* Safari, Android, iOS */
|
|
||||||
}
|
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
<!-- RSS feed -->
|
<!-- RSS feed -->
|
||||||
<link rel="alternate" type="application/rss+xml" title="{{ config.title }}" href="/rss" />
|
<link rel="alternate" type="application/rss+xml" title="{{ config.title }}" href="/rss" />
|
||||||
<!-- Fonts & Styles -->
|
<!-- Fonts & Styles -->
|
||||||
<link rel="stylesheet" href="/fonts/lora.css">
|
|
||||||
<link rel="stylesheet" href="/fonts/poppins.css">
|
<link rel="stylesheet" href="/fonts/poppins.css">
|
||||||
<link rel="stylesheet" href="/fonts/fira-sans.css">
|
<link rel="stylesheet" href="/fonts/fira-sans.css">
|
||||||
<link rel="stylesheet" href="/css/common.css">
|
<link rel="stylesheet" href="/css/common.css">
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
[project]
|
|
||||||
name = "madblog"
|
|
||||||
description = "A general-purpose framework for automation"
|
|
||||||
dynamic = ["version", "dependencies", "optional-dependencies", "entry-points", "license"]
|
|
||||||
authors = [
|
|
||||||
{name = "Fabio Manganiello", email = "fabio@manganiello.tech"},
|
|
||||||
]
|
|
||||||
|
|
||||||
classifiers=[
|
|
||||||
"Topic :: Utilities",
|
|
||||||
"License :: OSI Approved :: MIT License",
|
|
||||||
"Development Status :: 4 - Beta",
|
|
||||||
]
|
|
||||||
|
|
||||||
readme = "README.md"
|
|
||||||
requires-python = '>= 3.8'
|
|
||||||
keywords = ["blog", "markdown"]
|
|
||||||
|
|
||||||
[tool.setuptools.dynamic]
|
|
||||||
version = {attr = "madblog.__version__"}
|
|
||||||
dependencies = {file = "requirements.txt"}
|
|
||||||
|
|
||||||
[project.scripts]
|
|
||||||
madblog = 'madblog:__main__'
|
|
||||||
|
|
||||||
[tool.bumpversion]
|
|
||||||
current_version = "0.2.35"
|
|
||||||
commit = true
|
|
||||||
tag = true
|
|
||||||
|
|
||||||
[[tool.bumpversion.files]]
|
|
||||||
filename = "madblog/__init__.py"
|
|
||||||
|
|
||||||
[[tool.bumpversion.files]]
|
|
||||||
filename = "setup.py"
|
|
8
setup.cfg
Normal file
8
setup.cfg
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[bumpversion]
|
||||||
|
current_version = 0.2.21
|
||||||
|
commit = True
|
||||||
|
tag = True
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
description-file = README.md
|
||||||
|
|
39
setup.py
39
setup.py
|
@ -1,41 +1,42 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
|
||||||
def readfile(file):
|
def readfile(file):
|
||||||
with open(file, "r") as f:
|
with open(file, 'r') as f:
|
||||||
return f.read()
|
return f.read()
|
||||||
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="madblog",
|
name='madblog',
|
||||||
version="0.2.35",
|
version='0.2.21',
|
||||||
author="Fabio Manganiello",
|
author='Fabio Manganiello',
|
||||||
author_email="info@fabiomanganiello.com",
|
author_email='info@fabiomanganiello.com',
|
||||||
description="A minimal platform for Markdown-based blogs",
|
description='A minimal platform for Markdown-based blogs',
|
||||||
license="MIT",
|
license='MIT',
|
||||||
python_requires=">= 3.8",
|
python_requires='>= 3.8',
|
||||||
keywords="blog markdown",
|
keywords='blog markdown',
|
||||||
url="https://git.platypush.tech/blacklight/madblog",
|
url='https://git.platypush.tech/blacklight/madblog',
|
||||||
packages=find_packages(include=["madblog"]),
|
packages=find_packages(include=['madblog']),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": [
|
'console_scripts': [
|
||||||
"madblog=madblog.cli:run",
|
'madblog=madblog.cli:run',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
long_description=readfile("README.md"),
|
long_description=readfile('README.md'),
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type='text/markdown',
|
||||||
classifiers=[
|
classifiers=[
|
||||||
"Topic :: Utilities",
|
"Topic :: Utilities",
|
||||||
"License :: OSI Approved :: MIT License",
|
"License :: OSI Approved :: MIT License",
|
||||||
"Development Status :: 4 - Beta",
|
"Development Status :: 4 - Beta",
|
||||||
],
|
],
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"flask",
|
'flask',
|
||||||
"markdown",
|
'markdown',
|
||||||
"pygments",
|
'pygments',
|
||||||
"pyyaml",
|
'pyyaml',
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue