intro.ts 3.0 KB

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