here's some info on writing an app for Prism that I came across / a mirror of what's at:
http://www.softwareishard.com/blog/p...tending-prism/
I'd recommend following the link as it has syntax highlighting.
Hello Prism!
First of all, it isn't much different than writing an extension for Firefox. Both applications are based on XUL Runner and so, the logic is the same. However there are a few differences that are worth to be mentioned.
Let's start with the directory structure. It's simple and the same as in case of a Firefox extension. See here how it looks for the Hello World! Firefox/Firebug extension.
Code:
helloprism@janodvarko.cz/
chrome/
content/
helloprism/
helloprism.xul
helloprism.js
locale/
en-US/
helloprism.dtd
helloprism.properties
skin
classic/
helloprism.png
chrome.manifest
install.rdf
The first difference is in the chrome.manifest file.
Code:
content helloprism chrome/content/
skin helloprism classic/1.0 chrome/skin/classic/
locale helloprism en-US chrome/locale/en-US/
overlay chrome://webrunner/content/webrunner.xul chrome://helloprism/content/helloprism.xul
The main window is represented by webrunner.xul and so we have to do our overlay for it. Notice that it was browser.xul in case of Firefox.
Further the install.rdf is different. The target application is Prism and so, we have to specify that.
Code:
<rdf xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<description about="urn:mozilla:install-manifest">
<i:id>helloprism@janodvarko.cz</i:id>
<i:version>0.1</i:version>
<i:type>2</i:type>
<!-- Prism -->
<i:targetapplication>
<description>
<i:id>prism@developer.mozilla.org</i:id>
<i:minversion>0.8</i:minversion>
<i:maxversion>1.0.0.*</i:maxversion>
</description>
</i:targetapplication>
<i:name>Hello Prism!</i:name>
<i:description>Example extension for Prism.</i:description>
<i:creator>Jan Odvarko (odvarko@gmail.com)</i:creator>
<i:iconurl>chrome://helloprism/skin/helloprism.png</i:iconurl>
<i:homepageurl>http://www.janodvarko.cz</i:homepageurl>
</description>
</rdf>
The Hello Prism! overlay is defined in helloprism.xul file. And in order to make it a bit useful for development I have created two new menu items for the Prism's Tools menu (located at the right-bottom corner).
Prism Tools Menu
* Preferences (open a new window with about
:config page)
* DOM Inspector (open DOM Inspector window)
Of course, DOM Inspector extension must be installed, if you want to use it. Honestly, it's so useful to have DOM Inspector in Prism, especially when you exploring the Prism UI at the beginning.
See how the helloprism.xul looks like.
Code:
<!--ENTITY % helloprismDTD SYSTEM "chrome://helloprism/locale/helloprism.dtd"-->
%helloprismDTD;
]>
<overlay id="helloPrismOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script src="chrome://helloprism/content/helloPrism.js" type="application/x-javascript">
<script type="application/x-javascript" src="chrome://inspector/content/hooks.js"/>
<stringbundleset>
<stringbundle id="strings_helloprism" src="chrome://helloprism/locale/helloprism.properties"/>
</stringbundleset>
<!-- List of new commands -->
<commandset>
<command id="cmd_hpPreferences"
label="&helloprism.preferences;"
oncommand="helloPrism.onPreferences()"/>
<command id="cmd_hpDomInspector"
label="&helloprism.inspector;"
oncommand="helloPrism.onDomInspector()"/>
</commandset>
<!-- Tools menu customization -->
<menu id="menu_tools">
<menupopup id="popup_tools">
<menuseparator/>
<menuitem command="cmd_hpPreferences"/>
<menuseparator/>
<menuitem command="cmd_hpDomInspector"/>
</menupopup>
</menu>
</overlay>
The JS implementation for the two commands is in separate helloprism.js file and looks like as follows:
Code:
var helloPrism =
{
onPreferences: function()
{
window.openDialog('about:config');
},
onDomInspector: function()
{
if (typeof(inspectDOMDocument) == "undefined")
alert(this.getText("helloprism.DOMInspector.error"));
else
inspectDOMDocument(content.document);
},
getText: function(name)
{
return document.getElementById("strings_helloprism").getString(name);
}
};
There is also one helper function that loads a string from localized string bundle (helloprism.properties file). It's used to get the error message if DOM Inspector extension isn't installed.
The extension can be downloaded here. In order to install an extension in Prism, open Add-ons dialog (Tools->Add-ons menu) and and use the Install... button.
There are some troubles with Prism 0.9 and so, I am recommending to use Prism 0.9.1 (experimental) version (build available for Mac, Windows and Linux), which works fine for me.