Merge branch 'master' into ux-tweak

This commit is contained in:
Danny Coates 2017-07-25 11:31:13 -07:00 committed by GitHub
commit e7688a62c6
11 changed files with 2205 additions and 374 deletions

View File

@ -144,12 +144,15 @@ $(document).ready(function() {
cd6: err cd6: err
}); });
document.l10n.formatValue('expiredPageHeader').then(translated => { if (err.message === 'notfound') {
$('.title').text(translated); location.reload();
}); } else {
$('#download-btn').attr('hidden', true); document.l10n.formatValue('errorPageHeader').then(translated => {
$('#expired-img').removeAttr('hidden'); $('.title').text(translated);
console.log('The file has expired, or has already been deleted.'); });
$('#download-btn').attr('hidden', true);
$('#expired-img').removeAttr('hidden');
}
return; return;
}) })
.then(([decrypted, fname]) => { .then(([decrypted, fname]) => {

View File

@ -20,7 +20,7 @@ class FileReceiver extends EventEmitter {
xhr.onload = function(event) { xhr.onload = function(event) {
if (xhr.status === 404) { if (xhr.status === 404) {
reject( reject(
new Error('The file has expired, or has already been deleted.') new Error('notfound')
); );
return; return;
} }

View File

@ -306,6 +306,11 @@ $(document).ready(function() {
}); });
}) })
.catch(err => { .catch(err => {
// err is 0 when coming from a cancel upload event
if (err === 0) {
return;
}
// only show error page when the error is anything other than user cancelling the upload
Raven.captureException(err); Raven.captureException(err);
$('#page-one').attr('hidden', true); $('#page-one').attr('hidden', true);
$('#upload-progress').attr('hidden', true); $('#upload-progress').attr('hidden', true);
@ -462,10 +467,8 @@ $(document).ready(function() {
popupDiv.classList.add('popup'); popupDiv.classList.add('popup');
const $popupMessage = $('<div>', { class: 'popup-message' }); const $popupMessage = $('<div>', { class: 'popup-message' });
$popupMessage.attr('data-l10n-id', 'deletePopupText'); $popupMessage.attr('data-l10n-id', 'deletePopupText');
const $popupDelSpan = $('<span>', { class: 'popup-yes' }); const $popupDelSpan = $('<span>', { class: 'popup-yes' });
$popupDelSpan.attr('data-l10n-id', 'deletePopupYes'); $popupDelSpan.attr('data-l10n-id', 'deletePopupYes');
const $popupNvmSpan = $('<span>', { class: 'popup-no' }); const $popupNvmSpan = $('<span>', { class: 'popup-no' });
$popupNvmSpan.attr('data-l10n-id', 'deletePopupCancel'); $popupNvmSpan.attr('data-l10n-id', 'deletePopupCancel');

12
l10n.toml Normal file
View File

@ -0,0 +1,12 @@
# 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 http://mozilla.org/MPL/2.0/.
basepath = "."
[env]
l = "{l10n_base}/public/locales/{locale}/"
[[paths]]
reference = "public/locales/en-US/**"
l10n = "{l}**"

2398
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,95 +1,95 @@
// Firefox Send is a brand name and should not be localized.
title = Firefox Send title = Firefox Send
siteSubtitle = web experiment siteSubtitle = web experiment
siteFeedback = Feedback siteFeedback = Feedback
uploadPageHeader = Private, Encrypted File Sharing uploadPageHeader = Private, Encrypted File Sharing
uploadPageExplainer = Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever. uploadPageExplainer = Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
uploadPageLearnMore = Learn more uploadPageLearnMore = Learn more
uploadPageDropMessage = Drop your file here to start uploading uploadPageDropMessage = Drop your file here to start uploading
uploadPageSizeMessage = For the most reliable operation, its best to keep your file under 1GB uploadPageSizeMessage = For the most reliable operation, its best to keep your file under 1GB
uploadPageBrowseButton = Select a file on your computer uploadPageBrowseButton = Select a file on your computer
.title = {uploadPageBrowseButtonTitle} .title = Select a file on your computer
uploadPageMultipleFilesAlert = Uploading multiple files or a folder is currently not supported. uploadPageMultipleFilesAlert = Uploading multiple files or a folder is currently not supported.
uploadPageBrowseButtonTitle = Upload file uploadPageBrowseButtonTitle = Upload file
uploadingPageHeader = Uploading Your File uploadingPageHeader = Uploading Your File
importingFile = Importing... importingFile = Importing…
verifyingFile = Verifying... verifyingFile = Verifying…
encryptingFile = Encrypting... encryptingFile = Encrypting…
decryptingFile = Decrypting... decryptingFile = Decrypting…
notifyUploadDone = Your upload has finished. notifyUploadDone = Your upload has finished.
uploadingPageMessage = Once your file uploads you will be able to set expiry options. uploadingPageMessage = Once your file uploads you will be able to set expiry options.
uploadingPageCancel = Cancel upload uploadingPageCancel = Cancel upload
.title = {uploadingPageCancel} .title = Cancel upload
uploadCancelNotification = Your upload was cancelled. uploadCancelNotification = Your upload was cancelled.
uploadingPageLargeFileMessage = This file is large and may take a while to upload. Sit tight!
uploadingPageLargeFileMessage = This file is large and may take awhile to upload. Sit tight!
uploadingFileNotification = Notify me when the upload is complete. uploadingFileNotification = Notify me when the upload is complete.
uploadSuccessConfirmHeader = Ready to Send uploadSuccessConfirmHeader = Ready to Send
uploadSvgAlt
uploadSvgAlt.alt = Upload .alt = Upload
//Note the spec suggests that this string is editable. That feature will not appear at Launch
uploadSuccessTimingHeader = The link to your file will expire after 1 download or in 24 hours. uploadSuccessTimingHeader = The link to your file will expire after 1 download or in 24 hours.
copyUrlFormLabel = Copy and share the link to send your file:
copyUrlFormLabelWithName = Copy and share the link to send your file: { $filename } copyUrlFormLabelWithName = Copy and share the link to send your file: { $filename }
// Note: Title text for button should be the same // Note: Title text for button should be the same.
copyUrlFormButton = Copy to clipboard copyUrlFormButton = Copy to clipboard
.title = {copyUrlFormButton} .title = Copy to clipboard
copiedUrl = Copied! copiedUrl = Copied!
// Note: Title text for button should be the same.
deleteFileButton = Delete file deleteFileButton = Delete file
.title = {deleteFileButton} .title = Delete file
// Note: Title text for button should be the same.
sendAnotherFileLink = Send another file sendAnotherFileLink = Send another file
.title = {sendAnotherFileLink} .title = Send another file
// Alternative text used on the download link/button (indicates an action).
downloadAltText.alt = Download downloadAltText
downloadFileName = Download { $filename } .alt = Download
downloadFileName = Download { $filename }
downloadFileSize = ({ $size }) downloadFileSize = ({ $size })
// Firefox Send is a brand name and should not be localized.
downloadMessage = Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever. downloadMessage = Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Download downloadButtonLabel = Download
.title = {downloadButtonLabel} .title = Download
downloadNotification = Your download has completed. downloadNotification = Your download has completed.
downloadFinish = Download Complete downloadFinish = Download Complete
// Firefox Send is a brand name and should not be localized. Title text for button should be the same.
sendYourFilesLink = Try Firefox Send sendYourFilesLink = Try Firefox Send
.title = {sendYourFilesLink} .title = Try Firefox Send
downloadingPageProgress = Downloading { $filename } ({ $size }) downloadingPageProgress = Downloading { $filename } ({ $size })
downloadingPageMessage = Please leave this tab open while we fetch your file and decrypt it. downloadingPageMessage = Please leave this tab open while we fetch your file and decrypt it.
errorAltText
errorAltText.alt = Upload error .alt = Upload error
errorPageHeader = Something went wrong! errorPageHeader = Something went wrong!
errorPageMessage = There has been an error uploading the file. errorPageMessage = There has been an error uploading the file.
errorPageLink = Send another file errorPageLink = Send another file
fileTooBig = That file is too big to upload. It should be less than { $size }. fileTooBig = That file is too big to upload. It should be less than { $size }.
linkExpiredAlt
linkExpiredAlt.alt = Link expired .alt = Link expired
expiredPageHeader = This link has expired or never existed in the first place! expiredPageHeader = This link has expired or never existed in the first place!
notSupportedHeader = Your browser is not supported. notSupportedHeader = Your browser is not supported.
notSupportedDetail = Unfortunately this browser does not support the web technology that powers Firefox Send. You'll need to try another browser. We recommend Firefox! // Firefox Send is a brand name and should not be localized.
notSupportedDetail = Unfortunately this browser does not support the web technology that powers Firefox Send. Youll need to try another browser. We recommend Firefox!
downloadFirefoxButtonSub = Free Download downloadFirefoxButtonSub = Free Download
uploadedFile = File
copyFileList = Copy URL
sentFilesTitle1 = File // expiryFileList is used as a column header
sentFilesTitle2 = Copy URL expiryFileList = Expires In
sentFilesTitle3 = Expires In deleteFileList = Delete
sentFilesTitle4 = Delete nevermindButton = Never mind
deleteButtonHover
.title = Delete
copyUrlHover
.title = Copy URL
legalHeader = Terms & Privacy
legalNoticeTestPilot = Firefox Send is currently a Test Pilot experiment, and subject to the Test Pilot <a>Terms of Service</a> and <a>Privacy Notice</a>. You can learn more about this experiment and its data collection <a>here</a>.
legalNoticeMozilla = Use of the Firefox Send website is also subject to Mozillas <a>Websites Privacy Notice</a> and <a>Websites Terms of Use</a>.
deletePopupText = Delete this file? deletePopupText = Delete this file?
deletePopupYes = Yes deletePopupYes = Yes
deletePopupCancel = Cancel deletePopupCancel = Cancel
deleteButtonHover.title = {sentFilesTitle4} deleteButtonHover
copyUrlHover.title = {sentFilesTitle2} .title = Delete
copyUrlHover
.title = Copy URL
footerLinkLegal = Legal footerLinkLegal = Legal
// Test Pilot is a proper name and should not be localized.
footerLinkAbout = About Test Pilot footerLinkAbout = About Test Pilot
footerLinkPrivacy = Privacy footerLinkPrivacy = Privacy
footerLinkTerms = Terms footerLinkTerms = Terms

View File

@ -0,0 +1 @@
importingFile = Importazione in corso…

View File

@ -45,20 +45,19 @@ app.use(
connectSrc: [ connectSrc: [
"'self'", "'self'",
'https://sentry.prod.mozaws.net', 'https://sentry.prod.mozaws.net',
'https://www.google-analytics.com', 'https://www.google-analytics.com'
'https://ssl.google-analytics.com'
], ],
imgSrc: [ imgSrc: [
"'self'", "'self'",
'https://www.google-analytics.com', 'https://www.google-analytics.com'
'https://ssl.google-analytics.com'
], ],
scriptSrc: ["'self'", 'https://ssl.google-analytics.com'], scriptSrc: ["'self'"],
styleSrc: ["'self'", 'https://code.cdn.mozilla.net'], styleSrc: ["'self'", 'https://code.cdn.mozilla.net'],
fontSrc: ["'self'", 'https://code.cdn.mozilla.net'], fontSrc: ["'self'", 'https://code.cdn.mozilla.net'],
formAction: ["'none'"], formAction: ["'none'"],
frameAncestors: ["'none'"], frameAncestors: ["'none'"],
objectSrc: ["'none'"] objectSrc: ["'none'"],
reportUri: '/__cspreport__'
} }
}) })
); );
@ -80,6 +79,10 @@ app.get('/unsupported', (req, res) => {
res.render('unsupported'); res.render('unsupported');
}); });
app.get('/legal', (req, res) => {
res.render('legal');
});
app.get('/jsconfig.js', (req, res) => { app.get('/jsconfig.js', (req, res) => {
res.set('Content-Type', 'application/javascript'); res.set('Content-Type', 'application/javascript');
res.render('jsconfig', { res.render('jsconfig', {

View File

@ -21,10 +21,10 @@
<thead> <thead>
<tr> <tr>
<!-- htmllint attr-bans="false" --> <!-- htmllint attr-bans="false" -->
<th width="35%" data-l10n-id="sentFilesTitle1"></th> <th width="35%" data-l10n-id="uploadedFile"></th>
<th width="25%" data-l10n-id="sentFilesTitle2"></th> <th width="25%" data-l10n-id="copyFileList"></th>
<th width="21%" data-l10n-id="sentFilesTitle3"></th> <th width="21%" data-l10n-id="expiryFileList"></th>
<th width="12%" data-l10n-id="sentFilesTitle4"></th> <th width="12%" data-l10n-id="deleteFileList"></th>
<!-- htmllint tag-bans="$previous" --> <!-- htmllint tag-bans="$previous" -->
</tr> </tr>
</thead> </thead>
@ -55,7 +55,7 @@
<div id="share-link" hidden="true"> <div id="share-link" hidden="true">
<div class="title" data-l10n-id="uploadSuccessTimingHeader"></div> <div class="title" data-l10n-id="uploadSuccessTimingHeader"></div>
<div id="share-window"> <div id="share-window">
<div id="copy-text" data-l10n-id="copyUrlFormLabel"></div> <div id="copy-text"></div>
<div id="copy"> <div id="copy">
<input id="link" type="url" value="" readonly/> <input id="link" type="url" value="" readonly/>
<button id="copy-btn" data-l10n-id="copyUrlFormButton"></button> <button id="copy-btn" data-l10n-id="copyUrlFormButton"></button>

View File

@ -9,12 +9,13 @@
<meta name="defaultLanguage" content="en-US"> <meta name="defaultLanguage" content="en-US">
<meta name="availableLanguages" content="en-US"> <meta name="availableLanguages" content="en-US">
<link rel="localization" href="/locales/send.{locale}.ftl">
<link rel="icon" type="image/png" href="/resources/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="/resources/favicon-32x32.png" sizes="32x32" />
<link rel="localization" href="/locales/{locale}/send.ftl">
<script defer src="/l20n.min.js"></script> <script defer src="/l20n.min.js"></script>
</head> </head>
<body> <body>
<header class="header"> <header class="header">
<div class="send-logo"> <div class="send-logo">
<a href="/"> <a href="/">
<img src="/resources/send_logo.svg" alt="Send"/><h1 class="site-title">Send</h1> <img src="/resources/send_logo.svg" alt="Send"/><h1 class="site-title">Send</h1>
@ -34,8 +35,8 @@
<a href="https://www.mozilla.org"><img class="mozilla-logo" src="/resources/mozilla-logo.svg"/></a> <a href="https://www.mozilla.org"><img class="mozilla-logo" src="/resources/mozilla-logo.svg"/></a>
<a href="https://www.mozilla.org/about/legal" data-l10n-id="footerLinkLegal"></a> <a href="https://www.mozilla.org/about/legal" data-l10n-id="footerLinkLegal"></a>
<a href="https://testpilot.firefox.com/about" data-l10n-id="footerLinkAbout"></a> <a href="https://testpilot.firefox.com/about" data-l10n-id="footerLinkAbout"></a>
<a href="https://testpilot.firefox.com/privacy" data-l10n-id="footerLinkPrivacy"></a> <a href="/legal" data-l10n-id="footerLinkPrivacy"></a>
<a href="https://testpilot.firefox.com/terms" data-l10n-id="footerLinkTerms"></a> <a href="/legal" data-l10n-id="footerLinkTerms"></a>
<a href="https://www.mozilla.org/en-US/privacy/websites/#cookies" data-l10n-id="footerLinkCookies"></a> <a href="https://www.mozilla.org/en-US/privacy/websites/#cookies" data-l10n-id="footerLinkCookies"></a>
</div> </div>
<div class="social-links"> <div class="social-links">

12
views/legal.handlebars Normal file
View File

@ -0,0 +1,12 @@
<div id="legal">
<div class="title" data-l10n-id="legalHeader"></div>
<div class="description" data-l10n-id="legalNoticeTestPilot">
<a href="https://testpilot.firefox.com/terms"></a>
<a href="https://testpilot.firefox.com/privacy"></a>
<a href="https://testpilot.firefox.com/experiments/send"></a>
</div>
<div class="description" data-l10n-id="legalNoticeMozilla">
<a href="https://www.mozilla.org/privacy/websites/"></a>
<a href="https://www.mozilla.org/about/legal/terms/mozilla/"></a>
</div>
</div>