.. description des renkan

##############################
Description de l'outils renkan
##############################

Introduction
============

Renkan est un outil d'édition et d'affichage de carte mentale.

Il a été conçu de façon modulaire et avec une claire separation entre la partie cliente en javascript et la partie serveur.

En particulier la partie du client en charge des communications avec le serveur (chargement des projets, gestion de la persistance) est totalement modulaire et configurable.
Cela permet d'adapter facilement le client à l'api de sauvegarde du serveur.


Modèle de donnée serveur (HDALab)
=================================

Le modèle de donnée du coté serveur est simple.
En effet le serveur ne cherche pas à interpréter le contenu d'un renkan.
Il se content de sauvegarder le contenu qui lui est transmis par le client et dans l'autre sens de transmettre directement au client le contenu sauvegardé en base.
Toute l'interprétation du modèle se fait dans le client.

Classe renkanmanager.models.Renkan
----------------------------------

*class* ``renkanmanager.models.``\ **Renkan** :

    Classe de base d'un renkan.

    Champs de l'objet:

      - **owner** (`object`) : Le propriétaire (créateur) du renkan.
      - **rk_id** (`str`) : id du renkan.
      - **content** (`str`) : contenu du renkan (la chaine JSON brute).
      - **title** (`str`) : titre du renkan.
      - **image** (`str`) : chemin vers l'image miniature du renkan.
      - **creation_date** (`datetime`) : date de création.
      - **modification_date** (`datetime`) : date de modification.


Classe hdalab.models.renkan.HdalabRenkan
----------------------------------------

.. autoclass:: hdalab.models.renkan.HdalabRenkan
  :noindex:


Format renkan
=============

Un renkan a le format suivant:

  exemple ::

    {
        "id": "f4d002b7-d4fd-486c-8898-6c6ceebc3354",
        "schema_version": 2, #version of schema, latest is 2.
        "title": "Example of Renkan with movies",
        "description": "A long description",
        "created": "2013-03-18T11:32:40.253+01:00",
        "updated": "2014-02-04T15:12:56.619+01:00",
        "nodes": [
            {
                "id": "node-2013-05-08-72c911bafdf9932c-0001",
                "title": "Une femme mène l'enquête",
                "description": "La caméra suit la femme qui marche\nJeu avec la caméra qui se substitue au spectateur",
                "uri": "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/lyceehulst_3extraits/c8a61ee4-b33c-11e2-802c-00145ea4a2be#id=s_DCA8D184-EFC2-314B-0F6B-84043E8F9984",
                "style": { #optional
                    "color": "#ff7f00", #line color, optional (null)
                    "thickness": 1, #thickness of the line, optional (1)
                    "dash": false, #dashed line, optional (false)
                },
                "position": {
                    "x": -547.0499881440252,
                    "y": -221.5401229374163
                },
                "image": "http://ldt.iri.centrepompidou.fr/static/site/ldt/css/imgs/video_sequence.png",
                "size": 0,
                "project_id": "f4d002b7-d4fd-486c-8898-6c6ceebc3354",
                "created_by": "de68xf75y6hs5rgjhgghxbm217xk",
                "type": "...",
                "hidden": false,
                "shape": "circle",
            },
            ...
        ],
        "edges": [
            {
                "id": "edge-2013-05-08-72c911bafdf9932c-0002",
                "title": "",
                "description": "",
                "uri": "",
                "style": { #optional
                    "color": "#ff7f00", #line color, optional (null)
                    "thickness": 1, #thickness of the line, optional (1)
                    "dash": false, #dashed line, optional (false)
                    "arrow": true,  #draw the arrow, optional (true)
                },
                "from": "node-2013-04-30-a81adec6694db5f4-0032",
                "to": "node-2013-05-08-72c911bafdf9932c-0001",
                "project_id": "f4d002b7-d4fd-486c-8898-6c6ceebc3354",
                "created_by": "de68xf75y6hs5rgjhgghxbm217xk"
            },
            ...
        ],
        "users": [ #optional
            {
                "userId": "user-2015-05-05-72c911bafdf9932c-0001",
                "color": "#cc9866",
                "username": "user1",
                "anonymous": true
            },
        ...
        ],
        "space_id": "17f968e4-2640-4319-aa61-b5b8b527ebb4", #Optional
        "views": [ #Optional
            {
                "zoom_level": 0.8275032552816195,
                "offset_x": 832.0104075533723,
                "offset_y": 402.8917139487223
            }
        ]
    }

Système de chutier
==================

Renkan propose un système de "chutier". C'est un système de liste d'élément ouvert à gauche d'un renkan en édition.

On le voit à gauche sur l'image suivante :

.. image:: _static/img/renkan/renkan_edition.png

Ce système permet d'ajouter rapidement des resources fiches ou tag par "glisser/déposer".
Techniquement, ces fonctionalités de chutiers propres à HDALab sont définies dans le fichier `hdalab/static/hdalab/js/hdalab-renkan-bins.js`.


.. _renkan_boite_recherche_contenus:

Boite de recherche de contenus
------------------------------

.. image:: _static/img/renkan/renkan_recherche_contenus.png


Cette boite de recherche permet de lancer une requête sur 3 types de ressources:
  - recherche de tag
  - recherche de fiches
  - recherche d'article wikipedia

  +--------------------+----------------------------------------------------------+--------------------------------------+
  | type               | url de requête                                           | Vue                                  |
  +====================+==========================================================+======================================+
  | tags               | http://hdalab.iri-research.org/hdalab/a/tagsearch?       | :func:`hdalab.views.ajax.tagsearch`  |
  +--------------------+----------------------------------------------------------+--------------------------------------+
  | fiches             | http://hdalab.iri-research.org/hdalab/hdabo/searchajax/? | :class:`hdabo.views.SearchDatasheet` |
  +--------------------+----------------------------------------------------------+--------------------------------------+
  | articles wikipedia | https://fr.wikipedia.org/w/api.php?action=query...       |                                      |
  +--------------------+----------------------------------------------------------+--------------------------------------+

Le resultat de la recherche est affiché dans un nouvel onglet listant les ressources.


Boite de recherche sur les résultats
------------------------------------

.. image:: _static/img/renkan/renkan_recherche_resultats.png

Cette boite de recherche permet de rechercher et de filtrer des résultats déjà présent dans les onglets. La recherche est uniquement locale et ne lance fait pas de requête http.


Liste de ressource
------------------

.. image:: _static/img/renkan/renkan_bin_resources.png

Cet onglet liste des ressources statiques qui peuvent être utiles à l'édition du renkan.


Liste de ressource supplémentaire
---------------------------------

.. image:: _static/img/renkan/renkan_bin_plus_ressources.png

Cet onglet liste des ressources "supplémentaires".
Un renkan est souvent créé à partir du résultat d'une recherche sur la page de `recherche par facette <pages_recherche_facette>`.
Pour éviter d'avoir trop de noeuds ressources, les 8 premiers résultats de la recherche sont utilisés dans le renkan et les 10 suivants sont utilisés dans ce chutier.
(ce comportement est défini dans la méthode :func:`hdalab.views.profile.HdalabRenkanGetPut.get`).


Sauvegarde des renkan
=====================

la sauvegarde des renkan est définie dans le fichier `hdalab/static/hdalab/js/renkan-manual-save.js`.
La sauvegarde est déclenchée par une action de l'utilisateur.

