This commit is contained in:
Reem H 2024-07-03 03:14:20 +10:00 коммит произвёл GitHub
Родитель 2656cbd054
Коммит d15d72264a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
30 изменённых файлов: 821 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,34 @@
{#
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
#}
{% if LANG == 'fr' %}
{% set donate_cta = "Faire un don à la Fondation Mozilla" %}
{% elif LANG == 'de' %}
{% set donate_cta = "Spende an die Mozilla Foundation" %}
{% elif LANG == 'es-ES' %}
{% set donate_cta = "Donar a la Fundación Mozilla" %}
{% elif LANG == 'it' %}
{% set donate_cta = "Dona alla Mozilla Foundation" %}
{% elif LANG == 'pl' %}
{% set donate_cta = "Wesprzyj Fundację Mozilli darowizną" %}
{% else %}
{% set donate_cta = "Donate to the Mozilla Foundation" %}
{% endif %}
<div class="wnp-donate-wrapper mzp-u-centered">
<a class="mzp-c-button mzp-t-secondary mzp-t-md wnp-footer-donate" href="{{ donate_url(location='whats-new-product') }}" data-link-type="button" data-link-text="Donate">
<span class="mzp-c-button-icon-start">
<svg width="16" height="16" viewBox="0 0 16 16">
<path fill="#ff0000" d="M1.2,2.2c-1.5,1.5-1.5,4.2,0,5.7L8,15c2.3-2.4,4.5-4.7,6.9-7c1.5-1.5,1.5-4.2,0-5.7c-1.5-1.5-4-1.5-5.6,0L8,3.5 L6.7,2.3C5.1,0.6,2.7,0.6,1.2,2.2"/>
</svg>
</span>
{% if ftl_has_messages('whatsnew-donate-to-mofo') %}
{{ ftl('whatsnew-donate-to-mofo') }}
{% else %}
{{ donate_cta }}
{% endif %}
</a>
</div>

Просмотреть файл

@ -0,0 +1,42 @@
{#
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
#}
{% extends "firefox/whatsnew/base.html" %}
{% block page_title %}{{ ftl('whatsnew-page-title') }}{% endblock %}
{% block page_desc %}{{ ftl('whatsnew-page-description') }}{% endblock %}
{#- This will appear as <meta property="og:description"> which can be used for social share -#}
{% block page_og_desc %}{{ ftl('whatsnew-page-description') }}{% endblock %}
{% block body_id %}firefox-whatsnew{% endblock %}
{% block body_class %}{% endblock %}
{% block site_header %}{% endblock %}
{% block page_css %}
{{ css_bundle('firefox_whatsnew') }}
{% endblock %}
{% block wnp_content %}
<section class="wnp-content-main">
<div class="mzp-l-content mzp-t-content-md">
<h1 class="wnp-main-title c-nimbus-128-title">{{ ftl('whatsnew-thanks-for-choosing') }}</h1>
</div>
</section>
<div class="wnp-footer">
<p class="wnp-sign-off">{{ ftl('whatsnew-signoff') }}</p>
{% if LANG in ["en-US", "en-CA", "en-GB", "fr", "de", "es-ES", "it", "pl"] or ftl_has_messages('whatsnew-donate-to-mofo') %}
{% include "firefox/whatsnew/includes/mofo-donate-cta.html" %}
{% endif %}
</div>
{% endblock %}
{% block js %}
{{ js_bundle('firefox_whatsnew') }}
{% endblock %}

Просмотреть файл

@ -45,6 +45,14 @@
</ul>
</div>
</section>
<div class="wnp-footer">
<p class="wnp-sign-off">{{ ftl('whatsnew-signoff') }}</p>
{% if LANG in ["en-US", "en-CA", "en-GB", "fr", "de", "es-ES", "it", "pl"] or ftl_has_messages('whatsnew-donate-to-mofo') %}
{% include "firefox/whatsnew/includes/mofo-donate-cta.html" %}
{% endif %}
</div>
{% endblock %}
{% block js %}

Просмотреть файл

@ -0,0 +1,110 @@
{#
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
#}
{% from "macros-protocol.html" import split with context %}
{% extends "firefox/whatsnew/base.html" %}
{% block page_title %}{{ ftl('whatsnew-page-title') }}{% endblock %}
{#- This will appear as <meta property="og:description"> which can be used for social share -#}
{% block page_og_desc %}{{ ftl('whatsnew-page-description') }}{% endblock %}
{% block body_id %}firefox-whatsnew{% endblock %}
{% block site_header %}{% endblock %}
{% block page_css %}
{{ css_bundle('protocol-split') }}
{{ css_bundle('firefox_whatsnew_128_eu') }}
{% endblock %}
{% block experiments %}
{% if switch('experiment-firefox-whatsnew-128-eu') %}
{{ js_bundle('firefox_whatsnew_128_eu') }}
{% endif %}
{% endblock %}
{% if LANG == 'fr' %}
{% set main_title = "Un navigateur qui vous ressemble" %}
{% set image_alt_text = "Mon Firefox: Plus de vitesse. Plus de sécurité. Plus de fun." %}
{% set main_tagline = "Découvrez des extensions qui rendent votre navigation encore plus rapide, plus sûre et plus fun." %}
{% set page_cta = "Personnaliser mon Firefox" %}
{% set cta_link = "https://addons.mozilla.org/fr/firefox/" %}
{% elif LANG == 'de' %}
{% set main_title = "Ein wirklich persönlicher Browser" %}
{% set image_alt_text = "Mein Firefox: Schneller. Sicherer. Persönlicher." %}
{% set main_tagline = "Entdecke Erweiterungen, die dein Browsing schneller, sicherer und persönlicher machen." %}
{% set page_cta = "Personalisiere deinen Firefox" %}
{% set cta_link = "https://addons.mozilla.org/de/firefox/" %}
{% elif LANG == 'es-ES' %}
{% set main_title = "Un navegador que se adapta a ti" %}
{% set image_alt_text = "Mi Firefox: Más velocidad. Más seguridad. Más diversión." %}
{% set main_tagline = "Descubre las extensiones que hacen tu navegación aún más rápida, segura y divertida." %}
{% set page_cta = "Personaliza tu Firefox" %}
{% set cta_link = "https://addons.mozilla.org/es/firefox/" %}
{% elif LANG == 'it' %}
{% set main_title = "Un browser che si adatta a te" %}
{% set image_alt_text = "Il mio Firefox: Più veloce. Più sicuro. Più divertente." %}
{% set main_tagline = "Scopri tutte le estensioni che rendono la tua navigazione ancora più veloce, sicura e divertente." %}
{% set page_cta = "Personalizza il tuo Firefox" %}
{% set cta_link = "https://addons.mozilla.org/it/firefox/" %}
{% elif LANG == 'pl' %}
{% set main_title = "Przeglądarka na miarę twoich potrzeb" %}
{% set image_alt_text = "Mój Firefox: Szybciej. Bezpieczniej. Ciekawiej." %}
{% set main_tagline = "Odkryj rozszerzenia, z którymi przeglądanie będzie jeszcze szybsze, jeszcze bezpieczniejsze i jeszcze fajniejsze" %}
{% set page_cta = "Spersonalizuj swojego Firefoksa" %}
{% set cta_link = "https://addons.mozilla.org/pl/firefox/" %}
{% else %}
{% set main_title = "A browser thats truly yours" %}
{% set image_alt_text = "My Firefox: More Speed. More Security. More Fun." %}
{% set main_tagline = "Discover extensions that make your browsing even faster, safer and more fun." %}
{% set page_cta = "Personalise your Firefox" %}
{% set cta_link = "https://addons.mozilla.org/en-GB/firefox/" %}
{% endif %}
{% block wnp_content %}
<section class="wnp-content-main wnp-content-addons">
<div class="mzp-l-content mzp-t-content-md">
<h1 class="wnp-main-title">{{ main_title }}</h1>
{{ picture(
url='img/firefox/wnp-128/addon.svg',
optional_attributes={
'class': 'wnp-main-image',
'alt': image_alt_text,
'width': '554',
'height': '300',
'l10n': True,
}
) }}
<p class="wnp-main-tagline">
{{ main_tagline }}
</p>
<p class="wnp-main-cta">
<a class="mzp-c-button mzp-t-product" href="{{ cta_link }}?{{ utm_params }}" data-cta-type="button" data-cta-text="Personalise your Firefox" target="_blank" rel="noopener">
{{ page_cta }}
</a>
</p>
</div>
</section>
<section class="wnp-footer">
<p class="wnp-sign-off">{{ ftl('whatsnew-signoff') }}</p>
{% include "firefox/whatsnew/includes/mofo-donate-cta.html" %}
</section>
{% endblock %}
{% block js %}
{{ js_bundle('firefox_whatsnew_128_eu') }}
{% endblock %}

Просмотреть файл

@ -0,0 +1,115 @@
{#
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
#}
{% extends "firefox/whatsnew/base.html" %}
{% block page_title %}{{ ftl('whatsnew-page-title') }}{% endblock %}
{#- This will appear as <meta property="og:description"> which can be used for social share -#}
{% block page_og_desc %}{{ ftl('whatsnew-page-description') }}{% endblock %}
{% block body_id %}firefox-whatsnew{% endblock %}
{% block site_header %}{% endblock %}
{% block page_css %}
{{ css_bundle('firefox_whatsnew_128_eu') }}
{% endblock %}
{% block experiments %}
{% if switch('experiment-firefox-whatsnew-128-eu') %}
{{ js_bundle('firefox_whatsnew_128_eu') }}
{% endif %}
{% endblock %}
{% if LANG == 'fr' %}
{% set main_title = "Faites un don à la Fondation Mozilla, l'organisme à but non lucratif derrière Firefox" %}
{% if variant == '2' %}
{% set main_tagline = "Firefox est un navigateur rapide comme l'éclair qui ne sacrifie pas votre vie privée avec des politiques de confidentialité douteuses. Ce navigateur est soutenu par la Fondation Mozilla - un mouvement mondial de gens qui travaillent à garder l'Internet ouvert et accessible à tous." %}
{% set secondary_tagline = "Vous avez choisi Firefox comme navigateur Internet, et maintenant nous espérons que vous ferez le prochain pas pour reprendre le contrôle dInternet. Faites un don aujourd'hui à la Fondation Mozilla." %}
{% set donate_link = "https://foundation.mozilla.org/?form=Firefox-FR-B" %}
{% elif variant == '3' %}
{% set main_tagline = "Merci d'utiliser Firefox, le navigateur soutenu par la Fondation Mozilla. Rejoignez maintenant l'organisation qui mobilise les gens dans le monde entier pour protéger notre vie privée en ligne, exiger des grandes entreprises technologiques quelles rendent des comptes, et établir une IA digne de confiance. Ensemble, nous pouvons construire le mouvement qui garantira que l'avenir de l'Internet place les individus au centre." %}
{% set secondary_tagline = "Si vous êtes prêt à reprendre le contrôle d'Internet avec nous, pouvez-vous faire un don à la Fondation Mozilla dès aujourd'hui ?" %}
{% set donate_link = "https://foundation.mozilla.org/?form=Firefox-FR-C" %}
{% endif %}
{% set page_cta = "Faire un don" %}
{% set cta_link = "https://addons.mozilla.org/fr/firefox/" %}
{% elif LANG == 'de' %}
{% set main_title = "Spende der Mozilla Foundation, der Non-Profit-Organisation hinter Firefox" %}
{% if variant == '2' %}
{% set main_tagline = "Firefox ist ein blitzschneller Browser, der dich nicht mit fragwürdigen Datenschutzrichtlinien oder Hintertürchen für Werbetreibende hintergeht. Dieser Browser wird von der Mozilla Foundation unterstützt – eine globale Bewegung von Menschen, die daran arbeiten, das Internet offen und allen zugänglich zu machen." %}
{% set secondary_tagline = "Du hast Firefox als Browser gewählt – jetzt würden wir uns freuen, wenn du den nächsten Schritt machst, das Internet zurückzuerobern. Spende noch heute an die Mozilla Foundation." %}
{% set donate_link = "https://foundation.mozilla.org/?form=Firefox-DE-B" %}
{% elif variant == '3' %}
{% set main_tagline = "Vielen Dank, dass du Firefox nutzt – der Browser, der von der Non-Profit-Organisation Mozilla Foundation unterstützt wird. Werde jetzt Teil der Organisation, die weltweit Menschen vereint, um gemeinsam online die Privatsphäre zu schützen, große Tech-Unternehmen verantwortlich zu machen und vertrauenswürdige KI zu etablieren. Gemeinsam müssen wir dafür sorgen, dass das Internet der Zukunft den Menschen über alles stellt." %}
{% set secondary_tagline = "Wenn du bereit bist, dir das Internet zurückzuholen, kannst du noch heute der Mozilla Foundation etwas spenden?" %}
{% set donate_link = "https://foundation.mozilla.org/?form=Firefox-DE-C" %}
{% endif %}
{% set page_cta = "Spenden" %}
{% set cta_link = "https://addons.mozilla.org/de/firefox/" %}
{% else %}
{% set main_title = "Donate to the Mozilla Foundation, the non-profit behind Firefox" %}
{% if variant == '2' %}
{% set main_tagline = "Firefox is a lightning-fast browser that doesn't sell you out with shady privacy policies or back doors for advertisers. This browser is backed by the Mozilla Foundation – a global movement of people working to keep the internet open and accessible to all." %}
{% set secondary_tagline = "You chose Firefox as your internet browser, and now we hope youll take the next step to reclaim the internet. Make a donation today to the Mozilla Foundation." %}
{% set donate_link = "https://foundation.mozilla.org/?form=Firefox-UK-B" %}
{% elif variant == '3' %}
{% set main_tagline = "Thanks for using Firefox, which is backed by the non-profit Mozilla Foundation. Now join the organization that mobilizes people worldwide to protect our privacy online, hold big tech companies accountable, and establish trustworthy AI. Together we must build the movement to ensure the future of the internet puts people first." %}
{% set secondary_tagline = "If you are ready to reclaim the internet, can you make a donation to the Mozilla Foundation today?" %}
{% set donate_link = "https://foundation.mozilla.org/?form=Firefox-UK-C" %}
{% endif %}
{% set page_cta = "Donate" %}
{% set cta_link = "https://addons.mozilla.org/en-GB/firefox/" %}
{% endif %}
{% block wnp_content %}
<section class="wnp-content-main wnp-content-donate">
<div class="mzp-l-content mzp-t-content-md">
{{ picture(
url='img/firefox/whatsnew/whatsnew128-eu/firefox-and-mozilla.png',
optional_attributes={
'class': 'wnp-main-image',
'width': '554',
'height': '300'
}
) }}
<h1 class="wnp-main-title">{{ main_title }}</h1>
<div class="tagline-wrapper">
{% if variant == '2' %}
<p class="wnp-main-tagline">{{ main_tagline }}</p>
<p class="wnp-main-tagline"><strong>{{ secondary_tagline }}</strong></p>
{% elif variant == '3' %}
<p class="wnp-main-tagline">{{ main_tagline }}</p>
<p class="wnp-main-tagline"><strong>{{ secondary_tagline }}</strong></p>
{% endif %}
</div>
<p class="wnp-main-cta">
<a class="mzp-c-button mzp-t-product mzp-t-xl" href="{{ donate_link }}" data-cta-type="button" data-cta-text="Personalize your Firefox" target="_blank" rel="noopener">
{{ page_cta }}
<span class="mzp-c-button-icon-end">❤️</span>
</a>
</p>
</div>
</section>
<section class="wnp-footer">
<p class="wnp-sign-off">{{ ftl('whatsnew-signoff') }}</p>
</section>
{% endblock %}

Просмотреть файл

@ -0,0 +1,60 @@
{#
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
#}
{% from "macros.html" import video_inline_embed with context %}
{% from "macros-protocol.html" import picto with context %}
{% extends "firefox/whatsnew/base.html" %}
{% block page_title %}{{ ftl('whatsnew-page-title') }}{% endblock %}
{#- This will appear as <meta property="og:description"> which can be used for social share -#}
{% block page_og_desc %}{{ ftl('whatsnew-page-description') }}{% endblock %}
{% block body_id %}firefox-whatsnew{% endblock %}
{% block site_header %}{% endblock %}
{% block page_css %}
{{ css_bundle('firefox_whatsnew_128_na') }}
{% endblock %}
{% block wnp_content %}
<section class="wnp-content-main mzp-l-content">
<div class="mzp-l-content mzp-t-content-md mzp-t-content-nospace c-video-wrapper">
{{ video_inline_embed(
id='9RLq8JDY0mI',
title='Stick the landing with Firefox',
image=resp_img(
url='img/firefox/whatsnew/whatsnew128-na/gymnast.png',
optional_attributes={
'width': '1024',
'height': '576'
}
),
) }}
<h1 class="wnp-main-title">World-class multitasking</h1>
<p class="wnp-main-tagline has-pip-icon">Picture-In-Picture lets you watch every cartwheel and handspring without putting your life on pause. Just click <strong>the Picture-in-Picture button</strong> to pop out any video.</p>
<p class="wnp-main-cta">
<a class="mzp-c-button mzp-t-product" href="{{ url('firefox.features.picture-in-picture') }}" data-cta-type="button" data-cta-text="Learn more">
Learn more
</a>
</p>
</div>
</section>
<section class="wnp-footer">
<p class="wnp-sign-off">{{ ftl('whatsnew-signoff') }}</p>
{% include "firefox/whatsnew/includes/mofo-donate-cta.html" %}
</section>
{% endblock %}
{% block js %}
{{ js_bundle('video-inline-embed') }}
{{ js_bundle('firefox_whatsnew_128_na') }}
{% endblock %}

Просмотреть файл

@ -726,6 +726,136 @@ class TestWhatsNew(TestCase):
# end 127.0 whatsnew tests
# begin 128.0 whatsnew tests
@override_settings(DEV=True)
def test_fx_128_0_0_en_us(self, render_mock):
"""Should use whatsnew-fx128-na template for en-US locale"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "en-US"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-na.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_en_ca(self, render_mock):
"""Should use whatsnew-fx128-na template for en-CA locale"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "en-CA"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-na.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_en_gb_v1(self, render_mock):
"""Should use whatsnew-fx128-eu-addons template for en-GB locale and v=1"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "en-GB"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-addons.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_fr_v1(self, render_mock):
"""Should use whatsnew-fx128-eu-addons template for fr locale and v=1"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "fr"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-addons.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_de_v1(self, render_mock):
"""Should use whatsnew-fx128-eu-addons template for de locale and v=1"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "de"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-addons.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_es_es_v1(self, render_mock):
"""Should use whatsnew-fx128-eu-addons template for es-ES locale and v=1"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "es-ES"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-addons.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_it_v1(self, render_mock):
"""Should use whatsnew-fx128-eu-addons template for it locale and v=1"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "it"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-addons.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_pl_v1(self, render_mock):
"""Should use whatsnew-fx128-eu-addons template for pl locale and v=1"""
req = self.rf.get("/firefox/whatsnew/")
req.locale = "pl"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-addons.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_en_gb_v2(self, render_mock):
"""Should use whatsnew-fx128-eu-donate template for en-GB locale and v=2"""
req = self.rf.get("/firefox/whatsnew/?v=2")
req.locale = "en-GB"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-donate.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_fr_v2(self, render_mock):
"""Should use whatsnew-fx128-eu-donate template for fr locale and v=2"""
req = self.rf.get("/firefox/whatsnew/?v=2")
req.locale = "fr"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-donate.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_de_v2(self, render_mock):
"""Should use whatsnew-fx128-eu-donate template for de locale and v=2"""
req = self.rf.get("/firefox/whatsnew/?v=2")
req.locale = "de"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-donate.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_en_gb_v3(self, render_mock):
"""Should use whatsnew-fx128-eu-donate template for en-GB locale and v=3"""
req = self.rf.get("/firefox/whatsnew/?v=3")
req.locale = "en-GB"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-donate.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_fr_v3(self, render_mock):
"""Should use whatsnew-fx128-eu-donate template for fr locale and v=3"""
req = self.rf.get("/firefox/whatsnew/?v=3")
req.locale = "fr"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-donate.html"]
@override_settings(DEV=True)
def test_fx_128_0_0_de_v3(self, render_mock):
"""Should use whatsnew-fx128-eu-donate template for de locale and v=3"""
req = self.rf.get("/firefox/whatsnew/?v=3")
req.locale = "de"
self.view(req, version="128.0")
template = render_mock.call_args[0][1]
assert template == ["firefox/whatsnew/whatsnew-fx128-eu-donate.html"]
# end 127.0 whatsnew tests
@patch("bedrock.firefox.views.l10n_utils.render", return_value=HttpResponse())
class TestFirstRun(TestCase):

Просмотреть файл

@ -371,6 +371,7 @@ class WhatsnewView(L10nTemplateView):
"firefox/developer/whatsnew-mdnplus.html": ["firefox/whatsnew/whatsnew-developer-mdnplus"],
"firefox/nightly/whatsnew.html": ["firefox/nightly/whatsnew", "firefox/whatsnew/whatsnew"],
"firefox/whatsnew/index.html": ["firefox/whatsnew/whatsnew-s2d", "firefox/whatsnew/whatsnew"],
"firefox/whatsnew/index-thanks.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx125-na.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx125-eu.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx126beta-de.html": ["firefox/whatsnew/whatsnew"],
@ -382,6 +383,9 @@ class WhatsnewView(L10nTemplateView):
"firefox/whatsnew/whatsnew-fx126-eu.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx127-na.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx127-eu.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx128-na.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx128-eu-addons.html": ["firefox/whatsnew/whatsnew"],
"firefox/whatsnew/whatsnew-fx128-eu-donate.html": ["firefox/whatsnew/whatsnew"],
}
# specific templates that should not be rendered in
@ -430,6 +434,8 @@ class WhatsnewView(L10nTemplateView):
locale = l10n_utils.get_locale(self.request)
version = self.kwargs.get("version") or ""
variant = self.request.GET.get("v", None)
nimbus_branch = self.request.GET.get("branch", None)
nimbus_variant = self.request.GET.get("variant", None)
# ensure variant matches pre-defined value
if variant not in self.variations:
@ -471,6 +477,30 @@ class WhatsnewView(L10nTemplateView):
template = "firefox/whatsnew/index.html"
else:
template = "firefox/whatsnew/index.html"
elif version.startswith("128."):
if locale in ["de", "fr", "en-GB"]:
if variant == "2" or variant == "3":
template = "firefox/whatsnew/whatsnew-fx128-eu-donate.html"
else:
template = "firefox/whatsnew/whatsnew-fx128-eu-addons.html"
elif locale in ["es-ES", "it", "pl"]:
template = "firefox/whatsnew/whatsnew-fx128-eu-addons.html"
elif locale.startswith("en-"):
if country == "GB":
if variant == "2" or variant == "3":
template = "firefox/whatsnew/whatsnew-fx128-eu-donate.html"
else:
template = "firefox/whatsnew/whatsnew-fx128-eu-addons.html"
else:
if nimbus_branch == "experiment-wnp-128-na-pip":
if nimbus_variant == "v1":
template = "firefox/whatsnew/index-thanks.html"
else:
template = "firefox/whatsnew/whatsnew-fx128-na.html"
else:
template = "firefox/whatsnew/whatsnew-fx128-na.html"
else:
template = "firefox/whatsnew/index.html"
elif version.startswith("127."):
if locale in ["de", "fr", "en-GB", "es-ES", "it", "pl"]:
template = "firefox/whatsnew/whatsnew-fx127-eu.html"

Просмотреть файл

@ -23,3 +23,7 @@ whatsnew-release-notes-v2 = Read the <a { $url }>Release Notes</a> to know more
whatsnew-release-notes = Read the <a href="{ $url }">Release Notes</a> to know more about whats new in your { -brand-name-firefox } browser.
whatsnew-signoff = <strong>Powered by { -brand-name-mozilla }.</strong> Putting people before profits since 1998.
whatsnew-donate-to-mofo = Donate to the { -brand-name-mozilla-foundation }
whatsnew-thanks-for-choosing = Thanks for choosing { -brand-name-firefox }

Просмотреть файл

@ -0,0 +1,23 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
@import '~@mozilla-protocol/core/protocol/css/includes/lib';
@import 'dark-mode';
/* stylelint-disable declaration-no-important */
@media (prefers-color-scheme: dark) {
.wnp-donate-wrapper {
.mzp-c-button {
color: $color-white !important;
border-color: $color-white !important;
&:hover,
&:focus,
&:active {
color: $color-black !important;
}
}
}
}

Просмотреть файл

@ -0,0 +1,61 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
@import 'includes/base';
@import '~@mozilla-protocol/core/protocol/css/includes/lib';
@import '~@mozilla-protocol/core/protocol/css/components/notification-bar';
@import 'includes/dark-mode';
@import 'includes/mofo-donate-cta';
.wnp-content-main {
background-color: $color-marketing-gray-10;
color: $color-black;
text-align: center;
}
.wnp-content-addons {
.wnp-main-title {
display: inline-block;
margin-bottom: $layout-md;
}
}
.wnp-main-tagline {
@include text-body-xl;
margin-top: $layout-md;
}
.wnp-main-image {
display: block;
margin: 0 auto $spacing-2xl;
}
.wnp-main-cta {
display: block;
margin-bottom: $layout-xl;
}
.wnp-content-donate {
.wnp-main-cta {
a {
@include text-body-xl;
padding: $spacing-md $spacing-2xl;
}
}
}
@media (prefers-color-scheme: dark) {
.wnp-content-main {
background: $color-dark-gray-40;
}
.wnp-main-title,
.wnp-main-tagline {
color: $title-text-color-inverse;
@supports (--css: variables) {
color: var(--title-text-color-inverse);
}
}
}

Просмотреть файл

@ -0,0 +1,85 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
@import 'includes/base';
@import '~@mozilla-protocol/core/protocol/css/includes/lib';
@import '~@mozilla-protocol/core/protocol/css/components/notification-bar';
@import "../../protocol/components/video";
@import 'includes/mofo-donate-cta';
.wnp-content-main {
background-color: #F8F6F4;
text-align: center
}
.c-video-wrapper {
z-index: 10;
.mzp-c-video {
overflow: visible;
position: relative;
@media (min-width: 920px) {
&::before {
background-image: url("/media/img/firefox/whatsnew/whatsnew128-na/video-pseudo-background.png");
background-repeat: no-repeat;
content: "";
height: 556px;
width: 710px;
position: absolute;
left: 30px;
top: 19px;
background-size: contain;
z-index: -1;
}
}
img {
border-radius: 20px;
}
}
}
.wnp-main-title {
@include text-title-lg;
margin-top: $spacing-lg;
@media #{$mq-md} {
margin-top: $layout-xl;
}
}
.wnp-main-tagline {
@include text-body-xl;
}
.has-pip-icon strong {
@include image-replaced;
@include background-size(2.25ex, 2.25ex);
background-image: url("/media/img/firefox/whatsnew/whatsnew128-na/pip-icon.svg");
background-repeat: no-repeat;
display: inline-block;
height: 2.25ex;
margin-bottom: -0.5ex;
width: 2.25ex;
}
@media (prefers-color-scheme: dark) {
.wnp-content-main {
background: $color-dark-gray-40;
}
.wnp-main-title,
.wnp-main-tagline {
color: $title-text-color-inverse;
@supports (--css: variables) {
color: var(--title-text-color-inverse);
}
}
.has-pip-icon strong {
background-image: url("/media/img/firefox/whatsnew/whatsnew128-na/pip-icon-white.svg");
}
}

Просмотреть файл

@ -9,6 +9,7 @@ $image-path: '/media/protocol/img';
@import '~@mozilla-protocol/core/protocol/css/components/notification-bar';
@import 'includes/base';
@import 'includes/dark-mode';
@import 'includes/mofo-donate-cta';
// * -------------------------------------------------------------------------- */
// Main content
@ -42,6 +43,10 @@ $image-path: '/media/protocol/img';
}
}
.c-nimbus-128-title {
@include text-title-xl;
}
.wnp-main-tagline {
@include text-body-lg;
}

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 27 KiB

Двоичные данные
media/img/firefox/whatsnew/whatsnew128-eu/firefox-and-mozilla.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 166 KiB

Двоичные данные
media/img/firefox/whatsnew/whatsnew128-na/gymnast.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 118 KiB

Просмотреть файл

@ -0,0 +1 @@
<svg width="69" height="60" viewBox="0 0 69 60" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M37.976 33.733h26.627c2.183 0 3.93 1.73 3.93 3.892V55.48c0 2.162-1.747 3.892-3.93 3.892H37.977c-2.182 0-3.928-1.73-3.928-3.892V37.625c0-2.162 1.746-3.892 3.928-3.892Z" fill="#fff"/><path d="M22.325 59.372H9.79c-5.425 0-9.79-4.386-9.79-9.7V9.7C0 4.325 4.427 0 9.79 0h48.952c5.425 0 9.79 4.386 9.79 9.7v12.418c0 2.162-1.745 3.892-3.928 3.892s-3.929-1.73-3.929-3.892V9.7c0-1.05-.873-1.916-1.933-1.916H9.728c-1.06 0-1.933.865-1.933 1.916v39.972c0 1.05.873 1.916 1.933 1.916h12.534c2.183 0 3.929 1.73 3.929 3.892s-1.746 3.892-3.866 3.892Z" fill="#fff"/><path d="M27.687 29.532c-.623 0-1.185-.247-1.684-.68l-12.596-12.48c-.935-.927-.935-2.41 0-3.274.935-.927 2.432-.927 3.305 0l12.596 12.48c.936.926.936 2.41 0 3.274-.436.433-.997.68-1.62.68Z" fill="#fff"/><path d="M28.061 29.902H17.897c-1.31 0-2.37-1.05-2.37-2.347a2.358 2.358 0 0 1 2.37-2.348h7.857v-7.785a2.358 2.358 0 0 1 2.37-2.347c1.31 0 2.37 1.05 2.37 2.347v10.07c-.063 1.422-1.123 2.41-2.433 2.41Z" fill="#fff"/></svg>

После

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Просмотреть файл

@ -0,0 +1 @@
<svg width="69" height="60" viewBox="0 0 69 60" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M37.976 33.733h26.627c2.183 0 3.93 1.73 3.93 3.892V55.48c0 2.162-1.747 3.892-3.93 3.892H37.977c-2.182 0-3.928-1.73-3.928-3.892V37.625c0-2.162 1.746-3.892 3.928-3.892Z" fill="#22133c"/><path d="M22.325 59.372H9.79c-5.425 0-9.79-4.386-9.79-9.7V9.7C0 4.325 4.427 0 9.79 0h48.952c5.425 0 9.79 4.386 9.79 9.7v12.418c0 2.162-1.745 3.892-3.928 3.892s-3.929-1.73-3.929-3.892V9.7c0-1.05-.873-1.916-1.933-1.916H9.728c-1.06 0-1.933.865-1.933 1.916v39.972c0 1.05.873 1.916 1.933 1.916h12.534c2.183 0 3.929 1.73 3.929 3.892s-1.746 3.892-3.866 3.892Z" fill="#22133c"/><path d="M27.687 29.532c-.623 0-1.185-.247-1.684-.68l-12.596-12.48c-.935-.927-.935-2.41 0-3.274.935-.927 2.432-.927 3.305 0l12.596 12.48c.936.926.936 2.41 0 3.274-.436.433-.997.68-1.62.68Z" fill="#22133c"/><path d="M28.061 29.902H17.897c-1.31 0-2.37-1.05-2.37-2.347a2.358 2.358 0 0 1 2.37-2.348h7.857v-7.785a2.358 2.358 0 0 1 2.37-2.347c1.31 0 2.37 1.05 2.37 2.347v10.07c-.063 1.422-1.123 2.41-2.433 2.41Z" fill="#22133c"/></svg>

После

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 28 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 27 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 27 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 27 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 31 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 28 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Просмотреть файл

@ -0,0 +1,36 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import TrafficCop from '@mozmeao/trafficcop';
import { isApprovedToRun } from '../../base/experiment-utils.es6.js';
const href = window.location.href;
const initTrafficCop = () => {
if (href.indexOf('v=') !== -1) {
if (href.indexOf('v=1') !== -1) {
return;
} else if (href.indexOf('v=2') !== -1) {
return;
} else if (href.indexOf('v=3') !== -1) {
return;
}
} else if (TrafficCop) {
const cop = new TrafficCop({
variations: {
'v=1': 80, // add-ons (version A)
'v=2': 10, // MoFo donate (version B) -- only for DE, FR, GB
'v=3': 10 // MoFo donate (version C) -- only for DE, FR, GB
}
});
cop.init();
}
};
// Avoid entering automated tests into random experiments.
if (isApprovedToRun()) {
initTrafficCop();
}

Просмотреть файл

@ -0,0 +1,43 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
// Log account status
Mozilla.Client.getFxaDetails((details) => {
'use strict';
if (details.setup) {
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: false
});
}
});
// Log default status
Mozilla.UITour.getConfiguration('appinfo', (details) => {
'use strict';
if (details.defaultBrowser) {
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: true
});
} else {
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: false
});
}
});

Просмотреть файл

@ -405,6 +405,18 @@
],
"name": "firefox_whatsnew_127_na"
},
{
"files": [
"css/firefox/whatsnew/whatsnew-128-eu.scss"
],
"name": "firefox_whatsnew_128_eu"
},
{
"files": [
"css/firefox/whatsnew/whatsnew-128-na.scss"
],
"name": "firefox_whatsnew_128_na"
},
{
"files": [
"css/firefox/privacy/promise.scss"
@ -1485,6 +1497,18 @@
],
"name": "firefox_whatsnew_127_na"
},
{
"files": [
"js/firefox/whatsnew/whatsnew-128-experiment-eu.es6.js"
],
"name": "firefox_whatsnew_128_eu"
},
{
"files": [
"js/firefox/whatsnew/whatsnew-128-na.js"
],
"name": "firefox_whatsnew_128_na"
},
{
"files": [
"js/mozorg/manifesto.js"