From 7ed8428cccf7242516c4f1708b3bdfb063ab8c65 Mon Sep 17 00:00:00 2001 From: Henry Wilkes Date: Mon, 15 Sep 2025 19:37:58 +0100 Subject: [PATCH 1/3] fixup! Tor Browser strings TB 44032: Add YEC strings. These strings are likely to be used in future year end campaigns, so we keep them separate from the 2025-specific strings. --- toolkit/locales/en-US/toolkit/global/tor-browser.ftl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/toolkit/locales/en-US/toolkit/global/tor-browser.ftl b/toolkit/locales/en-US/toolkit/global/tor-browser.ftl index 8ee4e3484afd..6291adbba864 100644 --- a/toolkit/locales/en-US/toolkit/global/tor-browser.ftl +++ b/toolkit/locales/en-US/toolkit/global/tor-browser.ftl @@ -721,3 +721,10 @@ onion-site-saved-keys-dialog-remove-button = Remove onion-site-saved-keys-dialog-remove-all-button = Remove all onion-site-saved-keys-dialog-fetch-keys-error-message = Unable to retrieve keys from Tor onion-site-saved-keys-dialog-remove-keys-error-message = Unable to remove key + +## Year end campaign. + +yec-donate-button = Donate now +# Here "Close" is a verb, referring to closing the banner. +yec-close-button = + .title = Close -- GitLab From 4f94de34f9aae2ac9d6bc8b4f8a7f94eee05eaa2 Mon Sep 17 00:00:00 2001 From: Henry Wilkes Date: Tue, 3 Sep 2024 18:49:17 +0100 Subject: [PATCH 2/3] fixup! TB 7494: Create local home page for TBB. TB 44032: Implement the 2025 YEC banner. This adds the 2025 year end campaign banner. We want to keep this beyond the end of the campaign since next year's campaign is likely going to be similar. Assets specific to 2025 are in a separate commit. --- .../components/DesktopActorRegistry.sys.mjs | 1 + .../components/abouttor/AboutTorChild.sys.mjs | 17 ++ .../abouttor/AboutTorParent.sys.mjs | 44 +++- .../components/abouttor/content/aboutTor.css | 199 +++++++++++++++ .../components/abouttor/content/aboutTor.html | 25 ++ .../components/abouttor/content/aboutTor.js | 227 +++++++++++++++--- .../components/abouttor/content/yec-heart.svg | 4 + browser/components/abouttor/jar.mn | 1 + 8 files changed, 486 insertions(+), 32 deletions(-) create mode 100644 browser/components/abouttor/content/yec-heart.svg diff --git a/browser/components/DesktopActorRegistry.sys.mjs b/browser/components/DesktopActorRegistry.sys.mjs index ba219ac629bc..020e6a9d3d6a 100644 --- a/browser/components/DesktopActorRegistry.sys.mjs +++ b/browser/components/DesktopActorRegistry.sys.mjs @@ -202,6 +202,7 @@ let JSWINDOWACTORS = { L10nMutationsFinished: {}, SubmitSearchOnionize: { wantUntrusted: true }, SurveyDismissed: { wantUntrusted: true }, + UserDismissedYEC: { wantUntrusted: true }, }, }, diff --git a/browser/components/abouttor/AboutTorChild.sys.mjs b/browser/components/abouttor/AboutTorChild.sys.mjs index 1411e541dfc7..f2baac072ee5 100644 --- a/browser/components/abouttor/AboutTorChild.sys.mjs +++ b/browser/components/abouttor/AboutTorChild.sys.mjs @@ -26,6 +26,23 @@ export class AboutTorChild extends JSWindowActorChild { new this.contentWindow.CustomEvent("L10nMutationsFinished") ); break; + case "UserDismissedYEC": + // YEC banner was closed. Persist this for the rest of this session. + // See tor-browser#42188. + this.sendAsyncMessage("AboutTor:UserDismissedYEC"); + break; + } + } + + receiveMessage(message) { + switch (message.name) { + case "AboutTor:DismissYEC": { + this.contentWindow.dispatchEvent( + new this.contentWindow.CustomEvent("DismissYEC") + ); + break; + } } + return undefined; } } diff --git a/browser/components/abouttor/AboutTorParent.sys.mjs b/browser/components/abouttor/AboutTorParent.sys.mjs index 379d3b4e0842..eb3692b28f1e 100644 --- a/browser/components/abouttor/AboutTorParent.sys.mjs +++ b/browser/components/abouttor/AboutTorParent.sys.mjs @@ -7,16 +7,37 @@ ChromeUtils.defineESModuleGetters(lazy, { TorConnect: "resource://gre/modules/TorConnect.sys.mjs", }); +const initializedActors = new Set(); + /** * Actor parent class for the about:tor page. */ export class AboutTorParent extends JSWindowActorParent { + /* + * Whether the user has dismissed the Year End Campaign (YEC) banner this + * session. + * + * @type {boolean} + */ + static #dismissYEC = false; + + didDestroy() { + initializedActors.delete(this); + } + receiveMessage(message) { const onionizePref = "torbrowser.homepage.search.onionize"; const surveyDismissVersionPref = "torbrowser.homepage.survey.dismiss_version"; switch (message.name) { - case "AboutTor:GetInitialData": + case "AboutTor:GetInitialData": { + // Track this actor to send future updates. + initializedActors.add(this); + + let appLocale = Services.locale.appLocaleAsBCP47; + if (appLocale === "ja-JP-macos") { + appLocale = "ja"; + } return Promise.resolve({ torConnectEnabled: lazy.TorConnect.enabled, messageData: lazy.AboutTorMessage.getNext(), @@ -26,8 +47,10 @@ export class AboutTorParent extends JSWindowActorParent { surveyDismissVersionPref, 0 ), - appLocale: Services.locale.appLocaleAsBCP47, + appLocale, + dismissYEC: AboutTorParent.#dismissYEC, }); + } case "AboutTor:SetSearchOnionize": Services.prefs.setBoolPref(onionizePref, message.data); break; @@ -43,6 +66,23 @@ export class AboutTorParent extends JSWindowActorParent { // the version value to decrease. Services.prefs.setIntPref(surveyDismissVersionPref, message.data); break; + case "AboutTor:UserDismissedYEC": + AboutTorParent.#dismissYEC = true; + for (const actor of initializedActors) { + if (actor === this) { + // Don't send to ourselves. + continue; + } + // Tell all existing instances to also close the banner, if they still + // exist. + // NOTE: If the user's new tab page is `about:tor`, this may include + // some preloaded pages that have not been made visible yet (see + // NewTabPagePreloading). + try { + actor.sendAsyncMessage("AboutTor:DismissYEC"); + } catch {} + } + break; } return undefined; } diff --git a/browser/components/abouttor/content/aboutTor.css b/browser/components/abouttor/content/aboutTor.css index c6e4925b8ee4..5140aac1aa78 100644 --- a/browser/components/abouttor/content/aboutTor.css +++ b/browser/components/abouttor/content/aboutTor.css @@ -326,3 +326,202 @@ body:not(.show-survey) #survey { --in-content-primary-button-background-active: var(--tor-button-background-color-active-dark); } } + +/* Year End Campaign (YEC). */ +body:not(.show-yec) #yec-banner { + display: none; +} + +body.show-yec h1 { + /* Text of heading is still available to screen readers, but it does not + * contribute visually to the page or the body grid layout. */ + position: absolute; + clip-path: inset(50%); +} + +#yec-banner { + grid-area: heading; + border-radius: 8px; + border: 1px solid var(--in-content-box-border-color); + display: grid; + grid-template: + "yec-heading yec-image" auto + "yec-body yec-image" auto + "yec-matching yec-image" auto + "yec-donate yec-image" min-content + / 1fr min-content; + --yec-image-background: #1f0333; + /* Remove 1px from padding for border. */ + padding-block: 55px 55px; + padding-inline: 47px 47px; + box-sizing: border-box; + max-width: 850px; + margin-block-end: 40px; + /* Position for the close button. */ + position: relative; + gap: 0 24px; +} + +#yec-image { + grid-area: yec-image; + align-self: center; + /* Center horizontally for small width layout. */ + justify-self: center; + /* background color, padding and border radius only stands out when using a + * contrast or forced color theme. */ + background-color: var(--yec-image-background); + border-radius: 8px; + padding: 4px; + height: 196px; + border: 1px solid transparent; + /* Remove border and padding from the layout size. These parts are only + * visible in contrast or forced color themes. */ + margin: -5px; + /* Do not let forced colors ignore the background-color, which is needed to + * see the drawing. */ + forced-color-adjust: none; +} + +#yec-image:dir(rtl) { + transform: scaleX(-1); +} + +#yec-heading { + grid-area: yec-heading; + margin-block: 0 16px; + font-size: 64px; + font-weight: 400; +} + +#yec-body { + grid-area: yec-body; + margin-block: 0 12px; +} + +#yec-body-highlight { + font-weight: 600; +} + +#yec-matching { + grid-area: yec-matching; + margin-block: 0 32px; +} + +#yec-donate-link { + grid-area: yec-donate; + justify-self: start; + /* Style like a button. */ + font-weight: var(--button-font-weight); + color: var(--in-content-button-text-color); + border: 1px solid var(--in-content-button-border-color); + border-radius: 4px; + background-color: var(--in-content-button-background); + padding: var(--button-padding); + box-sizing: border-box; + min-height: var(--button-min-height); + text-decoration: none; + display: flex; + align-items: center; + gap: 8px; + white-space: nowrap; +} + +#yec-donate-link > * { + flex: 0 0 auto; +} + +#yec-donate-link:hover { + background-color: var(--in-content-button-background-hover); + color: var(--in-content-button-text-color-hover); + border-color: var(--in-content-button-border-color-hover); +} + +#yec-donate-link:hover:active { + background-color: var(--in-content-button-background-active); + color: var(--in-content-button-text-color-active); + border-color: var(--in-content-button-border-color-active); +} + +#yec-donate-icon { + -moz-context-properties: fill; + fill: currentColor; +} + +#yec-close { + position: absolute; + inset-block-start: 16px; + inset-inline-end: 16px; +} + +@media (max-width: 768px) { + /* Small width layout. */ + #yec-banner { + grid-template: + "yec-image" min-content + "yec-heading" auto + "yec-body" auto + "yec-matching" auto + "yec-donate" min-content + / 1fr; + padding-block: 31px 39px; + padding-inline: 15px; + /* Match max-width of the form. */ + max-width: var(--form-max-width); + margin-block-end: 32px; + } + + #yec-image { + height: 156px; + } + + #yec-heading { + margin-block-start: 16px; + text-align: center; + text-wrap-style: balance; + } + + #yec-heading { + font-size: 3.5rem; + } + + #yec-matching { + margin-block-end: 16px; + } + + #yec-donate-link { + justify-self: center; + } +} + +@media ((prefers-contrast) or (forced-colors)) and (prefers-color-scheme: dark) { + #yec-image { + /* Give the dark image a light border to separate from background. */ + border-color: var(--in-content-box-border-color); + } +} + +@media not ((prefers-contrast) or (forced-colors)) { + #yec-banner { + border-color: transparent; + background-color: var(--yec-image-background); + --yec-text: #ffffff; + --yec-button-background: #b6e368; + --yec-button-background-hover: #d2f2a1; + --yec-button-background-active: #ecfcd8; + --yec-button-text: #15141A; + color: var(--yec-text); + } + + #yec-body-highlight { + color: var(--yec-button-background); + } + + #yec-donate-link { + --in-content-button-text-color: var(--yec-button-text); + --in-content-button-text-color-hover: var(--yec-button-text); + --in-content-button-text-color-active: var(--yec-button-text); + --in-content-button-background: var(--yec-button-background); + --in-content-button-background-hover: var(--yec-button-background-hover); + --in-content-button-background-active: var(--yec-button-background-active); + } +} diff --git a/browser/components/abouttor/content/aboutTor.html b/browser/components/abouttor/content/aboutTor.html index ddb9ae88baeb..4e181d41d9bf 100644 --- a/browser/components/abouttor/content/aboutTor.html +++ b/browser/components/abouttor/content/aboutTor.html @@ -33,6 +33,31 @@ + +

{ - document.body.classList.add("initialized"); - }, - { once: true } - ); - } else { - document.body.classList.add("initialized"); - } }, }; @@ -185,16 +171,16 @@ const SurveyArea = { /** * The date to start showing the survey. * - * @type {integer} + * @type {?integer} */ - _startDate: Date.UTC(2025, 3, 14, 12), // 2025 April 14th, 12:00. + _startDate: null, // No survey date. /** * The date to stop showing the current survey. * - * @type {integer} + * @type {?integer} */ - _endDate: Date.UTC(2025, 3, 28), // 2025 April 28th, 00:00. + _endDate: null, // No survey date. /** * The survey URL. @@ -293,10 +279,41 @@ const SurveyArea = { }, ], + /** + * Whether the area has been initialised. + * + * @type {boolean} + */ + _initialized: false, + + /** + * The app locale, or `null` whilst unset. + * + * @type {?string} + */ + _locale: null, + + /** + * Whether the banner should be shown. + * + * @type {boolean} + */ + _shouldShow: false, + + /** + * The survey element. + * + * @type {?Element} + */ + _areaEl: null, + /** * Initialize the survey area. */ init() { + this._initialized = true; + + this._areaEl = document.getElementById("survey"); document.getElementById("survey-launch").addEventListener("click", () => { const url = URL.parse(this._urlBase); if (!url || !this._localeData) { @@ -312,15 +329,16 @@ const SurveyArea = { document.getElementById("survey-dismiss").addEventListener("click", () => { this._hide(); }); + + this._update(); }, /** * Permanently hide this survey. */ _hide() { - document.body.classList.remove("show-survey"); - // Move focus to the search input. - document.getElementById("search-input").focus(); + this._shouldShow = false; + this._update(); dispatchEvent( new CustomEvent("SurveyDismissed", { @@ -344,14 +362,29 @@ const SurveyArea = { */ potentiallyShow(dismissVersion, isStable, appLocale) { const now = Date.now(); - if ( - now < this._startDate || - now >= this._endDate || - // The user has already dismissed this version of the survey before: - dismissVersion >= this._version || - !isStable - ) { - // Don't show the survey. + this._shouldShow = + isStable && + dismissVersion < this._version && + this._startDate && + now >= this._startDate && + now < this._endDate; + this._locale = appLocale; + this._update(); + }, + + /** + * Update the display. + */ + _update() { + if (!this._initialized) { + return; + } + if (!this._shouldShow) { + if (this._areaEl.contains(document.activeElement)) { + // Move focus to the search input. + document.getElementById("search-input").focus(); + } + document.body.classList.remove("show-survey"); return; } @@ -361,7 +394,7 @@ const SurveyArea = { // match the languages that the survey itself supports. This should match // the language of the survey when it is opened by the user. for (const localeData of this._localeDataSet) { - if (localeData.browserLocales.includes(appLocale)) { + if (localeData.browserLocales.includes(this._locale)) { this._localeData = localeData; break; } @@ -388,10 +421,124 @@ const SurveyArea = { }, }; +/** + * Area for the Year End Campaign (YEC). + * See tor-browser#42072. + */ +const YecArea = { + /** + * The epoch time to start showing the banner, if at all. + * + * @type {?integer} + */ + _startDate: null, // No YEC is active. + + /** + * The epoch time to stop showing the banner, if at all. + * + * @type {?integer} + */ + _endDate: null, // No YEC is active. + + /** + * Whether the area has been initialised. + * + * @type {boolean} + */ + _initialized: false, + + /** + * The app locale, or `null` whilst unset. + * + * @type {?string} + */ + _locale: null, + + /** + * Whether the banner should be shown. + * + * @type {boolean} + */ + _shouldShow: false, + + /** + * The banner element. + * + * @type {?Element} + */ + _areaEl: null, + + /** + * Initialize the widget. + */ + init() { + this._initialized = true; + + this._areaEl = document.getElementById("yec-banner"); + + document.getElementById("yec-close").addEventListener("click", () => { + this.dismiss(); + dispatchEvent(new CustomEvent("UserDismissedYEC", { bubbles: true })); + }); + + this._update(); + }, + + /** + * Close the banner. + */ + dismiss() { + this._shouldShow = false; + this._update(); + }, + + /** + * Possibly show the banner. + * + * @param {boolean} dismissYEC - Whether the user has dismissed YEC. + * @param {boolean} isStable - Whether this is a stable release. + * @param {string} appLocale - The app locale, as BCP47. + */ + potentiallyShow(dismissYEC, isStable, appLocale) { + const now = Date.now(); + this._shouldShow = + !dismissYEC && + isStable && + this._startDate && + now >= this._startDate && + now < this._endDate; + this._locale = appLocale; + this._update(); + }, + + /** + * Update the visibility of the banner to reflect the new state. + */ + _update() { + if (!this._initialized) { + return; + } + if (!this._shouldShow) { + if (this._areaEl.contains(document.activeElement)) { + document.documentElement.focus(); + } + document.body.classList.remove("show-yec"); + return; + } + + const donateLink = document.getElementById("yec-donate-link"); + const base = "https://www.torproject.org/donate"; + donateLink.href = base; + + document.body.classList.add("show-yec"); + }, +}; + window.addEventListener("DOMContentLoaded", () => { SearchWidget.init(); MessageArea.init(); SurveyArea.init(); + YecArea.init(); }); window.addEventListener("InitialData", event => { @@ -402,8 +549,28 @@ window.addEventListener("InitialData", event => { messageData, surveyDismissVersion, appLocale, + dismissYEC, } = event.detail; SearchWidget.setOnionizeState(!!searchOnionize); MessageArea.setMessageData(messageData, !!isStable, !!torConnectEnabled); SurveyArea.potentiallyShow(surveyDismissVersion, isStable, appLocale); + YecArea.potentiallyShow(dismissYEC, isStable, appLocale); + + // Wait to show the content when the l10n population has completed. + if (document.hasPendingL10nMutations) { + window.addEventListener( + "L10nMutationsFinished", + () => { + document.body.classList.add("initialized"); + }, + { once: true } + ); + } else { + document.body.classList.add("initialized"); + } +}); + +window.addEventListener("DismissYEC", () => { + // User closed the banner in another about:tor instance. + YecArea.dismiss(); }); diff --git a/browser/components/abouttor/content/yec-heart.svg b/browser/components/abouttor/content/yec-heart.svg new file mode 100644 index 000000000000..4d5080450ff9 --- /dev/null +++ b/browser/components/abouttor/content/yec-heart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/browser/components/abouttor/jar.mn b/browser/components/abouttor/jar.mn index b9041c702193..c30e968ee99a 100644 --- a/browser/components/abouttor/jar.mn +++ b/browser/components/abouttor/jar.mn @@ -8,3 +8,4 @@ browser.jar: content/browser/abouttor/26a1-high-voltage.svg (content/26a1-high-voltage.svg) content/browser/abouttor/2728-sparkles.svg (content/2728-sparkles.svg) content/browser/abouttor/2764-red-heart.svg (content/2764-red-heart.svg) + content/browser/abouttor/yec-heart.svg (content/yec-heart.svg) -- GitLab From 6b51477c4766b6eb3de7e9c549b67e5dcba07488 Mon Sep 17 00:00:00 2001 From: Henry Wilkes Date: Mon, 15 Sep 2025 19:34:18 +0100 Subject: [PATCH 3/3] TB 44032: YEC 2025 assets. Assets only needed for the 2025 Year end campaign. --- .../components/abouttor/content/aboutTor.css | 7 ++ .../components/abouttor/content/aboutTor.html | 18 ++- .../components/abouttor/content/aboutTor.js | 34 +++++- .../abouttor/content/yec2025-font.css | 105 +++++++++++++++++ .../abouttor/content/yec2025-image.svg | 20 ++++ browser/components/abouttor/jar.mn | 2 + toolkit/content/license.html | 107 ++++++++++++++++++ .../en-US/toolkit/global/tor-browser.ftl | 10 ++ 8 files changed, 295 insertions(+), 8 deletions(-) create mode 100644 browser/components/abouttor/content/yec2025-font.css create mode 100644 browser/components/abouttor/content/yec2025-image.svg diff --git a/browser/components/abouttor/content/aboutTor.css b/browser/components/abouttor/content/aboutTor.css index 5140aac1aa78..5d41df503550 100644 --- a/browser/components/abouttor/content/aboutTor.css +++ b/browser/components/abouttor/content/aboutTor.css @@ -391,6 +391,13 @@ body.show-yec h1 { margin-block: 0 16px; font-size: 64px; font-weight: 400; + font-family: "Jacquard 12", serif; +} + +#yec-heading.all-jacquard12-chars { + /* All characters are supported by Jacquard 12. + * These have a high natural line-height. */ + line-height: 1.0; } #yec-body { diff --git a/browser/components/abouttor/content/aboutTor.html b/browser/components/abouttor/content/aboutTor.html index 4e181d41d9bf..292537056b33 100644 --- a/browser/components/abouttor/content/aboutTor.html +++ b/browser/components/abouttor/content/aboutTor.html @@ -4,7 +4,7 @@ + @@ -35,12 +39,16 @@
- -

-

+ +

+

-

+

{ + const jacquard12Charset = + // eslint does not like the range \u{300}-\u{304} and onward, which + // are combining characters. But we want to detect the combining + // characters as individual characters. + // eslint-disable-next-line no-misleading-character-class + /^[\u{20}-\u{7e}\u{a0}-\u{a3}\u{a5}\u{a7}-\u{ab}\u{ae}-\u{b0}\u{b4}\u{b6}-\u{b8}\u{ba}-\u{bb}\u{bf}-\u{107}\u{10a}-\u{113}\u{116}-\u{11b}\u{11e}-\u{123}\u{126}-\u{127}\u{12a}-\u{12b}\u{12e}-\u{133}\u{136}-\u{137}\u{139}-\u{13e}\u{141}-\u{148}\u{14a}-\u{14d}\u{150}-\u{15b}\u{15e}-\u{161}\u{164}-\u{165}\u{16a}-\u{17e}\u{218}-\u{21b}\u{237}\u{2c6}-\u{2c7}\u{2d8}-\u{2dd}\u{300}-\u{304}\u{306}-\u{308}\u{30a}-\u{30c}\u{312}\u{326}-\u{328}\u{1e80}-\u{1e85}\u{1e9e}\u{1ef2}-\u{1ef3}\u{200a}\u{2013}-\u{2014}\u{2018}-\u{201a}\u{201c}-\u{201e}\u{2022}\u{2026}\u{2039}-\u{203a}\u{20ac}\u{2122}\u{2212}]+$/u; + headingEl.classList.toggle( + "all-jacquard12-chars", + jacquard12Charset.test(headingEl.textContent) + ); + }; + + const headingObserver = new MutationObserver(measure); + headingObserver.observe(headingEl, { + subtree: true, + childList: true, + characterData: true, + }); + measure(); + } document.body.classList.add("show-yec"); }, diff --git a/browser/components/abouttor/content/yec2025-font.css b/browser/components/abouttor/content/yec2025-font.css new file mode 100644 index 000000000000..d781ac93fc71 --- /dev/null +++ b/browser/components/abouttor/content/yec2025-font.css @@ -0,0 +1,105 @@ +/** + * The embedded "Jacquard 12" font is under the following license: + * + * Copyright 2023 The Soft Type Project Authors (https://github.com/scfried/soft-type-jacquard) + * + * This Font Software is licensed under the SIL Open Font License, Version 1.1. + * This license is copied below, and is also available with a FAQ at: + * https://openfontlicense.org + * + * + * ----------------------------------------------------------- + * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + * ----------------------------------------------------------- + * + * PREAMBLE + * The goals of the Open Font License (OFL) are to stimulate worldwide + * development of collaborative font projects, to support the font creation + * efforts of academic and linguistic communities, and to provide a free and + * open framework in which fonts may be shared and improved in partnership + * with others. + * + * The OFL allows the licensed fonts to be used, studied, modified and + * redistributed freely as long as they are not sold by themselves. The + * fonts, including any derivative works, can be bundled, embedded, + * redistributed and/or sold with any software provided that any reserved + * names are not used by derivative works. The fonts and derivatives, + * however, cannot be released under any other type of license. The + * requirement for fonts to remain under this license does not apply + * to any document created using the fonts or their derivatives. + * + * DEFINITIONS + * "Font Software" refers to the set of files released by the Copyright + * Holder(s) under this license and clearly marked as such. This may + * include source files, build scripts and documentation. + * + * "Reserved Font Name" refers to any names specified as such after the + * copyright statement(s). + * + * "Original Version" refers to the collection of Font Software components as + * distributed by the Copyright Holder(s). + * + * "Modified Version" refers to any derivative made by adding to, deleting, + * or substituting -- in part or in whole -- any of the components of the + * Original Version, by changing formats or by porting the Font Software to a + * new environment. + * + * "Author" refers to any designer, engineer, programmer, technical + * writer or other person who contributed to the Font Software. + * + * PERMISSION & CONDITIONS + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of the Font Software, to use, study, copy, merge, embed, modify, + * redistribute, and sell modified and unmodified copies of the Font + * Software, subject to the following conditions: + * + * 1) Neither the Font Software nor any of its individual components, + * in Original or Modified Versions, may be sold by itself. + * + * 2) Original or Modified Versions of the Font Software may be bundled, + * redistributed and/or sold with any software, provided that each copy + * contains the above copyright notice and this license. These can be + * included either as stand-alone text files, human-readable headers or + * in the appropriate machine-readable metadata fields within text or + * binary files as long as those fields can be easily viewed by the user. + * + * 3) No Modified Version of the Font Software may use the Reserved Font + * Name(s) unless explicit written permission is granted by the corresponding + * Copyright Holder. This restriction only applies to the primary font name as + * presented to the users. + * + * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + * Software shall not be used to promote, endorse or advertise any + * Modified Version, except to acknowledge the contribution(s) of the + * Copyright Holder(s) and the Author(s) or with their explicit written + * permission. + * + * 5) The Font Software, modified or unmodified, in part or in whole, + * must be distributed entirely under this license, and must not be + * distributed under any other license. The requirement for fonts to + * remain under this license does not apply to any document created + * using the Font Software. + * + * TERMINATION + * This license becomes null and void if any of the above conditions are + * not met. + * + * DISCLAIMER + * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + * OTHER DEALINGS IN THE FONT SOFTWARE. + */ + +@font-face { + font-family: "Jacquard 12"; + font-weight: 400 400; + font-style: normal; + /* woff2 stream */ + src: url("data:font/woff2;base64,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"); +} diff --git a/browser/components/abouttor/content/yec2025-image.svg b/browser/components/abouttor/content/yec2025-image.svg new file mode 100644 index 000000000000..6bea03465302 --- /dev/null +++ b/browser/components/abouttor/content/yec2025-image.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/browser/components/abouttor/jar.mn b/browser/components/abouttor/jar.mn index c30e968ee99a..eeba355a7076 100644 --- a/browser/components/abouttor/jar.mn +++ b/browser/components/abouttor/jar.mn @@ -9,3 +9,5 @@ browser.jar: content/browser/abouttor/2728-sparkles.svg (content/2728-sparkles.svg) content/browser/abouttor/2764-red-heart.svg (content/2764-red-heart.svg) content/browser/abouttor/yec-heart.svg (content/yec-heart.svg) + content/browser/abouttor/yec2025-image.svg (content/yec2025-image.svg) + content/browser/abouttor/yec2025-font.css (content/yec2025-font.css) diff --git a/toolkit/content/license.html b/toolkit/content/license.html index 25216c93792b..2f742923b8b4 100644 --- a/toolkit/content/license.html +++ b/toolkit/content/license.html @@ -99,6 +99,7 @@
  • HarfBuzz License
  • ICU License
  • Immutable.js License
  • +
  • Jacquard 12 Font License
  • Japan Network Information Center License
  • jemalloc License
  • jQuery License
  • @@ -3453,6 +3454,112 @@ product.
    + + +

    Jacquard 12 Font License

    + + +

    This license applies to embedded "Jacquard 12" font in browser/components/abouttor/content/yec2025-font.css.

    + + +
    +            Copyright 2023 The Soft Type Project Authors (https://github.com/scfried/soft-type-jacquard)
    +
    +            This Font Software is licensed under the SIL Open Font License, Version 1.1.
    +            This license is copied below, and is also available with a FAQ at:
    +            https://openfontlicense.org
    +
    +
    +            -----------------------------------------------------------
    +            SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    +            -----------------------------------------------------------
    +
    +            PREAMBLE
    +            The goals of the Open Font License (OFL) are to stimulate worldwide
    +            development of collaborative font projects, to support the font creation
    +            efforts of academic and linguistic communities, and to provide a free and
    +            open framework in which fonts may be shared and improved in partnership
    +            with others.
    +
    +            The OFL allows the licensed fonts to be used, studied, modified and
    +            redistributed freely as long as they are not sold by themselves. The
    +            fonts, including any derivative works, can be bundled, embedded,
    +            redistributed and/or sold with any software provided that any reserved
    +            names are not used by derivative works. The fonts and derivatives,
    +            however, cannot be released under any other type of license. The
    +            requirement for fonts to remain under this license does not apply
    +            to any document created using the fonts or their derivatives.
    +
    +            DEFINITIONS
    +            "Font Software" refers to the set of files released by the Copyright
    +            Holder(s) under this license and clearly marked as such. This may
    +            include source files, build scripts and documentation.
    +
    +            "Reserved Font Name" refers to any names specified as such after the
    +            copyright statement(s).
    +
    +            "Original Version" refers to the collection of Font Software components as
    +            distributed by the Copyright Holder(s).
    +
    +            "Modified Version" refers to any derivative made by adding to, deleting,
    +            or substituting -- in part or in whole -- any of the components of the
    +            Original Version, by changing formats or by porting the Font Software to a
    +            new environment.
    +
    +            "Author" refers to any designer, engineer, programmer, technical
    +            writer or other person who contributed to the Font Software.
    +
    +            PERMISSION & CONDITIONS
    +            Permission is hereby granted, free of charge, to any person obtaining
    +            a copy of the Font Software, to use, study, copy, merge, embed, modify,
    +            redistribute, and sell modified and unmodified copies of the Font
    +            Software, subject to the following conditions:
    +
    +            1) Neither the Font Software nor any of its individual components,
    +            in Original or Modified Versions, may be sold by itself.
    +
    +            2) Original or Modified Versions of the Font Software may be bundled,
    +            redistributed and/or sold with any software, provided that each copy
    +            contains the above copyright notice and this license. These can be
    +            included either as stand-alone text files, human-readable headers or
    +            in the appropriate machine-readable metadata fields within text or
    +            binary files as long as those fields can be easily viewed by the user.
    +
    +            3) No Modified Version of the Font Software may use the Reserved Font
    +            Name(s) unless explicit written permission is granted by the corresponding
    +            Copyright Holder. This restriction only applies to the primary font name as
    +            presented to the users.
    +
    +            4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    +            Software shall not be used to promote, endorse or advertise any
    +            Modified Version, except to acknowledge the contribution(s) of the
    +            Copyright Holder(s) and the Author(s) or with their explicit written
    +            permission.
    +
    +            5) The Font Software, modified or unmodified, in part or in whole,
    +            must be distributed entirely under this license, and must not be
    +            distributed under any other license. The requirement for fonts to
    +            remain under this license does not apply to any document created
    +            using the Font Software.
    +
    +            TERMINATION
    +            This license becomes null and void if any of the above conditions are
    +            not met.
    +
    +            DISCLAIMER
    +            THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +            OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    +            COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +            INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +            DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +            FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +            OTHER DEALINGS IN THE FONT SOFTWARE.
    +            
    + + +

    Japan Network Information Center License

    diff --git a/toolkit/locales/en-US/toolkit/global/tor-browser.ftl b/toolkit/locales/en-US/toolkit/global/tor-browser.ftl index 6291adbba864..88877fb062ab 100644 --- a/toolkit/locales/en-US/toolkit/global/tor-browser.ftl +++ b/toolkit/locales/en-US/toolkit/global/tor-browser.ftl @@ -728,3 +728,13 @@ yec-donate-button = Donate now # Here "Close" is a verb, referring to closing the banner. yec-close-button = .title = Close + +## 2025 Year end campaign. + +# Here "Free" is a verb, as in "release" or "liberate". +yec2025-title = Free the internet +# The second sentence's translation should be wrapped in '' and '', which will make the text green and bold. +yec2025-body = Support tools that break the chains of censorship and surveillance. Donate to the Tor Project today. +# The end date should match the end of the year 2025. +# The "$250,000" should be localised: it should be shown as USD (United States dollar) currency, but you may use numbers and formatting appropriate to your locale. +yec2025-matching = Through December 31, your gift will be matched, up to $250,000! -- GitLab