function pgsh() {
this.prompt = 'pgs $ '
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': {
'help': 'Author Information\nUsage: about',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Site by Weiyi Lou ' + new Date().getFullYear()
}
},
'clear': {
'help': 'Clears the screen\nUsage: clear',
'run' : function(args, shell, terminal) {
terminal.display.clear()
}
},
'version': {
'help': 'Shell Information\nUsage: version',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Parsley Gardens Shell (pgsh) 1.0.0. Built with Riot.js'
}
},
'git': {
'help': 'Link to Code Repository\nUsage: git',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Self-Hosted Code Repository at code.parsleygardens.net'
}
},
'hello': {
'help': 'Usage: hello [name]',
'run': function(args) {
address = args.join(' ').trim()
if (address.length == 0) {
return 'Hello to you too'
} else if (address == 'pgsh') {
return 'Hello human'
} else {
return 'My name is not "' + address + '"'
}
}
},
'magic': {
'help': 'Link to Artist\nUsage: magic',
'run': function(args) {
if (args.length > 0) { return this.help }
return 'Animation and Illustration at slightlymagic.com.au'
}
},
'su': {
'help': 'Substitute as root user for Phenomenal Cosmic Power\nUsage: su',
'run': function(args, shell, terminal) {
if (args.length > 0) { return this.help }
var output = ''
if (!shell.su) {
terminal.commandline.setPrompt('root % ')
shell.su = true
output = 'With Great Power comes Great'
}
return output
}
},
'exit': {
'help': 'Usage: exit',
'run': function(args, shell, terminal) {
if (args.length > 0) { return this.help }
var output = 'Close browser window to exit'
if (shell.su) {
terminal.commandline.setPrompt(shell.prompt)
shell.su = false
output = ''
}
return output
}
},
'search': {
'help': 'Search the web\nUsage: search [query]',
'run': function(args, shell, terminal) {
terminal.commandline.hidePrompt()
setTimeout(function() {
window.open('https://duckduckgo.com/?q=' + args.join('+'), '_blank')
terminal.commandline.showPrompt()
terminal.update()
}, 1000)
return 'Searching for "' + args.join(' ') + '" in new window...'
}
},
'questions': {
'help': 'Answer some questions!\nUsage: questions',
'run': function() {
return {
'run': function(input, terminal) {
if (!this.running) {
this.running = true
terminal.display.hide()
terminal.display.add('Welcome to the questions. Do you wish to continue?')
terminal.commandline.hidePrompt()
return
}
if (input != 'exit') {
terminal.display.set('You answered the last question with "' + input + '"!\nWould you like another question?\n(Type "exit" to end)')
} else {
this.running = false
terminal.display.restore()
terminal.display.add('Thanks for answering questions!')
terminal.commandline.showPrompt()
terminal.returnToShell()
}
}
}
}
},
'help': {
'help': 'List all commands or view information for a command\nUsage: help [command]',
'run': function(args, shell) {
command = args.join(' ').trim()
if (command in shell.commands) {
return shell.commands[command].help
} else {
var output = (command) ? 'Command not found: ' + command + '\n' : ''
var commands = [];
for(var name in shell.commands) {
if (name !== 'Parent') { commands.push(name) }
}
output += 'Available commands:\n' + commands.sort().join(' ')
return output
}
}
}
}
this.run = function(input, terminal) {
var parts = input.trim().split(' ')
// First word is the command, all others are arguments.
var command = parts.splice(0, 1)
var args = parts
var output = ''
if (command in this.commands) {
output = this.commands[command].run(args, this, terminal)
}
return output
}
}