Fonctionnement des directives optionnelles
==========================================

.. glossary::

   directive optionnelle
       directive activable ou désactivable


Les directives sont  optionnelles si elles ont l'attribut ``tag``.

Cet attribut tag n'est pas obligatoire, mais au niveau du code deux constantes sont utilisées::

    DIRECTIVE_OPTIONAL = 1
    DIRECTIVE_ACTIVE = 2

dans la classe Directive de fwobjects.py, il faut regarder l'attribut attrs.

Si directive.attrs = 0, alors la directive n'est ni optionnelle, ni active.

La liste des tags pendant le lancement de l'application est stockée dans le library store.


Pour savoir si une directive est optionnelle ou active, faire un ``directive.is_active()`` ou un ``directive.is_optional()``.

* attrs=0 : pas optionnelle
* attrs=1 : optionnelle mais pas active
* attrs=3 : optionnelle et active

Attention : la valeur 2 correspond à non optionnelle mais active, ce qui n'a pas de sens. Les valeurs autorisées sont donc [0,1,3]

activation depuis un fichier externe
------------------------------------

typiquement, les directives sont activées depuis l'ead

l'affectation de ``attrs`` se fait après l'action d'un visiteur qui modifie le ``library_store``

::

    if self.attrs !=0 and libray_store.tags[self.tag]:
        self.attrs = 3


liste des attributs
-------------------

les attributs possibles dans le xml des directives sont::

    attrs="0"
    attrs="1" : optionnelle non active
    attrs="3" : optionnelle et active
    attrs="17" : optionnelle et cachéé par défaut (active_tags)



Dans l'api, il est possible de savoir si une directive est optionnelle par::

    my_directive.is_optional()

Si la directive est optionnelle, il est possible de savoir si elle est active par::

    my_directive.is_active()



la forme du tag de directive
-----------------------------------

comme le tag de directive est ce qui est utilisé dans l'EAD, il est important d'avoir un
tag qui ne comporte pas de caractères spéciaux
(pas de chevrons, pas de caractères accentués), bref comme une variable python
(avec les espaces en plus)


