Skip to content

Commit

Permalink
Merge branch 'homepage'
Browse files Browse the repository at this point in the history
  • Loading branch information
jbalogh committed Mar 5, 2010
2 parents 3841fa8 + 80a289b commit 32df447
Show file tree
Hide file tree
Showing 21 changed files with 340 additions and 56 deletions.
6 changes: 3 additions & 3 deletions apps/addons/fixtures/addons/featured.json
Expand Up @@ -45,7 +45,7 @@
"annoying": 0,
"modified": "2009-07-14 00:16:23",
"summary": null,
"suggested_amount": "",
"suggested_amount": null,
"site_specific": 1,
"total_reviews": 3,
"the_reason": null,
Expand Down Expand Up @@ -123,7 +123,7 @@
"annoying": 0,
"modified": "2008-05-22 11:59:13",
"summary": null,
"suggested_amount": "",
"suggested_amount": null,
"site_specific": 0,
"total_reviews": 3,
"the_reason": null,
Expand Down Expand Up @@ -173,7 +173,7 @@
"annoying": 0,
"modified": "2010-01-07 00:17:40",
"summary": null,
"suggested_amount": "",
"suggested_amount": null,
"site_specific": 0,
"total_reviews": 10,
"the_reason": null,
Expand Down
6 changes: 3 additions & 3 deletions apps/addons/fixtures/addons/test_manager.json
Expand Up @@ -61,7 +61,7 @@
"support_url": null,
"nomination_date": "2009-03-25 17:32:39",
"wants_contributions": 0,
"suggested_amount": "",
"suggested_amount": null,
"privacy_policy": null,
"prerelease": 0,
"guid": "piclens@cooliris.com",
Expand Down Expand Up @@ -114,7 +114,7 @@
"support_url": null,
"nomination_date": "2009-03-25 17:32:39",
"wants_contributions": 0,
"suggested_amount": "",
"suggested_amount": null,
"privacy_policy": null,
"prerelease": 0,
"guid": "fake@cooliris.com",
Expand Down Expand Up @@ -167,7 +167,7 @@
"support_url": null,
"nomination_date": "2009-03-25 17:32:39",
"wants_contributions": 0,
"suggested_amount": "",
"suggested_amount": null,
"privacy_policy": null,
"prerelease": 0,
"guid": "something@mozilla.com",
Expand Down
9 changes: 7 additions & 2 deletions apps/addons/helpers.py
@@ -1,8 +1,7 @@
from django.utils.translation import ugettext as _

import jinja2

from jingo import register, env
from l10n import ugettext as _


@register.filter
Expand Down Expand Up @@ -38,3 +37,9 @@ def separated_list_items(context, addons, src=None):
'src': src}
t = env.get_template('addons/separated_list_items.html').render(**c)
return jinja2.Markup(t)


@register.function
def support_addon(addon):
t = env.get_template('addons/support_addon.html')
return jinja2.Markup(t.render(addon=addon))
21 changes: 14 additions & 7 deletions apps/addons/models.py
Expand Up @@ -9,6 +9,7 @@
import caching.base

import amo.models
from amo.fields import DecimalCharField
from amo.urlresolvers import reverse
from reviews.models import Review
from translations.fields import (TranslatedField, PurifiedField,
Expand Down Expand Up @@ -55,7 +56,7 @@ def listed(self, app, *status):
# XXX: handle personas (no versions) and listed (no files)
return self.filter(inactive=False, status__in=status,
versions__applicationsversions__application=app.id,
versions__files__status__in=status)
versions__files__status__in=status).distinct()

def compatible_with_app(self, app, version=None):
"""
Expand Down Expand Up @@ -180,9 +181,9 @@ class Addon(amo.models.ModelBase):
help_text="For dictionaries and language packs")

paypal_id = models.CharField(max_length=255, blank=True)
suggested_amount = models.CharField(
max_length=255, blank=True, null=True,
help_text="Requested donation amount.")
suggested_amount = DecimalCharField(max_digits=8, decimal_places=2,
blank=True, null=True,
help_text="Requested donation amount.")
annoying = models.PositiveIntegerField(choices=CONTRIBUTIONS_CHOICES,
default=0)

Expand Down Expand Up @@ -257,9 +258,10 @@ def icon_url(self):
"""
if not self.icon_type:
if self.type_id == amo.ADDON_THEME:
return settings.STATIC_URL + '/img/theme.png'
icon = 'default-theme.png'
else:
return settings.STATIC_URL + '/img/default_icon.png'
icon = 'default-addon.png'
return settings.MEDIA_URL + 'img/amo2009/icons/' + icon

else:
return settings.ADDON_ICON_URL % (
Expand All @@ -284,7 +286,7 @@ def thumbnail_url(self):
return preview.thumbnail_url

except IndexError:
return settings.STATIC_URL + '/img/no-preview.png'
return settings.MEDIA_URL + '/img/amo2009/icons/no-preview.png'

@property
def is_listed(self):
Expand Down Expand Up @@ -331,6 +333,11 @@ def has_author(self, user, roles=None):
return bool(AddonUser.objects.filter(addon=self, user=user,
role__in=roles))

@property
def takes_contributions(self):
# TODO(jbalogh): config.paypal_disabled
return self.wants_contributions and self.paypal_id


class AddonCategory(caching.base.CachingMixin, models.Model):
addon = models.ForeignKey(Addon)
Expand Down
90 changes: 90 additions & 0 deletions apps/addons/templates/addons/home.html
@@ -1,5 +1,10 @@
{% extends "base_side_categories.html" %}

{# L10n: {0} is Featured or Popular or Updated. #}
{% block title %}
{{ page_title(_('{0} Add-ons', 'homepage_title')|f(filter.title)) }}
{% endblock %}

{% block site_stats %}
<ul class="stats">
<li>
Expand All @@ -23,9 +28,90 @@
</ul>
{% endblock %}

{% set view_all = {
'featured': _('View all featured add-ons'),
'popular': _('View all popular add-ons'),
'new': _('View all newly created add-ons'),
'updated': _('View all recently updated add-ons'),
}
%}


{% block content %}

{% if is_mobile(request.APP) %}
<h2>{{ _('Browse Mobile Add-ons') }}</h2>
{% else %}
<h2>{{ _('Browse Add-ons') }}</h2>
{% endif %}

<div class="primary" id="homepage">
<div class="featured listing">
<div class="featured-inner">
<div class="listing-header">
<ul>
{% for value, title in filter.opts %}
<li {{ value|class_selected(filter.field) }} id="{{ value }}">
<a href="{{ url('home')|urlparams(browse=value) }}" data-target="{{ value }}"
data-title="{{ page_title(_('{0} Add-ons', 'homepage_title')|f(title)) }}">
{{ title }}</a>
</li>
{% endfor %}
</ul>
</div>
<div class="addon-listing addon-listing-{{ filter.field }}">
{% for key, addons in addon_sets.items() %}
<div id="list-{{ key }}">
{% for addon in addons %}
{% cache addon %}
<div class="item">
<div class="install">Install button</div>
<h3>
<a href="{{ addon.get_url_path() }}">{{ addon.name }}</a>
<span>
{% trans users=users_list(addon.authors.all()) %}
by {{ users }}
{% endtrans %}
</span>
</h3>
<a href="{{ addon.get_url_path() }}">
<img class="icon" width="32" height="32" src="{{ addon.icon_url }}"
alt="{{ addon.name }}">
</a>
<blockquote>
<p>{{ addon.description|truncate(250) }}</p>
</blockquote>
<div class="meta">
{{ addon|reviews_link }}
<span class="downloads">
{% with num=addon.weekly_downloads %}
{# L10n: {0} is the number of downloads. #}
{{ ngettext("<strong>{0}</strong> weekly download",
"<strong>{0}</strong> weekly downloads",
num)|f(num|numberfmt)|safe }}
{% endwith %}
</span>
<span class="updated">
{{ _('Updated {0}')|f(addon.last_updated|datetime) }}
</span>
{{ support_addon(addon) }}
</div>
</div>
{% endcache %}
{% endfor %}
<div class="listing-footer">
{# TODO(jbalogh): browse and rss page urls #}
<a class="subscribe" href="#">
{{ _('Subscribe', 'addons_home_browse_subscribe') }}</a>
<a class="more-info" href="#">{{ view_all[key] }}</a>
</div>
</div> {# listing-{{ key }} #}
{% endfor %}
</div> {# addon-listing #}
</div> {# featured-inner #}
</div>
</div>

<div class="secondary collections-sidebar">
<img alt="" width="100" height="125"
src="{{ MEDIA_URL }}img/amo2009/illustrations/logo-collections-100x125.png">
Expand All @@ -41,3 +127,7 @@ <h4>{{ _('Popular Collections') }}</h4>
{% include "addons/collections_sidebar.html" %}
</div>
{% endblock content %}

{% block js %}
<script src="{{ MEDIA_URL }}js/zamboni/homepage.js"></script>
{% endblock %}
14 changes: 14 additions & 0 deletions apps/addons/templates/addons/support_addon.html
@@ -0,0 +1,14 @@
{% if addon.takes_contributions %}
{# TODO(jbalogh): reverse #}
{% set base = '/addons/contribute/{0}?source=direct'|f(addon.id) %}
<div class="support-this-addon">
{% if addon.suggested_amount is not none %}
{% trans url=base|urlparams(type='suggested'),
amt=addon.suggested_amount|currencyfmt('USD') %}
Support this add-on: <a href="{{ url }}">Contribute {{ amt }}</a>
{% endtrans %}
{% else %}
<a href="{{ base }}">{{ _('Support this add-on') }}</a>
{% endif %}
</div>
{% endif %}
20 changes: 19 additions & 1 deletion apps/addons/tests/test_helpers.py
@@ -1,15 +1,20 @@
from django import test

import jingo
from nose.tools import eq_
from pyquery import PyQuery

import amo
from addons.helpers import statusflags, flag
from addons.helpers import statusflags, flag, support_addon
from addons.models import Addon


class TestHelpers(test.TestCase):
fixtures = ['base/addons.json', 'addons/featured.json']

def setUp(self):
jingo.load_helpers()

def test_statusflags(self):
ctx = {'APP': amo.FIREFOX, 'LANG': 'en-US'}

Expand Down Expand Up @@ -39,3 +44,16 @@ def test_flags(self):
# category featured
featured = Addon.objects.get(pk=1001)
eq_(flag(ctx, featured), '<h5 class="flag">Recommended</h5>')

def test_support_addon(self):
a = Addon(id=12)
eq_(support_addon(a), '')

# TODO(jbalogh): check the url when using reverse
a.wants_contributions = a.paypal_id = True
eq_(PyQuery(support_addon(a))('a').text(), 'Support this add-on')

a.suggested_amount = '12'
doc = PyQuery(support_addon(a))
eq_(doc('.support-this-addon').text(),
'Support this add-on: Contribute $12.00')
6 changes: 3 additions & 3 deletions apps/addons/tests/test_models.py
Expand Up @@ -120,10 +120,10 @@ def test_icon_url(self):
expected = (settings.ADDON_ICON_URL % (3615, 0)).rstrip('/0')
assert a.icon_url.startswith(expected)
a = Addon.objects.get(pk=7172)
assert a.icon_url.endswith('/img/theme.png'), (
assert a.icon_url.endswith('/icons/default-theme.png'), (
"No match for %s" % a.icon_url)
a = Addon.objects.get(pk=73)
assert a.icon_url.endswith('/img/default_icon.png')
assert a.icon_url.endswith('/icons/default-addon.png')

def test_thumbnail_url(self):
"""
Expand All @@ -133,7 +133,7 @@ def test_thumbnail_url(self):
a = Addon.objects.get(pk=7172)
a.thumbnail_url.index('/previews/thumbs/25/25981.png?modified=')
a = Addon.objects.get(pk=73)
assert a.thumbnail_url.endswith('/img/no-preview.png'), (
assert a.thumbnail_url.endswith('/icons/no-preview.png'), (
"No match for %s" % a.thumbnail_url)

def test_preview_count(self):
Expand Down

0 comments on commit 32df447

Please sign in to comment.