/* global downloadMetadata */ const html = require('choo/html'); const assets = require('../../common/assets'); const archiveTile = require('./archiveTile'); const modal = require('./modal'); const noStreams = require('./noStreams'); const notFound = require('./notFound'); const downloadPassword = require('./downloadPassword'); const downloadCompleted = require('./downloadCompleted'); const BIG_SIZE = 1024 * 1024 * 256; function createFileInfo(state) { return { id: state.params.id, secretKey: state.params.key, nonce: downloadMetadata.nonce, requiresPassword: downloadMetadata.pwd }; } function downloading(state, emit) { return html` <div class="flex flex-col w-full h-full items-center md:justify-center md:-mt-8" > <h1 class="text-3xl font-bold mb-4"> ${state.translate('downloadingTitle')} </h1> ${archiveTile.downloading(state, emit)} </div> `; } function preview(state, emit) { if (state.fileInfo.flagged) { return html` <div class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center" > <h1 class="text-xl font-bold">${state.translate('downloadFlagged')}</h1> </div> `; } if (!state.capabilities.streamDownload && state.fileInfo.size > BIG_SIZE) { return noStreams(state, emit); } return html` <div class="w-full md:flex md:flex-row items-stretch md:flex-1"> <div class="px-2 w-full md:px-0 flex-half md:flex md:flex-col mt-12 md:pr-8 pb-4" > <h1 class="text-3xl font-bold mb-4 text-center md:text-left"> ${state.translate('downloadTitle')} </h1> <p class="text-grey-80 leading-normal dark:text-grey-40 mb-4 text-center md:text-left" > ${state.translate('downloadDescription')} </p> <p class="text-grey-80 leading-normal dark:text-grey-40 font-semibold text-center md:mb-8 md:text-left" > ${state.translate('downloadConfirmDescription')} </p> <img class="hidden md:block dl-bg w-full" src="${assets.get('intro.svg')}" /> </div> <div class="w-full flex-half flex-half md:flex md:flex-col md:justify-center" > ${archiveTile.preview(state, emit)} <a href="/report" class="link-blue mt-4 text-center block" >${state.translate('reportFile', { count: state.fileInfo.manifest.files.length })}</a > </div> </div> `; } module.exports = function(state, emit) { let content = ''; if (!state.fileInfo) { state.fileInfo = createFileInfo(state); if (!state.fileInfo.nonce) { return notFound(state); } } if (!state.transfer && !state.fileInfo.requiresPassword) { emit('getMetadata'); } if (state.transfer) { switch (state.transfer.state) { case 'downloading': case 'decrypting': content = downloading(state, emit); break; case 'complete': content = downloadCompleted(state); break; default: content = preview(state, emit); } } else if (state.fileInfo.requiresPassword && !state.fileInfo.password) { content = downloadPassword(state, emit); } return html` <main class="main"> ${state.modal && modal(state, emit)} <section class="relative h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big md:flex md:flex-col" > ${content} </section> </main> `; };