Merge remote-tracking branch 'origin/master' into vnext

This commit is contained in:
Danny Coates 2018-07-13 12:25:28 -07:00
commit dd0cb78ea2
No known key found for this signature in database
GPG key ID: 4C442633C62E00CB
48 changed files with 4748 additions and 7858 deletions

View file

@ -216,6 +216,7 @@ function download(id, keychain, onprogress, canceller) {
const blob = new Blob([xhr.response]);
resolve(blob);
});
xhr.addEventListener('progress', function(event) {
if (event.lengthComputable && event.target.status === 200) {
onprogress([event.loaded, event.total]);
@ -224,8 +225,10 @@ function download(id, keychain, onprogress, canceller) {
const auth = await keychain.authHeader();
xhr.open('get', `/api/download/${id}`);
xhr.setRequestHeader('Authorization', auth);
xhr.setRequestHeader('Connection', 'close');
xhr.responseType = 'blob';
xhr.send();
onprogress([0, 1]);
});
}

View file

@ -4,6 +4,7 @@ import app from './routes';
import locale from '../common/locales';
import fileManager from './fileManager';
import dragManager from './dragManager';
import pasteManager from './pasteManager';
import { canHasSend } from './utils';
import storage from './storage';
import metrics from './metrics';
@ -48,5 +49,6 @@ app.use(metrics);
app.use(fileManager);
app.use(dragManager);
app.use(experiments);
app.use(pasteManager);
app.mount('body');

25
app/pasteManager.js Normal file
View file

@ -0,0 +1,25 @@
/* global MAXFILESIZE */
import { bytes } from './utils';
export default function(state, emitter) {
window.addEventListener('paste', event => {
if (state.route !== '/' || state.uploading) return;
for (const item of event.clipboardData.items) {
if (!item.type.includes('image')) continue;
const file = item.getAsFile();
if (!file) continue; // Sometimes null
if (file.size > MAXFILESIZE) {
// eslint-disable-next-line no-alert
alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) }));
continue;
}
emitter.emit('upload', { file, type: 'paste' });
return; // return here since only one file is allowed to be uploaded at a time
}
});
}

View file

@ -19,7 +19,8 @@ module.exports = function(file, state, emit) {
onclick=${copyClick}
src="${assets.get('copy-16.svg')}"
class="cursor--pointer"
title="${state.translate('copyUrlHover')}">
title="${state.translate('copyUrlHover')}"
tabindex="0">
<span hidden="true">
${state.translate('copiedUrl')}
</span>
@ -33,7 +34,8 @@ module.exports = function(file, state, emit) {
onclick=${showPopup}
src="${assets.get('close-16.svg')}"
class="cursor--pointer"
title="${state.translate('deleteButtonHover')}">
title="${state.translate('deleteButtonHover')}"
tabindex="0">
${deletePopup(
state.translate('deletePopupText'),
state.translate('deletePopupYes'),

View file

@ -6,8 +6,7 @@ module.exports = function(state) {
<div class="legalSection">
<a
href="https://www.mozilla.org"
class="legalSection__link"
role="presentation">
class="legalSection__link">
<img
class="legalSection__mozLogo"
src="${assets.get('mozilla-logo.svg')}"
@ -43,8 +42,7 @@ module.exports = function(state) {
<div class="socialSection">
<a
href="https://github.com/mozilla/send"
class="socialSection__link"
role="presentation">
class="socialSection__link">
<img
class="socialSection__icon"
src="${assets.get('github-icon.svg')}"
@ -52,8 +50,7 @@ module.exports = function(state) {
</a>
<a
href="https://twitter.com/FxTestPilot"
class="socialSection__link"
role="presentation">
class="socialSection__link">
<img
class="socialSection__icon"
src="${assets.get('twitter-icon.svg')}"

12139
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Göndərməyə hazır
uploadSvgAlt = Yüklə
uploadSuccessTimingHeader = Faylınızın keçidinin 1 endirmədən və ya 24 saatdan sonra vaxtı çıxacaq.
expireInfo = Faylınız üçün keçidin vaxtı { $downloadCount } sonra və ya { $timespan } tarixində keçəcək.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 endirmə
*[other] { $num } endirmə
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 saat
*[other] { $num } saat
}

View file

@ -1,4 +1,4 @@
// Firefox Send is a brand name and should not be localized.
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = ওয়েব গবেষণা
siteFeedback = প্রতিক্রিয়া
@ -15,11 +15,13 @@ uploadingPageCancel = আপলোড বাতিল করুন
uploadCancelNotification = আপনার অাপলোড বাতিল করা হয়েছে।
uploadSuccessConfirmHeader = পাঠানোর জন্য প্রস্তুত
uploadSvgAlt = আপলোড
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 ডাউনলোড
*[other] { $num } ডাউনলোডগুলো
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 ঘন্টা
*[other] { $num } ঘন্টা
}
@ -27,20 +29,20 @@ copyUrlFormButton = ক্লিপবোর্ডে কপি করুন
copiedUrl = কপি করা হয়েছে!
deleteFileButton = ফাইল মুছুন
sendAnotherFileLink = আরেকটি ফাইল পাঠান
// Alternative text used on the download link/button (indicates an action).
# Alternative text used on the download link/button (indicates an action).
downloadAltText = ডাউনলোড
downloadsFileList = ডাউনলোডগুলো
// Used as header in a column indicating the amount of time left before a
// download link expires (e.g. "10h 5m")
# Used as header in a column indicating the amount of time left before a
# download link expires (e.g. "10h 5m")
timeFileList = সময়
// Used as header in a column indicating the number of times a file has been
// downloaded
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = ডাউনলোড { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = পাসওয়ার্ড লিখুন
unlockInputPlaceholder = পাসওয়ার্ড
unlockButtonLabel = আনলক করুন
// Text and title used on the download link/button (indicates an action).
# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = ডাউনলোড
downloadNotification = আপনার ডাউনলোড সম্পন্ন হয়েছে।
downloadFinish = ডাউনলোড সম্পন্ন
@ -53,7 +55,7 @@ updateFirefox = Firefox হালনাগাদ করুন
downloadFirefoxButtonSub = বিনামূল্যে ডাউনলোড
uploadedFile = ফাইল
copyFileList = URL অনুলিপি করুন
// expiryFileList is used as a column header
# expiryFileList is used as a column header
expiryFileList = মেয়াদোত্তীর্ণ তারিখ
deleteFileList = মুছে ফেলুন
nevermindButton = কিছু মনে করবেন না
@ -64,7 +66,7 @@ deletePopupCancel = বাতিল
deleteButtonHover = মুছে ফেলুন
copyUrlHover = URL অনুলিপি করুন
footerLinkLegal = আইনগত
// Test Pilot is a proper name and should not be localized.
# Test Pilot is a proper name and should not be localized.
footerLinkAbout = Test Pilot পরিচিতি
footerLinkPrivacy = গোপনীয়তা
footerLinkTerms = শর্তাবলী

View file

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Spremno za slanje
uploadSvgAlt = Otpremi
uploadSuccessTimingHeader = Veza prema vašoj datoteci će isteći nakon prvog preuzimanja ili za 24 sata.
expireInfo = Link za vašu datoteku će isteći nakon { $downloadCount } ili { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 preuzimanja
[few] { $num } preuzimanja
*[other] { $num } preuzimanja
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 sat
[few] { $num } sata
*[other] { $num } sati

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ütz chik richin Nitaq
uploadSvgAlt = Tijotob'äx
uploadSuccessTimingHeader = Ri ruximonel yakb'äl xtik'is ruq'ijul toq xtiqasäx jumul o pa 24 ramaj.
expireInfo = Ri ruximöy ayakb'al xtik'is ruq'ijul chi rij ri { $downloadCount } o { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 qasanïk
*[other] { $num } taq qasanïk
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 ramaj
*[other] { $num } taq ramaj
}

View file

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Připraveno k odeslání
uploadSvgAlt = Nahrát
uploadSuccessTimingHeader = Platnost odkazu na váš soubor vyprší po jeho prvním stažení, nebo po 24 hodinách.
expireInfo = Platnost odkazu na váš soubor vyprší po { $downloadCount } nebo { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] jednom stažení
[few] { $num } staženích
*[other] { $num } staženích
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] jedné hodině
[few] { $num } hodinách
*[other] { $num } hodinách
@ -88,8 +90,8 @@ expiryFileList = Platnost vyprší za
deleteFileList = Smazat
nevermindButton = Nevadí
legalHeader = Podmínky a ochrana soukromí
legalNoticeTestPilot = Firefox Send je ve fázi experimentu projektu Test Pilot a platí tak pro něj stejné <a>Podmínky používání</a> a <a>Zásady ochrany soukromí</a>. Více o tomto experimentu a sbíraných datech se dozvíte <a>zde</a>.
legalNoticeMozilla = Používání webové služby Firefox Send se řídí <a>Zásadami ochrany soukromí</a> a <a>Podmínkami používání</a> webových stránek Mozilly.
legalNoticeTestPilot = Firefox Send je ve fázi experimentu projektu Test Pilot a platí tak pro něj stejné <a>Podmínky používání</a> a <a>Zásady ochrany osobních údajů</a>. Více o tomto experimentu a sbíraných datech se dozvíte <a>zde</a>.
legalNoticeMozilla = Používání webové služby Firefox Send se řídí <a>Zásadami ochrany osobních údajů</a> a <a>Podmínkami používání</a> webových stránek Mozilly.
deletePopupText = Smazat tento soubor?
deletePopupYes = Ano
deletePopupCancel = Zrušit

View file

@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Gótowy za słanje
uploadSvgAlt = Nagraś
uploadSuccessTimingHeader = Wótkaz k wašej dataji pó 1 ześěgnjenju abo 24 góźinach spadnjo.
expireInfo = Wótkaz k wašej dataji pó { $downloadCount } abo { $timespan } spadnjo.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 ześěgnjenje
[two] { $num } ześěgnjeni
[few] { $num } ześěgnjenja
*[other] { $num } ześěgnjenjow
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 góźina
[two] { $num } góźinje
[few] { $num } góźiny

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Έτοιμο για αποστολή
uploadSvgAlt = Μεταφόρτωση
uploadSuccessTimingHeader = Ο σύνδεσμος του αρχείου σας θα λήξει έπειτα από 1 λήψη ή 24 ώρες.
expireInfo = Ο σύνδεσμος για το αρχείο σας θα λήξει μετά από { $downloadCount } ή { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 λήψη
*[other] { $num } λήψεις
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 ώρα
*[other] { $num } ώρες
}

View file

@ -0,0 +1,121 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = web experiment
siteFeedback = Feedback
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.
uploadPageLearnMore = Learn more
uploadPageDropMessage = Drop your file here to start uploading
uploadPageSizeMessage = For the most reliable operation, its best to keep your file under 1GB
uploadPageBrowseButton = Select a file on your computer
uploadPageBrowseButton1 = Select a file to upload
uploadPageMultipleFilesAlert = Uploading multiple files or a folder is currently not supported.
uploadPageBrowseButtonTitle = Upload file
uploadingPageProgress = Uploading { $filename } ({ $size })
importingFile = Importing…
verifyingFile = Verifying…
encryptingFile = Encrypting…
decryptingFile = Decrypting…
notifyUploadDone = Your upload has finished.
uploadingPageMessage = Once your file uploads you will be able to set expiry options.
uploadingPageCancel = Cancel upload
uploadCancelNotification = Your upload was cancelled.
uploadingPageLargeFileMessage = This file is large and may take a while to upload. Sit tight!
uploadingFileNotification = Notify me when the upload is complete.
uploadSuccessConfirmHeader = Ready to Send
uploadSvgAlt = Upload
uploadSuccessTimingHeader = The link to your file will expire after 1 download or in 24 hours.
expireInfo = The link to your file will expire after { $downloadCount } or { $timespan }.
downloadCount =
{ $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours =
{ $num ->
[one] 1 hour
*[other] { $num } hours
}
copyUrlFormLabelWithName = Copy and share the link to send your file: { $filename }
copyUrlFormButton = Copy to clipboard
copiedUrl = Copied!
deleteFileButton = Delete file
sendAnotherFileLink = Send another file
# Alternative text used on the download link/button (indicates an action).
downloadAltText = Download
downloadsFileList = Downloads
# Used as header in a column indicating the amount of time left before a
# download link expires (e.g. "10h 5m")
timeFileList = Time
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = Download { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Enter Password
unlockInputPlaceholder = Password
unlockButtonLabel = Unlock
downloadFileTitle = Download Encrypted File
# 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.
# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Download
downloadNotification = Your download has completed.
downloadFinish = Download Complete
# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } of { $totalSize })
# Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Try Firefox Send
downloadingPageProgress = Downloading { $filename } ({ $size })
downloadingPageMessage = Please leave this tab open while we fetch your file and decrypt it.
errorAltText = Upload error
errorPageHeader = Something went wrong!
errorPageMessage = There has been an error uploading the file.
errorPageLink = Send another file
fileTooBig = That file is too big to upload. It should be less than { $size }.
linkExpiredAlt = Link expired
expiredPageHeader = This link has expired or never existed in the first place!
notSupportedHeader = Your browser is not supported.
# 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!
notSupportedLink = Why is my browser not supported?
notSupportedOutdatedDetail = Unfortunately this version of Firefox does not support the web technology that powers Firefox Send. Youll need to update your browser.
updateFirefox = Update Firefox
downloadFirefoxButtonSub = Free Download
uploadedFile = File
copyFileList = Copy URL
# expiryFileList is used as a column header
expiryFileList = Expires In
deleteFileList = Delete
nevermindButton = Never mind
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?
deletePopupYes = Yes
deletePopupCancel = Cancel
deleteButtonHover = Delete
copyUrlHover = Copy URL
footerLinkLegal = Legal
# Test Pilot is a proper name and should not be localized.
footerLinkAbout = About Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Terms
footerLinkCookies = Cookies
requirePasswordCheckbox = Require a password to download this file
addPasswordButton = Add password
changePasswordButton = Change
passwordTryAgain = Incorrect password. Try again.
reportIPInfringement = Report IP Infringement
javascriptRequired = Firefox Send requires JavaScript
whyJavascript = Why does Firefox Send require JavaScript?
enableJavascript = Please enable JavaScript and try again.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours }h { $minutes }m
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes }m
# A short status message shown when a password is successfully set
passwordIsSet = Password set
# A short status message shown when the user enters a long password
maxPasswordLength = Maximum password length: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = This password could not be set

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo expirará después de 1 descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 hora
*[other] { $num } horas
}

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace a tu archivo expirará tras 1 descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 hora
*[other] { $num } horas
}

View file

@ -12,7 +12,7 @@ uploadPageBrowseButton1 = Seleccionar un archivo para subir
uploadPageMultipleFilesAlert = Aún no se pueden subir varios archivos o una carpeta.
uploadPageBrowseButtonTitle = Subir archivo
uploadingPageProgress = Subiendo { $filename } ({ $size })
importingFile = Imporando...
importingFile = Importando...
verifyingFile = Comprobando...
encryptingFile = Encriptando...
decryptingFile = Desencriptando...
@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo caducará tras descargarlo una vez o en 24 horas.
expireInfo = El enlace al archivo expirará tras { $downloadCount } o { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 hora
*[other] { $num } horas
}
@ -86,7 +88,7 @@ expiryFileList = Caduca en
deleteFileList = Eliminar
nevermindButton = Da igual
legalHeader = Términos y privacidad
legalNoticeTestPilot = Firefox Send sigue siendo un experimento de Test Pilot y está sujero a las <a>Condiciones del servicio</a> y al <a>Aviso de privacidad</a> de Test Pilot.
legalNoticeTestPilot = Firefox Send sigue siendo un experimento de Test Pilot y está sujero a las <a>Condiciones del servicio</a> y al <a>Aviso de privacidad</a> de Test Pilot. <a>Aquí</a> podrás descubrir más sobre este experimento y su recopilación de datos.
legalNoticeMozilla = El uso de la página de Firefox Send también está sujeto al <a>Aviso de privacidad sobre sitios web</a> y a los <a>Términos de uso sobre sitios web</a>.
deletePopupText = ¿Eliminar el archivo?
deletePopupYes = Sí

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Saatmiseks valmis
uploadSvgAlt = Laadi üles
uploadSuccessTimingHeader = Link failile aegub pärast 1. allalaadimist või 24 tunni möödumisel.
expireInfo = Link failile aegub peale { $downloadCount } või { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] üht allalaadimist
*[other] { $num } allalaadimist
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] üht tundi
*[other] { $num } tundi
}

View file

@ -26,6 +26,16 @@ uploadSuccessConfirmHeader = آماده برای ارسال
uploadSvgAlt = بارگذاری
uploadSuccessTimingHeader = پیوند به پرونده شما بعد از ۱ بار دانلود یا ۲۴ ساعت حذف خواهد شد.
expireInfo = این پیوند به فایل شما پس از { $downloadCount } یا { $timespan } منقضی خواهد شد.
downloadCount =
{ $num ->
[one] ۱ بارگیری
*[other] { $num } بارگیری
}
timespanHours =
{ $num ->
[one] ۱ ساعت
*[other] { $num } ساعت
}
copyUrlFormLabelWithName = برای ارسال پرونده پیوند آن را رونوشت و به اشتراک بگذارید: { $filename }
copyUrlFormButton = رونوشت به کلیپ‌بورد
copiedUrl = رونوشت شد!

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ree om te ferstjoeren
uploadSvgAlt = Oplaad
uploadSuccessTimingHeader = De keppeling nei jo bestân sil nei 1 download ferrinne of nei 24 oeren.
expireInfo = De keppeling nei jo bestân sil nei { $downloadCount } of { $timespan } ferrinne.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 oer
*[other] { $num } oeren
}

View file

@ -1,4 +1,4 @@
// Firefox Send is a brand name and should not be localized.
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = ניסוי אינטרנט
siteFeedback = משוב
@ -21,7 +21,7 @@ uploadCancelNotification = ההעלאה שלך בוטלה.
uploadingPageLargeFileMessage = קובץ זה גדול ועלול לקחת זמן להעלות אותו. סבלנות!
uploadingFileNotification = נא להודיע לי כשתסתיים ההעלאה.
uploadSuccessConfirmHeader = מוכן לשליחה
uploadSvgAlt
uploadSvgAlt =
.alt = להעלות
uploadSuccessTimingHeader = הקישור לקובץ שלך יפוג אחרי הורדה אחת או בעוד 24 שעות.
copyUrlFormLabelWithName = ניתן להעתיק ולשתף את הקישור כדי לשלוח את הקובץ שלך: { $filename }
@ -30,32 +30,34 @@ deleteFileButton = מחיקת קובץ
.title = מחיקת קובץ
sendAnotherFileLink = שליחת קובץ נוסף
.title = שליחת קובץ נוסף
// Alternative text used on the download link/button (indicates an action).
downloadAltText
# Alternative text used on the download link/button (indicates an action).
downloadAltText =
.alt = הורדה
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = ההורדה נכשלה
downloadFileSize = ({ $size })
// Text and title used on the download link/button (indicates an action).
# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = הורדה
.title = הורדה
downloadNotification = ההורדה הושלמה.
downloadFinish = ההורדה הושלמה
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } מתוך { $totalSize })
downloadingPageProgress = בהורדה: { $filename } ({ $size })
errorAltText
errorAltText =
.alt = תקלה בהעלאה
errorPageHeader = משהו השתבש!
errorPageLink = שליחת קובץ נוסף
fileTooBig = הקובץ הזה גדול מידי להעלאה. עליו להיות קטן מ־{ $size }.
linkExpiredAlt
linkExpiredAlt =
.alt = קישור פג
notSupportedHeader = הדפדפן שלך לא נתמך.
notSupportedLink = למה אין תמיכה בדפדפן שלי?
downloadFirefoxButtonSub = הורדה בחינם
uploadedFile = קובץ
copyFileList = העתקת כתובת
// expiryFileList is used as a column header
# expiryFileList is used as a column header
expiryFileList = יפוג בעוד
deleteFileList = מחיקה
nevermindButton = לא משנה
@ -63,9 +65,9 @@ legalHeader = תנאי שירות ופרטיות
deletePopupText = למחוק דף זה?
deletePopupYes = כן
deletePopupCancel = ביטול
deleteButtonHover
deleteButtonHover =
.title = מחיקה
copyUrlHover
copyUrlHover =
.title = העתקת קישור
footerLinkLegal = מידע משפטי
footerLinkPrivacy = פרטיות

View file

@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Hotowy za słanje
uploadSvgAlt = Nahrać
uploadSuccessTimingHeader = Wotkaz k wašej dataji po 1 sćehnjenju abo 24 hodźinach spadnje.
expireInfo = Wotkaz k wašej dataji po { $downloadCount } abo { $timespan } spadnje.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 sćehnjenje
[two] { $num } sćehnjeni
[few] { $num } sćehnjenja
*[other] { $num } sćehnjenjow
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 hodźina
[two] { $num } hodźinje
[few] { $num } hodźiny

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Küldésre kész
uploadSvgAlt = Feltöltés
uploadSuccessTimingHeader = A fájl hivatkozása lejár 1 letöltés vagy 24 óra múlva.
expireInfo = A fájlhoz tartozó hivatkozás { $downloadCount } vagy { $timespan } múlva lejár.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 letöltés
*[other] { $num } letöltés
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 óra
*[other] { $num } óra
}

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Preste a inviar
uploadSvgAlt = Cargamento
uploadSuccessTimingHeader = Le ligamine a tu file expirara post un discargamento o in 24 horas.
expireInfo = Le ligamine a tu file expirara post { $downloadCount } o { $timespan }
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] discargamento
*[other] discargamentos
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] hora
*[other] horas
}

View file

@ -112,5 +112,9 @@ enableJavascript = Silakan aktifkan JavaScript dan coba lagi.
expiresHoursMinutes = { $hours }j { $minutes }m
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes }m
# A short status message shown when a password is successfully set
passwordIsSet = Sandi diatur
# A short status message shown when the user enters a long password
maxPasswordLength = Panjang sandi maksimal: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Tidak bisa menyetel sandi ini

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Pronto per linvio
uploadSvgAlt = Carica
uploadSuccessTimingHeader = Il link al file scadrà dopo 1 download o in 24 ore.
expireInfo = Il link a questo file scadrà dopo { $downloadCount } o { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 download
*[other] { $num } download
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 ora
*[other] { $num } ore
}

View file

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 送信準備完了
uploadSvgAlt = アップロード
uploadSuccessTimingHeader = ファイルへのリンクは、1 回ダウンロードされた後、もしくは 24 時間以内に期限切れとなります。
expireInfo = このファイルへのリンクは { $downloadCount } あるいは { $timespan } 後に期限切れとなります。
downloadCount = { $num ->
downloadCount =
{ $num ->
*[other] { $num } 回のダウンロード
}
timespanHours = { $num ->
timespanHours =
{ $num ->
*[other] { $num } 時間
}
copyUrlFormLabelWithName = ファイルを送信するにはこのリンクをコピー、共有してください: { $filename }

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ihegga i walluy
uploadSvgAlt = Sali
uploadSuccessTimingHeader = Aseɣwen ar ufaylu-ik ad yemmet ticki yuder-d neɣ deffir n 24 n yisragen.
expireInfo = Aseɣwen icudden ar ufaylu-inek ad yemmet send { $downloadCount } naɣ { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 usider
*[other] { $num } isidar
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 usrag
*[other] { $num } isragen
}

View file

@ -18,7 +18,7 @@ verifyingFile = 확인하는 중…
encryptingFile = 암호화 중…
decryptingFile = 복호화 중…
notifyUploadDone = 업로드가 완료되었습니다.
uploadingPageMessage = 파일이 업로드 되고나서 만료 옵션을 설정할 수 있습니다.
uploadingPageMessage = 파일이 업로드 되고 나서 만료 옵션을 설정할 수 있습니다.
uploadingPageCancel = 업로드 취소
uploadCancelNotification = 업로드가 취소되었습니다.
uploadingPageLargeFileMessage = 이 파일은 크기가 커서 시간이 다소 걸릴 수 있습니다. 잠시만 기다려주세요!

View file

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = Sedia untuk Hantar
uploadSvgAlt = Muat naik
uploadSuccessTimingHeader = Pautan ke fail anda akan luput selepas 1 muat turun atau dalam 24 jam.
expireInfo = Pautan ke fail anda akan luput selepas { $downloadCount } atau { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
*[other] { $num } muat turun
}
timespanHours = { $num ->
timespanHours =
{ $num ->
*[other] { $num } jam
}
copyUrlFormLabelWithName = Salin dan kongsi pautan untuk menghantar fail anda: { $filename }

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klar til å sende
uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenken til filen din utløper etter 1 nedlasting eller om 24 timer.
expireInfo = Lenken til filen din vil gå ut etter { $downloadCount } eller { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 nedlasting
*[other] { $num } nedlastinger
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 time
*[other] { $num } timer
}

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Gereed voor verzending
uploadSvgAlt = Uploaden
uploadSuccessTimingHeader = De koppeling naar uw bestand zal na 1 download of 24 uur verlopen.
expireInfo = De koppeling naar uw bestand zal na { $downloadCount } of { $timespan } verlopen.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 uur
*[other] { $num } uur
}

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klår til å senda
uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenka til fila di går ut etter 1 nedlasting eller om 24 timar.
expireInfo = Lenka til fila di vil gå ut etter { $downloadCount } eller { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 nedlasting
*[other] { $num } nedlastingar
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 time
*[other] { $num } timar
}

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Pronto para enviar
uploadSvgAlt = Enviado
uploadSuccessTimingHeader = O link para o seu arquivo expirará após 1 download ou em 24 horas.
expireInfo = O link para o seu arquivo expirará após { $downloadCount } ou { $timepan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 hora
*[other] { $num } horas
}

View file

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Pripravené na odoslanie
uploadSvgAlt = Nahrať
uploadSuccessTimingHeader = Platnosť odkazu vyprší po 1 prevzatí alebo po uplynutí 24 hodín.
expireInfo = Platnosť odkazu na váš súbor vyprší po { $downloadCount } alebo po { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 prevzatí
[few] { $num } prevzatiach
*[other] { $num } prevzatiach
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 hodine
[few] { $num } hodinách
*[other] { $num } hodinách

View file

@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Pripravljeno za pošiljanje
uploadSvgAlt = Naloži
uploadSuccessTimingHeader = Povezava do vaše datoteke bo potekla po enem prenosu ali v 24 urah.
expireInfo = Povezava do vaše datoteke bo potekla čez { $downloadCount } ali { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 prenos
[two] { $num } prenosa
[few] { $num } prenosi
*[other] { $num } prenosov
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 ura
[two] { $num } uri
[few] { $num } ure

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Gati për Dërgim
uploadSvgAlt = Ngarkoje
uploadSuccessTimingHeader = Lidhja për te kartela juaj do të skadojë pas 1 shkarkimi ose pas 24 orësh.
expireInfo = Lidhja për te kartela juaj do të skadojë pas { $downloadCount } ose { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 shkarkimi
*[other] { $num } shkarkimesh
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 ore
*[other] { $num } orësh
}

View file

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Спреман за слање
uploadSvgAlt = Отпреми
uploadSuccessTimingHeader = Веза ка вашој датотеци ће истећи након једног преузимања или након 24 сата.
expireInfo = Веза ка вашој датотеци ће истећи након { $downloadCount } или { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] преузимања
[few] преузимања
*[other] преузимања
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] сата
[few] сата
*[other] сати

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klar för att skicka
uploadSvgAlt = Ladda upp
uploadSuccessTimingHeader = Länken till din fil upphör att gälla efter 1 nedladdning eller om 24 timmar.
expireInfo = Länken till din fil upphör att gälla efter { $downloadCount } eller { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 nedladdning
*[other] { $num } nedladdningar
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 timme
*[other] { $num } timmar
}

View file

@ -7,6 +7,7 @@ uploadPageDropMessage = ఎగుమతిని ప్రారంభించ
uploadPageSizeMessage = అత్యంత నమ్మకమైన కార్యం కోసం, మీ ఫైలును 1GB కంటే తక్కువగా ఉంచడం ఉత్తమం
uploadPageBrowseButton = మీ కంప్యూటర్లో ఒక ఫైలును ఎంచుకోండి
uploadPageBrowseButton1 = ఎక్కించటానికి ఒక ఫైలును ఎంచుకోండి
uploadPageMultipleFilesAlert = పలు ఫైళ్ళను లేదా సంయచాన్ని ఎక్కించడానికి ప్రస్తుతం తోడ్పాటు లేదు.
uploadPageBrowseButtonTitle = ఫైలును ఎగుమతి చేయండి
uploadingPageProgress = { $filename } ({ $size }) ఎక్కుతోంది
importingFile = దిగుమతవుతోంది...
@ -64,6 +65,7 @@ errorAltText = ఎగుమతిలో లోపం
errorPageHeader = ఏదో తప్పిదం జరిగింది!
errorPageMessage = ఫైల్ను ఎగుమతి చేయడంలో లోపం ఉంది.
errorPageLink = మరో ఫైలును పంపండి
fileTooBig = ఆ ఫైలు ఎక్కించడానికి చాలా పెద్దగా ఉంది. ఫైళ్ళు { $size } కంటే తక్కువ పరిమాణంలో ఉండాలి.
linkExpiredAlt = లంకె గడువు ముగిసింది
expiredPageHeader = ఈ లంకె గడువు ముగిసింది లేదా ముందు ఎప్పుడూ ఉనికిలో లేదు!
notSupportedHeader = మీ విహారిణికి మద్దతు లేదు.

View file

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Handa nang Ipadala
uploadSvgAlt = I-upload
uploadSuccessTimingHeader = Mag-e-expire ang link sa iyong file pagkatapos ng 1 pag-download o sa loob ng 24 na oras.
expireInfo = Mag-e-expire ang link sa iyong file pagkatapos ng { $downloadCount } o { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 pag-download
*[other] { $num } na mga pag-download
}
timespanHours = { $num ->
timespanHours =
{ $num ->
*[one] 1 oras
}
copyUrlFormLabelWithName = Kopyahin at ibahagi ang link upang ipadala ang iyong file: { $filename }

View file

@ -84,7 +84,7 @@ expiryFileList = Bitiş süresi
deleteFileList = Sil
nevermindButton = Boş ver
legalHeader = Şart ve Koşullar
legalNoticeTestPilot = Firefox Send bir Test Pilotu deneyidir ve Test Pilotu <a>Hizmet Koşulları</a> ile <a>Gizlilik Bildirimi</a>ne tabidir. Bu deney ve topladığı veriler hakkında daha fazla bilgi almak isterseniz <a>buraya</a> bakabilirsiniz.
legalNoticeTestPilot = Firefox Send bir Test Pilotu deneyidir ve Test Pilotu <a>Hizmet Koşulları</a> ile <a>Gizlilik Bildirimi</a>ne tabidir. Bu deney ve topladığı veriler hakkında daha fazla bilgi almak isterseniz <a>buraya</a> bakabilirsiniz.
legalNoticeMozilla = Firefox Sendi kullanmak Mozillanın <a>Web Siteleri Gizlilik Bildirimi</a> ve <a>Web Siteleri Kullanım Koşulları</a>na da tabidir.
deletePopupText = Bu dosya silinsin mi?
deletePopupYes = Evet

View file

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Готовий до надсилання
uploadSvgAlt = Вивантажити
uploadSuccessTimingHeader = Час дії цього посилання закінчиться після 1 завантаження, або через 24 години.
expireInfo = Посилання на ваш файл стане недійсним після { $downloadCount } файла, або через { $timespan }.
downloadCount = { $num ->
downloadCount =
{ $num ->
[one] 1 завантаження
[few] { $num } завантаження
*[other] { $num } завантажень
}
timespanHours = { $num ->
timespanHours =
{ $num ->
[one] 1 година
[few] { $num } години
*[other] { $num } годин

View file

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 准备好发送
uploadSvgAlt = 上传
uploadSuccessTimingHeader = 您的文件的链接将在首次下载或 24 小时后过期。
expireInfo = 指向该文件的链接将在 { $downloadCount } 或 { $timespan } 后过期。
downloadCount = { $num ->
downloadCount =
{ $num ->
*[other] { $num } 次下载
}
timespanHours = { $num ->
timespanHours =
{ $num ->
*[other] { $num } 小时
}
copyUrlFormLabelWithName = 复制并分享链接以发送您的文件:{ $filename }

View file

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 準備好傳送
uploadSvgAlt = 上傳
uploadSuccessTimingHeader = 您的檔案鏈結將會在首次下載,或 24 小時後失效。
expireInfo = 檔案鏈結將在 { $downloadCount }或 { $timespan }後失效。
downloadCount = { $num ->
downloadCount =
{ $num ->
*[other] { $num } 次下載
}
timespanHours = { $num ->
timespanHours =
{ $num ->
*[other] { $num } 小時
}
copyUrlFormLabelWithName = 複製並分享鏈結來傳送您的檔案: { $filename }

View file

@ -14,8 +14,17 @@ module.exports = async function(req, res) {
'WWW-Authenticate': `send-v1 ${req.nonce}`
});
const file_stream = storage.get(id);
let cancelled = false;
file_stream.on('end', async () => {
req.on('close', () => {
cancelled = true;
file_stream.destroy();
});
file_stream.on('close', async () => {
if (cancelled) {
return;
}
const dl = meta.dl + 1;
const dlimit = meta.dlimit;
try {
@ -28,6 +37,7 @@ module.exports = async function(req, res) {
log.info('StorageError:', id);
}
});
file_stream.pipe(res);
} catch (e) {
res.sendStatus(404);

View file

@ -134,6 +134,27 @@ describe('Upload / Download flow', function() {
}
});
it('can cancel and not increase download count', async function() {
const fs = new FileSender(blob);
const file = await fs.upload();
const fr = new FileReceiver({
secretKey: file.toJSON().secretKey,
id: file.id,
nonce: file.keychain.nonce,
requiresPassword: false
});
await fr.getMetadata();
fr.once('progress', () => fr.cancel());
try {
await fr.download(noSave);
assert.fail('not cancelled');
} catch (e) {
await file.updateDownloadCount();
assert.equal(file.dtotal, 0);
}
});
it('can allow multiple downloads', async function() {
const fs = new FileSender(blob);
const file = await fs.upload();

View file

@ -1,8 +1,8 @@
selenium==3.12.0
selenium==3.13.0
flake8==3.5.0
flake8-isort==2.5
PyPOM==2.0.0
pytest==3.6.0
pytest-html==1.18.0
pytest==3.6.3
pytest-html==1.19.0
pytest-selenium==1.13.0
pytest-xdist==1.22.2