Commit 1cf0f113 authored by Arthur Edelstein's avatar Arthur Edelstein
Browse files

Bug 25016: Remove 2017 donation banner

The campaign is finished, so we can remove the banner.
I'm leaving in the strings in case we want to use
some of them next year.
parent 411f9537
......@@ -105,11 +105,6 @@ var AboutTorListener = {
else
body.removeAttribute("showmanual");
if (aData.bannerData)
body.setAttribute("banner-data", aData.bannerData);
else
body.removeAttribute("banner-data");
// Setting body.initialized="yes" displays the body, which must be done
// at this point because our remaining initialization depends on elements
// being visible so that their size and position are accurate.
......
......@@ -21,8 +21,6 @@
<title>&aboutTor.title;</title>
<link rel="stylesheet" type="text/css" media="all"
href="resource://torbutton/chrome/skin/aboutTor.css"/>
<link rel="stylesheet" type="text/css" media="all"
href="resource://torbutton/chrome/skin/donation_banner.css"/>
<script type="text/javascript;version=1.7">
<![CDATA[
window.addEventListener("pageshow", function() {
......@@ -33,21 +31,6 @@ window.addEventListener("pageshow", function() {
</script>
</head>
<body dir="&locale.dir;">
<div id="banner">
<div id="banner-contents-container">
<div id="banner-tagline"><span></span></div>
<div id="banner-slogan"><span></span></div>
<a id="banner-donate-button-link"
href="https://www.torproject.org/donate/donate-pdr-tbb">
<div id="banner-donate-button">
<div id="banner-donate-button-inner">
<span></span>
</div>
</div>
</a>
</div>
</div>
<div id="banner-spacer"></div>
<div id="torstatus" class="top">
<div id="torstatus-version"/>
<div id="torstatus-image"/>
......@@ -129,6 +112,6 @@ window.addEventListener("pageshow", function() {
<p>&aboutTor.footer.label;
<a href="&aboutTor.learnMore.link;">&aboutTor.learnMore.label;</a></p>
</div>
<script src="resource://torbutton/chrome/content/aboutTor/donation_banner.js"></script>
</body>
</html>
/* jshint esnext:true */
let sel = selector => document.querySelector(selector);
// Shrink the font size if the text in the given element is overflowing.
let fitTextInElement = function (element) {
element.style.fontSize = "8px";
let defaultWidth = element.scrollWidth,
defaultHeight = element.scrollHeight;
let bestSize;
for (let testSize = 8; testSize <= 40; testSize += 0.5) {
element.style.fontSize = `${testSize}px`;
if (element.scrollWidth <= defaultWidth &&
element.scrollHeight <= defaultHeight) {
bestSize = testSize;
} else {
break;
}
}
element.style.fontSize = `${bestSize}px`;
};
// Increase padding at end to "squeeze" text, until just before
// it gets squeezed so much that it gets longer vertically.
let avoidWidows = function (element) {
element.style.paddingRight = "0px";
let originalWidth = element.scrollWidth;
let originalHeight = element.scrollHeight;
let bestPadding;
for (let testPadding = 0; testPadding < originalWidth; testPadding += 0.5) {
element.style.paddingRight = `${testPadding}px`;
if (element.scrollHeight <= originalHeight) {
bestPadding = testPadding;
} else {
break;
}
}
element.style.paddingRight = `${bestPadding}px`;
if (window.getComputedStyle(element).direction === "rtl") {
element.style.paddingLeft = element.style.paddingRight;
element.style.paddingRight = "0px";
}
};
// Resize the text inside banner to fit.
let updateTextSizes = function () {
fitTextInElement(sel("#banner-tagline"));
fitTextInElement(sel("#banner-slogan"));
fitTextInElement(sel("#banner-donate-button-inner"));
avoidWidows(sel("#banner-tagline span"));
};
// Returns a random integer x, such that 0 <= x < max
let randomInteger = max => Math.floor(max * Math.random());
// The main donation banner function.
let runDonationBanner = function ({ taglines, slogan, mozilla, donate, shortLocale }) {
try {
sel("#banner-tagline span").innerText = taglines[randomInteger(taglines.length)];
sel("#banner-slogan span").innerText = slogan;
let donateButtonText = sel("#banner-donate-button-inner span");
let rtl = window.getComputedStyle(donateButtonText).direction === "rtl";
donateButtonText.innerHTML = donate + "&#160;" + (rtl ? "&#9664;" : "&#9654;");
sel("#banner").style.display = "flex";
sel("#banner-spacer").style.display = "block";
addEventListener("resize", updateTextSizes);
updateTextSizes();
// Add a suffix corresponding to locale so we can send user
// to a correctly-localized donation page via redirect.
sel("#banner-donate-button-link").href += "-" + shortLocale;
sel("#torstatus-image").style.display = "none";
} catch (e) {
// Something went wrong.
console.error(e);
sel("#banner").style.display = "none";
sel("#bannerSpacer").style.display = "none";
sel("#torstatus-image").style.display = "block";
}
};
// Calls callback(attributeValue) when the specified attribute changes on
// target. Returns a zero-arg function that stops observing.
let observeAttribute = function (target, attributeName, callback) {
let observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
if (mutation.type === "attributes" &&
mutation.attributeName === attributeName) {
callback(target.getAttribute(attributeName));
}
});
});
observer.observe(target, { attributes: true });
return () => observer.disconnect();
};
// Start the donation banner if "toron" has been set to "yes".
let stopObserving = observeAttribute(document.body, "toron", value => {
stopObserving();
if (value === "yes") {
let bannerDataJSON = document.body.getAttribute("banner-data");
if (bannerDataJSON && bannerDataJSON.length > 0) {
runDonationBanner(JSON.parse(bannerDataJSON));
}
}
});
......@@ -13,7 +13,6 @@ let { showDialog } = Cu.import("resource://torbutton/modules/utils.js", {});
let { unescapeTorString } = Cu.import("resource://torbutton/modules/utils.js", {});
let SecurityPrefs = Cu.import("resource://torbutton/modules/security-prefs.js", {});
let { bindPrefAndInit, observe } = Cu.import("resource://torbutton/modules/utils.js", {});
let { bannerData } = Cu.import("resource://torbutton/modules/donation-banner.js", {});
const k_tb_last_browser_version_pref = "extensions.torbutton.lastBrowserVersion";
const k_tb_browser_update_needed_pref = "extensions.torbutton.updateNeeded";
......@@ -451,8 +450,7 @@ var torbutton_abouttor_message_handler = {
torOn: torbutton_tor_check_ok(),
updateNeeded: torbutton_update_is_needed(),
showManual: torbutton_show_torbrowser_manual(),
toolbarButtonXPos: torbutton_get_toolbarbutton_xpos(),
bannerData: bannerData(),
toolbarButtonXPos: torbutton_get_toolbarbutton_xpos()
};
},
......
#banner {
-khtml-user-select: none; /* Konqueror */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Chrome/Safari/Opera */
display: none;
height: 150px;
justify-content: center;
left: 0px;
margin-top: 0px;
min-width: 900px;
opacity: 1;
position: absolute;
user-select: none;
width: 100%;
z-index: 1;
}
#banner:before {
background-color: #406;
background-image: url('resource://torbutton/chrome/content/aboutTor/onion-hand.png');
background-position: center;
background-size: cover;
content: "";
height: 150px;
left: 0px;
position: absolute;
top: 0px;
width: 100%;
}
#banner:-moz-dir(rtl):before {
transform: scaleX(-1);
}
#banner-contents-container {
align-items: center;
height: 100%;
max-width: 700px;
position: relative;
width: 700px;
}
#banner-tagline {
align-items: center;
bottom: 60px;
color: white;
display: flex;
font-family: monospace;
font-size: 8px;
font-weight: bold;
left: 85px;
position: absolute;
right: 0px;
text-align: start;
text-transform: uppercase;
top: 10px;
}
#banner-tagline:-moz-dir(rtl) {
left: 0px;
right: 85px;
}
#banner-slogan {
align-items: center;
bottom: 30px;
color: #f8f8a0;
display: flex;
font-family: monospace;
font-weight: bold;
left: 85px;
position: absolute;
right: 285px;
text-align: start;
top: 90px;
white-space: nowrap;
}
#banner-slogan:-moz-dir(rtl) {
left: 285px;
right: 85px;
}
#banner-donate-button {
background-color: #13a513;
border: 0px;
bottom: 10px;
color: #fbf7ef;
font-family: sans-serif;
font-size: 12px;
font-weight: bold;
left: 430px;
letter-spacing: -0.00em;
position: absolute;
right: 0px;
top: 100px;
}
#banner-donate-button:-moz-dir(rtl) {
left: 0px;
right: 430px;
}
#banner-donate-button:hover {
background-color: #38bc38;
}
#banner-donate-button-inner {
bottom: 6px;
display: flex;
justify-content: center;
left: 8px;
position: absolute;
right: 8px;
top: 6px;
}
#banner-spacer {
display: none;
height: 150px;
position: relative;
top: 0;
}
/* jshint esversion:6 */
const Cu = Components.utils;
// ### Import Mozilla Services
Cu.import("resource://gre/modules/Services.jsm");
// A list of locales for which the banner has been translated.
const kBannerLocales = [
"de",
"en",
"es",
"fa",
"fr",
"it",
"nl",
"pl",
"pt",
"ru",
"sv",
"tr",
];
// A list of donation page locales (at least redirects should exist).
const kDonationPageLocales = [
"ar",
"de",
"en",
"es",
"fa",
"fr",
"it",
"ja",
"ko",
"nl",
"pl",
"pt",
"ru",
"tr",
"vi",
"zh",
];
const kPropertiesURL = "chrome://torbutton/locale/aboutTor.properties";
const gStringBundle = Services.strings.createBundle(kPropertiesURL);
// Check if we should show the banner, depends on
// browser locale, current date, and how many times
// we have already shown the banner.
const shouldShowBanner = function (shortLocale) {
try {
// If our override test pref is true, then just show the banner regardless.
if (Services.prefs.prefHasUserValue("extensions.torbutton.testBanner") &&
Services.prefs.getBoolPref("extensions.torbutton.testBanner") === true) {
return true;
}
// Don't show a banner if update is needed.
let updateNeeded = Services.prefs.getBoolPref("extensions.torbutton.updateNeeded");
if (updateNeeded) {
return false;
}
// Only show banner when we have that locale and if a donation redirect exists.
if (kBannerLocales.indexOf(shortLocale) === -1 ||
kDonationPageLocales.indexOf(shortLocale) === -1) {
return false;
}
// Only show banner between 2017 Oct 23 and 2018 Jan 25.
let now = new Date();
let start = new Date(2017, 9, 23);
let end = new Date(2018, 0, 26);
let shownCountPref = "extensions.torbutton.donation_banner2017.shown_count";
if (now < start || now > end) {
// Clean up pref if not in use.
Services.prefs.clearUserPref(shownCountPref);
return false;
}
// Only show banner 50 times.
let count = 0;
if (Services.prefs.prefHasUserValue(shownCountPref)) {
count = Services.prefs.getIntPref(shownCountPref);
}
if (count >= 50) {
return false;
}
Services.prefs.setIntPref(shownCountPref, count+1);
return true;
} catch (e) {
return false;
}
};
// Read data needed for displaying banner on page.
var bannerData = function () {
// Read short locale.
let locale = Services.prefs.getCharPref("general.useragent.locale");
let shortLocale = locale.match(/[a-zA-Z]+/)[0].toLowerCase();
if (!shouldShowBanner(shortLocale)) {
return null;
}
// Load tag lines.
let taglines = [];
for (let index = 0; index < 5; ++index) {
let tagline = gStringBundle.GetStringFromName(
"aboutTor.donationBanner.tagline" + (index + 1));
taglines.push(tagline);
}
// Read slogan, mozilla, and donate button text.
let slogan = gStringBundle.GetStringFromName("aboutTor.donationBanner.slogan");
let mozilla = gStringBundle.GetStringFromName("aboutTor.donationBanner.mozilla");
let donate = gStringBundle.GetStringFromName("aboutTor.donationBanner.donate");
return JSON.stringify({ taglines, slogan, mozilla, donate, shortLocale });
};
// Export utility functions for external use.
var EXPORTED_SYMBOLS = ["bannerData"];
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment