From 17e6aabd034c4bb52406b5df56b61838713bf530 Mon Sep 17 00:00:00 2001
From: Stephanie Hobson
Date: Mon, 29 Jul 2024 20:26:59 -0700
Subject: [PATCH 1/2] Update analytics documentation, and reflect docs in code
Update analytics documentation to remove UA and edit the code to make it match the GA4 docs.
- Re-write analytics documentation intro
- Remove: UA documentation
- Remove: UA dataLayer pushes
- Remove: data-link-group (migrate into data-link-position where appropriate)
- Remove: data-cta-type="button"
- Remove: data-cta-type="link"
- data-cta and data-link should not be used on the same attribute
---
.../protocol/footer/footer-refresh.html | 60 +--
.../includes/protocol/footer/footer.html | 76 +--
.../navigation/menus-refresh/about-us.html | 12 +-
.../navigation/menus-refresh/firefox.html | 10 +-
.../navigation/menus-refresh/products.html | 16 +-
.../protocol/navigation/menus/firefox.html | 16 +-
.../protocol/navigation/menus/innovation.html | 8 +-
.../protocol/navigation/menus/products.html | 16 +-
.../protocol/navigation/menus/whoweare.html | 16 +-
.../includes/protocol/navigation/nav-cta.html | 2 +-
.../navigation/navigation-refresh.html | 2 +-
.../protocol/navigation/navigation.html | 2 +-
bedrock/base/templates/macros-protocol.html | 4 +-
bedrock/base/templates/macros.html | 3 +-
bedrock/base/tests/test_macros.py | 6 +-
.../careers/templates/careers/benefits.html | 2 +-
bedrock/careers/templates/careers/home.html | 10 +-
.../careers/templates/careers/locations.html | 2 +-
bedrock/careers/templates/careers/teams.html | 2 +-
bedrock/contentful/api.py | 2 +-
.../templates/includes/contentful/cta.html | 10 +-
bedrock/contentful/tests/data.py | 2 +-
.../contentful/tests/test_contentful_api.py | 9 +-
.../firefox/browsers/chromebook.html | 2 +-
.../firefox/browsers/compare/brave.html | 4 +-
.../firefox/browsers/compare/edge.html | 4 +-
.../firefox/browsers/compare/index.html | 2 +-
.../firefox/browsers/compare/opera.html | 4 +-
.../firefox/browsers/compare/safari.html | 4 +-
.../firefox/browsers/mobile/index.html | 14 +-
.../challenge-the-default/landing-base.html | 6 +-
.../templates/firefox/channel/desktop.html | 4 +-
.../templates/firefox/developer/index.html | 2 +-
.../firefox/developer/whatsnew-mdnplus.html | 4 +-
.../firefox/family/includes/agreement.html | 2 +-
.../family/includes/download-firefox.html | 4 +-
.../firefox/family/includes/modules/faq.html | 32 +-
.../firefox/family/includes/resources.html | 2 +-
.../firefox/features/includes/subnav.html | 31 ++
.../templates/firefox/features/index.html | 2 +-
.../templates/firefox/features/translate.html | 2 +-
.../templates/firefox/includes/macros.html | 2 +-
bedrock/firefox/templates/firefox/index.html | 16 +-
.../templates/firefox/new/basic/thanks.html | 6 +-
.../firefox/new/desktop/download.html | 24 +-
.../templates/firefox/new/desktop/thanks.html | 12 +-
.../templates/firefox/nightly/firstrun.html | 6 +-
.../templates/firefox/nightly/whatsnew.html | 2 +-
.../firefox/nothing-personal/index.html | 4 +-
bedrock/firefox/templates/firefox/pocket.html | 4 +-
.../firefox/set-as-default/landing.html | 2 +-
bedrock/firefox/templates/firefox/switch.html | 6 +-
.../templates/firefox/welcome/page1.html | 2 +-
.../templates/firefox/welcome/page10.html | 2 +-
.../templates/firefox/welcome/page11.html | 2 +-
.../templates/firefox/welcome/page12.html | 2 +-
.../templates/firefox/welcome/page13.html | 2 +-
.../templates/firefox/welcome/page14.html | 2 +-
.../templates/firefox/welcome/page16.html | 2 +-
.../firefox/welcome/page17/page17-a.html | 2 +-
.../firefox/welcome/page17/page17-c.html | 2 +-
.../templates/firefox/welcome/page18.html | 4 +-
.../templates/firefox/welcome/page2.html | 4 +-
.../templates/firefox/welcome/page4.html | 2 +-
.../templates/firefox/welcome/page6.html | 2 +-
.../templates/firefox/welcome/page8.html | 10 +-
.../templates/firefox/welcome/page9.de.html | 2 +-
.../templates/firefox/welcome/page9.fr.html | 2 +-
.../whatsnew/includes/mofo-donate-cta.html | 2 +-
.../firefox/whatsnew/whatsnew-fx125-eu.html | 2 +-
.../firefox/whatsnew/whatsnew-fx125-na.html | 4 +-
.../firefox/whatsnew/whatsnew-fx126-eu.html | 2 +-
.../firefox/whatsnew/whatsnew-fx126-na.html | 2 +-
.../whatsnew/whatsnew-fx126beta-de.html | 2 +-
.../whatsnew/whatsnew-fx126beta-en-CA.html | 2 +-
.../whatsnew/whatsnew-fx126beta-en-GB.html | 2 +-
.../whatsnew/whatsnew-fx126beta-en-US.html | 2 +-
.../whatsnew/whatsnew-fx126beta-fr.html | 2 +-
.../firefox/whatsnew/whatsnew-fx127-eu.html | 2 +-
.../firefox/whatsnew/whatsnew-fx127-na.html | 2 +-
.../whatsnew/whatsnew-fx128-eu-addons.html | 2 +-
.../whatsnew/whatsnew-fx128-eu-donate.html | 2 +-
.../firefox/whatsnew/whatsnew-fx128-na.html | 2 +-
.../firefox/whatsnew/whatsnew-fx129-na.html | 4 +-
.../2021/includes/modal-blog.html | 18 +-
.../foundation/annualreport/2021/index.html | 26 +-
.../mozorg/templates/mozorg/about/index.html | 4 +-
.../templates/mozorg/about/manifesto.html | 4 +-
.../templates/mozorg/antiharassment-tool.html | 2 +-
.../templates/mozorg/home/home-new.html | 16 +-
.../mozorg/home/includes/ctd-promo-de.html | 4 +-
.../mozorg/home/includes/featured-vpn.html | 2 +-
.../home/includes/mofo-donate-promo.html | 2 +-
.../includes/mozilla-account-promo.html | 2 +-
bedrock/mozorg/tests/test_helper_misc.py | 4 +-
.../templates/newsletter/includes/form.html | 2 +-
.../newsletter/opt-out-confirmation.html | 8 +-
bedrock/newsletter/tests/test_views.py | 4 +-
.../pocket/firefox/new-tab-learn-more.html | 2 +-
bedrock/pocket/templates/pocket/home.html | 2 +-
.../templates/pocket/pocket-and-firefox.html | 4 +-
.../products/templates/products/landing.html | 34 +-
.../templates/products/mozsocial/invite.html | 106 ++++
.../templates/products/vpn/download.html | 22 +-
.../templates/products/vpn/features.html | 16 +-
.../products/vpn/includes/macros.html | 20 +-
.../templates/products/vpn/invite.html | 2 +-
.../products/vpn/landing-refresh.html | 6 +-
.../templates/products/vpn/landing.html | 360 +++++++++++++
.../products/vpn/pricing-refresh.html | 8 +-
.../templates/products/vpn/pricing.html | 90 ++++
.../vpn/resource-center/base-article.html | 4 +-
bedrock/products/tests/test_helper_misc.py | 12 +-
docs/abtest.rst | 40 +-
docs/attribution/0001-analytics.rst | 484 +++++++-----------
docs/attribution/0002-firefox-desktop.rst | 2 +
docs/attribution/0004-mozilla-accounts.rst | 2 +-
docs/l10n.rst | 2 +-
docs/mozilla-accounts.rst | 2 +-
media/js/base/banners/mozilla-banner.es6.js | 7 -
.../base/protocol/init-lang-switcher.es6.js | 6 -
media/js/base/send-to-device.es6.js | 6 -
media/js/firefox/all/all-init.es6.js | 6 -
.../challenge-the-default.es6.js | 28 -
media/js/firefox/family/banner.es6.js | 7 -
.../firefox/new/common/thanks-direct.es6.js | 12 -
media/js/firefox/new/desktop/download.js | 6 -
media/js/firefox/set-as-default/thanks.js | 15 -
media/js/firefox/share-page.es6.js | 7 -
media/js/firefox/welcome/welcome6.es6.js | 6 -
media/js/firefox/welcome/welcome8.js | 12 -
media/js/firefox/whatsnew/whatsnew-125-eu.js | 28 -
media/js/firefox/whatsnew/whatsnew-125-na.js | 28 -
media/js/firefox/whatsnew/whatsnew-126.js | 28 -
media/js/firefox/whatsnew/whatsnew-126beta.js | 28 -
media/js/firefox/whatsnew/whatsnew-127-eu.js | 28 -
media/js/firefox/whatsnew/whatsnew-127-na.js | 28 -
media/js/newsletter/newsletter-init.es6.js | 5 -
.../vpn/resource-center-article.es6.js | 6 -
tests/unit/spec/products/vpn/invite.js | 2 +-
140 files changed, 1181 insertions(+), 1013 deletions(-)
create mode 100644 bedrock/firefox/templates/firefox/features/includes/subnav.html
create mode 100644 bedrock/products/templates/products/mozsocial/invite.html
create mode 100644 bedrock/products/templates/products/vpn/landing.html
create mode 100644 bedrock/products/templates/products/vpn/pricing.html
diff --git a/bedrock/base/templates/includes/protocol/footer/footer-refresh.html b/bedrock/base/templates/includes/protocol/footer/footer-refresh.html
index 8e137de5ee9..4a67152b192 100644
--- a/bedrock/base/templates/includes/protocol/footer/footer-refresh.html
+++ b/bedrock/base/templates/includes/protocol/footer/footer-refresh.html
@@ -17,19 +17,19 @@
@@ -40,16 +40,16 @@
@@ -59,9 +59,9 @@
@@ -70,9 +70,9 @@
@@ -81,10 +81,10 @@
@@ -104,21 +104,21 @@
- Read more
+ Read more
@@ -266,7 +266,7 @@
- Read more about our benefits
+ Read more about our benefits
@@ -276,7 +276,7 @@
See yourself on one of our teams?
- Find your role
+ Find your role
@@ -379,7 +379,7 @@
- View all teams
+ View all teams
@@ -410,7 +410,7 @@
- Read more about the future of work at Mozilla
+ Read more about the future of work at Mozilla
diff --git a/bedrock/careers/templates/careers/locations.html b/bedrock/careers/templates/careers/locations.html
index 5c97f6df8c2..7d652139a4c 100644
--- a/bedrock/careers/templates/careers/locations.html
+++ b/bedrock/careers/templates/careers/locations.html
@@ -15,7 +15,7 @@ We’ll meet you where you are — office optional
choose where they do it.
diff --git a/bedrock/careers/templates/careers/teams.html b/bedrock/careers/templates/careers/teams.html
index cfd23a0f299..6077c2430fd 100644
--- a/bedrock/careers/templates/careers/teams.html
+++ b/bedrock/careers/templates/careers/teams.html
@@ -15,7 +15,7 @@ Meet Mozilla’s teams
builders and creators working together to keep the internet open and
accessible to all.
diff --git a/bedrock/contentful/api.py b/bedrock/contentful/api.py
index 67a9ba5903a..2963545dc30 100644
--- a/bedrock/contentful/api.py
+++ b/bedrock/contentful/api.py
@@ -296,7 +296,7 @@ def render(self, node):
rel = ' rel="external noopener"'
# add analytics
cta_text = _make_plain_text(node)
- data_cta = f' data-cta-type="link" data-cta-text="{cta_text}"'
+ data_cta = f' data-cta-text="{cta_text}"'
return f'{self._render_content(node)} '
diff --git a/bedrock/contentful/templates/includes/contentful/cta.html b/bedrock/contentful/templates/includes/contentful/cta.html
index 5d4397e0bdb..b511c475c98 100644
--- a/bedrock/contentful/templates/includes/contentful/cta.html
+++ b/bedrock/contentful/templates/includes/contentful/cta.html
@@ -16,7 +16,7 @@
{% elif action == 'Explore Firefox' %}
- {{ label }}
+ {{ label }}
{% elif action == 'Create a Firefox Account' %}
@@ -30,18 +30,18 @@
{% elif action == 'Get Pocket' %}
- {{ label }}
+ {{ label }}
{% elif action == 'Get Mozilla VPN' %}
- {{ label }}
+ {{ label }}
{% elif action == 'Try Relay' %}
- {{ label }}
+ {{ label }}
{% elif action == 'Get MDN Plus' %}
- {{ label }}
+ {{ label }}
{% endif %}
diff --git a/bedrock/contentful/tests/data.py b/bedrock/contentful/tests/data.py
index 23dd9e00899..91b0f4ce14f 100644
--- a/bedrock/contentful/tests/data.py
+++ b/bedrock/contentful/tests/data.py
@@ -27,7 +27,7 @@
"entries": [
{
"component": "text",
- "body": ' Virtual private networks (VPNs) and secure web proxies are solutions for better privacy and security online, but it can be confusing to figure out which one is right for you. Here\u2019s a look at how these services protect you and how to choose the best option for when you\u2019re online.
\nStop ISPs from spying on you \nWhen you use Firefox , Enhanced Tracking Protection automatically blocks many third party web trackers from following you around the web. But here\u2019s an interesting fact: your internet service provider (ISP) that you are paying for an internet connection \u2014 can still observe and track you.
\nBecause your internet traffic moves to and from your devices (computer, phone, tv, tablet) through your ISP, they can see where you go online. An ISP can see what sites you visit, how long you\u2019re on them, your location and information about your devices. An ISP may not know the specifics of what you did on those sites (like what you bought, searched for or read) thanks to encryption, but they could make inferences about you based on the sites that you visited. That personal data can be used to create detailed profiles about you. Why would ISPs do that? In short: this data is valuable.
\nISPs can use this information for their own ad targeting or for monetization opportunities that could include sharing your information with third parties interested in data mining, marketing and targeted advertising, which means less privacy and more tracking. Browsing in private mode doesn\u2019t prevent ISPs from seeing where you go online. But sending your web traffic through a web proxy or VPN can make it much harder.
\nWhen should you choose a VPN or a secure proxy? \nVPNs and secure web proxies have shared goals: they secure connections. They can, and do, mask your original IP address and protect web traffic that you send between you and your VPN or secure proxy provider. But when would you want to use a VPN vs a proxy?
\n \n\nSecure web proxy: browser-level protection \nA secure web proxy works for tasks that you might do only in your browser. This can amount to a lot of activity like shopping, paying bills, logging into social media and reading emails. A secure web proxy serves as an intermediary between your browser and the internet. Your web browsing data will pass through a secure tunnel to the internet directly from your browser, masking your IP address, so the web server you are contacting doesn\u2019t know exactly where you are in the world. And that makes you harder to track and target.
\nA proxy is useful when you\u2019re browsing the web on a public WiFi. When a proxy is enabled, it will stop eavesdroppers on the same network from spying on your browsing activity or reading your transactions on unencrypted sites. It sounds harmless, but public WiFi networks can be like a backdoor for hackers .
\nFirefox Private Network is an easy to install browser extension that provides a secure, encrypted tunnel to the web to protect your browser connection anywhere you use Firefox. It\'s fast and easy to turn on whenever you need it for extra security in your browser
\nVPNs: device-level protection \nVPNs do more than proxies in that a proxy only protects what you do in your browser, whereas a VPN protects all your traffic, including your browser, wherever you have a VPN installed and enabled. VPNs provide added security and privacy for all your online activity \u2014 an important consideration if you want to keep your activity to yourself and make it more difficult for data hungry trackers and ISPs to create a profile of you across all your devices, like your phone, computer and tablet.
\nA VPN works by creating a secure \u201ctunnel\u201d between your device and the internet at large. It protects your privacy in two key ways:
\nConcealing your IP address, protecting your identity and obscuring your location. Encrypting your traffic between you and your VPN provider so that no one on your local network can decipher or modify it. \nA VPN also offers security on open and public WiFi connections. Open WiFi can be risky, and it\u2019s impossible to be sure that someone else isn\u2019t connecting to the same network to snoop on what you\u2019re doing. Even if your traffic is encrypted, they can still see which sites you are visiting. And if you\u2019re using an app that doesn\u2019t have encryption \u2014 and even today, many don\u2019t \u2014 then they can see everything you are doing in that app. Mozilla VPN is a fast, secure, trustworthy service that can help close the security gap for you. Mozilla VPN also lets you choose your \u201clocation\u201d (where your traffic appears to be coming from) from more than 30 countries.
\nChoose a trustworthy service \nThe most important thing to consider when picking either a VPN or a proxy service is choosing a trustworthy company. Be sure you understand the terms you\u2019re agreeing to. Many claim to be great and focused on privacy, but a large number of them fall short on their promise. Not all proxy and VPN services are secure and private. Some will log your online activities so they can sell your data and information to marketing firms themselves. Other services will try to convince you to install malware on your devices.
\nWe\u2019ve done the legwork to ensure that both the Mozilla VPN and Firefox Private Network proxy extension actually respect your privacy, and it\u2019s something we\u2019re willing to stake our reputation on. Mozilla has a reputation for building products that help you keep your information safe. We follow our easy to read, no-nonsense Data Privacy Principles which allow us to focus only on the information we need to provide a service. And since we are backed by a mission-driven company, you can trust that the dollars you spend for this product will not only ensure you have top-notch security, but also are making the internet better for everyone.
\n',
+ "body": 'Virtual private networks (VPNs) and secure web proxies are solutions for better privacy and security online, but it can be confusing to figure out which one is right for you. Here\u2019s a look at how these services protect you and how to choose the best option for when you\u2019re online.
\nStop ISPs from spying on you \nWhen you use Firefox , Enhanced Tracking Protection automatically blocks many third party web trackers from following you around the web. But here\u2019s an interesting fact: your internet service provider (ISP) that you are paying for an internet connection \u2014 can still observe and track you.
\nBecause your internet traffic moves to and from your devices (computer, phone, tv, tablet) through your ISP, they can see where you go online. An ISP can see what sites you visit, how long you\u2019re on them, your location and information about your devices. An ISP may not know the specifics of what you did on those sites (like what you bought, searched for or read) thanks to encryption, but they could make inferences about you based on the sites that you visited. That personal data can be used to create detailed profiles about you. Why would ISPs do that? In short: this data is valuable.
\nISPs can use this information for their own ad targeting or for monetization opportunities that could include sharing your information with third parties interested in data mining, marketing and targeted advertising, which means less privacy and more tracking. Browsing in private mode doesn\u2019t prevent ISPs from seeing where you go online. But sending your web traffic through a web proxy or VPN can make it much harder.
\nWhen should you choose a VPN or a secure proxy? \nVPNs and secure web proxies have shared goals: they secure connections. They can, and do, mask your original IP address and protect web traffic that you send between you and your VPN or secure proxy provider. But when would you want to use a VPN vs a proxy?
\n \n\nSecure web proxy: browser-level protection \nA secure web proxy works for tasks that you might do only in your browser. This can amount to a lot of activity like shopping, paying bills, logging into social media and reading emails. A secure web proxy serves as an intermediary between your browser and the internet. Your web browsing data will pass through a secure tunnel to the internet directly from your browser, masking your IP address, so the web server you are contacting doesn\u2019t know exactly where you are in the world. And that makes you harder to track and target.
\nA proxy is useful when you\u2019re browsing the web on a public WiFi. When a proxy is enabled, it will stop eavesdroppers on the same network from spying on your browsing activity or reading your transactions on unencrypted sites. It sounds harmless, but public WiFi networks can be like a backdoor for hackers .
\nFirefox Private Network is an easy to install browser extension that provides a secure, encrypted tunnel to the web to protect your browser connection anywhere you use Firefox. It\'s fast and easy to turn on whenever you need it for extra security in your browser
\nVPNs: device-level protection \nVPNs do more than proxies in that a proxy only protects what you do in your browser, whereas a VPN protects all your traffic, including your browser, wherever you have a VPN installed and enabled. VPNs provide added security and privacy for all your online activity \u2014 an important consideration if you want to keep your activity to yourself and make it more difficult for data hungry trackers and ISPs to create a profile of you across all your devices, like your phone, computer and tablet.
\nA VPN works by creating a secure \u201ctunnel\u201d between your device and the internet at large. It protects your privacy in two key ways:
\nConcealing your IP address, protecting your identity and obscuring your location. Encrypting your traffic between you and your VPN provider so that no one on your local network can decipher or modify it. \nA VPN also offers security on open and public WiFi connections. Open WiFi can be risky, and it\u2019s impossible to be sure that someone else isn\u2019t connecting to the same network to snoop on what you\u2019re doing. Even if your traffic is encrypted, they can still see which sites you are visiting. And if you\u2019re using an app that doesn\u2019t have encryption \u2014 and even today, many don\u2019t \u2014 then they can see everything you are doing in that app. Mozilla VPN is a fast, secure, trustworthy service that can help close the security gap for you. Mozilla VPN also lets you choose your \u201clocation\u201d (where your traffic appears to be coming from) from more than 30 countries.
\nChoose a trustworthy service \nThe most important thing to consider when picking either a VPN or a proxy service is choosing a trustworthy company. Be sure you understand the terms you\u2019re agreeing to. Many claim to be great and focused on privacy, but a large number of them fall short on their promise. Not all proxy and VPN services are secure and private. Some will log your online activities so they can sell your data and information to marketing firms themselves. Other services will try to convince you to install malware on your devices.
\nWe\u2019ve done the legwork to ensure that both the Mozilla VPN and Firefox Private Network proxy extension actually respect your privacy, and it\u2019s something we\u2019re willing to stake our reputation on. Mozilla has a reputation for building products that help you keep your information safe. We follow our easy to read, no-nonsense Data Privacy Principles which allow us to focus only on the information we need to provide a service. And since we are backed by a mission-driven company, you can trust that the dollars you spend for this product will not only ensure you have top-notch security, but also are making the internet better for everyone.
\n',
"width_class": "mzp-t-content-md",
}
],
diff --git a/bedrock/contentful/tests/test_contentful_api.py b/bedrock/contentful/tests/test_contentful_api.py
index ecceabdf957..1a304f54475 100644
--- a/bedrock/contentful/tests/test_contentful_api.py
+++ b/bedrock/contentful/tests/test_contentful_api.py
@@ -520,7 +520,7 @@ def test_LinkRenderer__mozilla_link(mock_get_current_request):
output = LinkRenderer({"text": TextRenderer}).render(mozilla_mock_hyperlink_node)
expected = (
'Example '
+ 'data-cta-text="Example" rel="external noopener">Example'
)
assert output == expected
@@ -534,10 +534,7 @@ def test_LinkRenderer__mozilla_link__existing_utm(mock_get_current_request):
mozilla_mock_hyperlink_node = deepcopy(mock_hyperlink_node)
mozilla_mock_hyperlink_node["data"]["uri"] = "https://mozilla.org/test/page/?utm_source=UTMTEST"
output = LinkRenderer({"text": TextRenderer}).render(mozilla_mock_hyperlink_node)
- expected = (
- 'Example '
- )
+ expected = 'Example '
assert output == expected
@@ -549,7 +546,7 @@ def test_LinkRenderer__non_mozilla():
"text": TextRenderer,
}
).render(mock_hyperlink_node)
- == 'Example '
+ == 'Example '
)
diff --git a/bedrock/firefox/templates/firefox/browsers/chromebook.html b/bedrock/firefox/templates/firefox/browsers/chromebook.html
index ed68e163630..8df3f2b1407 100644
--- a/bedrock/firefox/templates/firefox/browsers/chromebook.html
+++ b/bedrock/firefox/templates/firefox/browsers/chromebook.html
@@ -115,7 +115,7 @@ {{ ftl('browsers-chromebook-is-it-hard') }}
}
) }}
- {{ ftl('browsers-chromebook-install-firefox-as', url='href="https://support.mozilla.org/kb/run-firefox-chromeos?utm_source=www.mozilla.org-firefox-browsers-chromebook&utm_medium=referral&utm_campaign=seo" rel="external noopener" data-cta-text="Install Firefox for Chromebook" data-cta-type="link"'|safe) }}
+ {{ ftl('browsers-chromebook-install-firefox-as', url='href="https://support.mozilla.org/kb/run-firefox-chromeos?utm_source=www.mozilla.org-firefox-browsers-chromebook&utm_medium=referral&utm_campaign=seo" rel="external noopener" data-cta-text="Install Firefox for Chromebook" '|safe) }}
diff --git a/bedrock/firefox/templates/firefox/browsers/compare/brave.html b/bedrock/firefox/templates/firefox/browsers/compare/brave.html
index f61d78fa5f7..95bcc3cd958 100644
--- a/bedrock/firefox/templates/firefox/browsers/compare/brave.html
+++ b/bedrock/firefox/templates/firefox/browsers/compare/brave.html
@@ -20,8 +20,8 @@
{{ ftl('compare-shared-we-also-offer-easy') }}
- {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs" data-link-type="link"'|safe|format(url('firefox.features.pdf-editor'))) }}
- {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page" data-link-type="link"'|safe|format(url('firefox.features.translate'))) }}
+ {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs"'|safe|format(url('firefox.features.pdf-editor'))) }}
+ {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page"'|safe|format(url('firefox.features.translate'))) }}
{{ ftl('compare-shared-its-easy-to-switch') }}
diff --git a/bedrock/firefox/templates/firefox/browsers/compare/edge.html b/bedrock/firefox/templates/firefox/browsers/compare/edge.html
index bebb97d1e48..cb8e5ee50d2 100644
--- a/bedrock/firefox/templates/firefox/browsers/compare/edge.html
+++ b/bedrock/firefox/templates/firefox/browsers/compare/edge.html
@@ -18,8 +18,8 @@
{{ ftl('compare-shared-we-also-offer-easy') }}
- {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs" data-link-type="link"'|safe|format(url('firefox.features.pdf-editor'))) }}
- {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page" data-link-type="link"'|safe|format(url('firefox.features.translate'))) }}
+ {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs"'|safe|format(url('firefox.features.pdf-editor'))) }}
+ {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page"'|safe|format(url('firefox.features.translate'))) }}
{{ ftl('compare-edge-and-we-make-it-easy-for-you') }}
diff --git a/bedrock/firefox/templates/firefox/browsers/compare/index.html b/bedrock/firefox/templates/firefox/browsers/compare/index.html
index d5171262c0e..c20d416651d 100644
--- a/bedrock/firefox/templates/firefox/browsers/compare/index.html
+++ b/bedrock/firefox/templates/firefox/browsers/compare/index.html
@@ -14,7 +14,7 @@
ga_title
) -%}
-
+
{{ title }}
{{ ftl('ui-learn-more') }}
diff --git a/bedrock/firefox/templates/firefox/browsers/compare/opera.html b/bedrock/firefox/templates/firefox/browsers/compare/opera.html
index e3afc1786f7..a3a24aa7777 100644
--- a/bedrock/firefox/templates/firefox/browsers/compare/opera.html
+++ b/bedrock/firefox/templates/firefox/browsers/compare/opera.html
@@ -16,8 +16,8 @@
{{ ftl('compare-shared-firefox-also-has-built-in') }}
- {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs" data-link-type="link"'|safe|format(url('firefox.features.pdf-editor'))) }}
- {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page" data-link-type="link"'|safe|format(url('firefox.features.translate'))) }}
+ {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs"'|safe|format(url('firefox.features.pdf-editor'))) }}
+ {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page"'|safe|format(url('firefox.features.translate'))) }}
{{ ftl('compare-opera-firefox-offers-a-wide-range-of') }}
diff --git a/bedrock/firefox/templates/firefox/browsers/compare/safari.html b/bedrock/firefox/templates/firefox/browsers/compare/safari.html
index 22608278c39..8769058eeac 100644
--- a/bedrock/firefox/templates/firefox/browsers/compare/safari.html
+++ b/bedrock/firefox/templates/firefox/browsers/compare/safari.html
@@ -17,8 +17,8 @@
{{ ftl('compare-safari-but-firefox-also-has-built-in') }}
- {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs" data-link-type="link"'|safe|format(url('firefox.features.pdf-editor'))) }}
- {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page" data-link-type="link"'|safe|format(url('firefox.features.translate'))) }}
+ {{ ftl('compare-shared-edit-pdfs-on-the-go', pdf='href="%s" data-link-text="Edit PDFs"'|safe|format(url('firefox.features.pdf-editor'))) }}
+ {{ ftl('compare-shared-translate-a-web-page', translate='href="%s" data-link-text="Translate a web page"'|safe|format(url('firefox.features.translate'))) }}
{{ ftl('compare-safari-firefox-offers-a-wide-range-of') }}
diff --git a/bedrock/firefox/templates/firefox/browsers/mobile/index.html b/bedrock/firefox/templates/firefox/browsers/mobile/index.html
index bd83d023736..7864f230b64 100644
--- a/bedrock/firefox/templates/firefox/browsers/mobile/index.html
+++ b/bedrock/firefox/templates/firefox/browsers/mobile/index.html
@@ -83,14 +83,14 @@ {{ ftl('browsers-mobile-go-your-own-way') }}
'height': '263'
}
) }}
-
+
{{ ftl('browsers-mobile-infinitely-customizable-private') }}
{{ ftl('browsers-mobile-download') }}
- {{ ftl('ui-learn-more') }}
+ {{ ftl('ui-learn-more') }}
@@ -154,7 +154,7 @@
) %}
{{ ftl('browsers-mobile-see-how-firefox-for-desktop-compare-v2') }}
{{ ftl('browsers-mobile-see-how-firefox-for-desktop-strong-v2') }}
- {{ ftl('browsers-mobile-compare') }}
+ {{ ftl('browsers-mobile-compare') }}
{% endcall %}
diff --git a/bedrock/firefox/templates/firefox/challenge-the-default/landing-base.html b/bedrock/firefox/templates/firefox/challenge-the-default/landing-base.html
index 389399b0afc..5ac4c942479 100644
--- a/bedrock/firefox/templates/firefox/challenge-the-default/landing-base.html
+++ b/bedrock/firefox/templates/firefox/challenge-the-default/landing-base.html
@@ -36,8 +36,8 @@
{% endblock %}
{% macro cta_group(position) -%}
- {{ cta_default }}
- {{ cta_mobile }}
+ {{ cta_default }}
+ {{ cta_mobile }}
{{ download_firefox_thanks(button_class='not-firefox', alt_copy=cta_download, download_location=position, locale_in_transition=True) }}
{%- endmacro %}
@@ -390,7 +390,7 @@ {{ cred_community_title }}
diff --git a/bedrock/firefox/templates/firefox/features/includes/subnav.html b/bedrock/firefox/templates/firefox/features/includes/subnav.html
new file mode 100644
index 00000000000..143b0551a69
--- /dev/null
+++ b/bedrock/firefox/templates/firefox/features/includes/subnav.html
@@ -0,0 +1,31 @@
+{#
+ 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/.
+#}
+
+{# Subnav menu for /firefox/features/ #}
+{% if ftl_has_messages('sub-navigation-firefox-features', 'sub-navigation-sync', 'sub-navigation-ad-tracker-blocking', 'sub-navigation-private-browsing') %}
+
+
+
+{% endif %}
diff --git a/bedrock/firefox/templates/firefox/features/index.html b/bedrock/firefox/templates/firefox/features/index.html
index 3cf462d2488..c7362bf3487 100644
--- a/bedrock/firefox/templates/firefox/features/index.html
+++ b/bedrock/firefox/templates/firefox/features/index.html
@@ -15,7 +15,7 @@
desc
) -%}
-
+
{{ title }}
{{ desc }}
{{ ftl('ui-learn-more') }}
diff --git a/bedrock/firefox/templates/firefox/features/translate.html b/bedrock/firefox/templates/firefox/features/translate.html
index f58802d21e9..7dd7d8c964c 100644
--- a/bedrock/firefox/templates/firefox/features/translate.html
+++ b/bedrock/firefox/templates/firefox/features/translate.html
@@ -69,5 +69,5 @@ {{ ftl('features-translate-what-languages-are-currently') }}
{{ ftl('features-translate-and-more-languages-are-in') }}
{{ ftl('features-translate-firefox-speaks-your-language') }}
-{{ ftl('features-translate-the-firefox-translations-feature', download='href="%s" data-cta-type="link" data-cta-text="Get started in your preferred language"'|safe|format(url('firefox.new'))) }}
+{{ ftl('features-translate-the-firefox-translations-feature', download='href="%s" data-cta-text="Get started in your preferred language"'|safe|format(url('firefox.new'))) }}
{% endblock %}
diff --git a/bedrock/firefox/templates/firefox/includes/macros.html b/bedrock/firefox/templates/firefox/includes/macros.html
index 3a14d3d4549..a4eb92d03f8 100644
--- a/bedrock/firefox/templates/firefox/includes/macros.html
+++ b/bedrock/firefox/templates/firefox/includes/macros.html
@@ -82,7 +82,7 @@
- {{ ftl('download-button-using-debian', attrs='href="https://support.mozilla.org/kb/install-firefox-linux#w_install-firefox-deb-package-for-debian-based-distributions" rel="external noopener" data-cta-type="link"
+
{{ ftl('download-button-using-debian', attrs='href="https://support.mozilla.org/kb/install-firefox-linux#w_install-firefox-deb-package-for-debian-based-distributions" rel="external noopener"
data-cta-text="You can set up our APT repository instead"')}}
diff --git a/bedrock/firefox/templates/firefox/index.html b/bedrock/firefox/templates/firefox/index.html
index 1b568d005b1..a39faba53c5 100644
--- a/bedrock/firefox/templates/firefox/index.html
+++ b/bedrock/firefox/templates/firefox/index.html
@@ -75,13 +75,13 @@ {{ ftl('firefox-browsers-seriously-private-browsing') }}
{# Old IE users need to click a download button, the JS on the thank you page doesn't get them the right download if we send them there directly #}
{# Download link should be locale neutral see issue 7982 #}
@@ -89,7 +89,7 @@
- {{ ftl('ui-learn-more') }}
+ {{ ftl('ui-learn-more') }}
diff --git a/bedrock/firefox/templates/firefox/new/basic/thanks.html b/bedrock/firefox/templates/firefox/new/basic/thanks.html
index d479392fd80..38de65a8a2e 100644
--- a/bedrock/firefox/templates/firefox/new/basic/thanks.html
+++ b/bedrock/firefox/templates/firefox/new/basic/thanks.html
@@ -50,9 +50,9 @@ {{ ftl('firefox-new-download-interr
{% if ftl_has_messages('firefox-new-if-you-see-a-prompt', 'firefox-new-visit-support-for-more') %}
- {{ ftl('firefox-new-if-you-see-a-prompt', attrs='href="https://support.mozilla.org/kb/windows-10-warns-me-use-microsoft-verified-app%s" rel="external noopener" data-cta-type="link" data-cta-text="Get help with your installation"'|safe|format(referrals)) }}
+ {{ ftl('firefox-new-if-you-see-a-prompt', attrs='href="https://support.mozilla.org/kb/windows-10-warns-me-use-microsoft-verified-app%s" rel="external noopener" data-cta-text="Get help with your installation"'|safe|format(referrals)) }}
- {{ ftl('firefox-new-visit-support-for-more') }}
+ {{ ftl('firefox-new-visit-support-for-more') }}
{% endif %}
@@ -65,7 +65,7 @@ {{ ftl('firefox-new-download-interr
class="mzp-c-button mzp-t-product">{{ ftl('download-button-linux-64-v2') }}
{% set attrs = 'href="https://support.mozilla.org/kb/install-firefox-linux%s#w_install-firefox-deb-package-for-debian-based-distributions" rel="external noopener"
- data-cta-type="link" data-cta-text="You can set up our APT repository instead"'|safe|format(referrals) %}
+ data-cta-text="You can set up our APT repository instead"'|safe|format(referrals) %}
{{ ftl('download-button-using-debian', attrs=attrs) }}
{# Edge-case platform support messaging #}
diff --git a/bedrock/firefox/templates/firefox/new/desktop/download.html b/bedrock/firefox/templates/firefox/new/desktop/download.html
index e4775aa84f7..654b7d9a828 100644
--- a/bedrock/firefox/templates/firefox/new/desktop/download.html
+++ b/bedrock/firefox/templates/firefox/new/desktop/download.html
@@ -69,7 +69,7 @@
{% if outdated %}
- {% set update_url = 'href="%s" data-cta-type="link" data-cta-text="Update to the latest version"'|safe|format(('https://support.mozilla.org/kb/update-firefox-latest-release' + referrals)) %}
+ {% set update_url = 'href="%s" data-cta-text="Update to the latest version"'|safe|format(('https://support.mozilla.org/kb/update-firefox-latest-release' + referrals)) %}
{% if ftl_has_messages('firefox-desktop-out-of-date') %}
- See Release Notes
+ See Release Notes
{% endif %}
@@ -265,7 +265,7 @@ {{ ftl('firefox-desktop-download-we-block-the-ad') }}
{{ ftl('firefox-desktop-download-for-everyone') }}
{{ ftl('firefox-desktop-download-available-in-over') }}
-
{{ ftl('firefox-desktop-download-review-system-req') }}
+
{{ ftl('firefox-desktop-download-review-system-req') }}
@@ -493,7 +493,7 @@ {{ ftl('firefox-desktop-download-challenging-the-stat
}
) }}
{{ ftl('firefox-desktop-download-your-privacy-comes') }}
- {% set internet_attrs = 'href="%s" data-cta-type="link" data-cta-text="Personal Data Promise"'|safe|format(url('privacy')) %}
+ {% set internet_attrs = 'href="%s" data-cta-text="Personal Data Promise"'|safe|format(url('privacy')) %}
{{ ftl('firefox-desktop-download-as-the-internet', attrs=internet_attrs) }}
@@ -513,7 +513,7 @@ {{ ftl('firefox-desktop-download-works-with-google')
{{ download_picture('contain-mr1', '131', 138) }}
{{ ftl('firefox-desktop-download-facebook-container') }}
- {% set addon_attrs = 'href="https://addons.mozilla.org/firefox/addon/facebook-container/%s" rel="external noopener" data-cta-type="link" data-cta-text="Download this browser extension"'|safe|format(referrals) %}
+ {% set addon_attrs = 'href="https://addons.mozilla.org/firefox/addon/facebook-container/%s" rel="external noopener" data-cta-text="Download this browser extension"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-download-this-browser', attrs=addon_attrs) }}
@@ -528,14 +528,14 @@ {{ ftl('firefox-desktop-download-sync-your-devices')
{{ download_picture('screenshots-mr1', '131', 138) }}
{{ ftl('firefox-desktop-download-screenshots') }}
- {% set screenshot_attrs = 'href="https://support.mozilla.org/kb/firefox-screenshots%s" rel="external noopener" data-cta-type="link" data-cta-text="screenshot"'|safe|format(referrals) %}
+ {% set screenshot_attrs = 'href="https://support.mozilla.org/kb/firefox-screenshots%s" rel="external noopener" data-cta-text="screenshot"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-grab-a-high', attrs=screenshot_attrs) }}
{{ download_picture('etp', '134', 138) }}
{{ ftl('firefox-desktop-download-enhanced-tracking-protection') }}
- {% set automatically_attrs = 'href="https://support.mozilla.org/kb/enhanced-tracking-protection-firefox-desktop%s" rel="external noopener" data-cta-type="link" data-cta-text="block many trackers"'|safe|format(referrals) %}
+ {% set automatically_attrs = 'href="https://support.mozilla.org/kb/enhanced-tracking-protection-firefox-desktop%s" rel="external noopener" data-cta-text="block many trackers"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-firefox-automatically', attrs=automatically_attrs) }}
@@ -549,7 +549,7 @@ {{ ftl('firefox-desktop-download-picture-in-picture')
- {% set questions_attrs = 'href="https://support.mozilla.org/products/firefox%s&utm_content=mozilla-support" rel="external noopener" data-cta-type="link" data-cta-text="Mozilla support"'|safe|format(referrals) %}
+ {% set questions_attrs = 'href="https://support.mozilla.org/products/firefox%s&utm_content=mozilla-support" rel="external noopener" data-cta-text="Mozilla support"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-questions', attrs=questions_attrs) }}
diff --git a/bedrock/firefox/templates/firefox/new/desktop/thanks.html b/bedrock/firefox/templates/firefox/new/desktop/thanks.html
index 07dd45f7bb4..26dcd1c4eea 100644
--- a/bedrock/firefox/templates/firefox/new/desktop/thanks.html
+++ b/bedrock/firefox/templates/firefox/new/desktop/thanks.html
@@ -56,19 +56,19 @@ {{ ftl('firefox-desktop-download-interr
{% if ftl_has_messages('firefox-desktop-download-if-you-see-a-prompt', 'firefox-desktop-download-visit-support-for-more') %}
- {{ ftl('firefox-desktop-download-if-you-see-a-prompt', attrs='href="https://support.mozilla.org/kb/windows-10-warns-me-use-microsoft-verified-app%s" rel="external noopener" data-cta-type="link" data-cta-text="Get help with your installation"'|safe|format(referrals)) }}
+ {{ ftl('firefox-desktop-download-if-you-see-a-prompt', attrs='href="https://support.mozilla.org/kb/windows-10-warns-me-use-microsoft-verified-app%s" rel="external noopener" data-cta-text="Get help with your installation"'|safe|format(referrals)) }}
- {{ ftl('firefox-desktop-download-visit-support-for-more') }}
+ {{ ftl('firefox-desktop-download-visit-support-for-more') }}
{% endif %}
- {% set support_mac_attrs = 'href="https://support.mozilla.org/kb/how-download-and-install-firefox-mac%s" rel="external noopener" data-cta-type="link" data-cta-text="Get help with your installation"'|safe|format(referrals) %}
+ {% set support_mac_attrs = 'href="https://support.mozilla.org/kb/how-download-and-install-firefox-mac%s" rel="external noopener" data-cta-text="Get help with your installation"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-get-help', attrs=support_mac_attrs) }}
- {% set support_windows_attrs = 'href="https://support.mozilla.org/kb/how-download-and-install-firefox-windows%s" rel="external noopener" data-cta-type="link" data-cta-text="Get help with your installation"'|safe|format(referrals) %}
+ {% set support_windows_attrs = 'href="https://support.mozilla.org/kb/how-download-and-install-firefox-windows%s" rel="external noopener" data-cta-text="Get help with your installation"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-get-help', attrs=support_windows_attrs) }}
- {% set attrs = 'href="https://support.mozilla.org/kb/install-firefox-linux%s#w_install-firefox-deb-package-for-debian-based-distributions" rel="external noopener" data-cta-type="link" data-cta-text="You can set up our APT repository instead"'|safe|format(referrals) %}
+ {% set attrs = 'href="https://support.mozilla.org/kb/install-firefox-linux%s#w_install-firefox-deb-package-for-debian-based-distributions" rel="external noopener" data-cta-text="You can set up our APT repository instead"'|safe|format(referrals) %}
{{ ftl('download-button-using-debian', attrs=attrs) }}
- {% set support_else_attrs = 'href="https://support.mozilla.org/products/firefox/install-and-update-firefox%s" rel="external noopener" data-cta-type="link" data-cta-text="Get help with your installation"'|safe|format(referrals) %}
+ {% set support_else_attrs = 'href="https://support.mozilla.org/products/firefox/install-and-update-firefox%s" rel="external noopener" data-cta-text="Get help with your installation"'|safe|format(referrals) %}
{{ ftl('firefox-desktop-download-get-help', attrs=support_else_attrs) }}
diff --git a/bedrock/firefox/templates/firefox/nightly/firstrun.html b/bedrock/firefox/templates/firefox/nightly/firstrun.html
index 124e658d201..ff165ce34f2 100644
--- a/bedrock/firefox/templates/firefox/nightly/firstrun.html
+++ b/bedrock/firefox/templates/firefox/nightly/firstrun.html
@@ -61,7 +61,7 @@ {{ ftl('nightly-firstrun-choose-an-area') }}
base_el='li'
) %}
{{ ftl('nightly-firstrun-find-and-file-bugs') }}
- {{ ftl('nightly-firstrun-start-testing') }}
+ {{ ftl('nightly-firstrun-start-testing') }}
{% endcall %}
{% call picto(
@@ -78,7 +78,7 @@ {{ ftl('nightly-firstrun-choose-an-area') }}
base_el='li'
) %}
{{ ftl('nightly-firstrun-file-bugs-and-work') }}
- {{ ftl('nightly-firstrun-start-coding') }}
+ {{ ftl('nightly-firstrun-start-coding') }}
{% endcall %}
{% call picto(
@@ -95,7 +95,7 @@ {{ ftl('nightly-firstrun-choose-an-area') }}
base_el='li'
) %}
{{ ftl('nightly-firstrun-make-firefox-available') }}
- {{ ftl('nightly-firstrun-start-localizing') }}
+ {{ ftl('nightly-firstrun-start-localizing') }}
{% endcall %}
diff --git a/bedrock/firefox/templates/firefox/nightly/whatsnew.html b/bedrock/firefox/templates/firefox/nightly/whatsnew.html
index bf1bc0f290b..4feec29415f 100644
--- a/bedrock/firefox/templates/firefox/nightly/whatsnew.html
+++ b/bedrock/firefox/templates/firefox/nightly/whatsnew.html
@@ -52,7 +52,7 @@ ¿Quieres ayudar en España?
¿Quieres implicarte en uno de los proyectos open source más importantes en el mundo y ayudarnos a crear una web más abierta para todos?
- ¡Entra en el chat y hablemos!
+ ¡Entra en el chat y hablemos!
diff --git a/bedrock/firefox/templates/firefox/nothing-personal/index.html b/bedrock/firefox/templates/firefox/nothing-personal/index.html
index 8cda3ef6ae4..1a1d77610c6 100644
--- a/bedrock/firefox/templates/firefox/nothing-personal/index.html
+++ b/bedrock/firefox/templates/firefox/nothing-personal/index.html
@@ -35,9 +35,9 @@
Feeling browser-curious? We won’t tell. >>>>>
-
Learn more
+
Learn more
-
Set as default
+
Set as default
{{ download_firefox_thanks(alt_copy='Download Firefox', dom_id='protocol-nav-download-firefox', button_class='mzp-t-primary mzp-t-lg c-download-firefox-cta', download_location='primary') }}
diff --git a/bedrock/firefox/templates/firefox/pocket.html b/bedrock/firefox/templates/firefox/pocket.html
index 777b2ea8a91..7b992d32940 100644
--- a/bedrock/firefox/templates/firefox/pocket.html
+++ b/bedrock/firefox/templates/firefox/pocket.html
@@ -45,7 +45,7 @@
An Award-Winning App From Firefox
Over 10 million users rely on Pocket to discover and savor the best articles, news, stories and videos. And as a member of the Firefox family, privacy is paramount.
-
{{ pocket_fxa_button(entrypoint=_entrypoint, button_text='Try Pocket Now', optional_parameters={'s': _source}, optional_attributes={'data-cta-text': 'Try Pocket Now', 'data-cta-type': 'activate pocket', 'data-cta-position': 'primary'}) }}
+
{{ pocket_fxa_button(entrypoint=_entrypoint, button_text='Try Pocket Now', optional_parameters={'s': _source}, optional_attributes={'data-cta-text': 'Try Pocket Now', 'data-cta-type': 'pocket', 'data-cta-position': 'primary'}) }}
{% endcall %}
{% call split(
@@ -114,7 +114,7 @@
},
optional_attributes={
'data-cta-text': 'Try Pocket Now',
- 'data-cta-type': 'activate pocket',
+ 'data-cta-type': 'pocket',
'data-cta-position': 'secondary'
}
) }}
diff --git a/bedrock/firefox/templates/firefox/set-as-default/landing.html b/bedrock/firefox/templates/firefox/set-as-default/landing.html
index 675b8471929..f2db546c2cf 100644
--- a/bedrock/firefox/templates/firefox/set-as-default/landing.html
+++ b/bedrock/firefox/templates/firefox/set-as-default/landing.html
@@ -35,7 +35,7 @@
) %}
diff --git a/bedrock/firefox/templates/firefox/switch.html b/bedrock/firefox/templates/firefox/switch.html
index c474b8b8099..3ecdef21e84 100644
--- a/bedrock/firefox/templates/firefox/switch.html
+++ b/bedrock/firefox/templates/firefox/switch.html
@@ -57,13 +57,13 @@
{{ ftl('switch-spread-the-word') }}
{% set share_url = settings.CANONICAL_URL + canonical_path %}
diff --git a/bedrock/firefox/templates/firefox/welcome/page11.html b/bedrock/firefox/templates/firefox/welcome/page11.html
index 2e883cf0f4b..e2b4b1dab45 100644
--- a/bedrock/firefox/templates/firefox/welcome/page11.html
+++ b/bedrock/firefox/templates/firefox/welcome/page11.html
@@ -74,7 +74,7 @@ {{ ftl('welcome-page11-it-protects-your-credit') }
class_name='mzp-t-product mzp-t-xl',
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
'data-cta-position' : 'primary-cta',
}
) }}
diff --git a/bedrock/firefox/templates/firefox/welcome/page12.html b/bedrock/firefox/templates/firefox/welcome/page12.html
index c56052d97a2..bf6b70ab29a 100644
--- a/bedrock/firefox/templates/firefox/welcome/page12.html
+++ b/bedrock/firefox/templates/firefox/welcome/page12.html
@@ -65,7 +65,7 @@ Access global info & entertainment
class_name='mzp-t-product mzp-t-xl',
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
'data-cta-position' : 'primary-cta',
}
) }}
diff --git a/bedrock/firefox/templates/firefox/welcome/page13.html b/bedrock/firefox/templates/firefox/welcome/page13.html
index 3c281f895f2..e7dee6c760d 100644
--- a/bedrock/firefox/templates/firefox/welcome/page13.html
+++ b/bedrock/firefox/templates/firefox/welcome/page13.html
@@ -76,7 +76,7 @@ {{ ftl('welcome-page13-cover-your-work') }}
class_name='mzp-t-product mzp-t-xl',
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
'data-cta-position' : 'primary-cta',
}
) }}
diff --git a/bedrock/firefox/templates/firefox/welcome/page14.html b/bedrock/firefox/templates/firefox/welcome/page14.html
index 2ebbdbe9958..b40c0bb64d8 100644
--- a/bedrock/firefox/templates/firefox/welcome/page14.html
+++ b/bedrock/firefox/templates/firefox/welcome/page14.html
@@ -48,7 +48,7 @@ {% if show_coupon %}{{ ftl('welcome-page14-page-title'
page_anchor="#pricing",
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
'data-cta-position' : 'primary-cta',
}
)}}
diff --git a/bedrock/firefox/templates/firefox/welcome/page16.html b/bedrock/firefox/templates/firefox/welcome/page16.html
index 5a8a4ff99f9..050857e82eb 100644
--- a/bedrock/firefox/templates/firefox/welcome/page16.html
+++ b/bedrock/firefox/templates/firefox/welcome/page16.html
@@ -92,7 +92,7 @@ This Cybersecurity Month, take 20% off your first year<
},
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
'data-cta-position' : 'primary-cta',
}
)}}
diff --git a/bedrock/firefox/templates/firefox/welcome/page17/page17-a.html b/bedrock/firefox/templates/firefox/welcome/page17/page17-a.html
index 086238c63d2..f9fec2c133f 100644
--- a/bedrock/firefox/templates/firefox/welcome/page17/page17-a.html
+++ b/bedrock/firefox/templates/firefox/welcome/page17/page17-a.html
@@ -90,7 +90,7 @@ {{ main_title }}
class_name='mzp-t-product mzp-t-xl',
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
'data-cta-position' : 'primary-cta',
}
)}}
diff --git a/bedrock/firefox/templates/firefox/welcome/page17/page17-c.html b/bedrock/firefox/templates/firefox/welcome/page17/page17-c.html
index 2477a4359b1..9f1944a1d68 100644
--- a/bedrock/firefox/templates/firefox/welcome/page17/page17-c.html
+++ b/bedrock/firefox/templates/firefox/welcome/page17/page17-c.html
@@ -75,7 +75,7 @@
{{ main_title }}
-
{{ main_cta }}
+
{{ main_cta }}
{{ main_tagline }}
diff --git a/bedrock/firefox/templates/firefox/welcome/page18.html b/bedrock/firefox/templates/firefox/welcome/page18.html
index d9c4eac3a74..c95b06e7429 100644
--- a/bedrock/firefox/templates/firefox/welcome/page18.html
+++ b/bedrock/firefox/templates/firefox/welcome/page18.html
@@ -51,8 +51,8 @@
Shop summer sales with confidence
New in Firefox: Review Checker analyzes
product reviews and checks them for authenticity. Click on the price tag
icon when you shop on Amazon, Best Buy, or Walmart.
- Learn more
-
Try it now
+
Learn more
+
Try it now
{{ resp_img('img/firefox/welcome/page18/fakespot-rc.png',
srcset={
diff --git a/bedrock/firefox/templates/firefox/welcome/page2.html b/bedrock/firefox/templates/firefox/welcome/page2.html
index 56ae494b812..7bc975ff3e0 100644
--- a/bedrock/firefox/templates/firefox/welcome/page2.html
+++ b/bedrock/firefox/templates/firefox/welcome/page2.html
@@ -33,7 +33,7 @@
) %}
- {{ pocket_fxa_button(entrypoint=_entrypoint, button_text=ftl('welcome-page2-activate-pocket'), optional_parameters={'s': _source, 'utm_campaign': _utm_campaign}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'activate pocket', 'data-cta-position': 'primary'}) }}
+ {{ pocket_fxa_button(entrypoint=_entrypoint, button_text=ftl('welcome-page2-activate-pocket'), optional_parameters={'s': _source, 'utm_campaign': _utm_campaign}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'pocket', 'data-cta-position': 'primary'}) }}
{% endcall %}
{% endblock %}
@@ -78,7 +78,7 @@
{{ ftl('welcome-page2-discover-new-stories') }}<
{% block secondary_cta %}
- {{ pocket_fxa_button(entrypoint=_entrypoint, button_text=ftl('welcome-page2-activate-pocket'), optional_parameters={'s': _source, 'utm_campaign': _utm_campaign}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'activate pocket', 'data-cta-position': 'secondary'}) }}
+ {{ pocket_fxa_button(entrypoint=_entrypoint, button_text=ftl('welcome-page2-activate-pocket'), optional_parameters={'s': _source, 'utm_campaign': _utm_campaign}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'pocket', 'data-cta-position': 'secondary'}) }}
{% endblock %}
diff --git a/bedrock/firefox/templates/firefox/welcome/page4.html b/bedrock/firefox/templates/firefox/welcome/page4.html
index 6d61bb9957d..7cb619d2bc5 100644
--- a/bedrock/firefox/templates/firefox/welcome/page4.html
+++ b/bedrock/firefox/templates/firefox/welcome/page4.html
@@ -109,7 +109,7 @@
{{ ftl('welcome-page4-go-faster-do-more', fallba
{% block secondary_cta %}
diff --git a/bedrock/firefox/templates/firefox/welcome/page6.html b/bedrock/firefox/templates/firefox/welcome/page6.html
index a243aeac3a2..934d5d2850f 100644
--- a/bedrock/firefox/templates/firefox/welcome/page6.html
+++ b/bedrock/firefox/templates/firefox/welcome/page6.html
@@ -36,7 +36,7 @@
diff --git a/bedrock/firefox/templates/firefox/welcome/page8.html b/bedrock/firefox/templates/firefox/welcome/page8.html
index 4757f0a0f9c..d0928089135 100644
--- a/bedrock/firefox/templates/firefox/welcome/page8.html
+++ b/bedrock/firefox/templates/firefox/welcome/page8.html
@@ -30,7 +30,7 @@
heading_level=1
) %}
-
+
{{ ftl('welcome-page8-view-your-protection-report') }}
@@ -47,7 +47,7 @@
{{ ftl('welcome-page8-enhanced-tracking-protection') }}
{{ ftl('welcome-page8-automatically-block-sites') }}
-
+
{{ ftl('welcome-page8-see-whats-blocked') }}
@@ -63,12 +63,12 @@
{% if LANG == "en-US" %}
See if your personal info has been exposed in a data breach. We’ll automatically remove it from sites selling it and continuously monitor your identity for future leaks.
-
+
Check for breaches now
{% else %}
{{ ftl('welcome-page8-see-what-youve-been') }}
-
+
{{ ftl('welcome-page8-go-to-monitor') }}
{% endif %}
@@ -83,7 +83,7 @@
{{ ftl('welcome-page8-facebook-container') }}
diff --git a/bedrock/firefox/templates/firefox/welcome/page9.de.html b/bedrock/firefox/templates/firefox/welcome/page9.de.html
index 029abf0e8ba..1a5af416f6c 100644
--- a/bedrock/firefox/templates/firefox/welcome/page9.de.html
+++ b/bedrock/firefox/templates/firefox/welcome/page9.de.html
@@ -40,7 +40,7 @@
Schnell, zuverlässig und extra sicher mit 30 Tage Geld-zurück-Garantie.
- Hol dir Mozilla VPN
+ Hol dir Mozilla VPN
{% endcall %}
{% endblock %}
diff --git a/bedrock/firefox/templates/firefox/welcome/page9.fr.html b/bedrock/firefox/templates/firefox/welcome/page9.fr.html
index 5fbcd0d3611..91a282c8d53 100644
--- a/bedrock/firefox/templates/firefox/welcome/page9.fr.html
+++ b/bedrock/firefox/templates/firefox/welcome/page9.fr.html
@@ -40,7 +40,7 @@
Rapide, fiable et ultra sécurisé avec une garantie de remboursement de 30 jours.
- Installer Mozilla VPN
+ Installer Mozilla VPN
{% endcall %}
{% endblock %}
diff --git a/bedrock/firefox/templates/firefox/whatsnew/includes/mofo-donate-cta.html b/bedrock/firefox/templates/firefox/whatsnew/includes/mofo-donate-cta.html
index db4c7027cc3..ed4ebd2c88e 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/includes/mofo-donate-cta.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/includes/mofo-donate-cta.html
@@ -19,7 +19,7 @@
{% endif %}
-
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-CA.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-CA.html
index 931b44a3b29..ae298f457b3 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-CA.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-CA.html
@@ -39,7 +39,7 @@
Say ‘Bonjour ’ to Firefox translations
Click the Translate this page icon in Firefox’s address bar and enjoy content across the web.
-
Try it now
+
Try it now
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-GB.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-GB.html
index c1d0acccea1..586ec55a4a5 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-GB.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-GB.html
@@ -39,7 +39,7 @@ Say ‘Bonjour ’ to Firefox translations
Click the Translate this page in Firefox’s address bar and enjoy content from around the world.
-
Try it now
+
Try it now
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-US.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-US.html
index 3da347697c9..b1472c3c5b0 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-US.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-en-US.html
@@ -39,7 +39,7 @@ Say ‘Hola ’ to Firefox translations
Click the Translate this page icon in Firefox’s address bar and enjoy content across the web.
-
Try it now
+
Try it now
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-fr.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-fr.html
index aab4530a45d..15bac95fdf3 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-fr.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx126beta-fr.html
@@ -39,7 +39,7 @@ Dites ‘Hello ’ à Firefox translations Cliquez sur l'icône Traduire cette page dans la barre d'adresse de Firefox et profitez de plus de contenu sur le Web.
- Essayer maintenant
+
Essayer maintenant
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-eu.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-eu.html
index b4a6a617405..e74481675db 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-eu.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-eu.html
@@ -95,7 +95,7 @@ {{ main_title }}
{{ tagline_one }}
{{ tagline_two }}
- {{ cta }}
+ {{ cta }}
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-na.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-na.html
index 89635ad48de..a3409519aa3 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-na.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx127-na.html
@@ -40,7 +40,7 @@
Join our community
-
+
Connect with Mozilla
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-addons.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-addons.html
index 2f3f96fd61f..b9de693b8e2 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-addons.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-addons.html
@@ -92,7 +92,7 @@ {{ main_title }}
-
+
{{ page_cta }}
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-donate.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-donate.html
index 9065373801c..4a6885327af 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-donate.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-eu-donate.html
@@ -99,7 +99,7 @@ {{ main_title }}
-
+
{{ page_cta }}
❤️
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-na.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-na.html
index 2d3e6d1b73f..f032eb586fe 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-na.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx128-na.html
@@ -30,7 +30,7 @@
World-class multitasking
Picture-In-Picture lets you watch every cartwheel and handspring without putting your life on pause. Just click the Picture-in-Picture button to pop out any video.
-
+
Learn more
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx129-na.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx129-na.html
index d01dc1aab75..26cbb26fc10 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx129-na.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx129-na.html
@@ -31,13 +31,13 @@ Webpages, simplified.
-
+
Always use Firefox
-
+
Learn more
diff --git a/bedrock/foundation/templates/foundation/annualreport/2021/includes/modal-blog.html b/bedrock/foundation/templates/foundation/annualreport/2021/includes/modal-blog.html
index 3645eb44e5b..96264476b6b 100644
--- a/bedrock/foundation/templates/foundation/annualreport/2021/includes/modal-blog.html
+++ b/bedrock/foundation/templates/foundation/annualreport/2021/includes/modal-blog.html
@@ -28,7 +28,7 @@ The fight continues in Washington
platforms.
-
+
Learn more
@@ -47,7 +47,7 @@ Leading by Example
the targeting behind every paid ad we place.
-
+
Learn more
@@ -67,7 +67,7 @@ Crowdsourcing research into YouTube’s AI
accountable.
-
+
Learn more
@@ -87,7 +87,7 @@ Sounding the alarm on period trackers
news media.
-
+
Learn more
@@ -107,7 +107,7 @@ Total Cookie Protection
Firefox is our next step towards creating a better internet where privacy is the default.
-
+
Learn more
@@ -127,7 +127,7 @@ Battling misinformation in Kenya
to confront it.
-
+
Learn more
@@ -148,7 +148,7 @@ Making voice technology for everyone
voice clips and newly added languages from Central Kurdish to Norwegian Nyorsk.
-
+
Learn more
@@ -168,7 +168,7 @@ Keeping your online lives private
your browsing activity and your multiple online lives between tabs.
-
+
Learn more
@@ -188,7 +188,7 @@ Listening to the future of AI
make online life healthier for everyone.
-
+
Learn more
diff --git a/bedrock/foundation/templates/foundation/annualreport/2021/index.html b/bedrock/foundation/templates/foundation/annualreport/2021/index.html
index 6cafef4e65d..1d58b93c7ab 100644
--- a/bedrock/foundation/templates/foundation/annualreport/2021/index.html
+++ b/bedrock/foundation/templates/foundation/annualreport/2021/index.html
@@ -114,13 +114,13 @@ Mozilla’s next chapter: A word from
2021 Audited Financial Statement
-
+
Download PDF
2021 Form 990
-
+
Download PDF
@@ -146,7 +146,7 @@ Building a different kind of tech industry,
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -231,7 +231,7 @@
We’ve added nearly 200 of these people in the last two years. And we’re looking for more.
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -386,7 +386,7 @@
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -410,7 +410,7 @@ The fight continues in Washington
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-reversed mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -434,7 +434,7 @@ Leading by example
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -458,7 +458,7 @@ Crowdsourcing research into YouTube’s AI
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-reversed mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -482,7 +482,7 @@ Sounding the alarm on period trackers
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -506,7 +506,7 @@ Rolling out cookie protection for all
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-reversed mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -530,7 +530,7 @@ Battling misinformation in Kenya
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -554,7 +554,7 @@ Making voice technology for everyone
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-reversed mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
@@ -578,7 +578,7 @@ Keeping your online lives private
{% endcall %}
-
+
{% call split(
block_class='mzp-l-split-body-narrow mzp-t-split-nospace',
image=resp_img(
diff --git a/bedrock/mozorg/templates/mozorg/about/index.html b/bedrock/mozorg/templates/mozorg/about/index.html
index 98563fa05c4..62f623e22a3 100644
--- a/bedrock/mozorg/templates/mozorg/about/index.html
+++ b/bedrock/mozorg/templates/mozorg/about/index.html
@@ -30,8 +30,8 @@
- Get Product Updates
+ Get Product Updates
We will only send you Mozilla-related information.
diff --git a/bedrock/mozorg/templates/mozorg/home/home-new.html b/bedrock/mozorg/templates/mozorg/home/home-new.html
index 1d68e30eaff..1cf533941b5 100644
--- a/bedrock/mozorg/templates/mozorg/home/home-new.html
+++ b/bedrock/mozorg/templates/mozorg/home/home-new.html
@@ -133,7 +133,7 @@ {{ ftl('home-mozilla-makes-privacy') }}
),
body=True,
) %}
- {{ ftl('home-cta-get-firefox') }}
+
{{ ftl('home-cta-get-firefox') }}
{% endcall %}
@@ -151,7 +151,7 @@
{{ ftl('home-mozilla-makes-privacy') }}
),
body=True,
) %}
-
{{ ftl('home-cta-get-pocket') }}
+
{{ ftl('home-cta-get-pocket') }}
{% endcall %}
@@ -169,7 +169,7 @@
{{ ftl('home-mozilla-makes-privacy') }}
),
body=True,
) %}
-
{{ ftl('home-cta-get-fakespot') }}
+
{{ ftl('home-cta-get-fakespot') }}
{% endcall %}
@@ -187,7 +187,7 @@
{{ ftl('home-mozilla-makes-privacy') }}
),
body=True,
) %}
-
{{ ftl('home-cta-get-relay') }}
+
{{ ftl('home-cta-get-relay') }}
{% endcall %}
@@ -205,7 +205,7 @@
{{ ftl('home-mozilla-makes-privacy') }}
),
body=True,
) %}
-
{{ ftl('home-cta-get-vpn') }}
+
{{ ftl('home-cta-get-vpn') }}
{% endcall %}
@@ -223,7 +223,7 @@
{{ ftl('home-mozilla-makes-privacy') }}
),
body=True,
) %}
-
{{ ftl('home-cta-get-monitor')}}
+
{{ ftl('home-cta-get-monitor')}}
{% endcall %}
@@ -264,8 +264,8 @@
{{ ftl('home-join-us-in-shaping') }}
{% endcall %}
{% endif %}
- {% set moz_ventures = 'href="%s" data-cta-type="link" data-cta-text="Mozilla Ventures"'|safe|format(('https://mozilla.vc/'+utm_params)) %}
- {% set moz_ai = 'href="%s" data-cta-type="link" data-cta-text="Mozilla AI"'|safe|format(('https://mozilla.ai/'+utm_params)) %}
+ {% set moz_ventures = 'href="%s" data-cta-text="Mozilla Ventures"'|safe|format(('https://mozilla.vc/'+utm_params)) %}
+ {% set moz_ai = 'href="%s" data-cta-text="Mozilla AI"'|safe|format(('https://mozilla.ai/'+utm_params)) %}
{% call split(
diff --git a/bedrock/mozorg/templates/mozorg/home/includes/ctd-promo-de.html b/bedrock/mozorg/templates/mozorg/home/includes/ctd-promo-de.html
index 4f73dc161f4..a37f157e3a3 100644
--- a/bedrock/mozorg/templates/mozorg/home/includes/ctd-promo-de.html
+++ b/bedrock/mozorg/templates/mozorg/home/includes/ctd-promo-de.html
@@ -35,7 +35,7 @@
Dein Browser ist soooooo Standard
(Wir haben auch ein paar wirklich gute Argumente.)
-
Ich schau mir Firefox mal an
+
Ich schau mir Firefox mal an
{% endcall %}
@@ -69,7 +69,7 @@ Und was machen wir jetzt?
Wir könnten dich nach deinem Lieblingsdino fragen, ein kleines Gedicht für dich schreiben, oder dir unseren Mobile Browser zeigen.
- Zeigt mir den Mobile Browser
+ Zeigt mir den Mobile Browser
{% endcall %}
diff --git a/bedrock/mozorg/templates/mozorg/home/includes/featured-vpn.html b/bedrock/mozorg/templates/mozorg/home/includes/featured-vpn.html
index d9e2d2e0494..ebd9651a84d 100644
--- a/bedrock/mozorg/templates/mozorg/home/includes/featured-vpn.html
+++ b/bedrock/mozorg/templates/mozorg/home/includes/featured-vpn.html
@@ -11,6 +11,6 @@
{{ ftl('home-featured-product') }}
{{ ftl('home-feature-blur-your-location') }}
- {{ ftl('home-cta-get-vpn') }}
+ {{ ftl('home-cta-get-vpn') }}
diff --git a/bedrock/mozorg/templates/mozorg/home/includes/mofo-donate-promo.html b/bedrock/mozorg/templates/mozorg/home/includes/mofo-donate-promo.html
index 1c723f3a746..840812602e1 100644
--- a/bedrock/mozorg/templates/mozorg/home/includes/mofo-donate-promo.html
+++ b/bedrock/mozorg/templates/mozorg/home/includes/mofo-donate-promo.html
@@ -11,6 +11,6 @@
{{ ftl('home-mofo-build-our-movement') }}
{{ ftl('home-mofo-donate-to-mofo-today') }}
- {{ ftl('home-mofo-donate') }}
+ {{ ftl('home-mofo-donate') }}
diff --git a/bedrock/mozorg/templates/mozorg/includes/mozilla-account-promo.html b/bedrock/mozorg/templates/mozorg/includes/mozilla-account-promo.html
index 764bd2de417..d33d93d1f4a 100644
--- a/bedrock/mozorg/templates/mozorg/includes/mozilla-account-promo.html
+++ b/bedrock/mozorg/templates/mozorg/includes/mozilla-account-promo.html
@@ -47,7 +47,7 @@ {{ ftl('moz-account-promo-title', class=gradient_class) }}
}}
{% set fxa_link = fxa_link_fragment(entrypoint=_entrypoint, action='signin') %}
- {% set sign_in_url = fxa_link ~ ' class="js-fxa-cta-link js-fxa-product-button" data-cta-type="link" data-cta-text="Accounts Learn More"'|safe %}
+ {% set sign_in_url = fxa_link ~ ' class="js-fxa-cta-link js-fxa-product-button" data-cta-text="Accounts Learn More"'|safe %}
{% set learn_more_url = 'href="'|safe ~ url('mozorg.account') ~ '"'|safe %}
{{ ftl('moz-account-already-have-v2', fallback='moz-account-already-have', sign_in_url=sign_in_url, learn_more_url=learn_more_url) }}
diff --git a/bedrock/mozorg/tests/test_helper_misc.py b/bedrock/mozorg/tests/test_helper_misc.py
index e0029f674af..f7f438057ed 100644
--- a/bedrock/mozorg/tests/test_helper_misc.py
+++ b/bedrock/mozorg/tests/test_helper_misc.py
@@ -1012,13 +1012,13 @@ def test_pocket_fxa_button(self):
is_button_class=True,
include_metrics=True,
optional_parameters={"s": "ffpocket", "foo": "bar"},
- optional_attributes={"data-cta-text": "Try Pocket Now", "data-cta-type": "activate pocket", "data-cta-position": "primary"},
+ optional_attributes={"data-cta-text": "Try Pocket Now", "data-cta-type": "pocket", "data-cta-position": "primary"},
)
expected = (
' Try Pocket Now '
+ 'data-cta-text="Try Pocket Now" data-cta-type="pocket" data-cta-position="primary">Try Pocket Now'
)
self.assertEqual(markup, expected)
diff --git a/bedrock/newsletter/templates/newsletter/includes/form.html b/bedrock/newsletter/templates/newsletter/includes/form.html
index beb61d1f378..2d62d709cc1 100644
--- a/bedrock/newsletter/templates/newsletter/includes/form.html
+++ b/bedrock/newsletter/templates/newsletter/includes/form.html
@@ -99,7 +99,7 @@ {{ subtitle }}
-
+
{% if submit_text %}
{{ submit_text }}
{% else %}
diff --git a/bedrock/newsletter/templates/newsletter/opt-out-confirmation.html b/bedrock/newsletter/templates/newsletter/opt-out-confirmation.html
index 841924d8b80..e2a3c7750aa 100644
--- a/bedrock/newsletter/templates/newsletter/opt-out-confirmation.html
+++ b/bedrock/newsletter/templates/newsletter/opt-out-confirmation.html
@@ -63,10 +63,10 @@ {{ ftl('opt-out-confirmation-prefer-to-get') }}
{#-- /.content --#}
diff --git a/bedrock/newsletter/tests/test_views.py b/bedrock/newsletter/tests/test_views.py
index 0a0e8dbbcc2..52c5a551672 100644
--- a/bedrock/newsletter/tests/test_views.py
+++ b/bedrock/newsletter/tests/test_views.py
@@ -182,7 +182,7 @@ def test_shows_form_multi(self):
doc = pq(resp.content)
self.assertTrue(doc("#newsletter-form"))
self.assertTrue(doc('input[value="mozilla-foundation"]'))
- self.assertEqual(doc("#newsletter-submit")[0].attrib["data-cta-type"], "Newsletter-mozilla-firefox-multi")
+ self.assertEqual(doc("#newsletter-submit")[0].attrib["data-cta-text"], "Newsletter Sign Up")
def test_shows_form_single(self):
"""The MPL page only subscribes to 'mozilla-foundation', so not a multi-newsletter form."""
@@ -190,7 +190,7 @@ def test_shows_form_single(self):
doc = pq(resp.content)
self.assertTrue(doc("#newsletter-form"))
self.assertTrue(doc('input[value="mozilla-foundation"]'))
- self.assertEqual(doc("#newsletter-submit")[0].attrib["data-cta-type"], "Newsletter-mozilla-foundation")
+ self.assertEqual(doc("#newsletter-submit")[0].attrib["data-cta-text"], "Newsletter Sign Up")
@patch("bedrock.newsletter.views.basket")
def test_returns_success(self, basket_mock):
diff --git a/bedrock/pocket/templates/pocket/firefox/new-tab-learn-more.html b/bedrock/pocket/templates/pocket/firefox/new-tab-learn-more.html
index 9d2d9de4860..c8bac3c98af 100644
--- a/bedrock/pocket/templates/pocket/firefox/new-tab-learn-more.html
+++ b/bedrock/pocket/templates/pocket/firefox/new-tab-learn-more.html
@@ -36,7 +36,7 @@
{{ ftl('pocket-new-tab-pocket-for-firefox') }}
{{ ftl('pocket-new-tab-included-inside') }}
- {{ pocket_fxa_button(entrypoint='pocket', class_name='new-tab-pocket-cta', button_text=' '|safe + ftl('pocket-new-tab-activate-pocket'), optional_parameters={'s': 'fflearnmore', 'utm_campaign': 'landing-page', 'utm_content': 'page-button'}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'activate pocket', 'data-cta-position': 'primary'}) }}
+ {{ pocket_fxa_button(entrypoint='pocket', class_name='new-tab-pocket-cta', button_text=' '|safe + ftl('pocket-new-tab-activate-pocket'), optional_parameters={'s': 'fflearnmore', 'utm_campaign': 'landing-page', 'utm_content': 'page-button'}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'pocket', 'data-cta-position': 'primary'}) }}
{{ ftl('pocket-new-tab-more-ways-to') }}
{% endcall %}
diff --git a/bedrock/pocket/templates/pocket/home.html b/bedrock/pocket/templates/pocket/home.html
index 843ef749a91..6779b253306 100644
--- a/bedrock/pocket/templates/pocket/home.html
+++ b/bedrock/pocket/templates/pocket/home.html
@@ -47,7 +47,7 @@
{% endif %}
diff --git a/bedrock/pocket/templates/pocket/pocket-and-firefox.html b/bedrock/pocket/templates/pocket/pocket-and-firefox.html
index c55d9253ff9..0eefcfa8289 100644
--- a/bedrock/pocket/templates/pocket/pocket-and-firefox.html
+++ b/bedrock/pocket/templates/pocket/pocket-and-firefox.html
@@ -31,7 +31,7 @@
{{ ftl('pocket-features-build-your-personal') }}
{{ ftl('pocket-features-included-inside') }}
- {{ pocket_fxa_button(entrypoint='pocket', class_name='new-tab-pocket-cta', button_text='
'|safe + ftl('pocket-features-activate-pocket'), optional_parameters={'s': 'fflearnmore', 'utm_campaign': 'landing-page', 'utm_content': 'page-button'}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'activate pocket', 'data-cta-position': 'primary'}) }}
+ {{ pocket_fxa_button(entrypoint='pocket', class_name='new-tab-pocket-cta', button_text='
'|safe + ftl('pocket-features-activate-pocket'), optional_parameters={'s': 'fflearnmore', 'utm_campaign': 'landing-page', 'utm_content': 'page-button'}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'pocket', 'data-cta-position': 'primary'}) }}
{{ ftl('pocket-features-more-ways-to') }}
{% endcall %}
@@ -100,7 +100,7 @@
- {{ pocket_fxa_button(entrypoint='pocket', class_name='new-tab-pocket-cta', button_text='
'|safe + ftl('pocket-features-activate-pocket'), optional_parameters={'s': 'fflearnmore', 'utm_campaign': 'landing-page', 'utm_content': 'page-button'}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'activate pocket', 'data-cta-position': 'primary'}) }}
+ {{ pocket_fxa_button(entrypoint='pocket', class_name='new-tab-pocket-cta', button_text='
'|safe + ftl('pocket-features-activate-pocket'), optional_parameters={'s': 'fflearnmore', 'utm_campaign': 'landing-page', 'utm_content': 'page-button'}, optional_attributes={'data-cta-text': 'Activate Pocket', 'data-cta-type': 'pocket', 'data-cta-position': 'primary'}) }}
{{ ftl('pocket-features-more-ways-to') }}
diff --git a/bedrock/products/templates/products/landing.html b/bedrock/products/templates/products/landing.html
index 7ce4efdb454..f160bb228c8 100644
--- a/bedrock/products/templates/products/landing.html
+++ b/bedrock/products/templates/products/landing.html
@@ -38,7 +38,7 @@
{% set _entrypoint = 'mozilla.org-products' %}
{% set icon_external = '
' %}
-{% set icon_download ='
' %}
+{% set icon_download ='
' %}
{% block content %}
@@ -63,7 +63,7 @@ {{ ftl('firefox-products-products') }}
}
),
) %}
- {{ ftl('firefox-products-firefox') }}
+ {{ ftl('firefox-products-firefox') }}
{{ ftl('firefox-products-get-the-browser-that-blocks') }}
{% set alt_copy = ftl('download-button-download-firefox') + " " + icon_download|safe %}
{{ download_firefox_thanks(alt_copy=alt_copy, button_class='mzp-t-secondary mzp-t-lg') }}
@@ -84,7 +84,7 @@ {{ ftl('firefox-products-firefox-focus') }}
+ {{ ftl('firefox-products-firefox-focus') }}
{{ ftl('firefox-products-your-dedicated-privacy') }}
{{ google_play_button(href=fc_android_url, id='playStoreLink-focus') }}
@@ -105,9 +105,9 @@
{{ ftl('firefox-products-relay') }}
+ {{ ftl('firefox-products-relay') }}
{{ ftl('firefox-products-protect-your-real') }}
- {{ ftl('firefox-products-get-relay') }} {{ icon_external|safe }}
+
{{ ftl('firefox-products-get-relay') }} {{ icon_external|safe }}
{% endcall %}
@@ -123,9 +123,9 @@
{{ ftl('firefox-products-mozilla-monitor') }}
+ {{ ftl('firefox-products-mozilla-monitor') }}
{% if country_code == 'US' %}See if you’ve been part of a data breach. If so, let us automatically get your private info back for you and continually monitor your identity for new leaks.{% else %}{{ ftl('firefox-products-see-if-your-personal-information') }}{% endif %}
- {% if LANG == 'en-US' %}Check for breaches now{% else %}{{ ftl('firefox-products-check-for-breaches') }}{% endif %} {{ icon_external|safe }}
+ {% if LANG == 'en-US' %}Check for breaches now{% else %}{{ ftl('firefox-products-check-for-breaches') }}{% endif %} {{ icon_external|safe }}
{% endcall %}
@@ -141,9 +141,9 @@ {{ ftl('firefox-products-mozilla-vpn') }}
+ {{ ftl('firefox-products-mozilla-vpn') }}
{{ ftl('firefox-products-surf-stream-and-get-work-done') }}
- {{ ftl('firefox-products-get-mozilla-vpn') }}
+ {{ ftl('firefox-products-get-mozilla-vpn') }}
{% endcall %}
@@ -159,10 +159,10 @@ {{ ftl('firefox-products-mdn-plus') }}
+ {{ ftl('firefox-products-mdn-plus') }}
{{ ftl('firefox-products-resources-for-developers') }}
- {{ ftl('firefox-products-support-mdn') }} {{ icon_external|safe }}
+ {{ ftl('firefox-products-support-mdn') }} {{ icon_external|safe }}
{% endcall %}
@@ -179,9 +179,9 @@ {{ ftl('firefox-products-thunderbird') }}
+ {{ ftl('firefox-products-thunderbird') }}
{{ ftl('firefox-products-access-all') }}
- {{ ftl('firefox-products-download-thunderbird') }} {{ icon_download|safe }}
+ {{ ftl('firefox-products-download-thunderbird') }} {{ icon_download|safe }}
{% endcall %}
@@ -197,9 +197,9 @@ {{ ftl('firefox-products-fakespot') }}
+ {{ ftl('firefox-products-fakespot') }}
{{ ftl('firefox-products-fakespot-has-your') }}
- {{ ftl('firefox-products-analyze') }} {{ icon_external|safe }}
+ {{ ftl('firefox-products-analyze') }} {{ icon_external|safe }}
{% endcall %}
@@ -215,9 +215,9 @@ {{ ftl('firefox-products-pocket') }}
+ {{ ftl('firefox-products-pocket') }}
{{ ftl('firefox-products-discover-the-best-content-v2') }}
- {{ ftl('firefox-products-get-pocket') }} {{ icon_external|safe }}
+ {{ ftl('firefox-products-get-pocket') }} {{ icon_external|safe }}
{{ google_play_button(href=pocket_android_url, id='playStoreLink-pocket') }}
{{ apple_app_store_button(href=pocket_ios_url, id='appStoreLink-pocket') }}
{% endcall %}
diff --git a/bedrock/products/templates/products/mozsocial/invite.html b/bedrock/products/templates/products/mozsocial/invite.html
new file mode 100644
index 00000000000..c42ccd159c9
--- /dev/null
+++ b/bedrock/products/templates/products/mozsocial/invite.html
@@ -0,0 +1,106 @@
+{#
+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 "base-protocol.html" %}
+
+{% block page_css %}
+ {{ css_bundle('protocol-newsletter') }}
+ {{ css_bundle('mozsocial-invite') }}
+{% endblock %}
+
+{% block page_title %}{{ ftl('mozsocial-invite-join-the-waitlist') }}{% endblock %}
+
+{% block content %}
+
+
+
+ {{ resp_img(
+ url='img/products/mozsocial/waitlist-tree.png',
+ srcset={
+ 'img/products/mozsocial/waitlist-tree-high-res.png': '2x'
+ },
+ optional_attributes={
+ "height": "424",
+ "width": "424"
+ }
+ )}}
+
+
+
+
+
+
{{ ftl('mozsocial-invite-thanks-youre-on-the-list') }}
+
{{ ftl('newsletter-form-if-you-havent-previously') }}
+
{{ ftl('mozsocial-invite-mozillasocial-is-currently') }}
+
+
+
+{% endblock %}
+
+{% block js %}
+ {{ js_bundle('mozsocial-waitlist') }}
+{% endblock %}
diff --git a/bedrock/products/templates/products/vpn/download.html b/bedrock/products/templates/products/vpn/download.html
index 629f2268fa9..2ab74efb8e5 100644
--- a/bedrock/products/templates/products/vpn/download.html
+++ b/bedrock/products/templates/products/vpn/download.html
@@ -79,7 +79,7 @@ {{ self.page_title_full() }}
{{ ftl('vpn-download-for-windows-long') }}
{{ ftl('vpn-download-based-on-your') }}
{{ ftl('vpn-download-for-windows-requirements') }}
-
+
{{ ftl('vpn-download-get-mozilla-vpn', fallback='vpn-shared-subscribe-link') }}
@@ -93,7 +93,7 @@
{{ ftl('vpn-download-for-windows-long') }}
{{ ftl('vpn-download-for-mac-long', fallback='vpn-download-for-mac') }}
{{ ftl('vpn-download-based-on-your') }}
{{ ftl('vpn-download-version-requirements', version='11.0') }}
-
+
{{ ftl('vpn-download-get-mozilla-vpn', fallback='vpn-shared-subscribe-link') }}
@@ -107,7 +107,7 @@ {{ ftl('vpn-download-for-mac-long', fallback='vpn-download-for-mac') }}
{{ ftl('vpn-download-for-linux-long', fallback='vpn-download-for-linux') }}
{{ ftl('vpn-download-based-on-your') }}
{{ ftl('vpn-download-for-linux-requirements', version='20.04') }}
-
+
{{ ftl('vpn-download-get-mozilla-vpn', fallback='vpn-shared-subscribe-link') }}
@@ -121,7 +121,7 @@ {{ ftl('vpn-download-for-linux-long', fallback='vpn-download-for-linux') }}<
{{ ftl('vpn-download-for-ios-long-v2', fallback='vpn-download-for-ios') }}
{{ ftl('vpn-download-based-on-your') }}
{{ ftl('vpn-download-version-requirements', version='14.0') }}
-
+
@@ -135,7 +135,7 @@ {{ ftl('vpn-download-for-ios-long-v2', fallback='vpn-download-for-ios') }}
{{ ftl('vpn-download-for-android-long', fallback='vpn-download-for-android') }}
{{ ftl('vpn-download-based-on-your') }}
{{ ftl('vpn-download-version-requirements', version='8.0') }}
-
+
@@ -154,7 +154,7 @@ {{ ftl('vpn-download-also-available') }}
{{ ftl('vpn-download-for-windows-v2') }}
{{ ftl('vpn-download-for-windows-requirements') }}
-
+
{{ ftl('vpn-download-for-windows-long') }}
@@ -167,7 +167,7 @@ {{ ftl('vpn-download-for-windows-v2') }}
{{ ftl('vpn-download-for-mac') }}
{{ ftl('vpn-download-version-requirements', version='11.0') }}
-
+
{{ ftl('vpn-download-for-mac-long') }}
@@ -180,7 +180,7 @@ {{ ftl('vpn-download-for-mac') }}
{{ ftl('vpn-download-for-linux') }}
{{ ftl('vpn-download-for-linux-requirements', version='20.04') }}
-
+
{{ ftl('vpn-download-for-linux-long') }}
@@ -193,7 +193,7 @@ {{ ftl('vpn-download-for-linux') }}
{{ ftl('vpn-download-for-ios') }}
{{ ftl('vpn-download-version-requirements', version='14.0') }}
-
+
{{ ftl('vpn-download-for-ios-long-v2') }}
@@ -206,7 +206,7 @@ {{ ftl('vpn-download-for-ios') }}
{{ ftl('vpn-download-for-android') }}
{{ ftl('vpn-download-version-requirements', version='8.0') }}
-
+
{{ ftl('vpn-download-for-android-long') }}
@@ -216,7 +216,7 @@ {{ ftl('vpn-download-for-android') }}
{% if ftl_has_messages('vpn-download-previous-versions') %}
{% endif %}
diff --git a/bedrock/products/templates/products/vpn/features.html b/bedrock/products/templates/products/vpn/features.html
index bf839f04df0..994e44a47b2 100644
--- a/bedrock/products/templates/products/vpn/features.html
+++ b/bedrock/products/templates/products/vpn/features.html
@@ -79,7 +79,7 @@
- {% set wireguard_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://mullvad.net/help/why-wireguard/')) %}
+ {% set wireguard_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://mullvad.net/help/why-wireguard/')) %}
@@ -172,7 +172,7 @@
{{ ftl('vpn-features-secure') }}
base_el='li'
) %}
- {% set feature_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://support.mozilla.org/kb/multi-hop-encrypt-your-data-twice-enhanced-security' + _params)) %}
+ {% set feature_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://support.mozilla.org/kb/multi-hop-encrypt-your-data-twice-enhanced-security' + _params)) %}
{{ ftl('vpn-features-multi-hop-feature', feature=feature_url) }}
{% endcall %}
@@ -192,7 +192,7 @@
{{ ftl('vpn-features-secure') }}
base_el='li'
) %}
- {% set dns_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://support.mozilla.org/kb/how-do-i-change-my-dns-settings' + _params)) %}
+ {% set dns_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://support.mozilla.org/kb/how-do-i-change-my-dns-settings' + _params)) %}
{{ ftl('vpn-features-keep-traffic-protected', dns=dns_url) }}
@@ -288,7 +288,7 @@
{{ ftl('vpn-features-personalize-which-apps') }}
media_after=True
) %}
- {% set containers_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://support.mozilla.org/kb/use-multi-account-containers-mozilla-vpn' + _params)) %}
+ {% set containers_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://support.mozilla.org/kb/use-multi-account-containers-mozilla-vpn' + _params)) %}
{{ ftl('vpn-features-set-different-locations') }}
@@ -337,7 +337,7 @@
{{ ftl('vpn-features-trustworthy') }}
base_el='li'
) %}
- {% set privacy_notice = 'href="%s" data-cta-type="link"'|safe|format(url('privacy.notices.subscription-services')) %}
+ {% set privacy_notice = 'href="%s" '|safe|format(url('privacy.notices.subscription-services')) %}
{{ ftl('vpn-features-simply-put-we-dont', privacy=privacy_notice) }}
@@ -358,7 +358,7 @@
{{ ftl('vpn-features-trustworthy') }}
base_el='li'
) %}
- {% set github_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://github.com/mozilla-mobile/mozilla-vpn-client')) %}
+ {% set github_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://github.com/mozilla-mobile/mozilla-vpn-client')) %}
{{ ftl('vpn-features-made-with-open-source-code', github=github_url) }}
@@ -379,7 +379,7 @@
{{ ftl('vpn-features-trustworthy') }}
base_el='li'
) %}
- {% set report_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://blog.mozilla.org/mozilla/news/mozilla-vpn-completes-independent-security-audit-by-cure53' + _params)) %}
+ {% set report_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://blog.mozilla.org/mozilla/news/mozilla-vpn-completes-independent-security-audit-by-cure53' + _params)) %}
{{ ftl('vpn-features-weve-been-audited', report=report_url) }}
@@ -400,7 +400,7 @@
{{ ftl('vpn-features-trustworthy') }}
base_el='li'
) %}
- {% set mofo_url = 'href="%s" data-cta-type="link" rel="external noopener" target="_blank"'|safe|format(('https://foundation.mozilla.org/' + _params)) %}
+ {% set mofo_url = 'href="%s" rel="external noopener" target="_blank"'|safe|format(('https://foundation.mozilla.org/' + _params)) %}
{{ ftl('vpn-features-were-backed-by-mofo', mofo=mofo_url) }}
diff --git a/bedrock/products/templates/products/vpn/includes/macros.html b/bedrock/products/templates/products/vpn/includes/macros.html
index 3a5bc3799ab..2ad600563da 100644
--- a/bedrock/products/templates/products/vpn/includes/macros.html
+++ b/bedrock/products/templates/products/vpn/includes/macros.html
@@ -75,14 +75,14 @@
{{ subheading }}
{% macro vpn_conditional_cta(position) -%}
{% if vpn_available %}
-
+
{{ ftl('vpn-shared-subscribe-link') }}
{{ ftl('vpn-shared-money-back-guarantee') }}
{% else %}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
@@ -97,14 +97,14 @@
{{ subheading }}
{% if vpn_available %}
{% set pricing_url = '#pricing' if request.path.endswith('/products/vpn/') else url('products.vpn.landing') + '#pricing' %}
-
+
{{ ftl('vpn-shared-subscribe-link') }}
{{ ftl('vpn-shared-features-guarantee') }}
{% else %}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
@@ -115,11 +115,11 @@
{{ subheading }}
{% macro vpn_nav_cta(link_text, alt_link_text, download_link_text, utm_source, utm_campaign) -%}
{% if vpn_available %}
-
+
{{ ftl('vpn-shared-subscribe-link') }}
{% else %}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
{% endif %}
@@ -130,11 +130,11 @@
{{ subheading }}
{% if vpn_available %}
{% set pricing_url = '#pricing' if request.path.endswith('/products/vpn/') else url('products.vpn.landing') + '#pricing' %}
-
+
{{ ftl('vpn-shared-subscribe-link') }}
{% else %}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
{% endif %}
@@ -190,11 +190,11 @@
{{ heading }}
class_name=class_name,
optional_attributes= {
'data-cta-text' : 'Get Mozilla VPN',
- 'data-cta-type' : 'button',
+ 'data-cta-type' : 'vpn',
}
) }}
{% else %}
-
+
{{ alt_link_text }}
{% endif %}
diff --git a/bedrock/products/templates/products/vpn/invite.html b/bedrock/products/templates/products/vpn/invite.html
index f5a2e36f2b7..93337335bdc 100644
--- a/bedrock/products/templates/products/vpn/invite.html
+++ b/bedrock/products/templates/products/vpn/invite.html
@@ -69,7 +69,7 @@
- {{ ftl('vpn-shared-waitlist-link') }}
+ {{ ftl('vpn-shared-waitlist-link') }}
diff --git a/bedrock/products/templates/products/vpn/landing-refresh.html b/bedrock/products/templates/products/vpn/landing-refresh.html
index 30fd13666b9..d49a0043712 100644
--- a/bedrock/products/templates/products/vpn/landing-refresh.html
+++ b/bedrock/products/templates/products/vpn/landing-refresh.html
@@ -74,7 +74,7 @@
{{ ftl('vpn-landing-powerful-privacy-for-peace') }}
{% if vpn_available %}
-
+
{{ vpn_saving(country_code=country_code, lang=LANG, bundle_relay=False, ftl_string='vpn-shared-save-percent-on') }}
@@ -83,7 +83,7 @@ {{ ftl('vpn-landing-powerful-privacy-for-peace') }}
{% else %}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
{% endif %}
@@ -140,7 +140,7 @@
{{ ftl('vpn-landing-one-subscription-for-all-your')
{{ ftl('vpn-shared-mozilla-vpn-is-not-yet-available') }}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
diff --git a/bedrock/products/templates/products/vpn/landing.html b/bedrock/products/templates/products/vpn/landing.html
new file mode 100644
index 00000000000..eb2f6a53aa5
--- /dev/null
+++ b/bedrock/products/templates/products/vpn/landing.html
@@ -0,0 +1,360 @@
+{#
+ 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 "products/vpn/includes/macros.html" import vpn_hero, vpn_conditional_cta, vpn_nav_cta, vpn_content_block, vpn_content_media with context %}
+
+{% extends "products/vpn/base.html" %}
+
+{# Issue 13019: Avoid duplicate content for English pages. #}
+{%- block page_title_full -%}
+ {%- if LANG == 'en-US' -%}
+ Get Mozilla VPN — Mozilla (US)
+ {%- elif LANG == 'en-GB' -%}
+ Get Mozilla VPN — Mozilla (UK)
+ {%- else -%}
+ {{ ftl('vpn-landing-page-title') }}
+ {%- endif -%}
+{%- endblock -%}
+
+{% block page_title_suffix %}{% endblock %}
+
+{% block page_desc %}{{ ftl('vpn-landing-page-desc', countries=available_countries) }}{% endblock %}
+
+{% set show_relay_promo_block = relay_bundle_available_in_country and ftl_has_messages('vpn-shared-increase-your-privacy', 'vpn-add-relay-to-protect', 'vpn-shared-why-bundle') %}
+
+{% block html_attrs %}{{ super() }} data-cj-affiliate-endpoint="{{ settings.CJMS_AFFILIATE_ENDPOINT }}"{% endblock %}
+
+{% block body_id %}mozilla-vpn-landing{% endblock %}
+
+{% set _utm_source = 'www.mozilla.org-vpn-product-page' %}
+{% set _utm_campaign = 'vpn-product-page' %}
+{% set _params = '?utm_source=' ~ _utm_source ~ '&utm_medium=referral&utm_campaign=' ~ _utm_campaign %}
+
+{% block page_css %}
+ {{ css_bundle('mozilla-vpn-landing') }}
+{% endblock %}
+
+{% block site_header %}
+ {% with
+ custom_nav_cta=vpn_nav_cta(
+ link_text=ftl('vpn-shared-subscribe-link'),
+ alt_link_text=ftl('vpn-shared-waitlist-link'),
+ download_link_text=ftl('vpn-shared-sign-in-link'),
+ utm_source=_utm_source,
+ utm_campaign=_utm_campaign,
+ )
+ %}
+ {% include 'includes/protocol/navigation/navigation.html' %}
+ {% endwith %}
+{% endblock %}
+
+{% block content %}
+
+ {% block hero %}
+ {% call vpn_hero(
+ heading=ftl('vpn-shared-product-name'),
+ subheading=ftl('vpn-landing-hero-sub-heading-v2'),
+ desc=ftl('vpn-landing-hero-desc')
+ ) %}
+ {{ vpn_conditional_cta(position='primary') }}
+ {% endcall %}
+ {% endblock %}
+
+
+ {% call vpn_content_media(
+ heading=ftl('vpn-landing-privacy-heading'),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-01.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-01-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480'
+ }
+ ),
+ class_name='vpn-content-media-right-half',
+ has_outline=True
+ ) %}
+
{{ ftl('vpn-landing-privacy-desc') }}
+ {% endcall %}
+
+ {# note: `id=#pricing` is used as an anchor link from android in-product subscription flows, so do not remove (issue 10039) #}
+
+ {% if vpn_available %}
+ {% include 'products/vpn/includes/pricing-plus-relay.html' %}
+ {% else %}
+
+ {% call vpn_content_block(
+ class_name='vpn-content-block-price t-highlight'
+ ) %}
+
+
+
+
+ {{ ftl('vpn-shared-features-devices', devices=connect_devices) }}
+ {{ ftl('vpn-shared-features-servers', servers=connect_servers, countries=connect_countries) }}
+ {{ ftl('vpn-shared-features-encrypt') }}
+ {{ ftl('vpn-shared-features-bandwidth') }}
+ {{ ftl('vpn-shared-features-activity') }}
+
+
+
+ {% endcall %}
+
+ {% endif %}
+
+
+ {% call vpn_content_media(
+ heading=ftl('vpn-landing-fast-secure-heading'),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-02.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-02-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480',
+ 'loading': 'lazy'
+ }
+ ),
+ class_name='vpn-content-media-left-half'
+ ) %}
+
+ {{ ftl('vpn-landing-fast-secure-desc-v2', wireguard='https://mullvad.net/help/why-wireguard/', attrs='target="_blank" rel="external noopener noreferrer"') }}
+
+ {% endcall %}
+
+ {% call vpn_content_media(
+ heading=ftl('vpn-landing-brand-trust-heading'),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-03.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-03-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480',
+ 'loading': 'lazy'
+ }
+ ),
+ class_name='vpn-content-media-right-half',
+ has_outline=True
+ ) %}
+
{{ ftl('vpn-landing-brand-trust-desc', url=url('mozorg.about.manifesto')) }}
+ {% endcall %}
+
+ {% if vpn_available %}
+ {% call vpn_content_media(
+ heading=ftl('vpn-shared-features-server-countries', servers=connect_servers, countries=connect_countries),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-05-v2.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-05-v2-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480',
+ 'loading': 'lazy'
+ }
+ ),
+ class_name='vpn-content-media-left-half vpn-connect-to-countries-and-servers'
+ ) %}
+
{{ ftl('vpn-shared-features-full-list-servers', url='https://mullvad.net/servers/', attrs='target="_blank" rel="external noopener noreferrer"') }}
+
+
+ {{ ftl('vpn-shared-subscribe-link') }}
+
+
+
+ {{ ftl('vpn-shared-money-back-guarantee') }}
+
+ {% endcall %}
+ {% else %}
+ {% call vpn_content_media(
+ heading=ftl('vpn-shared-countries-coming-soon', countries=available_countries),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-05-v2.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-05-v2-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480',
+ 'loading': 'lazy'
+ }
+ ),
+ class_name='vpn-content-media-left-half vpn-more-countries-coming-soon'
+ ) %}
+
+
+ {{ ftl('vpn-shared-waitlist-link') }}
+
+
+
+ {{ ftl('vpn-shared-available-countries-v6') }}
+
+ {% endcall %}
+ {% endif %}
+
+ {% if show_relay_promo_block %}
+
+ {% call vpn_content_media(
+ heading=ftl('vpn-shared-increase-your-privacy'),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-06.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-06-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480',
+ 'loading': 'lazy'
+ }
+ ),
+ class_name='vpn-content-media-right-half vpn-content-block-relay-bundle-promo'
+ ) %}
+
+ {{ ftl('vpn-add-relay-to-protect', url='https://relay.firefox.com/premium/' + _params)}}
+
+
+
+ {{ ftl('vpn-shared-get-vpn-plus-relay') }}
+
+ {% endcall %}
+
+ {% endif %}
+
+
+
+ {{ ftl('vpn-landing-faq-heading') }}
+
+
+
+ {{ ftl('vpn-langing-faq-uses-question-heading') }}
+
+ {{ ftl('vpn-landing-faq-uses-question-desc', url=url('products.vpn.resource-center.article', 'what-is-a-vpn')) }}
+
+
+ {{ ftl('vpn-landing-faq-uses-conceal-v2', url=url('products.vpn.resource-center.article', 'what-is-an-ip-address')) }}
+ {{ ftl('vpn-landing-faq-uses-encrypt') }}
+
+
+
+ {{ ftl('vpn-landing-faq-uses-examples', url=url('products.vpn.resource-center.article', '5-reasons-you-should-use-a-vpn')) }}
+
+
+
+
+
+ {{ ftl('vpn-landing-faq-info-question-heading') }}
+
+ {{ ftl('vpn-landing-faq-info-question-desc-v2', principles=url('privacy.principles'), notice=url('privacy.notices.subscription-services')) }}
+
+
+
+
+ {{ ftl('vpn-landing-faq-protected-question-heading') }}
+
+ {{ ftl('vpn-landing-faq-protected-question-desc', url='https://mullvad.net/help/why-wireguard/', attrs='target="_blank" rel="external noopener noreferrer"') }}
+
+
+
+
+ {{ ftl('vpn-landing-faq-competition-question-heading') }}
+
+ {{ ftl('vpn-landing-faq-competition-question-desc-v2', url=url('mozorg.about.history')) }}
+
+
+
+
+ {{ ftl('vpn-landing-faq-compatibility-question-heading') }}
+
+
+ {{ ftl('vpn-landing-faq-compatibility-question-desc-v2', mobile=url('products.vpn.platforms.mobile'), desktop=url('products.vpn.platforms.desktop')) }}
+
+
+
+
+ {{ ftl('vpn-landing-faq-compatibility-question-desc-windows-v3', url=url('products.vpn.platforms.windows')) }}
+
+
+ {% set mac_url='href="%s"'|safe|format(url('products.vpn.platforms.mac')) %}
+ {{ ftl('vpn-landing-faq-compatibility-question-desc-mac-v4', url=mac_url, minversion='11.0') }}
+
+
+ {{ ftl('vpn-landing-faq-compatibility-question-desc-android-v3', url=url('products.vpn.platforms.android')) }}
+
+
+ {{ ftl('vpn-landing-faq-compatibility-question-desc-ios-v4', url=url('products.vpn.platforms.ios'), version='14.0') }}
+
+
+ {{ ftl('vpn-landing-faq-compatibility-question-desc-linux-v4', url=url('products.vpn.platforms.linux')) }}
+
+
+
+
+
+
+ {{ ftl('vpn-landing-faq-refund-question-heading') }}
+
+ {{ ftl('vpn-landing-faq-refund-question-desc-v2') }}
+ {{ ftl('vpn-landing-faq-refund-question-additional-desc') }}
+
+
+
+
+ {{ ftl('vpn-landing-faq-manage-subscription-question-heading') }}
+
+ {{ ftl('vpn-landing-faq-manage-subscription-question-desc', url='https://vpn.mozilla.org/r/vpn/subscription' + _params) }}
+
+
+ {% if ftl_has_messages('vpn-landing-faq-download-heading', 'vpn-landing-faq-download-desc') %}
+
+
+ {{ ftl('vpn-landing-faq-download-heading') }}
+
+
+ {% set attrs = 'href="' ~ url('products.vpn.download') ~ '" data-cta-text="Download Page"' %}
+ {{ ftl('vpn-landing-faq-download-desc', attrs=attrs) }}
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+ {% if vpn_affiliate_attribution_enabled %}
+ {{ js_bundle('mozilla-vpn-affiliate') }}
+ {% else %}
+ {{ js_bundle('fxa_product_button') }}
+ {% endif %}
+
+ {{ js_bundle('mozilla-vpn-landing') }}
+ {{ js_bundle('data_begincheckout') }}
+{% endblock %}
diff --git a/bedrock/products/templates/products/vpn/pricing-refresh.html b/bedrock/products/templates/products/vpn/pricing-refresh.html
index 76d010e5358..15217cfe9d6 100644
--- a/bedrock/products/templates/products/vpn/pricing-refresh.html
+++ b/bedrock/products/templates/products/vpn/pricing-refresh.html
@@ -52,7 +52,7 @@ {{ ftl('vpn-pricing-one-subscription') }}
{{ ftl('vpn-pricing-vpn-not-available') }}
-
+
{{ ftl('vpn-shared-waitlist-link') }}
@@ -73,8 +73,8 @@ {{ ftl('vpn-pricing-refund-policy') }}
- {% set privacy_principles = 'href="%s" data-cta-text="Privacy principles" data-cta-type="link"'|safe|format(url('privacy.principles')) %}
- {% set privacy_notice = 'href="%s" data-cta-text="Privacy notice" data-cta-type="link"'|safe|format(url('privacy.notices.subscription-services')) %}
+ {% set privacy_principles = 'href="%s" data-cta-text="Privacy principles" '|safe|format(url('privacy.principles')) %}
+ {% set privacy_notice = 'href="%s" data-cta-text="Privacy notice" '|safe|format(url('privacy.notices.subscription-services')) %}
{{ ftl('vpn-pricing-what-information') }}
@@ -84,7 +84,7 @@ {{ ftl('vpn-pricing-what-information') }}
- {% set manage_url = 'href="%s" data-cta-text="Manage VPN" data-cta-type="link"'|safe|format(('https://vpn.mozilla.org/r/vpn/subscription' + _params)) %}
+ {% set manage_url = 'href="%s" data-cta-text="Manage VPN" '|safe|format(('https://vpn.mozilla.org/r/vpn/subscription' + _params)) %}
{{ ftl('vpn-pricing-how-do-i-manage') }}
diff --git a/bedrock/products/templates/products/vpn/pricing.html b/bedrock/products/templates/products/vpn/pricing.html
new file mode 100644
index 00000000000..5db4d4e483e
--- /dev/null
+++ b/bedrock/products/templates/products/vpn/pricing.html
@@ -0,0 +1,90 @@
+{#
+ 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 "products/vpn/includes/macros.html" import vpn_content_media with context %}
+
+{% extends "products/vpn/base.html" %}
+
+{% block page_title_full %}{{ ftl('vpn-landing-page-title') }}{% endblock %}
+{% block page_title_suffix %}{% endblock %}
+
+{% block page_desc %}{{ ftl('vpn-landing-page-desc', countries=available_countries) }}{% endblock %}
+
+{% block html_attrs %}{{ super() }} data-cj-affiliate-endpoint="{{ settings.CJMS_AFFILIATE_ENDPOINT }}"{% endblock %}
+
+{% block body_id %}mozilla-vpn-pricing{% endblock %}
+
+{% block canonical_urls %} {% endblock %}
+
+{% set _utm_source = 'www.mozilla.org-vpn-product-page' %}
+{% set _utm_campaign = 'vpn-pricing-page' %}
+{% set _params = '?utm_source=' ~ _utm_source ~ '&utm_medium=referral&utm_campaign=' ~ _utm_campaign %}
+
+{% block page_css %}
+ {{ css_bundle('mozilla-vpn-pricing') }}
+{% endblock %}
+
+{% block site_header %}
+ {% with
+ hide_nav_download_button=True,
+ hide_nav_get_vpn_button=True
+ %}
+ {% include 'includes/protocol/navigation/navigation.html' %}
+ {% endwith %}
+{% endblock %}
+
+{% block content %}
+
+
+
{{ ftl('vpn-shared-product-name') }}
+
+ {% if vpn_available %}
+ {% include 'products/vpn/includes/pricing-basic.html' %}
+ {% else %}
+ {% call vpn_content_media(
+ heading=ftl('vpn-shared-countries-coming-soon', countries=available_countries),
+ image=resp_img(
+ url='img/products/vpn/landing/vpn-cntwell-05-v2.png',
+ srcset={
+ 'img/products/vpn/landing/vpn-cntwell-05-v2-high-res.png': '2x'
+ },
+ optional_attributes={
+ 'width': '480',
+ 'height': '480',
+ 'loading': 'lazy'
+ }
+ ),
+ class_name='vpn-content-media-left-half vpn-more-countries-coming-soon'
+ ) %}
+
+
+ {{ ftl('vpn-shared-waitlist-link') }}
+
+
+
+ {{ ftl('vpn-shared-available-countries-v6') }}
+
+ {% endcall %}
+ {% endif %}
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+ {% if vpn_affiliate_attribution_enabled %}
+ {{ js_bundle('mozilla-vpn-affiliate') }}
+ {% else %}
+ {{ js_bundle('fxa_product_button') }}
+ {% endif %}
+
+ {{ js_bundle('data_begincheckout') }}
+{% endblock %}
diff --git a/bedrock/products/templates/products/vpn/resource-center/base-article.html b/bedrock/products/templates/products/vpn/resource-center/base-article.html
index 79c9112965f..96bf2882c5a 100644
--- a/bedrock/products/templates/products/vpn/resource-center/base-article.html
+++ b/bedrock/products/templates/products/vpn/resource-center/base-article.html
@@ -55,13 +55,13 @@ {{ self.article_title() }}
{{ ftl('vpn-resource-center-was-this-article') }}
-
+
{{ ftl('vpn-resource-center-article-helpful') }}
-
+
{{ ftl('vpn-resource-center-article-not-helpful') }}
diff --git a/bedrock/products/tests/test_helper_misc.py b/bedrock/products/tests/test_helper_misc.py
index ff957779811..7a8415168e8 100644
--- a/bedrock/products/tests/test_helper_misc.py
+++ b/bedrock/products/tests/test_helper_misc.py
@@ -1661,12 +1661,12 @@ def test_vpn_product_referral_link(self):
page_anchor="#pricing",
link_text="Get Mozilla VPN",
class_name="mzp-t-product mzp-t-secondary mzp-t-md",
- optional_attributes={"data-cta-text": "Get Mozilla VPN", "data-cta-type": "button"},
+ optional_attributes={"data-cta-text": "Get Mozilla VPN", "data-cta-type": "vpn"},
)
expected = (
'Get Mozilla VPN '
+ 'data-cta-text="Get Mozilla VPN" data-cta-type="vpn">Get Mozilla VPN'
)
self.assertEqual(markup, expected)
@@ -1677,12 +1677,12 @@ def test_vpn_product_referral_link_pricing_page(self):
link_to_pricing_page=True,
link_text="Get Mozilla VPN",
class_name="mzp-t-product mzp-t-secondary mzp-t-md",
- optional_attributes={"data-cta-text": "Get Mozilla VPN", "data-cta-type": "button"},
+ optional_attributes={"data-cta-text": "Get Mozilla VPN", "data-cta-type": "vpn"},
)
expected = (
'Get Mozilla VPN '
+ 'data-cta-text="Get Mozilla VPN" data-cta-type="vpn">Get Mozilla VPN'
)
self.assertEqual(markup, expected)
@@ -1693,12 +1693,12 @@ def test_vpn_product_referral_link_optional_params(self):
link_to_pricing_page=True,
link_text="Get Mozilla VPN",
class_name="mzp-t-product mzp-t-secondary mzp-t-md",
- optional_attributes={"data-cta-text": "Get Mozilla VPN", "data-cta-type": "button"},
+ optional_attributes={"data-cta-text": "Get Mozilla VPN", "data-cta-type": "vpn"},
optional_parameters={"coupon": "cyber20"},
)
expected = (
'Get Mozilla VPN '
+ 'data-cta-text="Get Mozilla VPN" data-cta-type="vpn">Get Mozilla VPN'
)
self.assertEqual(markup, expected)
diff --git a/docs/abtest.rst b/docs/abtest.rst
index 26a86479435..350575da0f6 100644
--- a/docs/abtest.rst
+++ b/docs/abtest.rst
@@ -93,18 +93,15 @@ Recording the data
If you are measuring installs as part of your experiment be sure to configure `custom stub attribution `_ as well.
-Including the ``data-ex-variant`` and ``data-ex-name`` in the analytics
-reporting will add the test to an auto generated report in :abbr:`GA (Google Analytics)`.
-The variable values may be provided by the analytics team.
+Send the experiment view events to GA4 with the event name ``experiment_view``. The ``id`` of all variants should be the same
+and all ``variant`` values should be unique.
+
+Make sure any buttons and interaction which are being compared as part of the
+test will report into :abbr:`GA (Google Analytics)`.
.. code-block:: javascript
if (href.indexOf('v=a') !== -1) {
- // UA
- window.dataLayer.push({
- 'data-ex-variant': 'de-page',
- 'data-ex-name': 'Berlin-Campaign-Landing-Page'
- });
// GA4
window.dataLayer.push({
event: 'experiment_view',
@@ -112,11 +109,6 @@ The variable values may be provided by the analytics team.
variant: 'de-page',
});
} else if (href.indexOf('v=b') !== -1) {
- // UA
- window.dataLayer.push({
- 'data-ex-variant': 'campaign-page',
- 'data-ex-name': 'Berlin-Campaign-Landing-Page'
- });
// GA4
window.dataLayer.push({
event: 'experiment_view',
@@ -125,21 +117,11 @@ The variable values may be provided by the analytics team.
});
}
-Make sure any buttons and interaction which are being compared as part of the
-test will report into :abbr:`GA (Google Analytics)`.
Viewing the data
~~~~~~~~~~~~~~~~~~
-The ``data-ex-name`` and ``data-ex-variant`` are encoded in Google Analytics as custom dimensions 69 and 70.
-
-Create a custom report.
-
-Set the "Metrics Group" to include Sessions. Configure additional metrics depending on what the experiment was measuring (downloads, events, etc.)
-
-Set the "Dimension Drilldowns to have cd69 in the top position and cd70 in the drilldown position.
-
-View the custom report and drilldown into the experiment with the matching name.
+We have not figured this out for GA4 yet.
Tests
~~~~~
@@ -153,16 +135,6 @@ Some things to consider checking:
- Requests for a variant page call the correct template.
- Locales excluded from the test call the correct (default) template.
-A/B Test PRs that might have useful code to reuse
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-- https://github.com/mozilla/bedrock/pull/5736/files
-- https://github.com/mozilla/bedrock/pull/4645/files
-- https://github.com/mozilla/bedrock/pull/5925/files
-- https://github.com/mozilla/bedrock/pull/5443/files
-- https://github.com/mozilla/bedrock/pull/5492/files
-- https://github.com/mozilla/bedrock/pull/5499/files
-
Avoiding experiment collisions
------------------------------
diff --git a/docs/attribution/0001-analytics.rst b/docs/attribution/0001-analytics.rst
index 3103b43f706..eae538d062b 100644
--- a/docs/attribution/0001-analytics.rst
+++ b/docs/attribution/0001-analytics.rst
@@ -8,273 +8,226 @@
Mozorg analytics
=================
-Google Tag Manager (GTM)
-************************
+Google Analytics
+****************
-In mozorg mode, bedrock uses `Google Tag Manager (GTM)`_ to manage and organize
-its `Google Analytics`_ solution.
+We use Google Analytics (GA) to track how our website is used.
-:abbr:`GTM (Google Tag Manager)` is a tag management system that allows for
-easy implementation of Google Analytics (GA) tags and other 3rd party marketing
-tags in a nice :abbr:`GUI (Graphical User Interface)` experience. Tags can be
-added, updated, or removed directly from the GUI. GTM allows for a "one
-source of truth" approach to managing an analytics solution in that all
-analytics tracking can be inside GTM.
+*Implementation*
-Bedrock's GTM solution is :abbr:`CSP (Content Security Policy)` compliant and
-does not allow for the injection of custom HTML or JavaScript but all tags use
-built in templates to minimize any chance of introducing a bug into Bedrock.
+Google calls a 3rd party JavaScript library that is imported by adding a script tag to a website,
+Google names these "tag"s.
-The GTM DataLayer
------------------
+We include the tag for Google Tag Manager (GTM) on our website. GTM is a service meant to simplify and centralize
+the tags included on a website in cases where multiple tags are needed. Their web-based user interface can then be
+used to watch for user actions on the website and then trigger events to be sent to tags.
-How an application communicates with GTM is via the ``dataLayer`` object, which
-is a simple JavaScript array GTM instantiates on the page. Bedrock will send
-messages to the ``dataLayer`` object by means of pushing an object literal onto
-the ``dataLayer``. GTM creates an abstract data model from these pushed objects
-that consists of the most recent value for all keys that have been pushed to
-the ``dataLayer``.
+We do no not use any of GTM's most powerful features. Our use of GTM is a historical artifact of our
+Universal Analytics (UA) (aka GA3) implementation. GTM is a tool to let non-technical users add code to a website, however,
+there is no one outside of the websites team who is trained to do that.
-The only reserved key in an object pushed to the ``dataLayer`` is ``event`` which
-will cause GTM to evaluate the firing conditions for all tag triggers.
+The only tag we include with GTM is the Google Tag (GTag), and that in turn connects to our Google Analytics (GA) account.
-DataLayer push example
-----------------------
+There are three ways we send events from our site to GA:
-If we wanted to track clicks on a carousel and capture what the image was that
-was clicked, we might write a dataLayer push like this:
+1. Google's Enhanced Event Measurement logs certain events automatically.
+2. GTM watches elements with specific data-attributes for user interaction
+3. Bedrock watches for specific events, formats them, and sends them to GTM using the dataLayer
-.. code-block:: javascript
+*Implementation Principles*
- dataLayer.push({
- 'event': 'carousel-click',
- 'image': 'house'
- });
+The current implementation tries very hard to keep any kind of logic and formatting of our events in bedrock where it can be
+tested, code reviewed, and version controlled.
-In the dataLayer push there is an event value to have GTM evaluate the firing
-conditions for tag triggers, making it possible to fire a tag off the dataLayer
-push. The event value is descriptive to the user action so it's clear to someone
-coming in later what the dataLayer push signifies. There is also an image property
-to capture the image that is clicked, in this example it's the house picture.
+Many user interactions will trigger multiple events. For example: clicking the "get subscription" button on the VPN page will
+trigger ``link``, ``cta_click``, and ``begin_checkout`` events. This is totally fine.
-In GTM, a tag could be setup to fire when the event ``carousel-click`` is pushed
-to the dataLayer and could consume the image value to pass on what image was clicked.
+If you're creating a new event use the two word noun_verb scheme that Google came up with and use snake_case,
+even if one of your noun or verb is more than one word.
-The Core DataLayer object
--------------------------
+*Debugging*
-For the passing of contextual data on the user and page to GTM, we've created what we
-call the Core DataLayer Object. This object passes as soon as all required API calls
-for contextual data have completed. Unless there is a significant delay to when data
-will be available, please pass all contextual or meta data on the user or page here
-that you want to make available to GTM.
+- GTM is managed with Tag Manager https://tagmanager.google.com/
+- Our gTag is also managed with Tag Manager https://tagmanager.google.com/#/home#tags
+- GA, GTM, and gTag can be debugged using Tag Assistant https://tagassistant.google.com/
+- GA also has a debug view https://support.google.com/analytics/answer/7201382?hl=en
-Conditional banners
-~~~~~~~~~~~~~~~~~~~
+How can visitors opt out of GA?
+-------------------------------
-When a banner is shown:
+Visitors to the website can opt-out of loading Google Analytics on our
+website by enabling `Do Not Track (DNT)`_ in their web browser. We
+facilitate this by using a `DNT helper`_ that our team maintains. We
+also respect `Global Privacy Control (GPC)`_ as an additional opt-out
+signal.
-.. code-block:: javascript
+Alternatively, visitors can also opt-out of GA by visiting the
+`cookie settings page`_, which is linked to in the main site
+footer on every page.
- // UA
- window.dataLayer.push({
- 'eLabel': 'Banner Impression',
- 'data-banner-name': '', //ex. Fb-Video-Compat
- 'data-banner-impression': '1',
- 'event': 'non-interaction'
- });
- // GA4
- window.dataLayer.push({
- event: 'widget_action',
- type: 'banner',
- action: 'display',
- name: '', //ex. Fb-Video-Compat
- non_interaction: true
- });
+Event Tracking
+--------------
-When an element in the banner is clicked:
+Enhanced Event Measurement
+~~~~~~~~~~~~~~~~~~~~~~~~~~
-.. code-block:: javascript
+Pageviews, scrolls, video events, and outbound link clicks are being collected using GA4's `enhanced event measurement`_.
- // UA
- window.dataLayer.push({
- 'eLabel': 'Banner Click (OK)',
- 'data-banner-name': '', //ex. Fb-Video-Compat
- 'data-banner-click': '1',
- 'event': 'in-page-interaction'
- });
- // GA4
- window.dataLayer.push({
- event: 'widget_action',
- type: 'banner',
- action: 'clickthrough',
- name: '', //ex. Fb-Video-Compat
- });
+Some form submissions are also being collected but newsletter signups are not. `(See Bug #13348)`_ They are instead
+being tracked with the ``newsletter_subscribe`` event.
-When a banner is dismissed:
+See the full list of events GA collects by default. https://support.google.com/analytics/answer/9216061
-.. code-block:: javascript
+Data Attributes
+~~~~~~~~~~~~~~~
- // UA
- dataLayer.push({
- 'eLabel': 'Banner Dismissal',
- 'data-banner-name': '', //ex. Fb-Video-Compat
- 'data-banner-dismissal': '1',
- 'event': 'in-page-interaction'
- });
- // GA4
- window.dataLayer.push({
- event: 'widget_action',
- type: 'banner',
- action: 'dismiss',
- name: '' //ex. Fb-Video-Compat
- });
+One place where we do still rely on GTM to watch for an trigger events is when we use data-attributes to pass
+information. There are only two events we do this with and they are primarily used on buttons and links.
-A/B tests
-~~~~~~~~~
+CTA Click
+"""""""""
-.. code-block:: javascript
+CTA ("Call to Action") click is intented to track the one or two main actions the page is designed to get the user
+to do. This data-attribute can be used on either ```` or ````. Links can go to or away from the site,
+a button might trigger a JS function instead of going away from the page, that's still a cta.
- if (href.indexOf('v=a') !== -1) {
- // UA
- window.dataLayer.push({
- 'data-ex-variant': 'de-page',
- 'data-ex-name': 'Berlin-Campaign-Landing-Page'
- });
- // GA4
- window.dataLayer.push({
- event: 'experiment_view',
- id: 'Berlin-Campaign-Landing-Page',
- variant: 'de-page',
- });
- } else if (href.indexOf('v=b') !== -1) {
- // UA
- window.dataLayer.push({
- 'data-ex-variant': 'campaign-page',
- 'data-ex-name': 'Berlin-Campaign-Landing-Page'
- });
- // GA4
- window.dataLayer.push({
- event: 'experiment_view',
- id: 'Berlin-Campaign-Landing-Page',
- variant: 'campaign-page',
- });
- }
+The attribute ``data-cta-text`` must be present to trigger the event. All links to accounts.firefox.com must also use cta-type.
-GTM listeners & data attributes
--------------------------------
++-----------------------+----------------------------------------------------------------------------------+
+| Data Attribute | Expected Value |
++=======================+==================================================================================+
+| ``data-cta-text`` * | Text or name of the link (e.g. ``Sign Up``, ``Start Here``, ``Get Relay``, |
+| | ``See your report``, ``Read the Manifesto``). |
+| | |
+| | - This does not need to exactly match the text displayed to the user |
+| | - Defining this is useful to group the link clicks across locales |
++-----------------------+----------------------------------------------------------------------------------+
+| ``data-cta-position`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``banner``, |
+| | ``pricing``) |
++-----------------------+----------------------------------------------------------------------------------+
+| ``data-cta-type`` | fxa-servicename (e.g. ``fxa-sync``, ``fxa-monitor``, ``fxa-vpn``, ``monitor``, |
+| | ``relay``, ``pocket``) |
+| | |
+| | - This is to group CTAs by their destination |
+| | - Do not use this to identify the element (ie. link, button) |
++-----------------------+----------------------------------------------------------------------------------+
-GTM also uses click and form submit listeners to gather context on what is happening
-on the page. Listeners push to the dataLayer data on the specific element that
-triggered the event, along with the element object itself.
-Since GTM listeners pass the interacted element object to the dataLayer, the use of
-data attributes works very well when trying to identify key elements that you want to
-be tracked and for storing data on that element to be passed into Google Analytics. We
-use data attributes to track clicks on all downloads, buttons elements, and nav, footer,
-and :abbr:`CTA (Call To Action)`/button link elements.
+.. code-block:: html
-.. Important::
+ Check for breaches
+
+ Send me a link
- When adding any new elements to a Bedrock page, please follow the below guidelines
- to ensure accurate analytics tracking.
+ Firefox for iOS
-Generic CTAs
-~~~~~~~~~~~~
-For all generic CTA links and ```` elements, add these data attributes
-(* indicates a required attribute):
+Link Click
+""""""""""
-+-----------------------+---------------------------------------------------------------------------+
-| Data Attribute | Expected Value (lowercase) |
-+=======================+===========================================================================+
-| ``data-cta-type`` * | Link type (e.g. ``navigation``, ``footer``, or ``button``) |
-+-----------------------+---------------------------------------------------------------------------+
-| ``data-cta-text`` | name or text of the link |
-+-----------------------+---------------------------------------------------------------------------+
-| ``data-cta-position`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
-+-----------------------+---------------------------------------------------------------------------+
+Link click is intended to track links that are of interest but not the focus of the page. Examples include links in paragraphs,
+lists, FAQs, supplemental content, or in a navigation menu. Links can go to or away from the site.
-For all links to accounts.firefox.com use these data attributes (* indicates a required attribute):
+The attribute ``data-link-text`` must be present to trigger the event.
-+-----------------------+----------------------------------------------------------------------------------+
-| Data Attribute | Expected Value |
-+=======================+==================================================================================+
-| ``data-cta-type`` * | fxa-servicename (e.g. ``fxa-sync``, ``fxa-monitor``) |
-+-----------------------+----------------------------------------------------------------------------------+
-| ``data-cta-text`` | Name or text of the link (e.g. ``Sign Up``, ``Join Now``, ``Start Here``). |
-| | |
-| | We use this when the link text is not useful, as is the case with many |
-| | account forms that say, ``Continue``. We replace ``Continue`` with ``Register``. |
-+-----------------------+----------------------------------------------------------------------------------+
-| ``data-cta-position`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
-+-----------------------+----------------------------------------------------------------------------------+
++-----------------------+------------------------------------------------------------------------------------------------+
+| Data Attribute | Expected Value |
++=======================+================================================================================================+
+| ``data-link-text`` * | Text or name of the link (e.g. ``Monitor``, ``Features``, ``Instagram (mozilla)``, |
+| | ``Mozilla VPN``). |
++-----------------------+------------------------------------------------------------------------------------------------+
+| ``data-link-position``| Location of CTA on the page (e.g. ``topnav``, ``subnav``, ``body``, ``features``) |
++-----------------------+------------------------------------------------------------------------------------------------+
-Links identified with ``data-cta-type`` become UA events with the following format:
+.. code-block:: html
-| **Category:** ``cta click``
-| **Action:** ``cta: {{data-cta-type}}``
-| **Label:** ``{{data-cta-text}}``
-| **CD Index 9 - CTA Position:** ``{{data-cta-position}}``
+ This is text with a simple example.
+ Edit PDFs on the go within your Firefox browser window.
-Download Links
-~~~~~~~~~~~~~~
-For Firefox download buttons, add these data attributes (* indicates a required attribute).
-Note that ``data-download-name`` and ``data-download-version`` should be included for download
-buttons that serve multiple platforms. For mobile specific store badges, they are not strictly
-required.
+Link click is also commonly used for navigation menus. If you wish to indicate that a link is nested you can include the categories
+seperated by a dash (``topnav - firefox``, ``footer - company``)
-+----------------------------+-------------------------------------------------------------------------------------------------------------+
-| Data Attribute | Expected Value |
-+============================+=============================================================================================================+
-| ``data-link-type`` * | ``download`` |
-+----------------------------+-------------------------------------------------------------------------------------------------------------+
-| ``data-download-os`` * | ``Desktop``, ``Android``, ``iOS`` |
-+----------------------------+-------------------------------------------------------------------------------------------------------------+
-| ``data-download-name`` | ``Windows 32-bit``, ``Windows 64-bit``, ``macOS``, ``Linux 32-bit``, ``Linux 64-bit``, ``iOS``, ``Android`` |
-+----------------------------+-------------------------------------------------------------------------------------------------------------+
-| ``data-download-version`` | ``win``, ``win64``, ``osx``, ``linux``, ``linux64``, ``ios``, ``android`` |
-+----------------------------+-------------------------------------------------------------------------------------------------------------+
-| ``data-download-location`` | ``primary``, ``secondary``, ``nav``, ``other`` |
-+----------------------------+-------------------------------------------------------------------------------------------------------------+
+.. code-block:: html
+ {{ ftl('footer-developer-edition') }}
-GA4
----
+
-.. Note::
- The migration to GA4 has begun but is incomplete.
+Data Layer Events
+~~~~~~~~~~~~~~~~~
-Enhanced Event Measurement
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+The data layer is a JS object we can push events to and GTM will read from it.
+
+.. code-block:: js
+
+ window.dataLayer.push({'event': 'event_name'});
+
+We push a mix of recommended events and custom events to the data layer. When creating a new custom event please follow the
+Implementation Principles outlined above. Remember, both GTM and GA must be configured to recieve new events.
-Pageviews, video events, and external link clicks are being collected using GA4's
-`enhanced event measurement`_.
+https://developers.google.com/analytics/devguides/collection/ga4/reference/events?client_type=gtag#begin_checkout
-Some form submissions are also being collected but newsletter signups are not.
-`(See Bug #13348)`_
+https://mozilla-hub.atlassian.net/wiki/spaces/EN/pages/430866463/GA4+Custom+Events
+
+https://developers.google.com/tag-platform/tag-manager/datalayer
+
+
+Events that bedrock will send to GTM include:
+
+- begin_checkout
+- cta_click
+- default_browser_set
+- dimension_set
+- experiment_view
+- link_click
+- newsletter_subscribe
+- product_download (firefox_download, firefox_mobile_download, etc)
+- send_to_device
+- social_share
+- stub_session_set
+- widget_action
Begin Checkout
-~~~~~~~~~~~~~~
+""""""""""""""
-We are using GA4's recommended eCommerce event `begin_checkout`_ for VPN and Relay
-referrals to the FxA Subscription Platform with purchase intent.
+We are using GA4's recommended eCommerce event `begin_checkout`_ for VPN referrals to the FxA Subscription Platform with purchase intent.
+This event can accept values for other products but we are not currently using it for anything other than VPN.
.. Note::
Any link to Mozilla accounts should also be using :ref:`mozilla accounts attribution`
-``datalayer-begincheckout.es6.js`` contains generic functions
-that can be called on to push the appropriate information to the dataLayer. The
+``datalayer-begincheckout.es6.js`` contains generic functions that can be called on to push the appropriate information to the dataLayer. The
script is expecting the following values:
+
++---------------+----------------------------------------------------------------------------------+
+| Property | Value |
++===============+==================================================================================+
+| ``item_id`` | Text or name of the link (e.g. ``Sign Up``, ``Join Now``, ``Start Here``). |
++---------------+----------------------------------------------------------------------------------+
+| ``brand`` | fxa-servicename (e.g. ``fxa-sync``, ``fxa-monitor``) |
++---------------+----------------------------------------------------------------------------------+
+| ``plan`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
++---------------+----------------------------------------------------------------------------------+
+| ``period`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
++---------------+----------------------------------------------------------------------------------+
+| ``price`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
++---------------+----------------------------------------------------------------------------------+
+| ``currency`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
++---------------+----------------------------------------------------------------------------------+
+| ``discount`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
++---------------+----------------------------------------------------------------------------------+
+
+
+
- item_id: Stripe Plan ID
- brand: ``relay``, ``vpn``, or ``monitor``
- plan:
@@ -327,64 +280,26 @@ To use this method you will need to include ``datalayer-begincheckout-init.es6.j
-CTA Click
-~~~~~~~~~
-
-Like our UA implementation (documented above) the implementation of ``cta_click`` for GA4 is based of
-the existence of certain data-attributes on an element.
-
-`data-cta-text` must be present to trigger the event:
-
-- data-cta-text
- - Defining this is useful to group the link clicks across locales
- - The value does not need to exactly match the text
- - Provide something more useful than "click here" or "learn more". If that is the copy you were provided consider asking for copy that is more useful to the users too!
-- data-cta-position (examples: banner, pricing, primary, secondary)
-- data-cta-type (examples: fxa-sync, fxa-monitor, fxa-vpn, monitor, relay, pocket)
- - This is to group CTAs by their destination
- - Do not use this to identify the element (ie. link, button)
-
-
-.. code-block:: html
-
- Check for breaches
-
- Send me a link
-
- Firefox for iOS
-
-For all links to accounts.firefox.com use these data attributes (* indicates a required attribute):
-
-+-----------------------+----------------------------------------------------------------------------------+
-| Data Attribute | Expected Value |
-+=======================+==================================================================================+
-| ``data-cta-text`` * | Text or name of the link (e.g. ``Sign Up``, ``Join Now``, ``Start Here``). |
-+-----------------------+----------------------------------------------------------------------------------+
-| ``data-cta-type`` * | fxa-servicename (e.g. ``fxa-sync``, ``fxa-monitor``) |
-+-----------------------+----------------------------------------------------------------------------------+
-| ``data-cta-position`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``header``) |
-+-----------------------+----------------------------------------------------------------------------------+
+Default Browser
+"""""""""""""""
+Trigger this event when a user sets their default browser to Firefox. It's an important conversion for us!
-Link Click
-~~~~~~~~~~
+.. code-block:: javascript
-Our implementation of ``link_click`` for GA4 is based of the existence of certain data-attributes on a
-link element.
+ window.dataLayer.push({
+ event: 'default_browser_set',
+ });
-`data-link-text` must be present to trigger the event:
-- data-link-text (examples: “Monitor”, “Features”, “Instagram (mozilla)”, “Mozilla VPN”)
-- data-link-position (examples: topnav, subnav, topnav - firefox, footer - company)
-```
-
-```
+Newsletter Subscribe
+""""""""""""""""""""
Product Downloads
-~~~~~~~~~~~~~~~~~
+"""""""""""""""""
.. Important::
@@ -402,10 +317,6 @@ talked about as `product_download` :
- `klar_download`
- `pocket_download`
-We are not using the default GA4 event file_download for a combination of reasons:
-it does not trigger for the Firefox file types, we would like to collect more information than is included with
-the default events, and we would like to treat product downloads as goals but not all file downloads are goals.
-
Properties for use with `product_download` (not all products will have all options):
- product (one of: firefox, firefox_mobile, focus, klar, pocket, vpn)
@@ -450,8 +361,28 @@ get and send the event object manually. This most often happens with adjust link
TrackProductDownload.sendEvent(customEventObject);
+.. Note::
+
+ Calling TrackProductDownload will also fire an event named `product_download` so two events are being logged for each product download.
+ This is because prior to Feb 2024 we only used one unified product download event and did not have the individual product download
+ events yet. The split events are considered easier to deal with for reporting purposes inside GA4. Some data science dashboards
+ use `product_download` because it has existed longer. Ideally, we will remove it some day.
+
+
+Send to Device
+""""""""""""""
+
+Social Share
+""""""""""""
+
+
+Stub Session Set
+""""""""""""""""
+
+
+
Widget Action
-~~~~~~~~~~~~~
+"""""""""""""
We are using the custom event ``widget_action`` to track the behaviour of javascript widgets.
@@ -480,7 +411,7 @@ We are using the custom event ``widget_action`` to track the behaviour of javasc
+-------------------------------------------------+-------------------------------------------------+
-Properties for use with `widget_action` (not all widgets will use all options):
+Properties for use with `widget_action` (not all widgets will use all options):
- type
- **Required.**
@@ -492,16 +423,15 @@ Properties for use with `widget_action` (not all widgets will use all options):
- The thing that happened.
- Examples: "open", "accept", "timeout", "vote up".
- *Avoid “click”. If you want to track a click use `cta_click`.*
-- name
- - Give the widget a name.
- - This can help you group actions from the same widget, or make it easier to find
- the widget in the reports.
- - The dashes are not required but they're allowed if you want to match the element
- class or ID.
- - Examples: "dad-joke-banner", "focus-qr-code", "Join Firefox Modal"
- text
- How is this action labeled to the user?
- Examples: "Okay", "Check your protection report", "Get the app"
+- name
+ - Give the widget a name.
+ - You probably only need this optional attribute if the `text` value is not enough to tell the widgets apart.
+ - This can help you group actions from the same widget, or make it easier to find the widget in the reports.
+ - The dashes are not required but they're allowed if you want to match the element class or ID.
+ - Examples: "dad-joke-banner", "focus-qr-code", "Join Firefox Modal"
- non_interaction (boolean)
- True if the action was triggered by something other than a user gesture.
- If it's not included we assume the value is *false*
@@ -541,20 +471,10 @@ To use ``widget_action`` push your event to the ``dataLayer``:
text: 'Where is Relay available?'
});
-Default Browser
-~~~~~~~~~~~~~~~
-
-Trigger this event when a user sets their default browser to Firefox. It's an important conversion for us!
-
-.. code-block:: javascript
-
- window.dataLayer.push({
- event: 'default_browser_set',
- });
-User Scoped Custom Dimensions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Dimension Set
+"""""""""""""
When using GA4 through GTM there isn’t a way to set user scoped custom dimensions without an accompanying event.
The custom event we use for this is `dimension_set`.
@@ -572,18 +492,6 @@ User scoped custom dimensions must be configured in GA4. The list of supported c
- `firefox_is_signed_in` (boolean)
-How can visitors opt out of GA?
--------------------------------
-
-Visitors to the website can opt-out of loading Google Analytics on our
-website by enabling `Do Not Track (DNT)`_ in their web browser. We
-facilitate this by using a `DNT helper`_ that our team maintains. We
-also respect `Global Privacy Control (GPC)`_ as an additional opt-out
-signal.
-
-Alternatively, visitors can also opt-out of GA by visiting the
-`cookie settings page`_, which is linked to in the main site
-footer on every page.
Glean
*****
diff --git a/docs/attribution/0002-firefox-desktop.rst b/docs/attribution/0002-firefox-desktop.rst
index 387ff6ed9d0..f3b1968afbf 100644
--- a/docs/attribution/0002-firefox-desktop.rst
+++ b/docs/attribution/0002-firefox-desktop.rst
@@ -8,6 +8,8 @@
Firefox desktop attribution
===========================
+TODO: add something about `data-download-version` being checked to apened stub attribution.
+
Firefox Desktop Attribution (often referred to as Stub Attribution) is a system
that enables Mozilla to link website attributable referral data (including Google
Analytics data) to a user's Firefox profile. When a website visitor lands on
diff --git a/docs/attribution/0004-mozilla-accounts.rst b/docs/attribution/0004-mozilla-accounts.rst
index efb8e93d6e8..efd8eadb028 100644
--- a/docs/attribution/0004-mozilla-accounts.rst
+++ b/docs/attribution/0004-mozilla-accounts.rst
@@ -169,7 +169,7 @@ The helper supports the following parameters:
+--------------------------+--------------------------------------------------------------------------------------------------+-----------------------------------+----------------------------------------------------------------------------------------------------+
| ``page_anchor`` | An optional page anchor for the link destination. | String | '#pricing' |
+--------------------------+--------------------------------------------------------------------------------------------------+-----------------------------------+----------------------------------------------------------------------------------------------------+
-| ``optional_attributes`` | An dictionary of key value pairs containing additional data attributes to include in the button. | Dictionary | {'data-cta-text': 'Get Mozilla VPN', 'data-cta-type': 'button', 'data-cta-position': 'navigation'} |
+| ``optional_attributes`` | An dictionary of key value pairs containing additional data attributes to include in the button. | Dictionary | {'data-cta-text': 'Get Mozilla VPN', 'data-cta-type': 'vpn', 'data-cta-position': 'navigation'} |
+--------------------------+--------------------------------------------------------------------------------------------------+-----------------------------------+----------------------------------------------------------------------------------------------------+
The cookie has the following configuration:
diff --git a/docs/l10n.rst b/docs/l10n.rst
index 331ad2d2063..910fd95183f 100644
--- a/docs/l10n.rst
+++ b/docs/l10n.rst
@@ -212,7 +212,7 @@ attributes but we do occasionally pass classes with other tags.)
.. code-block:: jinja
- {% set created_attrs = 'href="%s" data-cta-type="link" data-cta-text="created by Mozilla"'|safe|format(url('mozorg.about.index')) %}
+ {% set created_attrs = 'href="%s" data-cta-text="created by Mozilla"'|safe|format(url('mozorg.about.index')) %}
{{ ftl('example-created', attrs=created_attrs) }}
{{ ftl('example-firefox-relay', class_name='class="mzp-c-wordmark mzp-t-wordmark-md mzp-t-product-relay"') }}
diff --git a/docs/mozilla-accounts.rst b/docs/mozilla-accounts.rst
index 0c0303953df..5dc0d2aa691 100644
--- a/docs/mozilla-accounts.rst
+++ b/docs/mozilla-accounts.rst
@@ -200,7 +200,7 @@ all support the same standard parameters:
+---------------------+-------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+--------------------------------------------------------------------------------------------------------+
| optional_parameters | An dictionary of key value pairs containing additional parameters to append the the href. | Dictionary | {'s': 'ffpocket'} |
+---------------------+-------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+--------------------------------------------------------------------------------------------------------+
-| optional_attributes | An dictionary of key value pairs containing additional data attributes to include in the button. | Dictionary | {'data-cta-text': 'Try Pocket Now', 'data-cta-type': 'activate pocket','data-cta-position': 'primary'} |
+| optional_attributes | An dictionary of key value pairs containing additional data attributes to include in the button. | Dictionary | {'data-cta-text': 'Try Pocket Now', 'data-cta-type': 'pocket','data-cta-position': 'primary'} |
+---------------------+-------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+--------------------------------------------------------------------------------------------------------+
.. Note::
diff --git a/media/js/base/banners/mozilla-banner.es6.js b/media/js/base/banners/mozilla-banner.es6.js
index c8a6394566e..8e386a3bbc6 100644
--- a/media/js/base/banners/mozilla-banner.es6.js
+++ b/media/js/base/banners/mozilla-banner.es6.js
@@ -62,13 +62,6 @@ MozBanner.close = function () {
// Set a cookie to not display it again.
MozBanner.setCookie(MozBanner.id);
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eLabel: 'Banner Dismissal',
- 'data-banner-name': MozBanner.id,
- 'data-banner-dismissal': '1'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/base/protocol/init-lang-switcher.es6.js b/media/js/base/protocol/init-lang-switcher.es6.js
index 04722bb42a1..c4759449522 100644
--- a/media/js/base/protocol/init-lang-switcher.es6.js
+++ b/media/js/base/protocol/init-lang-switcher.es6.js
@@ -10,12 +10,6 @@
import MzpLangSwitcher from '@mozilla-protocol/core/protocol/js/lang-switcher';
MzpLangSwitcher.init(function (previousLanguage, newLanguage) {
- // UA
- window.dataLayer.push({
- event: 'change-language',
- languageSelected: newLanguage,
- previousLanguage: previousLanguage
- });
//GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/base/send-to-device.es6.js b/media/js/base/send-to-device.es6.js
index 0c7dcaa708d..0002eef4c58 100644
--- a/media/js/base/send-to-device.es6.js
+++ b/media/js/base/send-to-device.es6.js
@@ -152,12 +152,6 @@ SendToDevice.prototype.onFormSuccess = function () {
this.enableForm();
- // UA
- window.dataLayer.push({
- event: 'send-to-device-success',
- input: 'email-address'
- });
-
// GA4
window.dataLayer.push({
event: 'send_to_device',
diff --git a/media/js/firefox/all/all-init.es6.js b/media/js/firefox/all/all-init.es6.js
index f2aef258d1f..8f52040b5b6 100644
--- a/media/js/firefox/all/all-init.es6.js
+++ b/media/js/firefox/all/all-init.es6.js
@@ -23,12 +23,6 @@ import MzpModal from '@mozilla-protocol/core/protocol/js/modal';
className: 'help-modal'
});
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'link click',
- eLabel: eventLabel
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/challenge-the-default/challenge-the-default.es6.js b/media/js/firefox/challenge-the-default/challenge-the-default.es6.js
index a1cf8c23b85..f95da3daadc 100644
--- a/media/js/firefox/challenge-the-default/challenge-the-default.es6.js
+++ b/media/js/firefox/challenge-the-default/challenge-the-default.es6.js
@@ -49,13 +49,6 @@ for (let index = 0; index < summaries.length; index++) {
}
if (!parent.hasAttribute('open')) {
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'Open details',
- eLabel: label
- });
-
// GA4
window.dataLayer.push({
event: 'widget_action',
@@ -89,12 +82,6 @@ kittenButton.addEventListener(
}
});
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'Kitten modal'
- });
-
// GA4
window.dataLayer.push({
event: 'widget_action',
@@ -145,11 +132,6 @@ for (let index = 0; index < toggles.length; index++) {
input.parentElement.classList.toggle('animate-slide');
}
checkToggles();
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'Toggle change'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
@@ -179,11 +161,6 @@ heroClose.addEventListener(
heroEasterEgg.classList.toggle('hidden');
}, 4500);
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'Hero close'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
@@ -216,11 +193,6 @@ function isWednesday() {
wednesdayWrapper.classList.remove('animate-wednesday');
}, 5000);
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'Wednesday Lizard View'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/family/banner.es6.js b/media/js/firefox/family/banner.es6.js
index 8ff9f9a3038..0cfcec1068e 100644
--- a/media/js/firefox/family/banner.es6.js
+++ b/media/js/firefox/family/banner.es6.js
@@ -33,13 +33,6 @@ function showBanner() {
}
function hideBanner() {
- // UA
- window.dataLayer.push({
- eLabel: 'Banner Dismissal',
- 'data-banner-name': 'firefox-for-families-banner',
- 'data-banner-dismissal': '1',
- event: 'in-page-interaction'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/new/common/thanks-direct.es6.js b/media/js/firefox/new/common/thanks-direct.es6.js
index 2fe418a461e..45d98ea1b0d 100644
--- a/media/js/firefox/new/common/thanks-direct.es6.js
+++ b/media/js/firefox/new/common/thanks-direct.es6.js
@@ -82,12 +82,6 @@ function onSuccess() {
requestComplete = true;
// Fire GA event to log attribution success
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'direct-attribution',
- eLabel: 'success'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
@@ -108,12 +102,6 @@ function onTimeout() {
requestComplete = true;
// Fire GA event to log attribution timeout
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'direct-attribution',
- eLabel: 'timeout'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/new/desktop/download.js b/media/js/firefox/new/desktop/download.js
index a6ccc5b62bc..d073ae28dcb 100644
--- a/media/js/firefox/new/desktop/download.js
+++ b/media/js/firefox/new/desktop/download.js
@@ -188,12 +188,6 @@
function handleOpenProtectionReport(e) {
e.preventDefault();
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'link click',
- eLabel: 'See your protection report'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/set-as-default/thanks.js b/media/js/firefox/set-as-default/thanks.js
index b61649d36c9..8fc63323a15 100644
--- a/media/js/firefox/set-as-default/thanks.js
+++ b/media/js/firefox/set-as-default/thanks.js
@@ -27,8 +27,6 @@
function onDefaultSwitch() {
document.querySelector('main').classList.add('is-firefox-default');
- // UA
- trackEvent('default-changed', 'success');
// GA4
window.dataLayer.push({
event: 'default_browser_set'
@@ -50,15 +48,6 @@
});
}
- // UA
- function trackEvent(action, label) {
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: action,
- eLabel: label
- });
- }
-
function isSupported() {
return Mozilla.Client.isFirefoxDesktop && 'Promise' in window;
}
@@ -78,8 +67,6 @@
document
.querySelector('main')
.classList.add('is-firefox-default');
- // UA
- trackEvent('visited', 'firefox-default');
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -101,8 +88,6 @@
timer = setInterval(checkForDefaultSwitch, 1000);
}, 1500);
}
- // UA
- trackEvent('visited', 'firefox-not-default');
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/firefox/share-page.es6.js b/media/js/firefox/share-page.es6.js
index bab81f9df4d..464f10c91cb 100644
--- a/media/js/firefox/share-page.es6.js
+++ b/media/js/firefox/share-page.es6.js
@@ -25,13 +25,6 @@ function copyText() {
copyButtonText.style.display = 'block';
}, 2500);
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'copy',
- eLabel: 'Copy and share'
- });
-
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/welcome/welcome6.es6.js b/media/js/firefox/welcome/welcome6.es6.js
index 9459bbeda73..0cde7020536 100644
--- a/media/js/firefox/welcome/welcome6.es6.js
+++ b/media/js/firefox/welcome/welcome6.es6.js
@@ -30,12 +30,6 @@ trigger.addEventListener(
closeText: window.Mozilla.Utils.trans('global-close')
});
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'link click',
- eLabel: 'Get Firefox for mobile'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/welcome/welcome8.js b/media/js/firefox/welcome/welcome8.js
index eb2c5ccafad..288313875f7 100644
--- a/media/js/firefox/welcome/welcome8.js
+++ b/media/js/firefox/welcome/welcome8.js
@@ -9,12 +9,6 @@
function handleOpenProtectionReport(e) {
e.preventDefault();
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'link click',
- eLabel: 'View your protection report'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
@@ -27,12 +21,6 @@
function handleOpenProtectionReportLink(e) {
e.preventDefault();
- // UA
- window.dataLayer.push({
- event: 'in-page-interaction',
- eAction: 'link click',
- eLabel: 'See what`s blocked'
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/media/js/firefox/whatsnew/whatsnew-125-eu.js b/media/js/firefox/whatsnew/whatsnew-125-eu.js
index 32586f71ee5..1383a3f036a 100644
--- a/media/js/firefox/whatsnew/whatsnew-125-eu.js
+++ b/media/js/firefox/whatsnew/whatsnew-125-eu.js
@@ -10,26 +10,12 @@
// Log account status
Mozilla.Client.getFxaDetails(function (details) {
if (details.setup) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-eu',
- eLabel: 'firefox-signed-in'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-eu',
- eLabel: 'firefox-signed-out'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -41,26 +27,12 @@
// Log default status
Mozilla.UITour.getConfiguration('appinfo', function (details) {
if (details.defaultBrowser) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-eu',
- eLabel: 'firefox-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-eu',
- eLabel: 'firefox-not-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/firefox/whatsnew/whatsnew-125-na.js b/media/js/firefox/whatsnew/whatsnew-125-na.js
index 69a3192f964..7fdda2897b6 100644
--- a/media/js/firefox/whatsnew/whatsnew-125-na.js
+++ b/media/js/firefox/whatsnew/whatsnew-125-na.js
@@ -11,13 +11,6 @@ function defaultTrue() {
document.querySelector('.wnp-default').classList.add('hide');
document.querySelector('.wnp-fast').classList.add('show');
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-na',
- eLabel: 'default-true'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -32,13 +25,6 @@ function defaultFalse() {
document.querySelector('.wnp-fast').classList.add('hide');
document.querySelector('.wnp-default').classList.add('show');
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-na',
- eLabel: 'default-false'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -68,26 +54,12 @@ function init() {
// Log account status
Mozilla.Client.getFxaDetails((details) => {
if (details.setup) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-na',
- eLabel: 'firefox-signed-in'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-125-na',
- eLabel: 'firefox-signed-out'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/firefox/whatsnew/whatsnew-126.js b/media/js/firefox/whatsnew/whatsnew-126.js
index 6e29af92de2..f0123341397 100644
--- a/media/js/firefox/whatsnew/whatsnew-126.js
+++ b/media/js/firefox/whatsnew/whatsnew-126.js
@@ -9,26 +9,12 @@ Mozilla.Client.getFxaDetails((details) => {
'use strict';
if (details.setup) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126',
- eLabel: 'firefox-signed-in'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126',
- eLabel: 'firefox-signed-out'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -42,26 +28,12 @@ Mozilla.UITour.getConfiguration('appinfo', (details) => {
'use strict';
if (details.defaultBrowser) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126',
- eLabel: 'firefox-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126',
- eLabel: 'firefox-not-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/firefox/whatsnew/whatsnew-126beta.js b/media/js/firefox/whatsnew/whatsnew-126beta.js
index fffb586757e..1383a3f036a 100644
--- a/media/js/firefox/whatsnew/whatsnew-126beta.js
+++ b/media/js/firefox/whatsnew/whatsnew-126beta.js
@@ -10,26 +10,12 @@
// Log account status
Mozilla.Client.getFxaDetails(function (details) {
if (details.setup) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126beta',
- eLabel: 'firefox-signed-in'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126beta',
- eLabel: 'firefox-signed-out'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -41,26 +27,12 @@
// Log default status
Mozilla.UITour.getConfiguration('appinfo', function (details) {
if (details.defaultBrowser) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126beta',
- eLabel: 'firefox-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-126beta',
- eLabel: 'firefox-not-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/firefox/whatsnew/whatsnew-127-eu.js b/media/js/firefox/whatsnew/whatsnew-127-eu.js
index d157a7da39d..758a92875b0 100644
--- a/media/js/firefox/whatsnew/whatsnew-127-eu.js
+++ b/media/js/firefox/whatsnew/whatsnew-127-eu.js
@@ -9,26 +9,12 @@ Mozilla.Client.getFxaDetails((details) => {
'use strict';
if (details.setup) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-signed-in'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-signed-out'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -42,26 +28,12 @@ Mozilla.UITour.getConfiguration('appinfo', (details) => {
'use strict';
if (details.defaultBrowser) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-not-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/firefox/whatsnew/whatsnew-127-na.js b/media/js/firefox/whatsnew/whatsnew-127-na.js
index dbe9ca78b6d..f0123341397 100644
--- a/media/js/firefox/whatsnew/whatsnew-127-na.js
+++ b/media/js/firefox/whatsnew/whatsnew-127-na.js
@@ -9,26 +9,12 @@ Mozilla.Client.getFxaDetails((details) => {
'use strict';
if (details.setup) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-signed-in'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_signed_in: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-signed-out'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
@@ -42,26 +28,12 @@ Mozilla.UITour.getConfiguration('appinfo', (details) => {
'use strict';
if (details.defaultBrowser) {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
firefox_is_default: true
});
} else {
- // UA
- window.dataLayer.push({
- event: 'non-interaction',
- eAction: 'whatsnew-127',
- eLabel: 'firefox-not-default'
- });
-
// GA4
window.dataLayer.push({
event: 'dimension_set',
diff --git a/media/js/newsletter/newsletter-init.es6.js b/media/js/newsletter/newsletter-init.es6.js
index 0981a671919..d105cb35032 100644
--- a/media/js/newsletter/newsletter-init.es6.js
+++ b/media/js/newsletter/newsletter-init.es6.js
@@ -14,11 +14,6 @@ const successCustomCallback = () => {
).map((newsletter) => newsletter.value);
if (window.dataLayer) {
- // UA
- window.dataLayer.push({
- event: 'newsletter-signup-success',
- newsletter: newsletters
- });
// GA4
for (let i = 0; i < newsletters.length; ++i) {
window.dataLayer.push({
diff --git a/media/js/products/vpn/resource-center-article.es6.js b/media/js/products/vpn/resource-center-article.es6.js
index 1ce18d1248d..445acdc3120 100644
--- a/media/js/products/vpn/resource-center-article.es6.js
+++ b/media/js/products/vpn/resource-center-article.es6.js
@@ -9,12 +9,6 @@ const upvoteBtn = document.querySelector('.vpn-c-vote-btn.up');
const downvoteBtn = document.querySelector('.vpn-c-vote-btn.down');
function trackVoteInteraction(url, vote) {
- // UA
- window.dataLayer.push({
- event: 'vpn-article-vote',
- label: url,
- value: vote
- });
// GA4
window.dataLayer.push({
event: 'widget_action',
diff --git a/tests/unit/spec/products/vpn/invite.js b/tests/unit/spec/products/vpn/invite.js
index 48122cc0449..1c6c9766ab3 100644
--- a/tests/unit/spec/products/vpn/invite.js
+++ b/tests/unit/spec/products/vpn/invite.js
@@ -71,7 +71,7 @@ describe('WaitListForm', function () {
- Join the Waitlist
+ Join the Waitlist
From 8e5ccd4d95eba92e92e16acd4b7e18031ae061dc Mon Sep 17 00:00:00 2001
From: Stephanie Hobson
Date: Mon, 7 Oct 2024 11:23:39 -0700
Subject: [PATCH 2/2] review fixes
---
.../navigation/menus-refresh/about-us.html | 12 +++----
.../navigation/menus-refresh/firefox.html | 10 +++---
.../navigation/menus-refresh/products.html | 16 +++++-----
.../templates/firefox/all/download.html | 2 +-
.../firefox/templates/firefox/all/mobile.html | 2 +-
.../firefox/built-for-you/landing.de.html | 6 ++--
.../firefox/built-for-you/landing.fr.html | 6 ++--
.../firefox/features/includes/subnav.html | 31 -------------------
bedrock/firefox/templates/firefox/index.html | 2 +-
.../firefox/whatsnew/whatsnew-fx131-eu.html | 4 +--
docs/attribution/0001-analytics.rst | 10 +++---
docs/attribution/0002-firefox-desktop.rst | 6 ++--
docs/mozilla-accounts.rst | 2 +-
13 files changed, 41 insertions(+), 68 deletions(-)
delete mode 100644 bedrock/firefox/templates/firefox/features/includes/subnav.html
diff --git a/bedrock/base/templates/includes/protocol/navigation/menus-refresh/about-us.html b/bedrock/base/templates/includes/protocol/navigation/menus-refresh/about-us.html
index a9459b4a669..2f856bbc152 100644
--- a/bedrock/base/templates/includes/protocol/navigation/menus-refresh/about-us.html
+++ b/bedrock/base/templates/includes/protocol/navigation/menus-refresh/about-us.html
@@ -13,42 +13,42 @@
diff --git a/bedrock/base/templates/includes/protocol/navigation/menus-refresh/firefox.html b/bedrock/base/templates/includes/protocol/navigation/menus-refresh/firefox.html
index a6ba26fe59f..5fba6df803c 100644
--- a/bedrock/base/templates/includes/protocol/navigation/menus-refresh/firefox.html
+++ b/bedrock/base/templates/includes/protocol/navigation/menus-refresh/firefox.html
@@ -18,7 +18,7 @@
diff --git a/bedrock/firefox/templates/firefox/built-for-you/landing.de.html b/bedrock/firefox/templates/firefox/built-for-you/landing.de.html
index 0453c55c309..973300623d0 100644
--- a/bedrock/firefox/templates/firefox/built-for-you/landing.de.html
+++ b/bedrock/firefox/templates/firefox/built-for-you/landing.de.html
@@ -46,7 +46,7 @@
Gemacht mit Blick auf deine Sicherheit
Keine Kompromisse, bei den Dingen, die dir wichtig sind: Sicherheit, Produktivität und die Freiheit, so zu sein, wie du willst – mit Firefox.
@@ -167,7 +167,7 @@
Rase durchs Web
Dank Firefox vergisst du, was Lag bedeutet. Unser Browser war nie schneller und lädt jetzt YouTube-Videos schneller als jemals zuvor.
@@ -188,7 +188,7 @@ Rase durchs Web
Wähle einen Browser, der für dich gemacht ist
diff --git a/bedrock/firefox/templates/firefox/built-for-you/landing.fr.html b/bedrock/firefox/templates/firefox/built-for-you/landing.fr.html
index 8af0aa27d6f..e71731205de 100644
--- a/bedrock/firefox/templates/firefox/built-for-you/landing.fr.html
+++ b/bedrock/firefox/templates/firefox/built-for-you/landing.fr.html
@@ -46,7 +46,7 @@
Conçu pour ta sécurité
Ne fais plus de compromis sur ce qui compte pour toi : être en sécurité, plus productif et libre d’être qui tu veux, avec Firefox.
@@ -167,7 +167,7 @@
Accélère ton expérience web
Avec Firefox, fini le temps des pages lentes à charger. Notre navigateur n’a jamais été aussi rapide ; les vidéos Youtube se chargent en un éclair.
@@ -188,7 +188,7 @@ Accélère ton expérience web
Choisis un navigateur pensé pour toi
diff --git a/bedrock/firefox/templates/firefox/features/includes/subnav.html b/bedrock/firefox/templates/firefox/features/includes/subnav.html
deleted file mode 100644
index 143b0551a69..00000000000
--- a/bedrock/firefox/templates/firefox/features/includes/subnav.html
+++ /dev/null
@@ -1,31 +0,0 @@
-{#
- 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/.
-#}
-
-{# Subnav menu for /firefox/features/ #}
-{% if ftl_has_messages('sub-navigation-firefox-features', 'sub-navigation-sync', 'sub-navigation-ad-tracker-blocking', 'sub-navigation-private-browsing') %}
-
-
-
-{% endif %}
diff --git a/bedrock/firefox/templates/firefox/index.html b/bedrock/firefox/templates/firefox/index.html
index a39faba53c5..105d1ff1639 100644
--- a/bedrock/firefox/templates/firefox/index.html
+++ b/bedrock/firefox/templates/firefox/index.html
@@ -118,7 +118,7 @@
-
+
{{ ftl('ui-learn-more') }}
diff --git a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx131-eu.html b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx131-eu.html
index f5f3b933037..28c74281d27 100644
--- a/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx131-eu.html
+++ b/bedrock/firefox/templates/firefox/whatsnew/whatsnew-fx131-eu.html
@@ -82,11 +82,11 @@
{{ main_title }}
{{ main_tagline }}
{% if nimbus_variant == 'v4' %}
-
+
{{ main_cta }}
{% else %}
-
+
{{ main_cta }}
{% endif %}
diff --git a/docs/attribution/0001-analytics.rst b/docs/attribution/0001-analytics.rst
index eae538d062b..8d04b16c621 100644
--- a/docs/attribution/0001-analytics.rst
+++ b/docs/attribution/0001-analytics.rst
@@ -16,7 +16,7 @@ We use Google Analytics (GA) to track how our website is used.
*Implementation*
Google calls a 3rd party JavaScript library that is imported by adding a script tag to a website,
-Google names these "tag"s.
+Google names these "tags".
We include the tag for Google Tag Manager (GTM) on our website. GTM is a service meant to simplify and centralize
the tags included on a website in cases where multiple tags are needed. Their web-based user interface can then be
@@ -74,7 +74,7 @@ Enhanced Event Measurement
Pageviews, scrolls, video events, and outbound link clicks are being collected using GA4's `enhanced event measurement`_.
-Some form submissions are also being collected but newsletter signups are not. `(See Bug #13348)`_ They are instead
+Some form submissions are also being collected but newsletter signups are not `(see bug #13348)`_ . They are instead
being tracked with the ``newsletter_subscribe`` event.
See the full list of events GA collects by default. https://support.google.com/analytics/answer/9216061
@@ -93,7 +93,7 @@ CTA ("Call to Action") click is intented to track the one or two main actions th
to do. This data-attribute can be used on either ``
`` or ````. Links can go to or away from the site,
a button might trigger a JS function instead of going away from the page, that's still a cta.
-The attribute ``data-cta-text`` must be present to trigger the event. All links to accounts.firefox.com must also use cta-type.
+The attribute ``data-cta-text`` must be present to trigger the event. All links to accounts.mozilla.com must also use ``data-cta-type``.
+-----------------------+----------------------------------------------------------------------------------+
| Data Attribute | Expected Value |
@@ -103,6 +103,7 @@ The attribute ``data-cta-text`` must be present to trigger the event. All links
| | |
| | - This does not need to exactly match the text displayed to the user |
| | - Defining this is useful to group the link clicks across locales |
+| | - * this attribute is required |
+-----------------------+----------------------------------------------------------------------------------+
| ``data-cta-position`` | Location of CTA on the page (e.g. ``primary``, ``secondary``, ``banner``, |
| | ``pricing``) |
@@ -115,6 +116,7 @@ The attribute ``data-cta-text`` must be present to trigger the event. All links
+-----------------------+----------------------------------------------------------------------------------+
+
.. code-block:: html
Check for breaches
@@ -137,6 +139,7 @@ The attribute ``data-link-text`` must be present to trigger the event.
+=======================+================================================================================================+
| ``data-link-text`` * | Text or name of the link (e.g. ``Monitor``, ``Features``, ``Instagram (mozilla)``, |
| | ``Mozilla VPN``). |
+| | - * this attribute is required |
+-----------------------+------------------------------------------------------------------------------------------------+
| ``data-link-position``| Location of CTA on the page (e.g. ``topnav``, ``subnav``, ``body``, ``features``) |
+-----------------------+------------------------------------------------------------------------------------------------+
@@ -227,7 +230,6 @@ script is expecting the following values:
+---------------+----------------------------------------------------------------------------------+
-
- item_id: Stripe Plan ID
- brand: ``relay``, ``vpn``, or ``monitor``
- plan:
diff --git a/docs/attribution/0002-firefox-desktop.rst b/docs/attribution/0002-firefox-desktop.rst
index f3b1968afbf..8f1b6c26434 100644
--- a/docs/attribution/0002-firefox-desktop.rst
+++ b/docs/attribution/0002-firefox-desktop.rst
@@ -8,8 +8,6 @@
Firefox desktop attribution
===========================
-TODO: add something about `data-download-version` being checked to apened stub attribution.
-
Firefox Desktop Attribution (often referred to as Stub Attribution) is a system
that enables Mozilla to link website attributable referral data (including Google
Analytics data) to a user's Firefox profile. When a website visitor lands on
@@ -68,6 +66,10 @@ of the steps below (Mozilla access only).
#. During analysis, the download token can be used to join Telemetry data
with the corresponding GA data in the server logs.
+.. Note::
+
+ The stub attribution script uses the attribute ``data-download-version`` to identify what links are download links.
+
Attribution data
----------------
diff --git a/docs/mozilla-accounts.rst b/docs/mozilla-accounts.rst
index 5dc0d2aa691..ba45af9cb79 100644
--- a/docs/mozilla-accounts.rst
+++ b/docs/mozilla-accounts.rst
@@ -200,7 +200,7 @@ all support the same standard parameters:
+---------------------+-------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+--------------------------------------------------------------------------------------------------------+
| optional_parameters | An dictionary of key value pairs containing additional parameters to append the the href. | Dictionary | {'s': 'ffpocket'} |
+---------------------+-------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+--------------------------------------------------------------------------------------------------------+
-| optional_attributes | An dictionary of key value pairs containing additional data attributes to include in the button. | Dictionary | {'data-cta-text': 'Try Pocket Now', 'data-cta-type': 'pocket','data-cta-position': 'primary'} |
+| optional_attributes | An dictionary of key value pairs containing additional data attributes to include in the button. | Dictionary | {'data-cta-text': 'Try Pocket Now', 'data-cta-type': 'pocket','data-cta-position': 'primary'} |
+---------------------+-------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+--------------------------------------------------------------------------------------------------------+
.. Note::