function pgsh(ev) { var self = this ev.on('cmd_entered', function(input) { // First word is the command, all others are arguments. var parts = input.trim().split(' ') var command = self.active ? self.active : parts.splice(0, 1).toString() var args = parts if (command in self.commands) { self[command](args) } else if (command) { show(command + ' not found') } }) var show = function(text) { ev.trigger('disp_add', text) } var set = function(text) { ev.trigger('disp_set', text) } this.prompt = 'pgs ' + '$ ' this.prompt_su = 'root ' + '% ' this.welcome = 'Linux parsleygardens.net 3.4.5-6-7-i286 #8 PGS Vimputer ' + '3.4.56-7 i286\n\n' + '~ Welcome to Parsley Gardens! ~\n' + '"He maketh me to lie down in green pa..."\n\n' + 'Type `help` for list of commands\n\n' this.commands = { 'about': 'Author Information', 'clear': 'Clears the screen', 'version': 'Shell Information', 'git': 'Link to Code Repository', 'hello': 'Say hello to the computer\nUsage: hello [name]', 'magic': 'Link to Artist', 'su': 'Gain Phenomenal Cosmic Power', 'exit': 'Leave the current context', 'search': 'Search the Web (with a Duck)\nUsage: search [query]', 'questions': 'Answer some questions!', 'help': 'List commands or view information for one\nUsage: help [command]' } /** * The Commands */ this.about = function(args) { show('Site by Weiyi Lou ' + new Date().getFullYear() + '\n') } this.clear = function(args) { ev.trigger('disp_clear') } this.version = function(args) { show('Parsley Gardens Shell (pgsh) 1.0.0 Built with ' + 'Riot') } this.git = function(args) { show('Code Repository at ' + 'code.parsleygardens.net') } this.hello = function(args) { address = args.join(' ').trim() if (address.length == 0) { show('Hello to you too') } else if (address == 'pgsh') { show('Hello human') } else { show('My name is not "' + address + '"') } } this.magic = function(args) { show('Animation and Illustration at slightlymagic.com.au') } this.su = function(args) { if (self.su !== true) { self.su = true if (!self.su_warned) { self.su_warned = true show('We trust you have received the usual lecture from the ' + 'local System Administrator.\n' + 'It usually boils down to these three things:\n\n' + ' #1) Respect the privacy of others.\n' + ' #2) Think before you type.\n' + ' #3) With great power comes great\n\n') } ev.trigger('prompt_set', self.prompt_su) } } this.exit = function(args) { if (self.su) { self.su = false ev.trigger('prompt_set', self.prompt) return } show('Close browser window to exit') } this.search = function(args) { if (!args.join(' ').trim()) { return show(self.commands.search) } ev.trigger('prompt_hide') show('Searching for "' + args.join(' ') + '" in new window...') setTimeout(function() { window.open('https://duckduckgo.com/?q=' + args.join('+'), '_blank') ev.trigger('prompt_show') }, 1000) } this.questions = function(args) { if (!self.active) { self.active = 'questions' ev.trigger('context_swap', 'questions') set('Welcome to the questions. Do you want to continue?') return } if (args == 'exit') { self.active = '' ev.trigger('context_swap') show('Thanks for answering questions!') return } var questions = [ 'Isn\'t this song the best?', '1 + 2 = ?', 'Am I a sandwich?', 'Where were you at 3:15am on April 14th?', "Don't you mean prism?", 'Butts twelve by pies?', 'I say there, Monstrosity. Do you know the times?', '...is essay-writing an exercise in masking ignorance?', 'What is the name of the spaces between the teeth of a comb?', 'Why are you dressed up like Ship\'s Captain?' ] set('You answered with "' + args + '"!\nNext question!\n' + '(Type "exit" to end)\n\n') var rand = Math.floor(Math.random() * questions.length); show(questions[rand]) } this.help = function(args) { command = args.join(' ').trim() if (command in self.commands) { show(self.commands[command]) } else if (command) { show('No information for: ' + command) } else { var commands = []; for(var name in self.commands) { commands.push(name) } show('Available commands:\n' + commands.sort().join(' ') + '\n\n`help [command]` for more information.') } } }