diff --git a/browser/components/DesktopActorRegistry.sys.mjs b/browser/components/DesktopActorRegistry.sys.mjs index ba219ac629bc540761ae1a9ed4abc90880ece1c1..020e6a9d3d6a87cb15b38c9cf52d24951e094893 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 1411e541dfc7ac43d3847690b19d7d86fc5081ba..f2baac072ee5a45d34f3b0c2b0830a2f0f97eaeb 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 379d3b4e084275b77b59994083bf1fbf27012ede..eb3692b28f1ec67c91c5cf640a1671e9ec2580d2 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 c6e4925b8ee45e9c9c6ea58843bc12c735f505db..5d41df5035503f6270e5e3a4023e266283fe1072 100644 --- a/browser/components/abouttor/content/aboutTor.css +++ b/browser/components/abouttor/content/aboutTor.css @@ -326,3 +326,209 @@ 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; + 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 { + 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 ddb9ae88baebc97dbc1d2c149ba06c67da9d44eb..292537056b33e681c35291b01cd8809794a14fae 100644 --- a/browser/components/abouttor/content/aboutTor.html +++ b/browser/components/abouttor/content/aboutTor.html @@ -4,7 +4,7 @@ + @@ -33,6 +37,35 @@ + +
+ +

+

+ +

+

+ + + + + +

{ - 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,152 @@ 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: Date.UTC(2025, 9, 14, 15), // 2025 October 14th 15:00 UTC. + + /** + * The epoch time to stop showing the banner, if at all. + * + * @type {?integer} + */ + _endDate: Date.UTC(2026, 0, 2, 0), // 2026 January 2nd 0:00 UTC. + + /** + * 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"; + const locale = this._locale; + donateLink.href = locale ? `${base}/donate-${locale}-yec2025` : base; + + if (!this._addedHeadingCharObserver) { + // Observer to determine whether the heading contains Jacquard 12 + // supported characters. + this._addedHeadingCharObserver = true; + const headingEl = document.getElementById("yec-heading"); + const measure = () => { + 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"); + }, +}; + window.addEventListener("DOMContentLoaded", () => { SearchWidget.init(); MessageArea.init(); SurveyArea.init(); + YecArea.init(); }); window.addEventListener("InitialData", event => { @@ -402,8 +577,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 0000000000000000000000000000000000000000..4d5080450ff9419bf953b4d1a2dd1ee4f9da1e50 --- /dev/null +++ b/browser/components/abouttor/content/yec-heart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/browser/components/abouttor/content/yec2025-font.css b/browser/components/abouttor/content/yec2025-font.css new file mode 100644 index 0000000000000000000000000000000000000000..d781ac93fc7102ae521a08c79d85c8b327cb58c4 --- /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 0000000000000000000000000000000000000000..6bea034653029d7476622d84bc649b7b55483eeb --- /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 b9041c702193a2e024a19fcab441ca5f21dd8646..eeba355a707620c02ab5474c89511b38b30f3aa9 100644 --- a/browser/components/abouttor/jar.mn +++ b/browser/components/abouttor/jar.mn @@ -8,3 +8,6 @@ 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) + 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 25216c93792b458c6f31eee8946d8f19f4471443..2f742923b8b4f073f11966ca232c6819a863fcb5 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 8ee4e3484afd9211de5250db8fa3af0ba7bdcd41..88877fb062abe946965957e74ec4b3acb4ba2a2e 100644 --- a/toolkit/locales/en-US/toolkit/global/tor-browser.ftl +++ b/toolkit/locales/en-US/toolkit/global/tor-browser.ftl @@ -721,3 +721,20 @@ 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 + +## 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!