index.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* global MAXFILESIZE */
  2. const html = require('choo/html');
  3. const assets = require('../../../common/assets');
  4. const fileList = require('../../templates/fileList');
  5. const { bytes, fadeOut } = require('../../utils');
  6. module.exports = function(state, emit) {
  7. // the page flickers if both the server and browser set 'effect--fadeIn'
  8. const fade = state.layout ? '' : 'effect--fadeIn';
  9. return html`
  10. <div id="page-one" class="${fade}">
  11. <div class="title">${state.translate('uploadPageHeader')}</div>
  12. <div class="description">
  13. <div>${state.translate('uploadPageExplainer')}</div>
  14. <a
  15. href="https://testpilot.firefox.com/experiments/send"
  16. class="link">
  17. ${state.translate('uploadPageLearnMore')}
  18. </a>
  19. </div>
  20. <div class="uploadArea"
  21. ondragover=${dragover}
  22. ondragleave=${dragleave}>
  23. <img
  24. src="${assets.get('upload.svg')}"
  25. title="${state.translate('uploadSvgAlt')}"/>
  26. <div class="uploadArea__msg">
  27. ${state.translate('uploadPageDropMessage')}
  28. </div>
  29. <span class="uploadArea__sizeMsg">
  30. ${state.translate('uploadPageSizeMessage')}
  31. </span>
  32. <input id="file-upload"
  33. class="inputFile"
  34. type="file"
  35. name="fileUploaded"
  36. onfocus=${onfocus}
  37. onblur=${onblur}
  38. onchange=${upload} />
  39. <label for="file-upload"
  40. class="btn btn--file"
  41. title="${state.translate('uploadPageBrowseButton1')}">
  42. ${state.translate('uploadPageBrowseButton1')}
  43. </label>
  44. </div>
  45. ${fileList(state, emit)}
  46. </div>
  47. `;
  48. function dragover(event) {
  49. const div = document.querySelector('.uploadArea');
  50. div.classList.add('uploadArea--dragging');
  51. }
  52. function dragleave(event) {
  53. const div = document.querySelector('.uploadArea');
  54. div.classList.remove('uploadArea--dragging');
  55. }
  56. function onfocus(event) {
  57. event.target.classList.add('inputFile--focused');
  58. }
  59. function onblur(event) {
  60. event.target.classList.remove('inputFile--focused');
  61. }
  62. async function upload(event) {
  63. event.preventDefault();
  64. const target = event.target;
  65. const file = target.files[0];
  66. if (file.size === 0) {
  67. return;
  68. }
  69. if (file.size > MAXFILESIZE) {
  70. window.alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) }));
  71. return;
  72. }
  73. await fadeOut('#page-one');
  74. emit('upload', { file, type: 'click' });
  75. }
  76. };