* If you have a personal web server available, you can copy <tt>reversePlugin.html</tt> and <tt>plugin.js</tt> there.

* If you have a personal web server available, you can copy <tt>reversePlugin.html</tt> and <tt>plugin.js</tt> there.

* If you're using Orionhub, you can put the plugin in a new folder in your Orionhub workspace. Then create a Site Configuration in Orion that launches your folder. See [[Orion/Documentation/User Guide/Getting started#Launching_your_project_as_a_website|Launching your project as a website]].

* If you're using Orionhub, you can put the plugin in a new folder in your Orionhub workspace. Then create a Site Configuration in Orion that launches your folder. See [[Orion/Documentation/User Guide/Getting started#Launching_your_project_as_a_website|Launching your project as a website]].

−

* You can also use a pre-built version at [http://mamacdon.github.com/1.0/plugins/reverse/reversePlugin.html http://mamacdon.github.com/1.0/plugins/reverse/reversePlugin.html].

+

* You can also use a pre-built version at [http://mamacdon.github.io/1.0/plugins/reverse/reversePlugin.html http://mamacdon.github.io/1.0/plugins/reverse/reversePlugin.html].

Line 164:

Line 164:

: Contributes extended search completion in addition to recent searches by using the <tt>orion.search.proposal</tt> service type.

: Contributes extended search completion in addition to recent searches by using the <tt>orion.search.proposal</tt> service type.

−

; http://mamacdon.github.com/0.5/plugins/beautify/jsbeautify.html

+

; http://mamacdon.github.io/0.5/plugins/beautify/jsbeautify.html

−

: Contributes a "Beautify JS" button to the editor toolbar by using the <tt>orion.edit.command</tt> service type. Visit http://mamacdon.github.com for a directory of other available plugins, organized by Orion version.

+

: Contributes a "Beautify JS" button to the editor toolbar by using the <tt>orion.edit.command</tt> service type. Visit http://mamacdon.github.io for a directory of other available plugins, organized by Orion version.

−

; http://mamacdon.github.com/0.5/plugins/uglify/uglify-plugin.html

+

; http://mamacdon.github.io/0.5/plugins/uglify/uglify-plugin.html

: Contributes an "Uglify JS" (minify, in other words) button to the editor toolbar by using the <tt>orion.edit.command</tt> service type.

: Contributes an "Uglify JS" (minify, in other words) button to the editor toolbar by using the <tt>orion.edit.command</tt> service type.

== See also ==

== See also ==

* [[Orion/How Tos/Installing A Plugin|Installing a plugin]]

* [[Orion/How Tos/Installing A Plugin|Installing a plugin]]

Revision as of 11:26, 24 June 2013

This section explains how to write a plugin for Orion. It is intended for developers who want to extend Orion's functionality.

What you need

You can copy-paste its contents into a <script> tag in your plugin, or load it externally like so:

<script src="plugin.js"></script>

The plugin.js file is also an AMD module, so you can alternatively load it through a module loader like RequireJS.

require(['plugin'], function(PluginProvider) {
// ...
});

Writing the plugin

Let's make a plugin that adds a button to the toolbar of the Orion editor. When clicked, it will reverse the selected text in the editor. This is not a very useful feature, but it'll be a good introduction to the concepts involved.

Creating the HTML file

Create a new HTML file called reversePlugin.html with the following content:

What we have now isn't a plugin yet. It's just a bare-bones HTML file. The next step is to include the API we'll need to talk to Orion. Grab the plugin.js file (see What you need) and put it in the same folder as reversePlugin.html. Then add this inside the <head> tags of the HTML file:

<script src="plugin.js"></script>

Making it a plugin

Next, we'll add some code that connects our file to Orion. Add the following, again inside the <head> tags:

At this point, we've got an honest-to-goodness Orion plugin, albeit one that does nothing. Let's go over the various parts in detail.

window.onload — Runs our function after plugin.js has been loaded by the browser. This ensures that the orion.PluginProvider constructor is available.

var headers = ... - An optional object supplying metadata about the plugin's name, version and description. This is used to display information about the plugin on the plugin settings page.

var provider = new orion.PluginProvider(headers) — Creates a new PluginProvider. The PluginProvider may provide one or more services, but right now ours doesn't provide any.Optionally, an object giving metadata about the plugin can be provided as an argument to the constructor.

provider.connect() — This is where the magic happens. When our plugin is activated from Orion, this call opens an asynchronous communication channel. Orion adds information about our plugin, and any service contributions it makes, to the Orion registry.

Registering the service

Now we're going to expose a service to Orion. We'll create and register a service with the orion.edit.command service type.
Add the additional lines as shown:

var serviceImpl: This object gives the implementation of our service, the part that will do the actual work. When someone requests our service, our plugin is loaded into an IFrame, and the service's methods are made available. The function-typed properties of the serviceImpl object define the service methods.

var serviceProperties: Every service provider can supply properties, which is an object that holds metadata about the service provider. If you're familiar with Eclipse desktop, you can think of service properties as analogous to the extensions declared in a plugin.xml file.

provider.registerService("orion.edit.command", serviceImpl, serviceProperties);: This call registers our service implementation and properties with the service type "orion.edit.command". At this point, if we tried installing our plugin into Orion, we'd have enough to make the Orion editor see our contribution. However, our contribution still does nothing. Let's fix that.

Implementing the service

We'll fill in the serviceImpl and serviceProperties objects with the actual details of the service.
Change the serviceImpl object to look like this:

Note that the functions defined in the service will depend on what service type you're contributing to. In our case, we're contributing to "orion.edit.command", which expects a run() function. (See the Developer Guide for a list of extension points and their API.)

Testing the plugin

First we need to host our plugin somewhere.

If you have a personal web server available, you can copy reversePlugin.html and plugin.js there.

If you're using Orionhub, you can put the plugin in a new folder in your Orionhub workspace. Then create a Site Configuration in Orion that launches your folder. See Launching your project as a website.

Contributes a "Beautify JS" button to the editor toolbar by using the orion.edit.command service type. Visit http://mamacdon.github.io for a directory of other available plugins, organized by Orion version.