intro.ts 3.0 KB

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