All pastes #84601 Raw Edit

matiu

public text v1 · immutable
·published 2006-07-11 03:14 UTC
rendered paste body
#include "nsIDOMNode.idl"
#include "nsIArray.idl"

// This interface is used to extract exe namespace xml data from
// XHTML/XForms/XUL/SVG content
// Elements are associated by the name attribute
// Instances can be created with 
//   extractor = Components.classes['@exe.data-extractor;1'].createInstance()
//   exe.register(myNSIExeElementImplementation)
[scriptable, uuid(a1330258-2ef5-4ce3-82be-419ed887da41)]
interface nsIExeDataExtractor : nsISupports
{
    // Call this function passing a XHTML/SVG/XUL/XForms node
    // Returns an XML node in the exe name space of either <idevice> or <field>
    nsIDOMNode extractData(in nsIDOMNode content);
};

[scriptable, uuid(f32fa4ab-d5d2-4460-ad35-d76bfab4f3aa)]
interface nsIExeDataExtractor2 : nsISupports
{
    // Wether this is an IDevice (as apposed to a field)
    attribute boolean isIDevice;
    // Call this function passing a XHTML/SVG/XUL/XForms node
    // Returns an XML node in the exe name space of either <idevice> or <field>
};


// an ExeElement is either a field or an IDevice
// When you create a field or idevice, you should provide an XPCOM object that
// implements these interfaces
[scriptable, uuid(10181ce1-82a4-419d-b36d-1ed541a9adf4)]
interface nsIExeElement : nsISupports
{
    // Wether this is an IDevice (as apposed to a field)
    attribute boolean isIDevice;
    // The human readable universally unique (amongst all eXeElements of the
    // same type) className of this idevice. Should be something like
    // author.idevicename or author.fieldname, e.g. it's ok (but not reccommended)
    // for a field to exist called 'matthewsherborne.cloze' and also an idevice to exist
    // with the same className. (should be all lowercase for consistency).
    attribute string className;
    // The name of the field or idevice, should really try to keep it unique but
    // won't kill the program if it isn't, it'll just confuse the user
    attribute wstring name;
    // The name of the individual or organisation that created the field/idevice
    attribute wstring author;
    // The version number
    attribute string version;
    // A short description to show in a tooltip window, from the idevice list pane
    // or the field list pane in the idevice editor
    attribute wstring description;
    // A URL to the XHTML help
    attribute string helpTextUrl;
    // The URL to the edit template
    attribute string editOverlayUrl;
    // The URL to the view template
    attribute string viewOverlayUrl;

    // This will be called when we want the field/idevice to show it's data
    // edit/teacher mode. 
    // The 'data' is an XML node, that was earlier retrieved
    // from calling getData() and possibly saved and loaded.
    // 'content' is the edit XUL/XHTML/SVG/etc. imported from the field/idevice
    // editoverlay.xul, the node with the id=content
    nsIDOMNode fillInEditDOM(in nsIDOMNode content, in nsIDOMNode data);
    // This will be called when we want the field/idevice to show it's data
    // view/student mode. 
    // The 'data' is an XML node, that was earlier retrieved
    // from calling getData() and possibly saved and loaded.
    // 'content' is the edit XUL/XHTML/SVG/etc. imported from the field/idevice
    // editoverlay.xul, the node with the id=content
    nsIDOMNode fillInViewDOM(in nsIDOMNode content, in nsIDOMNode data);
    // This will be called after render edit exits to get some XML data from the
    // field/idevice. This data can be in any format the author likes, but
    // simpler is better. It will be incorporated into the xlp file format when
    // the user saves the data.
    // 'content' is the node from the imported editoverlay.xul content node
    // 'data' is the XML DOM node, could be empty or have data. The implementor
    // should modify this.
    void getData(in nsIDOMNode content, in nsIDOMNode data);
};

// This element helps you set up a field or idevice before rendering
// and then render it. One of the main differences between objects 
// that implement this interface and objects that implement nsIExeElement
// is that objects that implement this interface maintain a state and are 
// used once then discarded, whereas the nsIExeElement implementors
// Represent the definition of a field or idevice, rather than a particular 
// instance.
//
// Instances of this element are provided by the nsIExeRegistrationManager
[scriptable, uuid(a4a339f8-07c3-43c1-8c49-0dcda292767d)]
interface nsIExeElementRenderer : nsISupports
{
    // A one off uri given for this rendering. Usually appended to id's inside
    attribute string uri;
    // Helps you set up simple parameters, that will be passed to the field via it's XML
    // as <param> tags
    wstring getParameter(in string name);
    // Helps you set up simple parameters, that will be passed to the field via 
    // the XML attributes of the main <idevice title=""> tag and <parameter> tags for other
    void setParameter(in string name, in wstring value);
    // Get the XML dom as made so far
    nsIDOMNode getData();
    // Set the XML Data for loading, replaces all parameters and old data
    void setData(in nsIDOMNode data);
    // Replace a node with the rendered DOM.
    // To be called after params and data have been set
    // This method renders in edit mode
    void renderReplaceEdit(in nsiDOMNode node);
    // Replace a node with the rendered DOM.
    // To be called after params and data have been set
    // This method renders in view mode
    void renderReplaceView(in nsiDOMNode node);
};

// The Idevice author should do:
//   exe = Components.classes['@exe.registration-manager;1'].getService()
//   exe.register(myNSIExeElementImplementation)
// as soon as their xul file is loaded
[scriptable, uuid(14578383-703d-40f0-905a-4f092feec4fa)]
interface nsIExeRegistrationManager : nsISupports
{
    // The version of eXe
    attribute wstring version;
    // Called by fields and idevices when their xul is imported to register
    // themselves with the global repository
    void register(in nsIExeElement element);
    // Returns a field/idevice renderer from an id
    nsIExeElementRenderer getFieldOrIdeviceRenderer(in string className);
};