| Example | ||
|---|---|---|
|
|
|
| orion.shell.type | Updating this document | |
The following sample plug-in contributes a "lab" type and "printLab" command to the Shell:
<html>
<head>
<script src="/orion/plugin.js"></script>
<script src="/orion/Deferred.js"></script>
<script>
/* first, contribute a custom type that will be used by the contributed command */
var CompletionStatus = {
MATCH: 0,
PARTIAL: 1,
ERROR: 2
};
var labTypeProperties = {
name: "lab"
};
var labTypeImpl = {
parse: function(arg, typeSpec, context) {
/*
* Compute all potential prediction objects here, can be done asynchronously
* if needed (eg.- if need to wait on an XHR).
*/
var ottawaValue = {name: 'Ottawa', address: 'Kanata, actually', climate: 'colder'};
var rtpValue = {name: 'RTP', address: 'Raleigh', climate: 'warmer'};
var potentialPredictions = [
{
name: 'Ottawa', /* the string to be typed */
value: ottawaValue /* the corresponding object */
},
{
name: 'RTP', /* the string to be typed */
value: rtpValue /* the corresponding object */
}
];
var value; /* undefined until a valid value is fully typed */
var status; /* one of the CompletionStatus values above */
var predictions = []; /* an [] of {name: typedString, value: object} */
for (var i = 0; i < potentialPredictions.length; i++) {
if (potentialPredictions[i].name.indexOf(arg.text) === 0) {
predictions.push(potentialPredictions[i]);
if (potentialPredictions[i].name === arg.text) {
value = potentialPredictions[i].value;
}
}
}
status = CompletionStatus.ERROR;
if (predictions.length > 0) {
status = value ? CompletionStatus.MATCH : CompletionStatus.PARTIAL;
}
var result = {
value: value,
message: (status === CompletionStatus.ERROR ? ("'" + arg.text + "' is not valid") : undefined),
status: status,
predictions: predictions
};
/*
* If all of the above can be computed synchronously then just return result directly.
* If the above cannot be done synchronously (eg.- waiting on an XHR) then return
* a promise as demonstrated below and resolve it when the result becomes ready.
*/
var promise = new orion.Deferred();
setTimeout(
function() {
promise.resolve(result); /* result has become ready some time later */
}
);
return promise;
}
};
/* contribute a command that uses the custom type */
var printLabProperties = {
name: "printLab",
description: "Print a lab location",
parameters: [{
name: "lab",
type: {name: "lab", showClimateToo: true},
description: "The name of the lab to print info for"
}],
returnType: "string"
};
var printLabImpl = {
callback: function(args) {
var result = "Lab name: " + args.lab.name + "\nLocation: " + args.lab.address;
if (args.lab.climate) {
result += "\nClimate: " + args.lab.climate;
}
return result;
}
};
var provider = new orion.PluginProvider();
provider.registerServiceProvider("orion.shell.type", labTypeImpl, labTypeProperties);
provider.registerServiceProvider("orion.shell.command", printLabImpl, printLabProperties);
provider.connect();
</script>
</head>
</html>
When this plug-in is installed the user can use the "printLab" command in the Shell. The first image below shows a user in the process of entering a printLab command, and is shown a list of valid argument values.
In the following image the printLab command has executed and its result is shown in the output area.
|
|
|
| orion.shell.type | Updating this document |