signupDialog.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const html = require('choo/html');
  2. const assets = require('../../common/assets');
  3. const { bytes } = require('../utils');
  4. module.exports = function() {
  5. return function(state, emit, close) {
  6. const DAYS = Math.floor(state.LIMITS.MAX_EXPIRE_SECONDS / 86400);
  7. let submitting = false;
  8. return html`
  9. <send-signup-dialog
  10. class="flex flex-col justify-center my-16 md:my-0 px-8 md:px-24 w-full h-full"
  11. >
  12. <img src="${assets.get('master-logo.svg')}" class="h-16 mt-1 mb-4" />
  13. <section class="flex flex-col flex-shrink-0 self-center">
  14. <h1 class="text-3xl font-bold text-center">
  15. ${state.translate('accountBenefitTitle')}
  16. </h1>
  17. <ul
  18. class="leading-normal list-disc text-grey-80 my-2 mt-4 pl-4 md:self-center dark:text-grey-40"
  19. >
  20. <li>
  21. ${state.translate('accountBenefitLargeFiles', {
  22. size: bytes(state.LIMITS.MAX_FILE_SIZE)
  23. })}
  24. </li>
  25. <li>${state.translate('accountBenefitDownloadCount')}</li>
  26. <li>
  27. ${state.translate('accountBenefitTimeLimit', { count: DAYS })}
  28. </li>
  29. <li>${state.translate('accountBenefitSync')}</li>
  30. </ul>
  31. </section>
  32. <section class="flex flex-col flex-grow m-4 md:self-center md:w-128">
  33. <form onsubmit=${submitEmail} data-no-csrf>
  34. <input
  35. id="email-input"
  36. type="email"
  37. class="hidden border-default rounded-lg w-full px-2 py-1 h-12 mb-3 text-lg text-grey-70 leading-loose dark:bg-grey-80 dark:text-white"
  38. placeholder=${state.translate('emailPlaceholder')}
  39. />
  40. <input
  41. class="btn rounded-lg w-full flex flex-shrink-0 items-center justify-center"
  42. value="${state.translate('signInOnlyButton')}"
  43. title="${state.translate('signInOnlyButton')}"
  44. id="email-submit"
  45. type="submit"
  46. />
  47. </form>
  48. ${state.user.loginRequired
  49. ? ''
  50. : html`
  51. <button
  52. class="my-3 link-primary font-medium"
  53. title="${state.translate('deletePopupCancel')}"
  54. onclick=${cancel}
  55. >
  56. ${state.translate('deletePopupCancel')}
  57. </button>
  58. `}
  59. </section>
  60. </send-signup-dialog>
  61. `;
  62. function emailish(str) {
  63. if (!str) {
  64. return false;
  65. }
  66. // just check if it's the right shape
  67. const a = str.split('@');
  68. return a.length === 2 && a.every(s => s.length > 0);
  69. }
  70. function cancel(event) {
  71. close(event);
  72. }
  73. function submitEmail(event) {
  74. event.preventDefault();
  75. if (submitting) {
  76. return;
  77. }
  78. submitting = true;
  79. const el = document.getElementById('email-input');
  80. const email = el.value;
  81. emit('login', emailish(email) ? email : null);
  82. }
  83. };
  84. };