faketerminal.min.js (12911B)
1 window.FakeTerminal||(window.FakeTerminal={}),window.FakeTerminal.command||(window.FakeTerminal.command={}),window.FakeTerminal.defaultOptions={username:"root",hostname:window.location.host,history:1e3,prompt:"[%username%@%hostname%: %cwd%] ",login:null,cwd:"~"},window.FakeTerminal.main=function(e,t){var o=this;if(!jQuery)throw"FakeTerminal: jQuery required";var a=jQuery;o.$el=a(e),o.originalHtml="",o.existingText=[],o.executingCommand={instance:null,deferred:null},o.keymap={ENTER:13,UP:38,DOWN:40,C:67,D:68,U:85},o.output=null,o.input=null,o.filesystem=null,o.history=null,o.__construct=function(){o.$el.trigger("ft:init",[o]),o.options=a.extend({},window.FakeTerminal.defaultOptions,t),o.originalHtml=o.$el.get(0).outerHTML,o.existingText=o.$el.get(0).innerHTML?o.$el.get(0).innerHTML.split("\n"):[],o.$el.addClass("faketerminal").empty(),o.bindListeners(),o.output=new window.FakeTerminal.output(o),o.input=new window.FakeTerminal.input(o),o.filesystem=new window.FakeTerminal.filesystem(o),o.history=new window.FakeTerminal.history(o);for(var e=0,n=o.existingText.length;e<n;e++)1<o.existingText.length&&0===e||1<o.existingText.length&&e===o.existingText.length-1||o.output.write(a.trim(o.existingText[e]));o.input.focus(),o.$el.trigger("ft:ready",[o]),o.options.login&&o.exec(o.options.login)},o.bindListeners=function(){o.$el.on("click",function(){o.input.focus()}).on("keyup",function(e){e.ctrlKey&&e.which===o.keymap.C?o.input.ctrlC():e.ctrlKey&&e.which===o.keymap.U&&o.input.ctrlU()})},o.findCommand=function(e){var n;return n="function"==typeof window.FakeTerminal.command[e]?new window.FakeTerminal.command[e](o):n},o.getPrompt=function(){var e,n="function"==typeof o.options.hostname?o.options.hostname.call():o.options.hostname,t="function"==typeof o.options.username?o.options.username.call():o.options.username,r="function"==typeof o.options.cwd?o.options.cwd.call():o.options.cwd;return t=t.toLowerCase().replace(/[^a-z0-9]/g,""),e=(e=(e=(e=o.options.prompt).replace(/%hostname%/g,n)).replace(/%username%/g,t)).replace(/%cwd%/g,r),o.colorize(e)},o.colorize=function(e){return e=(e=e.replace(/<([a-zA-Z].+?)>/g,'<span class="color--$1">',e)).replace(/<\/([a-zA-Z].+)>/g,"</span>",e)},o.scrollToBottom=function(){return o.$el.scrollTop(o.$el.get(0).scrollHeight),o},o.destroy=function(){return o.$el.replaceWith(a(o.originalHtml)),o.$el.trigger("ft:destroy",[o]),o},o.exec=function(e,n){var t,r,i=new a.Deferred;return e=a.trim(e),n||o.output.write(e,!0),0===e.length?i.reject():(t=a.trim(e.split(" ").slice(0,1)),e=e.split(" ").slice(1),(r=o.findCommand(t))?(o.executingCommand.instance&&(o.executingCommand.instance.terminate(),o.executingCommand.instance=null,o.executingCommand.deferred=null),o.input.disable(),o.executingCommand.instance=r,o.executingCommand.deferred=r.execute.apply(r,e).done(function(){i.resolve(arguments)}).fail(function(){i.reject(arguments)}).always(function(){o.input.enable().focus()})):(0<t.length&&(n||o.output.write('command not found: "'+t+'"')),i.reject()),n||o.history.push(t),o.$el.trigger("ft:command",[o,t])),i.promise()},o.__construct()},window.FakeTerminal.output=function(r){var i=this;return i.$screen=null,i.__construct=function(){return i.$screen=$("<div>").addClass("faketerminal__screen"),r.$el.append(i.$screen),i},i.write=function(e,n){var t=$("<div>").addClass("faketerminal__screen__line");return n&&t.append($("<div>").addClass("faketerminal__prompt").html(r.getPrompt())),e=(e=(e=(e=r.colorize(e)).replace(/ /g," ",e)).replace(/<span class="/g,'<span class="',e)).replace(/<div class="/g,'<div class="',e),t.append(e),i.$screen.append(t),r.scrollToBottom(),i},i.clear=function(){return i.$screen.empty(),i},i.__construct()},window.FakeTerminal.input=function(r){var i=this;return i.$input=null,i.$request=null,i.$commandLine=null,i.$inputRequest=null,i.__construct=function(){return i.$prompt=$("<div>").addClass("faketerminal__prompt").attr("autocorrect","off").attr("autocapitalize","none").html(r.getPrompt()),i.$input=$("<input>").on("keyup",function(e){switch(e.which){case r.keymap.ENTER:r.exec(i.read()).done(function(){i.$prompt.html(r.getPrompt())});break;case r.keymap.UP:case r.keymap.DOWN:i.set(r.history.browse(e.which))}}),i.$commandLine=$("<div>").addClass("faketerminal__commandline"),i.$request=$("<input>"),i.$inputRequest=$("<div>").addClass("faketerminal__commandline faketerminal__commandline--request"),r.$el.append(i.$commandLine.append(i.$prompt).append(i.$input)).append(i.$inputRequest.append(i.$request)),i.enable(),i.disableRequest(),i},i.read=function(){var e=i.$input.val();return i.$input.val(""),e},i.request=function(e){switch(e=(e=e||"TEXT").toUpperCase()){case"TEXT":return i.requestText();case"BOOL":case"BOOLEAN":return i.requestBool();case"PASSWORD":return i.requestPassword();default:throw"Invalid request type"}},i.requestText=function(n){var t=new $.Deferred;return i.enableRequest(),i.$request.on("keyup",function(e){e.which===r.keymap.ENTER&&(e=$.trim(i.$request.val()),n||r.output.write(e),t.resolve(e),r.$el.trigger("ft:command",[r,e]))}),t.always(function(){i.disableRequest(),i.$request.off("keyup")}),t.promise()},i.requestBool=function(){var n=new $.Deferred;return i.requestText().done(function(e){e=$.trim(String(e).toLowerCase()),-1!==["1","true","yes","y","ok"].indexOf(e)?n.resolve():n.reject()}),n.promise()},i.requestPassword=function(){var n=new $.Deferred;return i.$request.addClass("is-password"),r.output.write("Password:"),i.requestText(!0).done(function(e){i.$request.removeClass("is-password"),n.resolve(e)}),n.promise()},i.set=function(e){i.$input.val(e)},i.focus=function(){return i.$input.is(":visible")?i.$input.focus():i.$request.is(":visible")&&i.$request.focus(),i},i.enable=function(){return i.$commandLine.show(),i.focus(),i},i.disable=function(){return i.$commandLine.hide(),i.$input.val(""),i},i.enableRequest=function(){return i.$inputRequest.show(),i.focus(),i},i.disableRequest=function(){return i.$inputRequest.hide(),i.$request.val(""),i},i.ctrlC=function(){var e;return r.executingCommand.instance?(r.executingCommand.instance.terminate(),r.executingCommand.instance=null,r.executingCommand.deferred=null,r.output.write("^C",!0)):((e=i.read()).length&&(r.output.write(e,!0),r.output.write("^C",!0)),r.output.write("",!0)),i.disableRequest(),i.focus(),i},i.ctrlU=function(){return i.$input.val(""),i},i.__construct()},window.FakeTerminal.filesystem=function(e){var n=this;return n.__construct=function(){return n},n.__construct()},window.FakeTerminal.history=function(n){var t=this;return t.counter=0,t.items=[],t.browseIndex=null,t.__construct=function(){return t},t.push=function(e){t.counter++,t.items.push({counter:t.counter,command:e}),t.items.length>n.options.history&&(t.items=t.items.slice(t.items.length-n.options.history))},t.browse=function(e){return e===n.keymap.UP?(null===t.browseIndex&&(t.browseIndex=t.items.length),t.browseIndex--,t.browseIndex<0&&(t.browseIndex=0)):e===n.keymap.DOWN&&(null===t.browseIndex&&(t.browseIndex=0),t.browseIndex++,t.browseIndex>=t.items.length)&&(t.browseIndex=t.items.length),t.items[t.browseIndex]?t.items[t.browseIndex].command:null},t.__construct()},window.FakeTerminal.command=function(e){var n=this;n.deferred=new $.Deferred,n.info=function(){return{private:!0}},n.execute=function(){return n.deferred.resolve(),n.deferred.promise()},n.terminate=function(){n.deferred.reject()}},window.FakeTerminal.command.challenge1=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=()=>({description:"Enter challenge 1"}),n.execute=()=>(window.location="/challenge/1",n.deferred.resolve(),n.deferred.promise()),n},window.FakeTerminal.command.challenge2=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=()=>({description:"Enter challenge 2"}),n.execute=()=>(window.location="/challenge/2",n.deferred.resolve(),n.deferred.promise()),n},window.FakeTerminal.command.challenge3=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=()=>({description:"Enter challenge 3"}),n.execute=()=>(window.location="/challenge/3",n.deferred.resolve(),n.deferred.promise()),n},window.FakeTerminal.command.clear=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=function(){return{description:"Clears the screen"}},n.execute=function(){return e.output.clear(),n.deferred.resolve(),n.deferred.promise()},n},window.FakeTerminal.command.echo=function(t){window.FakeTerminal.command.apply(this,arguments);const r=this;return r.info=function(){return{description:"Writes an argument to the standard output"}},r.execute=function(){var e=$.makeArray(arguments);let n;return n=e.join(" "),0===(n=(n=(n=$.trim(n)).replace(/["']/g,"")).replace(/["']/g,"")).length&&(n=" "),t.output.write(n),r.deferred.resolve(),r.deferred.promise()},r},window.FakeTerminal.command.help=function(i){window.FakeTerminal.command.apply(this,arguments);const t=this;return t.info=function(){return{description:"Displays information about the available commands"}},t.execute=function(){let n=[],r={};if(0===arguments.length){n.push("The following commands are available, run <info>help [command]</info> to find out more."),n.push(" ");let t="";$.each(window.FakeTerminal.command,function(e){var n=i.findCommand(e);!n||"function"==typeof n.info&&"boolean"==typeof(r=n.info()).private&&!0===r.private||(t+=e+" ")}),n.push(t),n.push(" ")}else{var e=i.findCommand(arguments[0]);e?("function"==typeof e.info&&("string"==typeof(r=e.info()).description?n=[" ",arguments[0]+" -- <comment>"+r.description+"</comment>"," "]:"object"==typeof r.description&&(n=r.description)),0===n.length&&(n=[" ",'No description for "'+e+'"'," "])):n=[" ",'"'+e+'" is not a valid command'," "]}for(let e=0;e<n.length;e++)i.output.write(n[e]);return t.deferred.resolve(),t.deferred.promise()},t},window.FakeTerminal.command.history=function(n){window.FakeTerminal.command.apply(this,arguments);const t=this;return t.info=function(){return{description:"Displays the command history, up to "+n.options.historyLength+" items"}},t.execute=function(){n.output.write(" ");for(var e=0;e<n.history.items.length;e++)n.output.write(n.history.items[e].counter+" "+n.history.items[e].command);return n.output.write(" "),t.deferred.resolve(),t.deferred.promise()},t},window.FakeTerminal.command.login=function(r){window.FakeTerminal.command.apply(this,arguments);const i=this;return i.info=()=>({description:"Login into an existing account"}),i.execute=()=>{let n,t;return r.output.write("Username: "),r.input.request("text").done(e=>{n=e,r.input.request("password").done(async e=>{t=e,await login(n,t)?window.location="/":r.output.write("<comment>Username / password combination is wrong</comment>"),i.deferred.resolve()})}).fail(()=>{r.output.write("<error>Something went wrong.</error>"),i.deferred.resolve()}),i.deferred.promise()},i},window.FakeTerminal.command.logout=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;n.info=()=>({description:"Logout of the current session"}),n.execute=async()=>(destroyStorage(),await logout()?window.location="/":e.output.write("Could not logout!"),n.deferred.resolve(),n.deferred.promise())},window.FakeTerminal.command.ls=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=()=>({description:"List the files in the current working directory"}),n.execute=()=>(e.output.write("This is a test"),n.deferred.resolve(),n.deferred.promise()),n},window.FakeTerminal.command.register=function(r){window.FakeTerminal.command.apply(this,arguments);const i=this;return i.info=()=>({description:"Register an account"}),i.execute=()=>{let n,t;return r.output.write("Username: "),r.input.request("text").done(e=>{n=e,r.input.request("password").done(async e=>{t=e,await register(n,t)?r.output.write(`<comment>User ${n} registered successfully!</comment>`):r.output.write("<comment>Could not register, something went wrong</comment>"),i.deferred.resolve()})}).fail(()=>{r.output.write("<error>Something went wrong.</error>"),i.deferred.resolve()}),i.deferred.promise()},i},window.FakeTerminal.command.user=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=()=>({description:"Configure your user, in our special GUI"}),n.execute=()=>(window.location="/userpanel/",n.deferred.resolve(),n.deferred.promise()),n},window.FakeTerminal.command.whoami=function(e){window.FakeTerminal.command.apply(this,arguments);const n=this;return n.info=function(){return{description:"Prints the user's username to standard output"}},n.execute=function(){return e.output.write(e.options.username),n.deferred.resolve(),n.deferred.promise()},n},function(n){n.fn.faketerminal=function(e){return this.each(function(){n(this).data("instance",new window.FakeTerminal.main(this,e))})}}(jQuery); 2 //# sourceMappingURL=faketerminal.min.js.map