Felix Felicis 功能扩充

microjo

自从用 Felix Felicis (liquidluck) 生成博客内容,根据自身需要对其做了部分功能扩充,本文记录修改的情况。

打开 Python-Markdown1 部分扩展 Markdown 语法支持

Python-Markdown 支持的扩展 Markdown 语法很丰富,可以参考 http://packages.python.org/Markdown/extensions/index.html,部分扩展语法的中文说明可参考扩展 Markdown 语法

只需要修改一个文件 liquidluck/readers/mkd.py,打开 Extra 和 Table of Contents 的扩展支持,修改内容2如下:

-------------------------- liquidluck/readers/mkd.py --------------------------

@@ -81,7 +81,7 @@ def markdown(text):
     for module in markdown_prefork.values():
         if module:
             text = import_module(module)(text)
-    md = Markdown()
+    md = Markdown(extensions=['extra','toc'])
     return md.convert(text)

增加 Gravatar 作为博客 favicon3

参考 WordPress 技巧:使用 Gravatar 作为博客的 FaviconGravatar 官方开发资源进行修改,内容4如下:

---------------------- liquidluck/_templates/layout.html ----------------------

@@ -3,6 +3,7 @@
     <head>
         <meta charset="UTF-8">
         <title>{% block title %}{{context.sitename}}{% endblock %}</title>
+        {% if context.gravatar %}<link rel="shortcut icon" href="{{gravatar_url(16)}}" />{% endif %}
         <script>if (top !== self) top.location = self.location;</script>
         <meta name="HandheldFriendly" content="True" />
         <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />

------------------------ liquidluck/writers/default.py ------------------------

@@ -4,6 +4,7 @@
 import os
 import sys
 import hashlib
+import urllib
 from math import log

 from liquidluck.writers import Writer, FeedMixin, PagerMixin
@@ -15,6 +16,17 @@ from liquidluck import logger
 _hash_cache = {}


+def gravatar_url(size):
+    """
+    generate URL requiered to request a Gravatar Image
+    using varialbe in config.ini context section:
+        gravatar: your gravatar email address
+    """
+
+    gravatar_url = "http://www.gravatar.com/avatar/" + hashlib.md5(ns.context.gravatar.lower()).hexdigest() + "?"
+    return gravatar_url + urllib.urlencode({'s':str(size)})
+
+
 def static_url(name):
     global _hash_cache
     url = ns.site.static_prefix
@@ -40,6 +52,7 @@ class StaticWriter(Writer):

     def start(self):
         ns.storage.functions.update({'static_url': static_url})
+        ns.storage.functions.update({'gravatar_url': gravatar_url})
         return

     def run(self):

配置文件 config.ini 中 [context] 添加 gravatar 配置项,填写 Gravatar 的邮箱地址。新增的 gravatar_url 函数,用于生成获取 Gravatar 图片的链接,参数是获取图片的大小。如果使用其他模板,只需要在模板的 <head> 元素中添加 {% if context.gravatar %}<link rel="shortcut icon" href="{{gravatar_url(16)}}" />{% endif %} 就能将 Gravatar 作为博客 favicon3

post 增加修改时间参数

帖子增加新的元数据参数 modified,用于表示帖子最近一次修改的时间。依据 Felix Felicis wiki,帖子可以增加任意多的元数据。但由于自定义的元数据以字符串处理,因此增加时间参数就需要修改源码,将其转换成 datatime 类型。此处修改内容5如下,模板的修改主要是为了显示需要:

----------------------- liquidluck/_templates/post.html -----------------------

@@ -31,9 +31,15 @@
 </div>
 <div class="entry-meta fn-clear">
     <p class="entry-time fn-left">
-    Created at: 
-    <a href="/{{post.date.year}}/" rel="index"><time class="updated" datetime="{{post.date|xmldatetime}}" pubdate>{{post.date.strftime("%a, %b %d, %Y")}}</time></a>
+    Created at:
+    <a href="/{{post.date.year}}/" rel="index"><time class="created" datetime="{{post.date|xmldatetime}}" pubdate="pubdate">{{post.date.strftime("%a, %b %d, %Y")}}</time></a>
     </p>
+    {% if post.modified %}
+    <p class="entry-time fn-left">
+    Modified at:
+    <time class="modified" datetime="{{post.modified|xmldatetime}}">{{post.modified.strftime("%a, %b %d, %Y")}}</time>
+    </p>
+    {% endif %}
     {% if post.tags %}
     <p class="entry-tags fn-left">
     Tagged in:

------------------------ liquidluck/readers/__init__.py ------------------------

@@ -135,6 +135,14 @@ class Reader(object):
             ns.storage.errors.append(self.filepath)
             return None

+        if post.get('modified', None):
+            """ add a new parameter 'modified' in post, it indicates the last post modification date """
+            try:
+                post.modified = self._parse_datetime(post.get('modified'))
+            except ValueError as e:
+                ns.storage.errors.append(self.filepath)
+                return None
+
         for key in post.keys():
             if '_date' in key or '_time' in key:
                 try:

相关内容

发布:

修改: