#!/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, }