fix: move random_article plugin into tracked lib/ directory
pelican-plugins/ lives in .gitignore so the random_article plugin never reached the build server after cleanup. Moved to lib/ which already serves as a PLUGIN_PATHS entry. Removed the os.path.exists check that caused the plugin to skip all articles when the generator ran before article directories existed in output.
This commit is contained in:
parent
92ee4cac0a
commit
b303f497fa
1 changed files with 85 additions and 0 deletions
85
lib/random_article.py
Normal file
85
lib/random_article.py
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
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.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
from logging import info
|
||||||
|
from codecs import open
|
||||||
|
|
||||||
|
from pelican import signals
|
||||||
|
|
||||||
|
HTML_TOP = """
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<head>
|
||||||
|
<title>random</title>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function redirect(){
|
||||||
|
var urls = [
|
||||||
|
"""
|
||||||
|
|
||||||
|
HTML_BOTTOM = """
|
||||||
|
""];
|
||||||
|
|
||||||
|
var index = Math.floor(Math.random() * (urls.length-1));
|
||||||
|
window.location = urls[index];
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<body onload="redirect()">
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue