intro.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { Sequencer } from './sequencer';
  2. import { TerminalTyper } from './terminal-typer';
  3. // tslint:disable-next-line
  4. require('../../styles/intro/intro.scss');
  5. const textArea = document.querySelector('.vendure-intro .intro-text-area');
  6. const scene = document.querySelector('.vendure-intro .scene');
  7. const controls = document.querySelector('.vendure-intro .intro-controls');
  8. const title = document.querySelector('.vendure-intro .intro-title');
  9. const INTRO_VIEWED_KEY = 'v-intro-viewed';
  10. if (textArea && scene && controls && title) {
  11. const replayButton = controls.querySelector('#replay');
  12. const terminalCommands = `$ install @vendure/core\n` +
  13. `$ vendure init\n` +
  14. `$ start\n`;
  15. const terminal = new TerminalTyper(textArea as HTMLDivElement, terminalCommands);
  16. const onTransition = (className: string) => {
  17. controls.querySelectorAll('button').forEach(button => button.classList.remove('active'));
  18. const active = controls.querySelector(`#${className}-button`);
  19. if (active) {
  20. active.classList.add('active');
  21. }
  22. if (className === 'scene-6') {
  23. window.localStorage.setItem(INTRO_VIEWED_KEY, 'true');
  24. title.classList.add('visible');
  25. if (replayButton) {
  26. replayButton.classList.add('visible');
  27. }
  28. } else {
  29. title.classList.remove('visible');
  30. }
  31. };
  32. const sequencer = new Sequencer(scene as HTMLDivElement, terminal, onTransition);
  33. const introViewed = !!window.localStorage.getItem(INTRO_VIEWED_KEY);
  34. // const introViewed = false;
  35. if (!introViewed) {
  36. sequencer.play();
  37. } else {
  38. sequencer.jumpTo(6);
  39. }
  40. if (replayButton) {
  41. replayButton.addEventListener('click', () => sequencer.play());
  42. }
  43. controls.addEventListener('click', event => {
  44. const target = event.target as HTMLButtonElement;
  45. const command = target.id;
  46. if (command) {
  47. switch (command) {
  48. case 'replay':
  49. sequencer.play();
  50. break;
  51. case 'scene-0-button':
  52. sequencer.jumpTo(0);
  53. break;
  54. case 'scene-1-button':
  55. sequencer.jumpTo(1);
  56. break;
  57. case 'scene-2-button':
  58. sequencer.jumpTo(2);
  59. break;
  60. case 'scene-3-button':
  61. sequencer.jumpTo(3);
  62. break;
  63. case 'scene-4-button':
  64. sequencer.jumpTo(4);
  65. break;
  66. case 'scene-5-button':
  67. sequencer.jumpTo(5);
  68. break;
  69. case 'scene-6-button':
  70. sequencer.jumpTo(6);
  71. break;
  72. default:
  73. sequencer.jumpTo(0);
  74. }
  75. }
  76. });
  77. }