You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

262 lines
7.3 KiB

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
# Probably replace those with simpler methods:
from __future__ import unicode_literals
from operator import itemgetter, methodcaller
AUTHOR = 'Philipp Schönberger'
EMAIL = 'mail AT phschoen.de'
SITENAME = 'https://phschoen.de'
OUTPUT_PATH = 'output/'
STATIC_PATHS = [
'images',
'extra', # this
]
EXTRA_PATH_METADATA = {
'extra/robots.txt': {'path': 'robots.txt'},
'extra/favicon.ico': {'path': 'favicon.ico'},
'extra/loading.gif': {'path': 'theme/images/loading.gif'},
'extra/zoom.png': {'path': 'theme/images/zoom.png'},
'extra/jquery.mousewheel.min.js': {'path': 'js/jquery.mousewheel.min.js'},
'extra/lg-autoplay.js': {'path': 'js/lg-autoplay.js'},
'extra/lg-fullscreen.js': {'path': 'js/lg-fullscreen.js'},
'extra/lg-hash.js': {'path': 'js/lg-hash.js'},
'extra/lg-pager.js': {'path': 'js/lg-pager.js'},
'extra/lg-share.js': {'path': 'js/lg-share.js'},
'extra/lg-zoom.js': {'path': 'js/lg-zoom.js'},
'extra/lightgallery.js': {'path': 'js/lightgallery.js'},
'extra/en.jpg': {'path': 'images/en.jpg'},
'extra/de.jpg': {'path': 'images/de.jpg'},
'extra/lightgallery_setup.css': {'path': 'css/lightgallery_setup.css'},
'extra/lightgallery.css': {'path': 'css/lightgallery.css'},
'extra/fonts/lg.eot': {'path': 'fonts/lg.eot'},
'extra/fonts/lg.svg': {'path': 'fonts/lg.svg'},
'extra/fonts/lg.ttf': {'path': 'fonts/lg.ttf'},
'extra/fonts/lg.woff': {'path': 'fonts/lg.woff'},
'extra/googlec921759af9dae688.html': {'path': 'googlec921759af9dae688.html'},
}
# Base URL this page is hosted at:
SITENAME = 'phschoen.de'
SITEURL = 'https://phschoen.de'
# Timezone is GMT+1:
TIMEZONE = 'Europe/Paris'
# Using a simple date format:
DEFAULT_DATE_FORMAT = ('%d %b %Y')
DEFAULT_LANG = 'en'
DATE_FORMATS = {
'en': '%-d/%b/%Y',
'de': '%-d/%-m/%Y',
}
LOCALE = ('usa', 'de', # On Windows
'en_US', 'de_DE' # On Unix/Linux
)
ARTICLE_URL = 'blog/{slug}'
ARTICLE_SAVE_AS = 'blog/{slug}/index.html'
ARTICLE_LANG_URL = '{lang}/blog/{slug}'
ARTICLE_LANG_SAVE_AS = '{lang}/blog/{slug}.html'
PAGE_URL = '{slug}'
PAGE_SAVE_AS = '{slug}/index.html'
PAGE_LANG_URL = '{lang}/{slug}'
PAGE_LANG_SAVE_AS = '{lang}/{slug}/index.html'
LOCALE = 'en_US'
# We are using the custom minimal theme:
THEME = 'themes/minimal'
THEME = 'themes/bootstrap-4-blog-theme'
THEME_STATIC_DIR = 'theme'
DELETE_OUTPUT_DIRECTORY = True
# MARKUP = ('md',)
# # Markdown Configuration:
MARKDOWN = {
'extension_configs': {
'markdown.extensions.codehilite': {'css_class': 'highlight'},
'markdown.extensions.extra': {},
'markdown.extensions.meta': {},
},
'output_format': 'html5',
}
# We don't use relative URLs:
RELATIVE_URLS = False
# Edit predefined pathes:
ARCHIVES_SAVE_AS = 'pages/index.html'
# Generates nice URLs for pages:
PAGE_URL = '{slug}'
PAGE_SAVE_AS = '{slug}/index.html'
# Generate nice URLs for articles:
ARTICLE_EXCLUDES = (('pages',))
ARTICLE_URL = 'blog/{slug}'
ARTICLE_SAVE_AS = 'blog/{slug}/index.html'
# Generate nice URLs for tags:
TAG_URL = 'tag/{name}/'
TAG_SAVE_AS = 'tag/{name}/index.html'
TAGS_SAVE_AS = 'tags/index.html'
# Generate nice URLs for categories:
CATEGORY_URL = 'category/{name}/'
CATEGORY_SAVE_AS = 'category/{name}/index.html'
# Setup the RSS/ATOM feeds:
FEED_DOMAIN = SITEURL
FEED_MAX_ITEMS = 10
# We only want RSS/ATOM Feeds for all articles, exclude categories:
FEED_RSS = 'feeds/rss.xml'
# TAG_FEED_RSS = 'feeds/{slug}.rss.xml'
CATEGORY_FEED_RSS = None
# Feed generation is usually not desired when developing
FEED_ATOM = 'feeds/atom.xml'
FEED_ALL_ATOM = None
TAG_FEED_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
# Separate page directory and articles directory:
PAGE_PATHS = ['pages']
ARTICLE_PATHS = ['blog']
# Save index as blog/index.html instead of index.html:
INDEX_SAVE_AS = 'blog/index.html'
# Navigation menu:
SECTIONS = [
('Blog', '/blog/', None),
('Projects', '/category/projects', [
('quadrocopter', '/blog/quadrocopter'),
('3d Printer', '/blog/3d-printer'),
]),
('less plastic', '/category/plasticfree/', None),
('Gallery', '/gallery', None),
('about', '/about', None),
('Impressum', '/impressum', None),
]
# Links to display in the footer:
LINKS = [('bsd', 'http://www.opensource.org/licenses/BSD-3-Clause'),
('xhtml', 'http://validator.w3.org/check/referer'),
('css3', 'http://jigsaw.w3.org/css-validator/check/referer?profile=css'),
('pelican', 'https://github.com/getpelican'),
]
# Set some default category:
DEFAULT_CATEGORY = 'uncategorized'
# Social widget
# SOCIAL = (('You can add links in your config file', '#'),
# ('Another social link', '#'),)
# DEFAULT_PAGINATION = 10
PLUGIN_PATHS = ['plugins', ]
PLUGINS = [
'lightgallery',
'i18n_subsites',
'extended-sitemap',
'pelican-bootstrapify',
'render_math'
]
SITEMAP = {
'format': 'xml',
'priorities': {
'articles': 0.5,
'indexes': 0.5,
'pages': 0.5
},
'changefreqs': {
'articles': 'weekly',
'indexes': 'daily',
'pages': 'weekly'
}
}
EXTENDED_SITEMAP_PLUGIN = {
'priorities': {
'index': 1.0,
'articles': 0.8,
'pages': 0.5,
'others': 0.4
},
'changefrequencies': {
'index': 'daily',
'articles': 'weekly',
'pages': 'weekly',
'others': 'weekly',
}
}
GITHUB_SOURCE_PATH = "wooot"
I18N_SUBSITES = {'de': {'SITENAME': 'phschoen.de',
'THEME_STATIC_DIR': 'theme',
'OUTPUT_PATH': './output/de',
},
'en': {'SITENAME': 'phschoen.com',
'SITEURL': SITEURL,
'THEME_STATIC_DIR': 'theme',
'OUTPUT_PATH': './output/',
},
}
languages_lookup = {'en': {'name': 'English',
'icon': SITEURL + '/images/en.jpg'
},
'de': {'name': 'Deutsch',
'icon': SITEURL + '/images/de.jpg'
},
}
def lookup_lang_ico(lang_code):
return languages_lookup[lang_code]['icon']
def lookup_lang_name(lang_code):
return languages_lookup[lang_code]['name']
def getGitHubPage(source_file):
filename = getBasename(source_file)
return '{0}/{1}'.format(GITHUB_SOURCE_PATH, filename)
def getBasename(path):
import ntpath
return ntpath.basename(path)
def month_name(month_number):
import calendar
return calendar.month_name[month_number]
def sortTupleByIndex(items, index=0, reverse=True):
return sorted(items, key=lambda tup: len(tup[index]), reverse=reverse)
def sortDictByKey(items, key, reverse=True, default=None):
if default is None:
return sorted(items, key=itemgetter(key), reverse=reverse)
return sorted(items, key=methodcaller('get', key, default), reverse=reverse)
JINJA_FILTERS = {'month_name': month_name,
'sortTupleByIndex': sortTupleByIndex,
'sortDictByKey': sortDictByKey,
'basename': getBasename,
'asGitHubPage': getGitHubPage,
'lookup_lang_name': lookup_lang_name,
'lookup_lang_ico': lookup_lang_ico,
}