Simplify and consolidate subreddit selector view code.

This commit is contained in:
Max Goodman
2013-07-11 18:10:11 -07:00
parent 22aba6cd14
commit 659cecec97
7 changed files with 79 additions and 68 deletions

View File

@@ -939,8 +939,6 @@ class FrontController(RedditController, OAuth2ResourceController):
abort(403, "forbidden")
captcha = Captcha() if c.user.needs_captcha() else None
sr_names = (Subreddit.submit_sr_names(c.user) or
Subreddit.submit_sr_names(None))
never_show_self = request.get.get('no_self')
@@ -951,7 +949,6 @@ class FrontController(RedditController, OAuth2ResourceController):
title=title or '',
text=text or '',
selftext=selftext or '',
subreddits=sr_names,
captcha=captcha,
resubmit=resubmit,
never_show_self=never_show_self,

View File

@@ -2295,7 +2295,7 @@ class FrameToolbar(Wrapped):
class NewLink(Templated):
"""Render the link submission form"""
def __init__(self, captcha = None, url = '', title= '', text = '', selftext = '',
subreddits = (), then = 'comments', resubmit=False, never_show_self=False):
then = 'comments', resubmit=False, never_show_self=False):
self.show_link = self.show_self = False
@@ -2329,8 +2329,6 @@ class NewLink(Templated):
self.formtabs_menu = JsNavMenu(buttons, type = 'formtab')
self.sr_searches = simplejson.dumps(popular_searches(include_over_18=c.over18))
self.resubmit = resubmit
if c.default_sr:
self.default_sr = None
@@ -2338,8 +2336,7 @@ class NewLink(Templated):
self.default_sr = c.site
Templated.__init__(self, captcha = captcha, url = url,
title = title, text = text, subreddits = subreddits,
then = then)
title = title, text = text, then = then)
class ShareLink(CachedTemplate):
def __init__(self, link_name = "", emails = None):
@@ -3328,11 +3325,6 @@ class PromoteLinkForm(Templated):
self.link = None
if link:
self.sr_searches = simplejson.dumps(popular_searches())
self.subreddits = (Subreddit.submit_sr_names(c.user) or
Subreddit.submit_sr_names(None))
self.default_sr = (self.subreddits[0] if self.subreddits
else g.default_sr)
self.link = promote.wrap_promoted(link)
campaigns = PromoCampaign._by_link(link._id)
self.campaigns = promote.get_renderable_campaigns(link, campaigns)
@@ -3429,11 +3421,7 @@ class Roadblocks(Templated):
self.startdate = startdate.strftime("%m/%d/%Y")
self.enddate = enddate .strftime("%m/%d/%Y")
self.sr_searches = simplejson.dumps(popular_searches())
self.subreddits = (Subreddit.submit_sr_names(c.user) or
Subreddit.submit_sr_names(None))
self.default_sr = self.subreddits[0] if self.subreddits \
else g.default_sr
class TabbedPane(Templated):
def __init__(self, tabs, linkable=False):
@@ -4199,3 +4187,26 @@ class SubscribeButton(Templated):
def __init__(self, sr):
Templated.__init__(self)
self.sr = sr
class SubredditSelector(Templated):
def __init__(self, subreddits=None, default_sr=None, required=False):
Templated.__init__(self)
if subreddits:
self.subreddits = subreddits
else:
self.subreddits = (Subreddit.submit_sr_names(c.user) or
Subreddit.submit_sr_names(None))
if default_sr:
self.default_sr = default_sr
elif subreddits:
self.default_sr = subreddits[0]
else:
self.default_sr = None
self.required = required
self.sr_searches = simplejson.dumps(
popular_searches(include_over_18=c.over18)
)

View File

@@ -22,11 +22,11 @@
<%!
from r2.lib.strings import strings
from r2.lib.pages import UserText
from r2.lib.pages import SubredditSelector, UserText
from r2.lib.template_helpers import add_sr
%>
<%namespace file="utils.html" import="error_field, submit_form, _a_buffered, reddit_selector, text_with_links"/>
<%namespace file="utils.html" import="error_field, submit_form, _a_buffered, text_with_links"/>
<%namespace name="utils" file="utils.html"/>
<%
@@ -99,7 +99,7 @@ ${thing.formtabs_menu}
<div class="spacer">
<%utils:round_field title="${_('choose a subreddit')}" id="reddit-field">
${reddit_selector(thing.default_sr.name if thing.default_sr else None, thing.sr_searches, thing.subreddits, required=True)}
${SubredditSelector(thing.default_sr, required=True)}
</%utils:round_field>
</div>

View File

@@ -25,13 +25,14 @@
from r2.lib.media import thumbnail_url
from r2.lib.template_helpers import static
from r2.lib import promote
from r2.lib.pages import SubredditSelector
from r2.lib.strings import strings
from r2.models import Account
from r2.lib import js
import simplejson
%>
<%namespace file="utils.html"
import="error_field, checkbox, image_upload, reddit_selector" />
import="error_field, checkbox, image_upload" />
<%namespace name="utils" file="utils.html"/>
${unsafe(js.use('sponsored'))}
@@ -193,7 +194,7 @@ ${self.javascript_setup()}
<li>You can only target one subreddit per campaign. If you would like to submit to more than one subreddit, add a new campaign (its easy, you just fill this form out again).</li>
</ul>
${error_field("OVERSOLD", "sr", "div")}
${reddit_selector(thing.default_sr, thing.sr_searches, thing.subreddits)}
${SubredditSelector()}
</div>
<div class="buttons">
<input type="hidden" name="campaign_id36" value="" />

View File

@@ -21,13 +21,14 @@
###############################################################################
<%!
from r2.lib.pages import SubredditSelector
from r2.lib.template_helpers import static
from r2.lib import js
%>
<%namespace name="utils" file="utils.html"/>
<%namespace file="promotelinkform.html" name="p" />
<%namespace file="utils.html"
import="error_field, checkbox, image_upload, reddit_selector" />
import="error_field, checkbox, image_upload" />
${unsafe(js.use('sponsored'))}
@@ -77,7 +78,7 @@ ${unsafe(js.use('sponsored'))}
})
</script>
<div class="targeting">
${reddit_selector(thing.default_sr, thing.sr_searches, thing.subreddits)}
${SubredditSelector()}
</div>
<div class="buttons">
<span class="status error"></span>

View File

@@ -0,0 +1,44 @@
<%namespace file="utils.html" import="error_field"/>
<%doc>
Fires custom event when subreddit selection changes. Add handler like:
$("#sr-autocomplete").bind("sr-changed", function() { dostuff; })
</%doc>
<div id="sr-autocomplete-area">
<input id="sr-autocomplete" name="sr" type="text"
autocomplete="off"
onkeyup="sr_name_up(event)"
onkeydown="return sr_name_down(event)"
onblur="hide_sr_name_list()"
% if thing.default_sr:
value="${thing.default_sr.name}"
% endif
% if thing.required:
required
% endif
/>
<ul id="sr-drop-down">
<li class="sr-name-row"
onmouseover="highlight_reddit(this)"
onmousedown="return sr_dropdown_mdown(this)"
onmouseup="sr_dropdown_mup(this)">nothin</li>
</ul>
</div>
<script type="text/javascript">
reddit.sr_cache = ${unsafe(thing.sr_searches)};
</script>
${error_field("SUBREDDIT_NOEXIST", "sr", "div")}
${error_field("SUBREDDIT_NOTALLOWED", "sr", "div")}
${error_field("SUBREDDIT_REQUIRED", "sr", "div")}
<div id="suggested-reddits">
<span>${_("popular choices")}&#32;</span>
<ul>
%for name in thing.subreddits:
<li>
<a href="#" tabindex="100" onclick="set_sr_name(this); return false">${name}</a>&#32;
</li>
%endfor
</ul>
</div>

View File

@@ -529,49 +529,6 @@ ${unsafe(txt)}
</tr>
</%def>
<%def name="reddit_selector(default_sr, sr_searches, subreddits, required=False)">
<%doc>
Fires custom event when subreddit selection changes. Add handler like:
$("#sr-autocomplete").bind("sr-changed", function() { dostuff; })
</%doc>
<div id="sr-autocomplete-area">
<input id="sr-autocomplete" name="sr" type="text"
autocomplete="off"
onkeyup="sr_name_up(event)"
onkeydown="return sr_name_down(event)"
onblur="hide_sr_name_list()"
value = "${default_sr}"
% if required:
required
% endif
/>
<ul id="sr-drop-down">
<li class="sr-name-row"
onmouseover="highlight_reddit(this)"
onmousedown="return sr_dropdown_mdown(this)"
onmouseup="sr_dropdown_mup(this)">nothin</li>
</ul>
</div>
<script type="text/javascript">
reddit.sr_cache = ${unsafe(sr_searches)};
</script>
${error_field("SUBREDDIT_NOEXIST", "sr", "div")}
${error_field("SUBREDDIT_NOTALLOWED", "sr", "div")}
${error_field("SUBREDDIT_REQUIRED", "sr", "div")}
<div id="suggested-reddits">
<span class="">${_("popular choices")}&#32;</span>
<ul>
%for name in subreddits:
<li>
<a href="#" tabindex="100" onclick="set_sr_name(this); return false">${name}</a>&#32;
</li>
%endfor
</ul>
</div>
</%def>
<%def name="timestamp(date, since=None)">
## todo: use pubdate attribute once things are <article> tags.
## note: comment and link templates will pass a CachedVariable stub as since.