mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-28 00:07:57 -05:00
wiki: Add missing json endpoints.
- pages list - discussions - settings
This commit is contained in:
@@ -61,6 +61,10 @@ api('wikipagerevisions', WikiJsonTemplate)
|
||||
api('wikiview', WikiViewJsonTemplate)
|
||||
api('wikirevision', WikiRevisionJsonTemplate)
|
||||
|
||||
api('wikipagelisting', WikiPageListingJsonTemplate)
|
||||
api('wikipagediscussions', WikiJsonTemplate)
|
||||
api('wikipagesettings', WikiSettingsJsonTemplate)
|
||||
|
||||
api('flairlist', FlairListJsonTemplate)
|
||||
api('flaircsv', FlairCsvJsonTemplate)
|
||||
|
||||
|
||||
@@ -167,9 +167,9 @@ class WikiController(RedditController):
|
||||
def GET_wiki_listing(self):
|
||||
def check_hidden(page):
|
||||
return this_may_view(page)
|
||||
pages = WikiPage.get_listing(c.site, filter_check=check_hidden)
|
||||
return WikiListing(pages).render()
|
||||
|
||||
pages, linear_pages = WikiPage.get_listing(c.site, filter_check=check_hidden)
|
||||
return WikiListing(pages, linear_pages).render()
|
||||
|
||||
def GET_wiki_redirect(self, page):
|
||||
return redirect_to(str("%s/%s" % (c.wiki_base_url, page)), _code=301)
|
||||
|
||||
|
||||
@@ -583,9 +583,19 @@ class WikiJsonTemplate(JsonTemplate):
|
||||
try:
|
||||
content = thing.content
|
||||
except AttributeError:
|
||||
content = thing.revisions
|
||||
content = thing.listing
|
||||
return ObjectTemplate(content.render() if thing else {})
|
||||
|
||||
class WikiPageListingJsonTemplate(ThingJsonTemplate):
|
||||
def render(self, thing, *a, **kw):
|
||||
pages = [p.name for p in thing.linear_pages]
|
||||
return ObjectTemplate(dict(pages=pages))
|
||||
|
||||
class WikiSettingsJsonTemplate(ThingJsonTemplate):
|
||||
def render(self, thing, *a, **kw):
|
||||
return ObjectTemplate(dict(permlevel=thing.permlevel,
|
||||
editors=thing.mayedit))
|
||||
|
||||
class WikiViewJsonTemplate(ThingJsonTemplate):
|
||||
def render(self, thing, *a, **kw):
|
||||
edit_date = time.mktime(thing.edit_date.timetuple()) if thing.edit_date else None
|
||||
|
||||
@@ -15,8 +15,9 @@ class WikiView(Templated):
|
||||
Templated.__init__(self)
|
||||
|
||||
class WikiPageListing(Templated):
|
||||
def __init__(self, pages):
|
||||
def __init__(self, pages, linear_pages):
|
||||
self.pages = pages
|
||||
self.linear_pages = linear_pages
|
||||
self.base_url = c.wiki_base_url
|
||||
Templated.__init__(self)
|
||||
|
||||
@@ -38,7 +39,7 @@ class WikiPageSettings(Templated):
|
||||
|
||||
class WikiPageRevisions(Templated):
|
||||
def __init__(self, revisions):
|
||||
self.revisions = revisions
|
||||
self.listing = revisions
|
||||
Templated.__init__(self)
|
||||
|
||||
class WikiPageDiscussions(Templated):
|
||||
@@ -125,8 +126,8 @@ class WikiRecent(WikiBase):
|
||||
WikiBase.__init__(self, content, showtitle=True, **context)
|
||||
|
||||
class WikiListing(WikiBase):
|
||||
def __init__(self, pages, **context):
|
||||
content = WikiPageListing(pages)
|
||||
def __init__(self, pages, linear_pages, **context):
|
||||
content = WikiPageListing(pages, linear_pages)
|
||||
context['wikiaction'] = ('pages', _("Viewing pages for /r/%s") % c.wiki_id)
|
||||
description = [_("Below is a list of pages in this wiki visible to you in this subreddit.")]
|
||||
WikiBase.__init__(self, content, description=description, showtitle=True, **context)
|
||||
|
||||
@@ -218,12 +218,13 @@ class WikiPage(tdb_cassandra.Thing):
|
||||
WikiPageEditors._set_values(self._id, {user: ''})
|
||||
|
||||
@classmethod
|
||||
def get_pages(cls, sr, after=None):
|
||||
def get_pages(cls, sr, after=None, filter_check=None):
|
||||
NUM_AT_A_TIME = 1000
|
||||
pages = WikiPagesBySR.query([sr._id36], after=after, count=NUM_AT_A_TIME)
|
||||
pages = list(pages)
|
||||
if len(pages) >= NUM_AT_A_TIME:
|
||||
return pages + cls.get_pages(sr, after=pages[-1])
|
||||
pages = filter(filter_check, pages)
|
||||
return pages
|
||||
|
||||
@classmethod
|
||||
@@ -232,8 +233,7 @@ class WikiPage(tdb_cassandra.Thing):
|
||||
Create a tree of pages from their path.
|
||||
"""
|
||||
page_tree = OrderedDict()
|
||||
pages = cls.get_pages(sr)
|
||||
pages = filter(filter_check, pages)
|
||||
pages = cls.get_pages(sr, filter_check=filter_check)
|
||||
pages = sorted(pages, key=lambda page: page.name)
|
||||
for page in pages:
|
||||
p = page.name.split('/')
|
||||
@@ -257,9 +257,9 @@ class WikiPage(tdb_cassandra.Thing):
|
||||
node[0] = page
|
||||
else:
|
||||
cur_node[pagename] = [page, OrderedDict()]
|
||||
|
||||
return page_tree
|
||||
|
||||
|
||||
return page_tree, pages
|
||||
|
||||
def get_editors(self, properties=None):
|
||||
try:
|
||||
return WikiPageEditors._byID(self._id, properties=properties)._values() or []
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
## reddit Inc. All Rights Reserved.
|
||||
###############################################################################
|
||||
|
||||
${thing.revisions}
|
||||
%if c.wiki_page and thing.revisions.things:
|
||||
${thing.listing}
|
||||
%if c.wiki_page and thing.listing.things:
|
||||
<button onclick="r.wiki.goCompare()">${_("compare selected")}</button>
|
||||
%endif
|
||||
<br/>
|
||||
|
||||
@@ -20,4 +20,4 @@
|
||||
## reddit Inc. All Rights Reserved.
|
||||
###############################################################################
|
||||
|
||||
${thing.revisions}
|
||||
${thing.listing}
|
||||
|
||||
Reference in New Issue
Block a user