Générer un menu récursif

Ce gabarit génère un menu récursif. Il utilise deux règles, la première pour les conteneurs et la seconde pour les noeuds isolés. La première règle trouve tous les conteneurs comme indiqué par l'attribut iscontainer. Nous créons un seul menupopup mais nous répétons un menu pour chaque résultat. Pour les noeuds isolés, la seconde règle est plutôt utilisée pour générer un menupopup mais avec un menuitem dedans à la place. Ces deux règles ont un élément menupopup qui sera seulement généré dès lors que le contenu avec l'attribut uri sera généré pour chaque résultat.

Pour la première itération (les races d'animaux), tous les items sont des conteneurs, donc un menupopup et cinq menu sont générés. Le constructeur du gabarit parcourera récursivement chaque animal. Les animaux sont tous des noeuds isolés, et donc ils utiliseront la seconde règle. Le contenu sera placé à l'intérieur du conteneur parent ayant l'attribut uri, dans ce cas, l'élément menu. Ainsi, les menupopup et menuitem de la seconde règle sont ajoutés. De nouveau, l'élément menupopup n'est généré qu'une seule fois pour tous les items.

Si un conteneur a quelques items qui sont aussi des conteneurs, le menupopup contiendra un mélange de menu et de menuitem. Cependant, de nouveau, seul un menupopup sera généré.

Voir   Voir la source de données

<hbox>
  <button label="Animaux" type="menu" datasources="animals.rdf"
          ref="http://www.some-fictitious-zoo.com/all-animals">
    <template>
      <rule iscontainer="true">
        <menupopup>
          <menu uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
        </menupopup>
      </rule>
      <rule>
        <menupopup>
          <menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
        </menupopup>
      </rule>
    </template>
  </button>
</hbox>

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.