diff --git a/apps/addons/helpers.py b/apps/addons/helpers.py index 6e27214d19..f7aaafbce1 100644 --- a/apps/addons/helpers.py +++ b/apps/addons/helpers.py @@ -218,6 +218,24 @@ def persona_preview(context, persona, size='large', linked=True, extra=None, return c +@register.inclusion_tag('addons/mobile/persona_preview.html') +@jinja2.contextfunction +def mobile_persona_preview(context, persona): + addon = persona.addon + c = dict(context.items()) + c.update({'persona': persona, 'addon': addon}) + return c + + +@register.inclusion_tag('addons/mobile/persona_confirm.html') +@jinja2.contextfunction +def mobile_persona_confirm(context, persona, size='large'): + addon = persona.addon + c = dict(context.items()) + c.update({'persona': persona, 'addon': addon, 'size': size}) + return c + + @register.inclusion_tag('addons/persona_grid.html') @jinja2.contextfunction def persona_grid(context, addons): diff --git a/apps/addons/templates/addons/mobile/details.html b/apps/addons/templates/addons/mobile/details.html index 97698de5f6..d275a49496 100644 --- a/apps/addons/templates/addons/mobile/details.html +++ b/apps/addons/templates/addons/mobile/details.html @@ -40,18 +40,7 @@ {% endif %} - {% if addon.total_reviews %} - - - {{ addon.average_rating|stars }} - - {% trans num=addon.total_reviews, cnt=addon.total_reviews|numberfmt %} - See All Reviews - {% pluralize %} - See All {{ cnt }} Reviews - {% endtrans %} - - {% endif %} + {{ mobile_reviews_link(addon) }} diff --git a/apps/addons/templates/addons/mobile/home.html b/apps/addons/templates/addons/mobile/home.html index e50ed0b5be..f168d9476e 100644 --- a/apps/addons/templates/addons/mobile/home.html +++ b/apps/addons/templates/addons/mobile/home.html @@ -6,7 +6,7 @@ {% include "mobile/header.html" %} - {{ _('You need Firefox to install addons. Learn More »') }} + {{ _('You need Firefox to install add-ons. Learn More »') }} diff --git a/apps/addons/templates/addons/mobile/persona_confirm.html b/apps/addons/templates/addons/mobile/persona_confirm.html new file mode 100644 index 0000000000..d53b0d7e32 --- /dev/null +++ b/apps/addons/templates/addons/mobile/persona_confirm.html @@ -0,0 +1,13 @@ + + {% if size == 'large' %} + {{ _('Try it on!') }} + {% endif %} + + {{ mobile_install_button(addon, show_warning=False) }} + {{ _('Cancel') }} + + {% if size == 'small' %} + {{ _('Persona Info »') }} + {% endif %} + diff --git a/apps/addons/templates/addons/mobile/persona_detail.html b/apps/addons/templates/addons/mobile/persona_detail.html index 398f571044..c7202e1575 100644 --- a/apps/addons/templates/addons/mobile/persona_detail.html +++ b/apps/addons/templates/addons/mobile/persona_detail.html @@ -1,18 +1,66 @@ {% extends "mobile/base.html" %} - {% block title %}{{ page_title(addon.name) }}{% endblock %} -{% block page %} -{% set persona = addon.persona %} +{% block back_link %} + + {{ _('« All Personas') }} +{% endblock %} - - {{ persona_preview(addon.persona, size='small') }} - {# TODO: button #} +{% block page %} +{% set author = users_list(addon.listed_authors) or persona.display_username %} + + + {{ mobile_persona_preview(persona) }} + {{ addon.name }} + {{ _('by') }} {{ author }} + {{ addon.summary|nl2br }} + {{ mobile_persona_confirm(persona) }} - - {% include "addons/persona_detail_table.html" %} - +{{ mobile_reviews_link(addon) }} + + + + {% include "addons/mobile/persona_detail_table.html" %} + + + + + {% cache author_personas %} + {% if author_personas %} + + + {% for other in author_personas %} + + {{ mobile_persona_preview(other.persona) }} + {{ mobile_persona_confirm(other.persona, size='small') }} + + {% endfor %} + + {{ _('See all Personas by this Artist') }} + + + {% endif %} + {% endcache %} + + {% cache category_personas %} + {% if category_personas %} + + + {% for other in category_personas %} + + {{ mobile_persona_preview(other.persona) }} + {{ mobile_persona_confirm(other.persona, size='small') }} + + {% endfor %} + {# L10n: {0} is a category name, such as Nature #} + + {{ _('See all {0} Personas')|f(categories[0].name) }} + + + {% endif %} + {% endcache %} + {% endblock %} diff --git a/apps/addons/templates/addons/mobile/persona_detail_table.html b/apps/addons/templates/addons/mobile/persona_detail_table.html new file mode 100644 index 0000000000..b78f8c3312 --- /dev/null +++ b/apps/addons/templates/addons/mobile/persona_detail_table.html @@ -0,0 +1,26 @@ + + + {{ _('Artist') }} + {{ author }} + + + {{ _('Updated') }} + + {{ + addon.modified|datetime }} + + + + {{ _('Daily Users') }} + + {{ + persona.popularity|numberfmt }} + + + {% if persona.license %} + + {{ _('License') }} + {{ license_link(persona.license) }} + + {% endif %} + diff --git a/apps/addons/templates/addons/mobile/persona_preview.html b/apps/addons/templates/addons/mobile/persona_preview.html new file mode 100644 index 0000000000..d9b93849f0 --- /dev/null +++ b/apps/addons/templates/addons/mobile/persona_preview.html @@ -0,0 +1,4 @@ + + + diff --git a/apps/addons/tests/test_helpers.py b/apps/addons/tests/test_helpers.py index aed06d4e89..dea09e1fd5 100644 --- a/apps/addons/tests/test_helpers.py +++ b/apps/addons/tests/test_helpers.py @@ -5,13 +5,14 @@ from pyquery import PyQuery import amo from addons.helpers import (statusflags, flag, support_addon, contribution, - performance_note) + performance_note, mobile_persona_preview, + mobile_persona_confirm) from addons.models import Addon class TestHelpers(test_utils.TestCase): fixtures = ['base/apps', 'base/addon_3615', 'base/addon_4664_twitterbar', - 'addons/featured.json'] + 'addons/featured', 'addons/persona'] def setUp(self): # Addon._feature keeps an in-process cache we need to clear. @@ -95,6 +96,48 @@ class TestHelpers(test_utils.TestCase): doc = PyQuery(s) eq_(doc('input[name=source]').attr('value'), 'browse') + def test_mobile_persona_preview(self): + ctx = {'APP': amo.FIREFOX, 'LANG': 'en-US'} + persona = Addon.objects.get(pk=15663).persona + s = mobile_persona_preview(ctx, persona) + doc = PyQuery(s) + bt = doc('.persona-preview div[data-browsertheme]') + assert bt + assert persona.preview_url in bt.attr('style') + eq_(persona.json_data, bt.attr('data-browsertheme')) + assert bt.find('p') + + def _test_mobile_persona_ctx(self): + request = Mock() + request.APP = amo.FIREFOX + request.GET = {} + request.user.is_authenticated.return_value = False + request.amo_user.mobile_addons = [] + return {'APP': amo.FIREFOX, 'LANG': 'en-US', 'request': request} + + def test_mobile_persona_confirm_large(self): + persona = Addon.objects.get(id=15663).persona + s = mobile_persona_confirm(self._test_mobile_persona_ctx(), persona) + doc = PyQuery(s) + assert not doc('.persona-slider') + assert doc('.preview') + assert doc('.confirm-buttons .add') + assert doc('.confirm-buttons .cancel') + assert not doc('.more') + + def test_mobile_persona_confirm_small(self): + persona = Addon.objects.get(id=15663).persona + s = mobile_persona_confirm(self._test_mobile_persona_ctx(), persona, + size='small') + doc = PyQuery(s) + assert doc('.persona-slider') + assert not doc('.persona-slider .preview') + assert doc('.confirm-buttons .add') + assert doc('.confirm-buttons .cancel') + more = doc('.more') + assert more + eq_(more.attr('href'), persona.addon.get_url_path()) + class TestPerformanceNote(test_utils.TestCase): listing = '' diff --git a/apps/addons/tests/test_views.py b/apps/addons/tests/test_views.py index 1dccad9f7b..1f4ce08f87 100644 --- a/apps/addons/tests/test_views.py +++ b/apps/addons/tests/test_views.py @@ -571,6 +571,12 @@ class TestDetailPage(test_utils.TestCase): assert '<script>alert("fff")</script>' in html assert '
{{ addon.summary|nl2br }}