##// END OF EJS Templates
Fixed api diff method that was broken after post model split
Fixed api diff method that was broken after post model split

File last commit:

r398:b2448061 default
r399:6dc0cb47 default
Show More
mdx_neboard.py
119 lines | 3.3 KiB | text/x-python | PythonLexer
from django.core.urlresolvers import reverse
import markdown
from markdown.inlinepatterns import Pattern
from markdown.util import etree
import boards
__author__ = 'neko259'
AUTOLINK_PATTERN = r'(https?://\S+)'
QUOTE_PATTERN = r'^(?<!>)(>[^>].+)$'
REFLINK_PATTERN = r'((>>)(\d+))'
SPOILER_PATTERN = r'%%(.+)%%'
COMMENT_PATTERN = r'^(//(.+))'
STRIKETHROUGH_PATTERN = r'~(.+)~'
class AutolinkPattern(Pattern):
def handleMatch(self, m):
link_element = etree.Element('a')
href = m.group(2)
link_element.set('href', href)
link_element.text = href
return link_element
class QuotePattern(Pattern):
def handleMatch(self, m):
quote_element = etree.Element('span')
quote_element.set('class', 'quote')
quote_element.text = m.group(2)
return quote_element
class ReflinkPattern(Pattern):
def handleMatch(self, m):
post_id = m.group(4)
posts = boards.models.Post.objects.filter(id=post_id)
if posts.count() > 0:
ref_element = etree.Element('a')
post = posts[0]
if post.thread:
link = reverse(boards.views.thread, kwargs={'post_id': post.thread.id}) \
+ '#' + post_id
else:
link = reverse(boards.views.thread, kwargs={'post_id': post_id})
ref_element.set('href', link)
ref_element.text = m.group(2)
return ref_element
class SpoilerPattern(Pattern):
def handleMatch(self, m):
quote_element = etree.Element('span')
quote_element.set('class', 'spoiler')
quote_element.text = m.group(2)
return quote_element
class CommentPattern(Pattern):
def handleMatch(self, m):
quote_element = etree.Element('span')
quote_element.set('class', 'comment')
quote_element.text = '//' + m.group(3)
return quote_element
class StrikeThroughPattern(Pattern):
def handleMatch(self, m):
quote_element = etree.Element('span')
quote_element.set('class', 'strikethrough')
quote_element.text = m.group(2)
return quote_element
class NeboardMarkdown(markdown.Extension):
def extendMarkdown(self, md, md_globals):
self._add_neboard_patterns(md)
self._delete_patterns(md)
def _delete_patterns(self, md):
del md.parser.blockprocessors['quote']
del md.inlinePatterns['image_link']
del md.inlinePatterns['image_reference']
def _add_neboard_patterns(self, md):
autolink = AutolinkPattern(AUTOLINK_PATTERN, md)
quote = QuotePattern(QUOTE_PATTERN, md)
reflink = ReflinkPattern(REFLINK_PATTERN, md)
spoiler = SpoilerPattern(SPOILER_PATTERN, md)
comment = CommentPattern(COMMENT_PATTERN, md)
strikethrough = StrikeThroughPattern(STRIKETHROUGH_PATTERN, md)
md.inlinePatterns[u'autolink_ext'] = autolink
md.inlinePatterns[u'spoiler'] = spoiler
md.inlinePatterns[u'strikethrough'] = strikethrough
md.inlinePatterns[u'comment'] = comment
md.inlinePatterns[u'reflink'] = reflink
md.inlinePatterns[u'quote'] = quote
def makeExtension(configs=None):
return NeboardMarkdown(configs=configs)
neboard_extension = makeExtension()
def markdown_extended(markup):
return markdown.markdown(markup, [neboard_extension], safe_mode=True)