var scanlines = $('.scanlines'); var tv = $('.tv'); function exit() { $('.tv').addClass('collapse'); term.disable(); } // ref: https://stackoverflow.com/q/67322922/387194 var __EVAL = (s) => eval(`void (__EVAL = ${__EVAL}); ${s}`); var term = $('#terminal').terminal(function(command, term) { var cmd = $.terminal.parse_command(command); if (cmd.name === 'exit') { exit(); } else if (cmd.name === 'echo') { term.echo(cmd.rest); } else if (cmd.name === 'weather') { $.get(`https://wttr.in/${cmd.rest}?ATm`).then(function(res) { term.echo(res); }); term.echo(cmd.rest); } else if (cmd.name === 'quote') { $.getJSON('https://api.quotable.io/random').then(function(res) { term.echo(treeify.asTree(res, true, true)); }); term.echo(cmd.rest); } else if (cmd.name === 'commands') { term.echo(["weather", "quote"]); term.echo("More coming soon."); } else if (command !== '') { try { var result = __EVAL(command); if (result && result instanceof $.fn.init) { term.echo('<#jQuery>'); } else if (result && typeof result === 'object') { tree(result); } else if (result !== undefined) { term.echo(new String(result)); } } catch(e) { term.error(new String(e)); } } }, { name: 'js_demo', onResize: set_size, exit: false, // detect iframe codepen preview enabled: $('body').attr('onload') === undefined, onInit: function() { set_size(); $.getJSON('https://api.quotable.io/random').then(function(res) { term.echo(`"${res.content}" - ${res.author}`); term.echo(); term.echo('Type [[b;#fff;]weather saintlouis] for the weather.'); term.echo('Type [[b;#fff;]quote] for a random quote.'); term.echo('Type [[b;#fff;]cmmands] for more command suggestions.'); term.echo('Type [[b;#fff;]exit] to exit.'); term.echo(); }); }, onClear: function() { }, prompt: 'js> ', greetings: greetings.innerHTML, }); // for codepen preview if (!term.enabled()) { term.find('.cursor').addClass('blink'); } function set_size() { // for window height of 170 it should be 2s var height = $(window).height(); var width = $(window).width() var time = (height * 2) / 170; scanlines[0].style.setProperty("--time", time); tv[0].style.setProperty("--width", width); tv[0].style.setProperty("--height", height); } function tree(obj) { term.echo(treeify.asTree(obj, true, true)); } var constraints = { audio: false, video: { width: { ideal: 1280 }, height: { ideal: 1024 }, facingMode: "environment" } }; function clear() { term.clear(); }