aboutsummaryrefslogtreecommitdiff
path: root/js/index.js
blob: 0e838c09ea2689497ba55d5a919199814fb7cb9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
var TerminalEmulator = {
  init: function(screen) {
    var inst = Object.create(this);
    inst.screen = screen;
    inst.createInput();
    
    return inst;
  },

  createInput: function() {
    var inputField = document.createElement('div');
    var inputWrap = document.createElement('div');
    
    inputField.className = 'terminal_emulator__field';
    inputField.innerHTML = '';
    inputWrap.appendChild(inputField);
    this.screen.appendChild(inputWrap);
    this.field = inputField;
    this.fieldwrap = inputWrap;
  },


  enterInput: function(input) {
    return new Promise( (resolve, reject) => {
    var randomSpeed = (max, min) => { 
      return Math.random() * (max - min) + min; 
    }
      
    var speed = randomSpeed(70, 90);
    var i = 0;
    var str = '';
    var type = () => {
      
      str = str + input[i];
      this.field.innerHTML = str.replace(/ /g, ' ');
      i++;
      
      setTimeout( () => {
        if( i < input.length){
          if( i % 5 === 0) speed = randomSpeed(80, 120);
          type();
        }else {
          console.log('tick');
          setTimeout( () => {
            console.log('tock');
            resolve();
          }, 400);
          
        } 
      }, speed);
      
      
    };
    
    
    type();
      
    });
  },
  
  enterCommand: function() {
    return new Promise( (resolve, reject ) => {
      var resp = document.createElement('div');
      resp.className = 'terminal_emulator__command';
      resp.innerHTML = this.field.innerHTML;
      this.screen.insertBefore( resp, this.fieldwrap);
      
      this.field.innerHTML = '';
      resolve();
    })
  },

  enterResponse: function(response) {
    
    return new Promise( (resolve, reject ) => {
      var resp = document.createElement('div');
      resp.className = 'terminal_emulator__response';
      resp.innerHTML = response;
      this.screen.insertBefore( resp, this.fieldwrap);
      
      resolve();
    })
  
    
  },
  
  wait : function( time, busy ) {
    busy = (busy === undefined ) ? true : busy;
    return new Promise( (resolve, reject) => {
       if (busy){
         this.field.classList.add('waiting');
       } else {
         this.field.classList.remove('waiting');
       }
       setTimeout( () => {
          resolve();
      }, time);
    });
  },
  
  reset : function() {
    return new Promise( (resolve, reject) => {
      this.field.classList.remove('waiting');
      resolve();
    });
  }

};


/*
 * 
 * This is where the magic happens
 *
 */ 


var TE = TerminalEmulator.init(document.getElementById('screen'));


TE.wait(1000, false)
  .then( TE.enterInput.bind(TE, 'bash aboutme.sh') )
  .then( TE.enterCommand.bind( TE ) )
  .then( TE.enterResponse.bind(TE, 'Hi, I am Navan') )
  .then( TE.wait.bind(TE, 2000) )
  .then( TE.enterResponse.bind(TE, '- I specialise in bash') )
  .then( TE.wait.bind(TE, 600) )
  .then( TE.enterResponse.bind(TE, '- I created my first website when I was 7 ') )
  .then( TE.wait.bind(TE, 600) )
  .then( TE.enterResponse.bind(TE, '- But, DOSed it a month afterwards ') )
  .then( TE.wait.bind(TE, 300) )
  .then( TE.enterResponse.bind(TE, '- Proud Creater of GYGB and John-Doe ') )
  .then( TE.wait.bind(TE, 700) )
  .then( TE.enterResponse.bind(TE, 'Want to read more ? (y/n)') )
  .then( TE.wait.bind(TE, 2000, false) )
  .then( TE.enterInput.bind(TE, 'y') )
  .then( TE.enterCommand.bind(TE) )
  .then( TE.wait.bind(TE, 400) )
  .then( TE.enterResponse.bind(TE, 'Load short description ? (y/n)') ) 
  .then( TE.wait.bind(TE, 1800, false) )
  .then( TE.enterInput.bind(TE, 'y') )
  .then( TE.enterCommand.bind(TE) )
  .then( TE.wait.bind(TE, 400) )
  .then( TE.enterResponse.bind(TE, 'finalizing...') )
  .then( TE.wait.bind(TE, 2000) )
  .then( TE.enterResponse.bind(TE, 'I am a self-proclaimed geek. My powers? Am good at parsing jq, awesome in bash and the best, I make terrible decisions and can not keep my mouth shut. I know Bash, Python, C++, C#, HTML, CSS and am on the verge of learning Kotlin.') )
.then( TE.wait.bind(TE, 2000) )
.then( TE.enterInput.bind(TE, 'cat bash_programs.txt') )
  .then( TE.enterCommand.bind( TE ) )
  .then( TE.enterResponse.bind(TE, 'The Bash Programs I am Prous of :') )
  .then( TE.wait.bind(TE, 2000) )
  .then( TE.enterResponse.bind(TE, '- Get Your Grub Back (Grub Repair)') )
  .then( TE.wait.bind(TE, 600) )
  .then( TE.enterResponse.bind(TE, '- John Doe (Identity Generator) ') )
  .then( TE.wait.bind(TE, 600) )
  .then( TE.enterResponse.bind(TE, '- Cruncher (A slow way to kill a pc) ') )
.then( TE.wait.bind(TE, 600) )
  .then( TE.enterResponse.bind(TE, '- Meme-Me (A CLI for generating memes) ') )
  
.then( TE.reset.bind(TE) );