wiki: Add missing json endpoints.

- pages list
- discussions
- settings
This commit is contained in:
Andre D
2012-09-13 13:59:43 -05:00
committed by Neil Williams
parent 266c2d9312
commit 4d9c2e7d63
7 changed files with 32 additions and 17 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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 []

View File

@@ -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/>

View File

@@ -20,4 +20,4 @@
## reddit Inc. All Rights Reserved.
###############################################################################
${thing.revisions}
${thing.listing}