[pelican_comment_system] Added Avatars and Identicons
This commit is contained in:
@@ -18,12 +18,15 @@ from pelican import signals
|
||||
from pelican.utils import strftime
|
||||
from pelican.readers import MarkdownReader
|
||||
|
||||
import avatars
|
||||
|
||||
class Comment:
|
||||
def __init__(self, id, metadata, content):
|
||||
def __init__(self, id, metadata, content, avatar):
|
||||
self.id = id
|
||||
self.content = content
|
||||
self.metadata = metadata
|
||||
self.replies = []
|
||||
self.avatar = avatar
|
||||
|
||||
def addReply(self, comment):
|
||||
self.replies.append(comment)
|
||||
@@ -53,15 +56,32 @@ class Comment:
|
||||
return amount + len(self.replies)
|
||||
|
||||
|
||||
def initialized(pelican):
|
||||
def pelican_initialized(pelican):
|
||||
from pelican.settings import DEFAULT_CONFIG
|
||||
DEFAULT_CONFIG.setdefault('PELICAN_COMMENT_SYSTEM', False)
|
||||
DEFAULT_CONFIG.setdefault('PELICAN_COMMENT_SYSTEM_DIR' 'comments')
|
||||
DEFAULT_CONFIG.setdefault('PELICAN_COMMENT_SYSTEM_IDENTICON_OUTPUT_PATH' 'images/identicon')
|
||||
DEFAULT_CONFIG.setdefault('PELICAN_COMMENT_SYSTEM_IDENTICON_DATA', ())
|
||||
DEFAULT_CONFIG.setdefault('PELICAN_COMMENT_SYSTEM_IDENTICON_SIZE', 72)
|
||||
DEFAULT_CONFIG.setdefault('PELICAN_COMMENT_SYSTEM_AUTHORS', {})
|
||||
if pelican:
|
||||
pelican.settings.setdefault('PELICAN_COMMENT_SYSTEM', False)
|
||||
pelican.settings.setdefault('PELICAN_COMMENT_SYSTEM_DIR', 'comments')
|
||||
pelican.settings.setdefault('PELICAN_COMMENT_SYSTEM_IDENTICON_OUTPUT_PATH', 'images/identicon')
|
||||
pelican.settings.setdefault('PELICAN_COMMENT_SYSTEM_IDENTICON_DATA', ())
|
||||
pelican.settings.setdefault('PELICAN_COMMENT_SYSTEM_IDENTICON_SIZE', 72)
|
||||
pelican.settings.setdefault('PELICAN_COMMENT_SYSTEM_AUTHORS', {})
|
||||
|
||||
|
||||
def initialize(article_generator):
|
||||
avatars.init(
|
||||
article_generator.settings['OUTPUT_PATH'],
|
||||
article_generator.settings['PELICAN_COMMENT_SYSTEM_IDENTICON_OUTPUT_PATH'],
|
||||
article_generator.settings['PELICAN_COMMENT_SYSTEM_IDENTICON_DATA'],
|
||||
article_generator.settings['PELICAN_COMMENT_SYSTEM_IDENTICON_SIZE']/3,
|
||||
article_generator.settings['PELICAN_COMMENT_SYSTEM_AUTHORS'],
|
||||
)
|
||||
|
||||
def add_static_comments(gen, metadata):
|
||||
if gen.settings['PELICAN_COMMENT_SYSTEM'] != True:
|
||||
return
|
||||
@@ -73,21 +93,25 @@ def add_static_comments(gen, metadata):
|
||||
logger.warning("pelican_comment_system: cant't locate comments files without slug tag in the article")
|
||||
return
|
||||
|
||||
reader = MarkdownReader(gen.settings)
|
||||
comments = []
|
||||
replies = []
|
||||
folder = os.path.join(gen.settings['PELICAN_COMMENT_SYSTEM_DIR'], metadata['slug'])
|
||||
|
||||
if not os.path.isdir(folder):
|
||||
logger.debug("No comments found for: " + metadata['slug'])
|
||||
return
|
||||
|
||||
reader = MarkdownReader(gen.settings)
|
||||
comments = []
|
||||
replies = []
|
||||
|
||||
for file in os.listdir(folder):
|
||||
name, extension = os.path.splitext(file)
|
||||
if extension[1:].lower() in reader.file_extensions:
|
||||
content, meta = reader.read(folder + "/" + file)
|
||||
content, meta = reader.read(os.path.join(folder, file))
|
||||
meta['locale_date'] = strftime(meta['date'], gen.settings['DEFAULT_DATE_FORMAT'])
|
||||
com = Comment(name, meta, content)
|
||||
|
||||
avatar_path = avatars.getAvatarPath(name, meta)
|
||||
com = Comment(name, meta, content, avatar_path)
|
||||
|
||||
if 'replyto' in meta:
|
||||
replies.append( com )
|
||||
else:
|
||||
@@ -109,6 +133,11 @@ def add_static_comments(gen, metadata):
|
||||
metadata['comments_count'] = len(comments) + count
|
||||
metadata['comments'] = comments
|
||||
|
||||
def writeIdenticonsToDisk(gen, writer):
|
||||
avatars.generateAndSaveMissingAvatars()
|
||||
|
||||
def register():
|
||||
signals.initialized.connect(initialized)
|
||||
signals.initialized.connect(pelican_initialized)
|
||||
signals.article_generator_init.connect(initialize)
|
||||
signals.article_generator_context.connect(add_static_comments)
|
||||
signals.article_writer_finalized.connect(writeIdenticonsToDisk)
|
||||
|
||||
Reference in New Issue
Block a user