diff --git a/ChangeLog b/ChangeLog
index 2371d33..5e6324d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+v0.5 (21/09/2015)
+** User **
+ Enable code coloration support with Markdown syntax
+ Add article inclusion (Mardown only)
+
+** Dev **
+ Support Django 1.8
+
+
v0.4 (09/08/2015)
** User **
Redirect user to comment when it's added and not to begining of page
diff --git a/dynastie/generators/generator.py b/dynastie/generators/generator.py
index f6de0b8..03b2dff 100755
--- a/dynastie/generators/generator.py
+++ b/dynastie/generators/generator.py
@@ -57,7 +57,7 @@ class DynastieGenerator:
URI = "http://indefero.soutade.fr/p/dynastie"
- def __init__(self, hash_posts=None, hash_posts_content=None):
+ def __init__(self, hash_posts={}, hash_posts_content={}):
self.report = ''
self.somethingWrote = False
self.hash_posts = hash_posts
diff --git a/dynastie/generators/index.py b/dynastie/generators/index.py
index 85f523f..5dde0ae 100755
--- a/dynastie/generators/index.py
+++ b/dynastie/generators/index.py
@@ -18,6 +18,7 @@
along with Dynastie. If not, see .
"""
import os
+import re
import datetime
import hashlib
import xml
@@ -30,7 +31,7 @@ from dynastie.generators import markdown2
class Index(DynastieGenerator):
- def __init__(self, hash_posts=None, hash_posts_content=None):
+ def __init__(self, hash_posts={}, hash_posts_content={}):
DynastieGenerator.__init__(self, hash_posts, hash_posts_content)
self.hooks = {'posts' : self.createPosts,
@@ -197,32 +198,56 @@ class Index(DynastieGenerator):
if end < start:
self.addError('Invalid tags in ' + self.filename)
break
-
+
try:
dom = parseString(code[start:end+11])
except xml.dom.DOMException as e:
self.addError('Error parsing ' + self.filename)
break
-
+
res = self.createCode(dom, dom.firstChild)
if res:
code = code.replace(code[start:end+11], res)
return code
- def createPost(self, posts, dom, post_elem, root):
+ def _have_I_right(self, user, post_id):
+ from dynastie.models import Post, Blog
+
+ p = Post.objects.get(pk=post_id)
+
+ if p is None: return None
+
+ blog_id = p.blog.id
+
+ if not user.is_superuser:
+ b = Blog.objects.filter(pk=blog_id, writers=user.id)
+ if not b: return None
+ b = b[0]
+ else:
+ b = Blog.objects.get(pk=blog_id)
+ if b is None: return None
+
+ return (b, p)
+
+ def _manageInternalPosts(self, post, text, parent_posts, user=None):
from dynastie.models import Post
- post = self.cur_post_obj
+ if not user: user = post.author
+ if post and post.content_format != Post.CONTENT_TEXT: return text
+ internal_posts = re.search('\[\[([0-9]+)\]\]', text)
+ if not internal_posts: return text
+ for post_id in internal_posts.groups():
+ post_id = int(post_id)
+ if post_id in parent_posts: continue
+ _,post = self._have_I_right(user, post_id)
+ if not post: continue
+ new_content = self._loadPostContent(post, parent_posts)
+ if new_content:
+ text = text.replace('[[' + str(post_id) + ']]', new_content)
+ return text
- if post.id in self.hash_posts and not self.first_try:
- node = self.hash_posts[post.id]
- return node.cloneNode(0)
-
- values = {'post_content': '', 'author': 'Unknown'}
- try:
- values['author'] = post.author.first_name + ' ' + post.author.last_name
- except:
- pass
+ def _loadPostContent(self, post, parent_posts):
+ from dynastie.models import Post
blog = post.blog
blog.create_paths()
@@ -238,11 +263,32 @@ class Index(DynastieGenerator):
post_content = f.read()
f.close()
if post.content_format == Post.CONTENT_TEXT:
- post_content = markdown2.markdown(post_content)
+ parent_posts.append(post.id)
+ post_content = self._manageInternalPosts(post, post_content, parent_posts)
+ post_content = markdown2.markdown(post_content, extras=['fenced-code-blocks'])
self.hash_posts_content[filename] = post_content
else:
post_content = self.hash_posts_content[filename]
+ return post_content
+
+ def createPost(self, posts, dom, post_elem, root):
+ from dynastie.models import Post
+ post = self.cur_post_obj
+
+ if post.id in self.hash_posts and not self.first_try:
+ node = self.hash_posts[post.id]
+ return node.cloneNode(0)
+
+ values = {'post_content': '', 'author': 'Unknown'}
+ try:
+ values['author'] = post.author.first_name + ' ' + post.author.last_name
+ except:
+ pass
+
+ post_content = _loadPostContent(post, [])
+ if not post_content: return None
+
post_content = self.pygmentCode(post_content)
self.simpleTransform(values, dom, post_elem, root)
diff --git a/dynastie/generators/post.py b/dynastie/generators/post.py
index 10e3b2c..5c48f80 100755
--- a/dynastie/generators/post.py
+++ b/dynastie/generators/post.py
@@ -230,7 +230,8 @@ class Post(Index):
v['date'] = now.strftime("%A, %d %B %Y %H:%m")
v['post_content'] = ''
- values['content'] = self.pygmentCode(values['content'])
+ post_content = self._manageInternalPosts(None, values['content'], [], self.user)
+ post_content = self.pygmentCode(post_content)
self.simpleTransform(v, dom, root, node)
@@ -241,7 +242,7 @@ class Post(Index):
if not the_class in post_transform:
continue
if the_class == 'post_content':
- new_node = dom.createTextNode(values['content'])
+ new_node = dom.createTextNode(post_content)
content_node.appendChild(new_node)
post_nodes = dom.getElementsByTagNameNS(self.URI, "post")
@@ -250,9 +251,11 @@ class Post(Index):
return post_elem
- def preview(self, src, values):
+ def preview(self, request, src, values):
from dynastie.models import Blog
+ self.user = request.user
+
# Override all hooks
self.hooks = {'post' : self.createPreview,
'tags' : self.createTags}