send/app/pages/share/index.js

105 lines
3 KiB
JavaScript
Raw Normal View History

const html = require('choo/html');
const raw = require('choo/html/raw');
const notFound = require('../notFound');
const deletePopup = require('../../templates/popup');
2018-08-03 19:24:41 +00:00
const uploadedFileList = require('../../templates/uploadedFileList');
2018-08-08 18:07:09 +00:00
const timeLimitText = require('../../templates/timeLimitText');
2018-10-10 01:17:40 +00:00
const { allowedCopy, delay } = require('../../utils');
const split = require('../split');
module.exports = function(state, emit) {
const file = state.storage.getFileById(state.params.id);
if (!file) {
2018-07-31 18:09:18 +00:00
return notFound(state);
}
2018-07-31 18:09:18 +00:00
const passwordReminderClass = file._hasPassword
? ''
: 'passwordReminder--hidden';
2018-10-10 01:17:40 +00:00
return split(
state,
uploadedFileList(file, state, emit),
html`
<div class="copySection">
<div class="sharePage__copyText">
2018-10-10 01:17:40 +00:00
${expireInfo(file, state.translate)}
2018-08-03 19:24:41 +00:00
${state.translate('copyUrlLabel')}
2018-07-31 18:09:18 +00:00
<div class="sharePage__passwordReminder ${passwordReminderClass}">(don't forget the password too)</div>
2018-01-24 18:23:13 +00:00
</div>
2018-07-31 18:09:18 +00:00
<input
id="fileUrl"
class="copySection__url"
type="url"
value="${file.url}"
readonly="true"/>
<button id="copyBtn"
class="btn copyBtn"
title="${state.translate('copyUrlFormButton')}"
onclick=${copyLink}>${state.translate('copyUrlFormButton')}
2018-01-09 15:26:27 +00:00
</button>
2018-10-10 01:17:40 +00:00
<div class="sharePage__deletePopup">
${deletePopup(
state.translate('deletePopupText'),
state.translate('deletePopupYes'),
state.translate('deletePopupCancel'),
deleteFile
)}
2018-01-09 15:26:27 +00:00
</div>
2018-07-31 18:09:18 +00:00
2018-07-31 22:19:18 +00:00
<button
class="btn--cancel btn--delete"
2018-07-31 18:09:18 +00:00
title="${state.translate('deleteFileButton')}"
2018-08-03 19:24:41 +00:00
onclick=${showDeletePopup}>${state.translate('deleteFileButton')}
2018-07-31 22:19:18 +00:00
</button>
2018-10-10 01:17:40 +00:00
</div>`
);
2018-08-03 19:24:41 +00:00
function showDeletePopup() {
const popup = document.querySelector('.popup');
popup.classList.add('popup--show');
popup.focus();
2017-12-23 03:20:19 +00:00
}
async function copyLink() {
if (allowedCopy()) {
emit('copy', { url: file.url, location: 'success-screen' });
const input = document.getElementById('fileUrl');
2017-08-29 18:25:41 +00:00
input.disabled = true;
const copyBtn = document.getElementById('copyBtn');
copyBtn.disabled = true;
2018-07-31 18:09:18 +00:00
copyBtn.classList.add('copyBtn--copied');
copyBtn.replaceChild(
2018-07-31 18:09:18 +00:00
html`<label>${state.translate('copiedUrl')}</label>`,
copyBtn.firstChild
);
await delay(2000);
2017-08-29 18:25:41 +00:00
input.disabled = false;
copyBtn.disabled = false;
2018-07-31 18:09:18 +00:00
copyBtn.classList.remove('copyBtn--copied');
copyBtn.textContent = state.translate('copyUrlFormButton');
}
}
async function deleteFile() {
emit('delete', { file, location: 'success-screen' });
emit('pushState', '/');
}
};
2018-02-16 20:56:53 +00:00
2018-07-31 18:09:18 +00:00
function expireInfo(file, translate) {
2018-08-08 18:07:09 +00:00
const el = html`<div class="shareTitle">
${raw(
translate('expireInfo', {
downloadCount: translate('downloadCount', { num: file.dlimit }),
timespan: timeLimitText(translate, file.timeLimit)
})
)}
</div>`;
2018-07-31 18:09:18 +00:00
2018-02-16 20:56:53 +00:00
return el;
}