Merge remote-tracking branch 'origin/vnext' into droid-ui-2

This commit is contained in:
Danny Coates 2018-11-06 10:54:44 -08:00
commit 732094a5ba
No known key found for this signature in database
GPG key ID: 4C442633C62E00CB
21 changed files with 138 additions and 253 deletions

View file

@ -31,19 +31,23 @@ progress::-webkit-progress-value {
@apply rounded-sm;
}
.word-break-all {
word-break: break-all;
}
.main {
display: flex;
max-width: 64rem;
width: 100%;
height: 100%;
}
.main > section {
@apply bg-white;
@apply shadow;
}
.header-logo {
background-image: url('../assets/send_logo.svg');
background-image: url('../assets/send_logo_white.svg');
background-position: left;
background-repeat: no-repeat;
background-size: 1.8rem;
@ -145,11 +149,16 @@ progress::-webkit-progress-value {
@apply flex-1;
@apply self-center;
@apply items-center;
@apply my-10;
@apply m-auto;
@apply py-8;
width: calc(100% - 3rem);
min-height: 30rem;
min-height: 33rem;
max-height: 40rem;
width: calc(100% - 3rem);
}
.header-logo {
background-image: url('../assets/send_logo.svg');
}
.main > section {

View file

@ -16,7 +16,7 @@ function banner(state, emit) {
function body(main) {
return function(state, emit) {
const b = html`<body class="flex flex-col items-center font-sans bg-blue-lightest md:h-screen md:bg-grey-lightest justify-between">
const b = html`<body class="flex flex-col items-center font-sans bg-blue-lightest md:h-screen md:bg-grey-lightest">
${banner(state, emit)}
${header(state, emit)}
${main(state, emit)}

View file

@ -36,7 +36,7 @@ function password(state) {
id="password-input"
class="${
state.password ? '' : 'invisible'
} border rounded-sm focus:border-blue leading-normal mt-2 py-1 px-2 h-8"
} border rounded-sm focus:border-blue leading-normal my-2 py-1 px-2 h-8"
autocomplete="off"
maxlength="${MAX_LENGTH}"
type="password"
@ -96,7 +96,7 @@ function fileInfo(file, action) {
<article class="flex flex-row items-center p-3">
<img class="" src="${assets.get('blue_file.svg')}"/>
<p class="ml-4 w-full">
<h1 class="text-sm font-medium">${file.name}</h1>
<h1 class="text-sm font-medium word-break-all">${file.name}</h1>
<div class="text-xs font-normal opacity-75 pt-1">${bytes(
file.size
)}</div>
@ -137,7 +137,7 @@ module.exports = function(state, emit, archive) {
alt="Delete"
src="${assets.get('close-16.svg')}"
onclick=${del}/>
<h1 class="text-sm font-medium">${archive.name}</h1>
<h1 class="text-sm font-medium word-break-all">${archive.name}</h1>
<div class="text-xs font-normal opacity-75 pt-1">${bytes(
archive.size
)}</div>
@ -174,11 +174,13 @@ module.exports = function(state, emit, archive) {
module.exports.wip = function(state, emit) {
return html`
<article class="flex flex-col bg-white z-20 md:h-full">
<article class="h-full flex flex-col bg-white z-20" id="wip">
${list(
state.archive.files.map(f => fileInfo(f, remove(f))),
'list-reset h-full overflow-y-scroll p-4 bg-blue-lightest md:max-h-half-screen',
'bg-white px-2 mb-3 border border-grey-light rounded'
Array.from(state.archive.files)
.reverse()
.map(f => fileInfo(f, remove(f))),
'list-reset h-full overflow-y-scroll px-4 bg-blue-lightest md:max-h-half-screen',
'bg-white px-2 mt-3 border border-grey-light rounded'
)}
<div class="flex-grow p-4 bg-blue-lightest mb-6 font-medium">
<input
@ -199,7 +201,7 @@ module.exports.wip = function(state, emit) {
${password(state, emit)}
<button
id="upload-btn"
class="rounded bg-blue hover\:bg-blue-dark focus\:bg-blue-darker cursor-pointer text-center text-white py-2 px-6 h-12 mt-4 flex flex-no-shrink items-center justify-center font-semibold"
class="rounded bg-blue hover\:bg-blue-dark focus\:bg-blue-darker cursor-pointer text-center text-white py-2 px-6 h-12 flex flex-no-shrink items-center justify-center font-semibold"
title="${state.translate('uploadSuccessConfirmHeader')}"
onclick=${upload}>
${state.translate('uploadSuccessConfirmHeader')}
@ -207,6 +209,7 @@ module.exports.wip = function(state, emit) {
</article>`;
function upload(event) {
window.scrollTo(0, 0);
event.preventDefault();
event.target.disabled = true;
if (!state.uploading) {
@ -223,6 +226,11 @@ module.exports.wip = function(state, emit) {
const newFiles = Array.from(event.target.files);
emit('addFiles', { files: newFiles });
setTimeout(() => {
document
.querySelector('#wip > ul > li:first-child')
.scrollIntoView({ block: 'center' });
});
}
function remove(file) {
@ -250,7 +258,7 @@ module.exports.uploading = function(state, emit) {
class="z-20 flex flex-col items-start border border-grey-light bg-white p-4">
<p class="w-full">
<img class="float-left mr-3" src="${assets.get('blue_file.svg')}"/>
<h1 class="text-sm font-medium">${archive.name}</h1>
<h1 class="text-sm font-medium word-break-all">${archive.name}</h1>
<div class="text-xs font-normal opacity-75 pt-1">${bytes(
archive.size
)}</div>
@ -280,7 +288,8 @@ module.exports.uploading = function(state, emit) {
module.exports.empty = function(state, emit) {
return html`
<article class="flex flex-col items-center justify-center border border-dashed border-blue-light px-6 py-16 md:h-full">
<article class="flex flex-col items-center justify-center border-2 border-dashed border-blue-light px-6 py-16 h-full"
onclick=${() => document.getElementById('file-upload').click()}>
<img src="${assets.get('addfiles.svg')}" width="48" height="48"/>
<div class="pt-6 pb-2 text-center text-lg font-bold uppercase tracking-wide">${state.translate(
'uploadDropDragMessage'
@ -293,7 +302,8 @@ module.exports.empty = function(state, emit) {
class="hidden"
type="file"
multiple
onchange=${add} />
onchange=${add}
onclick=${e => e.stopPropagation()} />
<label
for="file-upload"
class="rounded bg-blue hover\:bg-blue-dark focus\:bg-blue-darker cursor-pointer text-center text-white py-2 px-6 h-12 mt-4 flex flex-no-shrink items-center justify-center font-semibold"
@ -319,7 +329,7 @@ module.exports.preview = function(state, emit) {
<article class="flex flex-col max-h-full bg-white border border-grey-light p-4 z-20">
<p class="w-full mb-4">
<img class="float-left mr-3" src="${assets.get('blue_file.svg')}"/>
<h1 class="text-sm font-medium">${archive.name}</h1>
<h1 class="text-sm font-medium word-break-all">${archive.name}</h1>
<div class="text-xs font-normal opacity-75 pt-1">${bytes(
archive.size
)}</div>
@ -349,7 +359,7 @@ module.exports.downloading = function(state, emit) {
<article class="flex flex-col bg-white border border-grey-light p-4 z-20">
<p class="w-full mb-4">
<img class="float-left mr-3" src="${assets.get('blue_file.svg')}"/>
<h1 class="text-sm font-medium">${archive.name}</h1>
<h1 class="text-sm font-medium word-break-all">${archive.name}</h1>
<div class="text-xs font-normal opacity-75 pt-1">${bytes(
archive.size
)}</div>

View file

@ -6,7 +6,7 @@ module.exports = function(name, url) {
return html`
<div class="flex flex-col items-center text-center p-4 max-w-sm">
<h1 class="font-bold my-4">${state.translate('notifyUploadDone')}</h1>
<p class="font-normal leading-normal text-grey-darker">${state.translate(
<p class="font-normal leading-normal text-grey-darker word-break-all">${state.translate(
'copyUrlFormLabelWithName',
{ filename: name }
)}</p>

View file

@ -4,13 +4,15 @@ const assets = require('../../common/assets');
module.exports = function(state) {
return html`
<main class="main container">
<div class="flex flex-col items-center bg-white m-6 p-6 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-2xl">${state.translate('errorPageHeader')}</h1>
<div class="flex flex-col items-center bg-white m-6 px-6 py-8 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-2xl text-center">${state.translate(
'errorPageHeader'
)}</h1>
<img class="my-16" src="${assets.get('illustration_error.svg')}"/>
<p class="max-w-md leading-normal">
${state.translate('uploadPageExplainer')}
</p>
<a class="text-blue my-10 font-medium" href="/">
<a class="text-blue mt-10 font-medium" href="/">
${state.translate('sendYourFilesLink')}
</a>
</div>

View file

@ -10,7 +10,8 @@ module.exports = function(state, emit) {
<div class="">
${raw(
state.translate('frontPageExpireInfo', {
downloadCount: '<select id="dlCount"></select>',
downloadCount:
'<span class="lg:inline-block md:block sm:inline-block block"></span><select id="dlCount"></select>',
timespan: '<select id="timespan"></select>'
})
)}

View file

@ -15,10 +15,6 @@ module.exports = function(state) {
href="https://www.mozilla.org/about/legal">
${state.translate('footerLinkLegal')}
</a></li>
<li class="m-2"><a
href="https://testpilot.firefox.com/about">
${state.translate('footerLinkAbout')}
</a></li>
<li class="m-2"><a
href="/legal">
${state.translate('footerLinkTerms')}

View file

@ -3,7 +3,7 @@ const assets = require('../../common/assets');
module.exports = function() {
return html`
<div class="w-full flex-none flex flex-row items-center content-center justify-center text-sm bg-grey-light text-grey-darkest h-12 px-4">
<div class="w-full flex-none flex flex-row items-center content-center justify-center text-sm bg-grey-light leading-tight text-grey-darkest px-4 py-3">
<div class="flex items-center mx-auto">
<img
src="${assets.get('firefox_logo-only.svg')}"

View file

@ -3,11 +3,11 @@ const account = require('./account');
module.exports = function(state, emit) {
const header = html`
<header class="relative flex-none flex flex-row items-center justify-between bg-white w-full px-6 h-16 shadow z-20">
<header class="relative flex-none flex flex-row items-center justify-between bg-blue md:bg-white w-full px-6 h-16 md:shadow z-20">
<a
class="header-logo"
href="/">
<h1 class="text-black font-normal">Firefox <b>Send</b></h1>
<h1 class="text-white md:text-black font-normal">Firefox <b>Send</b></h1>
</a>
${account(state, emit)}
<div class="invisible absolute pin-t pin-l mt-12 w-full flex flex-col items-center pointer-events-none">

View file

@ -23,11 +23,11 @@ module.exports = function(state, emit) {
: list(archives, 'list-reset h-full overflow-y-scroll', 'mb-3');
return html`
<main class="main md:relative">
<main class="main relative">
${state.modal && modal(state, emit)}
<section class="h-full w-full p-6 md:flex md:flex-row z-10">
<div class="md:mr-6 md:w-1/2">${left}</div>
<div class="md:w-1/2 overflow-y-scroll mt-6 md:mt-0">${right}</div>
<div class="md:w-1/2 mt-6 md:mt-0">${right}</div>
</section>
</main>`;
};

View file

@ -3,18 +3,20 @@ const assets = require('../../common/assets');
module.exports = function intro(state) {
return html`
<article class="flex flex-col items-center justify-between bg-white border border-grey-light md:border-none px-6 md:py-10 py-6 md:mb-0 mb-6">
<p class="text-center">
<div class="font-semibold leading-normal">${state.translate(
'uploadPageHeader'
)}</div>
<div class="italic text-sm opacity-75 leading-normal">${state.translate(
'pageHeaderCredits'
)}</div>
</p>
<img class="my-6" src="${assets.get('illustration_download.svg')}"/>
<p class="md:mx-6 max-w-sm text-sm opacity-50 leading-normal">${state.translate(
'uploadPageExplainer'
)}</p>
<article class="flex flex-col items-center justify-center bg-white border border-grey-light md:border-none px-6 text-center md:py-0 py-6 md:mb-0 mb-6 h-full">
<div class="flex flex-col items-center justify-between h-full py-8">
<p class="text-center">
<div class="font-semibold leading-normal">${state.translate(
'uploadPageHeader'
)}</div>
<div class="italic text-sm opacity-75 leading-normal">${state.translate(
'pageHeaderCredits'
)}</div>
</p>
<img class="my-6" src="${assets.get('illustration_download.svg')}"/>
<p class="md:mx-6 max-w-sm text-sm opacity-50 leading-normal">${state.translate(
'uploadPageExplainer'
)}</p>
</div>
</article>`;
};

View file

@ -4,8 +4,8 @@ const raw = require('choo/html/raw');
module.exports = function(state) {
return html`
<main class="main container">
<div class="flex flex-col items-center bg-white m-6 p-6 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-2xl">${state.translate('legalHeader')}</h1>
<div class="flex flex-col items-center bg-white m-6 px-6 py-8 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-2xl text-center">${state.translate('legalHeader')}</h1>
${raw(
replaceLinks(state.translate('legalNoticeTestPilot'), [
'https://testpilot.firefox.com/terms',

View file

@ -2,7 +2,7 @@ const html = require('choo/html');
module.exports = function(state, emit) {
return html`
<div class="absolute pin flex items-center justify-center overflow-hidden z-40 bg-cloud" onclick=${close}>
<div class="absolute pin flex items-center justify-center overflow-hidden z-40 bg-cloud md:my-8" onclick=${close}>
<div class="h-full max-h-screen absolute pin-t flex items-center">
<div class="shadow-cloud bg-white" onclick=${e => e.stopPropagation()}>
${state.modal(state, emit, close)}

View file

@ -4,8 +4,8 @@ const assets = require('../../common/assets');
module.exports = function(state) {
return html`
<main class="main container">
<div class="flex flex-col items-center bg-white m-6 p-6 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-pink-dark text-2xl">${state.translate(
<div class="flex flex-col items-center bg-white m-6 px-6 py-8 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-pink-dark text-2xl text-center">${state.translate(
'expiredPageHeader'
)}</h1>
<img class="my-16" src="${assets.get(
@ -14,7 +14,7 @@ module.exports = function(state) {
<p class="max-w-md leading-normal">
${state.translate('uploadPageExplainer')}
</p>
<a class="text-blue my-10 font-medium" href="/">
<a class="text-blue mt-10 font-medium" href="/">
${state.translate('sendYourFilesLink')}
</a>
</div>

View file

@ -4,7 +4,7 @@ module.exports = function(selected, options, translate, changed) {
let x = selected;
return html`
<select class="appearance-none cursor-pointer border rounded-sm bg-blue-lightest hover:border-blue focus:border-blue px-2 py-1 mx-1 h-8" onchange=${choose}>
<select class="appearance-none cursor-pointer border rounded-sm bg-blue-lightest hover:border-blue focus:border-blue px-2 py-1 my-2 h-8" onchange=${choose}>
${options.map(
i =>
html`<option value="${i}" ${

View file

@ -31,13 +31,13 @@ module.exports = function(state) {
return html`
<main class="main container">
<div class="flex flex-col items-center bg-white m-6 p-6 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<div class="flex flex-col items-center bg-white m-6 px-6 py-8 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full">
<h1 class="text-center text-2xl">${strings.header}</h1>
<p class="my-10 max-w-md leading-normal">
${strings.description}
</p>
${why}
<a href="${url}" class="border border-green-light rounded bg-green hover\:bg-green-dark focus\:bg-green-darker flex items-center justify-center text-2xl text-white my-10 py-4 px-6">
<a href="${url}" class="border border-green-light rounded bg-green hover\:bg-green-dark focus\:bg-green-darker flex items-center justify-center text-2xl text-white mt-10 py-4 px-6">
<img
src="${assets.get('firefox_logo-only.svg')}"
class="w-10"

View file

@ -128,7 +128,9 @@ export default class User {
);
list = JSON.parse(textDecoder.decode(decrypted));
} catch (e) {
//
if (e.message === '401') {
return this.logout();
}
}
changes = await this.storage.merge(list);
if (!changes.outgoing) {

View file

@ -0,0 +1 @@
<svg width="30" height="27" viewBox="0 0 30 27" xmlns="http://www.w3.org/2000/svg"><title>send logo</title><g stroke="#ffffff" fill="none" fill-rule="evenodd" transform="translate(-0.231,0.11948695)"><path d="M22.364 19.989l-2.153-2.103a2.046 2.046 0 0 0-2.665-.151l3.402 3.323a.531.531 0 0 1 0 .766l-2.466 2.408a.563.563 0 0 1-.784 0l-3.398-3.32a1.932 1.932 0 0 0 .188 2.564l2.153 2.103c.788.77 2.066.77 2.855 0l2.868-2.802a1.94 1.94 0 0 0 0-2.788M8.77 14.745a.534.534 0 0 0 0 .766l3.399 3.32a2.05 2.05 0 0 1-2.625-.184l-2.153-2.102a1.94 1.94 0 0 1 0-2.79l2.869-2.801a2.052 2.052 0 0 1 2.854 0l2.153 2.103c.73.713.775 1.83.154 2.603l-3.401-3.323a.565.565 0 0 0-.784 0L8.77 14.745zm9.464 5.682a.777.777 0 0 1 0 1.118.822.822 0 0 1-1.144 0l-5.6-5.47a.777.777 0 0 1 0-1.118.822.822 0 0 1 1.144 0l5.6 5.47z" stroke-width=".618" fill="#ffffff"/><path d="M6.065 20.606c-2.913-1.586-3.988-3.656-3.988-6.468 0-2.81 2.265-6.425 5.786-6.289.1.004.55-.006.649 0 .895-3.27 2.508-6.353 6.898-6.353 4.557 0 7.336 3.716 6.75 7.785.08-.005 1.232.17 1.31.186 3.096.644 4.915 3.275 4.915 5.18 0 1.905-.107 3.029-2.023 4.947" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

241
package-lock.json generated
View file

@ -940,9 +940,9 @@
"integrity": "sha512-QzB0/IMvB0eFxFK7Eqh+bfC8NLv3E9ScjWQrPOk6GgfNroxcVITdTlT8NRsRrcp5+QQJVPLkRqKG0PUdaWXmHw=="
},
"@google-cloud/storage": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-2.2.0.tgz",
"integrity": "sha512-aBzcOJELU8N3a78D+Q3InIJ1x3GnhdWgMCjr8mxO6o1mJhDcQp4k2gjE4WijIp7OB2Vtol/NPudvdvgYyHE+tg==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-2.3.0.tgz",
"integrity": "sha512-5IT6lkTJPNpWZDtHSL7AzDOIDMhkdl1ruxrLryVXsuaP61F8IukMgtoxG0KxH199FoRxCw2fFUvkB5guPTf8fQ==",
"requires": {
"@google-cloud/common": "^0.26.0",
"@google-cloud/paginator": "^0.1.0",
@ -1041,9 +1041,9 @@
"integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A=="
},
"@types/duplexify": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.5.0.tgz",
"integrity": "sha512-+aZCCdxuR/Q6n58CBkXyqGqimIqpYUcFLfBXagXv7e9TdJUevqkKhzopBuRz3RB064sQxnJnhttHOkK/O93Ouw==",
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz",
"integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==",
"requires": {
"@types/node": "*"
}
@ -1057,14 +1057,14 @@
}
},
"@types/node": {
"version": "10.12.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.1.tgz",
"integrity": "sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ=="
"version": "10.12.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.2.tgz",
"integrity": "sha512-53ElVDSnZeFUUFIYzI8WLQ25IhWzb6vbddNp8UHlXQyU0ET2RhV5zg0NfubzU7iNMh5bBXb0htCzfvrSVNgzaQ=="
},
"@types/request": {
"version": "2.48.0",
"resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.0.tgz",
"integrity": "sha512-KnfoOtqXKllSqfXSEvGTd8KDkNlpHs+PWr6I6XiEIWk/jckH3pNmWDXNFZyPkB9wApb8vzDq2wMByM/0GFSmXg==",
"version": "2.48.1",
"resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz",
"integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==",
"requires": {
"@types/caseless": "*",
"@types/form-data": "*",
@ -1073,9 +1073,9 @@
}
},
"@types/tough-cookie": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz",
"integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ=="
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw=="
},
"@types/whatwg-streams": {
"version": "0.0.6",
@ -1714,9 +1714,9 @@
}
},
"aws-sdk": {
"version": "2.348.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.348.0.tgz",
"integrity": "sha512-TfguapuOAwk7EG8zhYJPjkCaF4tyGjfgcXLkYbWbuS4O6E8pn0x2K5Yt1KXwLiWxG0fzKCLiiaNA5H7bKAP4YQ==",
"version": "2.349.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.349.0.tgz",
"integrity": "sha512-yGYCvXOKpvLfbhh1Vo+/2q+Z5bRdPlFpXX3kHBGz4haI6ZoLfFGuztap4en83zim/wpG1ZrhVJjd9u+i9l1ZEA==",
"requires": {
"buffer": "4.9.1",
"events": "1.1.1",
@ -2104,15 +2104,6 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true
},
"boom": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -3167,26 +3158,6 @@
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
},
"cryptiles": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.3.tgz",
"integrity": "sha512-8dAQYBGMc/c0oOfLED0/t7XJ3DOiGqxwBT9qsj4KrW7e3ICflVCUpXZj8GbjEW38eYueJfGWlMq6dEX6cnWoyg==",
"dev": true,
"requires": {
"boom": "5.x.x"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
}
}
},
"crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@ -3570,9 +3541,9 @@
"dev": true
},
"cssdb": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.1.0.tgz",
"integrity": "sha512-qaEHVEtScIHoBgdTEHNUMKQw7GXfVYHiaFcL8jerXWJ47lNBy2PgApHdHbR4yovVJsZK6Zq+YkBw8MuhAOvixg==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.2.0.tgz",
"integrity": "sha512-27CuM+rp1/HIH4hkiOvrRUjgv31WamWk7+XSGz7OP/uWR8EOMeXOh4Ncpa/Eq1eO/1eRhQx7HWj8KEbt4nKQBA==",
"dev": true
},
"cssesc": {
@ -6980,18 +6951,6 @@
"minimalistic-assert": "^1.0.1"
}
},
"hawk": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true,
"requires": {
"boom": "4.x.x",
"cryptiles": "3.x.x",
"hoek": "4.x.x",
"sntp": "2.x.x"
}
},
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@ -7057,12 +7016,6 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
"hoek": {
"version": "4.2.1",
"resolved": "http://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
"dev": true
},
"homedir-polyfill": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
@ -9710,9 +9663,9 @@
}
},
"node-fetch": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz",
"integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA=="
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.1.tgz",
"integrity": "sha512-ObXBpNCD3A/vYQiQtEWl7DuqjAXjfptYFuGHLdPl5U19/6kJuZV+8uMHLrkj3wJrJoyfg4nhgyFixZdaZoAiEQ=="
},
"node-forge": {
"version": "0.7.6",
@ -12514,9 +12467,9 @@
}
},
"postcss-custom-properties": {
"version": "8.0.8",
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.8.tgz",
"integrity": "sha512-G3U8uSxj0B4jPJ1QBF5WYeW716n5HV/wcH2lOTV1V+EI+F0T0/ZOhl32MLLTMD79bN2mE77IOoclbCoLl4QtPA==",
"version": "8.0.9",
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.9.tgz",
"integrity": "sha512-/Lbn5GP2JkKhgUO2elMs4NnbUJcvHX4AaF5nuJDaNkd2chYW1KA5qtOGGgdkBEWcXtKSQfHXzT7C6grEVyb13w==",
"dev": true,
"requires": {
"postcss": "^7.0.5",
@ -15069,14 +15022,14 @@
}
},
"postcss-preset-env": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.3.0.tgz",
"integrity": "sha512-3iTlt9tuD7QsQ9wdJwr7E7hjVlNKrN6Fk/nChxJAtHHTLbtVdD25W6ogM7bgkv1xCjClU5w33Hb28dBG435FLQ==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.3.1.tgz",
"integrity": "sha512-erl+OcCTr1+jsfJNQjBweyb8Y1s6KngUBwoqJnRXO197PmEE6u9HxZfnpKkTQqasxZljxNHzXR5hMb7MdD0Zdw==",
"dev": true,
"requires": {
"autoprefixer": "^9.3.1",
"browserslist": "^4.3.4",
"caniuse-lite": "^1.0.30000899",
"caniuse-lite": "^1.0.30000905",
"cssdb": "^4.1.0",
"postcss": "^7.0.5",
"postcss-attribute-case-insensitive": "^4.0.0",
@ -15086,7 +15039,7 @@
"postcss-color-mod-function": "^3.0.3",
"postcss-color-rebeccapurple": "^4.0.1",
"postcss-custom-media": "^7.0.7",
"postcss-custom-properties": "^8.0.8",
"postcss-custom-properties": "^8.0.9",
"postcss-custom-selectors": "^5.1.2",
"postcss-dir-pseudo-class": "^5.0.0",
"postcss-double-position-gradients": "^1.0.0",
@ -15119,6 +15072,12 @@
"color-convert": "^1.9.0"
}
},
"caniuse-lite": {
"version": "1.0.30000905",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000905.tgz",
"integrity": "sha512-cR6ICguvhRrkAjFfBoe54vJQMVOEz7vFmqrV6oor1a7GRg6DdswI40lkiV/QQvAMb4txzTkjSaLaJaiAtSuQzA==",
"dev": true
},
"chalk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
@ -17485,15 +17444,6 @@
}
}
},
"sntp": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
},
"sockjs": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
@ -17971,12 +17921,6 @@
"is-regexp": "^1.0.0"
}
},
"stringstream": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
"integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
"dev": true
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@ -18753,12 +18697,12 @@
}
},
"tailwindcss": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.7.0.tgz",
"integrity": "sha512-zqLmKyvOdXJ979KhZ+dy1mm2No1axjydscW+mbrz46ueOlbg+qhE4MuN3Chfzmv4XTwxW7LnPE2Eg94jyHs5Xg==",
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.7.2.tgz",
"integrity": "sha512-mpDe9BBgdnvHatmdQ2GF/QVNQ/0nMX7lfmL3hV6D7r1NLVqYZIwFB4Z0vuIO2TIdVobdwwtLKPYOZ+MECv6vhw==",
"dev": true,
"requires": {
"autoprefixer": "^7.1.6",
"autoprefixer": "^9.3.1",
"bytes": "^3.0.0",
"chalk": "^2.4.1",
"css.escape": "^1.5.1",
@ -18784,30 +18728,6 @@
"color-convert": "^1.9.0"
}
},
"autoprefixer": {
"version": "7.2.6",
"resolved": "http://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
"integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
"dev": true,
"requires": {
"browserslist": "^2.11.3",
"caniuse-lite": "^1.0.30000805",
"normalize-range": "^0.1.2",
"num2fraction": "^1.2.2",
"postcss": "^6.0.17",
"postcss-value-parser": "^3.2.3"
}
},
"browserslist": {
"version": "2.11.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
"integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
"dev": true,
"requires": {
"caniuse-lite": "^1.0.30000792",
"electron-to-chromium": "^1.3.30"
}
},
"chalk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
@ -19871,70 +19791,13 @@
}
},
"wdio-sauce-service": {
"version": "0.4.12",
"resolved": "https://registry.npmjs.org/wdio-sauce-service/-/wdio-sauce-service-0.4.12.tgz",
"integrity": "sha512-Rx1IkzqR+BQwKjiDG3eF6Lqc3dvuFQ9x5p+B7ovvf5DoMjgg3ZSRC43iPBjg6UL86HFDE6FW8pvCHmhF6lKSWA==",
"version": "0.4.13",
"resolved": "https://registry.npmjs.org/wdio-sauce-service/-/wdio-sauce-service-0.4.13.tgz",
"integrity": "sha512-RoAh88l5xvevopwg+lH+CKgYDf9WGrW2DQrIsTiSVyT0wPHTAt3ndrRJS52SmBIbHlqMUdrGHnaZgYsVh8afkQ==",
"dev": true,
"requires": {
"request": "~2.83.0",
"request": "^2.88.0",
"sauce-connect-launcher": "~1.2.3"
},
"dependencies": {
"har-validator": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
"ajv": "^5.1.0",
"har-schema": "^2.0.0"
}
},
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"dev": true
},
"request": {
"version": "2.83.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
"integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
"dev": true,
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.6.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.5",
"extend": "~3.0.1",
"forever-agent": "~0.6.1",
"form-data": "~2.3.1",
"har-validator": "~5.0.3",
"hawk": "~6.0.2",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.17",
"oauth-sign": "~0.8.2",
"performance-now": "^2.1.0",
"qs": "~6.5.1",
"safe-buffer": "^5.1.1",
"stringstream": "~0.0.5",
"tough-cookie": "~2.3.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.1.0"
}
},
"tough-cookie": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
"punycode": "^1.4.1"
}
}
}
},
"wdio-spec-reporter": {
@ -20157,9 +20020,9 @@
}
},
"webpack": {
"version": "4.24.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.24.0.tgz",
"integrity": "sha512-Xur0l8nBETnW+DjpFqSGME1jNXxEPVETl30k1lWAsbnukVJdq330/i3PDOLPUtVl/E/cciiOp5uW098hFfQLQA==",
"version": "4.25.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.25.1.tgz",
"integrity": "sha512-T0GU/3NRtO4tMfNzsvpdhUr8HnzA4LTdP2zd+e5zd6CdOH5vNKHnAlO+DvzccfhPdzqRrALOFcjYxx7K5DWmvA==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
@ -20198,9 +20061,9 @@
}
},
"ajv": {
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
"integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
"version": "6.5.5",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
"integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",

View file

@ -100,7 +100,7 @@
"npm-run-all": "^4.1.3",
"nyc": "^13.0.1",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "^6.2.0",
"postcss-preset-env": "^6.3.1",
"prettier": "^1.14.3",
"proxyquire": "^2.1.0",
"puppeteer": "^1.10.0",
@ -115,25 +115,25 @@
"stylelint-no-unsupported-browser-features": "^3.0.2",
"svgo": "^1.1.1",
"svgo-loader": "^2.2.0",
"tailwindcss": "^0.7.0",
"tailwindcss": "^0.7.2",
"testpilot-ga": "^0.3.0",
"val-loader": "^1.1.1",
"wdio-docker-service": "^1.4.2",
"wdio-dot-reporter": "0.0.10",
"wdio-firefox-profile-service": "^0.1.3",
"wdio-mocha-framework": "^0.6.3",
"wdio-sauce-service": "^0.4.11",
"wdio-sauce-service": "^0.4.13",
"wdio-spec-reporter": "^0.1.5",
"webdriverio": "^4.13.2",
"webpack": "^4.24.0",
"webpack": "^4.25.1",
"webpack-cli": "^3.1.2",
"webpack-dev-middleware": "^3.4.0",
"webpack-manifest-plugin": "^2.0.4",
"webpack-unassert-loader": "^1.2.0"
},
"dependencies": {
"@google-cloud/storage": "^2.0.3",
"aws-sdk": "^2.348.0",
"@google-cloud/storage": "^2.3.0",
"aws-sdk": "^2.349.0",
"babel-polyfill": "^6.26.0",
"choo": "^6.12.1",
"cldr-core": "^34.0.0",
@ -146,7 +146,7 @@
"helmet": "^3.13.0",
"mkdirp": "^0.5.1",
"mozlog": "^2.2.0",
"node-fetch": "^2.2.0",
"node-fetch": "^2.2.1",
"raven": "^2.6.4",
"redis": "^2.8.0",
"websocket-stream": "^5.1.2"

View file

@ -8,7 +8,6 @@ describe('Firefox Send homepage', function() {
const footerLinks = [
'mozilla',
'legal',
'about',
'legal',
'cookies',
'report-infringement',