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.')
}
}
}