doc/general.fr.md
branchnew-model
changeset 909 aa0e42229784
equal deleted inserted replaced
908:f56199193fad 909:aa0e42229784
       
     1 # Architecture générale du Metadataplayer #
       
     2 
       
     3 ATTENTION !
       
     4 Cette documentation se réfère à la v.3 du Metadataplayer, actuellement disponible dans la branche **new-model** du repository
       
     5 http://www.iri.centrepompidou.fr/dev/hg/metadataplayer
       
     6 
       
     7 ## Bibliothèques extérieures ##
       
     8 
       
     9 Les bibliothèques utilisées par le Metadataplayer sont regroupées dans *src/libs*
       
    10 
       
    11 ### LAB.js ###
       
    12 
       
    13 - **Fichier**: LAB.min.js
       
    14 - **Licence**: MIT.
       
    15 - **Rôle**: Charge les autres bibliothèques extérieures et les widgets.
       
    16 - **Utilisé par**: Code principal.
       
    17 - Du fait de ce mode de chargement, il s’agit de la seule bibliothèque nécessaire au moment de l’initialisation du code.
       
    18 - **Site**: http://labjs.com/
       
    19 
       
    20 ### jQuery ###
       
    21 
       
    22 - **Fichier**: jquery.min.js
       
    23 - **Licence**: Double, MIT et GPL.
       
    24 - **Rôle**: Gère les actions du code sur la structure du document HTML (DOM)
       
    25 - **Utilisé par**: Code principal et tous les widgets.
       
    26 - **Site**: http://jquery.org/
       
    27 
       
    28 ### jQuery UI ###
       
    29 
       
    30 - **Fichiers**: jquery-ui.min.js et jquery-ui.css
       
    31 - **Licence**: Double, MIT et GPL.
       
    32 - **Rôle**: Fournit des éléments d’interface utilisateurs, tels que *Sliders*
       
    33 - **Utilisé par**: Widgets, Controller (pour le volume) et Slider (pour le *Slider de progression*)
       
    34 - **Site**: http://jqueryui.com/
       
    35 
       
    36 ### Underscore ###
       
    37 
       
    38 - **Fichier**: underscore-min.js
       
    39 - **Licence**: MIT.
       
    40 - **Rôle**: Fournit des fonctionnalités orientées programmation fonctionnelle pour manipuler tableaux, objets et fonctions.
       
    41 - **Utilisé par**: Code principal et widgets.
       
    42 - **Site**: http://documentcloud.github.com/underscore/
       
    43 
       
    44 ### Popcorn ###
       
    45 
       
    46 - **Fichier**: popcorn-complete.min.js
       
    47 - **Licence**: MIT.
       
    48 - **Rôle**: Fournit une gestion de la lecture de vidéos HTML5.
       
    49 - **Utilisé par**: Players HTML5 et Youtube, ainsi que pour la communication avec le reste du Metadataplayer lorsque l’un de ces players est utilisé.
       
    50 - **Site**: http://popcornjs.org/
       
    51 
       
    52 ### Mustache ###
       
    53 
       
    54 - **Fichier**: mustache.js
       
    55 - **Licence**: MIT.
       
    56 - **Rôle**: Permet de remplir des gabarits (*templates*) HTML.
       
    57 - **Utilisé par**: widgets.
       
    58 - **Site**: http://mustache.github.com/
       
    59 
       
    60 ### Raphael ###
       
    61 
       
    62 - **Fichier**: raphael-min.js
       
    63 - **Licence**: MIT.
       
    64 - **Rôle**: Fournit une interface de dessin vectoriel (utilise SVG ou VML selon les navigateurs)
       
    65 - **Utilisé par**: Widgets et Sparkline
       
    66 - **Site**: http://raphaeljs.com/
       
    67 
       
    68 ### ktbs4js Tracemanager ###
       
    69 
       
    70 - **Fichier**: tracemanager.js
       
    71 - **Licence**: LGPL.
       
    72 - **Rôle**: Permet de s’interfacer avec le système de gestion de traces KTBS, créé par Olivier Aubert (Liris)
       
    73 - **Utilisé par**: TraceWidget
       
    74 - **Site**: http://github.com/oaubert/ktbs4js
       
    75 
       
    76 ## Code principal (core) du Metadataplayer ##
       
    77 
       
    78 Dans la version *release* du metadataplayer, les fichiers Javascript et CSS sont répartis entre le *core* et les *widgets*.
       
    79 
       
    80 *LdtPlayer-core.js* est compilé à partir de plusieurs fichiers Javascript situés (sauf LAB.min.js) dans *src/js*:
       
    81 
       
    82 ### header.js ###
       
    83 
       
    84 Contient les crédits du Metadataplayer, ainsi que les informations sur la licence (*CeCILL-C*)
       
    85 
       
    86 ### LAB.js ###
       
    87 
       
    88 cf. Bibliothèques extérieures.
       
    89 
       
    90 ### init.js ###
       
    91 
       
    92 Définit l’objet *IriSP*, qui sert d’espace de nommage pour tout le Metadataplayer.
       
    93 Contient la classe *IriSP.Metadataplayer*, dont l’instanciation est la porte d’entrée principale du code.
       
    94 
       
    95 ### pop.js ###
       
    96 
       
    97 Contient *IriSP.PopcornReplacement*, c’est à dire une version simplifiée de Popcorn pour communiquer avec des lecteurs vidéos non-supportés par Popcorn.
       
    98 Au moment de la création de cette partie, l’interfaçage Popcorn-jwplayer n’était pas satisfaisant, à remplacer éventuellement par de vrais players/plugins pour Popcorn.
       
    99 
       
   100 ### utils.js ###
       
   101 
       
   102 Contient quelques fonctions utilitaires, telles que *IriSP.loadCss*, qui est l’équivalent pour les fichiers CSS de LAB.js.
       
   103 
       
   104 ### model.js ###
       
   105 
       
   106 Contient les classes de gestion du modèle de données Cinelab, regroupées sous l’espace de nommage *IriSP.Model*.
       
   107 
       
   108 ### widgets.js ###
       
   109 
       
   110 Contient la classe de base *IriSP.Widgets.Widget*, qui fournit les fonctionnalités de base pour les widgets.
       
   111 
       
   112 ### players ###
       
   113 
       
   114 Les fichiers de ce répertoire permettent d’interfacer le *Popcorn Replacement* (cf. *pop.js*) avec des lecteurs vidéo tiers.
       
   115 
       
   116 Existent actuellement:
       
   117 
       
   118 1. **player.jwplayer**, pour communiquer avec JwPlayer, utilisé pour lire des flux RTMP sur la plateforme *Ligne de temps*
       
   119 2. **player.dailymotion**, pour lire des vidéos du *Youtube à la française*
       
   120 3. **player.allocine**, pour le player de allocine.net
       
   121 4. **player.mashup**, pour le player de bout à bout Flash créé par Thibaut Cavalié.
       
   122 
       
   123 ### serializers ###
       
   124 
       
   125 Les Sérialiseurs servent d’interface entre les formats de données utilisés pour les échanges avec les serveurs.
       
   126 
       
   127 Deux sérialiseurs existent à l’heure actuelle:
       
   128 
       
   129 1. **PlatformSerializer**, pour lire les flux JSON fournis par la plateforme *Lignes de Temps*.
       
   130 2. **PlatformAnnotateSerializer**, pour communiquer avec l’API d’ajout d’annotations de la plateforme, dont le format est légèrement différent.
       
   131 
       
   132 ## Widgets ##
       
   133 
       
   134 Les Widgets sont des modules, visibles ou non, permettant de rajouter des fonctionnalités au Metadataplayer.
       
   135 
       
   136 Situés dans le répertoire *src/widgets*, ils contiennent nécessairement un fichier de code *NomDuWidget.js* et, optionnellement un fichier de style *NomDuWidget.css*
       
   137 
       
   138 #### Options courantes ####
       
   139 
       
   140 - Les widgets affichant des annotations possèdent l’option *annotation\_type*, qui peut prendre les valeurs suivantes:
       
   141     - Chaîne de caractères: prend en compte les types d’annotations dont le titre contient la chaîne. Exemple: "chap" permet notamment d’afficher les annotations dans le type d’annotation "Chapitrage"
       
   142     - Tableau de chaînes: pour prendre en compte plusieurs types d’annotations
       
   143     - false: pour prendre en compte toutes les annotations du projet
       
   144 - *requires*, qui permet d’encapsuler un widget dans un autre.
       
   145 
       
   146 Voici la liste des widgets actuellement disponibles, avec leurs options:
       
   147 
       
   148 ### HelloWorld ###
       
   149 
       
   150 - **Rôle**: Widget d’exemple démontrant l’API de création de widgets
       
   151 - **Options**:
       
   152     - **text**: (défaut: "world"), texte à afficher après "Hello, "
       
   153 - Utilise un fichier CSS: oui
       
   154 
       
   155 ### Slider ###
       
   156 
       
   157 - **Rôle**: Barre de progression et *Slider* indiquant la position de la tête de lecture vidéo et permettant de la déplacer.
       
   158 - **Options**:
       
   159    - **minimized\_height**: (défaut: 4), hauteur en pixels du *Slider* en mode minimisé
       
   160    - **maximized\_height**: (défaut: 10), hauteur en pixels du *Slider* en mode maximisé (lorsque la souris passe dessus)
       
   161    - **minimize\_timeout**: (défaut: 1500), durée en millisecondes avant que le *Slider* ne se minimise. À une valeur de 0, le *Slider* ne se minimise plus.
       
   162 - Utilise la bibliothèque: jQuery UI
       
   163 - Utilise un fichier CSS: oui
       
   164 
       
   165 ### Controller ###
       
   166 
       
   167 - **Rôle**: Boutons Lecture/Pause, Rechercher, Ouvrir l’annotateur et contrôle du volume
       
   168 - **Options**:
       
   169     - **disable\_annotate\_btn**: (défaut: false), permet de désactiver le bouton d’ouverture de l’annotateur s’il est à *true*
       
   170     - **disable\_search\_btn**: (défaut: true), permet de désactiver le bouton de recherche d’annotations
       
   171 - Utilise la bibliothèque: jQuery UI
       
   172 - Utilise un fichier CSS: oui
       
   173 
       
   174 ### Arrow ###
       
   175 
       
   176 - **Rôle**: Dessine la flèche indiquant la position de l’annotation
       
   177 - **Options**:
       
   178     - **arrow\_height**: (défaut: 16), hauteur en pixels de la flèche
       
   179     - **arrow\_width**: (défaut: 24), largeur en pixels de la flèche
       
   180     - **base\_height**: (défaut: 0), hauteur entre le bas de la flèche et le bas du widget. Nécessaire si l’on souhaite faire un widget aux bords arrondis.
       
   181     - **base\_curve**: (défaut: 0), rayon de courbure des bords arrondis du widget.
       
   182     - **fill\_url**: URL d’une image de remplissage pour le widget
       
   183     - **fill\_color**: (défaut: "#ffffff" = blanc), couleur de remplissage du widget. Peut-être remplacé par un dégradé sous la forme angle en degrés-couleur de début-couleur de fin, ex: "90-#000-#fff"
       
   184     - **stroke\_color**: (défaut: "#b7b7b7" = gris), couleur de la bordure du widget.
       
   185     - **stroke\_width**: (défaut: 1.5), épaisseur en pixels de la bordure du widget.
       
   186     - **animation\_speed**: (défaut: 20), vitesse de déplacement de la flèche.
       
   187     - **pilot\_widget**: (défaut: "Annotation"), widget commandant la position de la flèche.
       
   188 - Utilise la bibliothèque: Raphael
       
   189 - Utilise un fichier CSS: non
       
   190 
       
   191 ### Annotation ###
       
   192 
       
   193 - **Rôle**: Affiche les informations relatives à une annotation au moment où celle-ci est jouée
       
   194 - **Options**:
       
   195     - **annotation\_type**: (défaut: "chapitrage"), cf. *Options courantes*, plus haut.
       
   196     - **show\_top\_border**: (défaut: false), afficher ou non la bordure en haut du widget (au cas où il est utilisé sans/avec le widget *Arrow*)
       
   197     - **site\_name**: "Lignes de Temps", nom du site à afficher lorsque l’on clique sur les boutons de partage pour réseaux sociaux.
       
   198 - Utilise un fichier CSS: oui
       
   199 
       
   200 ### CreateAnnotation ###
       
   201 
       
   202 - **Rôle**: Permet de créer une annotation en affichant un formulaire
       
   203 - **Options**:
       
   204     - **show\_title\_field**: (défaut: true), affiche un champ permettant de saisir le titre de l’annotation.
       
   205     - **creator\_name**: nom d’utilisateur du créateur de l’annotation.
       
   206     - **creator\_avatar**: URL de l’image de profil du créateur de l’annotation.
       
   207     - **tags**: (défaut: false), liste des tags à afficher, sous la forme d’un tableau d’objets type [ { id: "tag-001", title: "" } ]. Si la valeur est false, affiche les tags les plus utilisés du projet.
       
   208     - **max\_tags**: (défaut: 8), nombre de tags à afficher.
       
   209     - **polemics**: boutons polémiques à afficher, sous la forme d’un tableau d’objets indiquant mot-clé à ajouter, couleur du fond du bouton, couleur du bouton, ex: [ { keyword: "++", background\_color: "#00a000", text\_color: "#ffffff" } ]
       
   210     - **annotation\_type**: (défaut: "Contributions"), cf. *Options courantes*, plus haut.
       
   211     - **api\_serializer**: (défaut: "ldt\_annotate"), sérialiseur à utiliser pour l’envoi des annotations.
       
   212     - **api\_endpoint\_template**: URL de l’API, où {{id\}\} est remplacé par l’ID du projet, ex: "http://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/annotations/{{id}}.json".
       
   213     - **api\_method**: (défaut: "PUT"), méthode HTTP utilisée pour envoyer les annotations. La plateforme *Lignes de temps* utilise PUT, mais cette méthode devrait être réservée pour la création d’une ressource dont l’URL est connue à l’avance.
       
   214     - **close\_widget\_timeout**: (défaut: 0), durée en millisecondes avant que le widget ne soit refermé après l’envoi d’une annotation. Si la valeur est 0, le widget ne se referme pas.
       
   215 - Utilise un fichier CSS: oui
       
   216 
       
   217 ### Polemic ###
       
   218 
       
   219 - **Rôle**: Affiche la *timeline polémique*, c’est à dire les tweets colorés en fonction de la syntaxe polémique. Selon le volume de tweets, deux modes de représentation existent:
       
   220     - Avec un faible volume, les tweets sont des carrés dessinés individuellement.
       
   221     - Avec un volume élevé, les colonnes présentent les volumes agrégés de tweets par couleur.
       
   222 - **Options**:
       
   223     - **element\_width**: (défaut: 5), largeur en pixels d’une tranche de tweets.
       
   224     - **element\_height**: (défaut: 5), hauteur en pixels d’un tweet, en mode faible volume.
       
   225     - **max\_elements**: (défaut: 15), nombre de tweets dans une colonne à partir duquel le mode de représentation change.
       
   226     - **annotation\_type**: (défaut: "tweet"), cf. *Options courantes*, plus haut.
       
   227     - **defaultcolor**: (défaut: "#585858" = gris), couleur des tweets qui n’ont pas d’annotation polémique.
       
   228     - **foundcolor**: (défaut: "#fc00ff" = mauve), couleur d’affichage des tweets correspondant à un résultat de recherche.
       
   229     - **polemics**: couleurs polémiques à afficher, en fonction d’une recherche de termes, type [ { keywords: [ "++" ], color: "#1D973D" } ]
       
   230 - Utilise un fichier CSS: oui
       
   231 
       
   232 ### Tweet ###
       
   233 
       
   234 - **Rôle**: Affiche furtivement le contenu d’un tweet
       
   235 - **Options**:
       
   236     - **hide_timeout**: (défaut: 5000), durée en millisecondes, avant que l’affichage du Tweet ne se referme
       
   237     - **polemics**: identique au paramètre *polemics* du widget *Polemic*
       
   238 
       
   239 ### Sparkline ###
       
   240 
       
   241 - **Rôle**: Affiche une courbe indiquant l’évolution du volume d’annotations au cours du temps.
       
   242 - **Options**:
       
   243     - **annotation\_type**: cf. *Options courantes*, plus haut.
       
   244     - **lineColor**: (défaut: "#7492b4" = gris-bleu), couleur de la courbe
       
   245     - **fillColor**: (défaut: "#aeaeb8" = gris), couleur de la surface sous la courbe
       
   246     - **lineWidth**: (défaut: 2), épaisseur en pixels de la courbe
       
   247     - **slice\_count**: (défaut: 20), nombre des tranches horaires dans lesquelles les annotations sont réparties pour calculer la courbe
       
   248     - **height**: (défaut: 50), hauteur en pixels de la courbe
       
   249     - **margin**: (défaut: 5), marge en pixels au-dessus de la courbe
       
   250 - Utilise la bibliothèque: Raphael
       
   251 - Utilise un fichier CSS: non
       
   252 
       
   253 ### Tagcloud ###
       
   254 
       
   255 - **Rôle**: Affiche un nuage de mots-clés
       
   256 - **Options**:
       
   257     - **include\_titles**: (défaut: true), utiliser le contenu du champ titre des annotations pour calculer le nuage de mots-clés.
       
   258     - **include\_descriptions**: (défaut: true), utiliser le contenu du champ description des annotations pour calculer le nuage.
       
   259     - **include\_tag\_texts**: (défaut: true), utiliser les textes des tags liés aux annotations pour calculer le nuage de mots-clés.
       
   260     - **tag\_count**: (défaut: 30), nombre maximum de mots-clés à afficher.
       
   261     - **stopword\_language**: (défaut: "fr"), code de langue correspondant à une liste de mots vides à exclure du nuage.
       
   262     - **custom\_stopwords**: (défaut: []), liste de mots-vides à exclure du nuage.
       
   263     - **exclude\_pattern**: (défaut: false), expression régulière à exclure du nuage.
       
   264     - **annotation\_type**: (défaut: false), cf. *Options courantes*, plus haut. Concerne les annotations dont les contenus sont utilisés pour calculer le nuage.
       
   265     - **segment\_annotation\_type**: (défaut: false), permet de définir la segmentation du nuage de mots-clés et de calculer un nuage pour chaque segment du type d’annotation choisi. Lorsque ce paramètre est à *false*, un seul nuage est calculé pour toute la durée de la vidéo.
       
   266     - **min\_font\_size**: (défaut: 10), taille de caractères (en pixels) pour le mot le moins fréquent.
       
   267     - **max\_font\_size**: (défaut: 26), taille de caractères (en pixels) pour le mot le plus fréquent.
       
   268 - Utilise un fichier CSS: oui
       
   269 
       
   270 ### AnnotationsList ###
       
   271 
       
   272 - **Rôle**: Affiche une liste d’annotations
       
   273 - **Options**:
       
   274     - **ajax\_url**: (défaut: false), spécifie un gabarit d’URL lorsque les annotations doivent être chargées par une API spécifique (API de segment). Dans l’URL, {{media}} sera remplacé par l’ID du média, {{begin}} par le *timecode* de début en millisecondes, {{end}} par le *timecode* de fin en millisecondes. Si le réglage est à *false*, les annotations affichées seront celles chargées à l’initialisation du Widget. Sur la plateforme *Lignes de Temps*, cette URL est http://ldt.iri.centrepompidou.fr/ldtplatform/api/ldt/segments/{{media}}/{{begin}}/{{end}}?callback=?
       
   275     - **ajax\_granularity**: (défaut: 300000 ms = 5 minutes), spécifie la durée qui doit être chargée par l’API de segment, de part et d’autre du timecode courant (cf. ci-dessus) 
       
   276     - **default\_thumbnail**: imagette à afficher par défaut à côté d’une annotation lorsque l’annotation n’a pas d’imagette.
       
   277     - **foreign\_url**: spécifie un gabarit d’URL lorsque l’annotation n’a pas d’information d’URL et que l’annotation est dans un autre projet. Dans l’URL, {{media}} sera remplacé par l’ID du média, {{project}} par l’ID du projet, {{annotationType}} par l’ID du type d’annotation, {{annotation}} par l’ID de l’annotation. Sur la plateforme *Lignes de temps*, cette URL est http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/{{project}}/{{annotationType}}#id={{annotation}}
       
   278     - **annotation\_type**: (défaut: false), cf. *Options courantes*, plus haut.
       
   279     - **refresh\_interval**: (défaut: 0), intervalle auquel le widget recharge en Ajax la liste des annotations (que l’on utilise l’API de segment ou non)
       
   280     - **limit\_count**: (défaut: 10), nombre maximum d’annotations à afficher simultanément.
       
   281     - **newest\_first**: (défaut: false), *true*: classe les annotations par ordre antéchronologique de création, *false*: classe les annotations par ordre chronologique de leur timecode vidéo.
       
   282 - Utilise un fichier CSS: oui
       
   283 
       
   284 ### Media ###
       
   285 
       
   286 - **Rôle**: Affiche le média en cours, ainsi que la liste des autres médias du projet. Utilisé principalement pour les mashups
       
   287 - **Options**:
       
   288     - **default\_thumbnail**: imagette à afficher par défaut à côté d’un média lorsque le média n’a pas d’imagette.
       
   289     - **media\_url\_template**: spécifie un gabarit d’URL lorsque le média n’a pas d’information d’URL, par exemple: "http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/front/player/{{media}}/"
       
   290 - Utilise un fichier CSS: oui
       
   291 
       
   292 ### Tooltip ###
       
   293 
       
   294 - **Rôle**: Affiche une infobulle, utilisé uniquement comme *widget inclus* dans d’autres widgets.
       
   295 - Pas d’options
       
   296 - Utilise un fichier CSS: oui
       
   297 
       
   298 ### Trace ###
       
   299 
       
   300 - **Rôle**: Envoi des traces au serveur KTBS
       
   301 - **Options**:
       
   302     - **js\_console**: (défaut: false), écriture ou non des traces dans la console du navigateur.
       
   303     - **url**: (défaut: "http://traces.advene.org:5000/"), URL du serveur de traces
       
   304     - **requestmode**: (défaut: "GET"), méthode HTTP utilisée pour l’envoi des traces (seul *"GET"* permet le *cross-domain*).
       
   305     - **syncmode**: (défaut: "sync"), envois groupés (mode *"delayed"*) ou non (*"sync"*) des traces
       
   306 - Utilise la bibliothèque: ktbs4js tracemanager
       
   307 - Utilise un fichier CSS: non
       
   308 
       
   309 ### Mediafragment ###
       
   310 
       
   311 - **Rôle**: Gère les URLs à la norme *Mediafragment*: change la position de la tête de lecture en fonction de l’URL et inversement.
       
   312 - Une URL finissant par #id=*id de l’annotation* pointe sur une annotation, par #t=*temps en secondes* vers un timecode de la vidéo.
       
   313 - Pas d’options
       
   314 - Utilise un fichier CSS: non