aboutsummaryrefslogtreecommitdiff
path: root/js/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/index.js')
-rw-r--r--js/index.js148
1 files changed, 148 insertions, 0 deletions
diff --git a/js/index.js b/js/index.js
new file mode 100644
index 0000000..43f184e
--- /dev/null
+++ b/js/index.js
@@ -0,0 +1,148 @@
+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.reset.bind(TE) );
+