.. _widgets:

Widget Communs
================

Les outils de templating permettent d'utiliser des fonctions.
:ref:`template-cheetah`

Cette section a pour objectif de décrire comment créer facilement des boutons,
éléments de formulaire...

.. _widget-bouton:

Boutons
--------

En python
~~~~~~~~~~

Importer la librairie

    from ead2.backend.actions.lib.widget import main

Lors du renvoie de données pour la compilation renvoyez un objet de type Bouton::

    bouton = main.Bouton(href='http://monadresse.fr', libelle='allez sur mon adresse.fr')

Renvoyez votre bouton::

    self.send_all({'moubouton':bouton}, template='montemplate.tmpl', templates=['main.tmpl'])

.. warning::

    n'oubliez pas de passer le module main.tmpl.
    Si vous l'oubliez, il se peut que cela marche une fois et pas la suivante.
    Le frontend peut déjà avoir le template, et lorsque vous relancez le service ead-web, il n'y est plus... et ça plante.

.. note::

    L'objet Bouton peut prendre pour option:

    * href : une url ou un javascript à éxécuter (plus souvent un javascript d'ailleurs, # par défaut)
    * libelle : une string (vide par défaut)
    * icon : un lien vers une icône (/image/ok.gif par défaut)
    * title : attribut title de balise html (utilisé au survol des liens)
    * _class : une classe css (btn par défaut)

.. note::

    Il existe des objets étendus qui contienne des attributs par défaut différent icone, libelle

    Submit:

    - libelle="Valider"
    - icone="/image/ok.gif"

    CloseBtn:

    - libelle='Fermer'
    - icone='/image/supprimer.gif'
    - contient également un attribut supplémentaire balise : nom de la balise html à vider

    SupprBtn:

    - libelle='Supprimer'
    - icone='/image/supprimer.gif'


En Cheetah
~~~~~~~~~~~

Dans l'en-tête de votre template `montemplate.tmpl`::

    #extends ead2.frontend.web.template.main
    #implements respond

Plus loin... ::

    #if $is_defined('monbouton')
    $main().make_btn($monbouton)
    #end if

.. note::

    Si vous voulez que votre bouton occupe toute la balise parente, utilisez::

        $main().make_div_btn($bouton)


    .. _widget-forms:

Widgets de Formulaires
======================

.. _widget-forms-input:

Input
-----

En python
~~~~~~~~~~

Importer la librairie::

    from ead2.backend.actions.lib.widget import form

Construisez une balise input::

    balise = form.Input('nom', libelle='Entrez votre nom')

Renvoyez là dans le dictionnaire de données en compagnie des noms de templates::

    result = {}
    result['moninput'] = balise
    self.send_all(result, template='montemplate.tmpl', templates=['form']

.. seealso::

    * :class:`Input`

En Cheetah
~~~~~~~~~~~

Importation de la librairie::

    #extends ead2.frontend.web.template.form
    #implements respond

Utilisation::

    #if $is_defined('moninput')
    $form().make_input($moninput)
    #end if

.. _widget-forms-checkbox:

Checkbox
--------

En python
~~~~~~~~~

Importer la librairie::

    from ead2.backend.actions.lib.widget import form

Construisez votre balise checkbox::

    balise = form.Chexkbox('nom', 'libelle')

Renvoyez là dans un dictionnaire de données en compagnie des noms de templates::

    result = {}
    result['macheckbox'] = balise
    self.send_all(result, template='montemplate.tmpl', templates=['form']

.. seealso::

    * :class:`Checkbox`


En Cheetah
~~~~~~~~~~~

Importation de la librairie::

    #extends ead2.frontend.web.template.form
    #implements respond

Utilisation::

    #if $is_defined('macheckbox')
    $form().make_checkbox($macheckbox)
    #end if

-- _widget-form-radio:

RadioButton
-----------

En python
~~~~~~~~~

Importer la librairie::

    from ead2.backend.actions.lib.widget import form

Construisez votre balise radio::

    balise = form.Radio('nom', 'Choisissez')

Renvoyez là dans le dictionnaire de données en compagnie des noms de templates::

    result = {}
    result['monradio'] = balise
    self.send_all(result, template='montemplate.tmpl', templates=['form']

.. seealso::

    * :class:`Radio`

En Cheetah
~~~~~~~~~~

Importer la librairie::

    #extends ead2.frontend.web.template.form
    #implements respond

Utilisation::

    #if $is_defined('monradio')
    $form().make_radio($monradio)
    #end if


.. _widget-forms-select:

Select
------

En python
~~~~~~~~~

Importer la librairie::

    from ead2.backend.actions.lib.widget import form

Construisez votre balise select::

    select = form.Select('nom', 'Sélectionner')

Peuplez votre balise::

    for i in range(10):
        value = "valeur_%d" % i
        libelle = "libelle_%d" % i
        select.add_option(value, libelle)

Utilisation des optiongroup::

    for i in range(10):
        value = "valeur_%d" % i
        libelle = "libelle_%d" % i
        if i%%2 == 0 : group = "Nombre pair"
        else: group = "Nombre impair"
        select.add_option(value, libelle, group=group)

Joignez là aux données à renvoyer en compagnie du nom de template

    result = {}
    result['maselect'] = select
    self.send_all(result, template='montemplate.tmpl', templates=['formselect']

.. seealso::

    * :class:`Select`

En Cheetah
~~~~~~~~~~

Importation de la librairie::

    #extends ead2.frontend.web.template.formselect
    #implements respond

Utilisation::

    #if $is_defined('maselect')
    $formselect().make($maselect)
    #end if

Voir Aussi
~~~~~~~~~~

Pour la validation des formulaires:
    * :ref:`ajax-form`
