merge default doc-dc
authorDamien Correia
Mon, 11 Jun 2018 10:00:17 +0200
branchdoc-dc
changeset 660 b977c7da3074
parent 659 8ba76f7719b4 (current diff)
parent 599 7f97d8cae72e (diff)
child 661 cffd13804aa8
merge default
--- a/docs/HISTORY.txt	Fri Jun 08 10:35:42 2018 +0200
+++ b/docs/HISTORY.txt	Mon Jun 11 10:00:17 2018 +0200
@@ -1,6 +1,14 @@
 History
 =======
 
+0.1.14
+------
+ - added header and footer management features
+ - added renderer for each kind of paragraphs
+ - added preview for a each paragraph one by one
+ - added optional checks before publishing content
+ - updated groups management in forms
+
 0.1.13
 ------
  - renamed factories to use snake_case on functions
--- a/src/pyams_content.egg-info/PKG-INFO	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content.egg-info/PKG-INFO	Mon Jun 11 10:00:17 2018 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyams-content
-Version: 0.1.13
+Version: 0.1.14
 Summary: PyAMS base content interfaces and classes
 Home-page: http://hg.ztfy.org/pyams/pyams_content
 Author: Thierry Florac
@@ -73,6 +73,10 @@
         History
         =======
         
+        0.1.14
+        ------
+         - updated groups management in forms
+        
         0.1.13
         ------
          - renamed factories to use snake_case on functions
--- a/src/pyams_content.egg-info/SOURCES.txt	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content.egg-info/SOURCES.txt	Mon Jun 11 10:00:17 2018 +0200
@@ -125,6 +125,16 @@
 src/pyams_content/features/checker/__init__.py
 src/pyams_content/features/checker/interfaces.py
 src/pyams_content/features/checker/zmi/__init__.py
+src/pyams_content/features/footer/__init__.py
+src/pyams_content/features/footer/interfaces/__init__.py
+src/pyams_content/features/footer/skin/__init__.py
+src/pyams_content/features/footer/zmi/__init__.py
+src/pyams_content/features/footer/zmi/templates/renderer-settings.pt
+src/pyams_content/features/header/__init__.py
+src/pyams_content/features/header/interfaces/__init__.py
+src/pyams_content/features/header/skin/__init__.py
+src/pyams_content/features/header/zmi/__init__.py
+src/pyams_content/features/header/zmi/templates/renderer-settings.pt
 src/pyams_content/features/preview/__init__.py
 src/pyams_content/features/preview/interfaces.py
 src/pyams_content/features/preview/zmi/__init__.py
@@ -132,6 +142,7 @@
 src/pyams_content/features/preview/zmi/templates/preview.pt
 src/pyams_content/features/renderer/__init__.py
 src/pyams_content/features/renderer/interfaces/__init__.py
+src/pyams_content/features/renderer/skin/__init__.py
 src/pyams_content/features/renderer/zmi/__init__.py
 src/pyams_content/features/renderer/zmi/widget.py
 src/pyams_content/features/renderer/zmi/templates/renderer-input.pt
@@ -236,12 +247,9 @@
 src/pyams_content/shared/imagemap/zmi/container.py
 src/pyams_content/shared/imagemap/zmi/paragraph.py
 src/pyams_content/shared/imagemap/zmi/properties.py
-src/pyams_content/shared/imagemap/zmi/render.py
 src/pyams_content/shared/imagemap/zmi/widget.py
 src/pyams_content/shared/imagemap/zmi/templates/container.pt
 src/pyams_content/shared/imagemap/zmi/templates/imagemap-preview.pt
-src/pyams_content/shared/imagemap/zmi/templates/paragraph-render.pt
-src/pyams_content/shared/imagemap/zmi/templates/render.pt
 src/pyams_content/shared/imagemap/zmi/templates/widget-input.pt
 src/pyams_content/shared/logo/__init__.py
 src/pyams_content/shared/logo/manager.py
@@ -275,8 +283,6 @@
 src/pyams_content/shared/view/interfaces/__init__.py
 src/pyams_content/shared/view/portlet/__init__.py
 src/pyams_content/shared/view/portlet/interfaces.py
-src/pyams_content/shared/view/portlet/templates/view-items-list.pt
-src/pyams_content/shared/view/portlet/templates/view-with-images-list.pt
 src/pyams_content/shared/view/portlet/zmi/__init__.py
 src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt
 src/pyams_content/shared/view/zmi/__init__.py
@@ -296,6 +302,7 @@
 src/pyams_content/skin/resources/js/jquery-imagemapster-1.2.10.min.js
 src/pyams_content/skin/resources/js/pyams_content.js
 src/pyams_content/skin/resources/js/pyams_content.min.js
+src/pyams_content/skin/resources/js/pyams_content.min.min.js
 src/pyams_content/skin/resources/js/tinymce/onflinks/plugin.js
 src/pyams_content/skin/resources/js/tinymce/onflinks/plugin.min.js
 src/pyams_content/skin/resources/js/tinymce/onflinks/langs/fr.js
--- a/src/pyams_content.egg-info/requires.txt	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content.egg-info/requires.txt	Mon Jun 11 10:00:17 2018 +0200
@@ -4,7 +4,7 @@
 persistent
 pyams_catalog
 pyams_file
-pyams_form
+pyams_form>=0.1.13
 pyams_i18n
 pyams_mail
 pyams_pagelet
--- a/src/pyams_content/component/gallery/interfaces/__init__.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/gallery/interfaces/__init__.py	Mon Jun 11 10:00:17 2018 +0200
@@ -93,7 +93,7 @@
 
     title = I18nTextLineField(title=_("Title"),
                               description=_("Gallery title, as shown in front-office"),
-                              required=True)
+                              required=False)
 
     description = I18nTextField(title=_("Description"),
                                 description=_("Gallery description displayed by front-office template"),
--- a/src/pyams_content/component/paragraph/interfaces/keynumber.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/keynumber.py	Mon Jun 11 10:00:17 2018 +0200
@@ -42,14 +42,18 @@
                    required=True,
                    default=True)
 
+    label = I18nTextLineField(title=_('key-number-label', default="Header"),
+                              description=_("Small text to be displayed above number (according to selected "
+                                            "renderer)"),
+                              required=False)
+
     number = TextLine(title=_("Number"),
                       description=_("Key number value"),
                       required=True)
 
-    label = I18nTextLineField(title=_('key-number-label', default="Header"),
-                              description=_("Small text to be displayed above number (according to selected "
-                                            "renderer)"),
-                              required=False)
+    unit = I18nTextLineField(title=_('key-number-unit', default="Unit"),
+                             description=_("Displayed unit"),
+                             required=False)
 
     text = I18nTextLineField(title=_("Associated text"),
                              description=_("The way this text will be rendered depends on presentation template"),
--- a/src/pyams_content/component/paragraph/interfaces/video.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/video.py	Mon Jun 11 10:00:17 2018 +0200
@@ -20,7 +20,7 @@
 
 # import packages
 from pyams_file.schema import VideoField
-from pyams_i18n.schema import I18nHTMLField, I18nTextField
+from pyams_i18n.schema import I18nTextField, I18nTextLineField
 from zope.schema import TextLine, Choice
 
 from pyams_content import _
@@ -38,8 +38,12 @@
 class IVideoParagraph(IBaseParagraph):
     """Video paragraph"""
 
-    body = I18nHTMLField(title=_("Body"),
-                         required=False)
+    data = VideoField(title=_("Video data"),
+                      description=_("Video file content"),
+                      required=True)
+
+    title = I18nTextLineField(title=_("Legend"),
+                              required=False)
 
     description = I18nTextField(title=_("Description"),
                                 description=_("File description displayed by front-office template"),
@@ -49,10 +53,6 @@
                       description=_("Name of document's author"),
                       required=False)
 
-    data = VideoField(title=_("Video data"),
-                      description=_("Video file content"),
-                      required=True)
-
     renderer = Choice(title=_("Video template"),
                       description=_("Presentation template used for this video"),
                       vocabulary=VIDEO_PARAGRAPH_RENDERERS,
--- a/src/pyams_content/component/paragraph/keynumber.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/keynumber.py	Mon Jun 11 10:00:17 2018 +0200
@@ -57,8 +57,9 @@
     """Key number persistent class"""
 
     visible = FieldProperty(IKeyNumber['visible'])
+    label = FieldProperty(IKeyNumber['label'])
     number = FieldProperty(IKeyNumber['number'])
-    label = FieldProperty(IKeyNumber['label'])
+    unit = FieldProperty(IKeyNumber['unit'])
     text = FieldProperty(IKeyNumber['text'])
 
 
--- a/src/pyams_content/component/paragraph/video.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/video.py	Mon Jun 11 10:00:17 2018 +0200
@@ -43,10 +43,9 @@
     icon_class = 'fa-film'
     icon_hint = VIDEO_PARAGRAPH_NAME
 
-    body = FieldProperty(IVideoParagraph['body'])
+    data = FileProperty(IVideoParagraph['data'])
     description = FieldProperty(IVideoParagraph['description'])
     author = FieldProperty(IVideoParagraph['author'])
-    data = FileProperty(IVideoParagraph['data'])
     renderer = FieldProperty(IVideoParagraph['renderer'])
 
 
--- a/src/pyams_content/component/paragraph/zmi/keynumber.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/keynumber.py	Mon Jun 11 10:00:17 2018 +0200
@@ -220,25 +220,37 @@
     return switch_element_visibility(request, IKeyNumberContainer)
 
 
+@adapter_config(name='label', context=(IKeyNumberContainerTarget, IPyAMSLayer, KeyNumbersTable), provides=IColumn)
+class KeyNumbersTableLabelColumn(I18nColumn, I18nAttrColumn):
+    """Key numbers table label column"""
+
+    _header = _('key-number-label', default="Header")
+    attrName = 'label'
+    weight = 10
+
+    def getValue(self, obj):
+        return super(KeyNumbersTableLabelColumn, self).getValue(obj) or '--'
+
+
 @adapter_config(name='name', context=(IKeyNumberContainerTarget, IPyAMSLayer, KeyNumbersTable), provides=IColumn)
 class KeyNumbersTableNameColumn(I18nColumn, GetAttrColumn):
     """Key numbers table number column"""
 
     _header = _("Number")
     attrName = 'number'
-    weight = 10
+    weight = 20
 
 
-@adapter_config(name='label', context=(IKeyNumberContainerTarget, IPyAMSLayer, KeyNumbersTable), provides=IColumn)
-class KeyNumbersTableLabelColumn(I18nColumn, I18nAttrColumn):
-    """Key numbers table label column"""
+@adapter_config(name='unit', context=(IKeyNumberContainerTarget, IPyAMSLayer, KeyNumbersTable), provides=IColumn)
+class KeyNumbersTableUnitColumn(I18nColumn, I18nAttrColumn):
+    """Key numbers table unit column"""
 
-    _header = _('key-number-label', default="Header")
-    attrName = 'label'
-    weight = 20
+    _header = _('key-number-unit', default="Unit")
+    attrName = 'unit'
+    weight = 30
 
     def getValue(self, obj):
-        return super(KeyNumbersTableLabelColumn, self).getValue(obj) or '--'
+        return super(KeyNumbersTableUnitColumn, self).getValue(obj) or '--'
 
 
 @adapter_config(name='text', context=(IKeyNumberContainerTarget, IPyAMSLayer, KeyNumbersTable), provides=IColumn)
@@ -247,7 +259,7 @@
 
     _header = _("Associated text")
     attrName = 'text'
-    weight = 30
+    weight = 40
 
     def getValue(self, obj):
         return super(KeyNumbersTableTextColumn, self).getValue(obj) or '--'
--- a/src/pyams_content/component/paragraph/zmi/pictogram.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/pictogram.py	Mon Jun 11 10:00:17 2018 +0200
@@ -310,7 +310,7 @@
 
 @pagelet_config(name='add-pictogram.html', context=IPictogramContainerTarget, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
-@ajax_config(name='add-pictogram.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
+@ajax_config(name='add-pictogram.json', context=IPictogramContainerTarget, layer=IPyAMSLayer,
              base=AJAXAddForm)
 class PictogramAddForm(AdminDialogAddForm):
     """Pictogram add form"""
--- a/src/pyams_content/component/paragraph/zmi/video.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/video.py	Mon Jun 11 10:00:17 2018 +0200
@@ -31,16 +31,14 @@
 # import packages
 from pyams_content.component.paragraph.video import VideoParagraph
 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
-    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons
+    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons, get_json_paragraph_refresh_event
 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
 from pyams_form.form import ajax_config
-from pyams_form.group import NamedWidgetsGroup
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.event import get_json_form_refresh_event, get_json_widget_refresh_event
 from pyams_utils.adapter import adapter_config
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
-from pyramid.view import view_config
 from z3c.form import field, button
 from zope.interface import implementer
 
@@ -76,20 +74,6 @@
         super(VideoParagraphAddForm, self).updateWidgets(prefix)
         if 'description' in self.widgets:
             self.widgets['description'].widget_css_class = 'textarea'
-        if 'body' in self.widgets:
-            self.widgets['body'].label = ''
-            
-    def updateGroups(self):
-        self.add_group(NamedWidgetsGroup(self, 'body_group', self.widgets, ('body',),
-                                         bordered=False,
-                                         legend=_("HTML content"),
-                                         css_class='inner switcher padding-right-10 no-y-padding pull-left',
-                                         switch=True,
-                                         display_mode='auto'))
-        self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
-                                         ('description', 'author', 'data', 'renderer'),
-                                         bordered=False))
-        super(VideoParagraphAddForm, self).updateGroups()
 
     def create(self, data):
         return VideoParagraph()
@@ -120,21 +104,6 @@
         super(VideoParagraphPropertiesEditForm, self).updateWidgets(prefix)
         if 'description' in self.widgets:
             self.widgets['description'].widget_css_class = 'textarea'
-        if 'body' in self.widgets:
-            self.widgets['body'].label = ''
-            
-    def updateGroups(self):
-        self.add_group(NamedWidgetsGroup(self, 'body_group', self.widgets, ('body',),
-                                         bordered=False,
-                                         fieldset_class='margin-top-10 padding-y-5',
-                                         legend=_("HTML content"),
-                                         css_class='inner switcher padding-right-10 no-y-padding pull-left',
-                                         switch=True,
-                                         display_mode='auto'))
-        self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
-                                         ('description', 'author', 'data', 'renderer'),
-                                         bordered=False))
-        super(VideoParagraphPropertiesEditForm, self).updateGroups()
 
 
 @adapter_config(context=(IVideoParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
@@ -161,8 +130,12 @@
             ITransactionManager(self.context).get().commit()
             output.setdefault('events', []).append(
                 get_json_form_refresh_event(self.context, self.request, VideoParagraphPropertiesInnerEditForm))
-        elif 'renderer' in updated:
-            output.setdefault('events', []).append(
-                get_json_widget_refresh_event(self.context, self.request,
-                                              VideoParagraphPropertiesInnerEditForm, 'renderer'))
+        else:
+            if 'title' in updated:
+                output.setdefault('events', []).append(
+                    get_json_paragraph_refresh_event(self.context, self.request))
+            if 'renderer' in updated:
+                output.setdefault('events', []).append(
+                    get_json_widget_refresh_event(self.context, self.request,
+                                                  VideoParagraphPropertiesInnerEditForm, 'renderer'))
         return output
--- a/src/pyams_content/component/video/interfaces/__init__.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/video/interfaces/__init__.py	Mon Jun 11 10:00:17 2018 +0200
@@ -21,7 +21,7 @@
 from zope.contentprovider.interfaces import IContentProvider
 
 # import packages
-from pyams_i18n.schema import I18nHTMLField, I18nTextField
+from pyams_i18n.schema import I18nTextField, I18nTextLineField
 from zope.interface import Interface, Attribute
 from zope.schema import Choice, TextLine
 
@@ -72,8 +72,8 @@
 class IExternalVideoParagraph(IExternalVideo, IBaseParagraph):
     """External video paragraph"""
 
-    body = I18nHTMLField(title=_("Body"),
-                         required=False)
+    title = I18nTextLineField(title=_("Legend"),
+                              required=False)
 
     renderer = Choice(title=_("Video template"),
                       description=_("Presentation template used for this video"),
--- a/src/pyams_content/component/video/paragraph.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/video/paragraph.py	Mon Jun 11 10:00:17 2018 +0200
@@ -44,7 +44,6 @@
     icon_class = 'fa-youtube-play'
     icon_hint = EXTERNAL_VIDEO_PARAGRAPH_NAME
 
-    body = FieldProperty(IExternalVideoParagraph['body'])
     renderer = FieldProperty(IExternalVideoParagraph['renderer'])
 
 
--- a/src/pyams_content/component/video/zmi/paragraph.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/component/video/zmi/paragraph.py	Mon Jun 11 10:00:17 2018 +0200
@@ -76,15 +76,13 @@
     dialog_class = 'modal-large'
     icon_css_class = 'fa fa-fw fa-youtube-play'
 
-    fields = field.Fields(IExternalVideoParagraph).omit('__parent__', '__name__', 'visible')
+    fields = field.Fields(IExternalVideoParagraph).select('title', 'description', 'author', 'renderer', 'provider_name')
     edit_permission = MANAGE_CONTENT_PERMISSION
 
     def updateWidgets(self, prefix=None):
         super(ExternalVideoParagraphAddForm, self).updateWidgets(prefix)
         if 'description' in self.widgets:
             self.widgets['description'].widget_css_class = 'textarea'
-        if 'body' in self.widgets:
-            self.widgets['body'].label = ''
         if 'provider_name' in self.widgets:
             widget = self.widgets['provider_name']
             widget.object_data = {
@@ -98,19 +96,6 @@
             }
             alsoProvides(widget, IObjectData)
 
-    def updateGroups(self):
-        if 'body' in self.widgets:
-            self.add_group(NamedWidgetsGroup(self, 'body_group', self.widgets, ('body',),
-                                             bordered=False,
-                                             legend=_("HTML content"),
-                                             css_class='inner switcher padding-right-10 no-y-padding pull-left',
-                                             switch=True,
-                                             display_mode='auto'))
-            self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
-                                             ('description', 'author', 'renderer', 'provider_name'),
-                                             bordered=False))
-        super(ExternalVideoParagraphAddForm, self).updateGroups()
-
     def create(self, data):
         return ExternalVideoParagraph()
 
@@ -211,7 +196,8 @@
 
     @property
     def fields(self):
-        fields = field.Fields(IExternalVideoParagraph).omit('__parent__', '__name__', 'visible')
+        fields = field.Fields(IExternalVideoParagraph).select('title', 'description', 'author', 'renderer',
+                                                              'provider_name')
         fields['renderer'].widgetFactory = RendererFieldWidget
         provider = self.context.get_provider()
         if provider is not None:
@@ -222,23 +208,10 @@
         super(ExternalVideoParagraphPropertiesEditForm, self).updateWidgets(prefix)
         if 'description' in self.widgets:
             self.widgets['description'].widget_css_class = 'textarea'
-        if 'body' in self.widgets:
-            self.widgets['body'].label = ''
         if 'provider_name' in self.widgets:
             self.widgets['provider_name'].mode = DISPLAY_MODE
 
     def updateGroups(self):
-        if 'body' in self.widgets:
-            self.add_group(NamedWidgetsGroup(self, 'body_group', self.widgets, ('body',),
-                                             bordered=False,
-                                             fieldset_class='margin-top-10 padding-y-5',
-                                             legend=_("HTML content"),
-                                             css_class='inner switcher padding-right-10 no-y-padding pull-left',
-                                             switch=True,
-                                             display_mode='auto'))
-            self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
-                                             ('description', 'author', 'renderer', 'provider_name'),
-                                             bordered=False))
         if 'provider_name' in self.widgets:
             provider = self.context.get_provider()
             if provider is not None:
@@ -261,7 +234,7 @@
 
     def get_ajax_output(self, changes):
         output = super(self.__class__, self).get_ajax_output(changes)
-        if 'title' in changes.get(IBaseParagraph, ()):
+        if 'title' in changes.get(IExternalVideoParagraph, ()):
             output.setdefault('events', []).append(
                 get_json_paragraph_refresh_event(self.context, self.request))
         return output
--- a/src/pyams_content/features/footer/zmi/__init__.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/features/footer/zmi/__init__.py	Mon Jun 11 10:00:17 2018 +0200
@@ -29,10 +29,10 @@
 from z3c.form.interfaces import INPUT_MODE
 
 # import packages
-from pyams_form.form import ajax_config
+from pyams_form.form import AJAXEditForm
 from pyams_form.group import NamedWidgetsGroup
 from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.viewlet.menu import MenuItem
+from pyams_skin.viewlet.menu import MenuItem, MenuDivider
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
 from pyams_utils.url import absolute_url
@@ -63,8 +63,6 @@
 
 @pagelet_config(name='footer-settings.html', context=IFooterTarget, layer=IPyAMSLayer,
                 permission=MANAGE_TEMPLATE_PERMISSION)
-@ajax_config(name='footer-settings.json', context=IFooterTarget, layer=IPyAMSLayer,
-             permission=MANAGE_TEMPLATE_PERMISSION)
 @implementer(IWidgetForm, IInnerPage)
 class FooterSettingsEditForm(AdminEditForm):
     """Footer settings edit form"""
@@ -94,6 +92,8 @@
         else:
             return button.Buttons(Interface)
 
+    ajax_handler = 'footer-settings.json'
+
     def updateGroups(self):
         if self.getContent().can_inherit:
             group = NamedWidgetsGroup(self, 'footer', self.widgets,
@@ -110,8 +110,14 @@
         self.add_group(group)
         super(FooterSettingsEditForm, self).updateGroups()
 
+
+@view_config(name='footer-settings.json', context=IFooterTarget, request_type=IPyAMSLayer,
+             permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
+class FooterSettingsAJAXEditForm(AJAXEditForm, FooterSettingsEditForm):
+    """Footer settings edit form, JSON renderer"""
+
     def get_ajax_output(self, changes):
-        output = super(self.__class__, self).get_ajax_output(changes) or {}
+        output = super(FooterSettingsAJAXEditForm, self).get_ajax_output(changes) or {}
         if 'no_inherit' in changes.get(IInheritInfo, ()):
             output['status'] = 'reload'
         return output
@@ -158,7 +164,7 @@
                 context=(IFooterRendererSettings, IPyAMSLayer, FooterSettingsRendererEditSubform),
                 provides=IInnerSubForm)
 @adapter_config(name='footer-renderer-settings-form',
-                context=(IFooterTarget, IPyAMSLayer, FooterSettingsEditForm),
+                context=(IFooterTarget, IPyAMSLayer, FooterSettingsAJAXEditForm),
                 provides=IInnerSubForm)
 class FooterSettingsRendererSettingsEditForm(InnerAdminEditForm):
     """Footer settings renderer settings edit form"""
--- a/src/pyams_content/features/header/zmi/__init__.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/features/header/zmi/__init__.py	Mon Jun 11 10:00:17 2018 +0200
@@ -29,7 +29,7 @@
 from z3c.form.interfaces import INPUT_MODE
 
 # import packages
-from pyams_form.form import ajax_config
+from pyams_form.form import AJAXEditForm
 from pyams_form.group import NamedWidgetsGroup
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.viewlet.menu import MenuItem, MenuDivider
@@ -69,8 +69,6 @@
 
 @pagelet_config(name='header-settings.html', context=IHeaderTarget, layer=IPyAMSLayer,
                 permission=MANAGE_TEMPLATE_PERMISSION)
-@ajax_config(name='header-settings.json', context=IHeaderTarget, layer=IPyAMSLayer,
-             permission=MANAGE_TEMPLATE_PERMISSION)
 @implementer(IWidgetForm, IInnerPage)
 class HeaderSettingsEditForm(AdminEditForm):
     """Header settings edit form"""
@@ -100,6 +98,8 @@
         else:
             return button.Buttons(Interface)
 
+    ajax_handler = 'header-settings.json'
+
     def updateGroups(self):
         if self.getContent().can_inherit:
             group = NamedWidgetsGroup(self, 'header', self.widgets,
@@ -116,8 +116,14 @@
         self.add_group(group)
         super(HeaderSettingsEditForm, self).updateGroups()
 
+
+@view_config(name='header-settings.json', context=IHeaderTarget, request_type=IPyAMSLayer,
+             permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
+class HeaderSettingsAJAXEditForm(AJAXEditForm, HeaderSettingsEditForm):
+    """Header settings edit form, JSON renderer"""
+
     def get_ajax_output(self, changes):
-        output = super(self.__class__, self).get_ajax_output(changes) or {}
+        output = super(HeaderSettingsAJAXEditForm, self).get_ajax_output(changes) or {}
         if 'no_inherit' in changes.get(IInheritInfo, ()):
             output['status'] = 'reload'
         return output
@@ -164,7 +170,7 @@
                 context=(IHeaderRendererSettings, IPyAMSLayer, HeaderSettingsRendererEditSubform),
                 provides=IInnerSubForm)
 @adapter_config(name='header-renderer-settings-form',
-                context=(IHeaderTarget, IPyAMSLayer, HeaderSettingsEditForm),
+                context=(IHeaderTarget, IPyAMSLayer, HeaderSettingsAJAXEditForm),
                 provides=IInnerSubForm)
 class HeaderSettingsRendererSettingsEditForm(InnerAdminEditForm):
     """Header settings renderer settings edit form"""
Binary file src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo has changed
--- a/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Mon Jun 11 10:00:17 2018 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-06-06 13:20+0200\n"
+"POT-Creation-Date: 2018-06-08 17:54+0200\n"
 "PO-Revision-Date: 2015-09-10 10:42+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -80,25 +80,25 @@
 msgid "Gallery"
 msgstr "Galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/file.py:58
+#: src/pyams_content/component/gallery/zmi/file.py:57
 #: src/pyams_content/component/gallery/zmi/file.py:69
-#: src/pyams_content/component/gallery/zmi/paragraph.py:174
+#: src/pyams_content/component/gallery/zmi/paragraph.py:164
 msgid "Add media(s)"
 msgstr "Ajouter des médias"
 
-#: src/pyams_content/component/gallery/zmi/file.py:189
+#: src/pyams_content/component/gallery/zmi/file.py:184
 msgid "Update media properties"
 msgstr "Propriétés du média"
 
-#: src/pyams_content/component/gallery/zmi/file.py:249
+#: src/pyams_content/component/gallery/zmi/file.py:238
 msgid "Remove media..."
 msgstr "Supprimer le média"
 
-#: src/pyams_content/component/gallery/zmi/file.py:154
+#: src/pyams_content/component/gallery/zmi/file.py:148
 msgid "Show/hide media"
 msgstr "Cliquez pour rendre le média visible ou non"
 
-#: src/pyams_content/component/gallery/zmi/file.py:216
+#: src/pyams_content/component/gallery/zmi/file.py:211
 msgid "Audio content"
 msgstr "Contenu audio associé"
 
@@ -106,25 +106,25 @@
 msgid "Medias gallery..."
 msgstr "Galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/paragraph.py:67
+#: src/pyams_content/component/gallery/zmi/paragraph.py:69
 msgid "Add new gallery"
 msgstr "Ajout d'une galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/paragraph.py:99
+#: src/pyams_content/component/gallery/zmi/paragraph.py:96
 msgid "Edit gallery properties"
 msgstr "Propriétés de la galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/__init__.py:62
+#: src/pyams_content/component/gallery/zmi/__init__.py:63
 msgid "Update gallery properties"
 msgstr "Propriétés de la galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/__init__.py:101
+#: src/pyams_content/component/gallery/zmi/__init__.py:95
 msgid "Update gallery contents"
 msgstr "Contenu de la galerie de médias"
 
 #: src/pyams_content/component/gallery/zmi/interfaces.py:36
 msgid "Images or videos data"
-msgstr "Fichier (image ou vidéo)"
+msgstr "Fichier"
 
 #: src/pyams_content/component/gallery/zmi/interfaces.py:37
 msgid "You can upload a single file or choose to upload a whole ZIP archive"
@@ -136,7 +136,7 @@
 #: src/pyams_content/component/gallery/interfaces/__init__.py:61
 #: src/pyams_content/component/extfile/interfaces/__init__.py:44
 #: src/pyams_content/component/illustration/interfaces/__init__.py:56
-#: src/pyams_content/component/paragraph/interfaces/video.py:48
+#: src/pyams_content/component/paragraph/interfaces/video.py:52
 #: src/pyams_content/component/paragraph/interfaces/audio.py:48
 #: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
 #: src/pyams_content/component/video/interfaces/__init__.py:52
@@ -146,7 +146,7 @@
 #: src/pyams_content/component/gallery/zmi/interfaces.py:41
 #: src/pyams_content/component/gallery/interfaces/__init__.py:62
 #: src/pyams_content/component/extfile/interfaces/__init__.py:45
-#: src/pyams_content/component/paragraph/interfaces/video.py:49
+#: src/pyams_content/component/paragraph/interfaces/video.py:53
 #: src/pyams_content/component/paragraph/interfaces/audio.py:49
 #: src/pyams_content/component/video/interfaces/__init__.py:53
 msgid "Name of document's author"
@@ -194,6 +194,8 @@
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:51
 #: src/pyams_content/component/illustration/interfaces/__init__.py:45
+#: src/pyams_content/component/paragraph/interfaces/video.py:45
+#: src/pyams_content/component/video/interfaces/__init__.py:75
 msgid "Legend"
 msgstr "Légende"
 
@@ -215,7 +217,7 @@
 #: src/pyams_content/component/gallery/interfaces/__init__.py:98
 #: src/pyams_content/component/extfile/interfaces/__init__.py:40
 #: src/pyams_content/component/illustration/interfaces/__init__.py:52
-#: src/pyams_content/component/paragraph/interfaces/video.py:44
+#: src/pyams_content/component/paragraph/interfaces/video.py:48
 #: src/pyams_content/component/paragraph/interfaces/audio.py:44
 #: src/pyams_content/component/links/interfaces/__init__.py:37
 #: src/pyams_content/component/video/interfaces/__init__.py:48
@@ -273,7 +275,7 @@
 msgstr "Si 'non', ce média ne sera pas présenté aux internautes"
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:94
-#: src/pyams_content/component/paragraph/zmi/milestone.py:246
+#: src/pyams_content/component/paragraph/zmi/milestone.py:231
 #: src/pyams_content/component/paragraph/zmi/container.py:224
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:45
 #: src/pyams_content/component/links/zmi/reverse.py:71
@@ -283,7 +285,7 @@
 #: src/pyams_content/shared/site/zmi/folder.py:68
 #: src/pyams_content/root/zmi/templates/advanced-search.pt:188
 #: src/pyams_content/interfaces/__init__.py:99
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:165
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:152
 msgid "Title"
 msgstr "Titre"
 
@@ -338,59 +340,59 @@
 msgid "Add external file"
 msgstr "Fichier"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:101
+#: src/pyams_content/component/extfile/zmi/__init__.py:103
 msgid "Add new external file"
 msgstr "Ajout d'un fichier"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:141
+#: src/pyams_content/component/extfile/zmi/__init__.py:138
 msgid "Update file properties"
 msgstr "Propriétés du fichier"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:181
+#: src/pyams_content/component/extfile/zmi/__init__.py:171
 msgid "Images"
 msgstr "Images"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:196
+#: src/pyams_content/component/extfile/zmi/__init__.py:186
 msgid "Add image"
 msgstr "Image téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:208
+#: src/pyams_content/component/extfile/zmi/__init__.py:200
 msgid "Add new image"
 msgstr "Ajout d'une image téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:244
+#: src/pyams_content/component/extfile/zmi/__init__.py:231
 msgid "Update image properties"
 msgstr "Propriétés de l'image téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:283
+#: src/pyams_content/component/extfile/zmi/__init__.py:264
 msgid "Videos"
 msgstr "Vidéos"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:298
+#: src/pyams_content/component/extfile/zmi/__init__.py:279
 msgid "Add video"
 msgstr "Vidéo téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:310
+#: src/pyams_content/component/extfile/zmi/__init__.py:293
 msgid "Add new video"
 msgstr "Ajout d'une vidéo téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:339
+#: src/pyams_content/component/extfile/zmi/__init__.py:317
 msgid "Update video properties"
 msgstr "Propriétés de la vidéo téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:371
+#: src/pyams_content/component/extfile/zmi/__init__.py:343
 msgid "Audios files"
 msgstr "Fichiers audios"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:386
+#: src/pyams_content/component/extfile/zmi/__init__.py:358
 msgid "Add audio file"
 msgstr "Bande son téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:398
+#: src/pyams_content/component/extfile/zmi/__init__.py:372
 msgid "Add new audio file"
 msgstr "Ajout d'une bande son téléchargeable"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:427
+#: src/pyams_content/component/extfile/zmi/__init__.py:396
 msgid "Update audio file properties"
 msgstr "Propriétés de la bande son téléchargeable"
 
@@ -410,7 +412,7 @@
 msgstr "Titre présenté aux internautes"
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:41
-#: src/pyams_content/component/paragraph/interfaces/video.py:45
+#: src/pyams_content/component/paragraph/interfaces/video.py:49
 #: src/pyams_content/component/paragraph/interfaces/audio.py:45
 #: src/pyams_content/component/video/interfaces/__init__.py:49
 msgid "File description displayed by front-office template"
@@ -456,7 +458,7 @@
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:81
-#: src/pyams_content/component/paragraph/interfaces/video.py:52
+#: src/pyams_content/component/paragraph/interfaces/video.py:41
 msgid "Video data"
 msgstr "Fichier"
 
@@ -471,7 +473,7 @@
 msgstr ""
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
 
-#: src/pyams_content/component/illustration/__init__.py:132
+#: src/pyams_content/component/illustration/__init__.py:133
 #: src/pyams_content/component/illustration/zmi/__init__.py:54
 #: src/pyams_content/component/illustration/zmi/__init__.py:81
 #: src/pyams_content/component/illustration/interfaces/__init__.py:71
@@ -482,11 +484,11 @@
 msgid "Illustration..."
 msgstr "Illustration"
 
-#: src/pyams_content/component/illustration/zmi/paragraph.py:68
+#: src/pyams_content/component/illustration/zmi/paragraph.py:70
 msgid "Add new illustration"
 msgstr "Ajout d'une illustration"
 
-#: src/pyams_content/component/illustration/zmi/paragraph.py:102
+#: src/pyams_content/component/illustration/zmi/paragraph.py:100
 msgid "Edit illustration properties"
 msgstr "Propriétés de l'illustration"
 
@@ -542,62 +544,62 @@
 msgid "Milestones..."
 msgstr "Chronologie"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:88
+#: src/pyams_content/component/paragraph/zmi/milestone.py:90
 msgid "Add new milestone paragraph"
 msgstr "Ajout d'une chronologie"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:120
+#: src/pyams_content/component/paragraph/zmi/milestone.py:117
 msgid "Edit milestone paragraph properties"
 msgstr "Propriétés de la chronologie"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:258
+#: src/pyams_content/component/paragraph/zmi/milestone.py:243
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:49
 msgid "Associated label"
 msgstr "Information associée"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:270
+#: src/pyams_content/component/paragraph/zmi/milestone.py:255
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:53
 msgid "Anchor"
 msgstr "Ancre"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:299
+#: src/pyams_content/component/paragraph/zmi/milestone.py:284
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:76
 msgid "Milestones"
 msgstr "Chronologie"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:314
+#: src/pyams_content/component/paragraph/zmi/milestone.py:299
 msgid "Add milestone"
 msgstr "Ajouter un jalon"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:325
+#: src/pyams_content/component/paragraph/zmi/milestone.py:312
 msgid "Add new milestone"
 msgstr "Ajout d'un jalon"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:358
+#: src/pyams_content/component/paragraph/zmi/milestone.py:339
 msgid "Edit milestone properties"
 msgstr "Propriétés du jalon"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:347
+#: src/pyams_content/component/paragraph/zmi/milestone.py:327
 msgid "Milestone was correctly added"
 msgstr "Le jalon a été ajouté."
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:285
+#: src/pyams_content/component/paragraph/zmi/milestone.py:270
 msgid "(missing paragraph)"
 msgstr "(paragraphe supprimé)"
 
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:50
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:51
 msgid "Key points..."
 msgstr "Points clés"
 
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:61
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:64
 msgid "Add new key points paragraph"
 msgstr "Ajout de points clés"
 
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:93
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:91
 msgid "Edit key points paragraph properties"
 msgstr "Propriétés des points clés"
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:66
+#: src/pyams_content/component/paragraph/zmi/__init__.py:65
 msgid "Content block types..."
 msgstr "Types de blocs de contenu"
 
@@ -605,7 +607,7 @@
 msgid "Content block types"
 msgstr "Types de blocs de contenu"
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:96
+#: src/pyams_content/component/paragraph/zmi/__init__.py:89
 msgid ""
 "You can define which types of paragraphs are allowed in this container.\n"
 "\n"
@@ -624,61 +626,52 @@
 "REMARQUE : supprimer des types de la liste des types de blocs autorisés sera "
 "sans effet sur les contenus existants."
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:214
+#: src/pyams_content/component/paragraph/zmi/__init__.py:207
 #: src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
 #: src/pyams_content/features/preview/zmi/__init__.py:45
 msgid "Preview"
 msgstr "Aperçu"
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:219
+#: src/pyams_content/component/paragraph/zmi/__init__.py:212
 #: src/pyams_content/shared/common/zmi/workflow.py:125
-#: src/pyams_content/shared/common/zmi/workflow.py:217
-#: src/pyams_content/shared/common/zmi/workflow.py:262
-#: src/pyams_content/shared/common/zmi/workflow.py:321
-#: src/pyams_content/shared/common/zmi/workflow.py:415
-#: src/pyams_content/shared/common/zmi/workflow.py:476
-#: src/pyams_content/shared/common/zmi/workflow.py:521
-#: src/pyams_content/shared/common/zmi/workflow.py:567
+#: src/pyams_content/shared/common/zmi/workflow.py:212
+#: src/pyams_content/shared/common/zmi/workflow.py:252
+#: src/pyams_content/shared/common/zmi/workflow.py:306
+#: src/pyams_content/shared/common/zmi/workflow.py:395
+#: src/pyams_content/shared/common/zmi/workflow.py:451
+#: src/pyams_content/shared/common/zmi/workflow.py:491
+#: src/pyams_content/shared/common/zmi/workflow.py:532
+#: src/pyams_content/shared/common/zmi/workflow.py:575
 #: src/pyams_content/shared/common/zmi/workflow.py:615
-#: src/pyams_content/shared/common/zmi/workflow.py:660
-#: src/pyams_content/shared/common/zmi/workflow.py:706
-#: src/pyams_content/shared/common/zmi/workflow.py:762
-#: src/pyams_content/shared/common/zmi/__init__.py:276
-#: src/pyams_content/shared/common/zmi/owner.py:74
+#: src/pyams_content/shared/common/zmi/workflow.py:656
+#: src/pyams_content/shared/common/zmi/workflow.py:707
+#: src/pyams_content/shared/common/zmi/__init__.py:275
+#: src/pyams_content/shared/common/zmi/owner.py:73
 #: src/pyams_content/features/review/zmi/__init__.py:90
 msgid "Cancel"
 msgstr "Annuler"
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:221
+#: src/pyams_content/component/paragraph/zmi/__init__.py:214
 msgid "Submit"
 msgstr "Enregistrer"
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:202
+#: src/pyams_content/component/paragraph/zmi/__init__.py:195
 msgid "Paragraph was correctly added."
 msgstr "Le bloc a été ajouté."
 
-#: src/pyams_content/component/paragraph/zmi/video.py:54
+#: src/pyams_content/component/paragraph/zmi/video.py:53
 msgid "Video paragraph..."
 msgstr "Vidéo"
 
-#: src/pyams_content/component/paragraph/zmi/video.py:65
+#: src/pyams_content/component/paragraph/zmi/video.py:66
 msgid "Add new video paragraph"
 msgstr "Ajout d'une vidéo"
 
-#: src/pyams_content/component/paragraph/zmi/video.py:112
-#: src/pyams_content/component/video/zmi/paragraph.py:209
+#: src/pyams_content/component/paragraph/zmi/video.py:94
+#: src/pyams_content/component/video/zmi/paragraph.py:192
 msgid "Edit video properties"
 msgstr "Propriétés de la vidéo"
 
-#: src/pyams_content/component/paragraph/zmi/video.py:83
-#: src/pyams_content/component/paragraph/zmi/video.py:133
-#: src/pyams_content/component/paragraph/zmi/audio.py:83
-#: src/pyams_content/component/paragraph/zmi/audio.py:133
-#: src/pyams_content/component/video/zmi/paragraph.py:103
-#: src/pyams_content/component/video/zmi/paragraph.py:238
-msgid "HTML content"
-msgstr "Contenu HTML"
-
 #: src/pyams_content/component/paragraph/zmi/container.py:74
 msgid "Contents..."
 msgstr "Contenu"
@@ -723,62 +716,62 @@
 msgid "Pictograms..."
 msgstr "Pictogrammes"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:94
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:96
 msgid "Add new pictogram paragraph"
 msgstr "Ajout de pictogrammes"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:126
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:123
 msgid "Edit pictogram paragraph properties"
 msgstr "Propriétés des pictogrammes"
 
 #. Default: Header
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:268
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:253
 msgid "pictogram-item-header"
 msgstr "En-tête"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:283
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:263
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:268
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:260
 #: src/pyams_content/component/paragraph/interfaces/pictogram.py:58
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:54
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:58
 msgid "Associated text"
 msgstr "Texte associé"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:305
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:290
 #: src/pyams_content/component/paragraph/interfaces/pictogram.py:80
 msgid "Pictograms"
 msgstr "Pictogrammes"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:320
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:62
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:305
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:61
 msgid "Add pictogram"
 msgstr "Ajouter un pictogramme"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:331
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:318
 #: src/pyams_content/reference/pictograms/zmi/__init__.py:73
 msgid "Add new pictogram"
 msgstr "Ajout d'un pictogramme"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:393
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:103
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:374
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:97
 msgid "Edit pictogram properties"
 msgstr "Propriétés du pictogramme"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:374
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:354
 msgid "Pictogram was correctly added"
 msgstr "Le pictogramme a été ajouté."
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:384
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:448
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:364
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:422
 msgid "You must select a pictogram!"
 msgstr "Vous devez sélectionner un pictogramme !"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:347
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:186
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:333
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:173
 msgid "Default header: --"
 msgstr "En-tête par défaut : --"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:414
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:190
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:394
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:177
 #, python-format
 msgid "Default header: {0}"
 msgstr "En-tête par défaut : {0}"
@@ -787,55 +780,66 @@
 msgid "Audio paragraph..."
 msgstr "Bande son"
 
-#: src/pyams_content/component/paragraph/zmi/audio.py:65
+#: src/pyams_content/component/paragraph/zmi/audio.py:67
 msgid "Add new audio paragraph"
 msgstr "Ajout d'une bande son"
 
-#: src/pyams_content/component/paragraph/zmi/audio.py:112
+#: src/pyams_content/component/paragraph/zmi/audio.py:108
 msgid "Edit audio properties"
 msgstr "Propriétés de la bande son"
 
+#: src/pyams_content/component/paragraph/zmi/audio.py:84
+#: src/pyams_content/component/paragraph/zmi/audio.py:128
+msgid "HTML content"
+msgstr "Contenu HTML"
+
 #: src/pyams_content/component/paragraph/zmi/keynumber.py:76
 msgid "Key numbers..."
 msgstr "Chiffres-clés"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:87
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:89
 msgid "Add new key number paragraph"
 msgstr "Ajout de chiffres-clés"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:119
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:116
 msgid "Edit key number paragraph properties"
 msgstr "Propriétés des chiffres-clés"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:242
+#. Default: Header
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:227
 #: src/pyams_content/component/paragraph/interfaces/keynumber.py:45
-msgid "Number"
-msgstr "Chiffre"
-
-#. Default: Header
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:251
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:49
 msgid "key-number-label"
 msgstr "En-tête"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:282
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:76
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:239
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:50
+msgid "Number"
+msgstr "Chiffre"
+
+#. Default: Unit
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:248
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:54
+msgid "key-number-unit"
+msgstr "Unité"
+
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:279
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:80
 msgid "Key numbers"
 msgstr "Chiffres-clés"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:297
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:294
 msgid "Add keynumber"
 msgstr "Ajouter un chiffre-clé"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:308
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:307
 msgid "Add new keynumber"
 msgstr "Ajout d'un chiffre-clé"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:341
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:334
 msgid "Edit keynumber properties"
 msgstr "Propriétés du chiffre-clé"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:330
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:322
 msgid "Key number was correctly added"
 msgstr "Le chiffre-clé a été ajouté."
 
@@ -843,11 +847,11 @@
 msgid "Framed text..."
 msgstr "Encadré"
 
-#: src/pyams_content/component/paragraph/zmi/frame.py:96
+#: src/pyams_content/component/paragraph/zmi/frame.py:98
 msgid "Add new framed text paragraph"
 msgstr "Ajout d'un encadré"
 
-#: src/pyams_content/component/paragraph/zmi/frame.py:132
+#: src/pyams_content/component/paragraph/zmi/frame.py:129
 msgid "Edit framed text paragraph properties"
 msgstr "Propriétés de l'encadré"
 
@@ -855,11 +859,11 @@
 msgid "Verbatim..."
 msgstr "Verbatim"
 
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:67
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:69
 msgid "Add new verbatim paragraph"
 msgstr "Ajout d'un verbatim"
 
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:99
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:96
 msgid "Edit verbatim paragraph properties"
 msgstr "Propriétés du verbatim"
 
@@ -867,23 +871,23 @@
 msgid "Raw HTML..."
 msgstr "Code HTML"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:87
+#: src/pyams_content/component/paragraph/zmi/html.py:89
 msgid "Add new raw HTML paragraph"
 msgstr "Ajout d'un bloc de code HTML"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:122
+#: src/pyams_content/component/paragraph/zmi/html.py:119
 msgid "Edit raw HTML paragraph properties"
 msgstr "Propriétés du code HTML"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:174
+#: src/pyams_content/component/paragraph/zmi/html.py:159
 msgid "Rich text..."
 msgstr "Texte enrichi"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:185
+#: src/pyams_content/component/paragraph/zmi/html.py:172
 msgid "Add new rich text paragraph"
 msgstr "Ajout d'un bloc de texte enrichi"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:220
+#: src/pyams_content/component/paragraph/zmi/html.py:202
 msgid "Edit rich text paragraph properties"
 msgstr "Propriétés du texte enrichi"
 
@@ -891,11 +895,11 @@
 msgid "Contact card..."
 msgstr "Fiche contact"
 
-#: src/pyams_content/component/paragraph/zmi/contact.py:64
+#: src/pyams_content/component/paragraph/zmi/contact.py:66
 msgid "Add new contact card"
 msgstr "Ajout d'une fiche contact"
 
-#: src/pyams_content/component/paragraph/zmi/contact.py:97
+#: src/pyams_content/component/paragraph/zmi/contact.py:94
 msgid "Edit contact card properties"
 msgstr "Propriétés de la fiche contact"
 
@@ -903,11 +907,11 @@
 msgid "Header..."
 msgstr "Chapô"
 
-#: src/pyams_content/component/paragraph/zmi/header.py:61
+#: src/pyams_content/component/paragraph/zmi/header.py:63
 msgid "Add new header paragraph"
 msgstr "Ajout d'un chapô"
 
-#: src/pyams_content/component/paragraph/zmi/header.py:93
+#: src/pyams_content/component/paragraph/zmi/header.py:90
 msgid "Edit header paragraph properties"
 msgstr "Propriétés du chapô"
 
@@ -991,7 +995,7 @@
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:85
 #: src/pyams_content/shared/common/zmi/types.py:167
-#: src/pyams_content/shared/common/zmi/types.py:395
+#: src/pyams_content/shared/common/zmi/types.py:380
 msgid "Default paragraphs"
 msgstr "Types de blocs par défaut"
 
@@ -999,14 +1003,7 @@
 msgid "List of paragraphs automatically added to a new content"
 msgstr "Liste des types de blocs ajoutés automatiquement aux nouveaux contenus"
 
-#: src/pyams_content/component/paragraph/interfaces/video.py:41
-#: src/pyams_content/component/paragraph/interfaces/audio.py:41
-#: src/pyams_content/component/paragraph/interfaces/html.py:63
-#: src/pyams_content/component/video/interfaces/__init__.py:75
-msgid "Body"
-msgstr "Contenu HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/video.py:53
+#: src/pyams_content/component/paragraph/interfaces/video.py:42
 msgid "Video file content"
 msgstr ""
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
@@ -1064,6 +1061,11 @@
 msgid "Audio"
 msgstr "Bande son"
 
+#: src/pyams_content/component/paragraph/interfaces/audio.py:41
+#: src/pyams_content/component/paragraph/interfaces/html.py:63
+msgid "Body"
+msgstr "Contenu HTML"
+
 #: src/pyams_content/component/paragraph/interfaces/audio.py:56
 msgid "Audio template"
 msgstr "Mode de rendu"
@@ -1077,26 +1079,30 @@
 msgstr "Si 'non', ce chiffre-clé ne sera pas présenté aux internautes"
 
 #: src/pyams_content/component/paragraph/interfaces/keynumber.py:46
-msgid "Key number value"
-msgstr "Chiffre"
-
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:50
 msgid ""
 "Small text to be displayed above number (according to selected renderer)"
 msgstr ""
 "Texte court affiché au-dessus du chiffre (selon le mode de rendu sélectionné)"
 
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:51
+msgid "Key number value"
+msgstr "Chiffre"
+
 #: src/pyams_content/component/paragraph/interfaces/keynumber.py:55
+msgid "Displayed unit"
+msgstr "Unité affichée"
+
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:59
 msgid "The way this text will be rendered depends on presentation template"
 msgstr ""
 "La présentation de cette information peut varier en fonction du mode de "
 "rendu choisi"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:83
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:87
 msgid "Key numbers template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:84
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:88
 msgid "Presentation template used for key numbers"
 msgstr "Modèle de présentation utilisé par ce bloc de contenu"
 
@@ -1254,8 +1260,8 @@
 msgid "no defined theme"
 msgstr "aucun thème défini"
 
-#: src/pyams_content/component/theme/zmi/__init__.py:52
-#: src/pyams_content/shared/view/zmi/theme.py:49
+#: src/pyams_content/component/theme/zmi/__init__.py:51
+#: src/pyams_content/shared/view/zmi/theme.py:48
 msgid "Themes..."
 msgstr "Thèmes"
 
@@ -1263,7 +1269,7 @@
 msgid "Content themes"
 msgstr "Thèmes du contenu"
 
-#: src/pyams_content/component/theme/zmi/manager.py:46
+#: src/pyams_content/component/theme/zmi/manager.py:45
 msgid "Themes settings..."
 msgstr "Paramétrage des thèmes"
 
@@ -1282,11 +1288,11 @@
 msgid "Associations..."
 msgstr "Liens et pièces jointes"
 
-#: src/pyams_content/component/association/zmi/paragraph.py:65
+#: src/pyams_content/component/association/zmi/paragraph.py:67
 msgid "Add new association paragraph"
 msgstr "Ajout d'un bloc  « liens et pièces jointes »"
 
-#: src/pyams_content/component/association/zmi/paragraph.py:97
+#: src/pyams_content/component/association/zmi/paragraph.py:93
 msgid "Edit association paragraph properties"
 msgstr "Propriétés du bloc « liens et pièces jointes »"
 
@@ -1347,43 +1353,43 @@
 msgid "Add internal link"
 msgstr "Lien interne"
 
-#: src/pyams_content/component/links/zmi/__init__.py:84
+#: src/pyams_content/component/links/zmi/__init__.py:86
 msgid "Add new internal link"
 msgstr "Ajout d'un lien interne"
 
-#: src/pyams_content/component/links/zmi/__init__.py:122
+#: src/pyams_content/component/links/zmi/__init__.py:119
 msgid "Edit internal link properties"
 msgstr "Propriétés du lien interne"
 
-#: src/pyams_content/component/links/zmi/__init__.py:160
+#: src/pyams_content/component/links/zmi/__init__.py:150
 msgid "External links"
 msgstr "Liens externes"
 
-#: src/pyams_content/component/links/zmi/__init__.py:175
+#: src/pyams_content/component/links/zmi/__init__.py:165
 msgid "Add external link"
 msgstr "Lien externe"
 
-#: src/pyams_content/component/links/zmi/__init__.py:187
+#: src/pyams_content/component/links/zmi/__init__.py:179
 msgid "Add new external link"
 msgstr "Ajout d'un lien externe"
 
-#: src/pyams_content/component/links/zmi/__init__.py:225
+#: src/pyams_content/component/links/zmi/__init__.py:212
 msgid "Edit external link properties"
 msgstr "Propriétés du lien externe"
 
-#: src/pyams_content/component/links/zmi/__init__.py:263
+#: src/pyams_content/component/links/zmi/__init__.py:243
 msgid "Mailto links"
 msgstr "Liens mailto"
 
-#: src/pyams_content/component/links/zmi/__init__.py:278
+#: src/pyams_content/component/links/zmi/__init__.py:258
 msgid "Add mailto link"
 msgstr "Lien mailto"
 
-#: src/pyams_content/component/links/zmi/__init__.py:290
+#: src/pyams_content/component/links/zmi/__init__.py:272
 msgid "Add new mailto link"
 msgstr "Ajout d'un lien « mailto »"
 
-#: src/pyams_content/component/links/zmi/__init__.py:328
+#: src/pyams_content/component/links/zmi/__init__.py:305
 msgid "Edit mailto link properties"
 msgstr "Propriétés du lien « mailto »"
 
@@ -1704,24 +1710,24 @@
 msgid "Youtube settings"
 msgstr "Paramétres Youtube"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:61
+#: src/pyams_content/component/video/zmi/paragraph.py:62
 msgid "External video..."
 msgstr "Vidéo externe"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:72
+#: src/pyams_content/component/video/zmi/paragraph.py:75
 msgid "Add new external video..."
 msgstr "Ajout d'une vidéo externe"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:145
+#: src/pyams_content/component/video/zmi/paragraph.py:126
 msgid "Video provider is required"
 msgstr "Le nom du fournisseur est obligatoire"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:194
-#: src/pyams_content/component/video/zmi/paragraph.py:259
+#: src/pyams_content/component/video/zmi/paragraph.py:175
+#: src/pyams_content/component/video/zmi/paragraph.py:229
 msgid "Video provider settings"
 msgstr "Paramètres liés au fournisseur"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:174
+#: src/pyams_content/component/video/zmi/paragraph.py:155
 msgid "Other settings"
 msgstr "Autres paramètres"
 
@@ -1734,8 +1740,8 @@
 msgstr "Nom de la plate-forme externe fournissant la vidéo à afficher"
 
 #: src/pyams_content/shared/common/__init__.py:237
-#: src/pyams_content/shared/common/zmi/properties.py:72
-#: src/pyams_content/shared/common/zmi/manager.py:97
+#: src/pyams_content/shared/common/zmi/properties.py:70
+#: src/pyams_content/shared/common/zmi/manager.py:96
 msgid "Properties"
 msgstr "Propriétés"
 
@@ -1799,11 +1805,11 @@
 msgid "Modified before..."
 msgstr "et le"
 
-#: src/pyams_content/shared/common/zmi/properties.py:62
+#: src/pyams_content/shared/common/zmi/properties.py:60
 msgid "Composition"
 msgstr "Composition"
 
-#: src/pyams_content/shared/common/zmi/properties.py:83
+#: src/pyams_content/shared/common/zmi/properties.py:82
 msgid "Content properties"
 msgstr "Propriétés élémentaires"
 
@@ -1816,7 +1822,7 @@
 msgstr "Libellé du type"
 
 #: src/pyams_content/shared/common/zmi/types.py:183
-#: src/pyams_content/shared/common/zmi/types.py:411
+#: src/pyams_content/shared/common/zmi/types.py:396
 msgid "Default associations"
 msgstr "Liens et pièces jointes par défaut"
 
@@ -1828,27 +1834,27 @@
 msgid "Add data type"
 msgstr "Ajouter un type"
 
-#: src/pyams_content/shared/common/zmi/types.py:245
+#: src/pyams_content/shared/common/zmi/types.py:246
 msgid "Add new data type"
 msgstr "Ajout d'un type de contenu"
 
-#: src/pyams_content/shared/common/zmi/types.py:291
+#: src/pyams_content/shared/common/zmi/types.py:283
 msgid "Data type properties"
 msgstr "Propriétés du type de contenu"
 
-#: src/pyams_content/shared/common/zmi/types.py:374
+#: src/pyams_content/shared/common/zmi/types.py:359
 msgid "Subtype label"
 msgstr "Libellé du sous-type"
 
-#: src/pyams_content/shared/common/zmi/types.py:455
+#: src/pyams_content/shared/common/zmi/types.py:440
 msgid "Add subtype"
 msgstr "Ajouter un sous-type"
 
-#: src/pyams_content/shared/common/zmi/types.py:466
+#: src/pyams_content/shared/common/zmi/types.py:452
 msgid "Add new subtype"
 msgstr "Ajout d'un sous-type de contenu"
 
-#: src/pyams_content/shared/common/zmi/types.py:518
+#: src/pyams_content/shared/common/zmi/types.py:498
 msgid "Data subtype properties"
 msgstr "Propriétés du fichier standard"
 
@@ -1860,19 +1866,19 @@
 msgid "Specified type name is already used!"
 msgstr "Le nom indiqué pour ce type de contenu est déjà utilisé !"
 
-#: src/pyams_content/shared/common/zmi/types.py:494
+#: src/pyams_content/shared/common/zmi/types.py:474
+msgid "Subtype was correctly added."
+msgstr "Le sous-type a été ajouté."
+
+#: src/pyams_content/shared/common/zmi/types.py:488
 msgid "Specified subtype name is already used!"
 msgstr "Le nom indiqué pour ce sous-type de contenu est déjà utilisé !"
 
-#: src/pyams_content/shared/common/zmi/types.py:505
-msgid "Subtype was correctly added."
-msgstr "Le sous-type a été ajouté."
-
 #: src/pyams_content/shared/common/zmi/types.py:155
 msgid "Click to see subtypes"
 msgstr "Montrer ou caher les sous-types"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:907
+#: src/pyams_content/shared/common/zmi/workflow.py:847
 msgid "Prior checks"
 msgstr "Contrôles préalables : avez-vous ?"
 
@@ -1880,46 +1886,46 @@
 msgid "Request publication"
 msgstr "Demander la publication"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:218
+#: src/pyams_content/shared/common/zmi/workflow.py:213
 #: src/pyams_content/workflow/__init__.py:315
 msgid "Cancel publication request"
 msgstr "Annuler la demande de publication"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:263
+#: src/pyams_content/shared/common/zmi/workflow.py:253
 msgid "Refuse publication request"
 msgstr "Refuser la demande de publication"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:322
+#: src/pyams_content/shared/common/zmi/workflow.py:307
 #: src/pyams_content/workflow/basic.py:196
 msgid "Publish"
 msgstr "Publier"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:416
+#: src/pyams_content/shared/common/zmi/workflow.py:396
 msgid "Request retire"
 msgstr "Demander le retrait"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:477
+#: src/pyams_content/shared/common/zmi/workflow.py:452
 msgid "Cancel retire request"
 msgstr "Annuler la demande de retrait"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:522
+#: src/pyams_content/shared/common/zmi/workflow.py:492
 msgid "Retire"
 msgstr "Retirer"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:568
+#: src/pyams_content/shared/common/zmi/workflow.py:533
 #: src/pyams_content/workflow/__init__.py:436
 msgid "Request archive"
 msgstr "Demander l'archivage"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:616
+#: src/pyams_content/shared/common/zmi/workflow.py:576
 msgid "Cancel archive request"
 msgstr "Annuler la demande d'archivage"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:661
+#: src/pyams_content/shared/common/zmi/workflow.py:616
 msgid "Archive"
 msgstr "Archiver"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:707
+#: src/pyams_content/shared/common/zmi/workflow.py:657
 #: src/pyams_content/workflow/__init__.py:501
 #: src/pyams_content/workflow/__init__.py:513
 #: src/pyams_content/workflow/__init__.py:525
@@ -1930,39 +1936,39 @@
 msgid "Create new version"
 msgstr "Créer une nouvelle version"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:763
+#: src/pyams_content/shared/common/zmi/workflow.py:708
 #: src/pyams_content/workflow/__init__.py:561
 #: src/pyams_content/workflow/basic.py:248
 msgid "Delete version"
 msgstr "Supprimer cette version"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:853
+#: src/pyams_content/shared/common/zmi/workflow.py:793
 msgid "Previewed content?"
 msgstr "Prévisualisé ce contenu ?"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:857
+#: src/pyams_content/shared/common/zmi/workflow.py:797
 msgid "Verified content?"
 msgstr "Audité ce contenu ?"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:188
-#: src/pyams_content/shared/common/zmi/workflow.py:385
+#: src/pyams_content/shared/common/zmi/workflow.py:183
+#: src/pyams_content/shared/common/zmi/workflow.py:365
 msgid "Publication start date is required"
 msgstr "La date de début de publication est obligatoire"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:291
-#: src/pyams_content/shared/common/zmi/workflow.py:447
+#: src/pyams_content/shared/common/zmi/workflow.py:276
+#: src/pyams_content/shared/common/zmi/workflow.py:422
 msgid "A comment is required"
 msgstr "Le commentaire est obligatoire"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:786
+#: src/pyams_content/shared/common/zmi/workflow.py:732
 msgid "Delete content"
 msgstr "Supprimer définitivement ce contenu"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:795
+#: src/pyams_content/shared/common/zmi/workflow.py:741
 msgid "Delete definitively"
 msgstr "Supprimer définitivement"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:923
+#: src/pyams_content/shared/common/zmi/workflow.py:863
 msgid ""
 "You must confirm that you previewed and checked this content before "
 "requesting publication!!"
@@ -1984,7 +1990,7 @@
 msgid "{state} {date}"
 msgstr "{state} {date}"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:266
+#: src/pyams_content/shared/common/zmi/__init__.py:265
 msgid "Duplicate content..."
 msgstr "Dupliquer le contenu"
 
@@ -1992,22 +1998,22 @@
 msgid "Duplicate content"
 msgstr "Dupliquer ce contenu"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:85
+#: src/pyams_content/shared/common/zmi/__init__.py:84
 msgid "This title can be modified afterwards"
 msgstr "Pourra être modifié ultérieurement"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:277
+#: src/pyams_content/shared/common/zmi/__init__.py:276
 msgid "Duplicate this content"
 msgstr "Dupliquer ce contenu"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:338
+#: src/pyams_content/shared/common/zmi/__init__.py:337
 #, python-format
 msgid "Clone created from version {source} of {oid} (in « {state} » state)"
 msgstr ""
 "Duplication de la version {source} du contenu {oid} (alors en statut "
 "« {state} »)"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:389
+#: src/pyams_content/shared/common/zmi/__init__.py:382
 msgid "Created or modified in this version"
 msgstr "Créé ou modifié dans cette version"
 
@@ -2058,11 +2064,11 @@
 msgid "Shared tool properties"
 msgstr "Propriétés de l'outil"
 
-#: src/pyams_content/shared/common/zmi/manager.py:132
+#: src/pyams_content/shared/common/zmi/manager.py:125
 msgid "WARNING"
 msgstr "ATTENTION"
 
-#: src/pyams_content/shared/common/zmi/manager.py:134
+#: src/pyams_content/shared/common/zmi/manager.py:127
 msgid ""
 "Workflow shouldn't be modified if this tool already contains any shared "
 "content!"
@@ -2070,15 +2076,15 @@
 "Le workflow ne doit pas être modifié si cet outil renferme déjà des contenus "
 "partagés !"
 
-#: src/pyams_content/shared/common/zmi/manager.py:157
+#: src/pyams_content/shared/common/zmi/manager.py:150
 msgid "Languages"
 msgstr "Langues"
 
-#: src/pyams_content/shared/common/zmi/manager.py:168
+#: src/pyams_content/shared/common/zmi/manager.py:162
 msgid "Content languages"
 msgstr "Langues pour la traduction de cet outil"
 
-#: src/pyams_content/shared/common/zmi/manager.py:185
+#: src/pyams_content/shared/common/zmi/manager.py:172
 msgid ""
 "Tool languages are used to translate own tool properties, and newly created "
 "contents will propose these languages by default"
@@ -2087,15 +2093,15 @@
 "\n"
 "Les nouveaux contenus proposeront également ces langues par défaut."
 
-#: src/pyams_content/shared/common/zmi/manager.py:81
+#: src/pyams_content/shared/common/zmi/manager.py:80
 msgid "Content management"
 msgstr "Gérer ce gabarit"
 
-#: src/pyams_content/shared/common/zmi/manager.py:83
+#: src/pyams_content/shared/common/zmi/manager.py:82
 msgid "Tool management"
 msgstr "Gérer l'outil partagé"
 
-#: src/pyams_content/shared/common/zmi/owner.py:51
+#: src/pyams_content/shared/common/zmi/owner.py:50
 msgid "Change owner..."
 msgstr "Changer de propriétaire"
 
@@ -2103,7 +2109,7 @@
 msgid "Change content's owner"
 msgstr "Changement de propriétaire"
 
-#: src/pyams_content/shared/common/zmi/owner.py:132
+#: src/pyams_content/shared/common/zmi/owner.py:125
 msgid ""
 "All versions of this content which are not archived will be transferred to "
 "newly selected owner"
@@ -2111,25 +2117,25 @@
 "Toutes les versions non archivées de ce contenu seront transférées au "
 "nouveau propriétaire sélectionné"
 
-#: src/pyams_content/shared/common/zmi/owner.py:61
+#: src/pyams_content/shared/common/zmi/owner.py:60
 msgid "New owner"
 msgstr "Nouveau propriétaire"
 
-#: src/pyams_content/shared/common/zmi/owner.py:62
+#: src/pyams_content/shared/common/zmi/owner.py:61
 msgid "The selected user will become the new content's owner"
 msgstr "L'utilisateur sélectionné deviendra le nouveau propriétaire du contenu"
 
-#: src/pyams_content/shared/common/zmi/owner.py:64
+#: src/pyams_content/shared/common/zmi/owner.py:63
 msgid "Keep previous owner as contributor"
 msgstr "L'ancien propriétaire reste contributeur"
 
-#: src/pyams_content/shared/common/zmi/owner.py:65
+#: src/pyams_content/shared/common/zmi/owner.py:64
 msgid "If 'yes', the previous owner will still be able to modify this content"
 msgstr ""
 "Si 'oui', l'actuel propriétaire du contenu en restera contributeur et pourra "
 "donc continuer à le mettre à jour"
 
-#: src/pyams_content/shared/common/zmi/owner.py:75
+#: src/pyams_content/shared/common/zmi/owner.py:74
 msgid "Change owner"
 msgstr "Changer le propriétaire"
 
@@ -2421,64 +2427,64 @@
 msgid "Content publication start date is not passed yet"
 msgstr "La date de début de publication n'est pas encore atteinte"
 
-#: src/pyams_content/shared/common/zmi/security.py:65
+#: src/pyams_content/shared/common/zmi/security.py:64
 msgid "Contributors restrictions"
 msgstr "Paramètres des contributeurs"
 
-#: src/pyams_content/shared/common/zmi/security.py:74
+#: src/pyams_content/shared/common/zmi/security.py:73
 msgid "Content contributors restrictions"
 msgstr "Liste des contributeurs"
 
-#: src/pyams_content/shared/common/zmi/security.py:108
+#: src/pyams_content/shared/common/zmi/security.py:107
 msgid "Contributor name"
 msgstr "Nom du contributeur"
 
-#: src/pyams_content/shared/common/zmi/security.py:119
-#: src/pyams_content/shared/common/zmi/security.py:277
+#: src/pyams_content/shared/common/zmi/security.py:118
+#: src/pyams_content/shared/common/zmi/security.py:270
 #: src/pyams_content/shared/common/interfaces/__init__.py:252
 #: src/pyams_content/shared/common/interfaces/__init__.py:277
 msgid "Publication checks"
 msgstr "Activer le tunnel de publication"
 
-#: src/pyams_content/shared/common/zmi/security.py:225
+#: src/pyams_content/shared/common/zmi/security.py:218
 msgid "Managers restrictions"
 msgstr "Paramètres des responsables"
 
-#: src/pyams_content/shared/common/zmi/security.py:234
+#: src/pyams_content/shared/common/zmi/security.py:227
 msgid "Content managers restrictions"
 msgstr "Liste des responsables"
 
-#: src/pyams_content/shared/common/zmi/security.py:266
+#: src/pyams_content/shared/common/zmi/security.py:259
 msgid "Manager name"
 msgstr "Nom du responsable"
 
-#: src/pyams_content/shared/common/zmi/security.py:294
+#: src/pyams_content/shared/common/zmi/security.py:287
 msgid "Restricted"
 msgstr "Restrictions"
 
-#: src/pyams_content/shared/common/zmi/security.py:311
+#: src/pyams_content/shared/common/zmi/security.py:304
 msgid "Owners"
 msgstr "Propriétaires"
 
-#: src/pyams_content/shared/common/zmi/security.py:401
+#: src/pyams_content/shared/common/zmi/security.py:394
 msgid "Publication workflow"
 msgstr "Workflow de publication"
 
-#: src/pyams_content/shared/common/zmi/security.py:168
+#: src/pyams_content/shared/common/zmi/security.py:167
 #, python-format
 msgid "Edit contributor restrictions for « {0} »"
 msgstr "Gérer les paramètres d'intervention de « {0} »"
 
-#: src/pyams_content/shared/common/zmi/security.py:360
+#: src/pyams_content/shared/common/zmi/security.py:353
 #, python-format
 msgid "Edit manager restrictions for « {0} »"
 msgstr "Gérer les paramètres d'intervention de « {0} »"
 
-#: src/pyams_content/shared/common/zmi/security.py:407
+#: src/pyams_content/shared/common/zmi/security.py:400
 msgid "Apply contents restrictions"
 msgstr "Appliquer des restrictions d'accès"
 
-#: src/pyams_content/shared/common/zmi/security.py:409
+#: src/pyams_content/shared/common/zmi/security.py:402
 msgid ""
 "You can specify which contents this manager will be able to manage. If you "
 "specify several criteria, the manager will be able to manage contents for "
@@ -3191,11 +3197,11 @@
 msgstr "Liste des champs du formulaire"
 
 #: src/pyams_content/shared/form/zmi/field.py:226
-#: src/pyams_content/shared/form/zmi/field.py:237
+#: src/pyams_content/shared/form/zmi/field.py:239
 msgid "Add form field"
 msgstr "Ajouter un champ"
 
-#: src/pyams_content/shared/form/zmi/field.py:285
+#: src/pyams_content/shared/form/zmi/field.py:281
 msgid "Edit form field properties"
 msgstr "Propriétés du champ"
 
@@ -3207,7 +3213,7 @@
 msgid "No currently defined form field."
 msgstr "Ce formulaire ne comporte aucun champ."
 
-#: src/pyams_content/shared/form/zmi/field.py:262
+#: src/pyams_content/shared/form/zmi/field.py:266
 msgid "Specified name is already used!"
 msgstr "Le nom indiqué pour ce champ est déjà utilisé !"
 
@@ -3397,7 +3403,7 @@
 msgid "View themes settings"
 msgstr "Paramétrage des thèmes de la vue"
 
-#: src/pyams_content/shared/view/zmi/reference.py:53
+#: src/pyams_content/shared/view/zmi/reference.py:52
 msgid "References..."
 msgstr "Références"
 
@@ -3547,12 +3553,12 @@
 msgid "Image map..."
 msgstr "Image cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:65
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:67
 msgid "Add new image map"
 msgstr "Ajout d'une image cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:97
-#: src/pyams_content/shared/logo/zmi/paragraph.py:96
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:94
+#: src/pyams_content/shared/logo/zmi/paragraph.py:93
 msgid "Edit paragraph properties"
 msgstr "Propriétés de l'image cliquable"
 
@@ -3612,7 +3618,7 @@
 msgid "Bad query object_name parameter value!"
 msgstr "Valeur incorrecte du paramètre object_name !"
 
-#: src/pyams_content/shared/imagemap/zmi/area.py:46
+#: src/pyams_content/shared/imagemap/zmi/area.py:45
 msgid "Add image area"
 msgstr "Ajouter une zone"
 
@@ -3620,7 +3626,7 @@
 msgid "Add new image area"
 msgstr "Ajout d'une zone cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/area.py:108
+#: src/pyams_content/shared/imagemap/zmi/area.py:102
 msgid "Edit image map properties"
 msgstr "Propriétés de l'image"
 
@@ -3680,15 +3686,15 @@
 msgid "Add site folder..."
 msgstr "Ajouter une rubrique"
 
-#: src/pyams_content/shared/site/zmi/folder.py:90
+#: src/pyams_content/shared/site/zmi/folder.py:91
 msgid "Add site folder"
 msgstr "Ajout d'une rubrique"
 
-#: src/pyams_content/shared/site/zmi/folder.py:166
+#: src/pyams_content/shared/site/zmi/folder.py:160
 msgid "Site folder management"
 msgstr "Gérer cette rubrique"
 
-#: src/pyams_content/shared/site/zmi/folder.py:177
+#: src/pyams_content/shared/site/zmi/folder.py:171
 msgid "Site folder properties"
 msgstr "Propriétés de la rubrique"
 
@@ -3699,16 +3705,16 @@
 
 #: src/pyams_content/shared/site/zmi/folder.py:72
 #: src/pyams_content/shared/site/zmi/__init__.py:72
-#: src/pyams_content/shared/site/zmi/link.py:67
+#: src/pyams_content/shared/site/zmi/link.py:66
 msgid "Parent"
 msgstr "Niveau parent"
 
 #: src/pyams_content/shared/site/zmi/folder.py:73
-#: src/pyams_content/shared/site/zmi/link.py:68
+#: src/pyams_content/shared/site/zmi/link.py:67
 msgid "Folder's parent"
 msgstr "Niveau de rattachement de cette rubrique"
 
-#: src/pyams_content/shared/site/zmi/folder.py:150
+#: src/pyams_content/shared/site/zmi/folder.py:153
 msgid "You must provide a folder name for default server language!"
 msgstr ""
 "Vous devez fournir un nom pour ce dossier pour la langue par défaut du "
@@ -3722,7 +3728,7 @@
 msgid "Add topic..."
 msgstr "Ajouter un article"
 
-#: src/pyams_content/shared/site/zmi/__init__.py:84
+#: src/pyams_content/shared/site/zmi/__init__.py:86
 msgid "Add topic"
 msgstr "Ajout d'un article"
 
@@ -3730,7 +3736,7 @@
 msgid "Topic's parent"
 msgstr "Niveau parent"
 
-#: src/pyams_content/shared/site/zmi/link.py:58
+#: src/pyams_content/shared/site/zmi/link.py:57
 msgid "Rent content..."
 msgstr "Lier un contenu"
 
@@ -3738,79 +3744,79 @@
 msgid "Rent existing content"
 msgstr "Lier un contenu existant"
 
-#: src/pyams_content/shared/site/zmi/link.py:141
+#: src/pyams_content/shared/site/zmi/link.py:135
 msgid "Edit content link properties"
 msgstr "Propriétés du lien"
 
 #: src/pyams_content/shared/site/zmi/container.py:106
 #: src/pyams_content/shared/site/zmi/container.py:118
-#: src/pyams_content/shared/blog/zmi/manager.py:160
-#: src/pyams_content/shared/blog/zmi/manager.py:172
+#: src/pyams_content/shared/blog/zmi/manager.py:155
+#: src/pyams_content/shared/blog/zmi/manager.py:167
 msgid "Publication dates..."
 msgstr "Dates de publication"
 
-#: src/pyams_content/shared/site/zmi/container.py:131
-#: src/pyams_content/shared/blog/zmi/manager.py:185
+#: src/pyams_content/shared/site/zmi/container.py:132
+#: src/pyams_content/shared/blog/zmi/manager.py:181
 msgid "Update publication dates"
 msgstr "Dates de publication"
 
-#: src/pyams_content/shared/site/zmi/container.py:183
-#: src/pyams_content/shared/site/zmi/container.py:193
+#: src/pyams_content/shared/site/zmi/container.py:178
+#: src/pyams_content/shared/site/zmi/container.py:188
 #: src/pyams_content/root/zmi/sites.py:68
 msgid "Site tree"
 msgstr "Arborescence du site"
 
-#: src/pyams_content/shared/site/zmi/container.py:312
-#: src/pyams_content/shared/site/zmi/container.py:162
+#: src/pyams_content/shared/site/zmi/container.py:307
+#: src/pyams_content/shared/site/zmi/container.py:156
 msgid "Visible element?"
 msgstr "Élément visible ?"
 
-#: src/pyams_content/shared/site/zmi/container.py:313
+#: src/pyams_content/shared/site/zmi/container.py:308
 msgid "Switch element visibility"
 msgstr "Cliquez pour rendre l'élément visible ou non"
 
-#: src/pyams_content/shared/site/zmi/container.py:374
+#: src/pyams_content/shared/site/zmi/container.py:369
 msgid "Folders and topics"
 msgstr "Rubriquage"
 
-#: src/pyams_content/shared/site/zmi/container.py:410
+#: src/pyams_content/shared/site/zmi/container.py:405
 #: src/pyams_content/root/zmi/__init__.py:798
 msgid "Content"
 msgstr "Contenu"
 
-#: src/pyams_content/shared/site/zmi/container.py:506
+#: src/pyams_content/shared/site/zmi/container.py:501
 msgid "Delete site item"
 msgstr "Supprimer ce contenu"
 
-#: src/pyams_content/shared/site/zmi/container.py:383
+#: src/pyams_content/shared/site/zmi/container.py:378
 msgid "Click to open/close all folders"
 msgstr "Afficher/masquer toutes les rubriques"
 
-#: src/pyams_content/shared/site/zmi/container.py:399
+#: src/pyams_content/shared/site/zmi/container.py:394
 msgid "Click to show/hide inner folders"
 msgstr "Cliquer pour afficher ou cache les sous-niveaux"
 
-#: src/pyams_content/shared/site/zmi/container.py:269
+#: src/pyams_content/shared/site/zmi/container.py:264
 msgid "Can't reparent object to one of it's children. Reloading..."
 msgstr ""
 "Impossible de déplacer une rubrique dans l'une de ses sous-rubriques ou "
 "contenus ! Rechargement de la page..."
 
-#: src/pyams_content/shared/site/zmi/manager.py:58
+#: src/pyams_content/shared/site/zmi/manager.py:57
 msgid "Site management"
 msgstr "Gérer ce site"
 
-#: src/pyams_content/shared/site/zmi/manager.py:88
-#: src/pyams_content/shared/site/zmi/manager.py:100
+#: src/pyams_content/shared/site/zmi/manager.py:87
+#: src/pyams_content/shared/site/zmi/manager.py:101
 msgid "Add site manager"
 msgstr "Ajouter un site"
 
-#: src/pyams_content/shared/site/zmi/manager.py:99
+#: src/pyams_content/shared/site/zmi/manager.py:100
 msgid "Site manager"
 msgstr "Site"
 
 #: src/pyams_content/shared/site/zmi/manager.py:131
-#: src/pyams_content/shared/blog/zmi/manager.py:126
+#: src/pyams_content/shared/blog/zmi/manager.py:127
 msgid "You must provide a short name for default server language!"
 msgstr "Vous devez fournir un nom court pour la langue par défaut du serveur !"
 
@@ -3876,11 +3882,11 @@
 msgid "no URL defined"
 msgstr "aucune URL définie"
 
-#: src/pyams_content/shared/logo/zmi/paragraph.py:53
+#: src/pyams_content/shared/logo/zmi/paragraph.py:54
 msgid "Logos..."
 msgstr "Logos"
 
-#: src/pyams_content/shared/logo/zmi/paragraph.py:64
+#: src/pyams_content/shared/logo/zmi/paragraph.py:67
 msgid "Add new logos paragraph"
 msgstr "Ajout d'une sélection de logos"
 
@@ -3941,19 +3947,19 @@
 msgstr "Gérer ce blog"
 
 #: src/pyams_content/shared/blog/zmi/manager.py:83
-#: src/pyams_content/shared/blog/zmi/manager.py:95
+#: src/pyams_content/shared/blog/zmi/manager.py:97
 msgid "Add blog manager"
 msgstr "Ajouter un blog"
 
-#: src/pyams_content/shared/blog/zmi/manager.py:94
+#: src/pyams_content/shared/blog/zmi/manager.py:96
 msgid "Blog manager"
 msgstr "Blog"
 
-#: src/pyams_content/shared/blog/zmi/manager.py:130
+#: src/pyams_content/shared/blog/zmi/manager.py:131
 msgid "Specified blog manager name is already used!"
 msgstr "Le nom indiqué pour ce blog existe déjà !"
 
-#: src/pyams_content/shared/blog/zmi/manager.py:134
+#: src/pyams_content/shared/blog/zmi/manager.py:135
 msgid "A blog manager is already registered with this name!!"
 msgstr "Un blog est déjà inscrit dans le registre avec ce nom !"
 
@@ -4355,11 +4361,11 @@
 msgstr ""
 "Retrait automatique des contenus après la date de fin de publication :\n"
 
-#: src/pyams_content/workflow/zmi/task.py:43
+#: src/pyams_content/workflow/zmi/task.py:42
 msgid "Add content archiver task..."
 msgstr "Ajouter une tâche d'archivage automatique"
 
-#: src/pyams_content/workflow/zmi/task.py:54
+#: src/pyams_content/workflow/zmi/task.py:55
 msgid "Add automatic content archiver"
 msgstr "Ajout d'une tâche d'archivage automatique"
 
@@ -4420,11 +4426,11 @@
 msgid "Properties..."
 msgstr "Propriétés"
 
-#: src/pyams_content/reference/zmi/table.py:156
+#: src/pyams_content/reference/zmi/table.py:157
 msgid "Edit table properties"
 msgstr "Propriétés de la table"
 
-#: src/pyams_content/reference/zmi/table.py:173
+#: src/pyams_content/reference/zmi/table.py:167
 msgid "Table management"
 msgstr "Gérer cette table"
 
@@ -4436,7 +4442,7 @@
 msgid "Pictograms selection..."
 msgstr "Sélection de pictogrammes"
 
-#: src/pyams_content/reference/pictograms/zmi/manager.py:62
+#: src/pyams_content/reference/pictograms/zmi/manager.py:63
 #: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
 #: src/pyams_content/reference/pictograms/interfaces/__init__.py:73
 msgid "Selected pictograms"
@@ -4607,7 +4613,7 @@
 "donné, l'alerte apparaîtra à nouveau. Si aucun intervalle n'est indiqué, "
 "l'alerte s'affichera en permanence."
 
-#: src/pyams_content/features/alert/zmi/__init__.py:46
+#: src/pyams_content/features/alert/zmi/__init__.py:45
 msgid "Add alert"
 msgstr "Ajouter une alerte"
 
@@ -4615,7 +4621,7 @@
 msgid "Add new alert"
 msgstr "Ajout d'une alerte"
 
-#: src/pyams_content/features/alert/zmi/__init__.py:85
+#: src/pyams_content/features/alert/zmi/__init__.py:79
 msgid "Edit alert properties"
 msgstr "Propriétés de l'alerte"
 
@@ -4714,15 +4720,15 @@
 msgid "Ask for review..."
 msgstr "Demander une relecture"
 
-#: src/pyams_content/features/review/zmi/__init__.py:99
+#: src/pyams_content/features/review/zmi/__init__.py:100
 msgid "Content review request"
 msgstr "Demande de relecture"
 
-#: src/pyams_content/features/review/zmi/__init__.py:172
+#: src/pyams_content/features/review/zmi/__init__.py:166
 msgid "Comments"
 msgstr "Commentaires"
 
-#: src/pyams_content/features/review/zmi/__init__.py:192
+#: src/pyams_content/features/review/zmi/__init__.py:186
 msgid "Review comments"
 msgstr "Commentaires associés à cette version"
 
@@ -4763,16 +4769,16 @@
 msgid "Ask for content review"
 msgstr "Demander la relecture"
 
-#: src/pyams_content/features/review/zmi/__init__.py:153
+#: src/pyams_content/features/review/zmi/__init__.py:147
 msgid "Request successful. No new notification have been sent"
 msgstr ""
 "Votre demande a été transmise. Aucune nouvelle notification n'a été envoyée."
 
-#: src/pyams_content/features/review/zmi/__init__.py:266
+#: src/pyams_content/features/review/zmi/__init__.py:260
 msgid "Message is mandatory!"
 msgstr "Un commentaire est obligatoire !"
 
-#: src/pyams_content/features/review/zmi/__init__.py:141
+#: src/pyams_content/features/review/zmi/__init__.py:135
 #, python-format
 msgid "Request successful. {count} new notification(s) have been sent"
 msgstr "Votre demande a été transmise. {count} notification(s) envoyée(s)."
--- a/src/pyams_content/locales/pyams_content.pot	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/locales/pyams_content.pot	Mon Jun 11 10:00:17 2018 +0200
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-06-06 13:20+0200\n"
+"POT-Creation-Date: 2018-06-08 17:54+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -81,25 +81,25 @@
 msgid "Gallery"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:58
+#: ./src/pyams_content/component/gallery/zmi/file.py:57
 #: ./src/pyams_content/component/gallery/zmi/file.py:69
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:174
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:164
 msgid "Add media(s)"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:189
+#: ./src/pyams_content/component/gallery/zmi/file.py:184
 msgid "Update media properties"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:249
+#: ./src/pyams_content/component/gallery/zmi/file.py:238
 msgid "Remove media..."
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:154
+#: ./src/pyams_content/component/gallery/zmi/file.py:148
 msgid "Show/hide media"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:216
+#: ./src/pyams_content/component/gallery/zmi/file.py:211
 msgid "Audio content"
 msgstr ""
 
@@ -107,19 +107,19 @@
 msgid "Medias gallery..."
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:67
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:69
 msgid "Add new gallery"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:99
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:96
 msgid "Edit gallery properties"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:62
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:63
 msgid "Update gallery properties"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:101
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:95
 msgid "Update gallery contents"
 msgstr ""
 
@@ -135,7 +135,7 @@
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:61
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:44
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:48
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:52
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:48
 #: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
 #: ./src/pyams_content/component/video/interfaces/__init__.py:52
@@ -145,7 +145,7 @@
 #: ./src/pyams_content/component/gallery/zmi/interfaces.py:41
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:62
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:49
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:53
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:49
 #: ./src/pyams_content/component/video/interfaces/__init__.py:53
 msgid "Name of document's author"
@@ -190,6 +190,8 @@
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:51
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:45
+#: ./src/pyams_content/component/video/interfaces/__init__.py:75
 msgid "Legend"
 msgstr ""
 
@@ -207,7 +209,7 @@
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:98
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:40
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:52
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:44
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:48
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:44
 #: ./src/pyams_content/component/links/interfaces/__init__.py:37
 #: ./src/pyams_content/component/video/interfaces/__init__.py:48
@@ -263,7 +265,7 @@
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:94
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:246
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:231
 #: ./src/pyams_content/component/paragraph/zmi/container.py:224
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:45
 #: ./src/pyams_content/component/links/zmi/reverse.py:71
@@ -273,7 +275,7 @@
 #: ./src/pyams_content/shared/site/zmi/folder.py:68
 #: ./src/pyams_content/root/zmi/templates/advanced-search.pt:188
 #: ./src/pyams_content/interfaces/__init__.py:99
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:165
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:152
 msgid "Title"
 msgstr ""
 
@@ -325,59 +327,59 @@
 msgid "Add external file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:101
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:103
 msgid "Add new external file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:141
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:138
 msgid "Update file properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:181
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:171
 msgid "Images"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:196
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:186
 msgid "Add image"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:208
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:200
 msgid "Add new image"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:244
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:231
 msgid "Update image properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:283
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:264
 msgid "Videos"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:298
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:279
 msgid "Add video"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:310
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:293
 msgid "Add new video"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:339
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:317
 msgid "Update video properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:371
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:343
 msgid "Audios files"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:386
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:358
 msgid "Add audio file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:398
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:372
 msgid "Add new audio file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:427
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:396
 msgid "Update audio file properties"
 msgstr ""
 
@@ -397,7 +399,7 @@
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:41
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:49
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:45
 #: ./src/pyams_content/component/video/interfaces/__init__.py:49
 msgid "File description displayed by front-office template"
@@ -438,7 +440,7 @@
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:81
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:52
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:41
 msgid "Video data"
 msgstr ""
 
@@ -451,7 +453,7 @@
 msgid "Audio file content"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/__init__.py:132
+#: ./src/pyams_content/component/illustration/__init__.py:133
 #: ./src/pyams_content/component/illustration/zmi/__init__.py:54
 #: ./src/pyams_content/component/illustration/zmi/__init__.py:81
 #: ./src/pyams_content/component/illustration/interfaces/__init__.py:71
@@ -462,11 +464,11 @@
 msgid "Illustration..."
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:68
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:70
 msgid "Add new illustration"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:102
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:100
 msgid "Edit illustration properties"
 msgstr ""
 
@@ -515,62 +517,62 @@
 msgid "Milestones..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:88
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:90
 msgid "Add new milestone paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:120
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:117
 msgid "Edit milestone paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:258
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:243
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:49
 msgid "Associated label"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:270
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:255
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:53
 msgid "Anchor"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:284
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:76
+msgid "Milestones"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/zmi/milestone.py:299
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:76
-msgid "Milestones"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:314
 msgid "Add milestone"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:325
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:312
 msgid "Add new milestone"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:358
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:339
 msgid "Edit milestone properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:347
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:327
 msgid "Milestone was correctly added"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:285
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:270
 msgid "(missing paragraph)"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:50
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:51
 msgid "Key points..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:61
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:64
 msgid "Add new key points paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:93
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:91
 msgid "Edit key points paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:66
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:65
 msgid "Content block types..."
 msgstr ""
 
@@ -578,7 +580,7 @@
 msgid "Content block types"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:96
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:89
 msgid ""
 "You can define which types of paragraphs are allowed in this container.\n"
 "\n"
@@ -587,61 +589,52 @@
 "NOTICE: removing types from allowed types list will have no effect on already created contents!"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:214
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:207
 #: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
 #: ./src/pyams_content/features/preview/zmi/__init__.py:45
 msgid "Preview"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:219
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:212
 #: ./src/pyams_content/shared/common/zmi/workflow.py:125
-#: ./src/pyams_content/shared/common/zmi/workflow.py:217
-#: ./src/pyams_content/shared/common/zmi/workflow.py:262
-#: ./src/pyams_content/shared/common/zmi/workflow.py:321
-#: ./src/pyams_content/shared/common/zmi/workflow.py:415
-#: ./src/pyams_content/shared/common/zmi/workflow.py:476
-#: ./src/pyams_content/shared/common/zmi/workflow.py:521
-#: ./src/pyams_content/shared/common/zmi/workflow.py:567
+#: ./src/pyams_content/shared/common/zmi/workflow.py:212
+#: ./src/pyams_content/shared/common/zmi/workflow.py:252
+#: ./src/pyams_content/shared/common/zmi/workflow.py:306
+#: ./src/pyams_content/shared/common/zmi/workflow.py:395
+#: ./src/pyams_content/shared/common/zmi/workflow.py:451
+#: ./src/pyams_content/shared/common/zmi/workflow.py:491
+#: ./src/pyams_content/shared/common/zmi/workflow.py:532
+#: ./src/pyams_content/shared/common/zmi/workflow.py:575
 #: ./src/pyams_content/shared/common/zmi/workflow.py:615
-#: ./src/pyams_content/shared/common/zmi/workflow.py:660
-#: ./src/pyams_content/shared/common/zmi/workflow.py:706
-#: ./src/pyams_content/shared/common/zmi/workflow.py:762
-#: ./src/pyams_content/shared/common/zmi/__init__.py:276
-#: ./src/pyams_content/shared/common/zmi/owner.py:74
+#: ./src/pyams_content/shared/common/zmi/workflow.py:656
+#: ./src/pyams_content/shared/common/zmi/workflow.py:707
+#: ./src/pyams_content/shared/common/zmi/__init__.py:275
+#: ./src/pyams_content/shared/common/zmi/owner.py:73
 #: ./src/pyams_content/features/review/zmi/__init__.py:90
 msgid "Cancel"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:221
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:214
 msgid "Submit"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:202
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:195
 msgid "Paragraph was correctly added."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:54
+#: ./src/pyams_content/component/paragraph/zmi/video.py:53
 msgid "Video paragraph..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:65
+#: ./src/pyams_content/component/paragraph/zmi/video.py:66
 msgid "Add new video paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:112
-#: ./src/pyams_content/component/video/zmi/paragraph.py:209
+#: ./src/pyams_content/component/paragraph/zmi/video.py:94
+#: ./src/pyams_content/component/video/zmi/paragraph.py:192
 msgid "Edit video properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:83
-#: ./src/pyams_content/component/paragraph/zmi/video.py:133
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:83
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:133
-#: ./src/pyams_content/component/video/zmi/paragraph.py:103
-#: ./src/pyams_content/component/video/zmi/paragraph.py:238
-msgid "HTML content"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/zmi/container.py:74
 msgid "Contents..."
 msgstr ""
@@ -684,62 +677,62 @@
 msgid "Pictograms..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:94
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:96
 msgid "Add new pictogram paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:126
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:123
 msgid "Edit pictogram paragraph properties"
 msgstr ""
 
 #. Default: Header
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:268
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:253
 msgid "pictogram-item-header"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:283
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:263
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:268
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:260
 #: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:58
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:54
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:58
 msgid "Associated text"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:290
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:80
+msgid "Pictograms"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/zmi/pictogram.py:305
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:80
-msgid "Pictograms"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:320
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:62
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:61
 msgid "Add pictogram"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:331
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:318
 #: ./src/pyams_content/reference/pictograms/zmi/__init__.py:73
 msgid "Add new pictogram"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:393
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:103
-msgid "Edit pictogram properties"
-msgstr ""
-
 #: ./src/pyams_content/component/paragraph/zmi/pictogram.py:374
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:97
+msgid "Edit pictogram properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:354
 msgid "Pictogram was correctly added"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:384
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:448
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:364
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:422
 msgid "You must select a pictogram!"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:347
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:186
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:333
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:173
 msgid "Default header: --"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:414
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:190
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:394
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:177
 #, python-format
 msgid "Default header: {0}"
 msgstr ""
@@ -748,55 +741,66 @@
 msgid "Audio paragraph..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:65
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:67
 msgid "Add new audio paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:112
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:108
 msgid "Edit audio properties"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:84
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:128
+msgid "HTML content"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/zmi/keynumber.py:76
 msgid "Key numbers..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:87
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:89
 msgid "Add new key number paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:119
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:116
 msgid "Edit key number paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:242
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:45
-msgid "Number"
-msgstr ""
-
 #. Default: Header
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:251
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:49
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:227
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:45
 msgid "key-number-label"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:282
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:76
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:239
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:50
+msgid "Number"
+msgstr ""
+
+#. Default: Unit
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:248
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:54
+msgid "key-number-unit"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:279
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:80
 msgid "Key numbers"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:297
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:294
 msgid "Add keynumber"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:308
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:307
 msgid "Add new keynumber"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:341
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:334
 msgid "Edit keynumber properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:330
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:322
 msgid "Key number was correctly added"
 msgstr ""
 
@@ -804,11 +808,11 @@
 msgid "Framed text..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:96
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:98
 msgid "Add new framed text paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:132
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:129
 msgid "Edit framed text paragraph properties"
 msgstr ""
 
@@ -816,11 +820,11 @@
 msgid "Verbatim..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:67
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:69
 msgid "Add new verbatim paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:99
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:96
 msgid "Edit verbatim paragraph properties"
 msgstr ""
 
@@ -828,23 +832,23 @@
 msgid "Raw HTML..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:87
+#: ./src/pyams_content/component/paragraph/zmi/html.py:89
 msgid "Add new raw HTML paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:122
+#: ./src/pyams_content/component/paragraph/zmi/html.py:119
 msgid "Edit raw HTML paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:174
+#: ./src/pyams_content/component/paragraph/zmi/html.py:159
 msgid "Rich text..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:185
+#: ./src/pyams_content/component/paragraph/zmi/html.py:172
 msgid "Add new rich text paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:220
+#: ./src/pyams_content/component/paragraph/zmi/html.py:202
 msgid "Edit rich text paragraph properties"
 msgstr ""
 
@@ -852,11 +856,11 @@
 msgid "Contact card..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:64
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:66
 msgid "Add new contact card"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:97
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:94
 msgid "Edit contact card properties"
 msgstr ""
 
@@ -864,11 +868,11 @@
 msgid "Header..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/header.py:61
+#: ./src/pyams_content/component/paragraph/zmi/header.py:63
 msgid "Add new header paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/header.py:93
+#: ./src/pyams_content/component/paragraph/zmi/header.py:90
 msgid "Edit header paragraph properties"
 msgstr ""
 
@@ -948,7 +952,7 @@
 
 #: ./src/pyams_content/component/paragraph/interfaces/__init__.py:85
 #: ./src/pyams_content/shared/common/zmi/types.py:167
-#: ./src/pyams_content/shared/common/zmi/types.py:395
+#: ./src/pyams_content/shared/common/zmi/types.py:380
 msgid "Default paragraphs"
 msgstr ""
 
@@ -956,14 +960,7 @@
 msgid "List of paragraphs automatically added to a new content"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:41
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:41
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
-#: ./src/pyams_content/component/video/interfaces/__init__.py:75
-msgid "Body"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:53
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:42
 msgid "Video file content"
 msgstr ""
 
@@ -1018,6 +1015,11 @@
 msgid "Audio"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:41
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
+msgid "Body"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:56
 msgid "Audio template"
 msgstr ""
@@ -1031,23 +1033,27 @@
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:46
-msgid "Key number value"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:50
 msgid ""
 "Small text to be displayed above number (according to selected renderer)"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:51
+msgid "Key number value"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:55
+msgid "Displayed unit"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:59
 msgid "The way this text will be rendered depends on presentation template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:83
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:87
 msgid "Key numbers template"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:84
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:88
 msgid "Presentation template used for key numbers"
 msgstr ""
 
@@ -1203,8 +1209,8 @@
 msgid "no defined theme"
 msgstr ""
 
-#: ./src/pyams_content/component/theme/zmi/__init__.py:52
-#: ./src/pyams_content/shared/view/zmi/theme.py:49
+#: ./src/pyams_content/component/theme/zmi/__init__.py:51
+#: ./src/pyams_content/shared/view/zmi/theme.py:48
 msgid "Themes..."
 msgstr ""
 
@@ -1212,7 +1218,7 @@
 msgid "Content themes"
 msgstr ""
 
-#: ./src/pyams_content/component/theme/zmi/manager.py:46
+#: ./src/pyams_content/component/theme/zmi/manager.py:45
 msgid "Themes settings..."
 msgstr ""
 
@@ -1231,11 +1237,11 @@
 msgid "Associations..."
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/paragraph.py:65
+#: ./src/pyams_content/component/association/zmi/paragraph.py:67
 msgid "Add new association paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/paragraph.py:97
+#: ./src/pyams_content/component/association/zmi/paragraph.py:93
 msgid "Edit association paragraph properties"
 msgstr ""
 
@@ -1296,43 +1302,43 @@
 msgid "Add internal link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:84
+#: ./src/pyams_content/component/links/zmi/__init__.py:86
 msgid "Add new internal link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:122
+#: ./src/pyams_content/component/links/zmi/__init__.py:119
 msgid "Edit internal link properties"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:160
+#: ./src/pyams_content/component/links/zmi/__init__.py:150
 msgid "External links"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:175
+#: ./src/pyams_content/component/links/zmi/__init__.py:165
 msgid "Add external link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:187
+#: ./src/pyams_content/component/links/zmi/__init__.py:179
 msgid "Add new external link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:225
+#: ./src/pyams_content/component/links/zmi/__init__.py:212
 msgid "Edit external link properties"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:263
+#: ./src/pyams_content/component/links/zmi/__init__.py:243
 msgid "Mailto links"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:278
+#: ./src/pyams_content/component/links/zmi/__init__.py:258
 msgid "Add mailto link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:290
+#: ./src/pyams_content/component/links/zmi/__init__.py:272
 msgid "Add new mailto link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:328
+#: ./src/pyams_content/component/links/zmi/__init__.py:305
 msgid "Edit mailto link properties"
 msgstr ""
 
@@ -1623,24 +1629,24 @@
 msgid "Youtube settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:61
+#: ./src/pyams_content/component/video/zmi/paragraph.py:62
 msgid "External video..."
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:72
+#: ./src/pyams_content/component/video/zmi/paragraph.py:75
 msgid "Add new external video..."
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:145
+#: ./src/pyams_content/component/video/zmi/paragraph.py:126
 msgid "Video provider is required"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:194
-#: ./src/pyams_content/component/video/zmi/paragraph.py:259
+#: ./src/pyams_content/component/video/zmi/paragraph.py:175
+#: ./src/pyams_content/component/video/zmi/paragraph.py:229
 msgid "Video provider settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:174
+#: ./src/pyams_content/component/video/zmi/paragraph.py:155
 msgid "Other settings"
 msgstr ""
 
@@ -1653,8 +1659,8 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/common/__init__.py:237
-#: ./src/pyams_content/shared/common/zmi/properties.py:72
-#: ./src/pyams_content/shared/common/zmi/manager.py:97
+#: ./src/pyams_content/shared/common/zmi/properties.py:70
+#: ./src/pyams_content/shared/common/zmi/manager.py:96
 msgid "Properties"
 msgstr ""
 
@@ -1717,11 +1723,11 @@
 msgid "Modified before..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/properties.py:62
+#: ./src/pyams_content/shared/common/zmi/properties.py:60
 msgid "Composition"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/properties.py:83
+#: ./src/pyams_content/shared/common/zmi/properties.py:82
 msgid "Content properties"
 msgstr ""
 
@@ -1734,7 +1740,7 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/common/zmi/types.py:183
-#: ./src/pyams_content/shared/common/zmi/types.py:411
+#: ./src/pyams_content/shared/common/zmi/types.py:396
 msgid "Default associations"
 msgstr ""
 
@@ -1746,27 +1752,27 @@
 msgid "Add data type"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:245
+#: ./src/pyams_content/shared/common/zmi/types.py:246
 msgid "Add new data type"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:291
+#: ./src/pyams_content/shared/common/zmi/types.py:283
 msgid "Data type properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:374
+#: ./src/pyams_content/shared/common/zmi/types.py:359
 msgid "Subtype label"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:455
+#: ./src/pyams_content/shared/common/zmi/types.py:440
 msgid "Add subtype"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:466
+#: ./src/pyams_content/shared/common/zmi/types.py:452
 msgid "Add new subtype"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:518
+#: ./src/pyams_content/shared/common/zmi/types.py:498
 msgid "Data subtype properties"
 msgstr ""
 
@@ -1778,19 +1784,19 @@
 msgid "Specified type name is already used!"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:494
+#: ./src/pyams_content/shared/common/zmi/types.py:474
+msgid "Subtype was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:488
 msgid "Specified subtype name is already used!"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:505
-msgid "Subtype was correctly added."
-msgstr ""
-
 #: ./src/pyams_content/shared/common/zmi/types.py:155
 msgid "Click to see subtypes"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:907
+#: ./src/pyams_content/shared/common/zmi/workflow.py:847
 msgid "Prior checks"
 msgstr ""
 
@@ -1798,46 +1804,46 @@
 msgid "Request publication"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:218
+#: ./src/pyams_content/shared/common/zmi/workflow.py:213
 #: ./src/pyams_content/workflow/__init__.py:315
 msgid "Cancel publication request"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:263
+#: ./src/pyams_content/shared/common/zmi/workflow.py:253
 msgid "Refuse publication request"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:322
+#: ./src/pyams_content/shared/common/zmi/workflow.py:307
 #: ./src/pyams_content/workflow/basic.py:196
 msgid "Publish"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:416
+#: ./src/pyams_content/shared/common/zmi/workflow.py:396
 msgid "Request retire"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:477
+#: ./src/pyams_content/shared/common/zmi/workflow.py:452
 msgid "Cancel retire request"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:522
+#: ./src/pyams_content/shared/common/zmi/workflow.py:492
 msgid "Retire"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:568
+#: ./src/pyams_content/shared/common/zmi/workflow.py:533
 #: ./src/pyams_content/workflow/__init__.py:436
 msgid "Request archive"
 msgstr ""
 
+#: ./src/pyams_content/shared/common/zmi/workflow.py:576
+msgid "Cancel archive request"
+msgstr ""
+
 #: ./src/pyams_content/shared/common/zmi/workflow.py:616
-msgid "Cancel archive request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:661
 msgid "Archive"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:707
+#: ./src/pyams_content/shared/common/zmi/workflow.py:657
 #: ./src/pyams_content/workflow/__init__.py:501
 #: ./src/pyams_content/workflow/__init__.py:513
 #: ./src/pyams_content/workflow/__init__.py:525
@@ -1848,39 +1854,39 @@
 msgid "Create new version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:763
+#: ./src/pyams_content/shared/common/zmi/workflow.py:708
 #: ./src/pyams_content/workflow/__init__.py:561
 #: ./src/pyams_content/workflow/basic.py:248
 msgid "Delete version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:853
+#: ./src/pyams_content/shared/common/zmi/workflow.py:793
 msgid "Previewed content?"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:857
+#: ./src/pyams_content/shared/common/zmi/workflow.py:797
 msgid "Verified content?"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:188
-#: ./src/pyams_content/shared/common/zmi/workflow.py:385
+#: ./src/pyams_content/shared/common/zmi/workflow.py:183
+#: ./src/pyams_content/shared/common/zmi/workflow.py:365
 msgid "Publication start date is required"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:291
-#: ./src/pyams_content/shared/common/zmi/workflow.py:447
+#: ./src/pyams_content/shared/common/zmi/workflow.py:276
+#: ./src/pyams_content/shared/common/zmi/workflow.py:422
 msgid "A comment is required"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:786
+#: ./src/pyams_content/shared/common/zmi/workflow.py:732
 msgid "Delete content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:795
+#: ./src/pyams_content/shared/common/zmi/workflow.py:741
 msgid "Delete definitively"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:923
+#: ./src/pyams_content/shared/common/zmi/workflow.py:863
 msgid ""
 "You must confirm that you previewed and checked this content before "
 "requesting publication!!"
@@ -1900,7 +1906,7 @@
 msgid "{state} {date}"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:266
+#: ./src/pyams_content/shared/common/zmi/__init__.py:265
 msgid "Duplicate content..."
 msgstr ""
 
@@ -1908,20 +1914,20 @@
 msgid "Duplicate content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:85
+#: ./src/pyams_content/shared/common/zmi/__init__.py:84
 msgid "This title can be modified afterwards"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:277
+#: ./src/pyams_content/shared/common/zmi/__init__.py:276
 msgid "Duplicate this content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:338
+#: ./src/pyams_content/shared/common/zmi/__init__.py:337
 #, python-format
 msgid "Clone created from version {source} of {oid} (in « {state} » state)"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:389
+#: ./src/pyams_content/shared/common/zmi/__init__.py:382
 msgid "Created or modified in this version"
 msgstr ""
 
@@ -1972,39 +1978,39 @@
 msgid "Shared tool properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:132
+#: ./src/pyams_content/shared/common/zmi/manager.py:125
 msgid "WARNING"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:134
+#: ./src/pyams_content/shared/common/zmi/manager.py:127
 msgid ""
 "Workflow shouldn't be modified if this tool already contains any shared "
 "content!"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:157
+#: ./src/pyams_content/shared/common/zmi/manager.py:150
 msgid "Languages"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:168
+#: ./src/pyams_content/shared/common/zmi/manager.py:162
 msgid "Content languages"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:185
+#: ./src/pyams_content/shared/common/zmi/manager.py:172
 msgid ""
 "Tool languages are used to translate own tool properties, and newly created "
 "contents will propose these languages by default"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:81
+#: ./src/pyams_content/shared/common/zmi/manager.py:80
 msgid "Content management"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/manager.py:83
+#: ./src/pyams_content/shared/common/zmi/manager.py:82
 msgid "Tool management"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/owner.py:51
+#: ./src/pyams_content/shared/common/zmi/owner.py:50
 msgid "Change owner..."
 msgstr ""
 
@@ -2012,29 +2018,29 @@
 msgid "Change content's owner"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/owner.py:132
+#: ./src/pyams_content/shared/common/zmi/owner.py:125
 msgid ""
 "All versions of this content which are not archived will be transferred to "
 "newly selected owner"
 msgstr ""
 
+#: ./src/pyams_content/shared/common/zmi/owner.py:60
+msgid "New owner"
+msgstr ""
+
 #: ./src/pyams_content/shared/common/zmi/owner.py:61
-msgid "New owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:62
 msgid "The selected user will become the new content's owner"
 msgstr ""
 
+#: ./src/pyams_content/shared/common/zmi/owner.py:63
+msgid "Keep previous owner as contributor"
+msgstr ""
+
 #: ./src/pyams_content/shared/common/zmi/owner.py:64
-msgid "Keep previous owner as contributor"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:65
 msgid "If 'yes', the previous owner will still be able to modify this content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/owner.py:75
+#: ./src/pyams_content/shared/common/zmi/owner.py:74
 msgid "Change owner"
 msgstr ""
 
@@ -2324,64 +2330,64 @@
 msgid "Content publication start date is not passed yet"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:65
+#: ./src/pyams_content/shared/common/zmi/security.py:64
 msgid "Contributors restrictions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:74
+#: ./src/pyams_content/shared/common/zmi/security.py:73
 msgid "Content contributors restrictions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:108
+#: ./src/pyams_content/shared/common/zmi/security.py:107
 msgid "Contributor name"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:119
-#: ./src/pyams_content/shared/common/zmi/security.py:277
+#: ./src/pyams_content/shared/common/zmi/security.py:118
+#: ./src/pyams_content/shared/common/zmi/security.py:270
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:252
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:277
 msgid "Publication checks"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:225
+#: ./src/pyams_content/shared/common/zmi/security.py:218
 msgid "Managers restrictions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:234
+#: ./src/pyams_content/shared/common/zmi/security.py:227
 msgid "Content managers restrictions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:266
+#: ./src/pyams_content/shared/common/zmi/security.py:259
 msgid "Manager name"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:294
+#: ./src/pyams_content/shared/common/zmi/security.py:287
 msgid "Restricted"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:311
+#: ./src/pyams_content/shared/common/zmi/security.py:304
 msgid "Owners"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:401
+#: ./src/pyams_content/shared/common/zmi/security.py:394
 msgid "Publication workflow"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:168
+#: ./src/pyams_content/shared/common/zmi/security.py:167
 #, python-format
 msgid "Edit contributor restrictions for « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:360
+#: ./src/pyams_content/shared/common/zmi/security.py:353
 #, python-format
 msgid "Edit manager restrictions for « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:407
+#: ./src/pyams_content/shared/common/zmi/security.py:400
 msgid "Apply contents restrictions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:409
+#: ./src/pyams_content/shared/common/zmi/security.py:402
 msgid ""
 "You can specify which contents this manager will be able to manage. If you "
 "specify several criteria, the manager will be able to manage contents for "
@@ -3004,11 +3010,11 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/form/zmi/field.py:226
-#: ./src/pyams_content/shared/form/zmi/field.py:237
+#: ./src/pyams_content/shared/form/zmi/field.py:239
 msgid "Add form field"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:285
+#: ./src/pyams_content/shared/form/zmi/field.py:281
 msgid "Edit form field properties"
 msgstr ""
 
@@ -3020,7 +3026,7 @@
 msgid "No currently defined form field."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:262
+#: ./src/pyams_content/shared/form/zmi/field.py:266
 msgid "Specified name is already used!"
 msgstr ""
 
@@ -3196,7 +3202,7 @@
 msgid "View themes settings"
 msgstr ""
 
-#: ./src/pyams_content/shared/view/zmi/reference.py:53
+#: ./src/pyams_content/shared/view/zmi/reference.py:52
 msgid "References..."
 msgstr ""
 
@@ -3336,12 +3342,12 @@
 msgid "Image map..."
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:65
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:67
 msgid "Add new image map"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:97
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:96
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:94
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:93
 msgid "Edit paragraph properties"
 msgstr ""
 
@@ -3401,7 +3407,7 @@
 msgid "Bad query object_name parameter value!"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:46
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:45
 msgid "Add image area"
 msgstr ""
 
@@ -3409,7 +3415,7 @@
 msgid "Add new image area"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:108
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:102
 msgid "Edit image map properties"
 msgstr ""
 
@@ -3467,15 +3473,15 @@
 msgid "Add site folder..."
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/folder.py:90
+#: ./src/pyams_content/shared/site/zmi/folder.py:91
 msgid "Add site folder"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/folder.py:166
+#: ./src/pyams_content/shared/site/zmi/folder.py:160
 msgid "Site folder management"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/folder.py:177
+#: ./src/pyams_content/shared/site/zmi/folder.py:171
 msgid "Site folder properties"
 msgstr ""
 
@@ -3486,16 +3492,16 @@
 
 #: ./src/pyams_content/shared/site/zmi/folder.py:72
 #: ./src/pyams_content/shared/site/zmi/__init__.py:72
-#: ./src/pyams_content/shared/site/zmi/link.py:67
+#: ./src/pyams_content/shared/site/zmi/link.py:66
 msgid "Parent"
 msgstr ""
 
 #: ./src/pyams_content/shared/site/zmi/folder.py:73
-#: ./src/pyams_content/shared/site/zmi/link.py:68
+#: ./src/pyams_content/shared/site/zmi/link.py:67
 msgid "Folder's parent"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/folder.py:150
+#: ./src/pyams_content/shared/site/zmi/folder.py:153
 msgid "You must provide a folder name for default server language!"
 msgstr ""
 
@@ -3507,7 +3513,7 @@
 msgid "Add topic..."
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/__init__.py:84
+#: ./src/pyams_content/shared/site/zmi/__init__.py:86
 msgid "Add topic"
 msgstr ""
 
@@ -3515,7 +3521,7 @@
 msgid "Topic's parent"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/link.py:58
+#: ./src/pyams_content/shared/site/zmi/link.py:57
 msgid "Rent content..."
 msgstr ""
 
@@ -3523,77 +3529,77 @@
 msgid "Rent existing content"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/link.py:141
+#: ./src/pyams_content/shared/site/zmi/link.py:135
 msgid "Edit content link properties"
 msgstr ""
 
 #: ./src/pyams_content/shared/site/zmi/container.py:106
 #: ./src/pyams_content/shared/site/zmi/container.py:118
-#: ./src/pyams_content/shared/blog/zmi/manager.py:160
-#: ./src/pyams_content/shared/blog/zmi/manager.py:172
+#: ./src/pyams_content/shared/blog/zmi/manager.py:155
+#: ./src/pyams_content/shared/blog/zmi/manager.py:167
 msgid "Publication dates..."
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:131
-#: ./src/pyams_content/shared/blog/zmi/manager.py:185
+#: ./src/pyams_content/shared/site/zmi/container.py:132
+#: ./src/pyams_content/shared/blog/zmi/manager.py:181
 msgid "Update publication dates"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:183
-#: ./src/pyams_content/shared/site/zmi/container.py:193
+#: ./src/pyams_content/shared/site/zmi/container.py:178
+#: ./src/pyams_content/shared/site/zmi/container.py:188
 #: ./src/pyams_content/root/zmi/sites.py:68
 msgid "Site tree"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:312
-#: ./src/pyams_content/shared/site/zmi/container.py:162
+#: ./src/pyams_content/shared/site/zmi/container.py:307
+#: ./src/pyams_content/shared/site/zmi/container.py:156
 msgid "Visible element?"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:313
+#: ./src/pyams_content/shared/site/zmi/container.py:308
 msgid "Switch element visibility"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:374
+#: ./src/pyams_content/shared/site/zmi/container.py:369
 msgid "Folders and topics"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:410
+#: ./src/pyams_content/shared/site/zmi/container.py:405
 #: ./src/pyams_content/root/zmi/__init__.py:798
 msgid "Content"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:506
+#: ./src/pyams_content/shared/site/zmi/container.py:501
 msgid "Delete site item"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:383
+#: ./src/pyams_content/shared/site/zmi/container.py:378
 msgid "Click to open/close all folders"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:399
+#: ./src/pyams_content/shared/site/zmi/container.py:394
 msgid "Click to show/hide inner folders"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:269
+#: ./src/pyams_content/shared/site/zmi/container.py:264
 msgid "Can't reparent object to one of it's children. Reloading..."
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/manager.py:58
+#: ./src/pyams_content/shared/site/zmi/manager.py:57
 msgid "Site management"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/manager.py:88
-#: ./src/pyams_content/shared/site/zmi/manager.py:100
+#: ./src/pyams_content/shared/site/zmi/manager.py:87
+#: ./src/pyams_content/shared/site/zmi/manager.py:101
 msgid "Add site manager"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/manager.py:99
+#: ./src/pyams_content/shared/site/zmi/manager.py:100
 msgid "Site manager"
 msgstr ""
 
 #: ./src/pyams_content/shared/site/zmi/manager.py:131
-#: ./src/pyams_content/shared/blog/zmi/manager.py:126
+#: ./src/pyams_content/shared/blog/zmi/manager.py:127
 msgid "You must provide a short name for default server language!"
 msgstr ""
 
@@ -3655,11 +3661,11 @@
 msgid "no URL defined"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:53
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:54
 msgid "Logos..."
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:64
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:67
 msgid "Add new logos paragraph"
 msgstr ""
 
@@ -3720,19 +3726,19 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/blog/zmi/manager.py:83
-#: ./src/pyams_content/shared/blog/zmi/manager.py:95
+#: ./src/pyams_content/shared/blog/zmi/manager.py:97
 msgid "Add blog manager"
 msgstr ""
 
-#: ./src/pyams_content/shared/blog/zmi/manager.py:94
+#: ./src/pyams_content/shared/blog/zmi/manager.py:96
 msgid "Blog manager"
 msgstr ""
 
-#: ./src/pyams_content/shared/blog/zmi/manager.py:130
+#: ./src/pyams_content/shared/blog/zmi/manager.py:131
 msgid "Specified blog manager name is already used!"
 msgstr ""
 
-#: ./src/pyams_content/shared/blog/zmi/manager.py:134
+#: ./src/pyams_content/shared/blog/zmi/manager.py:135
 msgid "A blog manager is already registered with this name!!"
 msgstr ""
 
@@ -4129,11 +4135,11 @@
 msgid "Automatic contents withdrawal:\n"
 msgstr ""
 
-#: ./src/pyams_content/workflow/zmi/task.py:43
+#: ./src/pyams_content/workflow/zmi/task.py:42
 msgid "Add content archiver task..."
 msgstr ""
 
-#: ./src/pyams_content/workflow/zmi/task.py:54
+#: ./src/pyams_content/workflow/zmi/task.py:55
 msgid "Add automatic content archiver"
 msgstr ""
 
@@ -4194,11 +4200,11 @@
 msgid "Properties..."
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/table.py:156
+#: ./src/pyams_content/reference/zmi/table.py:157
 msgid "Edit table properties"
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/table.py:173
+#: ./src/pyams_content/reference/zmi/table.py:167
 msgid "Table management"
 msgstr ""
 
@@ -4210,7 +4216,7 @@
 msgid "Pictograms selection..."
 msgstr ""
 
-#: ./src/pyams_content/reference/pictograms/zmi/manager.py:62
+#: ./src/pyams_content/reference/pictograms/zmi/manager.py:63
 #: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
 #: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:73
 msgid "Selected pictograms"
@@ -4371,7 +4377,7 @@
 "set to 0 to always display the alert"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/__init__.py:46
+#: ./src/pyams_content/features/alert/zmi/__init__.py:45
 msgid "Add alert"
 msgstr ""
 
@@ -4379,7 +4385,7 @@
 msgid "Add new alert"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/__init__.py:85
+#: ./src/pyams_content/features/alert/zmi/__init__.py:79
 msgid "Edit alert properties"
 msgstr ""
 
@@ -4478,15 +4484,15 @@
 msgid "Ask for review..."
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:99
+#: ./src/pyams_content/features/review/zmi/__init__.py:100
 msgid "Content review request"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:172
+#: ./src/pyams_content/features/review/zmi/__init__.py:166
 msgid "Comments"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:192
+#: ./src/pyams_content/features/review/zmi/__init__.py:186
 msgid "Review comments"
 msgstr ""
 
@@ -4521,15 +4527,15 @@
 msgid "Ask for content review"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:153
+#: ./src/pyams_content/features/review/zmi/__init__.py:147
 msgid "Request successful. No new notification have been sent"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:266
+#: ./src/pyams_content/features/review/zmi/__init__.py:260
 msgid "Message is mandatory!"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:141
+#: ./src/pyams_content/features/review/zmi/__init__.py:135
 #, python-format
 msgid "Request successful. {count} new notification(s) have been sent"
 msgstr ""
--- a/src/pyams_content/root/__init__.py	Fri Jun 08 10:35:42 2018 +0200
+++ b/src/pyams_content/root/__init__.py	Mon Jun 11 10:00:17 2018 +0200
@@ -18,6 +18,7 @@
 # import standard library
 
 # import interfaces
+from pyams_content.component.illustration import IIllustrationTarget
 from pyams_content.features.alert.interfaces import IAlertTarget
 from pyams_content.features.footer.interfaces import IFooterTarget
 from pyams_content.features.header.interfaces import IHeaderTarget
@@ -46,7 +47,7 @@
 
 
 @implementer(IDefaultProtectionPolicy, ISiteRoot, ISiteRootRoles, IPortalContext,
-             IHeaderTarget, IFooterTarget, IAlertTarget, IPreviewTarget)
+             IIllustrationTarget, IHeaderTarget, IFooterTarget, IAlertTarget, IPreviewTarget)
 class SiteRoot(ProtectedObject, BaseSiteRoot, UserSkinnableContent):
     """Main site root"""