diff --git a/application/modules/admin/controllers/TemplateController.php b/application/modules/admin/controllers/TemplateController.php
index a3df6a80fb8e4398ef6dfd619d9713901400a445..b00a10659281583f431790954c4b2516f96204f5 100644
--- a/application/modules/admin/controllers/TemplateController.php
+++ b/application/modules/admin/controllers/TemplateController.php
@@ -77,4 +77,25 @@ class Admin_TemplateController extends ZendAfi_Controller_Action {
     $this->_helper->notify($this->_('Thème %s mis à jour', $template->getId()));
     return $this->_redirectClose($this->_getReferer());
   }
+
+
+  public function applyAction() {
+    if(!$this->view->template = (new Class_Template_Loader)->find($this->_getParam('template'))) {
+      $this->_helper->notify($this->_('Une erreur c\'est produite. Vous ne pouvez pas tester le template'));
+      return $this->_redirectToIndex();
+    }
+
+    $this->view->titre = $this->_('Appliquer le thème %s à un profil',
+                                  $this->view->template->getTitle());
+
+    if(!$profile = Class_Profil::find($this->_getParam('on')))
+      return;
+
+    if(!$profile_id = $this->view->template->applyOn($profile)) {
+      $this->_helper->notify($this->_('Une erreur c\'est produite.'));
+      return $this->_redirectToIndex();
+    }
+
+    $this->_redirect('/opac/index/index/id_profil/' . $profile_id);
+  }
 }
\ No newline at end of file
diff --git a/application/modules/admin/views/scripts/template/apply.phtml b/application/modules/admin/views/scripts/template/apply.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..4ceed4cc1333ee6fd340396d309eab691c909f82
--- /dev/null
+++ b/application/modules/admin/views/scripts/template/apply.phtml
@@ -0,0 +1,32 @@
+<?php
+$description = (new Class_TableDescription('profiles'))
+  ->addColumn($this->_('ID'), function($profile)
+              {
+                return $profile->getId();
+              })
+  ->addColumn($this->_('Profil'), function($profile)
+              {
+                return $profile->getLibelle();
+              })
+
+    ->addColumn($this->_('Thème courant'), function($profile)
+              {
+                return $profile->getTemplate();
+              })
+
+  ->addRowAction(function($profile) { return $this->renderModelActions($profile,
+                                                                       [
+                                                                        ['url' => ['module' => 'admin',
+                                                                                   'controller' => 'template',
+                                                                                   'action' => 'apply',
+                                                                                   'template' => $this->template->getId(),
+                                                                                   'on' => '%s',
+                                                                                   'render' => ''],
+                                                                         'id' => $profile->getId(),
+                                                                         'icon' => 'validate',
+                                                                         'anchorOptions' => ['target' => '_blank'],
+                                                                         'label' => $this->_('Appliquer le thème sur le profil %s',
+                                                                                             $profile->getLibelle())]]);
+                                     });
+
+echo $this->renderTable($description, Class_Profil::findTopProfils());
diff --git a/library/Class/Article.php b/library/Class/Article.php
index 33ac09b17082c3f8070a6510d598363334ef0df8..c2fabaa2294bc40ce8bf87c295c7f87ce3962423 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -119,6 +119,9 @@ class ArticleLoader extends Storm_Model_Loader {
    * @return ArticleLoader
    */
   protected function _whereEventDateIn($event_date) {
+    if (!$this->_select)
+      return $this;
+
     if ($this->_events_only) {
       $this->_select->where('EVENTS_DEBUT IS NOT NULL');
       $this->_select->where('EVENTS_FIN IS NOT NULL');
@@ -141,6 +144,9 @@ class ArticleLoader extends Storm_Model_Loader {
    * @return ArticleLoader
    */
   protected function _whereEventStartAfter($event_date) {
+    if (!$this->_select)
+      return $this;
+
     if (!$event_date || (7 > strlen($event_date)))
       return $this;
 
@@ -155,6 +161,9 @@ class ArticleLoader extends Storm_Model_Loader {
 
 
   protected function _whereEventEndAfter($event_date) {
+    if (!$this->_select)
+      return $this;
+
     if (!$event_date || (10 > strlen($event_date)))
       return $this;
 
diff --git a/library/Class/Template.php b/library/Class/Template.php
index 56dad7c2dd62ecff33800e3807f494510fc3c665..88b36d432540bc0ca6089a3f6069a41a70ebc8aa 100644
--- a/library/Class/Template.php
+++ b/library/Class/Template.php
@@ -100,6 +100,11 @@ class Class_Template {
   }
 
 
+  public function getApplyUrl() {
+    return Class_Url::relative(sprintf('/admin/template/apply/template/%s', $this->getId()));
+  }
+
+
   public function getEditUrl() {
     return Class_Url::relative(sprintf('/admin/template/edit/template/%s', $this->getId()));
   }
@@ -136,6 +141,21 @@ class Class_Template {
   }
 
 
+  public function applyOn($profile) {
+    if(!$profile)
+      return null;
+
+    $profile
+      ->setTemplate($this->getId())
+      ->save();
+
+    Class_Profil::setCurrentProfil($profile);
+    $profile = $this->_patchProfile($profile);
+    $profile->save();
+    return $profile->getId();
+  }
+
+
   public function createFrom($profile) {
     if(!$profile)
       return null;
diff --git a/library/Class/Template/Loader.php b/library/Class/Template/Loader.php
index 4248f4d477a2fefe8d9cefca754da4b8e116c34b..ba14b3aecc30f5070693f906d6fa87a17036087f 100644
--- a/library/Class/Template/Loader.php
+++ b/library/Class/Template/Loader.php
@@ -27,7 +27,9 @@ class Class_Template_Loader {
   public function getTemplates() {
     return [new Historic_Template,
             new Intonation_Template,
-            new MyBibApp_Template];
+            new MyBibApp_Template,
+            new TerreDuMilieu_Template
+    ];
   }
 
 
diff --git a/library/ZendAfi/Controller/Plugin/Manager/Template.php b/library/ZendAfi/Controller/Plugin/Manager/Template.php
index b0c96f359c146e71e680c95c980f24539b1426e9..8613f38177c3b8d3b6f7624e031d65e7fec1a19e 100644
--- a/library/ZendAfi/Controller/Plugin/Manager/Template.php
+++ b/library/ZendAfi/Controller/Plugin/Manager/Template.php
@@ -34,14 +34,19 @@ class ZendAfi_Controller_Plugin_Manager_Template extends ZendAfi_Controller_Plug
              'anchorOptions' => ['data-popup' => true]],
 
             ['url' => $model->getResetUrl(),
-             'icon' => 'reload',
+             'icon' => 'cancel',
              'label' => $this->_('Réinitialiser le thème %s', $model->getTitle()),
              'anchorOptions' => $this->_confirm($this->_('Etes-vous sur de vouloir réinitialiser le thème %s ?', $model->getTitle()))],
 
             ['url' => $model->getUpdateUrl(),
              'icon' => 'batch',
              'label' => $this->_('Mettre à jour le thème %s', $model->getTitle()),
-             'anchorOptions' => $this->_confirm($this->_('Etes-vous sur de vouloir mettre à jour le thème %s ?', $model->getTitle()))]
+             'anchorOptions' => $this->_confirm($this->_('Etes-vous sur de vouloir mettre à jour le thème %s ?', $model->getTitle()))],
+
+            ['url' => $model->getApplyUrl(),
+             'icon' => 'copy_profil',
+             'label' => $this->_('Appliquer le thème %s sur le profil souhaité', $model->getTitle()),
+             'anchorOptions' => ['data-popup' => true]]
     ];
   }
 
diff --git a/library/ZendAfi/View/Helper/Admin/FrontNavEntries.php b/library/ZendAfi/View/Helper/Admin/FrontNavEntries.php
index 5eef112ffce0f5cc705f4936806d1859092304f6..a8799beac56b32d86ceb3badc6c4f9df1c2bb430 100644
--- a/library/ZendAfi/View/Helper/Admin/FrontNavEntries.php
+++ b/library/ZendAfi/View/Helper/Admin/FrontNavEntries.php
@@ -102,50 +102,9 @@ class ZendAfi_View_Helper_Admin_FrontNavEntries extends ZendAfi_View_Helper_Base
 
   protected function _adminActions() {
     $actions = [];
-    if ($this->_isAllowed('profil', 'accueil') && Class_Users::isCurrentUserAllowedToEditProfile(Class_Profil::getCurrentProfil())) {
-      $actions[] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
-                                                            'controller' => 'profil',
-                                                            'action' => 'edit',
-                                                            'id_profil' => Class_Profil::getCurrentProfil()->getId()],
-                                                           null,
-                                                           true),
-                                          $this->_('Configuration du profil') .
-                                          $this->view->tagImg(Class_Admin_Skin::current()
-                                                              ->getIconUrl('icons',
-                                                                           'profiles')),
-                                          [
-                                           'class' => 'menu_admin_front_anchor',
-                                           'title' => $this->_('Configurer le profil ' . Class_Profil::getCurrentProfil()->getLibelle()),
-                                           'data-popup' => 'true']);
-
-      $actions[] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
-                                                            'controller' => 'profil',
-                                                            'action' => 'accueil',
-                                                            'id_profil' => Class_Profil::getCurrentProfil()->getId()],
-                                                           null,
-                                                           true),
-                                          $this->_('Configuration de la page') .
-                                          $this->view->tagImg(Class_Admin_Skin::current()
-                                                              ->getIconUrl('actions',
-                                                                           'edit')),
-                                          ['class' => 'menu_admin_front_anchor',
-                                           'title' => $this->_('Configurer la page ' . Class_Profil::getCurrentProfil()->getLibelle()),
-                                           'data-popup' => 'true']);
-
-      $actions[] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
-                                                            'controller' => 'widget',
-                                                            'action' => 'add-from-template',
-                                                            'id_profil' => Class_Profil::getCurrentProfil()->getId()],
-                                                           null,
-                                                           true),
-                                          $this->_('Ajouter une boîte') .
-                                          $this->view->tagImg(Class_Admin_Skin::current()
-                                                              ->getIconUrl('actions',
-                                                                           'add')),
-                                          ['class' => 'menu_admin_front_anchor',
-                                           'title' => $this->_('Ajouter une boîte à cette page'),
-                                           'data-popup' => 'true']);
-    }
+
+    if ($this->_isAllowed('profil', 'accueil') && Class_Users::isCurrentUserAllowedToEditProfile(Class_Profil::getCurrentProfil()))
+      $actions = $this->_profileActions($actions);
 
     $actions []= $this->view->tagAnchor(Class_Url::absolute('/admin/index/clearcache/'),
                                         $this->_('Vider le cache') .
@@ -179,6 +138,69 @@ class ZendAfi_View_Helper_Admin_FrontNavEntries extends ZendAfi_View_Helper_Base
   }
 
 
+  protected function _profileActions($actions) {
+    if (!Class_Template::current()->isLegacy())
+      $actions [] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
+                                                             'controller' => 'template',
+                                                             'action' => 'edit',
+                                                             'template' => Class_Template::current()->getId()],
+                                                            null,
+                                                            true),
+                                           $this->_('Configuration du template') .
+                                           $this->view->tagImg(Class_Admin_Skin::current()
+                                                               ->getIconUrl('icons',
+                                                                            'image_cache')),
+                                           [
+                                            'class' => 'menu_admin_front_anchor',
+                                            'title' => $this->_('Configurer le template ' . Class_Template::current()->getTitle()),
+                                            'data-popup' => 'true']);
+
+    $actions [] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
+                                                          'controller' => 'profil',
+                                                          'action' => 'edit',
+                                                          'id_profil' => Class_Profil::getCurrentProfil()->getId()],
+                                                         null,
+                                                         true),
+                                        $this->_('Configuration du profil') .
+                                        $this->view->tagImg(Class_Admin_Skin::current()
+                                                            ->getIconUrl('icons',
+                                                                         'profiles')),
+                                        [
+                                         'class' => 'menu_admin_front_anchor',
+                                         'title' => $this->_('Configurer le profil ' . Class_Profil::getCurrentProfil()->getLibelle()),
+                                         'data-popup' => 'true']);
+
+    $actions [] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
+                                                          'controller' => 'profil',
+                                                          'action' => 'accueil',
+                                                          'id_profil' => Class_Profil::getCurrentProfil()->getId()],
+                                                         null,
+                                                         true),
+                                        $this->_('Configuration de la page') .
+                                        $this->view->tagImg(Class_Admin_Skin::current()
+                                                            ->getIconUrl('actions',
+                                                                         'edit')),
+                                        ['class' => 'menu_admin_front_anchor',
+                                         'title' => $this->_('Configurer la page ' . Class_Profil::getCurrentProfil()->getLibelle()),
+                                         'data-popup' => 'true']);
+
+    $actions [] = $this->view->tagAnchor($this->view->url(['module' => 'admin',
+                                                          'controller' => 'widget',
+                                                          'action' => 'add-from-template',
+                                                          'id_profil' => Class_Profil::getCurrentProfil()->getId()],
+                                                         null,
+                                                         true),
+                                        $this->_('Ajouter une boîte') .
+                                        $this->view->tagImg(Class_Admin_Skin::current()
+                                                            ->getIconUrl('actions',
+                                                                         'add')),
+                                        ['class' => 'menu_admin_front_anchor',
+                                         'title' => $this->_('Ajouter une boîte à cette page'),
+                                         'data-popup' => 'true']);
+    return $actions;
+  }
+
+
   protected function _toggleAnchor($label, $key, $js_on, $js_off) {
     $toggleFy = function($function_name, $img) use ($label, $key) {
       return $this->_tag('a',
diff --git a/library/ZendAfi/View/Helper/Template/Base.php b/library/ZendAfi/View/Helper/Template/Base.php
index c83b1df74d557da3e9a768dc9c632a57a30cb631..19c019e87cb782267ffb115fad8b652f1dd7eabe 100644
--- a/library/ZendAfi/View/Helper/Template/Base.php
+++ b/library/ZendAfi/View/Helper/Template/Base.php
@@ -54,7 +54,7 @@ class ZendAfi_View_Helper_Template_Base extends ZendAfi_View_Helper_BaseHelper {
 
       return $this->_tag('div',
                          implode($html) . $this->_getAdminTools(),
-                         ['id' => 'boite_' . $this->_widget->getId(),
+                         ['id' => 'boite_' . $this->_widget->getIdForHtml(),
                           'class' => sprintf('boite %s %s',
                                              $this->_getClasses(),
                                              $this->_widget->wrapperClasses())]);
diff --git a/library/templates/Intonation/Library/Widget/AdminTools/Form.php b/library/templates/Intonation/Library/Widget/AdminTools/Form.php
index a77f4e46214cebdb73f2a6c8c25410f964727c7c..e8f1c2bf28533bca1609f41ee8e58dfca3a704d9 100644
--- a/library/templates/Intonation/Library/Widget/AdminTools/Form.php
+++ b/library/templates/Intonation/Library/Widget/AdminTools/Form.php
@@ -26,7 +26,7 @@ class Intonation_Library_Widget_AdminTools_Form extends ZendAfi_Form_Configurati
     $this
       ->addElement('radio',
                    'display_mode',
-                   ['label' => $this->_('Disposition des outils d\administration'),
+                   ['label' => $this->_('Disposition des outils d\'administration'),
                     'multiOptions' => [Intonation_Library_Widget_AdminTools_Definition::TOGGLE => $this->_('Voir un bouton à bascule'),
                                        Intonation_Library_Widget_AdminTools_Definition::FULL => $this->_('Voir tous les boutons')]])
 
diff --git a/library/templates/Intonation/Library/Widget/AdminTools/View.php b/library/templates/Intonation/Library/Widget/AdminTools/View.php
index 8d34e7cb73b3bbb6ffc7da27c76190e6521ea264..b77071108f887df481bed944149d7ad3926dd42c 100644
--- a/library/templates/Intonation/Library/Widget/AdminTools/View.php
+++ b/library/templates/Intonation/Library/Widget/AdminTools/View.php
@@ -61,7 +61,10 @@ class Intonation_Library_Widget_Admintools_View extends Zendafi_View_Helper_Accu
 
     return $this->view->tag('div',
                             $this->view->tag('button',
-                                             $this->_tag('i','', ['class' => 'fas fa-user-cog']),
+                                             $this->_tag('i','', ['class' => 'fas fa-user-cog'])
+                                             . $this->_tag('span',
+                                                           $this->_('Administration'),
+                                                           ['class' => 'button_text d-inline']),
                                              ['id' => $id,
                                               'data-toggle' => 'dropdown',
                                               'aria-haspopup' => 'true',
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Agenda/View.php b/library/templates/Intonation/Library/Widget/Carousel/Agenda/View.php
index 19bc91d969678b58ad08c558b035b42dc1b76101..5cf50c5be06c5b9ce8c75d5c3fde227c849162e2 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Agenda/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Agenda/View.php
@@ -55,7 +55,7 @@ class Intonation_Library_Widget_Carousel_Agenda_View extends Intonation_Library_
 
 
   protected function _getLinkToAllTitle() {
-    return '';
+    return $this->_('Voir tous les événements de la boite %s dans une liste', $this->titre);
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Author/View.php b/library/templates/Intonation/Library/Widget/Carousel/Author/View.php
index c0311c5d6717bfc5907796c887f5bde475a5a04b..13c17fa955c648286bfaaba9465eb824568e213b 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Author/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Author/View.php
@@ -39,7 +39,7 @@ class Intonation_Library_Widget_Carousel_Author_View extends Intonation_Library_
 
 
   protected function _getLinkToAllTitle() {
-    return '';
+    return $this->_('Voir tous les auteurs de la boite %s dans une liste', $this->titre);
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php b/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php
index 3947c53245389c2fea4c22b0aef0bf96373e4dc4..ef9f3b658a8a0242b2a5b3dbe031ce5d2a3b0b2b 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Domain/View.php
@@ -46,7 +46,7 @@ class Intonation_Library_Widget_Carousel_Domain_View extends Intonation_Library_
 
 
   protected function _getLinkToAllTitle() {
-    return '';
+    return $this->_('Voir tous les domaines de la boite %s dans une liste', $this->titre);
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Library/View.php b/library/templates/Intonation/Library/Widget/Carousel/Library/View.php
index b267c8ab4a98a210f2483115526aacfb9bf645ba..f753cdf686e0021676aeabc7f9789fb256ee8912 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Library/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Library/View.php
@@ -52,7 +52,7 @@ class Intonation_Library_Widget_Carousel_Library_View extends Intonation_Library
 
 
   protected function _getLinkToAllTitle() {
-    return '';
+    return $this->_('Voir toutes les bibliothèques de la boite %s dans une liste', $this->titre);
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Carousel/Newsletter/View.php b/library/templates/Intonation/Library/Widget/Carousel/Newsletter/View.php
index 5bd69ef1fb77f87738164c136db087570b86a858..3edfd97f1f7b81345a0c17c16ff89770035715ff 100644
--- a/library/templates/Intonation/Library/Widget/Carousel/Newsletter/View.php
+++ b/library/templates/Intonation/Library/Widget/Carousel/Newsletter/View.php
@@ -40,7 +40,7 @@ class Intonation_Library_Widget_Carousel_Newsletter_View extends Intonation_Libr
 
 
   protected function _getLinkToAllTitle() {
-    return '';
+    return $this->_('Voir toutes les lettres d\'informations de la boite %s dans une liste', $this->titre);
   }
 
 
diff --git a/library/templates/Intonation/Library/Widget/Nav/View.php b/library/templates/Intonation/Library/Widget/Nav/View.php
index 991a1b491b5fab18166b0ada0c7a4da15d032a9d..69e6ef7c35667742ca97ef45dfb8442e13a16dd4 100644
--- a/library/templates/Intonation/Library/Widget/Nav/View.php
+++ b/library/templates/Intonation/Library/Widget/Nav/View.php
@@ -108,6 +108,9 @@ class Intonation_Library_Widget_Nav_View extends Zendafi_View_Helper_Accueil_Bas
 
 
   protected function _renderPicto($params) {
+    if (!isset($params['picto']))
+      return '';
+
     if (!$src = $params['picto'])
       return '';
 
@@ -169,24 +172,35 @@ class Intonation_Library_Widget_Nav_View extends Zendafi_View_Helper_Accueil_Bas
        ->load())
       return '';
 
-    $label = $this->_renderPicto($child->getLocalSettings()) . $child->getLabel();
-    $html = $child->isMenu()
-      ? $this->view->tagAnchor('#',
-                               $label
-                               . $this->_tag('span', '', ['class' => 'caret']),
-                               ['class' => 'nav-link dropdown-toggle',
-                                'title' => $this->_('Afficher ou masquer le menu "%s"', $child->getLabel()),
-                                'data-toggle' => 'dropdown',
-                                'role' => 'button',
-                                'aria-haspopup' => 'true',
-                                'aria-expanded' => 'false'])
-
-      : $this->view->tagAnchor($child->getLink(),
-                               $label,
-                               ['title' => $this->_('Accéder à "%s"', $child->getLabel()),
-                                'class' => 'nav-link']);
+    $label = $this->_renderPicto($child->getLocalSettings()) . $this->_tag('div',
+                                                                           $child->getLabel(),
+                                                                           ['class' => 'button_text d-sm-inline text-left']);
+
+    $html = $this->_getHtml($child, $label);
 
     return $html
       . $this->view->tagEditMenu($id, $this->_profile_id, $parent);
   }
+
+
+  protected function _getHtml($instance, $label) {
+    if ($instance->isMenu())
+      return $this->view->tagAnchor('#',
+                                    $label
+                                    . $this->_tag('span', '', ['class' => 'caret']),
+                                    ['class' => 'nav-link dropdown-toggle',
+                                     'title' => $this->_('Afficher ou masquer le menu "%s"', $instance->getLabel()),
+                                     'data-toggle' => 'dropdown',
+                                     'role' => 'button',
+                                     'aria-haspopup' => 'true',
+                                     'aria-expanded' => 'false']);
+
+    if ($instance->isWidget())
+      return Class_Template::current()->renderWidget($instance, $this->view);
+
+    return $this->view->tagAnchor($instance->getLink(),
+                                  $label,
+                                  ['title' => $this->_('Accéder à "%s"', $instance->getLabel()),
+                                   'class' => 'nav-link']);
+  }
 }
diff --git a/library/templates/Intonation/Library/Widget/Search/View.php b/library/templates/Intonation/Library/Widget/Search/View.php
index d3b85c9d7e0f9b1593bce0310e4d0e1debab9c01..da4f96626ecee1791d4eecb76c7cc30e6de15f37 100644
--- a/library/templates/Intonation/Library/Widget/Search/View.php
+++ b/library/templates/Intonation/Library/Widget/Search/View.php
@@ -120,7 +120,7 @@ abstract class IntonationSearchRenderAbstract {
 
     $form
       ->addElement('hidden',
-                   'tri',
+                   uniqid() . 'tri',
                    ['value' => $this->_getOrder()])
 
       ->addElement('search',
@@ -152,16 +152,30 @@ abstract class IntonationSearchRenderAbstract {
                                                 'onclick' => 'var form = $(this).closest(\'form\'); form.attr(\'action\', \'' . $this->_view->url(['controller' => 'recherche',                                                                                          'action' => 'simple'], null, true) .  '\'); form.find(\'.expressionRecherche\').attr(\'value\', \'\'); $(this).hide(); form.find(\'.criteres_recherche\').hide();']);
                     }])
 
-      ->addElement('submit',
-                   'search_submit',
-                   ['label' => $this->_settings->getSearchButton(),
+      ->addElement('button',
+                   uniqid() . 'search_submit',
+                   ['content' => $this->_renderPicto($this->_settings->getSearchButton()),
+                    'title' => $this>_('Rechercher'),
+                    'type' => 'submit',
+                    'escape' => false,
                     'onclick' => '$(this).parents(\'form\').submit()',
-                    'order' => 10]);
+                    'order' => 10])
+
+      ->addElement('submit',
+                   uniqid() . 'submit',
+                   ['style' => 'display: none !important;']);
 
     return $form;
   }
 
 
+  protected function _renderPicto($text) {
+    return false === strpos($text, ' ')
+      ? $text
+      : Class_Template::current()->getIco($this->_view, $text);
+  }
+
+
   protected function _getForm() {
     $form = $this->_getMainForm();
     $elements = $this->_getOptionalElements();
diff --git a/library/templates/Intonation/Library/WidgetTemplates.php b/library/templates/Intonation/Library/WidgetTemplates.php
index bdffc943c62768075533b682a75182384fb03387..d61834997539321f291184850ff96d16814329fb 100644
--- a/library/templates/Intonation/Library/WidgetTemplates.php
+++ b/library/templates/Intonation/Library/WidgetTemplates.php
@@ -138,7 +138,7 @@ class Intonation_Library_WidgetTemplates {
 
       unset($layout['title']);
       $templates [] = ['title' => $title,
-                       'icon' => Class_Template::current()->getId() . '_' . $type  . '.jpg',
+                       'icon' => 'TEMPLATE_' . $type  . '.jpg',
                        'type' => $type,
                        'configuration' => array_merge($layout,
                                                       ['boite' => $boite])];
@@ -177,7 +177,7 @@ class Intonation_Library_WidgetTemplates {
     }
 
     $templates [] = ['title' => $title,
-                     'icon' => Class_Template::current()->getId() . '_' . $type . '_' . $layout . '.jpg',
+                     'icon' => 'TEMPLATE_' . $type . '_' . $layout . '.jpg',
                      'type' => $type,
                      'configuration' => ['rendering' => $rendering,
                                          'layout' => $layout,
diff --git a/library/templates/Intonation/System/Abstract.php b/library/templates/Intonation/System/Abstract.php
index e3c4bbcc37349efe3fe8b75ee867db722f1172a6..6c7d7aa2407b411a1c264d54e039673cd99e40d0 100644
--- a/library/templates/Intonation/System/Abstract.php
+++ b/library/templates/Intonation/System/Abstract.php
@@ -47,6 +47,14 @@ abstract class Intonation_System_Abstract {
   }
 
 
+  public function getIdForHtml() {
+    if (!$parent = $this->getParent())
+      return $this->getId();
+
+    return $parent . '-' . $this->getId();
+  }
+
+
   protected function _getViewHelper($view) {
     $base = new ZendAfi_View_Helper_Template_Base($this, $view);
 
diff --git a/library/templates/TerreDuMilieu/Assets/css/terredumilieu.css b/library/templates/TerreDuMilieu/Assets/css/terredumilieu.css
new file mode 100644
index 0000000000000000000000000000000000000000..c49261620c955e81d05d3ddc1b3c8db6c404d701
--- /dev/null
+++ b/library/templates/TerreDuMilieu/Assets/css/terredumilieu.css
@@ -0,0 +1,338 @@
+:root {
+    --tdm-search-color: #e83a3b;
+    --tdm-link-color: #f1cb00;
+    --tdm-button-text-color: #000;
+    --tdm-footer-link-color: #f9f9f9;
+
+    --tdm-main-background: #f9f9f9;
+    --main-nav-button-background-color: #3dae9a;
+    --first-division-background-color: #1a6362;
+    --main-division-background-color: #f9f9f9;
+    --third-division-background-color: #f2f2f2;
+    --footer-background-color: #3dae9a;
+    --footer-widget-background-color: #000;
+}
+
+header {
+    background: url(../images/header.jpg);
+    background-position: top 3em center;
+    background-repeat: no-repeat;
+    background-size: cover;
+}
+
+.tdm_search_widget {
+    padding-bottom: 5em;
+}
+
+.tdm_search_widget .form-control,
+.tdm_search_widget button {
+    background-color: rgba(255, 255, 255, 0.90);
+    font-size: 1.2em;
+    color: var(--tdm-search-color);
+    vertical-align: middle;
+    margin: 0;
+}
+
+.tdm_search_widget .form-control {
+    padding:0;
+}
+
+.tdm_search_widget button {
+    height: 2em;
+    padding: 0 1em;
+    border-left: 2px dotted var(--tdm-search-color) !important;
+}
+
+.tdm_search_widget .form-row > .col {
+    margin: 0;
+    padding: 0;
+}
+
+.tdm_search_widget ::placeholder,
+.tdm_search_widget .expressionRecherche {
+    color: var(--tdm-search-color);
+    padding-left: 5px;
+    width: 100%;
+}
+
+.tdm_social_network_widget .button_text {
+    display: none !important;
+}
+
+.tdm_social_network_widget .nav-link:hover {
+    color: black !important;
+}
+
+.tdm_social_network_widget .navbar {
+    padding: 0;
+}
+
+.widget.login ul {
+    margin: 0;
+}
+
+.widget.login {
+    padding-top: 0.5em;
+    padding-bottom: 0.5em
+}
+
+.tdm_main_nav_widget {
+    background: url('../images/nav.png');
+    background-position: top center;
+    background-repeat: no-repeat;
+    padding: 7em 0 0 0 !important;
+}
+
+
+.tdm_main_nav_widget .nav-link {
+    background-color: rgba(0,0,0,0.8);
+    padding: 0.5em 1em !important;
+    color: wheat !important;
+}
+
+.tdm_main_nav_widget .nav-item {
+    margin-right: 5px;
+    display: inline-table;
+}
+
+.tdm_main_nav_widget .nav-item:last-child {
+    margin: 0;
+}
+
+.tdm_main_nav_widget .nav-link:last-child {
+    background-color: var(--main-nav-button-background-color) !important;
+}
+
+.tdm_main_nav_widget .nav-link:hover {
+    opacity: 0.7;
+}
+
+aside[data-division='1'] {
+    background-color: var(--first-division-background-color) !important;
+}
+
+body {
+    background-color: var(--main-division-background-color);
+}
+
+aside[data-division='3'] {
+    background-color: var(--third-division-background-color);
+}
+
+footer {
+    background-color: var(--footer-background-color);
+}
+
+footer .widget {
+    background-color: var(--footer-widget-background-color);
+}
+
+footer .widget .nav-item a,
+footer .widget .nav-item a:hover,
+footer .widget btn,
+footer .widget btn:hover,
+footer .badge {
+    color: var(--tdm-footer-link-color) !important;
+    background: none;
+}
+
+footer .widget a,
+footer .widget a:hover {
+    color: var(--tdm-link-color) !important;
+    background: none;
+}
+
+footer .widget a.btn[href*='render-all'] {
+    background: var(--main-division-background-color);
+    color: var(--tdm-button-text-color) !important;
+}
+
+.widget > .card-footer,
+.card-footer {
+    background: none;
+}
+
+h1,
+h2,
+h3,
+.card-title,
+.card-header {
+    color: var(--tdm-link-color) !important;
+    background: none;
+    font-weight: bold;
+    font-size: 1em;
+    text-transform: uppercase;
+}
+
+h1.content_title,
+.widget-header {
+    font-size: 1.5em;
+    padding-left: 0;
+    margin-left: 0;
+}
+
+a,
+a.text-primary,
+a.text-secondary,
+.tdm_widget .btn,
+.tdm_widget .text-primary,
+.tdm_widget .text-secondary {
+    color: var(--tdm-button-text-color) !important;
+}
+
+.tdm_widget .btn {
+    background-color: var(--tdm-link-color) !important;
+}
+
+a.text-primary:hover,
+a.text-secondary:hover,
+.btn:hover,
+a:hover {
+    color: var(--tdm-button-text-color) !important;
+}
+
+a[href*='render-all'] {
+    border-radius: 100px !important;
+}
+
+a[href*='render-all'] i,
+a[href*='render-all'] div {
+    display: none !important;
+}
+
+a[href*='render-all']:after {
+    content: '+';
+    font-size: 2em;
+    width: 35px;
+    display: inline-block;
+}
+
+.widget-footer {
+    position: absolute;
+    bottom: 0;
+    right: 0;
+}
+
+.btn:hover,
+a:hover {
+    opacity: 0.7;
+}
+
+.border-primary {
+    border-color: var(--tdm-link-color) !important;
+}
+
+.border-bottom {
+    border-bottom-style: dotted !important;
+    border-bottom-width: 2px !important;
+}
+
+.border-left {
+    border-left-style: dotted !important;
+    border-left-width: 2px !important;
+}
+
+.widget.admin_tools .dropdown-menu,
+.widget.admin_tools .dropdown-menu *:not(img) {
+    background: var(--footer-background-color) !important;
+}
+
+.widget.admin_tools a,
+.widget.admin_tools a:hover {
+    color: var(--tdm-button-text-color) !important;
+}
+
+nav .nav-link {
+    display: inline;
+}
+
+.widget.login,
+.widget.login .dropdown.show {
+    position: unset !important;
+}
+
+.widget.login .dropdown-menu.show {
+    width: 100%;
+    text-align: center;
+    background-color: var(--tdm-main-background);
+    transform: translate3d(0px, 45px, 0px) !important;
+}
+
+.widget.login .dropdown-menu.show > * {
+    width: 300px;
+    display: inline-block;
+}
+
+.widget.login .dropdown-menu.show * {
+    text-align: center;
+    background-color: var(--tdm-main-background);
+}
+
+.widget.login .dropdown-menu.show a:hover,
+.widget.login .dropdown-menu.show a,
+.widget.login .dropdown-menu.show a * {
+    color: var(--tdm-main-background);
+    background-color: var(--tdm-button-text-color);
+    display:inline !important;
+}
+
+header {
+    background-color: var(--tdm-main-background);
+}
+
+.widget.login #login:hover, 
+.widget.login #login {
+    color: var(--tdm-link-color);
+    background-color: var(--footer-widget-background-color);
+}
+
+.tdm_flying_widget .navbar-collapse.collapsing,
+.tdm_flying_widget .navbar-collapse.collapse,
+.tdm_flying_widget a {
+    color: var(--tdm-main-background) !important;
+    background-color: var(--footer-widget-background-color);
+    text-transform: uppercase;
+}
+
+.tdm_flying_widget .navbar-collapse.collapsing,
+.tdm_flying_widget .navbar-collapse.collapse {
+    padding: 2em 0.5em;
+    height: 3000px;
+    overflow:visible;
+}
+
+.tdm_flying_widget .navbar.navbar-collapse {
+    display: block;
+    padding: 0;
+}
+
+.tdm_flying_widget .navbar-header {
+    display: block !important;
+    text-align: right !important;
+    border-radius: 100px !important;
+    background-color: var(--tdm-link-color);
+    float: right;
+}
+
+.tdm_flying_widget .navbar-toggler {
+    padding: 1em;
+}
+
+.tdm_flying_widget .nav.navbar-nav {
+    display: block;
+    margin-top: 3em;
+    padding: 0 1em;
+}
+
+.tdm_flying_widget .widget {
+    padding: 1em 0;
+}
+
+.tdm_flying_widget .widget .form-row div button {
+    display: none;
+}
+
+.tdm_flying_widget * {
+    transition-delay: unset;
+    transition-duration: unset;
+}
\ No newline at end of file
diff --git a/library/templates/TerreDuMilieu/Assets/images/bokeh.png b/library/templates/TerreDuMilieu/Assets/images/bokeh.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b77505628e8af6772fc0f11a1e34440c42f0db1
Binary files /dev/null and b/library/templates/TerreDuMilieu/Assets/images/bokeh.png differ
diff --git a/library/templates/TerreDuMilieu/Assets/images/franceconnect.jpg b/library/templates/TerreDuMilieu/Assets/images/franceconnect.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9774cb0d287548d652741bfd918a180e48dbd9b8
Binary files /dev/null and b/library/templates/TerreDuMilieu/Assets/images/franceconnect.jpg differ
diff --git a/library/templates/TerreDuMilieu/Assets/images/header.jpg b/library/templates/TerreDuMilieu/Assets/images/header.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..90414424e1c6bef6575ad7ca71604705fb41f1dc
Binary files /dev/null and b/library/templates/TerreDuMilieu/Assets/images/header.jpg differ
diff --git a/library/templates/TerreDuMilieu/Assets/images/nav.png b/library/templates/TerreDuMilieu/Assets/images/nav.png
new file mode 100644
index 0000000000000000000000000000000000000000..dcb7785e3cfa3f4112e6556e820823bd1eedab62
Binary files /dev/null and b/library/templates/TerreDuMilieu/Assets/images/nav.png differ
diff --git a/library/templates/TerreDuMilieu/Library/FormCustomizer.php b/library/templates/TerreDuMilieu/Library/FormCustomizer.php
new file mode 100644
index 0000000000000000000000000000000000000000..8528ba2dd1ba65059df07af7bb9098cd6fdaae06
--- /dev/null
+++ b/library/templates/TerreDuMilieu/Library/FormCustomizer.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_Library_FormCustomizer extends Intonation_Library_FormCustomizer {
+  public function getTemplateForm($form) {
+    return (new TerreDuMilieu_Library_FormCustomizer_Template($this->_template, $form))->getForm();
+  }
+}
diff --git a/library/templates/TerreDuMilieu/Library/FormCustomizer/Template.php b/library/templates/TerreDuMilieu/Library/FormCustomizer/Template.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f0e9c70ddac17113de8bdab47bef57e07d2be39
--- /dev/null
+++ b/library/templates/TerreDuMilieu/Library/FormCustomizer/Template.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_Library_FormCustomizer_Template extends Intonation_Library_FormCustomizer_Template {
+  public function getForm() {
+    parent::getForm();
+
+    $this->_form
+      ->addElement('checkbox',
+                   $this->_template->withNameSpace('terredumilieu_css'),
+                   ['label' => $this->_('terredumilieu.css'),
+                    'order' => 3]);
+
+    $this->_addToTemplateGroup(['terredumilieu_css']);
+
+    return $this;
+  }
+}
diff --git a/library/templates/TerreDuMilieu/Library/ProfilePatcher.php b/library/templates/TerreDuMilieu/Library/ProfilePatcher.php
new file mode 100644
index 0000000000000000000000000000000000000000..5aeaf287acc6b3ae38c0f2bce88bca21385c8cc1
--- /dev/null
+++ b/library/templates/TerreDuMilieu/Library/ProfilePatcher.php
@@ -0,0 +1,449 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_Library_ProfilePatcher extends Intonation_Library_ProfilePatcher {
+
+  protected
+    $_flying_menu,
+    $_social_network_top_menu,
+    $_social_network_bottom_menu,
+    $_credits_menu;
+
+  protected function _upgradeProfile() {
+    parent::_upgradeProfile();
+
+    $this->_profile
+      ->setAccessLevel(-1)
+      ->setLibelle($this->_('Accueil TerreDuMilieu'));
+
+    Class_AdminVar::set('MENU_BOITE', 1);
+
+    return $this;
+  }
+
+
+  protected function _upgradeSections() {
+    $section_main = ((new Class_Systeme_Widget_Section_Main)
+                ->setProfileId($this->_profile_id)
+                ->load());
+
+    $section_main
+      ->setNewDatas(['boite' => ['no_border_radius','m-auto', 'pt-3', 'pb-3'],
+                     $this->_template->withNameSpace('width_xsmall') => 11,
+                     $this->_template->withNameSpace('width_small') => 10,
+                     $this->_template->withNameSpace('width_medium') => 8,
+                     $this->_template->withNameSpace('width_large') => 7])
+      ->updateProfile();
+
+    Class_Profil::clearCache();
+
+    $first_section = ((new Class_Systeme_Widget_Section_FirstSide)
+                     ->setProfileId($this->_profile_id)
+                     ->load());
+
+    $first_section
+      ->setNewDatas(['boite' => ['pt-3', 'pb-3'],
+                     $this->_template->withNameSpace('width_xsmall') => 12,
+                     $this->_template->withNameSpace('visibility_index') => 1,
+                     $this->_template->withNameSpace('visibility_recherche') => 0,
+                     $this->_template->withNameSpace('visibility_abonne') => 0,
+                     $this->_template->withNameSpace('visibility_cms') => 0,
+                     $this->_template->withNameSpace('visibility_blog') => 0,
+                     $this->_template->withNameSpace('visibility_auth') => 0])
+
+      ->updateProfile();
+
+    Class_Profil::clearCache();
+
+    $second_section = ((new Class_Systeme_Widget_Section_SecondSide)
+                      ->setProfileId($this->_profile_id)
+                      ->load());
+
+    $second_section
+      ->setNewDatas(['boite' => ['pt-3', 'pb-3'],
+                     $this->_template->withNameSpace('width_xsmall') => 12,
+                     $this->_template->withNameSpace('visibility_index') => 1,
+                     $this->_template->withNameSpace('visibility_recherche') => 0,
+                     $this->_template->withNameSpace('visibility_abonne') => 0,
+                     $this->_template->withNameSpace('visibility_cms') => 0,
+                     $this->_template->withNameSpace('visibility_blog') => 0,
+                     $this->_template->withNameSpace('visibility_auth') => 0])
+      ->updateProfile();
+
+    Class_Profil::clearCache();
+    $this->_profile = Class_Profil::find($this->_profile_id);
+
+    return $this;
+  }
+
+
+  protected function _upgradeMenus() {
+    $this->_menu_id = $this->_profile
+      ->addMenu(['libelle' => $this->_('Menu principal'),
+                 'picto' => '',
+                 'menus' => [
+                             ['type_menu' => 'ACCUEIL',
+                              'libelle' => $this->_('Accueil'),
+                              'use_profil' => $this->_profile_id],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Réseau'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Collections'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Numérique'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Infos pratiques'),
+                              'url' => '']
+                 ]
+                 ]);
+
+    $this->_flying_menu = $this->_profile
+      ->addMenu(['libelle' => $this->_('Menu volant'),
+                 'picto' => '',
+                 'menus' => [
+                             ['type_menu' => 'ACCUEIL',
+                              'libelle' => $this->_('Accueil'),
+                              'use_profil' => $this->_profile_id],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Agenda'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Préinscription'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Contact'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('S\'identifier avec France Connect'),
+                              'url' => ''],
+
+                             ['type_menu' => 'MODULE_ACCUEIL_RECH_SIMPLE',
+                              'type_module' => 'RECH_SIMPLE',
+                              'libelle' => $this->_('Rechercher'),
+                              'preferences' => ['titre' => $this->_('Recherche'),
+                                                'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'no_background', 'tdm_search_widget', 'm-auto'],
+                                                'search_button' => 'class fas fa-search',
+                                                'placeholder' => $this->_('Titre, auteur…'),
+                                                'type_doc' => '',
+                                                $this->_template->withNameSpace('form_style') => 'inline',
+                                                $this->_template->withNameSpace('width_xsmall') => 12,
+                                                $this->_template->withNameSpace('show_header') => 0,
+                                                $this->_template->withNameSpace('show_content') => 0,
+                                                $this->_template->withNameSpace('show_footer') => 0]]
+                 ]
+                 ]);
+
+    $this->_social_network_top_menu = $this->_profile
+      ->addMenu(['libelle' => $this->_('Menu réseaux sociaux haut de page'),
+                 'picto' => '',
+                 'menus' => [
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Facebook'),
+                              'url' => '',
+                              'picto' => 'class fab fa-facebook-f'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Twitter'),
+                              'url' => '',
+                              'picto' => 'class fab fa-twitter'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Instagram'),
+                              'url' => '',
+                              'picto' => 'class fab fa-instagram'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('SoundCloud'),
+                              'url' => '',
+                              'picto' => 'class fab fa-soundcloud'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('France Connect'),
+                              'url' => 'https://fcp.integ01.dev-franceconnect.fr/',
+                              'picto' => Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/images/franceconnect.jpg')]
+                 ]
+                 ]);
+
+    $this->_social_network_bottom_menu = $this->_profile
+      ->addMenu(['libelle' => $this->_('Menu réseaux sociaux bas de page'),
+                 'picto' => '',
+                 'menus' => [
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Bokeh'),
+                              'url' => '',
+                              'picto' => Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/images/bokeh.png')],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Facebook'),
+                              'url' => '',
+                              'picto' => 'class fab fa-facebook-f'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Twitter'),
+                              'url' => '',
+                              'picto' => 'class fab fa-twitter'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Instagram'),
+                              'url' => '',
+                              'picto' => 'class fab fa-instagram'],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('Youtube'),
+                              'url' => '',
+                              'picto' => 'class fab fa-youtube'],
+
+                 ]
+                 ]);
+
+        $this->_credits_menu = $this->_profile
+      ->addMenu(['libelle' => $this->_('Menu crédits'),
+                 'picto' => '',
+                 'menus' => [
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('> Plan du site'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('> Mentions légales'),
+                              'url' => ''],
+
+                             ['type_menu' => 'URL',
+                              'libelle' => $this->_('> Crédits'),
+                              'url' => ''],
+                 ]
+                 ]);
+
+    $this->_profile->save();
+
+    return $this;
+  }
+
+
+  protected function _upgradeWidgets() {
+    $this
+      ->_removeWidgets()
+
+      ->_addWidget(Intonation_Library_Widget_Menu_Definition::CODE,
+                   Class_Profil::DIV_BANNIERE,
+                   ['titre' => $this->_('Menu réseau sociaux haut'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'tdm_social_network_widget', 'tdm_widget'],
+                    'menu' => $this->_profile_id . '-' . $this->_social_network_top_menu,
+                    $this->_template->withNameSpace('expand_breakpoint') => Intonation_Library_Constants::RESPONSIVE_MODE_XSMALL,
+                    $this->_template->withNameSpace('width_xsmall') => 6,
+                    $this->_template->withNameSpace('width_medium') => 5,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Login_Definition::CODE,
+                   Class_Profil::DIV_BANNIERE,
+                   ['titre' => $this->_('Connexion'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'no_background'],
+                    'titre_connecte' => $this->_('Mon compte'),
+                    'message_connecte' => '',
+                    'identifiant' => '',
+                    'identifiant_exemple' => $this->_('N° de carte'),
+                    'mot_de_passe' => '',
+                    'mot_de_passe_exemple' => $this->_('Année de naissance'),
+                    'lien_connexion' => $this->_('Valider'),
+                    'lien_deconnection' => $this->_('Se déconnecter'),
+                    'lien_mot_de_passe_oublie' => $this->_('Mot de passe oublié'),
+                    'lien_compte' => $this->_('Mon compte'),
+                    'lien_creer_compte' => $this->_('S\'enregistrer'),
+                    $this->_template->withNameSpace('form_style') => 'toggle',
+                    $this->_template->withNameSpace('width_xsmall') => 6,
+                    $this->_template->withNameSpace('width_medium') => 7,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Nav_Definition::CODE,
+                   Class_Profil::DIV_BANNIERE,
+                   ['titre' => $this->_('Menu réseau sociaux haut'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'tdm_main_nav_widget', 'tdm_widget'],
+                    'menu' => $this->_profile_id . '-' . $this->_menu_id,
+                    $this->_template->withNameSpace('expand_breakpoint') => Intonation_Library_Constants::RESPONSIVE_MODE_XSMALL,
+                    $this->_template->withNameSpace('width_xsmall') => 12,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Search_Definition::CODE,
+                   Class_Profil::DIV_BANNIERE,
+                   ['titre' => $this->_('Recherche'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'no_background', 'tdm_search_widget', 'm-auto', 'pt-3'],
+                    'search_button' => 'class fas fa-search',
+                    'placeholder' => $this->_('Titre, auteur…'),
+                    'type_doc' => '',
+                    $this->_template->withNameSpace('form_style') => 'inline',
+                    $this->_template->withNameSpace('width_xsmall') => 11,
+                    $this->_template->withNameSpace('width_small') => 8,
+                    $this->_template->withNameSpace('width_medium') => 5,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Carousel_Agenda_Definition::CODE,
+                   Class_Profil::DIV_FIRST_SIDE,
+                   ['titre' => $this->_('Agenda'),
+                    'boite' => ['no_background', 'no_border', 'no_border_radius', 'no_shadow', 'm-auto', 'tdm_widget'],
+                    'rendering' => 'card',
+                    'layout' => 'multiple_carousel',
+                    'size' => 3,
+                    'order' => 'EventDebut',
+                    'enabled_filters' => 'day;date;place',
+                    'link_to_all' => 1,
+                    $this->_template->withNameSpace('width_xsmall') => 11,
+                    $this->_template->withNameSpace('width_small') => 10,
+                    $this->_template->withNameSpace('width_medium') => 8,
+                    $this->_template->withNameSpace('width_large') => 7,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 1])
+
+      ->_addWidget(Intonation_Library_Widget_Carousel_Author_Definition::CODE,
+                   Class_Profil::DIV_MAIN,
+                   ['titre' => $this->_('Acteurs de comédie'),
+                    'boite' => ['no_background', 'no_border', 'no_border_radius', 'no_shadow', 'm-auto', 'auto_col', 'tdm_widget'],
+                    'rendering' => 'card-overlay',
+                    'layout' => 'wall',
+                    'size' => 9,
+                    'link_to_all' => 1,
+                    $this->_template->withNameSpace('width_xsmall') => 12,
+                    $this->_template->withNameSpace('show_header') => 1,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 1])
+
+      ->_addWidget(Intonation_Library_Widget_Carousel_Article_Definition::CODE,
+                   Class_Profil::DIV_MAIN,
+                   ['titre' => $this->_('En ce moment'),
+                    'boite' => ['no_background', 'no_border', 'no_border_radius', 'no_shadow', 'm-auto', 'tdm_widget'],
+                    'rendering' => 'card-overlay',
+                    'layout' => 'carousel',
+                    'size' => 1,
+                    $this->_template->withNameSpace('width_xsmall') => 12,
+                    $this->_template->withNameSpace('show_header') => 1,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Carousel_Review_Definition::CODE,
+                   Class_Profil::DIV_SECOND_SIDE,
+                   ['titre' => $this->_('Les critiques'),
+                    'boite' => ['no_background', 'no_border', 'no_border_radius', 'no_shadow', 'm-auto', 'auto_col', 'tdm_widget'],
+                    'rendering' => 'card',
+                    'layout' => 'wall',
+                    'size' => 5,
+                    'link_to_all' => 1,
+                    $this->_template->withNameSpace('width_xsmall') => 11,
+                    $this->_template->withNameSpace('width_small') => 10,
+                    $this->_template->withNameSpace('width_medium') => 8,
+                    $this->_template->withNameSpace('width_large') => 7,
+                    $this->_template->withNameSpace('show_header') => 1,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 1])
+
+      ->_addWidget(Intonation_Library_Widget_Carousel_Record_Definition::CODE,
+                   Class_Profil::DIV_SECOND_SIDE,
+                   ['titre' => $this->_('L\'anjou'),
+                    'boite' => ['no_background', 'no_border', 'no_border_radius', 'no_shadow', 'm-auto', 'auto_col', 'tdm_widget'],
+                    'rendering' => 'card-overlay',
+                    'layout' => 'wall',
+                    'size' => 5,
+                    'link_to_all' => 1,
+                    $this->_template->withNameSpace('width_xsmall') => 11,
+                    $this->_template->withNameSpace('width_small') => 10,
+                    $this->_template->withNameSpace('width_medium') => 8,
+                    $this->_template->withNameSpace('width_large') => 7,
+                    $this->_template->withNameSpace('show_header') => 1,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 1])
+
+      ->_addWidget(Intonation_Library_Widget_Menu_Definition::CODE,
+                   Class_Profil::DIV_FOOTER,
+                   ['titre' => $this->_('Menu réseau sociaux bas'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'tdm_social_network_widget', 'pt-3', 'pb-3'],
+                    'menu' => $this->_profile_id . '-' . $this->_social_network_bottom_menu,
+                    $this->_template->withNameSpace('expand_breakpoint') => Intonation_Library_Constants::RESPONSIVE_MODE_XSMALL,
+                    $this->_template->withNameSpace('width_xsmall') => 3,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Carousel_Library_Definition::CODE,
+                   Class_Profil::DIV_FOOTER,
+                   ['titre' => $this->_('Adresse bibliothèque'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'pt-3', 'pb-3', 'border-primary', 'border-left'],
+                    'rendering' => 'card-description',
+                    'layout' => 'carousel',
+                    'osm_map' => 0,
+                    'size' => 1,
+                    'link_to_all' => 1,
+                    $this->_template->withNameSpace('width_xsmall') => 3,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 1])
+
+      ->_addWidget(Intonation_Library_Widget_Menu_Definition::CODE,
+                   Class_Profil::DIV_FOOTER,
+                   ['titre' => $this->_('Menu crédits'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'pt-3', 'pb-3', 'border-primary', 'border-left'],
+                    'menu' => $this->_profile_id . '-' . $this->_credits_menu,
+                    'layout' => 'vertical',
+                    $this->_template->withNameSpace('expand_breakpoint') => Intonation_Library_Constants::RESPONSIVE_MODE_XSMALL,
+                    $this->_template->withNameSpace('width_xsmall') => 3,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addWidget(Intonation_Library_Widget_Menu_Definition::CODE,
+                   Class_Profil::DIV_BANNIERE,
+                   ['titre' => $this->_('Menu volant'),
+                    'boite' => ['no_border', 'no_border_radius', 'no_shadow', 'tdm_flying_widget', 'position_fixed_top_right'],
+                    'menu' => $this->_profile_id . '-' . $this->_flying_menu,
+                    $this->_template->withNameSpace('expand_breakpoint') => Intonation_Library_Constants::RESPONSIVE_MODE_ALWAYS,
+                    $this->_template->withNameSpace('width_xsmall') => 6,
+                    $this->_template->withNameSpace('width_medium') => 4,
+                    $this->_template->withNameSpace('width_large') => 3,
+                    $this->_template->withNameSpace('show_header') => 0,
+                    $this->_template->withNameSpace('show_content') => 0,
+                    $this->_template->withNameSpace('show_footer') => 0])
+
+      ->_addScrollTopWidget()
+      ->_addAdminWidget()
+      ->_addAccessibilityWidget()
+      ->_addNotificationWidget();
+
+    return $this;
+  }
+}
\ No newline at end of file
diff --git a/library/templates/TerreDuMilieu/Library/Settings.php b/library/templates/TerreDuMilieu/Library/Settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1a55f21e23e72e4a727abc0cbdeee84dd1743a1
--- /dev/null
+++ b/library/templates/TerreDuMilieu/Library/Settings.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_Library_Settings extends Intonation_Library_Settings {
+  protected function _getDefaultSettings() {
+    $settings = parent::_getDefaultSettings();
+    $settings[$this->_template->withNameSpace('terredumilieu_css')] = 1;
+
+    $custom_css_classes = $settings[$this->_template->withNameSpace('custom_css_class')];
+
+    $custom_css_classes = ['position_fixed_bottom',
+                           'position_fixed_bottom_left',
+                           'position_fixed_bottom_right',
+                           'position_fixed_top',
+                           'position_fixed_top_left',
+                           'position_fixed_top_right',
+                           'position_fixed_mid_left',
+                           'position_fixed_mid_right',
+                           'pt-3',
+                           'pb-3',
+                           'no_border',
+                           'no_border_radius',
+                           'no_shadow',
+                           'm-auto',
+                           'align-items-center',
+                           'auto_col',
+                           'tdm_widget',
+                           'tdm_flying_widget',
+                           'tdm_search_widget',
+                           'tdm_social_network_widget',
+                           'tdm_main_nav_widget',
+                           'border-primary',
+                           'border-left'];
+
+    $settings[$this->_template->withNameSpace('custom_css_class')] = $custom_css_classes;
+
+    $hydrating_mapping = $settings[$this->_template->withNameSpace('hydrating_mapping')];
+
+    $hydrating_mapping['a class nav-link'] = '';
+
+    $settings[$this->_template->withNameSpace('hydrating_mapping')] = $hydrating_mapping;
+    return $settings;
+  }
+}
diff --git a/library/templates/TerreDuMilieu/Template.php b/library/templates/TerreDuMilieu/Template.php
new file mode 100644
index 0000000000000000000000000000000000000000..ad2c1745779942180e0e7f83615331769ecf72f1
--- /dev/null
+++ b/library/templates/TerreDuMilieu/Template.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_Template extends Intonation_Template {
+
+  const ID = 'TERREDUMILIEU';
+
+
+  public function __construct() {
+    $this->setId(static::ID)
+         ->setTitle($this->_('TerreDuMilieu'))
+         ->setSettings(new TerreDuMilieu_Library_Settings($this))
+         ->setPatcher(new TerreDuMilieu_Library_ProfilePatcher($this));
+  }
+
+
+  public function getProfile() {
+    if ($this->_profile)
+      return $this->_profile;
+
+    if ($this->_profile = Class_Profil::findFirstBy(['template' => $this->getId()]))
+      return $this->_profile;
+
+    $this->createFrom(Class_Profil::getPortail());
+
+    return $this->_profile = Class_Profil::getCurrentProfil();
+  }
+
+
+  public function renderOpac($view) {
+    return (new TerreDuMilieu_View_Opac($this, $view))->render();
+  }
+
+
+  public function renderSubModal($view) {
+    return (new TerreDuMilieu_View_SubModal($this, $view))->render();
+  }
+
+
+  public function customTemplateForm($form) {
+    $helper = new TerreDuMilieu_Library_FormCustomizer($this);
+    return $helper->getTemplateForm($form);
+  }
+}
diff --git a/library/templates/TerreDuMilieu/View/Opac.php b/library/templates/TerreDuMilieu/View/Opac.php
new file mode 100644
index 0000000000000000000000000000000000000000..a786e3b8e9a957145de3af394d00ebbdfabf0cce
--- /dev/null
+++ b/library/templates/TerreDuMilieu/View/Opac.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_View_Opac extends Intonation_View_Opac {
+  protected function _headContent() {
+    Class_ScriptLoader::getInstance()
+      ->addStyleSheet(Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/css/terredumilieu.css'));
+    return parent::_headContent();
+  }
+}
diff --git a/library/templates/TerreDuMilieu/View/SubModal.php b/library/templates/TerreDuMilieu/View/SubModal.php
new file mode 100644
index 0000000000000000000000000000000000000000..a6ce53ef1d7ab0c4f0ab36fb51bcba98513971fa
--- /dev/null
+++ b/library/templates/TerreDuMilieu/View/SubModal.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+class TerreDuMilieu_View_SubModal extends Intonation_View_SubModal {
+  protected function _headContent() {
+    Class_ScriptLoader::getInstance()
+      ->addStyleSheet(Class_Url::absolute('/library/templates/TerreDuMilieu/Assets/css/terredumilieu.css'));
+    return parent::_headContent();
+  }
+}
diff --git a/public/opac/js/widget_templates/INTONATION_ACCESSIBILITY.jpg b/public/opac/js/widget_templates/INTONATION_ACCESSIBILITY.jpg
deleted file mode 100644
index 62c3d20d13ea38ee8a0be7a0ef4b24b6de0cafe1..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_ACCESSIBILITY.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_ARIANE.jpg b/public/opac/js/widget_templates/INTONATION_ARIANE.jpg
deleted file mode 100644
index dfe1492cca4fea7a9826d6a058e61eb225324c26..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_ARIANE.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_AUTHORS_carousel.jpg b/public/opac/js/widget_templates/INTONATION_AUTHORS_carousel.jpg
deleted file mode 100644
index 97a53b23653bb76fba6261ed33cc6fbeaf061399..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_AUTHORS_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_AUTHORS_horizontal_list.jpg b/public/opac/js/widget_templates/INTONATION_AUTHORS_horizontal_list.jpg
deleted file mode 100644
index 6d94fccde62bb06799d50bb0cc9bf0d67b0069ef..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_AUTHORS_horizontal_list.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_AUTHORS_multiple_carousel.jpg b/public/opac/js/widget_templates/INTONATION_AUTHORS_multiple_carousel.jpg
deleted file mode 100644
index f8539aa810afe9872369bdd2cc5e126a7d24c881..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_AUTHORS_multiple_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_AUTHORS_wall.jpg b/public/opac/js/widget_templates/INTONATION_AUTHORS_wall.jpg
deleted file mode 100644
index 113ca814c02fb40f1253ada37b8a82807f734741..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_AUTHORS_wall.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CALENDAR_carousel.jpg b/public/opac/js/widget_templates/INTONATION_CALENDAR_carousel.jpg
deleted file mode 100644
index bb1bfb9aedbbdadec7a1642c4e1851c1caaea5ab..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CALENDAR_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CALENDAR_list.jpg b/public/opac/js/widget_templates/INTONATION_CALENDAR_list.jpg
deleted file mode 100644
index 5b29fa05ab80b07347e4581cc412abc87a2624ce..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CALENDAR_list.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CALENDAR_multiple_carousel.jpg b/public/opac/js/widget_templates/INTONATION_CALENDAR_multiple_carousel.jpg
deleted file mode 100644
index 7fc49b788576711041e896a4c7eb94650edb485a..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CALENDAR_multiple_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CALENDAR_wall.jpg b/public/opac/js/widget_templates/INTONATION_CALENDAR_wall.jpg
deleted file mode 100644
index 1b6fcbac39efefbd9b51a7aedbe59e520e5dfb6c..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CALENDAR_wall.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CREDITS.jpg b/public/opac/js/widget_templates/INTONATION_CREDITS.jpg
deleted file mode 100644
index 82b1be19c581bfad83b57ff68baafea3d1e26d03..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CREDITS.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CRITIQUES_carousel.jpg b/public/opac/js/widget_templates/INTONATION_CRITIQUES_carousel.jpg
deleted file mode 100644
index a2e9a4cdb3059aea9b60c0592af97d2da28896d8..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CRITIQUES_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_CRITIQUES_multiple_carousel.jpg b/public/opac/js/widget_templates/INTONATION_CRITIQUES_multiple_carousel.jpg
deleted file mode 100644
index c152b68b886cfbcaf4fe6ec486d6120297747249..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_CRITIQUES_multiple_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_IMAGE.jpg b/public/opac/js/widget_templates/INTONATION_IMAGE.jpg
deleted file mode 100644
index 2840155c62aa1a61ea441831bcf3503c49d4d440..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_IMAGE.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_KIOSQUE_carousel.png b/public/opac/js/widget_templates/INTONATION_KIOSQUE_carousel.png
deleted file mode 100644
index 92223ace79ae708dfbdd43c65f93f5a2d6e347c9..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_KIOSQUE_carousel.png and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_KIOSQUE_horizontal_list.jpg b/public/opac/js/widget_templates/INTONATION_KIOSQUE_horizontal_list.jpg
deleted file mode 100644
index 14faef34276478aa43e348d0ba044055202d6dd4..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_KIOSQUE_horizontal_list.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_KIOSQUE_list.jpg b/public/opac/js/widget_templates/INTONATION_KIOSQUE_list.jpg
deleted file mode 100644
index 6c4c81b4652e70024d09a67dec40a6b3191fdd7f..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_KIOSQUE_list.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_KIOSQUE_multiple_carousel.jpg b/public/opac/js/widget_templates/INTONATION_KIOSQUE_multiple_carousel.jpg
deleted file mode 100644
index bec9dc61325fcda28e88a41cbba94ba516c9482a..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_KIOSQUE_multiple_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_KIOSQUE_wall.jpg b/public/opac/js/widget_templates/INTONATION_KIOSQUE_wall.jpg
deleted file mode 100644
index b51c4e84315b639ed9c026c40c780635a76c0eb6..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_KIOSQUE_wall.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_LIBRARY_carousel.jpg b/public/opac/js/widget_templates/INTONATION_LIBRARY_carousel.jpg
deleted file mode 100644
index bcb3a5ac83efb852902295a02de25b6267fb4331..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_LIBRARY_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_LOGIN.jpg b/public/opac/js/widget_templates/INTONATION_LOGIN.jpg
deleted file mode 100644
index 02aca7d11c5122b0394f02d29de1d98f8059aa68..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_LOGIN.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NAV.jpg b/public/opac/js/widget_templates/INTONATION_NAV.jpg
deleted file mode 100644
index 7eb85b16f3c0459cd18eb2fd1bd591fe84dc4629..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NAV.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NEWS_carousel.jpg b/public/opac/js/widget_templates/INTONATION_NEWS_carousel.jpg
deleted file mode 100644
index 7bf85e7d87522fff3e48f483a1f3fca2cad0bffa..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NEWS_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NEWS_horizontal_list.jpg b/public/opac/js/widget_templates/INTONATION_NEWS_horizontal_list.jpg
deleted file mode 100644
index bbdaa642ebf9e644a1f747fbec4a3c8db49b4454..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NEWS_horizontal_list.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NEWS_list.jpg b/public/opac/js/widget_templates/INTONATION_NEWS_list.jpg
deleted file mode 100644
index b49253b8039b1930ed4113c927b2024674a38f81..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NEWS_list.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NEWS_multiple_carousel.jpg b/public/opac/js/widget_templates/INTONATION_NEWS_multiple_carousel.jpg
deleted file mode 100644
index 782786cf4690c78336318a36763c8f326e6b77ee..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NEWS_multiple_carousel.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NEWS_wall.jpg b/public/opac/js/widget_templates/INTONATION_NEWS_wall.jpg
deleted file mode 100644
index 3f699b8da7f26c05688a0b53c0c9dce849fd8219..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NEWS_wall.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_NOTIFY.jpg b/public/opac/js/widget_templates/INTONATION_NOTIFY.jpg
deleted file mode 100644
index f1782fea68a5353802f8a516ebcb4b3569ba82ac..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_NOTIFY.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_RECH_SIMPLE.jpg b/public/opac/js/widget_templates/INTONATION_RECH_SIMPLE.jpg
deleted file mode 100644
index 947c3c5b17d0f208dd6d7dae88ca1cb856a5f4aa..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_RECH_SIMPLE.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/INTONATION_SCROLL.jpg b/public/opac/js/widget_templates/INTONATION_SCROLL.jpg
deleted file mode 100644
index b9f770d5bacf2de485da30e6a2fa2121419ee3fb..0000000000000000000000000000000000000000
Binary files a/public/opac/js/widget_templates/INTONATION_SCROLL.jpg and /dev/null differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_ACCESSIBILITY.jpg b/public/opac/js/widget_templates/TEMPLATE_ACCESSIBILITY.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f6b07b7db0b352579932c8dd59410d6d794c98e2
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_ACCESSIBILITY.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_ADMIN_TOOLS.jpg b/public/opac/js/widget_templates/TEMPLATE_ADMIN_TOOLS.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0f2ecc7b579151c088e9625f09dac1dec9664999
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_ADMIN_TOOLS.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_ARIANE.jpg b/public/opac/js/widget_templates/TEMPLATE_ARIANE.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..23a96ee91999b477ba33606c7665bd617657e48e
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_ARIANE.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_AUTHORS_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_AUTHORS_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_AUTHORS_list.jpg b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_AUTHORS_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_AUTHORS_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_AUTHORS_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CALENDAR_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CALENDAR_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CALENDAR_list.jpg b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CALENDAR_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CALENDAR_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CALENDAR_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CREDITS.jpg b/public/opac/js/widget_templates/TEMPLATE_CREDITS.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6369daaf48d0b71bab2d10b729df0f9daf71718e
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CREDITS.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_list.jpg b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_CRITIQUES_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_horizontal_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_horizontal_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_horizontal_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_list.jpg b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_DOMAIN_BROWSER_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_FREE.jpg b/public/opac/js/widget_templates/TEMPLATE_FREE.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..89a038db0881d8670fdf229b4be02707cd88a2ef
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_FREE.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_IMAGE.jpg b/public/opac/js/widget_templates/TEMPLATE_IMAGE.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ce409dc76a3add04ffc328dac931099af05bf427
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_IMAGE.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_list.jpg b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_KIOSQUE_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_LIBRARY_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_LIBRARY_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_LIBRARY_list.jpg b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_LIBRARY_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_LIBRARY_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_LIBRARY_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_LOGIN.jpg b/public/opac/js/widget_templates/TEMPLATE_LOGIN.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..433a40cec8989609ff5ee539543bdce5b91ea16e
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_LOGIN.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_MENU.jpg b/public/opac/js/widget_templates/TEMPLATE_MENU.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2c1f9cf7cf75e0aeab72ba781ec0dfc1b94a46e5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_MENU.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NAV.jpg b/public/opac/js/widget_templates/TEMPLATE_NAV.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b9d6ebae33827d9615aabe5ce6e86877e427a8e7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NAV.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_list.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_list_with_options.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_list_with_options.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4c9eed2ccf8867a15a5077e5eff0658193f96c32
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_list_with_options.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWSLETTERS_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWS_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWS_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a132751308233de99aaefe4eafcdbdcab1e1ffe5
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWS_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWS_horizontal_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWS_horizontal_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWS_horizontal_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWS_horizontal_list.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWS_horizontal_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4827d9251c42dec055eb06d0451a4fdc79b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWS_horizontal_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWS_list.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWS_list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ab6688812f686cdcd97da7c9826f11311cab241
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWS_list.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWS_multiple_carousel.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWS_multiple_carousel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6db456a6977b29d4e5a6faf0f2908899974580b7
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWS_multiple_carousel.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NEWS_wall.jpg b/public/opac/js/widget_templates/TEMPLATE_NEWS_wall.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..54f1ad3af2759dece751bc2d7c5fbeccbcbbebe3
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NEWS_wall.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_NOTIFY.jpg b/public/opac/js/widget_templates/TEMPLATE_NOTIFY.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..97539b2071e620f677fdc93c0993d58080bee238
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_NOTIFY.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_RECH_SIMPLE.jpg b/public/opac/js/widget_templates/TEMPLATE_RECH_SIMPLE.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5a4590da1e6e62e27ceebdf241b18e702a7ee9fc
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_RECH_SIMPLE.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_SCROLL.jpg b/public/opac/js/widget_templates/TEMPLATE_SCROLL.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f9d90107a1ad409e46c9e540a0e58fa8e16b2485
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_SCROLL.jpg differ
diff --git a/public/opac/js/widget_templates/TEMPLATE_SHARE.jpg b/public/opac/js/widget_templates/TEMPLATE_SHARE.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c9ce9979df6b855b7e3bb1d15f6d7d1f3dda3f2b
Binary files /dev/null and b/public/opac/js/widget_templates/TEMPLATE_SHARE.jpg differ
diff --git a/tests/scenarios/Templates/MyBibAppTemplateTest.php b/tests/scenarios/Templates/MyBibAppTemplateTest.php
index 441c59edec8068dd33ac856c197a7ab20228e67c..e193bf875e461ceddd72272333b5106bcceb799f 100644
--- a/tests/scenarios/Templates/MyBibAppTemplateTest.php
+++ b/tests/scenarios/Templates/MyBibAppTemplateTest.php
@@ -90,6 +90,12 @@ class MyBibAppTemplateProfilePatcherTest extends MyBibAppTemplateTestCase {
     $this->assertXPath(sprintf('//div[contains(@class, "widget")][contains(@class, "%s")]',
                                $widget_class));
   }
+
+
+  /** @test */
+  public function editTemplateMyBibAppShouldBePresent() {
+    $this->assertXPathContentContains('//a[contains(@href, "admin/template/edit/template/MYBIBAPP")]', 'Configuration du template');
+  }
 }
 
 
diff --git a/tests/scenarios/Templates/TemplatesTest.php b/tests/scenarios/Templates/TemplatesTest.php
index 03ae0845972888f9ff29f01dd438b40dd620810a..93685c1c02b193ea9e7a11863d620bf2f9ba0db7 100644
--- a/tests/scenarios/Templates/TemplatesTest.php
+++ b/tests/scenarios/Templates/TemplatesTest.php
@@ -72,6 +72,55 @@ class TemplatesControllerIndexDispatchTest extends TemplatesEnabledTestCase {
   public function updateIntonationShouldBePresent() {
     $this->assertXPath('//table//a[contains(@href,"/admin/template/update/template/INTONATION")]');
   }
+
+
+  /** @test */
+  public function applyIntonationShouldBePresent() {
+    $this->assertXPath('//table//a[contains(@href,"/admin/template/apply/template/INTONATION")]');
+  }
+}
+
+
+
+class TemplatesControllerApplyIntonationTest extends TemplatesEnabledTestCase {
+  protected $_storm_default_to_volatile = true;
+
+  public function setUp() {
+    parent::setUp();
+    $this->fixture('Class_Profil',
+                   ['id' => 1,
+                    'parent_id' => null,
+                    'libelle' => 'Accueil']);
+    $this->fixture('Class_Profil',
+                   ['id' => 2,
+                    'parent_id' => null,
+                    'libelle' => 'Adultes']);
+    $this->fixture('Class_Profil',
+                   ['id' => 3,
+                    'parent_id' => null,
+                    'libelle' => 'Jeunesse']);
+  }
+
+
+  /** @test */
+  public function shouldDisplayProfiles() {
+    $this->dispatch('/admin/template/apply/template/INTONATION');
+    $this->assertXPath('//table//td//a[contains(@href, "admin/template/apply/template/INTONATION/on/3")]');
+  }
+
+
+  /** @test */
+  public function shouldRedirectToProfile2() {
+    $this->dispatch('/admin/template/apply/template/INTONATION/on/2');
+    $this->assertRedirectTo('/opac/index/index/id_profil/2');
+  }
+
+
+  /** @test */
+  public function profile3ShouldUseTemplateIntonation() {
+    $this->dispatch('/admin/template/apply/template/INTONATION/on/3');
+    $this->assertEquals('INTONATION', Class_Profil::find(3)->getTemplate());
+  }
 }
 
 
@@ -251,6 +300,7 @@ abstract class TemplatesIntonationTestCase extends TemplatesEnabledTestCase {
                                  'picto' => 'vide.gif',
                                  'preferences' => ['clef_profil' => '2']],
                                 ['type_menu' => 'MODULE_ACCUEIL_RECH_SIMPLE',
+                                 'type_module' => 'RECH_SIMPLE',
                                  'libelle' => 'rechercher',
                                  'picto' => 'search.gif'],
                                 ['type_menu' => 'MENU',
@@ -4437,9 +4487,9 @@ class TemplatesDispatchWidgetAddWidgetTest extends TemplatesIntonationTestCase {
 
 
   /** @test */
-  public function addWidgetShouldDynamicImage() {
+  public function shouldContainsAdminToolsJpg() {
     $this->dispatch('/admin/widget/add-from-template/id_profil/72');
-    $this->assertXPath('//div//img[contains(@src, "/INTONATION_ADMIN_TOOLS.jpg")]');
+    $this->assertXPath('//div//img[contains(@src, "/TEMPLATE_ADMIN_TOOLS.jpg")]');
   }
 
 
@@ -4539,7 +4589,7 @@ class TemplatesDispatchWidgetRenderAllTest extends TemplatesIntonationTestCase {
    * @test */
   public function withWidgetShouldRenderExpectedDom($widget_id, $dom) {
     $this->dispatch('/opac/widget/render-all/profile_id/72/widget_id/' . $widget_id);
-              $this->assertXPath($dom, $this->_response->getBody());
+    $this->assertXPath($dom, $this->_response->getBody());
   }
 }
 
diff --git a/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php b/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a4ec2f9ac3c60231d4e1ef4340d19d31ccba3b5
--- /dev/null
+++ b/tests/scenarios/Templates/TerreDuMilieuTemplateTest.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Copyright (c) 2012-2019, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * BOKEH is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * BOKEH is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with BOKEH; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+
+abstract class TerreDuMilieuTemplateTestCase extends AbstractControllerTestCase {
+  protected $_storm_default_to_volatile = true;
+
+  public function setUp() {
+    parent::setUp();
+    Class_Systeme_ModulesAccueil::reset();
+    Class_AdminVar::set('TEMPLATING', 1);
+
+    $profile = $this->fixture('Class_Profil',
+                              ['id' => 23]);
+
+    (new TerreDuMilieu_Template)->tryOn($profile);
+    (new Class_Profil_Promoter())->promote($profile);
+
+  }
+
+
+  public function tearDown() {
+    parent::tearDown();
+    Class_Systeme_ModulesAccueil::reset();
+  }
+}
+
+
+
+
+class TerreDuMilieuTemplateAdminTemplateIndexDispatchTest extends TerreDuMilieuTemplateTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/admin/template/index');
+  }
+
+
+  /** @test */
+  public function editTerreDuMilieuUrlShouldBeDisplay() {
+    $this->assertXPath('//table//a[contains(@href,"/admin/template/edit/template/TERREDUMILIEU")]');
+  }
+}
+
+
+
+class TerreDuMilieuTemplateProfilePatcherTest extends TerreDuMilieuTemplateTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/opac/index/index');
+  }
+
+
+  public function widgetsClasses() {
+    return [
+            ['login'],
+            ['accessibility'],
+            ['rech_simple'],
+            ['admin_tools'],
+            ['scroll'],
+            ['library'],
+            ['critiques'],
+    ];
+  }
+
+
+  /**
+   * @dataProvider widgetsClasses
+   * @test */
+  public function indexShouldContainsWidgets($widget_class) {
+    $this->assertXPath(sprintf('//div[contains(@class, "widget")][contains(@class, "%s")]',
+                               $widget_class));
+  }
+
+
+  /** @test */
+  public function editTemplateTerreDuMilieuShouldBePresent() {
+    $this->assertXPathContentContains('//a[contains(@href, "admin/template/edit/template/TERREDUMILIEU")]', 'Configuration du template');
+  }
+}
+
+
+
+class TerreDuMilieuTemplateOpacIndexWithUserAgentTest extends TerreDuMilieuTemplateTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->dispatch('/opac/index/index');
+  }
+
+
+  /** @test */
+  public function pageTitleShouldBeTestCharteTerreDuMilieu() {
+    $this->assertXPathContentContains('//head/title', 'TerreDuMilieu');
+  }
+
+
+  /** @test */
+  public function pageShouldLoadTerreDuMilieuCss() {
+    $this->assertXPath('//head/link[contains(@href, "/templates/TerreDuMilieu/Assets/css/terredumilieu.css")]');
+  }
+
+
+  /** @test */
+  public function pageShouldBeHtml5Valid() {
+    $this->assertHTML5();
+  }
+
+
+  /** @test */
+  public function pageShouldBeAccessible() {
+    $this->assertAccessible($this->_response->getBody());
+  }
+}
+
+
+
+class TerreDuMilieuTemplateEditTemplateTest extends Admin_AbstractControllerTestCase {
+  protected $_storm_default_to_volatile = true;
+
+  public function setUp() {
+    parent::setUp();
+
+    Class_AdminVar::set('TEMPLATING', 1);
+
+    $settings = $this->fixture('Class_Template_Settings',
+                               ['id' => 456,
+                                'template' => 'TERREDUMILIEU']);
+
+    $this->dispatch('/admin/template/edit/template/terredumilieu');
+  }
+
+
+  /** @test */
+  public function checkboxTerreDuMilieuCssShouldBeChecked() {
+    $this->assertXPath('//form//input[@type="checkbox"][@name="TerredumilieuTerredumilieuCss"][@checked]');
+  }
+
+
+  /** @test */
+  public function customCssShouldContainsClassTdmWidget() {
+    $this->assertContains('"tdm_widget"', $this->_response->getBody());
+  }
+}
\ No newline at end of file