mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-29 08:48:18 -05:00
wiki: Add wiki renderers.
This commit is contained in:
@@ -35,6 +35,7 @@ from r2.lib.template_helpers import join_urls
|
||||
|
||||
|
||||
from r2.lib.validator import (
|
||||
nop,
|
||||
validate,
|
||||
VExistingUname,
|
||||
VInt,
|
||||
@@ -84,7 +85,9 @@ page_descriptions = {'config/stylesheet':_("This page is the subreddit styleshee
|
||||
|
||||
ATTRIBUTE_BY_PAGE = {"config/sidebar": "description",
|
||||
"config/description": "public_description"}
|
||||
|
||||
RENDERERS_BY_PAGE = {"config/sidebar": "reddit",
|
||||
"config/description": "reddit",
|
||||
"config/stylesheet": "stylesheet"}
|
||||
|
||||
class WikiController(RedditController):
|
||||
allow_stylesheets = True
|
||||
@@ -142,9 +145,12 @@ class WikiController(RedditController):
|
||||
message = _("viewing revision from %s ago") % timesince(version.date)
|
||||
content = version.content
|
||||
|
||||
renderer = RENDERERS_BY_PAGE.get(page.name, 'wiki')
|
||||
|
||||
return WikiPageView(content, alert=message, v=version, diff=diffcontent,
|
||||
may_revise=this_may_revise(page), edit_by=edit_by,
|
||||
edit_date=edit_date, page=page.name).render()
|
||||
edit_date=edit_date, page=page.name,
|
||||
renderer=renderer).render()
|
||||
|
||||
@paginated_listing(max_page_size=100, backend='cassandra')
|
||||
@validate(page=VWikiPage(('page'), restricted=False))
|
||||
@@ -284,7 +290,7 @@ class WikiController(RedditController):
|
||||
class WikiApiController(WikiController):
|
||||
@validate(VModhash(),
|
||||
pageandprevious=VWikiPageRevise(('page', 'previous'), restricted=True),
|
||||
content=VMarkdown(('content'), renderer='wiki'),
|
||||
content=nop(('content')),
|
||||
page_name=VWikiPageName('page'),
|
||||
reason=VPrintable('reason', 256))
|
||||
@api_doc(api_section.wiki, uri='/api/wiki/edit')
|
||||
@@ -300,6 +306,11 @@ class WikiApiController(WikiController):
|
||||
if c.user._spam:
|
||||
error = _("You are doing that too much, please try again later.")
|
||||
self.handle_error(415, 'SPECIAL_ERRORS', special_errors=[error])
|
||||
|
||||
renderer = RENDERERS_BY_PAGE.get(page.name, 'wiki')
|
||||
if renderer in ('wiki', 'reddit'):
|
||||
content = VMarkdown(('content'), renderer=renderer).run(content)
|
||||
|
||||
# Use the raw POST value as we need to tell the difference between
|
||||
# None/Undefined and an empty string. The validators use a default
|
||||
# value with both of those cases and would need to be changed.
|
||||
|
||||
@@ -201,7 +201,7 @@ def markdown_souptest(text, nofollow=False, target=None, renderer=None):
|
||||
if not text:
|
||||
return text
|
||||
|
||||
if not renderer:
|
||||
if not renderer or renderer == 'reddit':
|
||||
smd = safemarkdown(text, nofollow=nofollow, target=target)
|
||||
elif renderer == 'wiki':
|
||||
smd = wikimarkdown(text)
|
||||
|
||||
@@ -26,7 +26,7 @@ from utils import to36, tup, iters
|
||||
from wrapped import Wrapped, StringTemplate, CacheStub, CachedVariable, Templated
|
||||
from mako.template import Template
|
||||
from r2.config.extensions import get_api_subtype
|
||||
from r2.lib.filters import spaceCompress, safemarkdown, wikimarkdown
|
||||
from r2.lib.filters import spaceCompress, safemarkdown
|
||||
from r2.models.subreddit import SubSR
|
||||
import time, pytz
|
||||
from pylons import c, g
|
||||
@@ -651,7 +651,7 @@ class WikiViewJsonTemplate(ThingJsonTemplate):
|
||||
if thing.edit_by and not thing.edit_by._deleted:
|
||||
edit_by = Wrapped(thing.edit_by).render()
|
||||
return dict(content_md=thing.page_content_md,
|
||||
content_html=wikimarkdown(thing.page_content_md),
|
||||
content_html=thing.page_content,
|
||||
revision_by=edit_by,
|
||||
revision_date=edit_date,
|
||||
may_revise=thing.may_revise)
|
||||
|
||||
@@ -20,16 +20,25 @@
|
||||
# Inc. All Rights Reserved.
|
||||
###############################################################################
|
||||
|
||||
from r2.lib.pages.pages import Reddit
|
||||
from r2.lib.pages.pages import Reddit, SubredditStylesheetSource
|
||||
from pylons import c
|
||||
from r2.lib.wrapped import Templated
|
||||
from r2.lib.menus import PageNameNav
|
||||
from r2.lib.validator.wiki import this_may_revise
|
||||
from r2.lib.filters import wikimarkdown, safemarkdown
|
||||
from pylons.i18n import _
|
||||
|
||||
class WikiView(Templated):
|
||||
def __init__(self, content, edit_by, edit_date, may_revise=False, page=None, diff=None):
|
||||
def __init__(self, content, edit_by, edit_date, may_revise=False,
|
||||
page=None, diff=None, renderer=None):
|
||||
self.page_content_md = content
|
||||
if not renderer or renderer == 'wiki':
|
||||
self.page_content = wikimarkdown(content)
|
||||
elif renderer == 'reddit':
|
||||
self.page_content = safemarkdown(content)
|
||||
elif renderer == 'stylesheet':
|
||||
self.page_content = SubredditStylesheetSource(content).render()
|
||||
self.renderer = renderer
|
||||
self.page = page
|
||||
self.diff = diff
|
||||
self.edit_by = edit_by
|
||||
@@ -132,13 +141,13 @@ class WikiBasePage(Reddit):
|
||||
**context)
|
||||
|
||||
class WikiPageView(WikiBasePage):
|
||||
def __init__(self, content, page, diff=None, **context):
|
||||
def __init__(self, content, page, diff=None, renderer=None, **context):
|
||||
may_revise = context.get('may_revise')
|
||||
if not content and not context.get('alert'):
|
||||
if may_revise:
|
||||
context['alert'] = _("this page is empty, edit it to add some content.")
|
||||
content = WikiView(content, context.get('edit_by'), context.get('edit_date'),
|
||||
may_revise=may_revise, page=page, diff=diff)
|
||||
may_revise=may_revise, page=page, diff=diff, renderer=renderer)
|
||||
WikiBasePage.__init__(self, content, page=page, **context)
|
||||
|
||||
class WikiNotFound(WikiBasePage):
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
<%namespace file="utils.html" import="timestamp"/>
|
||||
|
||||
<%!
|
||||
from r2.lib.filters import wikimarkdown
|
||||
from r2.lib.pages import WrappedUser
|
||||
%>
|
||||
|
||||
@@ -36,7 +35,7 @@
|
||||
%if not thing.page_content_md:
|
||||
<em>${_("this page is empty")}</em>
|
||||
%else:
|
||||
${unsafe(wikimarkdown(thing.page_content_md))}
|
||||
${unsafe(thing.page_content)}
|
||||
%endif
|
||||
</p>
|
||||
%if thing.edit_date:
|
||||
|
||||
Reference in New Issue
Block a user