Initial commit.
This commit is contained in:
commit
ed7fc0d860
7 changed files with 1054 additions and 0 deletions
715
conf.py
Normal file
715
conf.py
Normal file
|
|
@ -0,0 +1,715 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import time
|
||||||
|
|
||||||
|
#!! This is the configuration of Nikola. !!#
|
||||||
|
#!! You should edit it to your liking. !!#
|
||||||
|
|
||||||
|
|
||||||
|
# Data about this site
|
||||||
|
BLOG_AUTHOR = "Jonathan Harker"
|
||||||
|
BLOG_TITLE = "Pukerua Bay Community Garden"
|
||||||
|
# This is the main URL for your site. It will be used
|
||||||
|
# in a prominent link
|
||||||
|
SITE_URL = "http://gardens.pukeruabay.org.nz/"
|
||||||
|
# This is the URL where nikola's output will be deployed.
|
||||||
|
# If not set, defaults to SITE_URL
|
||||||
|
# BASE_URL = "http://getnikola.com/"
|
||||||
|
BLOG_EMAIL = "jonathan@harker.kiwi.nz"
|
||||||
|
BLOG_DESCRIPTION = "The Pukerua Bay community garden and food forest project."
|
||||||
|
|
||||||
|
# Nikola is multilingual!
|
||||||
|
#
|
||||||
|
# Currently supported languages are:
|
||||||
|
# bg Bulgarian
|
||||||
|
# ca Catalan
|
||||||
|
# cs Czech [ALTERNATIVELY cz]
|
||||||
|
# de German
|
||||||
|
# el Greek [NOT gr!]
|
||||||
|
# en English
|
||||||
|
# eo Esperanto
|
||||||
|
# es Spanish
|
||||||
|
# et Estonian
|
||||||
|
# eu Basque
|
||||||
|
# fa Persian
|
||||||
|
# fi Finnish
|
||||||
|
# fr French
|
||||||
|
# hi Hindi
|
||||||
|
# hr Croatian
|
||||||
|
# it Italian
|
||||||
|
# ja Japanese [NOT jp!]
|
||||||
|
# nb Norwegian Bokmål
|
||||||
|
# nl Dutch
|
||||||
|
# pt_br Portuguese (Brasil)
|
||||||
|
# pl Polish
|
||||||
|
# ru Russian
|
||||||
|
# sl Slovenian [NOT sl_si!]
|
||||||
|
# tr Turkish (Turkey) [NOT tr_tr!]
|
||||||
|
# ur Urdu
|
||||||
|
# zh_cn Chinese (Simplified)
|
||||||
|
#
|
||||||
|
# If you want to use Nikola with a non-supported language you have to provide
|
||||||
|
# a module containing the necessary translations
|
||||||
|
# (cf. the modules at nikola/data/themes/base/messages/).
|
||||||
|
# If a specific post is not translated to a language, then the version
|
||||||
|
# in the default language will be shown instead.
|
||||||
|
|
||||||
|
# What is the default language?
|
||||||
|
DEFAULT_LANG = "en"
|
||||||
|
|
||||||
|
# What other languages do you have?
|
||||||
|
# The format is {"translationcode" : "path/to/translation" }
|
||||||
|
# the path will be used as a prefix for the generated pages location
|
||||||
|
TRANSLATIONS = {
|
||||||
|
DEFAULT_LANG: "",
|
||||||
|
# Example for another language:
|
||||||
|
# "es": "./es",
|
||||||
|
}
|
||||||
|
|
||||||
|
# What will translated input files be named like?
|
||||||
|
|
||||||
|
# If you have a page something.rst, then something.rst.pl will be considered
|
||||||
|
# its Polish translation.
|
||||||
|
# (in the above example: path == "something", lang == "pl", ext == "rst")
|
||||||
|
# this pattern is also used for metadata:
|
||||||
|
# something.meta -> something.meta.pl
|
||||||
|
|
||||||
|
TRANSLATIONS_PATTERN = "{path}.{ext}.{lang}"
|
||||||
|
|
||||||
|
# If you don't want your Polish files to be considered Perl code, use this:
|
||||||
|
# TRANSLATIONS_PATTERN = "{path}.{lang}.{ext}"
|
||||||
|
# Note that this pattern will become the default in v7.0.0.
|
||||||
|
|
||||||
|
# Links for the sidebar / navigation bar.
|
||||||
|
# You should provide a key-value pair for each used language.
|
||||||
|
NAVIGATION_LINKS = {
|
||||||
|
DEFAULT_LANG: (
|
||||||
|
('/archive.html', 'Archives'),
|
||||||
|
('/categories/index.html', 'Tags'),
|
||||||
|
('/rss.xml', 'RSS'),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
# Below this point, everything is optional
|
||||||
|
|
||||||
|
# While nikola can select a sensible locale for each language,
|
||||||
|
# sometimes explicit control can come handy.
|
||||||
|
# In this file we express locales in the string form that
|
||||||
|
# python's locales will accept in your OS, by example
|
||||||
|
# "en_US.utf8" in unix-like OS, "English_United States" in Windows.
|
||||||
|
# LOCALES = dict mapping language --> explicit locale for the languages
|
||||||
|
# in TRANSLATIONS. You can ommit one or more keys.
|
||||||
|
# LOCALE_FALLBACK = locale to use when an explicit locale is unavailable
|
||||||
|
# LOCALE_DEFAULT = locale to use for languages not mentioned in LOCALES; if
|
||||||
|
# not set the default Nikola mapping is used.
|
||||||
|
|
||||||
|
# POSTS and PAGES contains (wildcard, destination, template) tuples.
|
||||||
|
#
|
||||||
|
# The wildcard is used to generate a list of reSt source files
|
||||||
|
# (whatever/thing.txt).
|
||||||
|
#
|
||||||
|
# That fragment could have an associated metadata file (whatever/thing.meta),
|
||||||
|
# and optionally translated files (example for spanish, with code "es"):
|
||||||
|
# whatever/thing.txt.es and whatever/thing.meta.es
|
||||||
|
#
|
||||||
|
# This assumes you use the default TRANSLATIONS_PATTERN.
|
||||||
|
#
|
||||||
|
# From those files, a set of HTML fragment files will be generated:
|
||||||
|
# cache/whatever/thing.html (and maybe cache/whatever/thing.html.es)
|
||||||
|
#
|
||||||
|
# These files are combinated with the template to produce rendered
|
||||||
|
# pages, which will be placed at
|
||||||
|
# output / TRANSLATIONS[lang] / destination / pagename.html
|
||||||
|
#
|
||||||
|
# where "pagename" is the "slug" specified in the metadata file.
|
||||||
|
#
|
||||||
|
# The difference between POSTS and PAGES is that POSTS are added
|
||||||
|
# to feeds and are considered part of a blog, while PAGES are
|
||||||
|
# just independent HTML pages.
|
||||||
|
#
|
||||||
|
|
||||||
|
POSTS = (
|
||||||
|
("posts/*.rst", "posts", "post.tmpl"),
|
||||||
|
("posts/*.txt", "posts", "post.tmpl"),
|
||||||
|
)
|
||||||
|
PAGES = (
|
||||||
|
("stories/*.rst", "stories", "story.tmpl"),
|
||||||
|
("stories/*.txt", "stories", "story.tmpl"),
|
||||||
|
)
|
||||||
|
|
||||||
|
# One or more folders containing files to be copied as-is into the output.
|
||||||
|
# The format is a dictionary of "source" "relative destination".
|
||||||
|
# Default is:
|
||||||
|
# FILES_FOLDERS = {'files': '' }
|
||||||
|
# Which means copy 'files' into 'output'
|
||||||
|
|
||||||
|
# A mapping of languages to file-extensions that represent that language.
|
||||||
|
# Feel free to add or delete extensions to any list, but don't add any new
|
||||||
|
# compilers unless you write the interface for it yourself.
|
||||||
|
#
|
||||||
|
# 'rest' is reStructuredText
|
||||||
|
# 'markdown' is MarkDown
|
||||||
|
# 'html' assumes the file is html and just copies it
|
||||||
|
COMPILERS = {
|
||||||
|
"rest": ('.rst', '.txt'),
|
||||||
|
"markdown": ('.md', '.mdown', '.markdown'),
|
||||||
|
"textile": ('.textile',),
|
||||||
|
"txt2tags": ('.t2t',),
|
||||||
|
"bbcode": ('.bb',),
|
||||||
|
"wiki": ('.wiki',),
|
||||||
|
"ipynb": ('.ipynb',),
|
||||||
|
"html": ('.html', '.htm'),
|
||||||
|
# PHP files are rendered the usual way (i.e. with the full templates).
|
||||||
|
# The resulting files have .php extensions, making it possible to run
|
||||||
|
# them without reconfiguring your server to recognize them.
|
||||||
|
"php": ('.php',),
|
||||||
|
# Pandoc detects the input from the source filename
|
||||||
|
# but is disabled by default as it would conflict
|
||||||
|
# with many of the others.
|
||||||
|
# "pandoc": ('.rst', '.md', '.txt'),
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create by default posts in one file format?
|
||||||
|
# Set to False for two-file posts, with separate metadata.
|
||||||
|
# ONE_FILE_POSTS = True
|
||||||
|
|
||||||
|
# If this is set to True, then posts that are not translated to a language
|
||||||
|
# LANG will not be visible at all in the pages in that language.
|
||||||
|
# If set to False, the DEFAULT_LANG version will be displayed for
|
||||||
|
# untranslated posts.
|
||||||
|
# HIDE_UNTRANSLATED_POSTS = False
|
||||||
|
|
||||||
|
# Paths for different autogenerated bits. These are combined with the
|
||||||
|
# translation paths.
|
||||||
|
|
||||||
|
# Final locations are:
|
||||||
|
# output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags)
|
||||||
|
# output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag)
|
||||||
|
# output / TRANSLATION[lang] / TAG_PATH / tag.xml (RSS feed for a tag)
|
||||||
|
# TAG_PATH = "categories"
|
||||||
|
|
||||||
|
# If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain
|
||||||
|
# the posts themselves. If set to False, it will be just a list of links.
|
||||||
|
# TAG_PAGES_ARE_INDEXES = True
|
||||||
|
|
||||||
|
# Final location for the main blog page and sibling paginated pages is
|
||||||
|
# output / TRANSLATION[lang] / INDEX_PATH / index-*.html
|
||||||
|
# INDEX_PATH = ""
|
||||||
|
|
||||||
|
# Create per-month archives instead of per-year
|
||||||
|
# CREATE_MONTHLY_ARCHIVE = False
|
||||||
|
# Create one large archive instead of per-year
|
||||||
|
# CREATE_SINGLE_ARCHIVE = False
|
||||||
|
# Final locations for the archives are:
|
||||||
|
# output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME
|
||||||
|
# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html
|
||||||
|
# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html
|
||||||
|
# ARCHIVE_PATH = ""
|
||||||
|
# ARCHIVE_FILENAME = "archive.html"
|
||||||
|
|
||||||
|
# URLs to other posts/pages can take 3 forms:
|
||||||
|
# rel_path: a relative URL to the current page/post (default)
|
||||||
|
# full_path: a URL with the full path from the root
|
||||||
|
# absolute: a complete URL (that includes the SITE_URL)
|
||||||
|
# URL_TYPE = 'rel_path'
|
||||||
|
|
||||||
|
# Final location for the blog main RSS feed is:
|
||||||
|
# output / TRANSLATION[lang] / RSS_PATH / rss.xml
|
||||||
|
# RSS_PATH = ""
|
||||||
|
|
||||||
|
# Number of posts in RSS feeds
|
||||||
|
# FEED_LENGTH = 10
|
||||||
|
|
||||||
|
# Slug the Tag URL easier for users to type, special characters are
|
||||||
|
# often removed or replaced as well.
|
||||||
|
# SLUG_TAG_PATH = True
|
||||||
|
|
||||||
|
# A list of redirection tuples, [("foo/from.html", "/bar/to.html")].
|
||||||
|
#
|
||||||
|
# A HTML file will be created in output/foo/from.html that redirects
|
||||||
|
# to the "/bar/to.html" URL. notice that the "from" side MUST be a
|
||||||
|
# relative URL.
|
||||||
|
#
|
||||||
|
# If you don't need any of these, just set to []
|
||||||
|
# REDIRECTIONS = []
|
||||||
|
|
||||||
|
# Commands to execute to deploy. Can be anything, for example,
|
||||||
|
# you may use rsync:
|
||||||
|
# "rsync -rav --delete output/ joe@my.site:/srv/www/site"
|
||||||
|
# And then do a backup, or run `nikola ping` from the `ping`
|
||||||
|
# plugin (`nikola install_plugin ping`).
|
||||||
|
# To do manual deployment, set it to []
|
||||||
|
DEPLOY_COMMANDS = ['rsync -avz --delete output/* tauceti.openblue.co.nz:sites/pukeruabay/gardens/www/']
|
||||||
|
|
||||||
|
# Where the output site should be located
|
||||||
|
# If you don't use an absolute path, it will be considered as relative
|
||||||
|
# to the location of conf.py
|
||||||
|
# OUTPUT_FOLDER = 'output'
|
||||||
|
|
||||||
|
# where the "cache" of partial generated content should be located
|
||||||
|
# default: 'cache'
|
||||||
|
# CACHE_FOLDER = 'cache'
|
||||||
|
|
||||||
|
# Filters to apply to the output.
|
||||||
|
# A directory where the keys are either: a file extensions, or
|
||||||
|
# a tuple of file extensions.
|
||||||
|
#
|
||||||
|
# And the value is a list of commands to be applied in order.
|
||||||
|
#
|
||||||
|
# Each command must be either:
|
||||||
|
#
|
||||||
|
# A string containing a '%s' which will
|
||||||
|
# be replaced with a filename. The command *must* produce output
|
||||||
|
# in place.
|
||||||
|
#
|
||||||
|
# Or:
|
||||||
|
#
|
||||||
|
# A python callable, which will be called with the filename as
|
||||||
|
# argument.
|
||||||
|
#
|
||||||
|
# By default, there are no filters.
|
||||||
|
#
|
||||||
|
# Many filters are shipped with Nikola. A list is available in the manual:
|
||||||
|
# <http://getnikola.com/handbook.html#post-processing-filters>
|
||||||
|
# FILTERS = {
|
||||||
|
# ".jpg": ["jpegoptim --strip-all -m75 -v %s"],
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Expert setting! Create a gzipped copy of each generated file. Cheap server-
|
||||||
|
# side optimization for very high traffic sites or low memory servers.
|
||||||
|
# GZIP_FILES = False
|
||||||
|
# File extensions that will be compressed
|
||||||
|
# GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.xml')
|
||||||
|
# Use an external gzip command? None means no.
|
||||||
|
# Example: GZIP_COMMAND = "pigz -k {filename}"
|
||||||
|
# GZIP_COMMAND = None
|
||||||
|
# Make sure the server does not return a "Accept-Ranges: bytes" header for
|
||||||
|
# files compressed by this option! OR make sure that a ranged request does not
|
||||||
|
# return partial content of another representation for these resources. Do not
|
||||||
|
# use this feature if you do not understand what this means.
|
||||||
|
|
||||||
|
# Compiler to process LESS files.
|
||||||
|
# LESS_COMPILER = 'lessc'
|
||||||
|
|
||||||
|
# A list of options to pass to the LESS compiler.
|
||||||
|
# Final command is: LESS_COMPILER LESS_OPTIONS file.less
|
||||||
|
# LESS_OPTIONS = []
|
||||||
|
|
||||||
|
# Compiler to process Sass files.
|
||||||
|
# SASS_COMPILER = 'sass'
|
||||||
|
|
||||||
|
# A list of options to pass to the Sass compiler.
|
||||||
|
# Final command is: SASS_COMPILER SASS_OPTIONS file.s(a|c)ss
|
||||||
|
# SASS_OPTIONS = []
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# Image Gallery Options
|
||||||
|
# #############################################################################
|
||||||
|
|
||||||
|
# Galleries are folders in galleries/
|
||||||
|
# Final location of galleries will be output / GALLERY_PATH / gallery_name
|
||||||
|
GALLERY_PATH = "galleries"
|
||||||
|
THUMBNAIL_SIZE = 180
|
||||||
|
MAX_IMAGE_SIZE = 1280
|
||||||
|
USE_FILENAME_AS_TITLE = True
|
||||||
|
EXTRA_IMAGE_EXTENSIONS = []
|
||||||
|
#
|
||||||
|
# If set to False, it will sort by filename instead. Defaults to True
|
||||||
|
GALLERY_SORT_BY_DATE = True
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# HTML fragments and diverse things that are used by the templates
|
||||||
|
# #############################################################################
|
||||||
|
|
||||||
|
# Data about post-per-page indexes.
|
||||||
|
# INDEXES_PAGES defaults to 'old posts, page %d' or 'page %d' (translated),
|
||||||
|
# depending on the value of INDEXES_PAGES_MAIN.
|
||||||
|
# INDEXES_TITLE = "" # If this is empty, defaults to BLOG_TITLE
|
||||||
|
# INDEXES_PAGES = "" # If this is empty, defaults to '[old posts,] page %d' (see above)
|
||||||
|
# INDEXES_PAGES_MAIN = False # If True, INDEXES_PAGES is also displayed on
|
||||||
|
# the main (the newest) index page (index.html)
|
||||||
|
|
||||||
|
# Name of the theme to use.
|
||||||
|
THEME = "bootstrap3"
|
||||||
|
|
||||||
|
# Color scheme to be used for code blocks. If your theme provides
|
||||||
|
# "assets/css/code.css" this is ignored.
|
||||||
|
# Can be any of autumn borland bw colorful default emacs friendly fruity manni
|
||||||
|
# monokai murphy native pastie perldoc rrt tango trac vim vs
|
||||||
|
# CODE_COLOR_SCHEME = 'default'
|
||||||
|
|
||||||
|
# If you use 'site-reveal' theme you can select several subthemes
|
||||||
|
# THEME_REVEAL_CONFIG_SUBTHEME = 'sky'
|
||||||
|
# You can also use: beige/serif/simple/night/default
|
||||||
|
|
||||||
|
# Again, if you use 'site-reveal' theme you can select several transitions
|
||||||
|
# between the slides
|
||||||
|
# THEME_REVEAL_CONFIG_TRANSITION = 'cube'
|
||||||
|
# You can also use: page/concave/linear/none/default
|
||||||
|
|
||||||
|
# date format used to display post dates.
|
||||||
|
# (str used by datetime.datetime.strftime)
|
||||||
|
# DATE_FORMAT = '%Y-%m-%d %H:%M'
|
||||||
|
|
||||||
|
# FAVICONS contains (name, file, size) tuples.
|
||||||
|
# Used for create favicon link like this:
|
||||||
|
# <link rel="name" href="file" sizes="size"/>
|
||||||
|
# For creating favicons, take a look at:
|
||||||
|
# http://www.netmagazine.com/features/create-perfect-favicon
|
||||||
|
# FAVICONS = {
|
||||||
|
# ("icon", "/favicon.ico", "16x16"),
|
||||||
|
# ("icon", "/icon_128x128.png", "128x128"),
|
||||||
|
# }
|
||||||
|
|
||||||
|
# Show only teasers in the index pages? Defaults to False.
|
||||||
|
# INDEX_TEASERS = False
|
||||||
|
|
||||||
|
# A HTML fragment with the Read more... link.
|
||||||
|
# The following tags exist and are replaced for you:
|
||||||
|
# {link} A link to the full post page.
|
||||||
|
# {read_more} The string “Read more” in the current language.
|
||||||
|
# {{ A literal { (U+007B LEFT CURLY BRACKET)
|
||||||
|
# }} A literal } (U+007D RIGHT CURLY BRACKET)
|
||||||
|
# READ_MORE_LINK = '<p class="more"><a href="{link}">{read_more}…</a></p>'
|
||||||
|
|
||||||
|
# A HTML fragment describing the license, for the sidebar.
|
||||||
|
LICENSE = ""
|
||||||
|
# I recommend using the Creative Commons' wizard:
|
||||||
|
# http://creativecommons.org/choose/
|
||||||
|
# LICENSE = """
|
||||||
|
# <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/">
|
||||||
|
# <img alt="Creative Commons License BY-NC-SA"
|
||||||
|
# style="border-width:0; margin-bottom:12px;"
|
||||||
|
# src="http://i.creativecommons.org/l/by-nc-sa/2.5/ar/88x31.png"></a>"""
|
||||||
|
|
||||||
|
# A small copyright notice for the page footer (in HTML).
|
||||||
|
CONTENT_FOOTER = 'Contents © {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="http://getnikola.com" rel="nofollow">Nikola</a> {license}'
|
||||||
|
CONTENT_FOOTER = CONTENT_FOOTER.format(email=BLOG_EMAIL,
|
||||||
|
author=BLOG_AUTHOR,
|
||||||
|
date=time.gmtime().tm_year,
|
||||||
|
license=LICENSE)
|
||||||
|
|
||||||
|
# To use comments, you can choose between different third party comment
|
||||||
|
# systems, one of "disqus", "livefyre", "intensedebate", "moot",
|
||||||
|
# "googleplus", "facebook" or "isso"
|
||||||
|
COMMENT_SYSTEM = "disqus"
|
||||||
|
# And you also need to add your COMMENT_SYSTEM_ID which
|
||||||
|
# depends on what comment system you use. The default is
|
||||||
|
# "nikolademo" which is a test account for Disqus. More information
|
||||||
|
# is in the manual.
|
||||||
|
COMMENT_SYSTEM_ID = "pukeruabaygardens"
|
||||||
|
|
||||||
|
# Enable annotations using annotateit.org?
|
||||||
|
# If set to False, you can still enable them for individual posts and pages
|
||||||
|
# setting the "annotations" metadata.
|
||||||
|
# If set to True, you can disable them for individual posts and pages using
|
||||||
|
# the "noannotations" metadata.
|
||||||
|
# ANNOTATIONS = False
|
||||||
|
|
||||||
|
# Create index.html for story folders?
|
||||||
|
# STORY_INDEX = False
|
||||||
|
# Enable comments on story pages?
|
||||||
|
# COMMENTS_IN_STORIES = False
|
||||||
|
# Enable comments on picture gallery pages?
|
||||||
|
# COMMENTS_IN_GALLERIES = False
|
||||||
|
|
||||||
|
# What file should be used for directory indexes?
|
||||||
|
# Defaults to index.html
|
||||||
|
# Common other alternatives: default.html for IIS, index.php
|
||||||
|
# INDEX_FILE = "index.html"
|
||||||
|
|
||||||
|
# If a link ends in /index.html, drop the index.html part.
|
||||||
|
# http://mysite/foo/bar/index.html => http://mysite/foo/bar/
|
||||||
|
# (Uses the INDEX_FILE setting, so if that is, say, default.html,
|
||||||
|
# it will instead /foo/default.html => /foo)
|
||||||
|
# (Note: This was briefly STRIP_INDEX_HTML in v 5.4.3 and 5.4.4)
|
||||||
|
# Default = False
|
||||||
|
# STRIP_INDEXES = False
|
||||||
|
|
||||||
|
# Should the sitemap list directories which only include other directories
|
||||||
|
# and no files.
|
||||||
|
# Default to True
|
||||||
|
# If this is False
|
||||||
|
# e.g. /2012 includes only /01, /02, /03, /04, ...: don't add it to the sitemap
|
||||||
|
# if /2012 includes any files (including index.html)... add it to the sitemap
|
||||||
|
# SITEMAP_INCLUDE_FILELESS_DIRS = True
|
||||||
|
|
||||||
|
# Instead of putting files in <slug>.html, put them in
|
||||||
|
# <slug>/index.html. Also enables STRIP_INDEXES
|
||||||
|
# This can be disabled on a per-page/post basis by adding
|
||||||
|
# .. pretty_url: False
|
||||||
|
# to the metadata
|
||||||
|
# PRETTY_URLS = False
|
||||||
|
|
||||||
|
# If True, publish future dated posts right away instead of scheduling them.
|
||||||
|
# Defaults to False.
|
||||||
|
# FUTURE_IS_NOW = False
|
||||||
|
|
||||||
|
# If True, future dated posts are allowed in deployed output
|
||||||
|
# Only the individual posts are published/deployed; not in indexes/sitemap
|
||||||
|
# Generally, you want FUTURE_IS_NOW and DEPLOY_FUTURE to be the same value.
|
||||||
|
# DEPLOY_FUTURE = False
|
||||||
|
# If False, draft posts will not be deployed
|
||||||
|
# DEPLOY_DRAFTS = True
|
||||||
|
|
||||||
|
# Allows scheduling of posts using the rule specified here (new_post -s)
|
||||||
|
# Specify an iCal Recurrence Rule: http://www.kanzaki.com/docs/ical/rrule.html
|
||||||
|
# SCHEDULE_RULE = ''
|
||||||
|
# If True, use the scheduling rule to all posts by default
|
||||||
|
# SCHEDULE_ALL = False
|
||||||
|
# If True, schedules post to today if possible, even if scheduled hour is over
|
||||||
|
# SCHEDULE_FORCE_TODAY = False
|
||||||
|
|
||||||
|
# Do you want a add a Mathjax config file?
|
||||||
|
# MATHJAX_CONFIG = ""
|
||||||
|
|
||||||
|
# If you are using the compile-ipynb plugin, just add this one:
|
||||||
|
#MATHJAX_CONFIG = """
|
||||||
|
#<script type="text/x-mathjax-config">
|
||||||
|
#MathJax.Hub.Config({
|
||||||
|
# tex2jax: {
|
||||||
|
# inlineMath: [ ['$','$'], ["\\\(","\\\)"] ],
|
||||||
|
# displayMath: [ ['$$','$$'], ["\\\[","\\\]"] ]
|
||||||
|
# },
|
||||||
|
# displayAlign: 'left', // Change this to 'center' to center equations.
|
||||||
|
# "HTML-CSS": {
|
||||||
|
# styles: {'.MathJax_Display': {"margin": 0}}
|
||||||
|
# }
|
||||||
|
#});
|
||||||
|
#</script>
|
||||||
|
#"""
|
||||||
|
|
||||||
|
# Do you want to customize the nbconversion of your IPython notebook?
|
||||||
|
# IPYNB_CONFIG = {}
|
||||||
|
# With the following example configuracion you can use a custom jinja template
|
||||||
|
# called `toggle.tpl` which has to be located in your site/blog main folder:
|
||||||
|
# IPYNB_CONFIG = {'Exporter':{'template_file': 'toggle'}}
|
||||||
|
|
||||||
|
# What MarkDown extensions to enable?
|
||||||
|
# You will also get gist, nikola and podcast because those are
|
||||||
|
# done in the code, hope you don't mind ;-)
|
||||||
|
# MARKDOWN_EXTENSIONS = ['fenced_code', 'codehilite']
|
||||||
|
|
||||||
|
# Social buttons. This is sample code for AddThis (which was the default for a
|
||||||
|
# long time). Insert anything you want here, or even make it empty.
|
||||||
|
# SOCIAL_BUTTONS_CODE = """
|
||||||
|
# <!-- Social buttons -->
|
||||||
|
# <div id="addthisbox" class="addthis_toolbox addthis_peekaboo_style addthis_default_style addthis_label_style addthis_32x32_style">
|
||||||
|
# <a class="addthis_button_more">Share</a>
|
||||||
|
# <ul><li><a class="addthis_button_facebook"></a>
|
||||||
|
# <li><a class="addthis_button_google_plusone_share"></a>
|
||||||
|
# <li><a class="addthis_button_linkedin"></a>
|
||||||
|
# <li><a class="addthis_button_twitter"></a>
|
||||||
|
# </ul>
|
||||||
|
# </div>
|
||||||
|
# <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4f7088a56bb93798"></script>
|
||||||
|
# <!-- End of social buttons -->
|
||||||
|
# """
|
||||||
|
|
||||||
|
# Hide link to source for the posts?
|
||||||
|
HIDE_SOURCELINK = True
|
||||||
|
# Copy the source files for your pages?
|
||||||
|
# Setting it to False implies HIDE_SOURCELINK = True
|
||||||
|
COPY_SOURCES = False
|
||||||
|
|
||||||
|
# Modify the number of Post per Index Page
|
||||||
|
# Defaults to 10
|
||||||
|
# INDEX_DISPLAY_POST_COUNT = 10
|
||||||
|
|
||||||
|
# RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None,
|
||||||
|
# the base.tmpl will use the feed Nikola generates. However, you may want to
|
||||||
|
# change it for a feedburner feed or something else.
|
||||||
|
# RSS_LINK = None
|
||||||
|
|
||||||
|
# Show only teasers in the RSS feed? Default to True
|
||||||
|
# RSS_TEASERS = True
|
||||||
|
|
||||||
|
# A search form to search this site, for the sidebar. You can use a google
|
||||||
|
# custom search (http://www.google.com/cse/)
|
||||||
|
# Or a duckduckgo search: https://duckduckgo.com/search_box.html
|
||||||
|
# Default is no search form.
|
||||||
|
# SEARCH_FORM = ""
|
||||||
|
#
|
||||||
|
# This search form works for any site and looks good in the "site" theme where
|
||||||
|
# it appears on the navigation bar:
|
||||||
|
#
|
||||||
|
#SEARCH_FORM = """
|
||||||
|
#<!-- Custom search -->
|
||||||
|
#<form method="get" id="search" action="http://duckduckgo.com/"
|
||||||
|
# class="navbar-form pull-left">
|
||||||
|
#<input type="hidden" name="sites" value="%s"/>
|
||||||
|
#<input type="hidden" name="k8" value="#444444"/>
|
||||||
|
#<input type="hidden" name="k9" value="#D51920"/>
|
||||||
|
#<input type="hidden" name="kt" value="h"/>
|
||||||
|
#<input type="text" name="q" maxlength="255"
|
||||||
|
# placeholder="Search…" class="span2" style="margin-top: 4px;"/>
|
||||||
|
#<input type="submit" value="DuckDuckGo Search" style="visibility: hidden;" />
|
||||||
|
#</form>
|
||||||
|
#<!-- End of custom search -->
|
||||||
|
#""" % SITE_URL
|
||||||
|
#
|
||||||
|
# If you prefer a google search form, here's an example that should just work:
|
||||||
|
#SEARCH_FORM = """
|
||||||
|
#<!-- Custom search with google-->
|
||||||
|
#<form id="search" action="http://google.com/search" method="get" class="navbar-form pull-left">
|
||||||
|
#<input type="hidden" name="q" value="site:%s" />
|
||||||
|
#<input type="text" name="q" maxlength="255" results="0" placeholder="Search"/>
|
||||||
|
#</form>
|
||||||
|
#<!-- End of custom search -->
|
||||||
|
#""" % SITE_URL
|
||||||
|
|
||||||
|
# Also, there is a local search plugin you can use, based on Tipue, but it requires setting several
|
||||||
|
# options:
|
||||||
|
|
||||||
|
# SEARCH_FORM = """
|
||||||
|
# <span class="navbar-form pull-left">
|
||||||
|
# <input type="text" id="tipue_search_input">
|
||||||
|
# </span>"""
|
||||||
|
#
|
||||||
|
# BODY_END = """
|
||||||
|
# <script type="text/javascript" src="/assets/js/tipuesearch_set.js"></script>
|
||||||
|
# <script type="text/javascript" src="/assets/js/tipuesearch.js"></script>
|
||||||
|
# <script type="text/javascript">
|
||||||
|
# $(document).ready(function() {
|
||||||
|
# $('#tipue_search_input').tipuesearch({
|
||||||
|
# 'mode': 'json',
|
||||||
|
# 'contentLocation': '/assets/js/tipuesearch_content.json',
|
||||||
|
# 'showUrl': false
|
||||||
|
# });
|
||||||
|
# });
|
||||||
|
# </script>
|
||||||
|
# """
|
||||||
|
|
||||||
|
# EXTRA_HEAD_DATA = """
|
||||||
|
# <link rel="stylesheet" type="text/css" href="/assets/css/tipuesearch.css">
|
||||||
|
# <div id="tipue_search_content" style="margin-left: auto; margin-right: auto; padding: 20px;"></div>
|
||||||
|
# """
|
||||||
|
# ENABLED_EXTRAS = ['local_search']
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# Use content distribution networks for jquery and twitter-bootstrap css and js
|
||||||
|
# If this is True, jquery is served from the Google CDN and twitter-bootstrap
|
||||||
|
# is served from the NetDNA CDN
|
||||||
|
# Set this to False if you want to host your site without requiring access to
|
||||||
|
# external resources.
|
||||||
|
# USE_CDN = False
|
||||||
|
|
||||||
|
# Extra things you want in the pages HEAD tag. This will be added right
|
||||||
|
# before </head>
|
||||||
|
# EXTRA_HEAD_DATA = ""
|
||||||
|
# Google Analytics or whatever else you use. Added to the bottom of <body>
|
||||||
|
# in the default template (base.tmpl).
|
||||||
|
# BODY_END = ""
|
||||||
|
|
||||||
|
# The possibility to extract metadata from the filename by using a
|
||||||
|
# regular expression.
|
||||||
|
# To make it work you need to name parts of your regular expression.
|
||||||
|
# The following names will be used to extract metadata:
|
||||||
|
# - title
|
||||||
|
# - slug
|
||||||
|
# - date
|
||||||
|
# - tags
|
||||||
|
# - link
|
||||||
|
# - description
|
||||||
|
#
|
||||||
|
# An example re is the following:
|
||||||
|
# '(?P<date>\d{4}-\d{2}-\d{2})-(?P<slug>.*)-(?P<title>.*)\.md'
|
||||||
|
# FILE_METADATA_REGEXP = None
|
||||||
|
|
||||||
|
# Additional metadata that is added to a post when creating a new_post
|
||||||
|
# ADDITIONAL_METADATA = {}
|
||||||
|
|
||||||
|
# Nikola supports Twitter Card summaries / Open Graph.
|
||||||
|
# Twitter cards make it possible for you to attach media to Tweets
|
||||||
|
# that link to your content.
|
||||||
|
#
|
||||||
|
# IMPORTANT:
|
||||||
|
# Please note, that you need to opt-in for using Twitter Cards!
|
||||||
|
# To do this please visit
|
||||||
|
# https://dev.twitter.com/form/participate-twitter-cards
|
||||||
|
#
|
||||||
|
# Uncomment and modify to following lines to match your accounts.
|
||||||
|
# Specifying the id for either 'site' or 'creator' will be preferred
|
||||||
|
# over the cleartext username. Specifying an ID is not necessary.
|
||||||
|
# Displaying images is currently not supported.
|
||||||
|
# TWITTER_CARD = {
|
||||||
|
# # 'use_twitter_cards': True, # enable Twitter Cards / Open Graph
|
||||||
|
# # 'site': '@website', # twitter nick for the website
|
||||||
|
# # 'site:id': 123456, # Same as site, but the website's Twitter user ID
|
||||||
|
# # instead.
|
||||||
|
# # 'creator': '@username', # Username for the content creator / author.
|
||||||
|
# # 'creator:id': 654321, # Same as creator, but the Twitter user's ID.
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
|
# Post's dates are considered in UTC by default, if you want to use
|
||||||
|
# another time zone, please set TIMEZONE to match. Check the available
|
||||||
|
# list from Wikipedia:
|
||||||
|
# http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||||
|
# (eg. 'Europe/Zurich')
|
||||||
|
# Also, if you want to use a different time zone in some of your posts,
|
||||||
|
# you can use W3C-DTF Format (ex. 2012-03-30T23:00:00+02:00)
|
||||||
|
#
|
||||||
|
TIMEZONE = 'Pacific/Auckland'
|
||||||
|
|
||||||
|
# If webassets is installed, bundle JS and CSS to make site loading faster
|
||||||
|
# USE_BUNDLES = True
|
||||||
|
|
||||||
|
# Plugins you don't want to use. Be careful :-)
|
||||||
|
# DISABLED_PLUGINS = ["render_galleries"]
|
||||||
|
|
||||||
|
# Add the absolute paths to directories containing plugins to use them.
|
||||||
|
# For example, the `plugins` directory of your clone of the Nikola plugins
|
||||||
|
# repository.
|
||||||
|
# EXTRA_PLUGINS_DIRS = []
|
||||||
|
|
||||||
|
# Experimental plugins - use at your own risk.
|
||||||
|
# They probably need some manual adjustments - please see their respective
|
||||||
|
# readme.
|
||||||
|
# ENABLED_EXTRAS = [
|
||||||
|
# 'planetoid',
|
||||||
|
# 'ipynb',
|
||||||
|
# 'local_search',
|
||||||
|
# 'render_mustache',
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# List of regular expressions, links matching them will always be considered
|
||||||
|
# valid by "nikola check -l"
|
||||||
|
# LINK_CHECK_WHITELIST = []
|
||||||
|
|
||||||
|
# If set to True, enable optional hyphenation in your posts (requires pyphen)
|
||||||
|
# HYPHENATE = False
|
||||||
|
|
||||||
|
# The <hN> tags in HTML generated by certain compilers (reST/Markdown)
|
||||||
|
# will be demoted by that much (1 → h1 will become h2 and so on)
|
||||||
|
# This was a hidden feature of the Markdown and reST compilers in the
|
||||||
|
# past. Useful especially if your post titles are in <h1> tags too, for
|
||||||
|
# example.
|
||||||
|
# (defaults to 1.)
|
||||||
|
# DEMOTE_HEADERS = 1
|
||||||
|
|
||||||
|
# You can configure the logging handlers installed as plugins or change the
|
||||||
|
# log level of the default stdout handler.
|
||||||
|
LOGGING_HANDLERS = {
|
||||||
|
'stderr': {'loglevel': 'WARNING', 'bubble': True},
|
||||||
|
#'smtp': {
|
||||||
|
# 'from_addr': 'test-errors@example.com',
|
||||||
|
# 'recipients': ('test@example.com'),
|
||||||
|
# 'credentials':('testusername', 'password'),
|
||||||
|
# 'server_addr': ('127.0.0.1', 25),
|
||||||
|
# 'secure': (),
|
||||||
|
# 'level': 'DEBUG',
|
||||||
|
# 'bubble': True
|
||||||
|
#}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Templates will use those filters, along with the defaults.
|
||||||
|
# Consult your engine's documentation on filters if you need help defining
|
||||||
|
# those.
|
||||||
|
# TEMPLATE_FILTERS = {}
|
||||||
|
|
||||||
|
# Put in global_context things you want available on all your templates.
|
||||||
|
# It can be anything, data, functions, modules, etc.
|
||||||
|
GLOBAL_CONTEXT = {}
|
||||||
BIN
images/communitygarden-map.png
Normal file
BIN
images/communitygarden-map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
50
plugins/microdata/README.md
Normal file
50
plugins/microdata/README.md
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
This plugin adds microdata semantic markups in reStructuredText for Nikola static blog generator. The original author is Axel Haustant (noirbizarre). This code is fork from https://github.com/noirbizarre/pelican-microdata. The standalone package will be at https://github.com/ivanteoh/nikola-microdata
|
||||||
|
|
||||||
|
Currently supported in general:
|
||||||
|
|
||||||
|
* `itemscope`
|
||||||
|
* `itemprop`
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
```ReST
|
||||||
|
|
||||||
|
.. itemscope:: <Schema type>
|
||||||
|
:tag: element type (default: div)
|
||||||
|
|
||||||
|
Nested content
|
||||||
|
|
||||||
|
|
||||||
|
:itemprop:`Displayed test <itemprop name>`
|
||||||
|
```
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
This reStructuredText document:
|
||||||
|
|
||||||
|
```ReST
|
||||||
|
|
||||||
|
.. itemscope: Person
|
||||||
|
:tag: p
|
||||||
|
|
||||||
|
My name is :itemprop:`Bob Smith <name>`
|
||||||
|
but people call me :itemprop:`Smithy <nickanme>`.
|
||||||
|
Here is my home page:
|
||||||
|
:itemprop:`www.exemple.com <url:http://www.example.com>`
|
||||||
|
I live in Albuquerque, NM and work as an :itemprop:`engineer <title>`
|
||||||
|
at :itemprop:`ACME Corp <affiliation>`.
|
||||||
|
```
|
||||||
|
|
||||||
|
will result in:
|
||||||
|
|
||||||
|
```html
|
||||||
|
|
||||||
|
<p itemscope itemtype="http://data-vocabulary.org/Person">
|
||||||
|
My name is <span itemprop="name">Bob Smith</span>
|
||||||
|
but people call me <span itemprop="nickname">Smithy</span>.
|
||||||
|
Here is my home page:
|
||||||
|
<a href="http://www.example.com" itemprop="url">www.example.com</a>
|
||||||
|
I live in Albuquerque, NM and work as an <span itemprop="title">engineer</span>
|
||||||
|
at <span itemprop="affiliation">ACME Corp</span>.
|
||||||
|
</p>
|
||||||
|
```
|
||||||
13
plugins/microdata/microdata.plugin
Normal file
13
plugins/microdata/microdata.plugin
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
[Core]
|
||||||
|
Name = rest_microdata
|
||||||
|
Module = microdata
|
||||||
|
Tests = test_microdata
|
||||||
|
|
||||||
|
[Nikola]
|
||||||
|
MinVersion = 6.3.0
|
||||||
|
|
||||||
|
[Documentation]
|
||||||
|
Author = Axel Haustant, Ivan Teoh
|
||||||
|
Version = 0.1
|
||||||
|
Website = http://plugins.getnikola.com/#microdata
|
||||||
|
Description = Microdata semantic markups support for Nikola static blog generator.
|
||||||
188
plugins/microdata/microdata.py
Normal file
188
plugins/microdata/microdata.py
Normal file
|
|
@ -0,0 +1,188 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright © 2013-2014 Axel Haustant, Ivan Teoh and others.
|
||||||
|
|
||||||
|
# pelican-microdata is LGPL-licensed.
|
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
from docutils import nodes
|
||||||
|
from docutils.parsers.rst import directives, Directive, roles
|
||||||
|
from nikola.plugin_categories import RestExtension
|
||||||
|
from nikola.plugins.compile.rest import add_node
|
||||||
|
|
||||||
|
RE_ROLE = re.compile(r'(?P<value>.+?)?\s*\<(?P<name>.+)\>')
|
||||||
|
|
||||||
|
|
||||||
|
class Plugin(RestExtension):
|
||||||
|
|
||||||
|
name = "rest_microdata"
|
||||||
|
|
||||||
|
def set_site(self, site):
|
||||||
|
self.site = site
|
||||||
|
directives.register_directive('itemscope', ItemScopeDirective)
|
||||||
|
directives.register_directive('itempropblock', ItemPropDirective)
|
||||||
|
roles.register_canonical_role('itemprop', itemprop_role)
|
||||||
|
|
||||||
|
add_node(ItemProp, visit_ItemProp, depart_ItemProp)
|
||||||
|
add_node(ItemPropBlock, visit_ItemPropBlock, depart_ItemPropBlock)
|
||||||
|
add_node(ItemScope, visit_ItemScope, depart_ItemScope)
|
||||||
|
|
||||||
|
return super(Plugin, self).set_site(site)
|
||||||
|
|
||||||
|
|
||||||
|
class ItemProp(nodes.Inline, nodes.TextElement):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def itemprop_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||||
|
match = RE_ROLE.match(text)
|
||||||
|
if not match or not match.group('name'):
|
||||||
|
raise ValueError('%s does not match expected itemprop format: :itemprop:`value <name>`')
|
||||||
|
value = ''
|
||||||
|
if match.group('value'):
|
||||||
|
value = match.group('value')
|
||||||
|
name = match.group('name')
|
||||||
|
info = ''
|
||||||
|
tag = 'span'
|
||||||
|
if ':' in name:
|
||||||
|
# depreciated, use | for nikola
|
||||||
|
name, info = name.split(':', 1)
|
||||||
|
elif '|' in name:
|
||||||
|
names = name.split('|', 2)
|
||||||
|
name = names[0]
|
||||||
|
if len(names) > 1:
|
||||||
|
info = names[1]
|
||||||
|
if len(names) > 2:
|
||||||
|
tag = names[2]
|
||||||
|
return [ItemProp(value, value, name=name, info=info, tag=tag)], []
|
||||||
|
|
||||||
|
|
||||||
|
class ItemPropBlock(nodes.Element):
|
||||||
|
def __init__(self, tagname, itemprop, classes=None):
|
||||||
|
kwargs = {
|
||||||
|
'itemprop': itemprop,
|
||||||
|
}
|
||||||
|
if classes:
|
||||||
|
kwargs['class'] = classes
|
||||||
|
super(ItemPropBlock, self).__init__('', **kwargs)
|
||||||
|
self.tagname = tagname
|
||||||
|
|
||||||
|
|
||||||
|
class ItemPropDirective(Directive):
|
||||||
|
required_arguments = 1
|
||||||
|
has_content = True
|
||||||
|
option_spec = {
|
||||||
|
'tag': directives.unchanged,
|
||||||
|
'class': directives.unchanged,
|
||||||
|
}
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Raise an error if the directive does not have contents.
|
||||||
|
self.assert_has_content()
|
||||||
|
itemprop = self.arguments[0]
|
||||||
|
tag = self.options.get('tag', 'div')
|
||||||
|
classes = self.options.get('class', None)
|
||||||
|
node = ItemPropBlock(tag, itemprop, classes)
|
||||||
|
self.add_name(node)
|
||||||
|
self.state.nested_parse(self.content, self.content_offset, node)
|
||||||
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
|
class ItemScope(nodes.Element):
|
||||||
|
def __init__(self, tagname, itemtype, itemprop=None, compact=False, classes=None):
|
||||||
|
kwargs = {
|
||||||
|
'itemscope': None,
|
||||||
|
'itemtype': "http://data-vocabulary.org/%s" % itemtype,
|
||||||
|
}
|
||||||
|
if itemprop:
|
||||||
|
kwargs['itemprop'] = itemprop
|
||||||
|
if classes:
|
||||||
|
kwargs['class'] = classes
|
||||||
|
super(ItemScope, self).__init__('', **kwargs)
|
||||||
|
self.tagname = tagname
|
||||||
|
self.compact = tagname == 'p' or compact
|
||||||
|
|
||||||
|
|
||||||
|
class ItemScopeDirective(Directive):
|
||||||
|
required_arguments = 1
|
||||||
|
has_content = True
|
||||||
|
option_spec = {
|
||||||
|
'tag': directives.unchanged,
|
||||||
|
'itemprop': directives.unchanged,
|
||||||
|
'compact': directives.unchanged,
|
||||||
|
'class': directives.unchanged,
|
||||||
|
}
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Raise an error if the directive does not have contents.
|
||||||
|
self.assert_has_content()
|
||||||
|
itemtype = self.arguments[0]
|
||||||
|
tag = self.options.get('tag', 'div')
|
||||||
|
itemprop = self.options.get('itemprop', None)
|
||||||
|
compact = 'compact' in self.options
|
||||||
|
classes = self.options.get('class', None)
|
||||||
|
node = ItemScope(tag, itemtype, itemprop, compact, classes)
|
||||||
|
self.add_name(node)
|
||||||
|
self.state.nested_parse(self.content, self.content_offset, node)
|
||||||
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
|
def visit_ItemProp(self, node):
|
||||||
|
if not node['tag']:
|
||||||
|
node['tag'] = 'span'
|
||||||
|
|
||||||
|
if node['name'] == 'url':
|
||||||
|
node['tag'] = 'a'
|
||||||
|
self.body.append(self.starttag(node, node['tag'], '', itemprop=node['name'], href=node['info']))
|
||||||
|
elif node['tag'] == 'img':
|
||||||
|
self.body.append(self.emptytag(node, node['tag'], '', itemprop=node['name'], src=node['info']))
|
||||||
|
elif node['tag'] == 'time':
|
||||||
|
# TODO: auto convert the time
|
||||||
|
self.body.append(self.starttag(node, node['tag'], '', itemprop=node['name'], datetime=node['info']))
|
||||||
|
elif node['tag'] == 'meta':
|
||||||
|
# TODO: auto convert the time
|
||||||
|
self.body.append(self.emptytag(node, node['tag'], '', itemprop=node['name'], content=node['info']))
|
||||||
|
else:
|
||||||
|
self.body.append(self.starttag(node, node['tag'], '', itemprop=node['name']))
|
||||||
|
|
||||||
|
|
||||||
|
def depart_ItemProp(self, node):
|
||||||
|
end_tag = '</' + node['tag'] + '>'
|
||||||
|
if node['tag'] == 'img' or node['tag'] == 'meta':
|
||||||
|
return
|
||||||
|
self.body.append(end_tag)
|
||||||
|
|
||||||
|
|
||||||
|
def visit_ItemPropBlock(self, node):
|
||||||
|
self.body.append(node.starttag())
|
||||||
|
|
||||||
|
|
||||||
|
def depart_ItemPropBlock(self, node):
|
||||||
|
self.body.append(node.endtag())
|
||||||
|
|
||||||
|
|
||||||
|
def visit_ItemScope(self, node):
|
||||||
|
self.context.append(self.compact_simple)
|
||||||
|
self.compact_simple = node.compact
|
||||||
|
self.body.append(node.starttag())
|
||||||
|
|
||||||
|
|
||||||
|
def depart_ItemScope(self, node):
|
||||||
|
self.compact_simple = self.context.pop()
|
||||||
|
self.body.append(node.endtag())
|
||||||
BIN
plugins/microdata/microdata.pyc
Normal file
BIN
plugins/microdata/microdata.pyc
Normal file
Binary file not shown.
88
posts/pukerua-bay-school-gala.rst
Normal file
88
posts/pukerua-bay-school-gala.rst
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
.. title: Pukerua Bay Community Garden Food Forest Project
|
||||||
|
.. slug: pukerua-bay-community-garden
|
||||||
|
.. date: 2014/03/29 01:45:23
|
||||||
|
.. tags:
|
||||||
|
.. link:
|
||||||
|
.. description:
|
||||||
|
.. type: restructuredText
|
||||||
|
|
||||||
|
.. image:: /assets/images/communitygarden-map.png
|
||||||
|
:align: right
|
||||||
|
:alt: Map of the proposed community garden site in the Muri Reserve.
|
||||||
|
|
||||||
|
Hi folks! If you're reading this, you've either searched for it on Google,
|
||||||
|
or got here from the URL on the brochure at the School Gala. Either way -
|
||||||
|
welcome to the website! I'd like to use this as a hub for lively discussions,
|
||||||
|
organising events, planning sessions and working bees, and sharing of ideas
|
||||||
|
and hopes and goals.
|
||||||
|
|
||||||
|
This site will change once we get started. I will gather the ideas
|
||||||
|
from the gala day and put them up here, and reorganise things into
|
||||||
|
categories as we go.
|
||||||
|
|
||||||
|
Proposed garden site in Muri Reserve
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
The Pukerua Bay Residents' Association have decided on
|
||||||
|
a location for the community garden, in the Muri Reserve behind the closed Muri
|
||||||
|
train station, as indicated on the map. There is a
|
||||||
|
`Google map with more details here <http://goo.gl/Odu8Wx>`_.
|
||||||
|
|
||||||
|
The idea of a community garden in Pukerua Bay has been around for a while, but
|
||||||
|
has gathered steam over the last couple of years. I'd like to really help us
|
||||||
|
get it off the ground by gathering a quorum of interested and willing folks,
|
||||||
|
to plan the next steps.
|
||||||
|
|
||||||
|
Inspirational videos
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Martin Crawford of the Agroforestry Research Centre in Devon UK, shows us
|
||||||
|
around his forest garden project, and explains some of the science and practical
|
||||||
|
principles behind it:
|
||||||
|
|
||||||
|
.. youtube:: b_fhAch5qiY
|
||||||
|
:height: 315
|
||||||
|
:width: 560
|
||||||
|
|
||||||
|
And in New Zealand, Robert and Robyn Guyton show us around their two acre
|
||||||
|
food forest in Riverton, Southland:
|
||||||
|
|
||||||
|
.. youtube:: L74WkW1rWKU
|
||||||
|
:height: 315
|
||||||
|
:width: 560
|
||||||
|
|
||||||
|
Planning
|
||||||
|
--------
|
||||||
|
|
||||||
|
There are several things that we will need to plan:
|
||||||
|
|
||||||
|
- Site assessments of micro-climate, shelter, layout.
|
||||||
|
- Ground slope and consideration of constructing swales for water retention.
|
||||||
|
- Ground clearance and re-seeding groundcover.
|
||||||
|
- Access to the site for larger equipment.
|
||||||
|
- Orchard planning and plant selection.
|
||||||
|
- Layout and construction of raised beds. Do we want to share the beds, or
|
||||||
|
lease individual allotment space, or both?
|
||||||
|
- Get a compost system started.
|
||||||
|
- Plant and mulch the orchard trees.
|
||||||
|
- Get local beekeepers on board and find a safe spot for some beehives.
|
||||||
|
- Potential space for chicken coops.
|
||||||
|
|
||||||
|
Contact us!
|
||||||
|
-----------
|
||||||
|
|
||||||
|
To get in contact, come along to the next `Residents' Association meeting <http://pukeruabay.org.nz/>`_
|
||||||
|
or email `Jonathan <mailto:jonathan@harker.kiwi.nz>`_. I will set up an email list from
|
||||||
|
people who registered interest at the gala day.
|
||||||
|
|
||||||
|
Links
|
||||||
|
-----
|
||||||
|
|
||||||
|
- The excellent *Manual for creating a community food forest on public land*
|
||||||
|
by Andy Cambeis of the Hawea Flat Food Forest Trust. The manual is very
|
||||||
|
thorough, Creative-Commons licensed and available
|
||||||
|
`online <https://docs.google.com/document/d/1TGhzTV_PdZAkRpxQgKmtzDHg0lcLzat7WXMm5-dvaHg/edit>`_.
|
||||||
|
- Tim and the resources on his site, `Pig in the mud <http://piginthemud.com>`_. Tim helps to run
|
||||||
|
a Wellington community garden at the top of Majoribanks Street.
|
||||||
|
- The national `Permaculture Hui 2014 <http://permaculturehui2014.org.nz/>`_ is on 25-27 April in
|
||||||
|
Island Bay and should be very educational.
|
||||||
Loading…
Add table
Reference in a new issue