noStreams.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. const html = require('choo/html');
  2. const { bytes } = require('../utils');
  3. const assets = require('../../common/assets');
  4. module.exports = function(state, emit) {
  5. const archive = state.fileInfo;
  6. return html`
  7. <div
  8. class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center"
  9. >
  10. <h1 class="mb-4 text-3xl font-bold">${state.translate(
  11. 'downloadTitle'
  12. )}</h1>
  13. <p
  14. class="w-full p-2 border-default border-yellow-50 rounded-default md:w-4/5 text-orange-60 bg-yellow-40 text-center leading-normal"
  15. >
  16. ⚠️ ${state.translate('noStreamsWarning')} ⚠️
  17. </p>
  18. <form class="md:w-128" onsubmit=${submit}>
  19. <fieldset class="border-default rounded-default p-4 my-4" onchange=${optionChanged}>
  20. <div class="flex items-center mb-2">
  21. <svg class="h-8 w-6 mr-3 flex-shrink-0 text-primary">
  22. <use xlink:href="${assets.get('blue_file.svg')}#icon"/>
  23. </svg>
  24. <p class="flex-grow">
  25. <h1 class="text-base font-medium word-break-all">${
  26. archive.name
  27. }</h1>
  28. <div class="text-sm font-normal opacity-75 pt-1">${bytes(
  29. archive.size
  30. )}</div>
  31. </p>
  32. </div>
  33. <div class=" mt-6 mb-3">
  34. <input class="mx-2" type="radio" name="gus" id="copy" value="copy" checked>
  35. <label class="" for="copy">${state.translate(
  36. 'noStreamsOptionCopy'
  37. )}</label>
  38. </div>
  39. <div class="my-3">
  40. <input class="mx-2" type="radio" name="gus" id="firefox" value="firefox">
  41. <label class="" for="firefox">${state.translate(
  42. 'noStreamsOptionFirefox'
  43. )}</label>
  44. </div>
  45. <div class="mt-3">
  46. <input class="mx-2" type="radio" name="gus" id="download" value="download">
  47. <label class="" for="download">${state.translate(
  48. 'noStreamsOptionDownload'
  49. )}</label>
  50. </div>
  51. </fieldset>
  52. <input
  53. class="btn rounded-lg w-full flex flex-shrink-0 items-center justify-center"
  54. value="${state.translate('copyLinkButton')}"
  55. title="${state.translate('copyLinkButton')}"
  56. type="submit" />
  57. <p
  58. class="text-grey-80 leading-normal dark:text-grey-40 font-semibold text-center md:my-8 md:text-left"
  59. >
  60. ${state.translate('downloadConfirmDescription')}
  61. </p>
  62. </form>
  63. </div>
  64. `;
  65. function optionChanged(event) {
  66. event.stopPropagation();
  67. const choice = event.target.value;
  68. const button = event.currentTarget.nextElementSibling;
  69. let title = button.title;
  70. console.error(choice, title);
  71. switch (choice) {
  72. case 'copy':
  73. title = state.translate('copyLinkButton');
  74. break;
  75. case 'firefox':
  76. title = state.translate('downloadFirefox');
  77. break;
  78. case 'download':
  79. title = state.translate('downloadButtonLabel');
  80. break;
  81. }
  82. button.title = title;
  83. button.value = title;
  84. }
  85. function submit(event) {
  86. const action = document.querySelector('input[type="radio"]:checked').value;
  87. switch (action) {
  88. case 'copy':
  89. emit('copy', { url: window.location.href });
  90. document.querySelector('input[type="submit"]').value = state.translate(
  91. 'copiedUrl'
  92. );
  93. break;
  94. case 'firefox':
  95. window.open(
  96. 'https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com'
  97. );
  98. break;
  99. case 'download':
  100. emit('download');
  101. break;
  102. }
  103. return false;
  104. }
  105. };