Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory Koberger <gkoberger@mozilla.com>2010-09-02 01:48:19 (GMT)
committer Gregory Koberger <gkoberger@mozilla.com>2010-09-03 21:45:37 (GMT)
commita1d6b3c463812f4c82c49dfd554fca07214a3ca9 (patch)
tree16683ce8b8e2632cf2e6fd8561ce166b02061cc5
parente25c224c4be25fe39119c5ce216a20e0aac0ed24 (diff)
Added remove link for collection icon (bug 592430)
aka my foray into python
-rw-r--r--apps/bandwagon/forms.py8
-rw-r--r--apps/bandwagon/models.py9
-rw-r--r--apps/bandwagon/tasks.py15
-rw-r--r--apps/bandwagon/templates/bandwagon/includes/addedit.html37
-rw-r--r--apps/bandwagon/urls.py1
-rw-r--r--apps/bandwagon/views.py21
m---------locale0
-rw-r--r--media/css/zamboni/zamboni.css30
-rw-r--r--media/js/zamboni/collections.js11
9 files changed, 106 insertions, 26 deletions
diff --git a/apps/bandwagon/forms.py b/apps/bandwagon/forms.py
index a3c9340..7ce311a 100644
--- a/apps/bandwagon/forms.py
+++ b/apps/bandwagon/forms.py
@@ -186,12 +186,13 @@ class CollectionForm(ModelForm):
if default_locale:
c.default_locale = default_locale
+ if icon:
+ c.icontype = 'image/png'
+
c.save()
if icon:
- c.icontype = 'image/png'
- dirname = os.path.join(settings.COLLECTIONS_ICON_PATH,
- str(c.id / 1000), )
+ dirname = c.get_img_dir()
destination = os.path.join(dirname, '%d.png' % c.id)
tmp_destination = os.path.join(dirname,
@@ -208,6 +209,7 @@ class CollectionForm(ModelForm):
tasks.resize_icon.delay(tmp_destination, destination)
c.save()
+
return c
class Meta:
diff --git a/apps/bandwagon/models.py b/apps/bandwagon/models.py
index 51036df..9678234 100644
--- a/apps/bandwagon/models.py
+++ b/apps/bandwagon/models.py
@@ -1,4 +1,4 @@
-import collections
+import collections, os
from datetime import datetime
import hashlib
import time
@@ -169,6 +169,9 @@ class Collection(amo.models.ModelBase):
else:
return '/collection/%s' % self.url_slug
+ def get_img_dir(self):
+ return os.path.join(settings.COLLECTIONS_ICON_PATH, str(self.id / 1000))
+
def upvote_url(self):
return reverse('collections.vote',
args=[self.author_username, self.slug, 'up'])
@@ -189,6 +192,10 @@ class Collection(amo.models.ModelBase):
return reverse('collections.delete',
args=[self.author_username, self.slug])
+ def delete_icon_url(self):
+ return reverse('collections.delete_icon',
+ args=[self.author_username, self.slug])
+
def share_url(self):
return reverse('collections.share',
args=[self.author_username, self.slug])
diff --git a/apps/bandwagon/tasks.py b/apps/bandwagon/tasks.py
index a51c33b..aafae43 100644
--- a/apps/bandwagon/tasks.py
+++ b/apps/bandwagon/tasks.py
@@ -2,6 +2,7 @@ import logging
import math
import os
+from django.conf import settings
from django.db.models import Count
from celeryutils import task
@@ -48,6 +49,20 @@ def resize_icon(src, dst):
except Exception, e:
log.error("Error saving collection icon: %s" % e)
+@task
+def delete_icon(dst):
+ log.info('[1@None] Deleting icon: %s.' % dst)
+
+ if not dst.startswith(settings.COLLECTIONS_ICON_PATH):
+ log.error("Someone tried deleting something they shouldn't: %s"
+ % dst)
+ return
+
+ try:
+ os.remove(dst)
+ except Exception, e:
+ log.error("Error deleting icon: %s" % e)
+
@task
def collection_meta(*ids, **kw):
diff --git a/apps/bandwagon/templates/bandwagon/includes/addedit.html b/apps/bandwagon/templates/bandwagon/includes/addedit.html
index dec6df7..5a47825 100644
--- a/apps/bandwagon/templates/bandwagon/includes/addedit.html
+++ b/apps/bandwagon/templates/bandwagon/includes/addedit.html
@@ -22,23 +22,32 @@
<label for="id_description">{{ form.description.label|safe }}</label> {{ _('(optional)') }}
{{ form.description|safe }}
</p>
- <label>{{ form.listed.label }}</label>
- {{ form.listed|safe }}
+ {{ form.icon|safe }}
+ <div id="collection_listed">
+ <label>{{ form.listed.label }}</label>
+ {{ form.listed|safe }}
+ </div>
- <br />
- <label>{{ form.icon.label|safe }}</label> {{ _('(optional)') }}
+ <div id="icon_form">
+ <label for="id_icon">{{ form.icon.label|safe }}</label> {{ _('(optional)') }}
+ <div id="icon_upload">
+ {% if collection %}
+ <div class="icon_preview">
+ <img src="{{ collection.icon_url }}" alt="{{ _('Collection Icon') }}" />
+ {% if collection.icontype %}
+ <a href="{{ collection.delete_icon_url() }}" id="remove_icon">{{ _('Reset') }}</a>
+ {% endif %}
+ </div>
+ {% endif %}
+ {{ form.errors['icon']|safe }}
+ {{ form.icon|safe }}
- <div id="icon_upload">
- {% if collection %}
- <img src="{{ collection.icon_url }}" class="icon_preview" />
- {% endif %}
- {{ form.errors['icon']|safe }}
- {{ form.icon|safe }}
- <p class="note">
- {{ _('PNG and JPG supported. Image will be resized to 32x32.') }}
- </p>
+ <p class="note">
+ {{ _('PNG and JPG supported. Image will be resized to 32x32.') }}
+ </p>
+ </div>
</div>
- </fieldset>
+ </fieldset>
diff --git a/apps/bandwagon/urls.py b/apps/bandwagon/urls.py
index 29c0218..f3c8d26 100644
--- a/apps/bandwagon/urls.py
+++ b/apps/bandwagon/urls.py
@@ -16,6 +16,7 @@ detail_urls = patterns('',
name='collections.vote'),
url('^edit/', include(edit_urls)),
url('^delete$', views.delete, name='collections.delete'),
+ url('^delete_icon$', views.delete_icon, name='collections.delete_icon'),
url('^(?P<action>add|remove)$', views.collection_alter,
name='collections.alter'),
url('^watch$', views.watch, name='collections.watch'),
diff --git a/apps/bandwagon/views.py b/apps/bandwagon/views.py
index 88eb744..0e9a0e5 100644
--- a/apps/bandwagon/views.py
+++ b/apps/bandwagon/views.py
@@ -1,4 +1,5 @@
import functools
+import os
from django import http
from django.db.models import Q
@@ -22,7 +23,7 @@ from translations.query import order_by_translation
from users.models import UserProfile
from .models import (Collection, CollectionAddon, CollectionWatcher,
CollectionVote, SPECIAL_SLUGS)
-from . import forms
+from . import forms, tasks
log = commonware.log.getLogger('z.collections')
@@ -478,6 +479,24 @@ def delete(request, username, slug):
@write
@login_required
+@owner_required
+@json_view
+def delete_icon(request, collection, username, slug):
+
+ log.debug(u"User deleted collection (%s) icon " % slug)
+ tasks.delete_icon(os.path.join(collection.get_img_dir(),
+ '%d.png' % collection.id))
+
+ collection.icontype = ''
+ collection.save()
+
+ if request.is_ajax():
+ return {'icon': collection.icon_url}
+ else:
+ messages.success(request, _('Icon Deleted'))
+ return redirect(collection.edit_url())
+
+@login_required
@post_required
@json_view
def watch(request, username, slug):
diff --git a/locale b/locale
-Subproject d757b7433cfe9986ba0a05aa2dc9e87b2261959
+Subproject b46512ee0abb7fb97acb78848a975fdef7f6f13
diff --git a/media/css/zamboni/zamboni.css b/media/css/zamboni/zamboni.css
index 0525330..0b95b38 100644
--- a/media/css/zamboni/zamboni.css
+++ b/media/css/zamboni/zamboni.css
@@ -2527,17 +2527,33 @@ label > .optional {
width: 100%;
}
+#collection_listed {
+ margin-bottom: 1.5em;
+}
+
+#collection_listed ul label {
+ font-weight: normal;
+}
+
#icon_upload {
- overflow:auto;
- padding-top:5px;
+ padding-top: 5px;
}
#icon_upload .icon_preview {
- -moz-border-radius:5px 5px 5px 5px;
- border:1px solid #C1E0EA;
- float:left;
- margin-right:10px;
- padding:8px;
+ float: left;
+ text-align: center;
+ margin-right: 10px;
+ line-height: 1em;
+}
+
+#icon_upload .icon_preview img {
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border: 1px solid #C1E0EA;
+ padding: 8px;
+ width: 32px;
+ height: 32px;
+ display: block;
}
#ajax_collections_list {
diff --git a/media/js/zamboni/collections.js b/media/js/zamboni/collections.js
index a6137fb..e1ed9e3 100644
--- a/media/js/zamboni/collections.js
+++ b/media/js/zamboni/collections.js
@@ -498,6 +498,17 @@ if ($('body.collections-contributors')) {
});
}
+$(document).ready(function() {
+
+ $('#remove_icon').click(function(){
+ $.post($(this).attr('href'), {}, function(d){
+ $('#icon_upload .icon_preview img').attr('src', d.icon);
+ });
+ $(this).hide();
+ return false;
+ });
+
+});
$(document).ready(function () {