Submit page subreddit suggestion obeys user's over_18 preference.

This commit is contained in:
David Hu
2013-04-16 15:25:14 -07:00
committed by bsimpson63
parent a2f0a9e35c
commit 54d5becaaf
5 changed files with 16 additions and 11 deletions

View File

@@ -3075,11 +3075,12 @@ class ApiController(RedditController, OAuth2ResourceController):
c.user.pref_frame_commentspanel = False
c.user._commit()
@json_validate(query = VPrintable('query', max_length = 50))
def POST_search_reddit_names(self, responder, query):
@json_validate(query=VPrintable('query', max_length=50),
include_over_18=VBoolean('include_over_18', default=True))
def POST_search_reddit_names(self, responder, query, include_over_18):
names = []
if query:
names = search_reddits(query)
names = search_reddits(query, include_over_18)
return {'names': names}

View File

@@ -2233,7 +2233,7 @@ class NewLink(Templated):
self.formtabs_menu = JsNavMenu(buttons, type = 'formtab')
self.sr_searches = simplejson.dumps(popular_searches())
self.sr_searches = simplejson.dumps(popular_searches(include_over_18=c.over18))
self.resubmit = resubmit
if c.default_sr:

View File

@@ -46,32 +46,35 @@ def load_all_reddits():
prefix = name[:i + 1]
names = query_cache.setdefault(prefix, [])
if len(names) < 10:
names.append(sr.name)
names.append((sr.name, sr.over_18))
for name_prefix, subreddits in query_cache.iteritems():
SubredditsByPartialName._set_values(name_prefix, {'srs': subreddits})
SubredditsByPartialName._set_values(name_prefix, {'tups': subreddits})
def search_reddits(query):
def search_reddits(query, include_over_18=True):
query = str(query.lower())
try:
result = SubredditsByPartialName._byID(query)
return result.srs
return [name for (name, over_18) in getattr(result, 'tups', [])
if not over_18 or include_over_18]
except tdb_cassandra.NotFound:
return []
@memoize('popular_searches', time = 3600)
def popular_searches():
def popular_searches(include_over_18=True):
top_reddits = Subreddit._query(Subreddit.c.type == 'public',
sort = desc('_downs'),
limit = 100,
data = True)
top_searches = {}
for sr in top_reddits:
if sr.over_18 and not include_over_18:
continue
name = sr.name.lower()
for i in xrange(min(len(name), 3)):
query = name[:i + 1]
r = search_reddits(query)
r = search_reddits(query, include_over_18)
top_searches[query] = r
return top_searches

View File

@@ -148,6 +148,7 @@ def js_config(extra_config=None):
"clicktracker_url": g.clicktracker_url,
"uitracker_url": g.uitracker_url,
"static_root": static(''),
"over_18": bool(c.over18),
}
if extra_config:

View File

@@ -638,7 +638,7 @@ function sr_search(query) {
query = query.toLowerCase();
var cache = sr_cache();
if (!cache[query]) {
$.request('search_reddit_names.json', {query: query},
$.request('search_reddit_names.json', {query: query, include_over_18: r.config.over_18},
function (r) {
cache[query] = r['names'];
update_dropdown(r['names']);