Ejemplo n.º 1
0
def flag(context, addon):
    """experimental/recommended flag heading."""
    status = statusflags(context, addon)
    msg = {'experimental': _('Experimental'), 'recommended': _('Recommended')}
    if status:
        return jinja2.Markup(u'<h5 class="flag">%s</h5>' % msg[status])
    else:
        return ''
Ejemplo n.º 2
0
def stars(num):
    if num is None:
        return _('Not yet rated')
    else:
        stars = int(math.ceil(num))
        msg = _('Rated %s out of 5 stars') % stars
        s = (u'<span class="stars stars-{num}" title="{msg}">{msg}</span>'
             .format(num=stars, msg=msg))
        return jinja2.Markup(s)
Ejemplo n.º 3
0
 def topmenu():
     menu = []
     menu.append({"href": "/", "title": _("Overview")})
     if request.user.has_perm("hwdebug.demo"):
         menu.append({"href": "/hwdebug/demo/", "title": _("Demo")})
     if request.user.has_perm("is_staff"):
         menu.append({"href": "/admin/", "title": _("Admin")})
     menu.append({"href": "/homeauto/logout/", "title": _("Logout")})
     return menu
Ejemplo n.º 4
0
 def topmenu():
     menu = []
     menu.append({"href": "/", "title": _("Overview")})
     if request.user.has_perm("hwdebug.demo"):
         menu.append({"href": "/hwdebug/demo/", "title": _("Demo")})
     if request.user.has_perm("is_staff"):
         menu.append({"href": "/admin/", "title": _("Admin")})
     menu.append({"href": "/homeauto/logout/", "title": _("Logout")})
     return menu
Ejemplo n.º 5
0
def get_search_groups(app):
    sub = []
    for type_ in (amo.ADDON_DICT, amo.ADDON_SEARCH, amo.ADDON_THEME):
        sub.append(_Cat(0, amo.ADDON_TYPES[type_], 0, type_))
    sub.extend(helpers.sidebar(app)[0])
    sub = [('%s,%s' % (a.type_id, a.id), a.name) for a in
           sorted(sub, key=lambda x: (x.weight, x.name))]
    top_level = [('all', _('all add-ons')),
                 ('collections', _('all collections')),
                 ('personas', _('all personas'))]
    return top_level[:1] + sub + top_level[1:], top_level
Ejemplo n.º 6
0
def test_ugettext():
    # No context
    a_text = " this\t\r\n\nis    a\ntest  \n\n\n"
    p_text = "you ran a test!"
    eq_(p_text, _(a_text))

    # With a context
    a_text = "\n\tWhat time \r\nis it?  \n"
    p_text_1 = "What time is it? (context=1)"
    p_text_2 = "What time is it? (context=2)"
    eq_(p_text_1, _(a_text, 'context_one'))
    eq_(p_text_2, _(a_text, 'context_two'))
Ejemplo n.º 7
0
 def links(self):
     rv = []
     for file in self.version.files.all():
         platform = file.platform_id
         url = file.latest_xpi_url()
         if platform == amo.PLATFORM_ALL.id:
             text, os = _('Download Now'), None
         else:
             text, os = _('Download'), amo.PLATFORMS[platform]
         if self.show_eula:
             text, url = _('Continue to Download &rarr;'), file.eula_url()
         rv.append(Link(text, url, os, file))
     return rv
Ejemplo n.º 8
0
def sidebar(app):
    """Populates the sidebar with (categories, types)."""
    if app is None:
        return [], []

    # We muck with query to make order_by and extra_order_by play nice.
    q = Category.objects.filter(application=app.id, weight__gte=0,
                                type=amo.ADDON_EXTENSION)
    categories = order_by_translation(q, 'name')
    categories.query.extra_order_by.insert(0, 'weight')

    # TODO(jbalogh): real reverse
    Type = collections.namedtuple('Type', 'name url')
    base = urlresolvers.reverse('home')
    types = [Type(_('Collections'), base + 'collections/')]
    shown_types = {
        amo.ADDON_PERSONA: base + 'personas/',
        amo.ADDON_DICT: urlresolvers.reverse('browse.language_tools'),
        amo.ADDON_SEARCH: base + 'browse/type:4',
        amo.ADDON_PLUGIN: base + 'browse/type:7',
        amo.ADDON_THEME: urlresolvers.reverse('browse.themes'),
    }
    for type_, url in shown_types.items():
        if type_ in app.types:
            name = amo.ADDON_TYPES[type_]
            types.append(Type(name, url))

    return categories, sorted(types, key=lambda x: x.name)
Ejemplo n.º 9
0
def themes(request, category=None):
    APP, THEME = request.APP, amo.ADDON_THEME
    status = [amo.STATUS_PUBLIC]

    experimental = 'on' if request.GET.get('experimental', False) else None
    if experimental:
        status.append(amo.STATUS_SANDBOX)

    q = Category.objects.filter(application=APP.id, type=THEME)
    categories = order_by_translation(q, 'name')

    addons = Addon.objects.listed(APP, *status).filter(type=THEME).distinct()
    total_count = addons.count()

    sorting, sort_opts, addons = AddonSorter(request, addons, 'downloads')

    if category is None:
        selected = _Category(_('All'), total_count, '')
    else:
        selected = dict((c.slug, c) for c in categories)[category]
        addons = addons.filter(categories__slug=category)

    themes = amo.utils.paginate(request, addons)

    return jingo.render(request, 'browse/themes.html',
                        {'categories': categories, 'total_count': total_count,
                         'themes': themes, 'selected': selected,
                         'sorting': sorting, 'sort_opts': sort_opts,
                         'experimental': experimental})
Ejemplo n.º 10
0
def test_activate():
    l10n.deactivate_all()
    l10n.activate('fr')
    # This string is from the AMO .po file
    a_text = "My Account"
    p_text = "Mon compte"
    eq_(p_text, _(a_text))
    l10n.deactivate_all()
Ejemplo n.º 11
0
    def render_msg(self, msg, error_level=None, *args, **kwargs):
        """
        Renders a simple message.
        """

        if self.format == "xml":
            return render_xml(
                self.request, "api/message.xml", {"error_level": error_level, "msg": msg}, *args, **kwargs
            )
        else:
            return HttpResponse(json.dumps({"msg": _(msg)}), *args, **kwargs)
Ejemplo n.º 12
0
def get_app_versions():
    rv = {}
    for id, app in amo.APP_IDS.items():
        min_ver, skip = min_version[app], skip_versions[app]
        versions = [(a.major, a.minor1) for a in
                    AppVersion.objects.filter(application=id)]
        groups = itertools.groupby(sorted(versions))
        strings = ['%s.%s' % v for v, group in groups
                   if v >= min_ver and v not in skip]
        rv[id] = [(s, s) for s in strings] + [(_('Any'), 'any')]
    return rv
Ejemplo n.º 13
0
def global_settings(request):
    """
    Storing standard AMO-wide information used in global headers, such as
    account links and settings.
    """
    account_links = []
    tools_links = []

    if request.user.is_authenticated():
        # TODO(jbalogh): reverse links
        account_links.append({
            'text': _('View Profile'),
            'href': request.user.get_profile().get_url_path(),
        })
        account_links.append({'text': _('Edit Profile'),
                              'href': '/users/edit'})
        if request.amo_user.is_developer:
            account_links.append({'text': 'My Add-ons',
                                  'href': '/developers/addons'})

        # TODO(jbalogh): - add collections /collections/mine

        account_links.append({
            'text': _('Log out'),
            'href': '/users/logout?to=' + urlquote(request.path),
        })

        tools_links.append({'text': _('Developer Hub'),
                            'href': '/developers'})
        if acl.action_allowed(request, 'Editors', '%'):
            tools_links.append({'text': _('Editor Tools'),
                                'href': '/editors'})
        if acl.action_allowed(request, 'Localizers', '%'):
            tools_links.append({'text': _('Localizer Tools'),
                                'href': '/localizers'})
        if acl.action_allowed(request, 'Admin', '%'):
            tools_links.append({'text': _('Admin Tools'),
                                'href': reverse('admin.home')})


    return {'account_links': account_links, 'settings': settings, 'amo': amo,
            'tools_links': tools_links}
Ejemplo n.º 14
0
def _page_name(app=None):
    """Determine the correct page name for the given app (or no app)."""
    if app:
        return _(u'Add-ons for {0}').format(app.pretty)
    else:
        return _('Add-ons')
Ejemplo n.º 15
0
def test_ugettext_not_found():
    eq_('yo', _('yo'))
    eq_('yo yo', _('  yo  yo  '))
    eq_('yo', _('yo', 'context'))
    eq_('yo yo', _('  yo  yo  ', 'context'))
Ejemplo n.º 16
0
# %d is the number of dogs
#: some/file.py:157
#, python-format
msgctxt "context_two"
msgid "%d poodle please"
msgid_plural "%d poodles please"
msgstr[0] "%d poodle (context=2)"
msgstr[1] "%d poodles (context=2)"

#, python-format
msgid "Hello %(user)s"
msgstr "Hola %(user)s"
'''

TEST_PO_INPUT = """
# Make sure multiple contexts stay separate
_('fligtar')
_('fligtar', 'atwork')
_('fligtar', 'athome')

# Test regular plural form, no context
ngettext('a fligtar', 'many fligtars', 3)

# Make sure several uses collapses to one
ngettext('a fligtar', 'many fligtars', 1, 'aticecreamshop')
ngettext('a fligtar', 'many fligtars', 3, 'aticecreamshop')
ngettext('a fligtar', 'many fligtars', 5, 'aticecreamshop')

# Test comments
# L10n: Turn up the volume
Ejemplo n.º 17
0
    def mail_thankyou(self, request=None):
        """
        Mail a thankyou note for a completed contribution.

        Raises a ``ContributionError`` exception when the contribution
        is not complete or email addresses are not found.
        """

        # Setup l10n before loading addon.
        if self.source_locale:
            lang = self.source_locale
        else:
            lang = self.addon.default_locale
        l10n.activate(lang)

        # Thankyous must be enabled.
        if not self.addon.enable_thankyou:
            # Not an error condition, just return.
            return

        # Contribution must be complete.
        if not self.transaction_id:
            raise ContributionError('Transaction not complete')

        # Send from support_email, developer's email, or default.
        if self.addon.support_email:
            from_email = str(self.addon.support_email)
        else:
            try:
                author = self.addon.listed_authors[0]
                if not author.emailhidden:
                    from_email = author.email
            except IndexError:
                from_email = None
        if not from_email:
            from_email = settings.EMAIL_FROM_DEFAULT

        # We need the contributor's email.
        to_email = self.post_data['payer_email']
        if not to_email:
            raise ContributionError('Empty payer email')

        # Make sure the url uses the right language.
        # Setting a prefixer would be nicer, but that requires a request.
        url_parts = self.addon.meet_developers_url.split('/')
        url_parts[1] = lang

        # Buildup the email components.
        t = loader.get_template('stats/contribution-thankyou-email.ltxt')
        c = {
            'thankyou_note': self.addon.thankyou_note,
            'addon_name': self.addon.name,
            'learn_url': settings.SITE_URL + '/'.join(url_parts),
            'hostname': settings.HOSTNAME,
        }
        body = t.render(Context(c))
        subject = _('Thanks for contributing to {addon_name}').format(
                    addon_name=self.addon.name)

        # Send the email
        if amo_send_mail(subject, body, from_email, [to_email],
                     fail_silently=True):
            # Clear out contributor identifying information.
            del(self.post_data['payer_email'])
            self.save()
Ejemplo n.º 18
0
# Addon types
ADDON_ANY = 0
ADDON_EXTENSION = 1
ADDON_THEME = 2
ADDON_DICT = 3
ADDON_SEARCH = 4
ADDON_LPAPP = 5
ADDON_LPADDON = 6
ADDON_PLUGIN = 7
ADDON_API = 8  # not actually a type but used to identify extensions + themes
ADDON_PERSONA = 9

# Singular
ADDON_TYPE = {
    ADDON_ANY: _(u'Any'),
    ADDON_EXTENSION: _(u'Extension'),
    ADDON_THEME: _(u'Theme'),
    ADDON_DICT: _(u'Dictionary'),
    ADDON_SEARCH: _(u'Search Engine'),
    ADDON_PLUGIN: _(u'Plugin'),
    ADDON_LPAPP: _(u'Language Pack (Application)'),
    ADDON_PERSONA: _(u'Persona'),
}

# Plural
ADDON_TYPES = {
    ADDON_ANY: _(u'Any'),
    ADDON_EXTENSION: _(u'Extensions'),
    ADDON_THEME: _(u'Themes'),
    ADDON_DICT: _(u'Dictionaries & Language Packs'),
Ejemplo n.º 19
0
 def links(self):
     return [Link(_('Continue to Website &rarr;'), self.addon.homepage)]