', { class: 'popuptext' });
const cellText = document.createTextNode(file.name);
+ const url = file.url.trim() + `#${file.secretKey}`.trim();
+ $('#link').attr('value', url);
+ $('#copy-text').html('Copy and share the link to send your file: ' + file.name);
+ $popupText.attr('tabindex', '-1');
+
name.appendChild(cellText);
// create delete button
- btn.innerHTML = 'x';
- btn.classList.add('delete-btn');
+ del.innerHTML = "";
- link.innerHTML = file.url.trim() + `#${file.secretKey}`.trim();
+ link.innerHTML = ""
+ //copy link to clipboard when icon clicked
+ $(link).click(function() {
+ const aux = document.createElement('input');
+ aux.setAttribute('value', url);
+ document.body.appendChild(aux);
+ aux.select();
+ document.execCommand('copy');
+ document.body.removeChild(aux);
+ notify('The link has been copied to your clipboard.');
+ });
file.creationDate = new Date(file.creationDate);
@@ -215,18 +250,13 @@ $(document).ready(function() {
seconds = Math.floor(countdown / 1000 % 60);
let t;
- if (hours > 1) {
- expiry.innerHTML = hours + 'h';
- t = window.setTimeout(() => {
- poll();
- }, 3600000);
- } else if (hours === 1) {
- expiry.innerHTML = hours + 'h';
+ if (hours >= 1) {
+ expiry.innerHTML = hours + 'h ' + minutes % 60 + 'm';
t = window.setTimeout(() => {
poll();
}, 60000);
} else if (hours === 0) {
- expiry.innerHTML = minutes + 'm' + seconds + 's';
+ expiry.innerHTML = minutes + 'm ' + seconds + 's';
t = window.setTimeout(() => {
poll();
}, 1000);
@@ -236,6 +266,7 @@ $(document).ready(function() {
localStorage.removeItem(file.fileId);
$(expiry).parents('tr').remove();
window.clearTimeout(t);
+ toggleHeader();
}
}
@@ -253,32 +284,42 @@ $(document).ready(function() {
toggleHeader();
});
});
+ document.getElementById('delete-file').onclick = e => {
+ FileSender.delete(file.fileId, file.deleteToken).then(() => {
+ localStorage.removeItem(file.fileId);
+ toggleHeader();
+ $('.send-new').click();
+ });
+ };
// add data cells to table row
row.appendChild(name);
row.appendChild(link);
row.appendChild(expiry);
- popupDiv.appendChild(btn);
+ //popupDiv.appendChild(btn);
$(popupDiv).append($popupText);
del.appendChild(popupDiv);
row.appendChild(del);
// show popup
- del.addEventListener('click', toggleShow);
+ del.addEventListener('click', function(){
+ $popupText.addClass('show');
+ $popupText.focus();
+ });
// hide popup
$popupText.find('.nvm').click(function(e) {
e.stopPropagation();
- toggleShow();
+ $popupText.removeClass('show');
});
$popupText.click(function(e) {
e.stopPropagation();
});
-
+ //close when popup loses focus
+ $popupText.blur(() => {
+ $popupText.removeClass('show');
+ });
$('tbody').append(row); //add row to table
- function toggleShow() {
- $popupText.toggleClass('show');
- }
toggleHeader();
}
function toggleHeader() {
diff --git a/package.json b/package.json
index 44d5e4c1..c29a1e82 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"express-handlebars": "^3.0.0",
"helmet": "^3.6.1",
"jquery": "^3.2.1",
+ "jquery-circle-progress": "^1.2.2",
"mozlog": "^2.1.1",
"raven": "^2.1.0",
"raven-js": "^3.16.0",
diff --git a/public/main.css b/public/main.css
index 2e73aec2..6f2bf5d2 100644
--- a/public/main.css
+++ b/public/main.css
@@ -1,44 +1,51 @@
/*** index.html ***/
html {
- background: url('resources/background.png');
- font-family: 'Fira Sans';
- font-weight: 300;
- font-style: normal;
- background-size: contain;
+ background: url('resources/Send_bg.svg');
+ font-family: 'SF Pro Display', sans-serif;
+ font-weight: 200;
+ background-size: 112%;
+ background-repeat: no-repeat;
+ background-position: center top;
+ margin-top: -25px;
height: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- align-content: center;
- flex-direction: column;
+}
+
+body {
+ overflow-y: scroll;
+ margin-top: 12%;
}
input, select, textarea, button {
font-family: inherit;
}
-/** page-one **/
-.main-window {
- border: 1px solid;
- width: 606px;
- min-height: 447px;
- background-color: white;
- border-radius: 5px;
+span {
+ cursor: pointer;
}
+/** page-one **/
.title {
- font-size: 14px;
- width: 80%;
- margin: 40px auto;
+ font-size: 33px;
+ margin: 20px auto;
text-align: center;
}
+.description {
+ font-family: 'SF Pro Text', sans-serif;
+ font-size: 15px;
+ line-height: 23px;
+ width: 630px;
+ text-align: center;
+ margin: 0 auto 60px auto;
+ color: #0C0C0D;
+}
+
.upload-window {
- border: 1px dashed;
+ border: 1px dashed rgb(0, 148, 251, 0.5);
margin: 0 auto;
- width: 470px;
- height: 250px;
- border-radius: 5px;
+ width: 640px;
+ height: 254.7px;
+ border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
@@ -46,31 +53,41 @@ input, select, textarea, button {
text-align: center;
}
+.upload-window.ondrag {
+ border: 3px dashed rgb(0, 148, 251, 0.5);
+ margin: 0 auto;
+ width: 672px;
+ height: 267px;
+ border-radius: 4.2px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ text-align: center;
+}
+
+.link {
+ color: #0094FB;
+ text-decoration: none;
+}
+
+#upload-text {
+ font-size: 22px;
+ color: #737373;
+ margin: 20px 0 30px 0;
+}
+
#browse {
- float: right;
- color: #2D7EFF;
-}
-
-#browse-text {
- float: left;
- width: 128px;
-}
-
-#upload-img {
- padding-right: 20px;
-}
-
-.upload-window > div:nth-child(2) {
- font-size: 26px;
-}
-
-.upload {
- font-size: 12px;
- width: auto;
- overflow: hidden;
-}
-
-.file-upload {
+ background: #0297F8;
+ border-radius: 5px;
+ font-family: 'SF Pro Text', sans-serif;
+ font-size: 15px;
+ color: #FFFFFF;
+ width: 240px;
+ height: 44px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
cursor: pointer;
}
@@ -78,26 +95,29 @@ input[type="file"] {
display: none;
}
-form {
- width: 45px;
- float: right;
-}
-
/** file-list **/
th {
- font-size: 10px;
- color: #737373;
- font-weight: normal;
+ font-size: 16px;
+ color: #858585;
+ font-weight: lighter;
text-align: left;
+ background: rgb(0, 148, 251, 0.05);
+ height: 40px;
+ border-top: 1px solid rgb(0, 148, 251, 0.1);
+ padding: 0 19px;
}
td {
- font-size: 12px;
+ font-size: 15px;
vertical-align: top;
+ color: #4A4A4A;
+ padding: 17px 19px 0 19px;
+ line-height: 23px;
}
table {
- table-layout: fixed;
+ border-collapse: collapse;
+ font-family: Segoe UI, 'SF Pro Text', sans-serif;
}
tbody {
@@ -105,18 +125,11 @@ tbody {
}
#uploaded-files {
- width: 472px;
- margin: 10px auto;
+ width: 640px;
+ margin: 45.3px auto;
table-layout: fixed;
}
-.delete-btn {
- padding: 0;
- border: none;
- background: none;
- cursor: pointer;
-}
-
/* Popup container */
.popup {
position: relative;
@@ -135,11 +148,12 @@ tbody {
padding: 8px 0;
position: absolute;
z-index: 1;
- bottom: 125%;
+ bottom: 20px;
left: 50%;
- margin-left: -80px;
+ margin-left: -96px;
transition: opacity 0.5s;
opacity: 0;
+ outline: 0;
}
/* Popup arrow */
@@ -160,31 +174,61 @@ tbody {
}
/** upload-progress **/
-#progress-bar {
- width: 300px;
- height: 5px;
- background: linear-gradient(
- 90deg,
- #FD9800,
- #D73000 var(--progress),
- white var(--progress)
- );
- border: 0.5px solid;
- border-radius: 5px;
-}
-
-/** share-link **/
-.share-window {
- margin: 0 auto;
- width: 470px;
- height: 250px;
+.progress-bar {
+ margin-top: 3px;
display: flex;
justify-content: center;
align-items: center;
+ text-align: center;
}
-#share-window-r {
- width: 50%;
+.percentage {
+ position: absolute;
+}
+
+.percent-number {
+ font-size: 43.2px;
+ letter-spacing: -0.78px;
+ line-height: 58px;
+ font-family: Segoe UI, 'SF Pro Text', sans-serif;
+}
+
+.percent-sign {
+ font-size: 28.8px;
+ color: rgb(104, 104, 104);
+ letter-spacing: -0.78px;
+ font-family: Segoe UI, 'SF Pro Text', sans-serif;
+}
+
+.upload {
+ margin: 0 auto;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ text-align: center;
+}
+
+.progress-text {
+ font-family: 'SF Pro Text', sans-serif;
+ font-size: 15px;
+ color: rgba(0,0,0,0.50);
+ letter-spacing: -0.4px;
+ margin-top: 24px;
+ margin-bottom: 74px;
+}
+
+#cancel-upload {
+ font-family: 'SF Pro Text', sans-serif;
+ font-size: 15px;
+ color: #D70022;
+ cursor: pointer;
+ text-decoration: underline;
+}
+
+/** share-link **/
+#share-window {
+ width: 645px;
margin: 0 auto;
display: flex;
justify-content: center;
@@ -202,46 +246,150 @@ tbody {
flex-wrap: nowrap;
}
+#copy-text {
+ align-self: flex-start;
+ margin-top: 60px;
+ margin-bottom: 10px;
+ color: #0C0C0D;
+}
+
#link {
- width: 216px;
- height: 41px;
- border: 1px solid #979797;
+ width: 480px;
+ height: 56px;
+ border: 1px solid #0297F8;
+ border-radius: 6px 0 0 6px;
+ font-size: 24px;
+ color: #737373;
+ font-family: 'SF Pro Text';
+}
+
+#link:disabled {
+ border: 1px solid #05A700;
+ background: #FFFFFF;
}
#copy-btn {
- width: 60px;
- height: 45px;
- background: #337FEB;
- border: 1px solid #979797;
+ width: 165px;
+ height: 60px;
+ background: #0297F8;
+ border: 1px solid #0297F8;
+ border-radius: 0 6px 6px 0;
color: white;
cursor: pointer;
+ font-size: 15px;
+ font-family: 'SF Pro Text';
}
#copy-btn:disabled {
- background: #47B04B;
+ background: #05A700;
+ border: 1px solid #05A700;
cursor: auto;
}
+#delete-file {
+ width: 176px;
+ height: 44px;
+ background: #FFFFFF;
+ border: 1px solid rgba(12,12,13,0.30);
+ border-radius: 5px;
+ font-size: 15px;
+ font-family: 'SF Pro Text';
+ margin-top: 50px;
+ margin-bottom: 12px;
+ cursor: pointer;
+ color: #313131;
+}
+
.send-new {
- font-size: 14px;
+ font-size: 15px;
margin: auto;
width: 80%;
text-align: center;
- color: #2D7EFF;
+ color: #0094FB;
cursor: pointer;
+ text-decoration: underline;
+}
+
+/*upload-error*/
+#upload-error {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ text-align: center;
+}
+
+#upload-error-img {
+ margin-bottom: 90px;
+ margin-top: 5px;
+}
+
+/*unsupported-browser*/
+#unsupported-browser {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+}
+
+.unsupported-description {
+ font-family: 'SF Pro Text', sans-serif;
+ font-size: 13px;
+ line-height: 23px;
+ width: 630px;
+ text-align: center;
+ color: #7D7D7D;
+ margin: 0 auto 23px auto;
+}
+
+#firefox-logo {
+ width: 70px;
+}
+
+#dl-firefox {
+ margin-bottom: 181px;
+ width: 260px;
+ height: 80px;
+ background: #12bc00;
+ border-radius: 3px;
+ cursor: pointer;
+ border: none;
+ box-shadow: 0 5px 3px rgb(234,234,234);
+ font-family: 'Fira Sans';
+ font-weight: 500;
+ color: #FFFFFF;
+ font-size: 26px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ line-height: 1;
+}
+
+#dl-firefox-text {
+ text-align: left;
+ margin-left: 20.4px;
+}
+
+#dl-firefox-text>span {
+ font-family: 'Fira Sans';
+ font-weight: 300;
+ font-size: 18px;
+ letter-spacing: -0.69px;
}
/** download.html **/
#download-btn {
- font-size: 18px;
+ font-size: 15px;
+ font-family: 'SF Pro Text';
color: white;
- width: 214px;
- height: 87px;
- margin: 50px auto;
+ width: 180px;
+ height: 44px;
+ margin-top: 20px;
+ margin-bottom: 30px;
text-align: center;
- background: #337FEB;
- border: 1px solid #3EA050;
- border-radius: 6px;
+ background: #0297F8;
+ border: 1px solid #0297F8;
+ border-radius: 5px;
font-weight: 300;
cursor: pointer;
}
@@ -251,10 +399,8 @@ tbody {
cursor: auto;
}
-#download-page-one {
+#download {
margin: 0 auto;
- width: 470px;
- height: 250px;
display: flex;
justify-content: center;
align-items: center;
@@ -263,13 +409,22 @@ tbody {
}
#expired-img {
- display: none;
+ margin: 51px 0 71px 0;
+}
+
+.expired-description {
+ font-family: 'SF Pro Text', sans-serif;
+ font-size: 15px;
+ line-height: 23px;
+ width: 630px;
+ text-align: center;
+ font-size: 15px;
+ color: #7D7D7D;
+ margin: 0 auto 23px auto;
}
#download-progress {
margin: 0 auto;
- width: 470px;
- height: 250px;
display: flex;
justify-content: center;
align-items: center;
@@ -277,6 +432,7 @@ tbody {
text-align: center;
}
-#download-text {
- margin-bottom: 40px;
+#download-img {
+ width: 283px;
+ height: 196px;
}
diff --git a/public/resources/background.png b/public/resources/background.png
deleted file mode 100644
index 634b72a2..00000000
Binary files a/public/resources/background.png and /dev/null differ
diff --git a/public/resources/firefox_logo-only.svg b/public/resources/firefox_logo-only.svg
new file mode 100644
index 00000000..6c9d5ce3
--- /dev/null
+++ b/public/resources/firefox_logo-only.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/resources/fontello-24c5e6ad/LICENSE.txt b/public/resources/fontello-24c5e6ad/LICENSE.txt
new file mode 100755
index 00000000..5897837d
--- /dev/null
+++ b/public/resources/fontello-24c5e6ad/LICENSE.txt
@@ -0,0 +1,21 @@
+Font license info
+
+
+## Entypo
+
+ Copyright (C) 2012 by Daniel Bruce
+
+ Author: Daniel Bruce
+ License: SIL (http://scripts.sil.org/OFL)
+ Homepage: http://www.entypo.com
+
+
+## Font Awesome
+
+ Copyright (C) 2016 by Dave Gandy
+
+ Author: Dave Gandy
+ License: SIL ()
+ Homepage: http://fortawesome.github.com/Font-Awesome/
+
+
diff --git a/public/resources/fontello-24c5e6ad/README.txt b/public/resources/fontello-24c5e6ad/README.txt
new file mode 100755
index 00000000..beaab336
--- /dev/null
+++ b/public/resources/fontello-24c5e6ad/README.txt
@@ -0,0 +1,75 @@
+This webfont is generated by http://fontello.com open source project.
+
+
+================================================================================
+Please, note, that you should obey original font licenses, used to make this
+webfont pack. Details available in LICENSE.txt file.
+
+- Usually, it's enough to publish content of LICENSE.txt file somewhere on your
+ site in "About" section.
+
+- If your project is open-source, usually, it will be ok to make LICENSE.txt
+ file publicly available in your repository.
+
+- Fonts, used in Fontello, don't require a clickable link on your site.
+ But any kind of additional authors crediting is welcome.
+================================================================================
+
+
+Comments on archive content
+---------------------------
+
+- /font/* - fonts in different formats
+
+- /css/* - different kinds of css, for all situations. Should be ok with
+ twitter bootstrap. Also, you can skip style and assign icon classes
+ directly to text elements, if you don't mind about IE7.
+
+- demo.html - demo file, to show your webfont content
+
+- LICENSE.txt - license info about source fonts, used to build your one.
+
+- config.json - keeps your settings. You can import it back into fontello
+ anytime, to continue your work
+
+
+Why so many CSS files ?
+-----------------------
+
+Because we like to fit all your needs :)
+
+- basic file, .css - is usually enough, it contains @font-face
+ and character code definitions
+
+- *-ie7.css - if you need IE7 support, but still don't wish to put char codes
+ directly into html
+
+- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face
+ rules, but still wish to benefit from css generation. That can be very
+ convenient for automated asset build systems. When you need to update font -
+ no need to manually edit files, just override old version with archive
+ content. See fontello source code for examples.
+
+- *-embedded.css - basic css file, but with embedded WOFF font, to avoid
+ CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.
+ We strongly recommend to resolve this issue by `Access-Control-Allow-Origin`
+ server headers. But if you ok with dirty hack - this file is for you. Note,
+ that data url moved to separate @font-face to avoid problems with
+
+
+
+
+
+
+
+
+
+ fontello
+ font demo
+
+
+
+
+
+
icon-cancel-10xe801
+
icon-check0xe802
+
icon-docs0xf0c5
+
+
+
+
+
\ No newline at end of file
diff --git a/public/resources/fontello-24c5e6ad/font/fontello.eot b/public/resources/fontello-24c5e6ad/font/fontello.eot
new file mode 100755
index 00000000..30b0ddc1
Binary files /dev/null and b/public/resources/fontello-24c5e6ad/font/fontello.eot differ
diff --git a/public/resources/fontello-24c5e6ad/font/fontello.svg b/public/resources/fontello-24c5e6ad/font/fontello.svg
new file mode 100755
index 00000000..431b9d7c
--- /dev/null
+++ b/public/resources/fontello-24c5e6ad/font/fontello.svg
@@ -0,0 +1,16 @@
+
+
+
\ No newline at end of file
diff --git a/public/resources/fontello-24c5e6ad/font/fontello.ttf b/public/resources/fontello-24c5e6ad/font/fontello.ttf
new file mode 100755
index 00000000..86b99e44
Binary files /dev/null and b/public/resources/fontello-24c5e6ad/font/fontello.ttf differ
diff --git a/public/resources/fontello-24c5e6ad/font/fontello.woff b/public/resources/fontello-24c5e6ad/font/fontello.woff
new file mode 100755
index 00000000..25766584
Binary files /dev/null and b/public/resources/fontello-24c5e6ad/font/fontello.woff differ
diff --git a/public/resources/fontello-24c5e6ad/font/fontello.woff2 b/public/resources/fontello-24c5e6ad/font/fontello.woff2
new file mode 100755
index 00000000..ca749888
Binary files /dev/null and b/public/resources/fontello-24c5e6ad/font/fontello.woff2 differ
diff --git a/public/resources/illustration_download.svg b/public/resources/illustration_download.svg
new file mode 100644
index 00000000..6eb6a775
--- /dev/null
+++ b/public/resources/illustration_download.svg
@@ -0,0 +1,126 @@
+
+
+
diff --git a/public/resources/illustration_error.svg b/public/resources/illustration_error.svg
new file mode 100644
index 00000000..ca44824d
--- /dev/null
+++ b/public/resources/illustration_error.svg
@@ -0,0 +1,93 @@
+
+
\ No newline at end of file
diff --git a/public/resources/illustration_expired.svg b/public/resources/illustration_expired.svg
new file mode 100644
index 00000000..9c551a28
--- /dev/null
+++ b/public/resources/illustration_expired.svg
@@ -0,0 +1,64 @@
+
+
\ No newline at end of file
diff --git a/public/resources/link_expired.png b/public/resources/link_expired.png
deleted file mode 100644
index b4872db6..00000000
Binary files a/public/resources/link_expired.png and /dev/null differ
diff --git a/public/resources/send_bg.svg b/public/resources/send_bg.svg
new file mode 100644
index 00000000..ae022575
--- /dev/null
+++ b/public/resources/send_bg.svg
@@ -0,0 +1,90 @@
+
+
\ No newline at end of file
diff --git a/public/resources/share.png b/public/resources/share.png
deleted file mode 100644
index 0628d7ce..00000000
Binary files a/public/resources/share.png and /dev/null differ
diff --git a/public/resources/upload.svg b/public/resources/upload.svg
index d731adba..e9bb7fc2 100644
--- a/public/resources/upload.svg
+++ b/public/resources/upload.svg
@@ -1,93 +1,24 @@
-
-
\ No newline at end of file
diff --git a/views/download.handlebars b/views/download.handlebars
index 50cc365a..451007da 100644
--- a/views/download.handlebars
+++ b/views/download.handlebars
@@ -6,7 +6,6 @@
{{> sentry dsn=dsn}}
{{/if}}
-
{{#if trackerId}}
{{> analytics trackerId=trackerId}}
@@ -14,56 +13,60 @@
-
-
- {{#if filename}}
+
+ {{#if filename}}
+
- Your friend is sending you a file:
- {{{filename}}} ({{{filesize}}})
+ Download {{{filename}}} ({{{filesize}}})
-
-
-
-
-
-
-
+
+ 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.
-
-
-
-
- Downloading File...
-
-
-
-
-
-
+
+
+
-
-
- Send your own files
-
-
- {{else}}
-
-
- This link has expired or never existed in the first place.
-
-
-
-
-
-
- Send your own files
-
- {{/if}}
-
-
+
+
+ Downloading {{{filename}}} ({{{filesize}}})
+
+
+ Please leave this tab open while we fetch your file and decrypt it.
+
+
+
+
+
+ %
+
+
+
+
{{{filename}}}
+
+
+
+
+ Try Firefox Send
+
+ {{else}}
+
+
+ This link has expired or never existed in the first place.
+
+
+
+
+
+
+ Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
+