diff --git a/pelicanext/random_article/Readme.md b/pelicanext/random_article/Readme.md new file mode 100644 index 0000000..f12a899 --- /dev/null +++ b/pelicanext/random_article/Readme.md @@ -0,0 +1,36 @@ +Random Article Plugin For Pelican +======================== + +This plugin generates a html file which redirect to a random article +using javascript's window.location. The generated html file is +saved at SITEURL. + +Only published articles are listed to redirect. + + +Installation +------------ + +To enable, ensure that `random_article.py` is put somewhere that is accessible. +Then use as follows by adding the following to your settings.py: + + PLUGINS = ["random_article"] + +An easy way to find where pelican is installed is to verbose list the +available themes by typing `pelican-themes -l -v`. + +Once the pelican folder is found, copy `random_article.py` to the `plugins` folder. Then +add to settings.py like this: + + PLUGINS = ["pelican.plugins.random_article"] + +Usage +----- + +To use it you have to add in your config file the name of the file to use: + + RANDOM = 'random.html' + +Then in some template you add: + + random article diff --git a/pelicanext/random_article/random_article.py b/pelicanext/random_article/random_article.py new file mode 100644 index 0000000..056c542 --- /dev/null +++ b/pelicanext/random_article/random_article.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import os.path + +from logging import info +from codecs import open + +from pelican import signals + +HTML_TOP = """ + + + random + + + + +""" + +ARTICLE_URL = """ "{0}/{1}", +""" + + +class RandomArticleGenerator(object): + """ + The structure is derived from sitemap plugin + """ + + def __init__(self, context, settings, path, theme, output_path, *null): + + self.output_path = output_path + self.context = context + self.siteurl = settings.get('SITEURL') + self.randomurl = settings.get('RANDOM') + + def write_url(self, article, fd): + if getattr(article, 'status', 'published') != 'published': + return + + page_path = os.path.join(self.output_path, article.url) + if not os.path.exists(page_path): + return + + fd.write(ARTICLE_URL.format(self.siteurl, article.url)) + + + def generate_output(self, writer): + path = os.path.join(self.output_path, self.randomurl) + articles = self.context['articles'] + info('writing {0}'.format(path)) + + if len(articles) == 0: + return + + with open(path, 'w', encoding='utf-8') as fd: + fd.write(HTML_TOP) + + for art in articles: + self.write_url(art, fd) + + fd.write(HTML_BOTTOM) + +def get_generators(generators): + return RandomArticleGenerator + + +def register(): + signals.get_generators.connect(get_generators)