diff --git a/r2/r2/config/templates.py b/r2/r2/config/templates.py
index b6b6f2f0d..9101d7c03 100644
--- a/r2/r2/config/templates.py
+++ b/r2/r2/config/templates.py
@@ -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)
diff --git a/r2/r2/controllers/wiki.py b/r2/r2/controllers/wiki.py
index f9cde4a38..cb566882a 100644
--- a/r2/r2/controllers/wiki.py
+++ b/r2/r2/controllers/wiki.py
@@ -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)
diff --git a/r2/r2/lib/jsontemplates.py b/r2/r2/lib/jsontemplates.py
index e4e4caba7..2681707b0 100755
--- a/r2/r2/lib/jsontemplates.py
+++ b/r2/r2/lib/jsontemplates.py
@@ -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
diff --git a/r2/r2/lib/pages/wiki.py b/r2/r2/lib/pages/wiki.py
index d70ae977c..06c310051 100644
--- a/r2/r2/lib/pages/wiki.py
+++ b/r2/r2/lib/pages/wiki.py
@@ -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)
diff --git a/r2/r2/models/wiki.py b/r2/r2/models/wiki.py
index 5d056a203..0a97961d4 100644
--- a/r2/r2/models/wiki.py
+++ b/r2/r2/models/wiki.py
@@ -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 []
diff --git a/r2/r2/templates/wikipagerevisions.html b/r2/r2/templates/wikipagerevisions.html
index 73e4bfa34..37df74cad 100644
--- a/r2/r2/templates/wikipagerevisions.html
+++ b/r2/r2/templates/wikipagerevisions.html
@@ -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:
%endif
diff --git a/r2/r2/templates/wikipagerevisions.xml b/r2/r2/templates/wikipagerevisions.xml
index 71b564567..d8ef23630 100644
--- a/r2/r2/templates/wikipagerevisions.xml
+++ b/r2/r2/templates/wikipagerevisions.xml
@@ -20,4 +20,4 @@
## reddit Inc. All Rights Reserved.
###############################################################################
-${thing.revisions}
+${thing.listing}