2.2.3. fejezet, Firefox és az XUL

Az XUL (XML User Interface Language) a Mozilla által kifejlesztett XML alapú nyelv. Olyan eszköz gazdag kereszt platformos alkalmazások fejlesztésére alkalmas, amelyek az internetre kapcsolódnak vagy attól függetlenül működnek. Ezek az alkalmazások könnyen kiegészíthetők további szöveg, kép és külalaki elemekkel, így könnyedén testre szabhatók vagy fordíthatók különböző üzleti területekre. Azok a fejlesztők, akik otthon vannak a dinamikus HTML (DHTML) világába, gyorsan megtanulják és hamar építhetnek új alkalmazásokat az XUL segítségével. További bemutató oldalt az XUL periódusos rendszer oldalán találsz, amit Firefox-ban (4.0 alatti verziókban, a fölött a remote-xul-manager kiegészítővel) vagy más Gecko alapú böngészőben nézhetsz meg. Mintaként álljon itt egy táblázattá alakító XSL fájl.

<?xml version="1.0" encoding='utf-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="yes"/>
    <xsl:param name="fielddefs"/>
    <xsl:param name="editable"/>
    <xsl:param name="target"/>
    <xsl:param name="onselect"/>
    <xsl:param name="style"/>
    <xsl:template match="/*">
        <groupbox flex="2" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
            <xsl:element name="tree">
               <xsl:if test="$editable='true'">
                 <xsl:attribute name="onclick">JComponent.client.tableClick(event);</xsl:attribute>
               </xsl:if>
                 <xsl:attribute name="seltype">single</xsl:attribute>
                 <xsl:attribute name="hidecolumnpicker">true</xsl:attribute>
                 <xsl:attribute name="flex">1</xsl:attribute>
                 <xsl:attribute name="hidehscroll">true</xsl:attribute>
                 <xsl:attribute name="id"><xsl:value-of select="name()"/></xsl:attribute>
                 <xsl:attribute name="onselect"><xsl:value-of select="$onselect"/></xsl:attribute>
                 <xsl:attribute name="style"><xsl:value-of select="$style"/></xsl:attribute>
                <treecols>
                    <xsl:if test="$editable='true'">
                        <treecol label="" ordinal="0"/>
                        <treecol label="" ordinal="0"/>
                    </xsl:if>
                    <xsl:for-each select="$fielddefs/fieldlist/field[@visible='true']">
                        <xsl:element name="treecol">
                            <xsl:attribute name="label"><xsl:value-of select="label[@context='HUN']"/></xsl:attribute>
                            <xsl:attribute name="flex">1</xsl:attribute>
                            <xsl:attribute name="ordinal"><xsl:value-of select="position()"/></xsl:attribute>
                        </xsl:element>
                        <splitter class="tree-splitter" />
                    </xsl:for-each>
                </treecols>
                <treechildren>
                    <xsl:variable name="tablename" select="name()"/>
                    <xsl:for-each select="item">
                        <treeitem>
                            <treerow>
                                <xsl:if test="$editable='true'">
                                        <xsl:element name="treecell">
                                          <xsl:attribute name="src">/OmegaDocumentStore/images/delrow.gif</xsl:attribute>                                            
                                        </xsl:element>
                                        <xsl:element name="treecell">
                                            <xsl:attribute name="src">/OmegaDocumentStore/images/edit.gif</xsl:attribute>
                                        </xsl:element>
                                </xsl:if>
                                <xsl:variable name="row" select="./*"/>
                                <xsl:for-each select="$fielddefs/fieldlist/field[@visible='true']">
                                    <xsl:variable name="fieldname" select="@name"/>
                                    <xsl:element name="treecell">
                                      <xsl:attribute name="label"><xsl:value-of select="$row[name()=$fieldname]"/></xsl:attribute>
                                    </xsl:element>
                                </xsl:for-each>
                            </treerow>
                        </treeitem>
                    </xsl:for-each>
                </treechildren>
            </xsl:element>
        </groupbox>
    </xsl:template>
</xsl:stylesheet>

Firefox 4.0 és a fölötti verziójú Gecko böngésző tesztelésre telepítsük a remote-xul-manager kiegészítőt, és engedélyezzük localhost-ra az XUL kezelést. Töltsük be és teszteljük a http://localhost/OmegaDocumentStore/index.xul hívásával a programot a helyi Tomcat szerveren.

(2011.09) A fejlesztők biztonsági okokra hivatkozva letiltották az XUL webes használatát a Firefox-ban. Készülődnek a HTML5-re és a CSS3-ra, amik kiválthatják az XUL-t. Az egész letiltási vita bővebben itt olvasható. Úgy tűnik nem folytatódik a fejlesztése.