Add clearing of flair templates.

This commit is contained in:
Logan Hanks
2011-09-07 12:16:20 -07:00
parent 5ef9df8c94
commit f18a473823
5 changed files with 50 additions and 23 deletions

View File

@@ -2035,6 +2035,11 @@ class ApiController(RedditController):
text_editable = VBoolean('text_editable'))
def POST_flairtemplate(self, form, jquery, flair_template_id, text,
css_class, text_editable):
if text is None:
text = ''
if css_class is None:
css_class = ''
# Check validation.
if form.has_errors('css_class', errors.BAD_CSS_NAME):
form.set_html(".status:first", _('invalid css class'))
@@ -2071,6 +2076,11 @@ class ApiController(RedditController):
jquery('input[name="css_class"]').data('saved', css_class)
form.set_html('.status', _('saved'))
@validatedForm(VFlairManager(), VModhash())
def POST_clearflairtemplates(self, form, jquery):
FlairTemplateBySubredditIndex.clear(c.site._id)
jquery.refresh()
def POST_flairselector(self):
return FlairSelector().render()

View File

@@ -617,6 +617,17 @@ class ThingBase(object):
def __setitem__(self, key, value):
return self.__setattr__(key, value)
def __delitem__(self, key):
try:
del self._dirties[key]
except KeyError:
pass
try:
del self._column_ttls[key]
except KeyError:
pass
self._deletes.add(key)
def _get(self, key, default = None):
try:
return self.__getattr__(key)
@@ -911,19 +922,6 @@ class View(ThingBase):
# can we be smarter here?
thing_cache.delete(cls._cache_key_id(row_key))
def __delitem__(self, key):
# only implemented on Views right now, but at present there's
# no technical reason for this
try:
del self._dirties[key]
except KeyError:
pass
try:
del self._column_ttls[key]
except KeyError:
pass
self._deletes.add(key)
def schema_report():
manager = get_manager()
print manager.describe_keyspace(keyspace)

View File

@@ -146,29 +146,26 @@ class FlairTemplateBySubredditIndex(tdb_cassandra.Thing):
return idx
@classmethod
def _get_or_create_template(cls, sr_id, text, css_class, text_editable):
def by_sr(cls, sr_id, create=False):
try:
idx = cls._byID(to36(sr_id))
return cls._byID(to36(sr_id))
except tdb_cassandra.NotFound:
idx = cls._new(sr_id)
existing_ft_ids = list(idx)
if create:
return cls._new(sr_id)
raise
@classmethod
def create_template(cls, sr_id, text='', css_class='', text_editable=False):
idx = cls.by_sr(sr_id, create=True)
ft = FlairTemplate._new(text=text, css_class=css_class,
text_editable=text_editable)
try:
idx = cls._byID(to36(sr_id))
except tdb_cassandra.NotFound:
idx = cls._new(sr_id)
idx.insert(ft._id)
return ft
@classmethod
def get_template_ids(cls, sr_id):
try:
return list(cls._byID(to36(sr_id)))
return list(cls.by_sr(sr_id))
except tdb_cassandra.NotFound:
return []
@@ -178,6 +175,20 @@ class FlairTemplateBySubredditIndex(tdb_cassandra.Thing):
return None
return FlairTemplate._byID(ft_id)
@classmethod
def clear(cls, sr_id):
try:
idx = cls.by_sr(sr_id)
except tdb_cassandra.NotFound:
# Everything went better than expected.
pass
for k in idx._index_keys():
del idx[k]
# TODO: delete the dangling reference this leaves behind
idx._commit()
def _index_keys(self):
keys = set(self._dirties.iterkeys())
keys |= frozenset(self._orig.iterkeys())

View File

@@ -112,6 +112,8 @@ $(function() {
makeOnSubmit('flairtemplate'));
$(".flairlist").delegate("form.flair-entry", "submit",
makeOnSubmit('flair'));
$(".flairlist").delegate("form.clearflairtemplates", "submit",
makeOnSubmit('clearflairtemplates'));
$(".flairlist").delegate(".flaircell input", "focus", onFocus);
$(".flairlist").delegate(".flaircell input", "keyup", onEdit);
$(".flairlist").delegate(".flaircell input", "change", onEdit);

View File

@@ -41,4 +41,10 @@
${FlairTemplateEditor(empty_template)}
</div>
</div>
<form class="clearflairtemplates"
method="post" action="/api/clearflairtemplates">
<button class="flairtemplateclear">
${_("clear all flair templates")}
</button>
</form>
</div>