signupDialog.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* global LIMITS */
  2. const html = require('choo/html');
  3. const { bytes, platform } = require('../utils');
  4. const { canceledSignup, submittedSignup } = require('../metrics');
  5. module.exports = function(trigger) {
  6. return function(state, emit, close) {
  7. const hidden = platform() === 'android' ? 'hidden' : '';
  8. let submitting = false;
  9. return html`
  10. <send-signup-dialog class="flex flex-col p-4">
  11. <p class="p-8">
  12. ${state.translate('accountBenefitTitle')}
  13. <ul class="my-2 leading-normal">
  14. <li>${state.translate('accountBenefitLargeFiles', {
  15. size: bytes(LIMITS.MAX_FILE_SIZE)
  16. })}</li>
  17. <li>${state.translate('accountBenefitExpiry')}</li>
  18. <li>${state.translate('accountBenefitSync')}</li>
  19. </ul>
  20. </p>
  21. <form
  22. onsubmit=${submitEmail}
  23. data-no-csrf>
  24. <input
  25. id="email-input"
  26. type="text"
  27. class="${hidden} border rounded-lg w-full px-2 py-1 h-12 mb-4 text-lg text-grey-darker leading-loose"
  28. placeholder=${state.translate('emailEntryPlaceholder')} />
  29. <input
  30. class="btn rounded-lg w-full flex flex-no-shrink items-center justify-center"
  31. value="${state.translate('signInMenuOption')}"
  32. title="${state.translate('signInMenuOption')}"
  33. id="email-submit"
  34. type="submit" />
  35. </form>
  36. <button
  37. class="my-4 text-blue-dark hover:text-blue-darker focus:text-blue-darker font-medium"
  38. title="${state.translate('deletePopupCancel')}"
  39. onclick=${cancel}>${state.translate('deletePopupCancel')}
  40. </button>
  41. </send-signup-dialog>`;
  42. function emailish(str) {
  43. if (!str) {
  44. return false;
  45. }
  46. // just check if it's the right shape
  47. const a = str.split('@');
  48. return a.length === 2 && a.every(s => s.length > 0);
  49. }
  50. function cancel(event) {
  51. canceledSignup({ trigger });
  52. close(event);
  53. }
  54. function submitEmail(event) {
  55. event.preventDefault();
  56. if (submitting) {
  57. return;
  58. }
  59. submitting = true;
  60. const el = document.getElementById('email-input');
  61. const email = el.value;
  62. submittedSignup({ trigger });
  63. emit('login', emailish(email) ? email : null);
  64. }
  65. };
  66. };