merge default doc-dc
authorDamien Correia
Fri, 27 Apr 2018 12:00:07 +0200
branchdoc-dc
changeset 649 06ab962b04c5
parent 648 b156fba7e4fe (current diff)
parent 541 60923751ba2f (diff)
child 650 927afb26b1ce
merge default
--- a/.hgtags	Fri Apr 20 16:52:36 2018 +0200
+++ b/.hgtags	Fri Apr 27 12:00:07 2018 +0200
@@ -14,3 +14,4 @@
 930ead384f3c0326c029d809d48827de44381a34 0.1.10.1
 d73905f6a2eb2949b3979671bf261965473bb7b9 0.1.11
 5d94baef6923642af27a9f30f377d45f67f04bbf 0.1.12
+cf2d19055dd754ce3ed30be24f83dae351b3ae5c 0.1.13
--- a/docs/HISTORY.txt	Fri Apr 20 16:52:36 2018 +0200
+++ b/docs/HISTORY.txt	Fri Apr 27 12:00:07 2018 +0200
@@ -1,6 +1,18 @@
 History
 =======
 
+0.1.13
+------
+ - renamed factories to use snake_case on functions
+ - updated custom "update_content" methods for last PyAMS_form package
+ - added checks for "pyams_gis" package availability to enable GPS coordinates attributes
+ - refactored blog post add form
+ - added ProtectedFormObjectMixin as base class to menu dividers to avoid menus only containing dividers
+ - added prefix to edit forms
+ - updated TinyMCE editor initialization
+ - updated contact paragraph properties
+ - updated JSON events responses
+
 0.1.12
 ------
  - updated site upgrade code to use factory interfaces for shared tools
--- a/src/pyams_content.egg-info/PKG-INFO	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content.egg-info/PKG-INFO	Fri Apr 27 12:00:07 2018 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyams-content
-Version: 0.1.12
+Version: 0.1.13
 Summary: PyAMS base content interfaces and classes
 Home-page: http://hg.ztfy.org/pyams/pyams_content
 Author: Thierry Florac
@@ -73,6 +73,18 @@
         History
         =======
         
+        0.1.13
+        ------
+         - renamed factories to use snake_case on functions
+         - updated custom "update_content" methods for last PyAMS_form package
+         - added checks for "pyams_gis" package availability to enable GPS coordinates attributes
+         - refactored blog post add form
+         - added ProtectedFormObjectMixin as base class to menu dividers to avoid menus only containing dividers
+         - added prefix to edit forms
+         - updated TinyMCE editor initialization
+         - updated contact paragraph properties
+         - updated JSON events responses
+        
         0.1.12
         ------
          - updated site upgrade code to use factory interfaces for shared tools
--- a/src/pyams_content.egg-info/SOURCES.txt	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content.egg-info/SOURCES.txt	Fri Apr 27 12:00:07 2018 +0200
@@ -23,7 +23,6 @@
 src/pyams_content/component/association/zmi/__init__.py
 src/pyams_content/component/association/zmi/interfaces.py
 src/pyams_content/component/association/zmi/paragraph.py
-src/pyams_content/component/association/zmi/templates/associations.pt
 src/pyams_content/component/extfile/__init__.py
 src/pyams_content/component/extfile/interfaces/__init__.py
 src/pyams_content/component/extfile/zmi/__init__.py
@@ -56,6 +55,7 @@
 src/pyams_content/component/paragraph/frame.py
 src/pyams_content/component/paragraph/header.py
 src/pyams_content/component/paragraph/html.py
+src/pyams_content/component/paragraph/keynumber.py
 src/pyams_content/component/paragraph/keypoint.py
 src/pyams_content/component/paragraph/milestone.py
 src/pyams_content/component/paragraph/pictogram.py
@@ -66,6 +66,7 @@
 src/pyams_content/component/paragraph/interfaces/frame.py
 src/pyams_content/component/paragraph/interfaces/header.py
 src/pyams_content/component/paragraph/interfaces/html.py
+src/pyams_content/component/paragraph/interfaces/keynumber.py
 src/pyams_content/component/paragraph/interfaces/keypoint.py
 src/pyams_content/component/paragraph/interfaces/milestone.py
 src/pyams_content/component/paragraph/interfaces/pictogram.py
@@ -78,6 +79,7 @@
 src/pyams_content/component/paragraph/zmi/header.py
 src/pyams_content/component/paragraph/zmi/html.py
 src/pyams_content/component/paragraph/zmi/interfaces.py
+src/pyams_content/component/paragraph/zmi/keynumber.py
 src/pyams_content/component/paragraph/zmi/keypoint.py
 src/pyams_content/component/paragraph/zmi/milestone.py
 src/pyams_content/component/paragraph/zmi/pictogram.py
@@ -86,11 +88,8 @@
 src/pyams_content/component/paragraph/zmi/video.py
 src/pyams_content/component/paragraph/zmi/templates/associations.pt
 src/pyams_content/component/paragraph/zmi/templates/html-render.pt
-src/pyams_content/component/paragraph/zmi/templates/milestones.pt
 src/pyams_content/component/paragraph/zmi/templates/paragraph-title-icon.pt
 src/pyams_content/component/paragraph/zmi/templates/paragraph-title-toolbar.pt
-src/pyams_content/component/paragraph/zmi/templates/paragraphs.pt
-src/pyams_content/component/paragraph/zmi/templates/pictograms.pt
 src/pyams_content/component/paragraph/zmi/templates/raw-render.pt
 src/pyams_content/component/theme/__init__.py
 src/pyams_content/component/theme/portlet.py
@@ -108,6 +107,7 @@
 src/pyams_content/component/video/provider/vimeo.py
 src/pyams_content/component/video/provider/youtube.py
 src/pyams_content/component/video/provider/zmi/__init__.py
+src/pyams_content/component/video/provider/zmi/templates/custom-render.pt
 src/pyams_content/component/video/provider/zmi/templates/dailymotion-render.pt
 src/pyams_content/component/video/provider/zmi/templates/vimeo-render.pt
 src/pyams_content/component/video/provider/zmi/templates/youtube-render.pt
@@ -117,6 +117,11 @@
 src/pyams_content/component/video/zmi/templates/video-settings.pt
 src/pyams_content/doctests/README.txt
 src/pyams_content/features/__init__.py
+src/pyams_content/features/alert/__init__.py
+src/pyams_content/features/alert/container.py
+src/pyams_content/features/alert/interfaces.py
+src/pyams_content/features/alert/zmi/__init__.py
+src/pyams_content/features/alert/zmi/container.py
 src/pyams_content/features/checker/__init__.py
 src/pyams_content/features/checker/interfaces.py
 src/pyams_content/features/checker/zmi/__init__.py
@@ -284,6 +289,7 @@
 src/pyams_content/skin/routes.py
 src/pyams_content/skin/resources/css/pyams_content.css
 src/pyams_content/skin/resources/css/pyams_content.min.css
+src/pyams_content/skin/resources/img/internal-link.png
 src/pyams_content/skin/resources/js/jquery-canvasAreaDraw.js
 src/pyams_content/skin/resources/js/jquery-canvasAreaDraw.min.js
 src/pyams_content/skin/resources/js/jquery-imagemapster-1.2.10.js
--- a/src/pyams_content/component/illustration/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/illustration/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -52,13 +52,11 @@
 class Illustration(Persistent, Contained, RenderedContentMixin):
     """Illustration persistent class"""
 
+    _data = I18nFileProperty(IIllustration['data'])
     title = FieldProperty(IIllustration['title'])
     alt_title = FieldProperty(IIllustration['alt_title'])
     description = FieldProperty(IIllustration['description'])
     author = FieldProperty(IIllustration['author'])
-    _data = I18nFileProperty(IIllustration['data'])
-    filename = FieldProperty(IIllustration['filename'])
-    language = FieldProperty(IIllustration['language'])
     renderer = FieldProperty(IIllustration['renderer'])
 
     @property
@@ -98,11 +96,6 @@
             info = IFileInfo(data)
             info.title = II18n(illustration).get_attribute('title', lang, request)
             info.description = II18n(illustration).get_attribute('alt_title', lang, request)
-            if not illustration.filename:
-                illustration.filename = info.filename
-            else:
-                info.filename = illustration.filename
-            info.language = illustration.language
 
 
 @subscriber(IObjectAddedEvent, context_selector=IIllustration)
@@ -169,7 +162,7 @@
                         output.append(missing_lang_value.format(field=translate(IIllustration[attr].title),
                                                                 lang=lang))
         if has_data:
-            for attr in ('author', 'filename'):
+            for attr in ('author', ):
                 value = getattr(self.context, attr)
                 if not value:
                     output.append(missing_value.format(field=translate(IIllustration[attr].title)))
--- a/src/pyams_content/component/illustration/interfaces/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/illustration/interfaces/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -38,6 +38,10 @@
 class IIllustration(IRenderedContent):
     """Illustration paragraph"""
 
+    data = I18nThumbnailMediaField(title=_("Image or video data"),
+                                   description=_("Image or video content"),
+                                   required=False)
+
     title = I18nTextLineField(title=_("Legend"),
                               required=False)
 
@@ -53,19 +57,6 @@
                       description=_("Name of picture's author"),
                       required=False)
 
-    data = I18nThumbnailMediaField(title=_("Image or video data"),
-                                   description=_("Image or video content"),
-                                   required=False)
-
-    filename = TextLine(title=_("Save file as..."),
-                        description=_("Name under which the file will be saved"),
-                        required=False)
-
-    language = Choice(title=_("Language"),
-                      description=_("File's content language"),
-                      vocabulary="PyAMS base languages",
-                      required=False)
-
     renderer = Choice(title=_("Illustration template"),
                       description=_("Presentation template used for illustration"),
                       vocabulary=ILLUSTRATION_RENDERERS,
@@ -85,17 +76,3 @@
     data = I18nThumbnailMediaField(title=_("Image or video data"),
                                    description=_("Image or video content"),
                                    required=True)
-
-    filename = TextLine(title=_("Save file as..."),
-                        description=_("Name under which the file will be saved"),
-                        required=False)
-
-    language = Choice(title=_("Language"),
-                      description=_("File's content language"),
-                      vocabulary="PyAMS base languages",
-                      required=False)
-
-    renderer = Choice(title=_("Illustration template"),
-                      description=_("Presentation template used for illustration"),
-                      vocabulary=ILLUSTRATION_RENDERERS,
-                      default='default')
--- a/src/pyams_content/component/illustration/zmi/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -22,24 +22,18 @@
 from pyams_form.interfaces.form import IInnerSubForm, IWidgetsPrefixViewletsManager
 from pyams_skin.layer import IPyAMSLayer
 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
-from pyams_utils.interfaces.data import IObjectData
 from pyams_zmi.interfaces import IPropertiesEditForm
 from transaction.interfaces import ITransactionManager
 
 # import packages
 from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event
 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
-from pyams_content.skin import pyams_content
-from pyams_form.security import ProtectedFormObjectMixin
 from pyams_skin.event import get_json_form_refresh_event, get_json_widget_refresh_event
-from pyams_skin.viewlet.toolbar import JsToolbarAction
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
-from pyams_utils.fanstatic import get_resource_path
 from pyams_viewlet.viewlet import viewlet_config, Viewlet, EmptyViewlet
 from pyams_zmi.form import InnerAdminEditForm
 from z3c.form import field
-from zope.interface import implementer
 
 from pyams_content import _
 
@@ -56,7 +50,7 @@
 
     weight = 5
     action_class = 'action illustration nowrap width-40'
-    icon_class = 'fa fa-fw fa-file-image-o'
+    icon_class = 'fa fa-fw fa-picture-o'
     icon_hint = _("Illustration")
 
     marker_type = 'illustration'
@@ -81,8 +75,19 @@
     padding_class = ''
     fieldset_class = 'margin-top-10 padding-y-5'
 
-    legend = _("Illustration")
-    legend_class = 'illustration switcher no-y-padding padding-right-10 pull-left width-auto'
+    @property
+    def legend(self):
+        if IBaseParagraph.providedBy(self.context):
+            return _("Illustration")
+        else:
+            return _("Header illustration")
+
+    @property
+    def legend_class(self):
+        if IBaseParagraph.providedBy(self.context):
+            return 'illustration switcher no-y-padding padding-right-10 pull-left width-auto'
+        else:
+            return 'illustration no-y-padding'
 
     fields = field.Fields(IIllustration).omit('__parent__', '__name__')
     fields['renderer'].widgetFactory = RendererFieldWidget
@@ -125,39 +130,15 @@
         return output
 
 
-@viewlet_config(name='add-illustration.action', context=IIllustrationTarget, layer=IPyAMSLayer,
-                view=IllustrationPropertiesInnerEditForm, manager=IWidgetsPrefixViewletsManager)
-@implementer(IObjectData)
-class AddIllustrationAction(ProtectedFormObjectMixin, JsToolbarAction):
-    """Add illustration action"""
-
-    group_css_class = 'btn-group clearfix persistent'
-    label = _("Add illustration")
-    url = 'PyAMS_content.illustration.addIllustration'
-
-    def __new__(cls, context, request, view, manager):
-        illustration = IIllustration(context, None)
-        if illustration and illustration.data:
-            for value in illustration.data.values():
-                if value:
-                    return None
-        return JsToolbarAction.__new__(cls)
-
-    @property
-    def object_data(self):
-        return {
-            'ams-plugins': 'pyams_content',
-            'ams-plugin-pyams_content-src': get_resource_path(pyams_content)
-        }
-
-
 @viewlet_config(name='illustration-thumbnail', context=IIllustrationTarget, layer=IPyAMSLayer,
                 view=IllustrationPropertiesInnerEditForm, manager=IWidgetsPrefixViewletsManager)
 @template_config(template='templates/illustration-thumbnail.pt', layer=IPyAMSLayer)
 class IllustrationThumbnail(Viewlet):
-    """Illustration thumbnail"""
+    """Paragraph illustration thumbnail"""
 
     def __new__(cls, context, request, view, manager):
+        if not IBaseParagraph.providedBy(context):
+            return None
         illustration = IIllustration(context, None)
         if (not illustration) or not illustration.data:
             return None
--- a/src/pyams_content/component/illustration/zmi/paragraph.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/paragraph.py	Fri Apr 27 12:00:07 2018 +0200
@@ -9,6 +9,7 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from zope.schema._schema import getFieldNamesInOrder
 
 __docformat__ = 'restructuredtext'
 
@@ -70,7 +71,8 @@
     dialog_class = 'modal-large'
     icon_css_class = 'fa fa-fw fa-file-image-o'
 
-    fields = field.Fields(IIllustrationParagraph).omit('__parent__', '__name__', 'visible')
+    fields = field.Fields(IIllustrationParagraph).select('data', 'title', 'alt_title', 'description',
+                                                         'author', 'renderer')
     ajax_handler = 'add-illustration.json'
     edit_permission = MANAGE_CONTENT_PERMISSION
 
@@ -103,7 +105,8 @@
     dialog_class = 'modal-large'
     icon_css_class = 'fa fa-fw fa-file-image-o'
 
-    fields = field.Fields(IIllustrationParagraph).omit('__parent__', '__name__', 'visible')
+    fields = field.Fields(IIllustrationParagraph).select('data', 'title', 'alt_title', 'description',
+                                                         'author', 'renderer')
     fields['renderer'].widgetFactory = RendererFieldWidget
 
     ajax_handler = 'properties.json'
--- a/src/pyams_content/component/paragraph/header.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/paragraph/header.py	Fri Apr 27 12:00:07 2018 +0200
@@ -43,7 +43,7 @@
 class HeaderParagraph(RenderedContentMixin, BaseParagraph):
     """Header paragraph"""
 
-    icon_class = 'fa-header'
+    icon_class = 'fa-download fa-rotate-180'
     icon_hint = _("Header")
 
     @property
--- a/src/pyams_content/component/paragraph/html.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/paragraph/html.py	Fri Apr 27 12:00:07 2018 +0200
@@ -102,7 +102,7 @@
 class HTMLParagraph(BaseParagraph):
     """HTML paragraph"""
 
-    icon_class = 'fa-html5'
+    icon_class = 'fa-font'
     icon_hint = _("Rich text")
 
     body = FieldProperty(IHTMLParagraph['body'])
--- a/src/pyams_content/component/paragraph/zmi/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -60,7 +60,7 @@
 class DefaultParagraphsSettingsMenu(MenuItem):
     """Default paragraphs settings menu"""
 
-    label = _("Paragraphs types...")
+    label = _("Content block types...")
     icon_class = 'fa-paragraph'
     url = 'default-paragraphs.html'
     modal_target = True
@@ -73,7 +73,7 @@
 
     prefix = 'default_paragraphs.'
 
-    legend = _("Paragraphs types")
+    legend = _("Content block types")
 
     fields = field.Fields(IParagraphFactorySettings)
     ajax_handler = 'default-paragraphs.json'
--- a/src/pyams_content/component/paragraph/zmi/container.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/container.py	Fri Apr 27 12:00:07 2018 +0200
@@ -71,7 +71,7 @@
 class ParagraphsContainerMenu(MenuItem):
     """Paragraphs container menu"""
 
-    label = _("Paragraphs...")
+    label = _("Contents...")
     icon_class = 'fa-paragraph'
     url = '#paragraphs.html'
 
@@ -285,7 +285,7 @@
 class ParagraphContainerView(ContainerAdminView):
     """Paragraphs container view"""
 
-    title = _("Paragraphs list")
+    title = _("Content blocks")
     table_class = ParagraphContainerTable
 
 
@@ -294,7 +294,7 @@
 class ParagraphContainerDialogView(AdminDialogDisplayForm):
     """Paragraphs container dialog view"""
 
-    title = _("Paragraphs list")
+    title = _("Content blocks")
     dialog_class = 'modal-large no-widget-toolbar'
     fieldset_class = 'height-300'
 
@@ -307,7 +307,7 @@
 class ParagraphsView(InnerTableView):
     """Paragraphs view"""
 
-    title = _("Paragraphs")
+    title = _("Content blocks")
 
     table_class = ParagraphContainerBaseTable
     weight = 90
@@ -364,7 +364,7 @@
 class ParagraphsAssociationsMenu(MenuItem):
     """Paragraphs associations container menu"""
 
-    label = _("Associations...")
+    label = _("Links and attachments...")
     icon_class = 'fa-link'
     url = '#paragraphs-associations.html'
 
@@ -376,7 +376,7 @@
 class ParagraphsAssociationsView(AdminView):
     """Paragraphs associations view"""
 
-    title = _("Paragraphs associations")
+    title = _("Content blocks links and attachments")
 
     @reify
     def associations(self):
--- a/src/pyams_content/component/paragraph/zmi/header.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/header.py	Fri Apr 27 12:00:07 2018 +0200
@@ -50,7 +50,7 @@
     """Header paragraph add menu"""
 
     label = _("Header...")
-    label_css_class = 'fa fa-fw fa-header'
+    label_css_class = 'fa fa-fw fa-download fa-rotate-180'
     url = 'add-header-paragraph.html'
     paragraph_type = HEADER_PARAGRAPH_TYPE
 
@@ -61,7 +61,7 @@
     """Header paragraph add form"""
 
     legend = _("Add new header paragraph")
-    icon_css_class = 'fa fa-fw fa-header'
+    icon_css_class = 'fa fa-fw fa-download fa-rotate-180'
 
     fields = field.Fields(IHeaderParagraph).select('header', 'renderer')
     ajax_handler = 'add-header-paragraph.json'
@@ -93,7 +93,7 @@
     prefix = 'header_properties.'
 
     legend = _("Edit header paragraph properties")
-    icon_css_class = 'fa fa-fw fa-header'
+    icon_css_class = 'fa fa-fw fa-download fa-rotate-180'
 
     fields = field.Fields(IHeaderParagraph).select('header', 'renderer')
     fields['renderer'].widgetFactory = RendererFieldWidget
--- a/src/pyams_content/component/paragraph/zmi/html.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/html.py	Fri Apr 27 12:00:07 2018 +0200
@@ -192,7 +192,7 @@
     """Rich text paragraph add menu"""
 
     label = _("Rich text...")
-    label_css_class = 'fa fa-fw fa-html5'
+    label_css_class = 'fa fa-fw fa-font'
     url = 'add-html-paragraph.html'
     paragraph_type = HTML_PARAGRAPH_TYPE
 
@@ -204,7 +204,7 @@
 
     legend = _("Add new rich text paragraph")
     dialog_class = 'modal-max'
-    icon_css_class = 'fa fa-fw fa-html5'
+    icon_css_class = 'fa fa-fw fa-font'
     label_css_class = 'control-label col-md-2'
     input_css_class = 'col-md-10'
 
@@ -239,7 +239,7 @@
 
     legend = _("Edit rich text paragraph properties")
     dialog_class = 'modal-max'
-    icon_css_class = 'fa fa-fw fa-html5'
+    icon_css_class = 'fa fa-fw fa-font'
     label_css_class = 'control-label col-md-2'
     input_css_class = 'col-md-10'
 
--- a/src/pyams_content/component/video/interfaces/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/interfaces/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -37,6 +37,8 @@
 class IExternalVideoProvider(Interface):
     """External video provider"""
 
+    label = Attribute("Video provider label")
+    weight = Attribute("Video provider weight (used for ordering)")
     settings_interface = Attribute("Video provider settings interface")
 
 
--- a/src/pyams_content/component/video/provider/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/provider/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -9,6 +9,10 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from zope.component._api import getUtilitiesFor
+from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
+
+from pyams_utils.request import check_request
 
 __docformat__ = 'restructuredtext'
 
@@ -16,16 +20,78 @@
 # import standard library
 
 # import interfaces
-from pyams_content.component.video.interfaces import IExternalVideoProvider
+from pyams_content.component.video.interfaces import IExternalVideo, IExternalVideoProvider, IExternalVideoSettings
+from pyams_content.component.video.provider.interfaces import ICustomVideoSettings
+from pyams_content.features.checker.interfaces import IContentChecker
 
 # import packages
+from persistent import Persistent
+from pyams_content.component.video import external_video_settings_factory
+from pyams_content.features.checker import BaseContentChecker
+from pyams_utils.adapter import adapter_config
+from pyams_utils.registry import utility_config
 from pyams_utils.vocabulary import vocabulary_config
-from zope.componentvocabulary.vocabulary import UtilityVocabulary
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
+from pyams_content import _
 
 
 @vocabulary_config(name='PyAMS video providers')
-class VideoProvidersVocabulary(UtilityVocabulary):
+class VideoProvidersVocabulary(SimpleVocabulary):
     """Video providers vocabulary"""
 
     interface = IExternalVideoProvider
-    nameOnly = True
+
+    def __init__(self, context):
+        request = check_request()
+        translate = request.localizer.translate
+        utils = sorted(getUtilitiesFor(self.interface, context),
+                       key=lambda x: getattr(x[1], 'weight', 0))
+        terms = [SimpleTerm(name, title=translate(getattr(util, 'label', name))) for name, util in utils]
+        super(VideoProvidersVocabulary, self).__init__(terms)
+
+
+#
+# Custom video provider settings
+#
+
+@implementer(ICustomVideoSettings)
+class CustomVideoSettings(Persistent):
+    """Custom video provider settings"""
+
+    integration_code = FieldProperty(ICustomVideoSettings['integration_code'])
+
+
+@utility_config(name='custom', provides=IExternalVideoProvider)
+class CustomVideoProvider(object):
+    """Custom video provider"""
+
+    label = _("Other provider")
+    weight = 99
+
+    settings_interface = ICustomVideoSettings
+
+
+@adapter_config(context=IExternalVideo, provides=ICustomVideoSettings)
+def custom_video_settings_factory(context):
+    """Customp video settings factory"""
+    if context.provider_name != 'custom':
+        return None
+    return external_video_settings_factory(context)
+
+
+@adapter_config(context=CustomVideoProvider, provides=IExternalVideoSettings)
+def custom_video_provider_settings_factory(context):
+    """Custom video provider settings factory"""
+    return CustomVideoSettings()
+
+
+@adapter_config(context=ICustomVideoSettings, provides=IContentChecker)
+class CustomVideoSettingsContentChecker(BaseContentChecker):
+    """Custom video settings content checker"""
+
+    label = _("Custom video settings")
+
+    def inner_check(self, request):
+        return []
--- a/src/pyams_content/component/video/provider/dailymotion.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/provider/dailymotion.py	Fri Apr 27 12:00:07 2018 +0200
@@ -41,8 +41,6 @@
     """Dailymotion video settings"""
 
     _video_id = FieldProperty(IDailymotionVideoSettings['video_id'])
-    width = FieldProperty(IDailymotionVideoSettings['width'])
-    height = FieldProperty(IDailymotionVideoSettings['height'])
     start_at = FieldProperty(IDailymotionVideoSettings['start_at'])
     autoplay = FieldProperty(IDailymotionVideoSettings['autoplay'])
     show_info = FieldProperty(IDailymotionVideoSettings['show_info'])
@@ -52,6 +50,8 @@
     show_endscreen = FieldProperty(IDailymotionVideoSettings['show_endscreen'])
     allow_fullscreen = FieldProperty(IDailymotionVideoSettings['allow_fullscreen'])
     allow_sharing = FieldProperty(IDailymotionVideoSettings['allow_sharing'])
+    width = FieldProperty(IDailymotionVideoSettings['width'])
+    height = FieldProperty(IDailymotionVideoSettings['height'])
 
     @property
     def video_id(self):
--- a/src/pyams_content/component/video/provider/interfaces.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/provider/interfaces.py	Fri Apr 27 12:00:07 2018 +0200
@@ -20,11 +20,20 @@
 
 # import packages
 from pyams_utils.schema import ColorField
-from zope.schema import TextLine, Bool, Int, Choice
+from zope.schema import Text, TextLine, Bool, Int, Choice
 
 from pyams_content import _
 
 
+class ICustomVideoSettings(IExternalVideoSettings):
+    """Custom external video provider settings"""
+
+    integration_code = Text(title=_("Integration code"),
+                            description=_("Please select integration code provided by your video provider, "
+                                          "and paste it here"),
+                            required=True)
+
+
 class IYoutubeVideoSettings(IExternalVideoSettings):
     """Youtube video provider settings"""
 
@@ -33,20 +42,6 @@
                                       "copy/paste the given URL here"),
                         required=True)
 
-    width = Int(title=_("Video width"),
-                description=_("Initial video frame width; mandatory for old browsers but may be overridden by "
-                              "presentation skin"),
-                required=True,
-                min=200,
-                default=720)
-
-    height = Int(title=_("Video height"),
-                 description=_("Initial video frame height; mandatory for old browsers but may be overridden by "
-                               "presentation skin"),
-                 required=True,
-                 min=200,
-                 default=405)
-
     start_at = TextLine(title=_("Start at"),
                         description=_("Position at which to start video, in 'seconds' or 'minutes:seconds' format"),
                         required=False,
@@ -77,14 +72,14 @@
                          default=True)
 
     hide_branding = Bool(title=_("Hide branding?"),
-                         description=_("If 'yes', Youtube branding won't be displayed"),
+                         description=_("If 'no', Youtube branding will be displayed"),
                          required=True,
-                         default=False)
+                         default=True)
 
     show_related = Bool(title=_("Show related videos?"),
                         description=_("Show related videos when video end"),
                         required=True,
-                        default=True)
+                        default=False)
 
     allow_fullscreen = Bool(title=_("Allow full screen?"),
                             description=_("If 'yes', video can be displayed in full screen"),
@@ -96,15 +91,6 @@
                             required=True,
                             default=False)
 
-
-class IDailymotionVideoSettings(IExternalVideoSettings):
-    """Dailymotion video provider settings"""
-
-    video_id = TextLine(title=_("Video ID"),
-                        description=_("To get video ID, just use the 'Share' button in Dailymotion platform, "
-                                      "click on \"Copy link\" and paste the given URL here"),
-                        required=True)
-
     width = Int(title=_("Video width"),
                 description=_("Initial video frame width; mandatory for old browsers but may be overridden by "
                               "presentation skin"),
@@ -119,6 +105,15 @@
                  min=200,
                  default=405)
 
+
+class IDailymotionVideoSettings(IExternalVideoSettings):
+    """Dailymotion video provider settings"""
+
+    video_id = TextLine(title=_("Video ID"),
+                        description=_("To get video ID, just use the 'Share' button in Dailymotion platform, "
+                                      "click on \"Copy link\" and paste the given URL here"),
+                        required=True)
+
     start_at = TextLine(title=_("Start at"),
                         description=_("Position at which to start video, in 'seconds' or 'minutes:seconds' format"),
                         required=False,
@@ -145,14 +140,14 @@
                       default='dark')
 
     show_branding = Bool(title=_("Show branding?"),
-                         description=_("If 'no', Dailymotion branding won't be displayed"),
+                         description=_("If 'yes', Dailymotion branding will be displayed"),
                          required=True,
-                         default=True)
+                         default=False)
 
     show_endscreen = Bool(title=_("Show end screen?"),
                           description=_("Show end screen when video end"),
                           required=True,
-                          default=True)
+                          default=False)
 
     allow_fullscreen = Bool(title=_("Allow full screen?"),
                             description=_("If 'yes', video can be displayed in full screen"),
@@ -164,15 +159,6 @@
                          required=True,
                          default=True)
 
-
-class IVimeoVideoSettings(IExternalVideoSettings):
-    """Vimeo video provider settings"""
-
-    video_id = TextLine(title=_("Video ID"),
-                        description=_("To get video ID, just use the 'Share' button in Vimeo platform, "
-                                      "click on \"Link\" entry and copy/paste the given URL here"),
-                        required=True)
-
     width = Int(title=_("Video width"),
                 description=_("Initial video frame width; mandatory for old browsers but may be overridden by "
                               "presentation skin"),
@@ -187,13 +173,22 @@
                  min=200,
                  default=405)
 
+
+class IVimeoVideoSettings(IExternalVideoSettings):
+    """Vimeo video provider settings"""
+
+    video_id = TextLine(title=_("Video ID"),
+                        description=_("To get video ID, just use the 'Share' button in Vimeo platform, "
+                                      "click on \"Link\" entry and copy/paste the given URL here"),
+                        required=True)
+
     show_title = Bool(title=_("Show title?"),
                       description=_("If 'no', video title won't be displayed"),
                       required=True,
                       default=True)
 
     show_signature = Bool(title=_("Show signature?"),
-                          description=_("If 'no', video signature won't be displayed"),
+                          description=_("If 'no', video's author signature won't be displayed"),
                           required=True,
                           default=True)
 
@@ -216,3 +211,17 @@
                             description=_("If 'yes', video can be displayed in full screen"),
                             required=True,
                             default=True)
+
+    width = Int(title=_("Video width"),
+                description=_("Initial video frame width; mandatory for old browsers but may be overridden by "
+                              "presentation skin"),
+                required=True,
+                min=200,
+                default=720)
+
+    height = Int(title=_("Video height"),
+                 description=_("Initial video frame height; mandatory for old browsers but may be overridden by "
+                               "presentation skin"),
+                 required=True,
+                 min=200,
+                 default=405)
--- a/src/pyams_content/component/video/provider/vimeo.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/provider/vimeo.py	Fri Apr 27 12:00:07 2018 +0200
@@ -42,14 +42,14 @@
     """Vimeo video settings"""
 
     _video_id = FieldProperty(IVimeoVideoSettings['video_id'])
-    width = FieldProperty(IVimeoVideoSettings['width'])
-    height = FieldProperty(IVimeoVideoSettings['height'])
     show_title = FieldProperty(IVimeoVideoSettings['show_title'])
     show_signature = FieldProperty(IVimeoVideoSettings['show_signature'])
     color = FieldProperty(IVimeoVideoSettings['color'])
     autoplay = FieldProperty(IVimeoVideoSettings['autoplay'])
     loop = FieldProperty(IVimeoVideoSettings['loop'])
     allow_fullscreen = FieldProperty(IVimeoVideoSettings['allow_fullscreen'])
+    width = FieldProperty(IVimeoVideoSettings['width'])
+    height = FieldProperty(IVimeoVideoSettings['height'])
 
     @property
     def video_id(self):
--- a/src/pyams_content/component/video/provider/youtube.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/provider/youtube.py	Fri Apr 27 12:00:07 2018 +0200
@@ -42,8 +42,6 @@
     """Youtube video settings"""
 
     _video_id = FieldProperty(IYoutubeVideoSettings['video_id'])
-    width = FieldProperty(IYoutubeVideoSettings['width'])
-    height = FieldProperty(IYoutubeVideoSettings['height'])
     start_at = FieldProperty(IYoutubeVideoSettings['start_at'])
     stop_at = FieldProperty(IYoutubeVideoSettings['stop_at'])
     autoplay = FieldProperty(IYoutubeVideoSettings['autoplay'])
@@ -54,6 +52,8 @@
     show_related = FieldProperty(IYoutubeVideoSettings['show_related'])
     allow_fullscreen = FieldProperty(IYoutubeVideoSettings['allow_fullscreen'])
     disable_keyboard = FieldProperty(IYoutubeVideoSettings['disable_keyboard'])
+    width = FieldProperty(IYoutubeVideoSettings['width'])
+    height = FieldProperty(IYoutubeVideoSettings['height'])
 
     @property
     def video_id(self):
--- a/src/pyams_content/component/video/provider/zmi/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/provider/zmi/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -9,6 +9,7 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyams_content.component.video.provider import CustomVideoSettings
 
 __docformat__ = 'restructuredtext'
 
@@ -86,6 +87,12 @@
         return urlencode(params)
 
 
+@adapter_config(context=(CustomVideoSettings, IPyAMSLayer), provides=IExternalVideoRenderer)
+@template_config(template='templates/custom-render.pt', layer=IPyAMSLayer)
+class CustomVideoRenderer(BaseExternalVideoRenderer):
+    """Custom video renderer"""
+
+
 @adapter_config(context=(YoutubeVideoSettings, IPyAMSLayer), provides=IExternalVideoRenderer)
 @template_config(template='templates/youtube-render.pt', layer=IPyAMSLayer)
 class YoutubeVideoRenderer(BaseExternalVideoRenderer):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/video/provider/zmi/templates/custom-render.pt	Fri Apr 27 12:00:07 2018 +0200
@@ -0,0 +1,3 @@
+<div class="video-wrapper">
+	<tal:var replace="structure context.integration_code">Integration code</tal:var>
+</div>
--- a/src/pyams_content/component/video/zmi/paragraph.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/component/video/zmi/paragraph.py	Fri Apr 27 12:00:07 2018 +0200
@@ -113,6 +113,7 @@
         if settings is not None:
             provider = content.get_provider()
             form = InnerAdminEditForm(settings, self.request)
+            form.prefix = self.prefix
             form.edit_permission = MANAGE_CONTENT_PERMISSION
             form.fields = field.Fields(provider.settings_interface)
             form.update()
@@ -158,19 +159,27 @@
     else:
         provider = get_utility(IExternalVideoProvider, name=provider_name)
         form = InnerAdminAddForm(request.context, request)
+        form.prefix = ExternalVideoParagraphAddForm.prefix
         form.legend = request.localizer.translate(_("Video provider settings"))
         form.label_css_class = 'control-label col-md-4'
         form.input_css_class = 'col-md-8'
         form.fields = field.Fields(provider.settings_interface)
         form.update()
-        form.add_group(NamedWidgetsGroup(form, 'video_id', form.widgets, ('video_id', ), bordered=False))
-        form.add_group(NamedWidgetsGroup(form, 'provider_group', form.widgets,
-                                         getFieldNamesInOrder(provider.settings_interface)[1:],
-                                         bordered=False,
-                                         legend=_("Other settings"),
-                                         css_class="inner switcher padding-right-10 no-y-padding",
-                                         switch=True,
-                                         hide_if_empty=True))
+        if 'integration_code' in form.widgets:  # custom video provider
+            form.widgets['integration_code'].widget_css_class = 'textarea'
+            form.add_group(NamedWidgetsGroup(form, 'integration_code', form.widgets, ('integration_code', ),
+                                             bordered=False))
+        elif 'video_id' in form.widgets:
+            form.add_group(NamedWidgetsGroup(form, 'video_id', form.widgets, ('video_id', ), bordered=False))
+        field_names = getFieldNamesInOrder(provider.settings_interface)
+        if len(field_names) > 1:
+            form.add_group(NamedWidgetsGroup(form, 'provider_group', form.widgets,
+                                             field_names[1:],
+                                             bordered=False,
+                                             legend=_("Other settings"),
+                                             css_class="inner switcher padding-right-10 no-y-padding",
+                                             switch=True,
+                                             hide_if_empty=True))
         return Response(form.render())
 
 
@@ -215,15 +224,22 @@
             self.widgets['provider_name'].mode = DISPLAY_MODE
             provider = self.context.get_provider()
             if provider is not None:
-                self.add_group(NamedWidgetsGroup(self, 'video_id', self.widgets, ('video_id',), bordered=False))
-                self.add_group(NamedWidgetsGroup(self, 'provider_group', self.widgets,
-                                                 getFieldNamesInOrder(provider.settings_interface)[1:],
-                                                 bordered=False,
-                                                 legend=_("Video provider settings"),
-                                                 fieldset_class='margin-top-10 padding-y-5',
-                                                 css_class='inner switcher padding-right-10 no-y-padding pull-left',
-                                                 switch=True,
-                                                 hide_if_empty=True))
+                if 'integration_code' in self.widgets:  # custom video provider
+                    self.widgets['integration_code'].widget_css_class = 'textarea'
+                    self.add_group(NamedWidgetsGroup(self, 'integration_code', self.widgets, ('integration_code',),
+                                                     bordered=False))
+                elif 'video_id' in self.widgets:
+                    self.add_group(NamedWidgetsGroup(self, 'video_id', self.widgets, ('video_id',), bordered=False))
+                field_names = getFieldNamesInOrder(provider.settings_interface)
+                if len(field_names) > 1:
+                    self.add_group(NamedWidgetsGroup(self, 'provider_group', self.widgets,
+                                                     field_names[1:],
+                                                     bordered=False,
+                                                     legend=_("Video provider settings"),
+                                                     fieldset_class='margin-top-10 padding-y-5',
+                                                     css_class='inner switcher padding-right-10 no-y-padding pull-left',
+                                                     switch=True,
+                                                     hide_if_empty=True))
 
 
 @view_config(name='properties.json', context=IExternalVideoParagraph, request_type=IPyAMSLayer,
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 Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Fri Apr 27 12:00:07 2018 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-04-06 13:47+0200\n"
+"POT-Creation-Date: 2018-04-26 16:39+0200\n"
 "PO-Revision-Date: 2015-09-10 10:42+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -87,41 +87,26 @@
 
 #: src/pyams_content/component/gallery/zmi/file.py:58
 #: src/pyams_content/component/gallery/zmi/file.py:69
-#: src/pyams_content/component/gallery/zmi/paragraph.py:180
+#: src/pyams_content/component/gallery/zmi/paragraph.py:176
 msgid "Add media(s)"
 msgstr "Ajouter des médias"
 
-#: src/pyams_content/component/gallery/zmi/file.py:185
+#: src/pyams_content/component/gallery/zmi/file.py:189
 msgid "Update media properties"
 msgstr "Propriétés du média"
 
-#: src/pyams_content/component/gallery/zmi/file.py:242
+#: src/pyams_content/component/gallery/zmi/file.py:246
 msgid "Remove media..."
 msgstr "Supprimer le média"
 
-#: src/pyams_content/component/gallery/zmi/file.py:152
+#: src/pyams_content/component/gallery/zmi/file.py:154
 msgid "Show/hide media"
 msgstr "Cliquez pour rendre le média visible ou non"
 
-#: src/pyams_content/component/gallery/zmi/file.py:210
+#: src/pyams_content/component/gallery/zmi/file.py:214
 msgid "Audio content"
 msgstr "Contenu audio associé"
 
-#: src/pyams_content/component/gallery/zmi/file.py:258
-#: src/pyams_content/component/association/zmi/__init__.py:268
-#: src/pyams_content/shared/common/zmi/types.py:208
-#: src/pyams_content/shared/common/zmi/types.py:457
-#: src/pyams_content/shared/imagemap/zmi/container.py:169
-#: src/pyams_content/shared/site/zmi/container.py:573
-#: src/pyams_content/root/zmi/sites.py:197
-#: src/pyams_content/features/alert/zmi/container.py:215
-msgid "No provided object_name argument!"
-msgstr "Argument 'object_name' non fourni !"
-
-#: src/pyams_content/component/gallery/zmi/file.py:262
-msgid "Given media name doesn't exist!"
-msgstr "Le nom du média indiqué n'existe pas !"
-
 #: src/pyams_content/component/gallery/zmi/paragraph.py:58
 msgid "Medias gallery..."
 msgstr "Galerie de médias"
@@ -130,25 +115,25 @@
 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:101
 msgid "Edit gallery properties"
 msgstr "Propriétés de la galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/__init__.py:63
+#: src/pyams_content/component/gallery/zmi/__init__.py:62
 msgid "Update gallery properties"
 msgstr "Propriétés de la galerie de médias"
 
-#: src/pyams_content/component/gallery/zmi/__init__.py:100
+#: src/pyams_content/component/gallery/zmi/__init__.py:101
 msgid "Update gallery contents"
 msgstr "Contenu de la galerie de médias"
 
 #: src/pyams_content/component/gallery/zmi/interfaces.py:36
 #: 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:52
+#: src/pyams_content/component/illustration/interfaces/__init__.py:56
 #: src/pyams_content/component/paragraph/interfaces/video.py:48
 #: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
-#: src/pyams_content/component/video/interfaces/__init__.py:50
+#: src/pyams_content/component/video/interfaces/__init__.py:52
 msgid "Author"
 msgstr "Auteur"
 
@@ -156,7 +141,7 @@
 #: 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/video/interfaces/__init__.py:51
+#: src/pyams_content/component/video/interfaces/__init__.py:53
 msgid "Name of document's author"
 msgstr "Sous la forme \"Prénom Nom / Organisme\""
 
@@ -195,13 +180,13 @@
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:47
 #: src/pyams_content/component/extfile/interfaces/__init__.py:73
-#: src/pyams_content/component/illustration/interfaces/__init__.py:41
+#: src/pyams_content/component/illustration/interfaces/__init__.py:45
 msgid "Legend"
 msgstr "Légende"
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:50
 #: src/pyams_content/component/extfile/interfaces/__init__.py:77
-#: src/pyams_content/component/illustration/interfaces/__init__.py:44
+#: src/pyams_content/component/illustration/interfaces/__init__.py:48
 #: src/pyams_content/reference/pictograms/interfaces/__init__.py:48
 msgid "Accessibility title"
 msgstr "Alternative (accessibilité)"
@@ -215,14 +200,14 @@
 "conformer aux normes d'accessibilité."
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:54
-#: src/pyams_content/component/illustration/interfaces/__init__.py:56
-#: src/pyams_content/component/illustration/interfaces/__init__.py:85
+#: src/pyams_content/component/illustration/interfaces/__init__.py:41
+#: src/pyams_content/component/illustration/interfaces/__init__.py:76
 msgid "Image or video data"
 msgstr "Fichier (image ou vidéo)"
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:55
-#: src/pyams_content/component/illustration/interfaces/__init__.py:57
-#: src/pyams_content/component/illustration/interfaces/__init__.py:86
+#: src/pyams_content/component/illustration/interfaces/__init__.py:42
+#: src/pyams_content/component/illustration/interfaces/__init__.py:77
 msgid "Image or video content"
 msgstr ""
 "Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
@@ -230,11 +215,11 @@
 #: src/pyams_content/component/gallery/interfaces/__init__.py:58
 #: 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:48
+#: src/pyams_content/component/illustration/interfaces/__init__.py:52
 #: src/pyams_content/component/paragraph/interfaces/video.py:44
 #: src/pyams_content/component/links/interfaces/__init__.py:37
-#: src/pyams_content/component/video/interfaces/__init__.py:46
-#: src/pyams_content/shared/common/interfaces/__init__.py:136
+#: src/pyams_content/component/video/interfaces/__init__.py:48
+#: src/pyams_content/shared/common/interfaces/__init__.py:145
 #: src/pyams_content/shared/form/interfaces/__init__.py:65
 msgid "Description"
 msgstr "Description"
@@ -288,17 +273,17 @@
 
 #: src/pyams_content/component/gallery/interfaces/__init__.py:94
 #: src/pyams_content/component/extfile/interfaces/__init__.py:36
-#: src/pyams_content/component/paragraph/zmi/milestone.py:269
-#: src/pyams_content/component/paragraph/zmi/container.py:223
+#: src/pyams_content/component/paragraph/zmi/milestone.py:257
+#: src/pyams_content/component/paragraph/zmi/container.py:224
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:46
 #: src/pyams_content/component/links/zmi/reverse.py:71
 #: src/pyams_content/shared/common/zmi/dashboard.py:109
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:188
-#: src/pyams_content/shared/imagemap/zmi/container.py:119
+#: src/pyams_content/shared/imagemap/zmi/container.py:123
 #: src/pyams_content/shared/site/zmi/folder.py:64
 #: 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:172
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:162
 msgid "Title"
 msgstr "Titre"
 
@@ -324,7 +309,7 @@
 #: src/pyams_content/component/extfile/__init__.py:172
 #: src/pyams_content/component/extfile/__init__.py:176
 msgid "Standard file"
-msgstr "Fichier standard"
+msgstr "Fichier"
 
 #: src/pyams_content/component/extfile/__init__.py:223
 #: src/pyams_content/component/extfile/__init__.py:240
@@ -346,71 +331,71 @@
 msgid "Audio file"
 msgstr "Fichier audio"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:73
+#: src/pyams_content/component/extfile/zmi/__init__.py:74
 msgid "External files"
 msgstr "Fichiers"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:86
+#: src/pyams_content/component/extfile/zmi/__init__.py:89
 msgid "Add external file"
 msgstr "Fichier standard"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:98
+#: src/pyams_content/component/extfile/zmi/__init__.py:101
 msgid "Add new external file"
 msgstr "Ajout d'un fichier standard"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:145
+#: src/pyams_content/component/extfile/zmi/__init__.py:141
 msgid "Update file properties"
 msgstr "Propriétés du fichier standard"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:185
+#: src/pyams_content/component/extfile/zmi/__init__.py:181
 msgid "Images"
 msgstr "Images"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:198
+#: src/pyams_content/component/extfile/zmi/__init__.py:196
 msgid "Add image"
-msgstr "Image"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:210
+msgstr "Image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:208
 msgid "Add new image"
 msgstr "Ajout d'une image"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:256
+#: src/pyams_content/component/extfile/zmi/__init__.py:245
 msgid "Update image properties"
 msgstr "Propriétés de l'image"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:296
+#: src/pyams_content/component/extfile/zmi/__init__.py:285
 msgid "Videos"
 msgstr "Vidéos"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:309
+#: src/pyams_content/component/extfile/zmi/__init__.py:300
 msgid "Add video"
-msgstr "Vidéo"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:321
+msgstr "Vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:312
 msgid "Add new video"
 msgstr "Ajout d'une vidéo"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:359
+#: src/pyams_content/component/extfile/zmi/__init__.py:341
 msgid "Update video properties"
 msgstr "Propriétés de la vidéo"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:391
+#: src/pyams_content/component/extfile/zmi/__init__.py:373
 msgid "Audios files"
 msgstr "Fichiers audios"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:404
+#: src/pyams_content/component/extfile/zmi/__init__.py:388
 msgid "Add audio file"
-msgstr "Fichier audio"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:416
+msgstr "Fichier audio téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:400
 msgid "Add new audio file"
 msgstr "Ajout d'un fichier audio"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:454
+#: src/pyams_content/component/extfile/zmi/__init__.py:429
 msgid "Update audio file properties"
 msgstr "Propriétés du fichier audio"
 
-#: src/pyams_content/component/extfile/zmi/__init__.py:49
+#: src/pyams_content/component/extfile/zmi/__init__.py:50
 msgid "External file type"
 msgstr "Type de fichier joint"
 
@@ -420,32 +405,24 @@
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:41
 #: src/pyams_content/component/paragraph/interfaces/video.py:45
-#: src/pyams_content/component/video/interfaces/__init__.py:47
+#: src/pyams_content/component/video/interfaces/__init__.py:49
 msgid "File description displayed by front-office template"
 msgstr "Description du fichier, présentée aux internautes"
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:48
-#: src/pyams_content/component/illustration/interfaces/__init__.py:64
-#: src/pyams_content/component/illustration/interfaces/__init__.py:93
 #: src/pyams_content/component/links/interfaces/__init__.py:59
 msgid "Language"
 msgstr "Langue"
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:49
-#: src/pyams_content/component/illustration/interfaces/__init__.py:65
-#: src/pyams_content/component/illustration/interfaces/__init__.py:94
 msgid "File's content language"
 msgstr "Langue du fichier"
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:53
-#: src/pyams_content/component/illustration/interfaces/__init__.py:60
-#: src/pyams_content/component/illustration/interfaces/__init__.py:89
 msgid "Save file as..."
 msgstr "Nom du fichier"
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:54
-#: src/pyams_content/component/illustration/interfaces/__init__.py:61
-#: src/pyams_content/component/illustration/interfaces/__init__.py:90
 msgid "Name under which the file will be saved"
 msgstr ""
 "Nom donné au fichier en cas de téléchargement ; il est donc important de "
@@ -466,7 +443,7 @@
 msgstr "Titre du fichier, tel que présenté aux internautes"
 
 #: src/pyams_content/component/extfile/interfaces/__init__.py:78
-#: src/pyams_content/component/illustration/interfaces/__init__.py:45
+#: src/pyams_content/component/illustration/interfaces/__init__.py:49
 #: src/pyams_content/reference/pictograms/interfaces/__init__.py:49
 msgid "Alternate title used to describe image content"
 msgstr ""
@@ -502,39 +479,37 @@
 
 #: src/pyams_content/component/illustration/paragraph.py:40
 #: src/pyams_content/component/illustration/paragraph.py:47
-#: src/pyams_content/component/illustration/__init__.py:142
-#: src/pyams_content/component/illustration/zmi/__init__.py:57
-#: src/pyams_content/component/illustration/zmi/__init__.py:80
+#: src/pyams_content/component/illustration/__init__.py:135
+#: src/pyams_content/component/illustration/zmi/__init__.py:54
+#: src/pyams_content/component/illustration/zmi/__init__.py:81
 msgid "Illustration"
 msgstr "Illustration"
 
-#: src/pyams_content/component/illustration/zmi/paragraph.py:58
+#: src/pyams_content/component/illustration/zmi/paragraph.py:59
 msgid "Illustration..."
 msgstr "Illustration"
 
-#: src/pyams_content/component/illustration/zmi/paragraph.py:69
+#: 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:100
+#: src/pyams_content/component/illustration/zmi/paragraph.py:104
 msgid "Edit illustration properties"
 msgstr "Propriétés de l'illustration"
 
-#: src/pyams_content/component/illustration/zmi/__init__.py:143
-msgid "Add illustration"
-msgstr "Ajouter une illustration"
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:53
+#: src/pyams_content/component/illustration/zmi/__init__.py:83
+msgid "Header illustration"
+msgstr "Illustration d'en-tête"
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:57
 msgid "Name of picture's author"
 msgstr "Sous la forme \"Prénom Nom / Organisme\""
 
-#: src/pyams_content/component/illustration/interfaces/__init__.py:69
-#: src/pyams_content/component/illustration/interfaces/__init__.py:98
+#: src/pyams_content/component/illustration/interfaces/__init__.py:60
 msgid "Illustration template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/illustration/interfaces/__init__.py:70
-#: src/pyams_content/component/illustration/interfaces/__init__.py:99
+#: src/pyams_content/component/illustration/interfaces/__init__.py:61
 msgid "Presentation template used for illustration"
 msgstr ""
 "<span>Modèle de présentation utilisé par cette illustration.<br /"
@@ -543,7 +518,7 @@
 
 #: src/pyams_content/component/paragraph/milestone.py:206
 #: src/pyams_content/component/paragraph/milestone.py:228
-#: src/pyams_content/component/paragraph/zmi/milestone.py:320
+#: src/pyams_content/component/paragraph/zmi/milestone.py:308
 msgid "Milestones"
 msgstr "Chronologie"
 
@@ -553,11 +528,11 @@
 
 #: src/pyams_content/component/paragraph/milestone.py:141
 msgid "Selected paragraph is missing"
-msgstr "le paragraphe sélectionné est introuvable"
+msgstr "le bloc sélectionné est introuvable"
 
 #: src/pyams_content/component/paragraph/milestone.py:144
 msgid "Selected paragraph is not visible"
-msgstr "le paragraphe sélectionné n'est pas visible"
+msgstr "le bloc sélectionné n'est pas visible"
 
 #: src/pyams_content/component/paragraph/keypoint.py:47
 #: src/pyams_content/component/paragraph/interfaces/keypoint.py:40
@@ -569,17 +544,16 @@
 msgstr "Points clés"
 
 #: src/pyams_content/component/paragraph/container.py:82
-#: src/pyams_content/component/paragraph/zmi/container.py:307
 msgid "Paragraphs"
-msgstr "Paragraphes"
+msgstr "Blocs de contenu"
 
 #: src/pyams_content/component/paragraph/container.py:104
 msgid "no visible paragraph"
-msgstr "aucun paragraphe visible"
+msgstr "aucun bloc de contenu visible"
 
 #: src/pyams_content/component/paragraph/pictogram.py:197
 #: src/pyams_content/component/paragraph/pictogram.py:219
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:334
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:312
 msgid "Pictograms"
 msgstr "Pictogrammes"
 
@@ -593,7 +567,7 @@
 
 #: src/pyams_content/component/paragraph/keynumber.py:190
 #: src/pyams_content/component/paragraph/keynumber.py:213
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:302
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:287
 msgid "Key numbers"
 msgstr "Chiffres-clés"
 
@@ -617,19 +591,19 @@
 msgid "Verbatim paragraph"
 msgstr "Verbatim"
 
-#: src/pyams_content/component/paragraph/html.py:58
+#: src/pyams_content/component/paragraph/html.py:59
 msgid "Raw HTML "
 msgstr "Code HTML"
 
-#: src/pyams_content/component/paragraph/html.py:67
+#: src/pyams_content/component/paragraph/html.py:68
 msgid "Raw HTML paragraph"
 msgstr "Code HTML"
 
-#: src/pyams_content/component/paragraph/html.py:105
+#: src/pyams_content/component/paragraph/html.py:106
 msgid "Rich text"
 msgstr "Texte enrichi"
 
-#: src/pyams_content/component/paragraph/html.py:114
+#: src/pyams_content/component/paragraph/html.py:115
 msgid "Rich text paragraph"
 msgstr "Texte enrichi"
 
@@ -641,7 +615,7 @@
 #: src/pyams_content/component/paragraph/header.py:47
 #: src/pyams_content/component/paragraph/interfaces/header.py:40
 #: src/pyams_content/features/alert/interfaces.py:65
-#: src/pyams_content/features/alert/zmi/container.py:176
+#: src/pyams_content/features/alert/zmi/container.py:158
 msgid "Header"
 msgstr "Chapô"
 
@@ -649,41 +623,41 @@
 msgid "Header paragraph"
 msgstr "Chapô"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:77
+#: src/pyams_content/component/paragraph/zmi/milestone.py:79
 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:118
+#: src/pyams_content/component/paragraph/zmi/milestone.py:122
 msgid "Edit milestone paragraph properties"
 msgstr "Propriétés de la chronologie"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:278
+#: src/pyams_content/component/paragraph/zmi/milestone.py:266
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:50
 msgid "Associated label"
 msgstr "Information associée"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:287
+#: src/pyams_content/component/paragraph/zmi/milestone.py:275
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:54
 msgid "Anchor"
 msgstr "Ancre"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:335
+#: src/pyams_content/component/paragraph/zmi/milestone.py:323
 msgid "Add milestone"
 msgstr "Ajouter un jalon"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:346
+#: src/pyams_content/component/paragraph/zmi/milestone.py:334
 msgid "Add new milestone"
 msgstr "Ajout d'un jalon"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:386
+#: src/pyams_content/component/paragraph/zmi/milestone.py:367
 msgid "Edit milestone properties"
 msgstr "Propriétés du jalon"
 
-#: src/pyams_content/component/paragraph/zmi/milestone.py:370
+#: src/pyams_content/component/paragraph/zmi/milestone.py:356
 msgid "Milestone was correctly added"
 msgstr "Le jalon a été ajouté."
 
@@ -695,19 +669,19 @@
 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:95
 msgid "Edit key points paragraph properties"
 msgstr "Propriétés des points clés"
 
-#: src/pyams_content/component/paragraph/zmi/__init__.py:61
-msgid "Paragraphs types..."
-msgstr "Types de paragraphes"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:72
-msgid "Paragraphs types"
-msgstr "Types de paragraphes"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:89
+#: src/pyams_content/component/paragraph/zmi/__init__.py:63
+msgid "Content block types..."
+msgstr "Types de blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:76
+msgid "Content block types"
+msgstr "Types de blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:93
 msgid ""
 "You can define which types of paragraphs are allowed in this container.\n"
 "\n"
@@ -717,209 +691,208 @@
 "NOTICE: removing types from allowed types list will have no effect on "
 "already created contents!"
 msgstr ""
-"Vous pouvez indiquer la liste des types de paragraphes autorisés pour ce "
-"type de contenu.\n"
+"Vous pouvez indiquer la liste des types de blocs de contenu autorisés pour "
+"ce gabarit.\n"
 "\n"
-"Les paragraphes par défaut seront ajoutés automatiquement (dans l'ordre "
-"défini) à chaque nouveau contenu.\n"
+"Les types de blocs par défaut seront ajoutés automatiquement (dans l'ordre "
+"défini) à chaque nouveau contenu créé selon ce gabarit.\n"
 "\n"
-"REMARQUE : supprimer des types de la liste des types de paragraphes "
-"autorisés sera sans effet sur les contenus existants."
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:139
+"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:194
 msgid "Paragraph was correctly added."
-msgstr "Le paragraphe a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/video.py:56
+msgstr "Le bloc a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/video.py:57
 msgid "Video paragraph..."
 msgstr "Vidéo"
 
-#: src/pyams_content/component/paragraph/zmi/video.py:67
+#: src/pyams_content/component/paragraph/zmi/video.py:68
 msgid "Add new video paragraph"
 msgstr "Ajout d'une vidéo"
 
-#: src/pyams_content/component/paragraph/zmi/video.py:109
-#: src/pyams_content/component/video/zmi/paragraph.py:182
+#: src/pyams_content/component/paragraph/zmi/video.py:112
+#: src/pyams_content/component/video/zmi/paragraph.py:193
 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:128
+#: src/pyams_content/component/paragraph/zmi/video.py:84
+#: src/pyams_content/component/paragraph/zmi/video.py:131
 #: src/pyams_content/component/video/zmi/paragraph.py:87
-#: src/pyams_content/component/video/zmi/paragraph.py:205
+#: src/pyams_content/component/video/zmi/paragraph.py:216
 msgid "HTML content"
 msgstr "Contenu HTML"
 
 #: src/pyams_content/component/paragraph/zmi/container.py:74
-msgid "Paragraphs..."
-msgstr "Paragraphes"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:239
+msgid "Contents..."
+msgstr "Contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:240
 msgid "Show/hide all paragraphs"
-msgstr "Afficher/masquer tous les paragraphes"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:285
-#: src/pyams_content/component/paragraph/zmi/container.py:294
-msgid "Paragraphs list"
-msgstr "Liste des paragraphes"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:364
-#: src/pyams_content/component/association/zmi/paragraph.py:55
-#: src/pyams_content/component/association/zmi/__init__.py:107
-msgid "Associations..."
-msgstr "Associations"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:376
-msgid "Paragraphs associations"
-msgstr "Associations par paragraphe"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:126
+msgstr "Afficher/masquer tous les blocs"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:288
+#: src/pyams_content/component/paragraph/zmi/container.py:297
+#: src/pyams_content/component/paragraph/zmi/container.py:310
+msgid "Content blocks"
+msgstr "Blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:367
+msgid "Links and attachments..."
+msgstr "Liens et pièces jointes"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:379
+msgid "Content blocks links and attachments"
+msgstr "Liens et pièces jointes par bloc de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:127
 msgid "No currently defined paragraph."
-msgstr "Aucun paragraphe associé à ce contenu."
-
-#: src/pyams_content/component/paragraph/zmi/container.py:248
+msgstr "Aucun bloc n'est associé à ce contenu."
+
+#: src/pyams_content/component/paragraph/zmi/container.py:249
 msgid "Click to open/close all paragraphs editors"
-msgstr "Afficher/masquer tous les paragraphes"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:261
+msgstr "Afficher/masquer tous les blocs"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:262
 msgid "Click to open/close paragraph editor"
-msgstr "Afficher/masquer ce paragraphe"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:132
+msgstr "Afficher/masquer ce bloc"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:133
 msgid "Check allowed paragraph types to be able to create new paragraphs."
 msgstr ""
-"Vérifiez le paramétrage des types de paragraphes autorisés pour ajouter de "
-"nouveaux paragraphes."
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:84
+"Vérifiez le paramétrage des types de blocs de contenu autorisés pour pouvoir "
+"ajouter de nouveaux blocs."
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:81
 msgid "Pictograms..."
 msgstr "Pictogrammes"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:95
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:92
 msgid "Add new pictogram paragraph"
 msgstr "Ajout de pictogrammes"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:125
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:124
 msgid "Edit pictogram paragraph properties"
 msgstr "Propriétés des pictogrammes"
 
 #. Default: Header
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:297
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:275
 msgid "pictogram-item-header"
 msgstr "En-tête"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:312
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:286
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:290
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:271
 #: src/pyams_content/component/paragraph/interfaces/pictogram.py:59
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:56
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:55
 msgid "Associated text"
 msgstr "Texte associé"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:349
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:56
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:327
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:59
 msgid "Add pictogram"
 msgstr "Ajouter un pictogramme"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:360
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:67
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:338
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:70
 msgid "Add new pictogram"
 msgstr "Ajout d'un pictogramme"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:405
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:95
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:376
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:100
 msgid "Edit pictogram properties"
 msgstr "Propriétés du pictogramme"
 
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:389
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:365
 msgid "Pictogram was correctly added"
 msgstr "Le pictogramme a été ajouté."
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:76
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:78
 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:117
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:121
 msgid "Edit key number paragraph properties"
 msgstr "Propriétés des chiffres-clés"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:268
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:47
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:253
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:46
 msgid "Number"
 msgstr "Chiffre"
 
 #. Default: Header
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:277
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:51
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:262
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:50
 msgid "key-number-label"
 msgstr "En-tête"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:317
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:302
 msgid "Add keynumber"
 msgstr "Ajouter un chiffre-clé"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:328
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:313
 msgid "Add new keynumber"
 msgstr "Ajout d'un chiffre-clé"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:368
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:346
 msgid "Edit keynumber properties"
 msgstr "Propriétés du chiffre-clé"
 
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:352
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:335
 msgid "Key number was correctly added"
 msgstr "Le chiffre-clé a été ajouté."
 
-#: src/pyams_content/component/paragraph/zmi/frame.py:84
+#: src/pyams_content/component/paragraph/zmi/frame.py:85
 msgid "Framed text..."
 msgstr "Encadré"
 
-#: src/pyams_content/component/paragraph/zmi/frame.py:96
+#: src/pyams_content/component/paragraph/zmi/frame.py:97
 msgid "Add new framed text paragraph"
 msgstr "Ajout d'un encadré"
 
-#: src/pyams_content/component/paragraph/zmi/frame.py:130
+#: src/pyams_content/component/paragraph/zmi/frame.py:133
 msgid "Edit framed text paragraph properties"
 msgstr "Propriétés de l'encadré"
 
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:57
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:58
 msgid "Verbatim..."
 msgstr "Verbatim"
 
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:68
+#: 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:98
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:101
 msgid "Edit verbatim paragraph properties"
 msgstr "Propriétés du verbatim"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:78
+#: src/pyams_content/component/paragraph/zmi/html.py:77
 msgid "Raw HTML..."
 msgstr "Code HTML"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:89
+#: src/pyams_content/component/paragraph/zmi/html.py:88
 msgid "Add new raw HTML paragraph"
-msgstr "Ajout d'un paragraphe de code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:122
+msgstr "Ajout d'un bloc de code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:123
 msgid "Edit raw HTML paragraph properties"
 msgstr "Propriétés du code HTML"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:193
+#: src/pyams_content/component/paragraph/zmi/html.py:194
 msgid "Rich text..."
 msgstr "Texte enrichi"
 
-#: src/pyams_content/component/paragraph/zmi/html.py:204
+#: src/pyams_content/component/paragraph/zmi/html.py:205
 msgid "Add new rich text paragraph"
-msgstr "Ajout d'un paragraphe de texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:237
+msgstr "Ajout d'un bloc de texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:240
 msgid "Edit rich text paragraph properties"
-msgstr "Propriétés du paragraphe de texte enrichi"
+msgstr "Propriétés du texte enrichi"
 
 #: src/pyams_content/component/paragraph/zmi/contact.py:53
 msgid "Contact card..."
@@ -929,7 +902,7 @@
 msgid "Add new contact card"
 msgstr "Ajout d'une fiche contact"
 
-#: src/pyams_content/component/paragraph/zmi/contact.py:95
+#: src/pyams_content/component/paragraph/zmi/contact.py:97
 msgid "Edit contact card properties"
 msgstr "Propriétés de la fiche contact"
 
@@ -941,14 +914,14 @@
 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:95
 msgid "Edit header paragraph properties"
 msgstr "Propriétés du chapô"
 
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:41
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:43
 #: src/pyams_content/component/paragraph/interfaces/pictogram.py:42
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:42
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:41
 #: src/pyams_content/component/association/interfaces/__init__.py:43
 #: src/pyams_content/shared/form/interfaces/__init__.py:86
 #: src/pyams_content/shared/site/interfaces/__init__.py:107
@@ -972,7 +945,7 @@
 
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:55
 msgid "Paragraph to which this milestone should lead"
-msgstr "Paragraphe vers lequel ce jalon doit conduire"
+msgstr "Bloc de contenu vers lequel ce jalon doit conduire"
 
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:83
 msgid "Milestones template"
@@ -980,7 +953,7 @@
 
 #: src/pyams_content/component/paragraph/interfaces/milestone.py:84
 msgid "Presentation template used for milestones"
-msgstr "Modèle de présentation utilisé par ce paragraphe"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
 
 #: src/pyams_content/component/paragraph/interfaces/keypoint.py:41
 msgid "Enter one key point by line, without hyphen or prefix"
@@ -997,11 +970,11 @@
 #: src/pyams_content/component/paragraph/interfaces/verbatim.py:53
 #: src/pyams_content/shared/logo/interfaces/__init__.py:76
 msgid "Presentation template used for this paragraph"
-msgstr "Mode de rendu utilisé par ce paragraphe"
+msgstr "Mode de rendu utilisé par ce bloc de contenu"
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:44
 msgid "Is this paragraph visible in front-office?"
-msgstr "Si 'non', ce paragraphe ne sera pas présenté aux internautes"
+msgstr "Si 'non', ce bloc de contenu ne sera pas présenté aux internautes"
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:48
 msgid "§ Title"
@@ -1009,26 +982,25 @@
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:79
 msgid "Allowed paragraphs"
-msgstr "Paragraphes autorisés"
+msgstr "Types de blocs autorisés"
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:80
 msgid "List of paragraphs allowed for this content type"
-msgstr "Liste des types de paragraphes autorisés pour ce type de contenu."
+msgstr "Liste des types de blocs de contenu autorisés pour ce gabarit."
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:84
-#: src/pyams_content/shared/common/zmi/types.py:154
-#: src/pyams_content/shared/common/zmi/types.py:396
+#: src/pyams_content/shared/common/zmi/types.py:167
+#: src/pyams_content/shared/common/zmi/types.py:395
 msgid "Default paragraphs"
-msgstr "Paragraphes par défaut"
+msgstr "Types de blocs par défaut"
 
 #: src/pyams_content/component/paragraph/interfaces/__init__.py:85
 msgid "List of paragraphs automatically added to a new content"
-msgstr ""
-"Liste des types de paragraphes ajoutés automatiquement aux nouveaux contenus"
+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/html.py:53
-#: src/pyams_content/component/video/interfaces/__init__.py:71
+#: src/pyams_content/component/video/interfaces/__init__.py:73
 msgid "Body"
 msgstr "Contenu HTML"
 
@@ -1082,35 +1054,35 @@
 
 #: src/pyams_content/component/paragraph/interfaces/pictogram.py:88
 msgid "Presentation template used for pictograms"
-msgstr "Modèle de présentation utilisé par ce paragraphe"
-
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:43
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:42
 msgid "Is this key number visible in front-office?"
 msgstr "Si 'non', ce chiffre-clé ne sera pas présenté aux internautes"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:48
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:47
 msgid "Key number value"
 msgstr "Chiffre"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:52
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:51
 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:57
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:56
 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:84
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:83
 msgid "Key numbers template"
 msgstr "Mode de rendu"
 
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:85
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:84
 msgid "Presentation template used for key numbers"
-msgstr "Modèle de présentation utilisé par ce paragraphe"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
 
 #: src/pyams_content/component/paragraph/interfaces/frame.py:40
 msgid "Frame body"
@@ -1222,7 +1194,7 @@
 msgstr "Mode de rendu utilisé par ce chapô"
 
 #: src/pyams_content/component/theme/__init__.py:81
-#: src/pyams_content/component/theme/zmi/portlet.py:39
+#: src/pyams_content/component/theme/zmi/portlet.py:40
 #: src/pyams_content/component/theme/interfaces/__init__.py:43
 msgid "Themes"
 msgstr "Thèmes"
@@ -1240,57 +1212,58 @@
 msgid "Content themes"
 msgstr "Thèmes du contenu"
 
-#: src/pyams_content/component/theme/zmi/manager.py:45
+#: src/pyams_content/component/theme/zmi/manager.py:46
 msgid "Themes settings..."
 msgstr "Paramétrage des thèmes"
 
-#: src/pyams_content/component/theme/zmi/manager.py:56
+#: src/pyams_content/component/theme/zmi/manager.py:59
 msgid "Selected themes"
 msgstr "Thèmes sélectionnés"
 
 #: src/pyams_content/component/association/paragraph.py:48
 #: src/pyams_content/component/association/paragraph.py:57
 msgid "Associations paragraph"
-msgstr "Associations"
+msgstr "Liens et pièces jointes"
 
 #: src/pyams_content/component/association/container.py:95
-#: src/pyams_content/component/association/zmi/__init__.py:327
+#: src/pyams_content/component/association/zmi/__init__.py:282
 msgid "Associations"
-msgstr "Associations"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:66
+msgstr "Liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/paragraph.py:56
+#: src/pyams_content/component/association/zmi/__init__.py:94
+msgid "Associations..."
+msgstr "Liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/paragraph.py:67
 msgid "Add new association paragraph"
-msgstr "Ajout d'un paragraphe « associations »"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:96
+msgstr "Ajout d'un bloc  « liens et pièces jointes »"
+
+#: src/pyams_content/component/association/zmi/paragraph.py:99
 msgid "Edit association paragraph properties"
-msgstr "Propriétés du paragraphe « liens utiles »"
-
-#: src/pyams_content/component/association/zmi/__init__.py:205
+msgstr "Propriétés du bloc « liens et pièces jointes »"
+
+#: src/pyams_content/component/association/zmi/__init__.py:187
 msgid "Public title"
 msgstr "Libellé public"
 
-#: src/pyams_content/component/association/zmi/__init__.py:222
+#: src/pyams_content/component/association/zmi/__init__.py:204
 msgid "Inner title"
 msgstr "Contenu interne"
 
-#: src/pyams_content/component/association/zmi/__init__.py:237
+#: src/pyams_content/component/association/zmi/__init__.py:219
 msgid "Size"
 msgstr "Taille"
 
-#: src/pyams_content/component/association/zmi/__init__.py:304
-#: src/pyams_content/component/association/zmi/__init__.py:314
+#: src/pyams_content/component/association/zmi/__init__.py:259
+#: src/pyams_content/component/association/zmi/__init__.py:269
 msgid "Associations list"
-msgstr "Liste des associations"
-
-#: src/pyams_content/component/association/zmi/__init__.py:65
+msgstr "Liste des liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/__init__.py:64
 msgid "Association was correctly added."
 msgstr "L'association a été ajoutée."
 
-#: src/pyams_content/component/association/zmi/__init__.py:276
-msgid "Given association name doesn't exist!"
-msgstr "Le nom d'association indiqué n'existe pas !"
-
 #: src/pyams_content/component/association/interfaces/__init__.py:44
 msgid "Is this item visible in front-office?"
 msgstr "Si 'non', ce lien ne sera pas présenté aux internautes"
@@ -1301,7 +1274,7 @@
 
 #: src/pyams_content/component/association/interfaces/__init__.py:94
 msgid "Presentation template used for associations"
-msgstr "Modèle de présentation utilisé par ce paragraphe"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
 
 #: src/pyams_content/component/links/__init__.py:103
 msgid "Internal link"
@@ -1319,51 +1292,51 @@
 msgid "target is not published"
 msgstr "le contenu ciblé n'est pas publié"
 
-#: src/pyams_content/component/links/zmi/__init__.py:56
+#: src/pyams_content/component/links/zmi/__init__.py:57
 msgid "Internal links"
 msgstr "Liens internes"
 
-#: src/pyams_content/component/links/zmi/__init__.py:69
+#: src/pyams_content/component/links/zmi/__init__.py:72
 msgid "Add internal link"
 msgstr "Lien interne"
 
-#: src/pyams_content/component/links/zmi/__init__.py:81
+#: src/pyams_content/component/links/zmi/__init__.py:84
 msgid "Add new internal link"
 msgstr "Ajout d'un lien interne"
 
-#: src/pyams_content/component/links/zmi/__init__.py:126
+#: src/pyams_content/component/links/zmi/__init__.py:122
 msgid "Edit internal link properties"
 msgstr "Propriétés du lien interne"
 
-#: src/pyams_content/component/links/zmi/__init__.py:164
+#: src/pyams_content/component/links/zmi/__init__.py:160
 msgid "External links"
 msgstr "Liens externes"
 
-#: src/pyams_content/component/links/zmi/__init__.py:177
+#: src/pyams_content/component/links/zmi/__init__.py:175
 msgid "Add external link"
 msgstr "Lien externe"
 
-#: src/pyams_content/component/links/zmi/__init__.py:189
+#: src/pyams_content/component/links/zmi/__init__.py:187
 msgid "Add new external link"
 msgstr "Ajout d'un lien externe"
 
-#: src/pyams_content/component/links/zmi/__init__.py:234
+#: src/pyams_content/component/links/zmi/__init__.py:225
 msgid "Edit external link properties"
 msgstr "Propriétés du lien externe"
 
-#: src/pyams_content/component/links/zmi/__init__.py:272
+#: src/pyams_content/component/links/zmi/__init__.py:263
 msgid "Mailto links"
 msgstr "Liens mailto"
 
-#: src/pyams_content/component/links/zmi/__init__.py:285
+#: src/pyams_content/component/links/zmi/__init__.py:278
 msgid "Add mailto link"
 msgstr "Lien mailto"
 
-#: src/pyams_content/component/links/zmi/__init__.py:297
+#: src/pyams_content/component/links/zmi/__init__.py:290
 msgid "Add new mailto link"
 msgstr "Ajout d'un lien « mailto »"
 
-#: src/pyams_content/component/links/zmi/__init__.py:342
+#: src/pyams_content/component/links/zmi/__init__.py:328
 msgid "Edit mailto link properties"
 msgstr "Propriétés du lien « mailto »"
 
@@ -1437,17 +1410,36 @@
 msgid "Dailymotion settings"
 msgstr "Paramètres Dailymotion"
 
+#: src/pyams_content/component/video/provider/__init__.py:66
+msgid "Other provider"
+msgstr "Autre fournisseur"
+
+#: src/pyams_content/component/video/provider/__init__.py:90
+msgid "Custom video settings"
+msgstr "Paramètres spécifiques"
+
 #: src/pyams_content/component/video/provider/vimeo.py:92
 msgid "Vimeo settings"
 msgstr "Paramètres Vimeo"
 
 #: src/pyams_content/component/video/provider/interfaces.py:31
-#: src/pyams_content/component/video/provider/interfaces.py:103
-#: src/pyams_content/component/video/provider/interfaces.py:171
+msgid "Integration code"
+msgstr "Code d'intégration"
+
+#: src/pyams_content/component/video/provider/interfaces.py:32
+msgid ""
+"Please select integration code provided by your video provider, and paste it "
+"here"
+msgstr ""
+"Veuillez sélectionner le code d'intégration proposé par votre fournisseur et le coller ici"
+
+#: src/pyams_content/component/video/provider/interfaces.py:40
+#: src/pyams_content/component/video/provider/interfaces.py:112
+#: src/pyams_content/component/video/provider/interfaces.py:180
 msgid "Video ID"
 msgstr "ID de la vidéo"
 
-#: src/pyams_content/component/video/provider/interfaces.py:32
+#: src/pyams_content/component/video/provider/interfaces.py:41
 msgid ""
 "To get video ID, just use the 'Share' button in Youtube platform and copy/"
 "paste the given URL here"
@@ -1455,15 +1447,120 @@
 "Pour obtenir l'ID de la vidéo, utilisez le bouton 'Partager' sur Youtube et "
 "faites simplement un copier/coller de l'URL obtenue dans ce champ"
 
-#: src/pyams_content/component/video/provider/interfaces.py:36
-#: src/pyams_content/component/video/provider/interfaces.py:108
-#: src/pyams_content/component/video/provider/interfaces.py:176
+#: src/pyams_content/component/video/provider/interfaces.py:45
+#: src/pyams_content/component/video/provider/interfaces.py:117
+msgid "Start at"
+msgstr "Démarrer à"
+
+#: src/pyams_content/component/video/provider/interfaces.py:46
+#: src/pyams_content/component/video/provider/interfaces.py:118
+msgid ""
+"Position at which to start video, in 'seconds' or 'minutes:seconds' format"
+msgstr ""
+"Position à laquelle démarrer la vidéo, en secondes ou sous la forme 'minutes:"
+"secondes'"
+
+#: src/pyams_content/component/video/provider/interfaces.py:50
+msgid "Stop at"
+msgstr "S'arrêter à"
+
+#: src/pyams_content/component/video/provider/interfaces.py:51
+msgid ""
+"Position at which to stop video, in 'seconds' or 'minutes:seconds' format"
+msgstr ""
+"Position à laquelle arrêter la vidéo, en secondes ou sous la forme 'minutes:"
+"secondes'"
+
+#: src/pyams_content/component/video/provider/interfaces.py:54
+#: src/pyams_content/component/video/provider/interfaces.py:122
+#: src/pyams_content/component/video/provider/interfaces.py:200
+msgid "Auto play?"
+msgstr "Lecture automatique ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:55
+#: src/pyams_content/component/video/provider/interfaces.py:123
+#: src/pyams_content/component/video/provider/interfaces.py:201
+msgid "If 'yes', video is started automatically on page load"
+msgstr ""
+"Si 'oui', la vidéo est démarrée automatiquement au chargement de la page"
+
+#: src/pyams_content/component/video/provider/interfaces.py:59
+#: src/pyams_content/component/video/provider/interfaces.py:205
+msgid "Loop playback?"
+msgstr "Lecture en boucle ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:60
+#: src/pyams_content/component/video/provider/interfaces.py:206
+msgid "If 'yes', video is played indefinitely"
+msgstr "Si 'oui', la vidéo est jouée indéfiniment"
+
+#: src/pyams_content/component/video/provider/interfaces.py:64
+#: src/pyams_content/component/video/provider/interfaces.py:127
+msgid "Show video info?"
+msgstr "Afficher les infos ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:65
+#: src/pyams_content/component/video/provider/interfaces.py:128
+msgid "If 'no', video title and information won't be displayed"
+msgstr ""
+"Si 'non', le titre et les informations de la vidéo ne sont pas affichés"
+
+#: src/pyams_content/component/video/provider/interfaces.py:69
+#: src/pyams_content/component/video/provider/interfaces.py:132
+msgid "Show commands?"
+msgstr "Afficher les commandes ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:70
+#: src/pyams_content/component/video/provider/interfaces.py:133
+msgid "Show video player commands"
+msgstr "Si 'non', les commandes du lecteur vidéo ne sont pas affichées"
+
+#: src/pyams_content/component/video/provider/interfaces.py:74
+msgid "Hide branding?"
+msgstr "Masquer la marque ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:75
+msgid "If 'no', Youtube branding will be displayed"
+msgstr "Si 'non', la marque 'Youtube' est affichée en bas de la vidéo"
+
+#: src/pyams_content/component/video/provider/interfaces.py:79
+msgid "Show related videos?"
+msgstr "Vidéos liées ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:80
+msgid "Show related videos when video end"
+msgstr ""
+"Si 'non', les vidéos liées ne sont pas affichées lorsque la vidéo se termine"
+
+#: src/pyams_content/component/video/provider/interfaces.py:84
+#: src/pyams_content/component/video/provider/interfaces.py:152
+#: src/pyams_content/component/video/provider/interfaces.py:210
+msgid "Allow full screen?"
+msgstr "Mode plein écran ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:85
+#: src/pyams_content/component/video/provider/interfaces.py:153
+#: src/pyams_content/component/video/provider/interfaces.py:211
+msgid "If 'yes', video can be displayed in full screen"
+msgstr "Si 'non', la vidéo ne peut pas être affichée en plein écran"
+
+#: src/pyams_content/component/video/provider/interfaces.py:89
+msgid "Disable keyboard?"
+msgstr "Clavier inactif ?"
+
+#: src/pyams_content/component/video/provider/interfaces.py:90
+msgid "If 'yes', video player can't be controlled via keyboard shortcuts"
+msgstr "Si 'oui', le lecteur vidéo ne peut pas être contrôlé avec le clavier"
+
+#: src/pyams_content/component/video/provider/interfaces.py:94
+#: src/pyams_content/component/video/provider/interfaces.py:162
+#: src/pyams_content/component/video/provider/interfaces.py:215
 msgid "Video width"
 msgstr "Largeur"
 
-#: src/pyams_content/component/video/provider/interfaces.py:37
-#: src/pyams_content/component/video/provider/interfaces.py:109
-#: src/pyams_content/component/video/provider/interfaces.py:177
+#: src/pyams_content/component/video/provider/interfaces.py:95
+#: src/pyams_content/component/video/provider/interfaces.py:163
+#: src/pyams_content/component/video/provider/interfaces.py:216
 msgid ""
 "Initial video frame width; mandatory for old browsers but may be overridden "
 "by presentation skin"
@@ -1471,15 +1568,15 @@
 "Largeur initiale de la vidéo ; cette information peut être surchargée par le "
 "thème graphique mais elle est obligatoire pour les anciens navigateurs"
 
-#: src/pyams_content/component/video/provider/interfaces.py:43
-#: src/pyams_content/component/video/provider/interfaces.py:115
-#: src/pyams_content/component/video/provider/interfaces.py:183
+#: src/pyams_content/component/video/provider/interfaces.py:101
+#: src/pyams_content/component/video/provider/interfaces.py:169
+#: src/pyams_content/component/video/provider/interfaces.py:222
 msgid "Video height"
 msgstr "Hauteur"
 
-#: src/pyams_content/component/video/provider/interfaces.py:44
-#: src/pyams_content/component/video/provider/interfaces.py:116
-#: src/pyams_content/component/video/provider/interfaces.py:184
+#: src/pyams_content/component/video/provider/interfaces.py:102
+#: src/pyams_content/component/video/provider/interfaces.py:170
+#: src/pyams_content/component/video/provider/interfaces.py:223
 msgid ""
 "Initial video frame height; mandatory for old browsers but may be overridden "
 "by presentation skin"
@@ -1487,112 +1584,7 @@
 "Hauteur initiale de la vidéo ; cette information peut être surchargée par le "
 "thème graphique mais elle est obligatoire pour les anciens navigateurs"
 
-#: src/pyams_content/component/video/provider/interfaces.py:50
-#: src/pyams_content/component/video/provider/interfaces.py:122
-msgid "Start at"
-msgstr "Démarrer à"
-
-#: src/pyams_content/component/video/provider/interfaces.py:51
-#: src/pyams_content/component/video/provider/interfaces.py:123
-msgid ""
-"Position at which to start video, in 'seconds' or 'minutes:seconds' format"
-msgstr ""
-"Position à laquelle démarrer la vidéo, en secondes ou sous la forme 'minutes:"
-"secondes'"
-
-#: src/pyams_content/component/video/provider/interfaces.py:55
-msgid "Stop at"
-msgstr "S'arrêter à"
-
-#: src/pyams_content/component/video/provider/interfaces.py:56
-msgid ""
-"Position at which to stop video, in 'seconds' or 'minutes:seconds' format"
-msgstr ""
-"Position à laquelle arrêter la vidéo, en secondes ou sous la forme 'minutes:"
-"secondes'"
-
-#: src/pyams_content/component/video/provider/interfaces.py:59
-#: src/pyams_content/component/video/provider/interfaces.py:127
-#: src/pyams_content/component/video/provider/interfaces.py:205
-msgid "Auto play?"
-msgstr "Lecture automatique ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:60
-#: src/pyams_content/component/video/provider/interfaces.py:128
-#: src/pyams_content/component/video/provider/interfaces.py:206
-msgid "If 'yes', video is started automatically on page load"
-msgstr ""
-"Si 'oui', la vidéo est démarrée automatiquement au chargement de la page"
-
-#: src/pyams_content/component/video/provider/interfaces.py:64
-#: src/pyams_content/component/video/provider/interfaces.py:210
-msgid "Loop playback?"
-msgstr "Lecture en boucle ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:65
-#: src/pyams_content/component/video/provider/interfaces.py:211
-msgid "If 'yes', video is played indefinitely"
-msgstr "Si 'oui', la vidéo est jouée indéfiniment"
-
-#: src/pyams_content/component/video/provider/interfaces.py:69
-#: src/pyams_content/component/video/provider/interfaces.py:132
-msgid "Show video info?"
-msgstr "Afficher les infos ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:70
-#: src/pyams_content/component/video/provider/interfaces.py:133
-msgid "If 'no', video title and information won't be displayed"
-msgstr ""
-"Si 'non', le titre et les informations de la vidéo ne sont pas affichés"
-
-#: src/pyams_content/component/video/provider/interfaces.py:74
-#: src/pyams_content/component/video/provider/interfaces.py:137
-msgid "Show commands?"
-msgstr "Afficher les commandes ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:75
-#: src/pyams_content/component/video/provider/interfaces.py:138
-msgid "Show video player commands"
-msgstr "Si 'non', les commandes du lecteur vidéo ne sont pas affichées"
-
-#: src/pyams_content/component/video/provider/interfaces.py:79
-msgid "Hide branding?"
-msgstr "Masquer la marque ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:80
-msgid "If 'yes', Youtube branding won't be displayed"
-msgstr "Si 'non', la marque 'Youtube' n'est pas affichée en bas de la vidéo"
-
-#: src/pyams_content/component/video/provider/interfaces.py:84
-msgid "Show related videos?"
-msgstr "Vidéos liées ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:85
-msgid "Show related videos when video end"
-msgstr ""
-"Si 'non', les vidéos liées ne sont pas affichées lorsque la vidéo se termine"
-
-#: src/pyams_content/component/video/provider/interfaces.py:89
-#: src/pyams_content/component/video/provider/interfaces.py:157
-#: src/pyams_content/component/video/provider/interfaces.py:215
-msgid "Allow full screen?"
-msgstr "Mode plein écran ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:90
-#: src/pyams_content/component/video/provider/interfaces.py:158
-#: src/pyams_content/component/video/provider/interfaces.py:216
-msgid "If 'yes', video can be displayed in full screen"
-msgstr "Si 'non', la vidéo ne peut pas être affichée en plein écran"
-
-#: src/pyams_content/component/video/provider/interfaces.py:94
-msgid "Disable keyboard?"
-msgstr "Clavier inactif ?"
-
-#: src/pyams_content/component/video/provider/interfaces.py:95
-msgid "If 'yes', video player can't be controlled via keyboard shortcuts"
-msgstr "Si 'oui', le lecteur vidéo ne peut pas être contrôlé avec le clavier"
-
-#: src/pyams_content/component/video/provider/interfaces.py:104
+#: src/pyams_content/component/video/provider/interfaces.py:113
 msgid ""
 "To get video ID, just use the 'Share' button in Dailymotion platform, click "
 "on \"Copy link\" and paste the given URL here"
@@ -1601,41 +1593,41 @@
 "Dailymotion, cliquez sur le lien \"Copy link\" et collez l'URL obtenue dans "
 "ce champ"
 
-#: src/pyams_content/component/video/provider/interfaces.py:142
+#: src/pyams_content/component/video/provider/interfaces.py:137
 msgid "UI theme"
 msgstr "Thème graphique"
 
-#: src/pyams_content/component/video/provider/interfaces.py:143
+#: src/pyams_content/component/video/provider/interfaces.py:138
 msgid "Default base color theme"
 msgstr "Couleur de base du thème graphique"
 
-#: src/pyams_content/component/video/provider/interfaces.py:147
+#: src/pyams_content/component/video/provider/interfaces.py:142
 msgid "Show branding?"
 msgstr "Afficher la marque ?"
 
-#: src/pyams_content/component/video/provider/interfaces.py:148
-msgid "If 'no', Dailymotion branding won't be displayed"
+#: src/pyams_content/component/video/provider/interfaces.py:143
+msgid "If 'yes', Dailymotion branding will be displayed"
 msgstr ""
-"Si 'non', la marque 'Dailymotion' n'est pas affichée en bas de la vidéo"
-
-#: src/pyams_content/component/video/provider/interfaces.py:152
+"Si 'oui', la marque 'Dailymotion' est affichée en bas de la vidéo"
+
+#: src/pyams_content/component/video/provider/interfaces.py:147
 msgid "Show end screen?"
 msgstr "Écran de fin ?"
 
-#: src/pyams_content/component/video/provider/interfaces.py:153
+#: src/pyams_content/component/video/provider/interfaces.py:148
 msgid "Show end screen when video end"
 msgstr ""
 "Si 'non', les vidéos liées ne sont pas affichées lorsque la vidéo se termine"
 
-#: src/pyams_content/component/video/provider/interfaces.py:162
+#: src/pyams_content/component/video/provider/interfaces.py:157
 msgid "Allow sharing?"
 msgstr "Autoriser le partage ?"
 
-#: src/pyams_content/component/video/provider/interfaces.py:163
+#: src/pyams_content/component/video/provider/interfaces.py:158
 msgid "If 'no', video sharing will be disabled"
 msgstr "Si 'non', le partage de la vidéo ne sera pas autorisé"
 
-#: src/pyams_content/component/video/provider/interfaces.py:172
+#: src/pyams_content/component/video/provider/interfaces.py:181
 msgid ""
 "To get video ID, just use the 'Share' button in Vimeo platform, click on "
 "\"Link\" entry and copy/paste the given URL here"
@@ -1643,27 +1635,27 @@
 "Pour obtenir l'ID de la vidéo, utilisez le bouton \"Partager\" sur Vimeo, "
 "cliquez sur l'entrée \"Lien\" et copiez/collez l'URL obtenue dans ce champ"
 
-#: src/pyams_content/component/video/provider/interfaces.py:190
+#: src/pyams_content/component/video/provider/interfaces.py:185
 msgid "Show title?"
 msgstr "Afficher le titre ?"
 
-#: src/pyams_content/component/video/provider/interfaces.py:191
+#: src/pyams_content/component/video/provider/interfaces.py:186
 msgid "If 'no', video title won't be displayed"
 msgstr "Si 'non', le titre de la vidéo ne sera pas affiché"
 
-#: src/pyams_content/component/video/provider/interfaces.py:195
+#: src/pyams_content/component/video/provider/interfaces.py:190
 msgid "Show signature?"
 msgstr "Afficher la signature ?"
 
-#: src/pyams_content/component/video/provider/interfaces.py:196
-msgid "If 'no', video signature won't be displayed"
-msgstr "Si 'non', la signature de la vidéo ne sera pas affichée"
-
-#: src/pyams_content/component/video/provider/interfaces.py:200
+#: src/pyams_content/component/video/provider/interfaces.py:191
+msgid "If 'no', video's author signature won't be displayed"
+msgstr "Si 'non', la signature de l'auteur de la vidéo n'est pas affichée"
+
+#: src/pyams_content/component/video/provider/interfaces.py:195
 msgid "Infos color"
 msgstr "Couleur des infos"
 
-#: src/pyams_content/component/video/provider/interfaces.py:201
+#: src/pyams_content/component/video/provider/interfaces.py:196
 msgid "Color used for title and signature"
 msgstr ""
 "Couleur utilisée pour le titre, la signature et les commandes du lecteur"
@@ -1680,174 +1672,166 @@
 msgid "Add new external video..."
 msgstr "Ajout d'une vidéo externe"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:139
+#: src/pyams_content/component/video/zmi/paragraph.py:140
 msgid "Video provider is required"
 msgstr "Le nom du fournisseur est obligatoire"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:161
-#: src/pyams_content/component/video/zmi/paragraph.py:220
+#: src/pyams_content/component/video/zmi/paragraph.py:163
+#: src/pyams_content/component/video/zmi/paragraph.py:238
 msgid "Video provider settings"
 msgstr "Paramètres liés au fournisseur"
 
-#: src/pyams_content/component/video/zmi/paragraph.py:170
+#: src/pyams_content/component/video/zmi/paragraph.py:179
 msgid "Other settings"
 msgstr "Autres paramètres"
 
-#: src/pyams_content/component/video/interfaces/__init__.py:54
+#: src/pyams_content/component/video/interfaces/__init__.py:56
 msgid "Video provider"
 msgstr "Fournisseur"
 
-#: src/pyams_content/component/video/interfaces/__init__.py:55
+#: src/pyams_content/component/video/interfaces/__init__.py:57
 msgid "Name of external platform providing selected video"
 msgstr "Nom de la plate-forme externe fournissant la vidéo à afficher"
 
-#: src/pyams_content/shared/common/__init__.py:235
-#: src/pyams_content/shared/common/zmi/properties.py:67
+#: 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:90
 msgid "Properties"
 msgstr "Propriétés"
 
-#: src/pyams_content/shared/common/__init__.py:145
-#: src/pyams_content/shared/common/__init__.py:153
+#: src/pyams_content/shared/common/__init__.py:147
+#: src/pyams_content/shared/common/__init__.py:155
 #, python-format
 msgid "{date} by {principal}"
 msgstr "{date} par {principal}"
 
-#: src/pyams_content/shared/common/__init__.py:258
+#: src/pyams_content/shared/common/__init__.py:260
 #, python-format
 msgid "title length should be between 40 and 66 characters ({length} actually)"
 msgstr ""
 "Le titre devrait être composé de 40 à 66 caractères ({length} actuellement)"
 
-#: src/pyams_content/shared/common/zmi/search.py:88
-#: src/pyams_content/root/zmi/search.py:85
+#: src/pyams_content/shared/common/zmi/search.py:92
+#: src/pyams_content/root/zmi/search.py:91
 msgid "Quick search results"
 msgstr "Résultats de la recherche rapide"
 
-#: src/pyams_content/shared/common/zmi/search.py:152
-#: src/pyams_content/shared/common/zmi/search.py:185
-#: src/pyams_content/root/zmi/search.py:140
-#: src/pyams_content/root/zmi/search.py:173
+#: src/pyams_content/shared/common/zmi/search.py:157
+#: src/pyams_content/shared/common/zmi/search.py:190
+#: src/pyams_content/root/zmi/search.py:147
+#: src/pyams_content/root/zmi/search.py:180
 msgid "Advanced search"
 msgstr "Recherche avancée"
 
-#: src/pyams_content/shared/common/zmi/search.py:277
-#: src/pyams_content/root/zmi/search.py:253
+#: src/pyams_content/shared/common/zmi/search.py:282
+#: src/pyams_content/root/zmi/search.py:260
 msgid "Advanced search results"
 msgstr "Résultats de la recherche avancée"
 
-#: src/pyams_content/shared/common/zmi/search.py:160
+#: src/pyams_content/shared/common/zmi/search.py:165
 #: src/pyams_content/shared/common/zmi/dashboard.py:231
-#: src/pyams_content/root/zmi/search.py:152
+#: src/pyams_content/root/zmi/search.py:159
 msgid "Owner"
 msgstr "Propriétaire"
 
-#: src/pyams_content/shared/common/zmi/search.py:163
+#: src/pyams_content/shared/common/zmi/search.py:168
 #: src/pyams_content/shared/common/zmi/dashboard.py:154
 msgid "Status"
 msgstr "Statut"
 
-#: src/pyams_content/shared/common/zmi/search.py:167
-#: src/pyams_content/root/zmi/search.py:155
+#: src/pyams_content/shared/common/zmi/search.py:172
+#: src/pyams_content/root/zmi/search.py:162
 msgid "Created after..."
 msgstr "Créé entre le"
 
-#: src/pyams_content/shared/common/zmi/search.py:170
-#: src/pyams_content/root/zmi/search.py:158
+#: src/pyams_content/shared/common/zmi/search.py:175
+#: src/pyams_content/root/zmi/search.py:165
 msgid "Created before..."
 msgstr "et le"
 
-#: src/pyams_content/shared/common/zmi/search.py:173
-#: src/pyams_content/root/zmi/search.py:161
+#: src/pyams_content/shared/common/zmi/search.py:178
+#: src/pyams_content/root/zmi/search.py:168
 msgid "Modified after..."
 msgstr "Modifié entre le"
 
-#: src/pyams_content/shared/common/zmi/search.py:176
-#: src/pyams_content/root/zmi/search.py:164
+#: src/pyams_content/shared/common/zmi/search.py:181
+#: src/pyams_content/root/zmi/search.py:171
 msgid "Modified before..."
 msgstr "et le"
 
-#: src/pyams_content/shared/common/zmi/properties.py:57
+#: src/pyams_content/shared/common/zmi/properties.py:62
 msgid "Composition"
 msgstr "Composition"
 
-#: src/pyams_content/shared/common/zmi/properties.py:78
+#: src/pyams_content/shared/common/zmi/properties.py:83
 msgid "Content properties"
 msgstr "Propriétés élémentaires"
 
-#: src/pyams_content/shared/common/zmi/types.py:65
+#: src/pyams_content/shared/common/zmi/types.py:67
 msgid "Data types"
 msgstr "Types de contenus"
 
-#: src/pyams_content/shared/common/zmi/types.py:132
+#: src/pyams_content/shared/common/zmi/types.py:145
 msgid "Data type label"
 msgstr "Libellé du type"
 
-#: src/pyams_content/shared/common/zmi/types.py:170
-#: src/pyams_content/shared/common/zmi/types.py:412
+#: src/pyams_content/shared/common/zmi/types.py:183
+#: src/pyams_content/shared/common/zmi/types.py:411
 msgid "Default associations"
-msgstr "Associations par défaut"
-
-#: src/pyams_content/shared/common/zmi/types.py:191
+msgstr "Liens et pièces jointes par défaut"
+
+#: src/pyams_content/shared/common/zmi/types.py:211
 msgid "Content data types"
 msgstr "Types de contenus"
 
-#: src/pyams_content/shared/common/zmi/types.py:245
+#: src/pyams_content/shared/common/zmi/types.py:234
 msgid "Add data type"
 msgstr "Ajouter un type"
 
-#: src/pyams_content/shared/common/zmi/types.py:256
+#: src/pyams_content/shared/common/zmi/types.py:245
 msgid "Add new data type"
 msgstr "Ajout d'un type de contenu"
 
-#: src/pyams_content/shared/common/zmi/types.py:300
+#: src/pyams_content/shared/common/zmi/types.py:291
 msgid "Data type properties"
 msgstr "Propriétés du type de contenu"
 
-#: src/pyams_content/shared/common/zmi/types.py:375
+#: src/pyams_content/shared/common/zmi/types.py:374
 msgid "Subtype label"
 msgstr "Libellé du sous-type"
 
-#: src/pyams_content/shared/common/zmi/types.py:477
+#: src/pyams_content/shared/common/zmi/types.py:455
 msgid "Add subtype"
 msgstr "Ajouter un sous-type"
 
-#: src/pyams_content/shared/common/zmi/types.py:488
+#: src/pyams_content/shared/common/zmi/types.py:466
 msgid "Add new subtype"
 msgstr "Ajout d'un sous-type de contenu"
 
-#: src/pyams_content/shared/common/zmi/types.py:545
+#: src/pyams_content/shared/common/zmi/types.py:518
 msgid "Data subtype properties"
 msgstr "Propriétés du fichier standard"
 
-#: src/pyams_content/shared/common/zmi/types.py:108
+#: src/pyams_content/shared/common/zmi/types.py:112
 msgid "No currently defined data type."
 msgstr "Aucun type de contenu n'est actuellement défini."
 
-#: src/pyams_content/shared/common/zmi/types.py:284
+#: src/pyams_content/shared/common/zmi/types.py:273
 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:516
+#: src/pyams_content/shared/common/zmi/types.py:494
 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:529
+#: 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:142
+#: 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/types.py:212
-msgid "Given data type doesn't exist!"
-msgstr "Le type de contenu indiqué n'existe pas !"
-
-#: src/pyams_content/shared/common/zmi/types.py:461
-msgid "Given data subtype doesn't exist!"
-msgstr "Le sous-type de contenu indiqué n'existe pas !"
-
 #: src/pyams_content/shared/common/zmi/workflow.py:115
 #: src/pyams_content/shared/common/zmi/workflow.py:207
 #: src/pyams_content/shared/common/zmi/workflow.py:252
@@ -1859,8 +1843,8 @@
 #: src/pyams_content/shared/common/zmi/workflow.py:605
 #: src/pyams_content/shared/common/zmi/workflow.py:650
 #: src/pyams_content/shared/common/zmi/workflow.py:696
-#: src/pyams_content/shared/common/zmi/workflow.py:750
-#: src/pyams_content/shared/common/zmi/__init__.py:272
+#: src/pyams_content/shared/common/zmi/workflow.py:752
+#: src/pyams_content/shared/common/zmi/__init__.py:276
 #: src/pyams_content/shared/common/zmi/owner.py:74
 #: src/pyams_content/features/review/zmi/__init__.py:90
 msgid "Cancel"
@@ -1920,7 +1904,7 @@
 msgid "Create new version"
 msgstr "Créer une nouvelle version"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:751
+#: src/pyams_content/shared/common/zmi/workflow.py:753
 #: src/pyams_content/workflow/__init__.py:561
 #: src/pyams_content/workflow/basic.py:248
 msgid "Delete version"
@@ -1936,11 +1920,11 @@
 msgid "A comment is required"
 msgstr "Le commentaire est obligatoire"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:774
+#: src/pyams_content/shared/common/zmi/workflow.py:776
 msgid "Delete content"
 msgstr "Supprimer définitivement ce contenu"
 
-#: src/pyams_content/shared/common/zmi/workflow.py:783
+#: src/pyams_content/shared/common/zmi/workflow.py:785
 msgid "Delete definitively"
 msgstr "Supprimer définitivement"
 
@@ -1958,11 +1942,11 @@
 msgid "{state} {date}"
 msgstr "{state} {date}"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:262
+#: src/pyams_content/shared/common/zmi/__init__.py:266
 msgid "Duplicate content..."
 msgstr "Dupliquer le contenu"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:281
+#: src/pyams_content/shared/common/zmi/__init__.py:285
 msgid "Duplicate content"
 msgstr "Dupliquer ce contenu"
 
@@ -1970,60 +1954,60 @@
 msgid "This title can be modified afterwards"
 msgstr "Pourra être modifié ultérieurement"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:273
+#: src/pyams_content/shared/common/zmi/__init__.py:277
 msgid "Duplicate this content"
 msgstr "Dupliquer ce contenu"
 
-#: src/pyams_content/shared/common/zmi/__init__.py:334
+#: src/pyams_content/shared/common/zmi/__init__.py:338
 #, 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:383
+#: src/pyams_content/shared/common/zmi/__init__.py:389
 msgid "Created or modified in this version"
 msgstr "Créé ou modifié dans cette version"
 
-#: src/pyams_content/shared/common/zmi/summary.py:51
+#: src/pyams_content/shared/common/zmi/summary.py:50
 msgid "Display content summary"
 msgstr "Récapitulatif pour ce contenu"
 
-#: src/pyams_content/shared/common/zmi/summary.py:75
+#: src/pyams_content/shared/common/zmi/summary.py:74
 msgid "Identity card"
 msgstr "Carte d'identité"
 
-#: src/pyams_content/shared/common/zmi/summary.py:87
+#: src/pyams_content/shared/common/zmi/summary.py:86
 msgid "Requested action"
 msgstr "Évolution demandée"
 
-#: src/pyams_content/shared/common/zmi/summary.py:128
+#: src/pyams_content/shared/common/zmi/summary.py:127
 msgid "Publication and retire dates"
 msgstr "Dates de publication et de retrait planifiées"
 
-#: src/pyams_content/shared/common/zmi/summary.py:147
+#: src/pyams_content/shared/common/zmi/summary.py:146
 msgid "Current version"
 msgstr "À propos de cette version"
 
-#: src/pyams_content/shared/common/zmi/summary.py:177
+#: src/pyams_content/shared/common/zmi/summary.py:176
 msgid "Content history"
 msgstr "Pour mémoire"
 
-#: src/pyams_content/shared/common/zmi/summary.py:118
+#: src/pyams_content/shared/common/zmi/summary.py:117
 msgid "Associated comment"
 msgstr "Commentaire associé"
 
-#: src/pyams_content/shared/common/zmi/summary.py:159
+#: src/pyams_content/shared/common/zmi/summary.py:158
 #: src/pyams_content/shared/common/zmi/dashboard.py:198
 msgid "Version"
 msgstr "Version"
 
-#: src/pyams_content/shared/common/zmi/summary.py:108
+#: src/pyams_content/shared/common/zmi/summary.py:107
 #, python-format
 msgid "{state} {date} by {principal}"
 msgstr "{state} {date} par {principal}"
 
-#: src/pyams_content/shared/common/zmi/summary.py:165
+#: src/pyams_content/shared/common/zmi/summary.py:164
 #, python-format
 msgid "{state} since {date}, by {principal}"
 msgstr "{state} depuis {date} par {principal}"
@@ -2411,16 +2395,16 @@
 msgid "Owners"
 msgstr "Propriétaires"
 
-#: src/pyams_content/shared/common/zmi/security.py:176
+#: src/pyams_content/shared/common/zmi/security.py:178
 #, python-format
 msgid "Edit manager restrictions for « {0} »"
 msgstr "Gérer le périmètre d'intervention de « {0} »"
 
-#: src/pyams_content/shared/common/zmi/security.py:213
+#: src/pyams_content/shared/common/zmi/security.py:216
 msgid "Apply contents restrictions"
 msgstr "Appliquer des restrictions d'accès"
 
-#: src/pyams_content/shared/common/zmi/security.py:215
+#: src/pyams_content/shared/common/zmi/security.py:218
 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 "
@@ -2718,7 +2702,7 @@
 msgstr "Ce contenu est déjà retiré et n'est plus visible des internautes."
 
 #: src/pyams_content/shared/common/interfaces/types.py:35
-#: src/pyams_content/shared/form/zmi/field.py:160
+#: src/pyams_content/shared/form/zmi/field.py:148
 msgid "Name"
 msgstr "Nom"
 
@@ -2727,7 +2711,7 @@
 msgstr "Nom de ce type de donnée ; doit être unique entre tous les types"
 
 #: src/pyams_content/shared/common/interfaces/types.py:39
-#: src/pyams_content/shared/form/zmi/field.py:171
+#: src/pyams_content/shared/form/zmi/field.py:159
 #: src/pyams_content/shared/form/interfaces/__init__.py:61
 msgid "Label"
 msgstr "Libellé"
@@ -2824,12 +2808,12 @@
 "responsables à certains contenus"
 
 #: src/pyams_content/shared/common/interfaces/__init__.py:57
-#: src/pyams_content/shared/common/interfaces/__init__.py:165
+#: src/pyams_content/shared/common/interfaces/__init__.py:174
 msgid "Managers"
 msgstr "Responsables"
 
 #: src/pyams_content/shared/common/interfaces/__init__.py:58
-#: src/pyams_content/shared/common/interfaces/__init__.py:166
+#: src/pyams_content/shared/common/interfaces/__init__.py:175
 msgid ""
 "Managers can handle main operations in tool's workflow, like publish or "
 "retire contents"
@@ -2839,7 +2823,7 @@
 "restrictions qui leur sont imposées"
 
 #: src/pyams_content/shared/common/interfaces/__init__.py:63
-#: src/pyams_content/shared/common/interfaces/__init__.py:171
+#: src/pyams_content/shared/common/interfaces/__init__.py:180
 msgid "Contributors"
 msgstr "Contributeurs"
 
@@ -2847,19 +2831,37 @@
 msgid "Contributors are users which are allowed to create new contents"
 msgstr "Les contributeurs sont autorisés à créer de nouveaux contenus"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:87
+#: src/pyams_content/shared/common/interfaces/__init__.py:90
 msgid "Workflow name"
 msgstr "Nom du workflow"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:88
+#: src/pyams_content/shared/common/interfaces/__init__.py:91
 msgid "Name of workflow utility used to manage tool contents"
 msgstr "Nom du workflow qui gère le cycle de vie des contenus de cet outil"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:112
+#: src/pyams_content/shared/common/interfaces/__init__.py:115
+msgid "Content URL"
+msgstr "URL du contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:116
+msgid ""
+"URL used to access this content; this is important for SEO and should "
+"include most important words describing content; spaces and underscores will "
+"be automatically replaced by hyphens"
+msgstr ""
+"<span>Texte utilisé dans l'URL d'accès au contenu ; cette information est "
+"importante pour le référencement : il faut utiliser des mots essentiels pour "
+"décrire ce contenu.</span><br /><strong>Remarque :</strong> le texte saisi "
+"est converti automatiquement en minuscules, les espaces et traits de "
+"soulignement (« underscores ») sont remplacés automatiquement par des traits "
+"d'union, les lettres accentuées par leur équivalent sans accent, et les mots "
+"de moins de trois lettres sont supprimés."
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:121
 msgid "Version creator"
 msgstr "À l'origine de cette version"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:113
+#: src/pyams_content/shared/common/interfaces/__init__.py:122
 msgid ""
 "Name of content's version creator. The creator of the first version is also "
 "it's owner."
@@ -2867,62 +2869,62 @@
 "Nom du créateur de cette version. Le créateur de la première version d'un "
 "contenu est aussi son propriétaire."
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:117
+#: src/pyams_content/shared/common/interfaces/__init__.py:126
 msgid "First owner"
 msgstr "Premier propriétaire"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:118
+#: src/pyams_content/shared/common/interfaces/__init__.py:127
 msgid "Name of content's first version owner"
 msgstr "Nom de l'utilisateur ayant créé la première version"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:122
+#: src/pyams_content/shared/common/interfaces/__init__.py:131
 msgid "Version creation"
 msgstr "Date de création"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:125
+#: src/pyams_content/shared/common/interfaces/__init__.py:134
 msgid "Version modifiers"
 msgstr "Intervenants"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:126
+#: src/pyams_content/shared/common/interfaces/__init__.py:135
 msgid "List of principals who modified this content"
 msgstr "Liste des utilisateurs qui sont intervenus sur cette version"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:129
+#: src/pyams_content/shared/common/interfaces/__init__.py:138
 msgid "Last modifier"
 msgstr "Dernier intervenant"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:130
+#: src/pyams_content/shared/common/interfaces/__init__.py:139
 msgid "Last principal who modified this content"
 msgstr "Dernier utilisateur étant intervenu sur ce contenu"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:133
+#: src/pyams_content/shared/common/interfaces/__init__.py:142
 msgid "Last update"
 msgstr "Dernière modification"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:137
+#: src/pyams_content/shared/common/interfaces/__init__.py:146
 msgid ""
 "The content's description is 'hidden' into HTML's page headers; but it can "
 "be seen, for example, in some search engines results as content's description"
 msgstr ""
 "La description du contenu est 'masquée' dans les en-têtes des pages HTML ; "
 "mais on peut la retrouver, par exemple, dans les listes de résultats des "
-"moteurs de recherche comme Google"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:142
+"moteurs de recherche"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:151
 msgid "Keywords"
 msgstr "Mots-clés"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:143
+#: src/pyams_content/shared/common/interfaces/__init__.py:152
 msgid "They will be included into HTML pages metadata"
 msgstr "Ces mots-clés seront intégrés dans les métadonnées des pages HTML"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:146
+#: src/pyams_content/shared/common/interfaces/__init__.py:155
 #: src/pyams_content/shared/site/zmi/folder.py:72
 #: src/pyams_content/shared/site/interfaces/__init__.py:56
 msgid "Notepad"
 msgstr "Bloc-notes"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:147
+#: src/pyams_content/shared/common/interfaces/__init__.py:156
 #: src/pyams_content/shared/site/zmi/folder.py:73
 #: src/pyams_content/shared/site/interfaces/__init__.py:57
 msgid "Internal information to be known about this content"
@@ -2930,11 +2932,11 @@
 "Pour prendre note d'informations internes utiles ou importantes à propos de "
 "ce contenu ; ces notes ne seront pas publiées sur internet."
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:158
+#: src/pyams_content/shared/common/interfaces/__init__.py:167
 msgid "Content owner"
 msgstr "Propriétaire"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:159
+#: src/pyams_content/shared/common/interfaces/__init__.py:168
 msgid ""
 "The owner is the creator of content's first version, except if it was "
 "transferred afterwards to another owner"
@@ -2943,7 +2945,7 @@
 "lorsque cette propriété a été transférée à un autre utilisateur après coup. "
 "Les contenus archivés ne sont plus transférables."
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:172
+#: src/pyams_content/shared/common/interfaces/__init__.py:181
 msgid ""
 "Contributors are users which are allowed to update this content in addition "
 "to it's owner"
@@ -2951,11 +2953,11 @@
 "Les contributeurs sont autorisés, en plus du propriétaire, à modifier ce "
 "contenu"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:177
+#: src/pyams_content/shared/common/interfaces/__init__.py:186
 msgid "Readers"
 msgstr "Relecteurs"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:178
+#: src/pyams_content/shared/common/interfaces/__init__.py:187
 msgid ""
 "Readers are users which are asked to verify and comment contents before they "
 "are published"
@@ -2963,26 +2965,26 @@
 "Les relecteurs sont des utilisateurs qui sont sollicités pour vérifier et "
 "commenter un contenu avant sa publication"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:183
+#: src/pyams_content/shared/common/interfaces/__init__.py:192
 msgid "Guests"
 msgstr "Invités"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:184
+#: src/pyams_content/shared/common/interfaces/__init__.py:193
 msgid ""
 "Guests are users which are allowed to view contents with restricted access"
 msgstr ""
 "Les invités sont autorisés à consulter des contenus dont l'accès a été "
 "restreint"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:207
+#: src/pyams_content/shared/common/interfaces/__init__.py:216
 msgid "Principal ID"
 msgstr "ID utilisateur"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:212
+#: src/pyams_content/shared/common/interfaces/__init__.py:221
 msgid "Restricted contents"
 msgstr "Accès restreints"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:213
+#: src/pyams_content/shared/common/interfaces/__init__.py:222
 msgid ""
 "If 'yes', this manager will get restricted access to manage contents based "
 "on selected settings"
@@ -2990,11 +2992,11 @@
 "Si 'oui', ce responsable n'aura qu'un accès restreint à certains contenus en "
 "fonction de paramètres spécifiques"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:218
+#: src/pyams_content/shared/common/interfaces/__init__.py:227
 msgid "Selected owners"
 msgstr "Propriétaires"
 
-#: src/pyams_content/shared/common/interfaces/__init__.py:219
+#: src/pyams_content/shared/common/interfaces/__init__.py:228
 msgid "Manager will have access to contents owned by these principals"
 msgstr ""
 "Le responsable n'aura accès qu'aux contenus dont ces utilisateurs sont "
@@ -3056,11 +3058,11 @@
 msgid "List"
 msgstr "Choix multiples dans une liste"
 
-#: src/pyams_content/shared/form/zmi/properties.py:39
+#: src/pyams_content/shared/form/zmi/properties.py:41
 msgid "Main form settings"
 msgstr "Paramètres du formulaire"
 
-#: src/pyams_content/shared/form/zmi/properties.py:64
+#: src/pyams_content/shared/form/zmi/properties.py:70
 msgid "Form handler settings"
 msgstr "Paramètres du gestionnaire"
 
@@ -3078,41 +3080,37 @@
 msgid "Form « {title} »"
 msgstr "Formulaire « {title} »"
 
-#: src/pyams_content/shared/form/zmi/field.py:67
+#: src/pyams_content/shared/form/zmi/field.py:68
 msgid "Form fields..."
 msgstr "Champs de saisie"
 
-#: src/pyams_content/shared/form/zmi/field.py:129
-msgid "Switch field visibility"
-msgstr "Cliquez pour rendre le champ visible ou non"
-
-#: src/pyams_content/shared/form/zmi/field.py:182
+#: src/pyams_content/shared/form/zmi/field.py:170
 #: src/pyams_content/shared/form/interfaces/__init__.py:56
 msgid "Field type"
 msgstr "Type de champ"
 
-#: src/pyams_content/shared/form/zmi/field.py:215
+#: src/pyams_content/shared/form/zmi/field.py:203
 msgid "Form fields list"
 msgstr "Liste des champs du formulaire"
 
-#: src/pyams_content/shared/form/zmi/field.py:251
-#: src/pyams_content/shared/form/zmi/field.py:262
+#: src/pyams_content/shared/form/zmi/field.py:226
+#: src/pyams_content/shared/form/zmi/field.py:237
 msgid "Add form field"
 msgstr "Ajouter un champ"
 
-#: src/pyams_content/shared/form/zmi/field.py:308
+#: src/pyams_content/shared/form/zmi/field.py:285
 msgid "Edit form field properties"
 msgstr "Propriétés du champ"
 
-#: src/pyams_content/shared/form/zmi/field.py:191
+#: src/pyams_content/shared/form/zmi/field.py:179
 msgid "-- unknown field type --"
 msgstr "-- type de champ inconnu --"
 
-#: src/pyams_content/shared/form/zmi/field.py:110
+#: src/pyams_content/shared/form/zmi/field.py:114
 msgid "No currently defined form field."
 msgstr "Ce formulaire ne comporte aucun champ."
 
-#: src/pyams_content/shared/form/zmi/field.py:287
+#: src/pyams_content/shared/form/zmi/field.py:262
 msgid "Specified name is already used!"
 msgstr "Le nom indiqué pour ce champ est déjà utilisé !"
 
@@ -3280,7 +3278,7 @@
 msgid "News topic"
 msgstr "Actualité"
 
-#: src/pyams_content/shared/view/zmi/properties.py:38
+#: src/pyams_content/shared/view/zmi/properties.py:40
 msgid "Main view settings"
 msgstr "Paramètres de la vue"
 
@@ -3302,11 +3300,11 @@
 msgid "View themes settings"
 msgstr "Paramétrage des thèmes de la vue"
 
-#: src/pyams_content/shared/view/zmi/reference.py:54
+#: src/pyams_content/shared/view/zmi/reference.py:53
 msgid "References..."
 msgstr "Références"
 
-#: src/pyams_content/shared/view/zmi/reference.py:64
+#: src/pyams_content/shared/view/zmi/reference.py:63
 msgid "View internal references settings"
 msgstr "Références internes de la vue"
 
@@ -3458,20 +3456,20 @@
 msgid "no area defined"
 msgstr "aucune zone définie"
 
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:54
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:55
 msgid "Image map..."
 msgstr "Image cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:65
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:66
 msgid "Add new image map"
 msgstr "Ajout d'une image cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:95
-#: src/pyams_content/shared/logo/zmi/paragraph.py:95
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:98
+#: src/pyams_content/shared/logo/zmi/paragraph.py:98
 msgid "Edit paragraph properties"
 msgstr "Propriétés de l'image cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/properties.py:38
+#: src/pyams_content/shared/imagemap/zmi/properties.py:40
 msgid "Background image"
 msgstr "Image de fond"
 
@@ -3501,24 +3499,28 @@
 msgid "Image map areas"
 msgstr "Zones cliquables de l'images"
 
-#: src/pyams_content/shared/imagemap/zmi/container.py:136
+#: src/pyams_content/shared/imagemap/zmi/container.py:140
 #: src/pyams_content/shared/imagemap/interfaces/__init__.py:49
 msgid "Link target"
 msgstr "Cible du lien"
 
-#: src/pyams_content/shared/imagemap/zmi/container.py:109
+#: src/pyams_content/shared/imagemap/zmi/container.py:113
 msgid "No currently defined image."
 msgstr "Aucun image de fond n'est actuellement définie."
 
-#: src/pyams_content/shared/imagemap/zmi/container.py:111
+#: src/pyams_content/shared/imagemap/zmi/container.py:115
 msgid "No currently defined area."
 msgstr "Aucune zone cliquable n'est actuellement définie."
 
-#: src/pyams_content/shared/imagemap/zmi/container.py:180
+#: src/pyams_content/shared/imagemap/zmi/container.py:175
+msgid "No provided object_name argument!"
+msgstr "Argument 'object_name' non fourni !"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:194
 msgid "Given area name doesn't exist!"
 msgstr "La zone indiquée n'existe pas !"
 
-#: src/pyams_content/shared/imagemap/zmi/container.py:176
+#: src/pyams_content/shared/imagemap/zmi/container.py:186
 msgid "Bad query object_name parameter value!"
 msgstr "Valeur incorrecte du paramètre object_name !"
 
@@ -3530,7 +3532,7 @@
 msgid "Add new image area"
 msgstr "Ajout d'une zone cliquable"
 
-#: src/pyams_content/shared/imagemap/zmi/area.py:106
+#: src/pyams_content/shared/imagemap/zmi/area.py:108
 msgid "Edit image map properties"
 msgstr "Propriétés de l'image"
 
@@ -3584,12 +3586,12 @@
 
 #: src/pyams_content/shared/site/zmi/folder.py:68
 #: src/pyams_content/shared/site/zmi/__init__.py:63
-#: src/pyams_content/shared/site/zmi/link.py:68
+#: src/pyams_content/shared/site/zmi/link.py:67
 msgid "Parent"
 msgstr "Niveau parent"
 
 #: src/pyams_content/shared/site/zmi/folder.py:69
-#: src/pyams_content/shared/site/zmi/link.py:69
+#: src/pyams_content/shared/site/zmi/link.py:68
 msgid "Folder's parent"
 msgstr "Niveau de rattachement de cette rubrique"
 
@@ -3611,62 +3613,62 @@
 msgid "Topic's parent"
 msgstr "Niveau parent"
 
-#: src/pyams_content/shared/site/zmi/link.py:59
+#: src/pyams_content/shared/site/zmi/link.py:58
 msgid "Rent content..."
 msgstr "Lier un contenu"
 
-#: src/pyams_content/shared/site/zmi/link.py:78
+#: src/pyams_content/shared/site/zmi/link.py:77
 msgid "Rent existing content"
 msgstr "Lier un contenu existant"
 
-#: src/pyams_content/shared/site/zmi/link.py:140
+#: src/pyams_content/shared/site/zmi/link.py:141
 msgid "Edit content link properties"
 msgstr "Propriétés du lien"
 
-#: src/pyams_content/shared/site/zmi/container.py:101
-#: src/pyams_content/shared/site/zmi/container.py:113
+#: src/pyams_content/shared/site/zmi/container.py:102
+#: src/pyams_content/shared/site/zmi/container.py:114
 #: src/pyams_content/shared/blog/zmi/manager.py:151
 #: src/pyams_content/shared/blog/zmi/manager.py:163
 msgid "Publication dates..."
 msgstr "Dates de publication"
 
-#: src/pyams_content/shared/site/zmi/container.py:124
-#: src/pyams_content/shared/blog/zmi/manager.py:174
+#: src/pyams_content/shared/site/zmi/container.py:127
+#: src/pyams_content/shared/blog/zmi/manager.py:176
 msgid "Update publication dates"
 msgstr "Dates de publication"
 
-#: src/pyams_content/shared/site/zmi/container.py:173
-#: src/pyams_content/shared/site/zmi/container.py:183
-#: src/pyams_content/root/zmi/sites.py:67
+#: src/pyams_content/shared/site/zmi/container.py:172
+#: src/pyams_content/shared/site/zmi/container.py:182
+#: src/pyams_content/root/zmi/sites.py:68
 msgid "Site tree"
 msgstr "Arborescence du site"
 
-#: src/pyams_content/shared/site/zmi/container.py:250
-#: src/pyams_content/shared/site/zmi/container.py:148
+#: src/pyams_content/shared/site/zmi/container.py:301
+#: src/pyams_content/shared/site/zmi/container.py:151
 msgid "Visible element?"
 msgstr "Élément visible ?"
 
-#: src/pyams_content/shared/site/zmi/container.py:289
+#: src/pyams_content/shared/site/zmi/container.py:302
+msgid "Switch element visibility"
+msgstr "Cliquez pour rendre l'élément visible ou non"
+
+#: src/pyams_content/shared/site/zmi/container.py:363
 msgid "Folders and topics"
 msgstr "Rubriques et articles"
 
-#: src/pyams_content/shared/site/zmi/container.py:409
+#: src/pyams_content/shared/site/zmi/container.py:483
 msgid "Delete site item"
 msgstr "Supprimer ce contenu"
 
-#: src/pyams_content/shared/site/zmi/container.py:298
+#: src/pyams_content/shared/site/zmi/container.py:372
 msgid "Click to open/close all folders"
 msgstr "Afficher/masquer toutes les rubriques"
 
-#: src/pyams_content/shared/site/zmi/container.py:314
+#: src/pyams_content/shared/site/zmi/container.py:388
 msgid "Click to show/hide inner folders"
 msgstr "Cliquer pour afficher ou cache les sous-niveaux"
 
-#: src/pyams_content/shared/site/zmi/container.py:577
-msgid "Given object name doesn't exist!"
-msgstr "Le nom d'objet indiqué n'existe pas !"
-
-#: src/pyams_content/shared/site/zmi/container.py:516
+#: src/pyams_content/shared/site/zmi/container.py:258
 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 "
@@ -3733,15 +3735,15 @@
 msgid "no URL defined"
 msgstr "aucune URL définie"
 
-#: src/pyams_content/shared/logo/zmi/paragraph.py:54
+#: src/pyams_content/shared/logo/zmi/paragraph.py:55
 msgid "Logos..."
 msgstr "Logos"
 
-#: src/pyams_content/shared/logo/zmi/paragraph.py:65
+#: src/pyams_content/shared/logo/zmi/paragraph.py:66
 msgid "Add new logos paragraph"
 msgstr "Ajout d'une sélection de logos"
 
-#: src/pyams_content/shared/logo/zmi/properties.py:38
+#: src/pyams_content/shared/logo/zmi/properties.py:40
 msgid "Main logo settings"
 msgstr "Propriétés du logo"
 
@@ -3810,7 +3812,7 @@
 msgid "Blog post"
 msgstr "Article de blog"
 
-#: src/pyams_content/profile/zmi/__init__.py:40
+#: src/pyams_content/profile/zmi/__init__.py:42
 msgid "Admin. profile"
 msgstr "Profil intervenant"
 
@@ -3830,7 +3832,7 @@
 msgid "Default length used for inner tables and dashboards"
 msgstr "Longueur par défaut des tableaux internes et des tableaux de bord"
 
-#: src/pyams_content/root/zmi/sites.py:77
+#: src/pyams_content/root/zmi/sites.py:78
 msgid "Blogs and shared sites"
 msgstr "Blogs et sites partagés"
 
@@ -3846,11 +3848,7 @@
 msgid "Delete shared site"
 msgstr "Supprimer ce site"
 
-#: src/pyams_content/root/zmi/sites.py:205
-msgid "Given site name doesn't exist!"
-msgstr "Le nom de site indiqué n'existe pas !"
-
-#: src/pyams_content/root/zmi/search.py:148
+#: src/pyams_content/root/zmi/search.py:155
 msgid "Content types"
 msgstr "Types de contenus"
 
@@ -4222,9 +4220,13 @@
 
 #: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:66
 msgid "Shared contents"
-msgstr "Contenus"
+msgstr "Gabarits"
 
 #: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:87
+msgid "Shared tools"
+msgstr "Outils"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:108
 msgid "My roles"
 msgstr "Mes rôles"
 
@@ -4242,13 +4244,11 @@
 
 #: src/pyams_content/interfaces/__init__.py:103
 msgid "Short name"
-msgstr "Titre court"
+msgstr "Fil d'Ariane"
 
 #: src/pyams_content/interfaces/__init__.py:104
 msgid "Short name used in breadcrumbs"
-msgstr ""
-"Affiché lorsque le contenu est consulté depuis son site d'origine (s'il a "
-"été identifié)"
+msgstr "Libellé utilisé dans le fil d'Ariane"
 
 #: src/pyams_content/interfaces/__init__.py:115
 msgid "Modification date"
@@ -4258,24 +4258,24 @@
 msgid "Contents"
 msgstr "Contenu"
 
-#: src/pyams_content/reference/zmi/table.py:81
+#: src/pyams_content/reference/zmi/table.py:83
 msgid "Table contents"
 msgstr "Contenu de la table"
 
-#: src/pyams_content/reference/zmi/table.py:122
-#: src/pyams_content/reference/zmi/__init__.py:64
+#: src/pyams_content/reference/zmi/table.py:129
+#: src/pyams_content/reference/zmi/__init__.py:69
 msgid "References tables"
 msgstr "Tables de références"
 
-#: src/pyams_content/reference/zmi/table.py:136
+#: src/pyams_content/reference/zmi/table.py:143
 msgid "Properties..."
 msgstr "Propriétés"
 
-#: src/pyams_content/reference/zmi/table.py:147
+#: src/pyams_content/reference/zmi/table.py:156
 msgid "Edit table properties"
 msgstr "Propriétés de la table"
 
-#: src/pyams_content/reference/zmi/__init__.py:46
+#: src/pyams_content/reference/zmi/__init__.py:51
 msgid "References"
 msgstr "Références"
 
@@ -4315,12 +4315,12 @@
 msgid "List of selected pictograms which will be available to shared contents"
 msgstr "Liste des pictogrammes proposés dans les contenus partagés"
 
-#: src/pyams_content/features/renderer/zmi/__init__.py:103
+#: src/pyams_content/features/renderer/zmi/__init__.py:105
 #: src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
 msgid "Edit renderer properties"
 msgstr "Propriétés du mode de rendu"
 
-#: src/pyams_content/features/renderer/zmi/__init__.py:132
+#: src/pyams_content/features/renderer/zmi/__init__.py:134
 msgid "Hidden content"
 msgstr "Contenu non affiché"
 
@@ -4406,7 +4406,7 @@
 msgstr "En-tête de l'alerte"
 
 #: src/pyams_content/features/alert/interfaces.py:69
-#: src/pyams_content/features/alert/zmi/container.py:188
+#: src/pyams_content/features/alert/zmi/container.py:170
 msgid "Message"
 msgstr "Message"
 
@@ -4456,15 +4456,15 @@
 "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:45
+#: src/pyams_content/features/alert/zmi/__init__.py:46
 msgid "Add alert"
 msgstr "Ajouter une alerte"
 
-#: src/pyams_content/features/alert/zmi/__init__.py:55
+#: src/pyams_content/features/alert/zmi/__init__.py:56
 msgid "Add new alert"
 msgstr "Ajout d'une alerte"
 
-#: src/pyams_content/features/alert/zmi/__init__.py:82
+#: src/pyams_content/features/alert/zmi/__init__.py:85
 msgid "Edit alert properties"
 msgstr "Propriétés de l'alerte"
 
@@ -4472,22 +4472,14 @@
 msgid "Alerts"
 msgstr "Alertes"
 
-#: src/pyams_content/features/alert/zmi/container.py:128
-msgid "Switch alert visibility"
-msgstr "Cliquez pour rendre l'alerte visible ou non"
-
-#: src/pyams_content/features/alert/zmi/container.py:234
+#: src/pyams_content/features/alert/zmi/container.py:192
 msgid "Alert list"
 msgstr "Liste des alertes"
 
-#: src/pyams_content/features/alert/zmi/container.py:93
+#: src/pyams_content/features/alert/zmi/container.py:91
 msgid "No currently defined alert."
 msgstr "Aucune alerte n'est définie actuellement."
 
-#: src/pyams_content/features/alert/zmi/container.py:223
-msgid "Given alert name doesn't exist!"
-msgstr "L'alerte indiquée n'existe pas !"
-
 #: src/pyams_content/features/review/__init__.py:186
 #, python-format
 msgid "Request comment: {comment}"
@@ -4547,11 +4539,11 @@
 msgid "Content review request"
 msgstr "Demande de relecture"
 
-#: src/pyams_content/features/review/zmi/__init__.py:168
+#: src/pyams_content/features/review/zmi/__init__.py:172
 msgid "Comments"
 msgstr "Commentaires"
 
-#: src/pyams_content/features/review/zmi/__init__.py:188
+#: src/pyams_content/features/review/zmi/__init__.py:192
 msgid "Review comments"
 msgstr "Commentaires associés à cette version"
 
@@ -4592,16 +4584,16 @@
 msgid "Ask for content review"
 msgstr "Demander la relecture"
 
-#: src/pyams_content/features/review/zmi/__init__.py:150
+#: src/pyams_content/features/review/zmi/__init__.py:153
 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:261
+#: src/pyams_content/features/review/zmi/__init__.py:266
 msgid "Message is mandatory!"
 msgstr "Un commentaire est obligatoire !"
 
-#: src/pyams_content/features/review/zmi/__init__.py:140
+#: src/pyams_content/features/review/zmi/__init__.py:141
 #, python-format
 msgid "Request successful. {count} new notification(s) have been sent"
 msgstr "Votre demande a été transmise. {count} notification(s) envoyée(s)."
@@ -4684,6 +4676,48 @@
 msgid "Thank you."
 msgstr "Merci."
 
+#~ msgid "Paragraphs types..."
+#~ msgstr "Types de paragraphes"
+
+#~ msgid "Paragraphs types"
+#~ msgstr "Types de paragraphes"
+
+#~ msgid "Paragraphs..."
+#~ msgstr "Paragraphes"
+
+#~ msgid "Paragraphs list"
+#~ msgstr "Liste des paragraphes"
+
+#~ msgid "Paragraphs associations"
+#~ msgstr "Associations par paragraphe"
+
+#~ msgid "Add illustration"
+#~ msgstr "Ajouter une illustration"
+
+#~ msgid "Given media name doesn't exist!"
+#~ msgstr "Le nom du média indiqué n'existe pas !"
+
+#~ msgid "Given association name doesn't exist!"
+#~ msgstr "Le nom d'association indiqué n'existe pas !"
+
+#~ msgid "Given data type doesn't exist!"
+#~ msgstr "Le type de contenu indiqué n'existe pas !"
+
+#~ msgid "Given data subtype doesn't exist!"
+#~ msgstr "Le sous-type de contenu indiqué n'existe pas !"
+
+#~ msgid "Switch field visibility"
+#~ msgstr "Cliquez pour rendre le champ visible ou non"
+
+#~ msgid "Given object name doesn't exist!"
+#~ msgstr "Le nom d'objet indiqué n'existe pas !"
+
+#~ msgid "Given site name doesn't exist!"
+#~ msgstr "Le nom de site indiqué n'existe pas !"
+
+#~ msgid "Given alert name doesn't exist!"
+#~ msgstr "L'alerte indiquée n'existe pas !"
+
 #~ msgid "Switch milestone visibility"
 #~ msgstr "Cliquez pour rendre le jalon visible ou non"
 
@@ -4760,9 +4794,6 @@
 #~ msgid "Add new identity card paragraph"
 #~ msgstr "Ajout d'une vidéo"
 
-#~ msgid "Hidden illustration"
-#~ msgstr "Illustration non affichée"
-
 #~ msgid "internal reference is not defined"
 #~ msgstr "la référence interne n'est pas définie"
 
--- a/src/pyams_content/locales/pyams_content.pot	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/locales/pyams_content.pot	Fri Apr 27 12:00:07 2018 +0200
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-04-06 13:47+0200\n"
+"POT-Creation-Date: 2018-04-26 16:39+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"
@@ -88,41 +88,26 @@
 
 #: ./src/pyams_content/component/gallery/zmi/file.py:58
 #: ./src/pyams_content/component/gallery/zmi/file.py:69
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:180
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:176
 msgid "Add media(s)"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:185
+#: ./src/pyams_content/component/gallery/zmi/file.py:189
 msgid "Update media properties"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:242
+#: ./src/pyams_content/component/gallery/zmi/file.py:246
 msgid "Remove media..."
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:152
+#: ./src/pyams_content/component/gallery/zmi/file.py:154
 msgid "Show/hide media"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:210
+#: ./src/pyams_content/component/gallery/zmi/file.py:214
 msgid "Audio content"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/file.py:258
-#: ./src/pyams_content/component/association/zmi/__init__.py:268
-#: ./src/pyams_content/shared/common/zmi/types.py:208
-#: ./src/pyams_content/shared/common/zmi/types.py:457
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:169
-#: ./src/pyams_content/shared/site/zmi/container.py:573
-#: ./src/pyams_content/root/zmi/sites.py:197
-#: ./src/pyams_content/features/alert/zmi/container.py:215
-msgid "No provided object_name argument!"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:262
-msgid "Given media name doesn't exist!"
-msgstr ""
-
 #: ./src/pyams_content/component/gallery/zmi/paragraph.py:58
 msgid "Medias gallery..."
 msgstr ""
@@ -131,25 +116,25 @@
 msgid "Add new gallery"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:99
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:101
 msgid "Edit gallery properties"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:63
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:62
 msgid "Update gallery properties"
 msgstr ""
 
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:100
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:101
 msgid "Update gallery contents"
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/zmi/interfaces.py:36
 #: ./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:52
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:48
 #: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
-#: ./src/pyams_content/component/video/interfaces/__init__.py:50
+#: ./src/pyams_content/component/video/interfaces/__init__.py:52
 msgid "Author"
 msgstr ""
 
@@ -157,7 +142,7 @@
 #: ./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/video/interfaces/__init__.py:51
+#: ./src/pyams_content/component/video/interfaces/__init__.py:53
 msgid "Name of document's author"
 msgstr ""
 
@@ -192,13 +177,13 @@
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:47
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:73
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:41
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:45
 msgid "Legend"
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:50
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:77
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:44
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:48
 #: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:48
 msgid "Accessibility title"
 msgstr ""
@@ -208,25 +193,25 @@
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:54
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:85
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:41
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:76
 msgid "Image or video data"
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:55
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:57
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:86
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:42
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:77
 msgid "Image or video content"
 msgstr ""
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:58
 #: ./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:48
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:52
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:44
 #: ./src/pyams_content/component/links/interfaces/__init__.py:37
-#: ./src/pyams_content/component/video/interfaces/__init__.py:46
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:136
+#: ./src/pyams_content/component/video/interfaces/__init__.py:48
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:145
 #: ./src/pyams_content/shared/form/interfaces/__init__.py:65
 msgid "Description"
 msgstr ""
@@ -278,17 +263,17 @@
 
 #: ./src/pyams_content/component/gallery/interfaces/__init__.py:94
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:36
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:269
-#: ./src/pyams_content/component/paragraph/zmi/container.py:223
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:257
+#: ./src/pyams_content/component/paragraph/zmi/container.py:224
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:46
 #: ./src/pyams_content/component/links/zmi/reverse.py:71
 #: ./src/pyams_content/shared/common/zmi/dashboard.py:109
 #: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:188
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:119
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:123
 #: ./src/pyams_content/shared/site/zmi/folder.py:64
 #: ./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:172
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:162
 msgid "Title"
 msgstr ""
 
@@ -333,71 +318,71 @@
 msgid "Audio file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:73
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:74
 msgid "External files"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:86
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:89
 msgid "Add external file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:98
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:101
 msgid "Add new external file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:145
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:141
 msgid "Update file properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:185
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:181
 msgid "Images"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:198
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:196
 msgid "Add image"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:210
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:208
 msgid "Add new image"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:256
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:245
 msgid "Update image properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:296
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:285
 msgid "Videos"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:309
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:300
 msgid "Add video"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:321
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:312
 msgid "Add new video"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:359
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:341
 msgid "Update video properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:391
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:373
 msgid "Audios files"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:404
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:388
 msgid "Add audio file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:416
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:400
 msgid "Add new audio file"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:454
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:429
 msgid "Update audio file properties"
 msgstr ""
 
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:49
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:50
 msgid "External file type"
 msgstr ""
 
@@ -407,32 +392,24 @@
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:41
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:45
-#: ./src/pyams_content/component/video/interfaces/__init__.py:47
+#: ./src/pyams_content/component/video/interfaces/__init__.py:49
 msgid "File description displayed by front-office template"
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:48
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:64
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:93
 #: ./src/pyams_content/component/links/interfaces/__init__.py:59
 msgid "Language"
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:49
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:65
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:94
 msgid "File's content language"
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:53
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:60
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:89
 msgid "Save file as..."
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:54
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:61
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:90
 msgid "Name under which the file will be saved"
 msgstr ""
 
@@ -449,7 +426,7 @@
 msgstr ""
 
 #: ./src/pyams_content/component/extfile/interfaces/__init__.py:78
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:45
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:49
 #: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:49
 msgid "Alternate title used to describe image content"
 msgstr ""
@@ -478,45 +455,43 @@
 
 #: ./src/pyams_content/component/illustration/paragraph.py:40
 #: ./src/pyams_content/component/illustration/paragraph.py:47
-#: ./src/pyams_content/component/illustration/__init__.py:142
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:57
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:80
+#: ./src/pyams_content/component/illustration/__init__.py:135
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:54
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:81
 msgid "Illustration"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:58
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:59
 msgid "Illustration..."
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:69
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:70
 msgid "Add new illustration"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:100
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:104
 msgid "Edit illustration properties"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:143
-msgid "Add illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:53
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:83
+msgid "Header illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:57
 msgid "Name of picture's author"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:69
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:98
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:60
 msgid "Illustration template"
 msgstr ""
 
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:70
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:99
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:61
 msgid "Presentation template used for illustration"
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/milestone.py:206
 #: ./src/pyams_content/component/paragraph/milestone.py:228
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:320
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:308
 msgid "Milestones"
 msgstr ""
 
@@ -542,7 +517,6 @@
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/container.py:82
-#: ./src/pyams_content/component/paragraph/zmi/container.py:307
 msgid "Paragraphs"
 msgstr ""
 
@@ -552,7 +526,7 @@
 
 #: ./src/pyams_content/component/paragraph/pictogram.py:197
 #: ./src/pyams_content/component/paragraph/pictogram.py:219
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:334
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:312
 msgid "Pictograms"
 msgstr ""
 
@@ -566,7 +540,7 @@
 
 #: ./src/pyams_content/component/paragraph/keynumber.py:190
 #: ./src/pyams_content/component/paragraph/keynumber.py:213
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:302
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:287
 msgid "Key numbers"
 msgstr ""
 
@@ -590,19 +564,19 @@
 msgid "Verbatim paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/html.py:58
+#: ./src/pyams_content/component/paragraph/html.py:59
 msgid "Raw HTML "
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/html.py:67
+#: ./src/pyams_content/component/paragraph/html.py:68
 msgid "Raw HTML paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/html.py:105
+#: ./src/pyams_content/component/paragraph/html.py:106
 msgid "Rich text"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/html.py:114
+#: ./src/pyams_content/component/paragraph/html.py:115
 msgid "Rich text paragraph"
 msgstr ""
 
@@ -614,7 +588,7 @@
 #: ./src/pyams_content/component/paragraph/header.py:47
 #: ./src/pyams_content/component/paragraph/interfaces/header.py:40
 #: ./src/pyams_content/features/alert/interfaces.py:65
-#: ./src/pyams_content/features/alert/zmi/container.py:176
+#: ./src/pyams_content/features/alert/zmi/container.py:158
 msgid "Header"
 msgstr ""
 
@@ -622,41 +596,41 @@
 msgid "Header paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:77
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:79
 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:118
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:122
 msgid "Edit milestone paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:278
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:266
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:50
 msgid "Associated label"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:287
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:275
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:54
 msgid "Anchor"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:335
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:323
 msgid "Add milestone"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:346
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:334
 msgid "Add new milestone"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:386
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:367
 msgid "Edit milestone properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:370
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:356
 msgid "Milestone was correctly added"
 msgstr ""
 
@@ -668,19 +642,19 @@
 msgid "Add new key points paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:93
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:95
 msgid "Edit key points paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:61
-msgid "Paragraphs types..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:72
-msgid "Paragraphs types"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:89
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:63
+msgid "Content block types..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:76
+msgid "Content block types"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:93
 msgid ""
 "You can define which types of paragraphs are allowed in this container.\n"
 "\n"
@@ -689,196 +663,195 @@
 "NOTICE: removing types from allowed types list will have no effect on already created contents!"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:139
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:194
 msgid "Paragraph was correctly added."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:56
+#: ./src/pyams_content/component/paragraph/zmi/video.py:57
 msgid "Video paragraph..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:67
+#: ./src/pyams_content/component/paragraph/zmi/video.py:68
 msgid "Add new video paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:109
-#: ./src/pyams_content/component/video/zmi/paragraph.py:182
+#: ./src/pyams_content/component/paragraph/zmi/video.py:112
+#: ./src/pyams_content/component/video/zmi/paragraph.py:193
 msgid "Edit video properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/video.py:83
-#: ./src/pyams_content/component/paragraph/zmi/video.py:128
+#: ./src/pyams_content/component/paragraph/zmi/video.py:84
+#: ./src/pyams_content/component/paragraph/zmi/video.py:131
 #: ./src/pyams_content/component/video/zmi/paragraph.py:87
-#: ./src/pyams_content/component/video/zmi/paragraph.py:205
+#: ./src/pyams_content/component/video/zmi/paragraph.py:216
 msgid "HTML content"
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/zmi/container.py:74
-msgid "Paragraphs..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:239
+msgid "Contents..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:240
 msgid "Show/hide all paragraphs"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/container.py:285
-#: ./src/pyams_content/component/paragraph/zmi/container.py:294
-msgid "Paragraphs list"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:364
-#: ./src/pyams_content/component/association/zmi/paragraph.py:55
-#: ./src/pyams_content/component/association/zmi/__init__.py:107
-msgid "Associations..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:376
-msgid "Paragraphs associations"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:126
+#: ./src/pyams_content/component/paragraph/zmi/container.py:288
+#: ./src/pyams_content/component/paragraph/zmi/container.py:297
+#: ./src/pyams_content/component/paragraph/zmi/container.py:310
+msgid "Content blocks"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:367
+msgid "Links and attachments..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:379
+msgid "Content blocks links and attachments"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:127
 msgid "No currently defined paragraph."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/container.py:248
+#: ./src/pyams_content/component/paragraph/zmi/container.py:249
 msgid "Click to open/close all paragraphs editors"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/container.py:261
+#: ./src/pyams_content/component/paragraph/zmi/container.py:262
 msgid "Click to open/close paragraph editor"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/container.py:132
+#: ./src/pyams_content/component/paragraph/zmi/container.py:133
 msgid "Check allowed paragraph types to be able to create new paragraphs."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:84
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:81
 msgid "Pictograms..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:95
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:92
 msgid "Add new pictogram paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:125
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:124
 msgid "Edit pictogram paragraph properties"
 msgstr ""
 
 #. Default: Header
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:297
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:275
 msgid "pictogram-item-header"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:312
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:286
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:290
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:271
 #: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:59
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:56
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:55
 msgid "Associated text"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:349
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:56
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:327
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:59
 msgid "Add pictogram"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:360
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:67
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:338
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:70
 msgid "Add new pictogram"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:405
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:95
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:376
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:100
 msgid "Edit pictogram properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:389
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:365
 msgid "Pictogram was correctly added"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:76
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:78
 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:117
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:121
 msgid "Edit key number paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:268
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:47
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:253
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:46
 msgid "Number"
 msgstr ""
 
 #. Default: Header
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:277
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:51
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:262
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:50
 msgid "key-number-label"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:317
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:302
 msgid "Add keynumber"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:328
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:313
 msgid "Add new keynumber"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:368
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:346
 msgid "Edit keynumber properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:352
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:335
 msgid "Key number was correctly added"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:84
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:85
 msgid "Framed text..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:96
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:97
 msgid "Add new framed text paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:130
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:133
 msgid "Edit framed text paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:57
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:58
 msgid "Verbatim..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:68
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:69
 msgid "Add new verbatim paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:98
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:101
 msgid "Edit verbatim paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:78
+#: ./src/pyams_content/component/paragraph/zmi/html.py:77
 msgid "Raw HTML..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:89
+#: ./src/pyams_content/component/paragraph/zmi/html.py:88
 msgid "Add new raw HTML paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:122
+#: ./src/pyams_content/component/paragraph/zmi/html.py:123
 msgid "Edit raw HTML paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:193
+#: ./src/pyams_content/component/paragraph/zmi/html.py:194
 msgid "Rich text..."
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:204
+#: ./src/pyams_content/component/paragraph/zmi/html.py:205
 msgid "Add new rich text paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/html.py:237
+#: ./src/pyams_content/component/paragraph/zmi/html.py:240
 msgid "Edit rich text paragraph properties"
 msgstr ""
 
@@ -890,7 +863,7 @@
 msgid "Add new contact card"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:95
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:97
 msgid "Edit contact card properties"
 msgstr ""
 
@@ -902,14 +875,14 @@
 msgid "Add new header paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/zmi/header.py:93
+#: ./src/pyams_content/component/paragraph/zmi/header.py:95
 msgid "Edit header paragraph properties"
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/interfaces/milestone.py:41
 #: ./src/pyams_content/component/paragraph/interfaces/__init__.py:43
 #: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:42
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:42
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:41
 #: ./src/pyams_content/component/association/interfaces/__init__.py:43
 #: ./src/pyams_content/shared/form/interfaces/__init__.py:86
 #: ./src/pyams_content/shared/site/interfaces/__init__.py:107
@@ -973,8 +946,8 @@
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/interfaces/__init__.py:84
-#: ./src/pyams_content/shared/common/zmi/types.py:154
-#: ./src/pyams_content/shared/common/zmi/types.py:396
+#: ./src/pyams_content/shared/common/zmi/types.py:167
+#: ./src/pyams_content/shared/common/zmi/types.py:395
 msgid "Default paragraphs"
 msgstr ""
 
@@ -984,7 +957,7 @@
 
 #: ./src/pyams_content/component/paragraph/interfaces/video.py:41
 #: ./src/pyams_content/component/paragraph/interfaces/html.py:53
-#: ./src/pyams_content/component/video/interfaces/__init__.py:71
+#: ./src/pyams_content/component/video/interfaces/__init__.py:73
 msgid "Body"
 msgstr ""
 
@@ -1037,28 +1010,28 @@
 msgid "Presentation template used for pictograms"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:43
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:42
 msgid "Is this key number visible in front-office?"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:48
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:47
 msgid "Key number value"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:52
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:51
 msgid ""
 "Small text to be displayed above number (according to selected renderer)"
 msgstr ""
 
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:57
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:56
 msgid "The way this text will be rendered depends on presentation template"
 msgstr ""
 
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:83
+msgid "Key numbers template"
+msgstr ""
+
 #: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:84
-msgid "Key numbers template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:85
 msgid "Presentation template used for key numbers"
 msgstr ""
 
@@ -1170,7 +1143,7 @@
 msgstr ""
 
 #: ./src/pyams_content/component/theme/__init__.py:81
-#: ./src/pyams_content/component/theme/zmi/portlet.py:39
+#: ./src/pyams_content/component/theme/zmi/portlet.py:40
 #: ./src/pyams_content/component/theme/interfaces/__init__.py:43
 msgid "Themes"
 msgstr ""
@@ -1188,11 +1161,11 @@
 msgid "Content themes"
 msgstr ""
 
-#: ./src/pyams_content/component/theme/zmi/manager.py:45
+#: ./src/pyams_content/component/theme/zmi/manager.py:46
 msgid "Themes settings..."
 msgstr ""
 
-#: ./src/pyams_content/component/theme/zmi/manager.py:56
+#: ./src/pyams_content/component/theme/zmi/manager.py:59
 msgid "Selected themes"
 msgstr ""
 
@@ -1202,43 +1175,44 @@
 msgstr ""
 
 #: ./src/pyams_content/component/association/container.py:95
-#: ./src/pyams_content/component/association/zmi/__init__.py:327
+#: ./src/pyams_content/component/association/zmi/__init__.py:282
 msgid "Associations"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/paragraph.py:66
+#: ./src/pyams_content/component/association/zmi/paragraph.py:56
+#: ./src/pyams_content/component/association/zmi/__init__.py:94
+msgid "Associations..."
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/paragraph.py:67
 msgid "Add new association paragraph"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/paragraph.py:96
+#: ./src/pyams_content/component/association/zmi/paragraph.py:99
 msgid "Edit association paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/__init__.py:205
+#: ./src/pyams_content/component/association/zmi/__init__.py:187
 msgid "Public title"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/__init__.py:222
+#: ./src/pyams_content/component/association/zmi/__init__.py:204
 msgid "Inner title"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/__init__.py:237
+#: ./src/pyams_content/component/association/zmi/__init__.py:219
 msgid "Size"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/__init__.py:304
-#: ./src/pyams_content/component/association/zmi/__init__.py:314
+#: ./src/pyams_content/component/association/zmi/__init__.py:259
+#: ./src/pyams_content/component/association/zmi/__init__.py:269
 msgid "Associations list"
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/__init__.py:65
+#: ./src/pyams_content/component/association/zmi/__init__.py:64
 msgid "Association was correctly added."
 msgstr ""
 
-#: ./src/pyams_content/component/association/zmi/__init__.py:276
-msgid "Given association name doesn't exist!"
-msgstr ""
-
 #: ./src/pyams_content/component/association/interfaces/__init__.py:44
 msgid "Is this item visible in front-office?"
 msgstr ""
@@ -1267,51 +1241,51 @@
 msgid "target is not published"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:56
+#: ./src/pyams_content/component/links/zmi/__init__.py:57
 msgid "Internal links"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:69
+#: ./src/pyams_content/component/links/zmi/__init__.py:72
 msgid "Add internal link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:81
+#: ./src/pyams_content/component/links/zmi/__init__.py:84
 msgid "Add new internal link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:126
+#: ./src/pyams_content/component/links/zmi/__init__.py:122
 msgid "Edit internal link properties"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:164
+#: ./src/pyams_content/component/links/zmi/__init__.py:160
 msgid "External links"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:177
+#: ./src/pyams_content/component/links/zmi/__init__.py:175
 msgid "Add external link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:189
+#: ./src/pyams_content/component/links/zmi/__init__.py:187
 msgid "Add new external link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:234
+#: ./src/pyams_content/component/links/zmi/__init__.py:225
 msgid "Edit external link properties"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:272
+#: ./src/pyams_content/component/links/zmi/__init__.py:263
 msgid "Mailto links"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:285
+#: ./src/pyams_content/component/links/zmi/__init__.py:278
 msgid "Add mailto link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:297
+#: ./src/pyams_content/component/links/zmi/__init__.py:290
 msgid "Add new mailto link"
 msgstr ""
 
-#: ./src/pyams_content/component/links/zmi/__init__.py:342
+#: ./src/pyams_content/component/links/zmi/__init__.py:328
 msgid "Edit mailto link properties"
 msgstr ""
 
@@ -1377,213 +1351,231 @@
 msgid "Dailymotion settings"
 msgstr ""
 
+#: ./src/pyams_content/component/video/provider/__init__.py:66
+msgid "Other provider"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/__init__.py:90
+msgid "Custom video settings"
+msgstr ""
+
 #: ./src/pyams_content/component/video/provider/vimeo.py:92
 msgid "Vimeo settings"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:31
-#: ./src/pyams_content/component/video/provider/interfaces.py:103
-#: ./src/pyams_content/component/video/provider/interfaces.py:171
-msgid "Video ID"
+msgid "Integration code"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:32
 msgid ""
+"Please select integration code provided by your video provider, and paste it "
+"here"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:40
+#: ./src/pyams_content/component/video/provider/interfaces.py:112
+#: ./src/pyams_content/component/video/provider/interfaces.py:180
+msgid "Video ID"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:41
+msgid ""
 "To get video ID, just use the 'Share' button in Youtube platform and "
 "copy/paste the given URL here"
 msgstr ""
 
-#: ./src/pyams_content/component/video/provider/interfaces.py:36
-#: ./src/pyams_content/component/video/provider/interfaces.py:108
-#: ./src/pyams_content/component/video/provider/interfaces.py:176
-msgid "Video width"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:37
-#: ./src/pyams_content/component/video/provider/interfaces.py:109
-#: ./src/pyams_content/component/video/provider/interfaces.py:177
+#: ./src/pyams_content/component/video/provider/interfaces.py:45
+#: ./src/pyams_content/component/video/provider/interfaces.py:117
+msgid "Start at"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:46
+#: ./src/pyams_content/component/video/provider/interfaces.py:118
 msgid ""
-"Initial video frame width; mandatory for old browsers but may be overridden "
-"by presentation skin"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:43
-#: ./src/pyams_content/component/video/provider/interfaces.py:115
-#: ./src/pyams_content/component/video/provider/interfaces.py:183
-msgid "Video height"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:44
-#: ./src/pyams_content/component/video/provider/interfaces.py:116
-#: ./src/pyams_content/component/video/provider/interfaces.py:184
-msgid ""
-"Initial video frame height; mandatory for old browsers but may be overridden "
-"by presentation skin"
+"Position at which to start video, in 'seconds' or 'minutes:seconds' format"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:50
-#: ./src/pyams_content/component/video/provider/interfaces.py:122
-msgid "Start at"
+msgid "Stop at"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:51
-#: ./src/pyams_content/component/video/provider/interfaces.py:123
 msgid ""
-"Position at which to start video, in 'seconds' or 'minutes:seconds' format"
+"Position at which to stop video, in 'seconds' or 'minutes:seconds' format"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:54
+#: ./src/pyams_content/component/video/provider/interfaces.py:122
+#: ./src/pyams_content/component/video/provider/interfaces.py:200
+msgid "Auto play?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:55
-msgid "Stop at"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:56
-msgid ""
-"Position at which to stop video, in 'seconds' or 'minutes:seconds' format"
+#: ./src/pyams_content/component/video/provider/interfaces.py:123
+#: ./src/pyams_content/component/video/provider/interfaces.py:201
+msgid "If 'yes', video is started automatically on page load"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:59
-#: ./src/pyams_content/component/video/provider/interfaces.py:127
 #: ./src/pyams_content/component/video/provider/interfaces.py:205
-msgid "Auto play?"
+msgid "Loop playback?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:60
-#: ./src/pyams_content/component/video/provider/interfaces.py:128
 #: ./src/pyams_content/component/video/provider/interfaces.py:206
-msgid "If 'yes', video is started automatically on page load"
+msgid "If 'yes', video is played indefinitely"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:64
-#: ./src/pyams_content/component/video/provider/interfaces.py:210
-msgid "Loop playback?"
+#: ./src/pyams_content/component/video/provider/interfaces.py:127
+msgid "Show video info?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:65
-#: ./src/pyams_content/component/video/provider/interfaces.py:211
-msgid "If 'yes', video is played indefinitely"
+#: ./src/pyams_content/component/video/provider/interfaces.py:128
+msgid "If 'no', video title and information won't be displayed"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:69
 #: ./src/pyams_content/component/video/provider/interfaces.py:132
-msgid "Show video info?"
+msgid "Show commands?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:70
 #: ./src/pyams_content/component/video/provider/interfaces.py:133
-msgid "If 'no', video title and information won't be displayed"
+msgid "Show video player commands"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:74
-#: ./src/pyams_content/component/video/provider/interfaces.py:137
-msgid "Show commands?"
+msgid "Hide branding?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:75
-#: ./src/pyams_content/component/video/provider/interfaces.py:138
-msgid "Show video player commands"
+msgid "If 'no', Youtube branding will be displayed"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:79
-msgid "Hide branding?"
+msgid "Show related videos?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:80
-msgid "If 'yes', Youtube branding won't be displayed"
+msgid "Show related videos when video end"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:84
-msgid "Show related videos?"
+#: ./src/pyams_content/component/video/provider/interfaces.py:152
+#: ./src/pyams_content/component/video/provider/interfaces.py:210
+msgid "Allow full screen?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:85
-msgid "Show related videos when video end"
+#: ./src/pyams_content/component/video/provider/interfaces.py:153
+#: ./src/pyams_content/component/video/provider/interfaces.py:211
+msgid "If 'yes', video can be displayed in full screen"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:89
-#: ./src/pyams_content/component/video/provider/interfaces.py:157
-#: ./src/pyams_content/component/video/provider/interfaces.py:215
-msgid "Allow full screen?"
+msgid "Disable keyboard?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:90
-#: ./src/pyams_content/component/video/provider/interfaces.py:158
-#: ./src/pyams_content/component/video/provider/interfaces.py:216
-msgid "If 'yes', video can be displayed in full screen"
+msgid "If 'yes', video player can't be controlled via keyboard shortcuts"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:94
-msgid "Disable keyboard?"
+#: ./src/pyams_content/component/video/provider/interfaces.py:162
+#: ./src/pyams_content/component/video/provider/interfaces.py:215
+msgid "Video width"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:95
-msgid "If 'yes', video player can't be controlled via keyboard shortcuts"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:104
+#: ./src/pyams_content/component/video/provider/interfaces.py:163
+#: ./src/pyams_content/component/video/provider/interfaces.py:216
+msgid ""
+"Initial video frame width; mandatory for old browsers but may be overridden "
+"by presentation skin"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:101
+#: ./src/pyams_content/component/video/provider/interfaces.py:169
+#: ./src/pyams_content/component/video/provider/interfaces.py:222
+msgid "Video height"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:102
+#: ./src/pyams_content/component/video/provider/interfaces.py:170
+#: ./src/pyams_content/component/video/provider/interfaces.py:223
+msgid ""
+"Initial video frame height; mandatory for old browsers but may be overridden "
+"by presentation skin"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:113
 msgid ""
 "To get video ID, just use the 'Share' button in Dailymotion platform, click "
 "on \"Copy link\" and paste the given URL here"
 msgstr ""
 
+#: ./src/pyams_content/component/video/provider/interfaces.py:137
+msgid "UI theme"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:138
+msgid "Default base color theme"
+msgstr ""
+
 #: ./src/pyams_content/component/video/provider/interfaces.py:142
-msgid "UI theme"
+msgid "Show branding?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:143
-msgid "Default base color theme"
+msgid "If 'yes', Dailymotion branding will be displayed"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:147
-msgid "Show branding?"
+msgid "Show end screen?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:148
-msgid "If 'no', Dailymotion branding won't be displayed"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:152
-msgid "Show end screen?"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:153
 msgid "Show end screen when video end"
 msgstr ""
 
-#: ./src/pyams_content/component/video/provider/interfaces.py:162
+#: ./src/pyams_content/component/video/provider/interfaces.py:157
 msgid "Allow sharing?"
 msgstr ""
 
-#: ./src/pyams_content/component/video/provider/interfaces.py:163
+#: ./src/pyams_content/component/video/provider/interfaces.py:158
 msgid "If 'no', video sharing will be disabled"
 msgstr ""
 
-#: ./src/pyams_content/component/video/provider/interfaces.py:172
+#: ./src/pyams_content/component/video/provider/interfaces.py:181
 msgid ""
 "To get video ID, just use the 'Share' button in Vimeo platform, click on "
 "\"Link\" entry and copy/paste the given URL here"
 msgstr ""
 
+#: ./src/pyams_content/component/video/provider/interfaces.py:185
+msgid "Show title?"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/interfaces.py:186
+msgid "If 'no', video title won't be displayed"
+msgstr ""
+
 #: ./src/pyams_content/component/video/provider/interfaces.py:190
-msgid "Show title?"
+msgid "Show signature?"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:191
-msgid "If 'no', video title won't be displayed"
+msgid "If 'no', video's author signature won't be displayed"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:195
-msgid "Show signature?"
+msgid "Infos color"
 msgstr ""
 
 #: ./src/pyams_content/component/video/provider/interfaces.py:196
-msgid "If 'no', video signature won't be displayed"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:200
-msgid "Infos color"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/interfaces.py:201
 msgid "Color used for title and signature"
 msgstr ""
 
@@ -1599,173 +1591,165 @@
 msgid "Add new external video..."
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:139
+#: ./src/pyams_content/component/video/zmi/paragraph.py:140
 msgid "Video provider is required"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:161
-#: ./src/pyams_content/component/video/zmi/paragraph.py:220
+#: ./src/pyams_content/component/video/zmi/paragraph.py:163
+#: ./src/pyams_content/component/video/zmi/paragraph.py:238
 msgid "Video provider settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/zmi/paragraph.py:170
+#: ./src/pyams_content/component/video/zmi/paragraph.py:179
 msgid "Other settings"
 msgstr ""
 
-#: ./src/pyams_content/component/video/interfaces/__init__.py:54
+#: ./src/pyams_content/component/video/interfaces/__init__.py:56
 msgid "Video provider"
 msgstr ""
 
-#: ./src/pyams_content/component/video/interfaces/__init__.py:55
+#: ./src/pyams_content/component/video/interfaces/__init__.py:57
 msgid "Name of external platform providing selected video"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/__init__.py:235
-#: ./src/pyams_content/shared/common/zmi/properties.py:67
+#: ./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:90
 msgid "Properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/__init__.py:145
-#: ./src/pyams_content/shared/common/__init__.py:153
+#: ./src/pyams_content/shared/common/__init__.py:147
+#: ./src/pyams_content/shared/common/__init__.py:155
 #, python-format
 msgid "{date} by {principal}"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/__init__.py:258
+#: ./src/pyams_content/shared/common/__init__.py:260
 #, python-format
 msgid "title length should be between 40 and 66 characters ({length} actually)"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:88
-#: ./src/pyams_content/root/zmi/search.py:85
+#: ./src/pyams_content/shared/common/zmi/search.py:92
+#: ./src/pyams_content/root/zmi/search.py:91
 msgid "Quick search results"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:152
-#: ./src/pyams_content/shared/common/zmi/search.py:185
-#: ./src/pyams_content/root/zmi/search.py:140
-#: ./src/pyams_content/root/zmi/search.py:173
+#: ./src/pyams_content/shared/common/zmi/search.py:157
+#: ./src/pyams_content/shared/common/zmi/search.py:190
+#: ./src/pyams_content/root/zmi/search.py:147
+#: ./src/pyams_content/root/zmi/search.py:180
 msgid "Advanced search"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:277
-#: ./src/pyams_content/root/zmi/search.py:253
+#: ./src/pyams_content/shared/common/zmi/search.py:282
+#: ./src/pyams_content/root/zmi/search.py:260
 msgid "Advanced search results"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:160
+#: ./src/pyams_content/shared/common/zmi/search.py:165
 #: ./src/pyams_content/shared/common/zmi/dashboard.py:231
-#: ./src/pyams_content/root/zmi/search.py:152
+#: ./src/pyams_content/root/zmi/search.py:159
 msgid "Owner"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:163
+#: ./src/pyams_content/shared/common/zmi/search.py:168
 #: ./src/pyams_content/shared/common/zmi/dashboard.py:154
 msgid "Status"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:167
-#: ./src/pyams_content/root/zmi/search.py:155
+#: ./src/pyams_content/shared/common/zmi/search.py:172
+#: ./src/pyams_content/root/zmi/search.py:162
 msgid "Created after..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:170
-#: ./src/pyams_content/root/zmi/search.py:158
+#: ./src/pyams_content/shared/common/zmi/search.py:175
+#: ./src/pyams_content/root/zmi/search.py:165
 msgid "Created before..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:173
-#: ./src/pyams_content/root/zmi/search.py:161
+#: ./src/pyams_content/shared/common/zmi/search.py:178
+#: ./src/pyams_content/root/zmi/search.py:168
 msgid "Modified after..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/search.py:176
-#: ./src/pyams_content/root/zmi/search.py:164
+#: ./src/pyams_content/shared/common/zmi/search.py:181
+#: ./src/pyams_content/root/zmi/search.py:171
 msgid "Modified before..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/properties.py:57
+#: ./src/pyams_content/shared/common/zmi/properties.py:62
 msgid "Composition"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/properties.py:78
+#: ./src/pyams_content/shared/common/zmi/properties.py:83
 msgid "Content properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:65
+#: ./src/pyams_content/shared/common/zmi/types.py:67
 msgid "Data types"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:132
+#: ./src/pyams_content/shared/common/zmi/types.py:145
 msgid "Data type label"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:170
-#: ./src/pyams_content/shared/common/zmi/types.py:412
+#: ./src/pyams_content/shared/common/zmi/types.py:183
+#: ./src/pyams_content/shared/common/zmi/types.py:411
 msgid "Default associations"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:191
+#: ./src/pyams_content/shared/common/zmi/types.py:211
 msgid "Content data types"
 msgstr ""
 
+#: ./src/pyams_content/shared/common/zmi/types.py:234
+msgid "Add data type"
+msgstr ""
+
 #: ./src/pyams_content/shared/common/zmi/types.py:245
-msgid "Add data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:256
 msgid "Add new data type"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:300
+#: ./src/pyams_content/shared/common/zmi/types.py:291
 msgid "Data type properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:375
+#: ./src/pyams_content/shared/common/zmi/types.py:374
 msgid "Subtype label"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:477
+#: ./src/pyams_content/shared/common/zmi/types.py:455
 msgid "Add subtype"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:488
+#: ./src/pyams_content/shared/common/zmi/types.py:466
 msgid "Add new subtype"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:545
+#: ./src/pyams_content/shared/common/zmi/types.py:518
 msgid "Data subtype properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:108
+#: ./src/pyams_content/shared/common/zmi/types.py:112
 msgid "No currently defined data type."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:284
+#: ./src/pyams_content/shared/common/zmi/types.py:273
 msgid "Specified type name is already used!"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:516
+#: ./src/pyams_content/shared/common/zmi/types.py:494
 msgid "Specified subtype name is already used!"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:529
+#: ./src/pyams_content/shared/common/zmi/types.py:505
 msgid "Subtype was correctly added."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:142
+#: ./src/pyams_content/shared/common/zmi/types.py:155
 msgid "Click to see subtypes"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/types.py:212
-msgid "Given data type doesn't exist!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:461
-msgid "Given data subtype doesn't exist!"
-msgstr ""
-
 #: ./src/pyams_content/shared/common/zmi/workflow.py:115
 #: ./src/pyams_content/shared/common/zmi/workflow.py:207
 #: ./src/pyams_content/shared/common/zmi/workflow.py:252
@@ -1777,8 +1761,8 @@
 #: ./src/pyams_content/shared/common/zmi/workflow.py:605
 #: ./src/pyams_content/shared/common/zmi/workflow.py:650
 #: ./src/pyams_content/shared/common/zmi/workflow.py:696
-#: ./src/pyams_content/shared/common/zmi/workflow.py:750
-#: ./src/pyams_content/shared/common/zmi/__init__.py:272
+#: ./src/pyams_content/shared/common/zmi/workflow.py:752
+#: ./src/pyams_content/shared/common/zmi/__init__.py:276
 #: ./src/pyams_content/shared/common/zmi/owner.py:74
 #: ./src/pyams_content/features/review/zmi/__init__.py:90
 msgid "Cancel"
@@ -1838,7 +1822,7 @@
 msgid "Create new version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:751
+#: ./src/pyams_content/shared/common/zmi/workflow.py:753
 #: ./src/pyams_content/workflow/__init__.py:561
 #: ./src/pyams_content/workflow/basic.py:248
 msgid "Delete version"
@@ -1854,11 +1838,11 @@
 msgid "A comment is required"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:774
+#: ./src/pyams_content/shared/common/zmi/workflow.py:776
 msgid "Delete content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/workflow.py:783
+#: ./src/pyams_content/shared/common/zmi/workflow.py:785
 msgid "Delete definitively"
 msgstr ""
 
@@ -1876,11 +1860,11 @@
 msgid "{state} {date}"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:262
+#: ./src/pyams_content/shared/common/zmi/__init__.py:266
 msgid "Duplicate content..."
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:281
+#: ./src/pyams_content/shared/common/zmi/__init__.py:285
 msgid "Duplicate content"
 msgstr ""
 
@@ -1888,58 +1872,58 @@
 msgid "This title can be modified afterwards"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:273
+#: ./src/pyams_content/shared/common/zmi/__init__.py:277
 msgid "Duplicate this content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:334
+#: ./src/pyams_content/shared/common/zmi/__init__.py:338
 #, python-format
 msgid "Clone created from version {source} of {oid} (in « {state} » state)"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/__init__.py:383
+#: ./src/pyams_content/shared/common/zmi/__init__.py:389
 msgid "Created or modified in this version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:51
+#: ./src/pyams_content/shared/common/zmi/summary.py:50
 msgid "Display content summary"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:75
+#: ./src/pyams_content/shared/common/zmi/summary.py:74
 msgid "Identity card"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:87
+#: ./src/pyams_content/shared/common/zmi/summary.py:86
 msgid "Requested action"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:128
+#: ./src/pyams_content/shared/common/zmi/summary.py:127
 msgid "Publication and retire dates"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:147
+#: ./src/pyams_content/shared/common/zmi/summary.py:146
 msgid "Current version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:177
+#: ./src/pyams_content/shared/common/zmi/summary.py:176
 msgid "Content history"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:118
+#: ./src/pyams_content/shared/common/zmi/summary.py:117
 msgid "Associated comment"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:159
+#: ./src/pyams_content/shared/common/zmi/summary.py:158
 #: ./src/pyams_content/shared/common/zmi/dashboard.py:198
 msgid "Version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:108
+#: ./src/pyams_content/shared/common/zmi/summary.py:107
 #, python-format
 msgid "{state} {date} by {principal}"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/summary.py:165
+#: ./src/pyams_content/shared/common/zmi/summary.py:164
 #, python-format
 msgid "{state} since {date}, by {principal}"
 msgstr ""
@@ -2316,16 +2300,16 @@
 msgid "Owners"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:176
+#: ./src/pyams_content/shared/common/zmi/security.py:178
 #, python-format
 msgid "Edit manager restrictions for « {0} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:213
+#: ./src/pyams_content/shared/common/zmi/security.py:216
 msgid "Apply contents restrictions"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/security.py:215
+#: ./src/pyams_content/shared/common/zmi/security.py:218
 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 "
@@ -2577,7 +2561,7 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/types.py:35
-#: ./src/pyams_content/shared/form/zmi/field.py:160
+#: ./src/pyams_content/shared/form/zmi/field.py:148
 msgid "Name"
 msgstr ""
 
@@ -2586,7 +2570,7 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/types.py:39
-#: ./src/pyams_content/shared/form/zmi/field.py:171
+#: ./src/pyams_content/shared/form/zmi/field.py:159
 #: ./src/pyams_content/shared/form/interfaces/__init__.py:61
 msgid "Label"
 msgstr ""
@@ -2673,19 +2657,19 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:57
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:165
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:174
 msgid "Managers"
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:58
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:166
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:175
 msgid ""
 "Managers can handle main operations in tool's workflow, like publish or "
 "retire contents"
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:63
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:171
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:180
 msgid "Contributors"
 msgstr ""
 
@@ -2693,136 +2677,147 @@
 msgid "Contributors are users which are allowed to create new contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:87
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:90
 msgid "Workflow name"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:88
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:91
 msgid "Name of workflow utility used to manage tool contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:112
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:115
+msgid "Content URL"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:116
+msgid ""
+"URL used to access this content; this is important for SEO and should include"
+" most important words describing content; spaces and underscores will be "
+"automatically replaced by hyphens"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:121
 msgid "Version creator"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:113
-msgid ""
-"Name of content's version creator. The creator of the first version is also "
-"it's owner."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:117
-msgid "First owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:118
-msgid "Name of content's first version owner"
-msgstr ""
-
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:122
-msgid "Version creation"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:125
-msgid "Version modifiers"
+msgid ""
+"Name of content's version creator. The creator of the first version is also "
+"it's owner."
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:126
+msgid "First owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:127
+msgid "Name of content's first version owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:131
+msgid "Version creation"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:134
+msgid "Version modifiers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:135
 msgid "List of principals who modified this content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:129
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:138
 msgid "Last modifier"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:130
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:139
 msgid "Last principal who modified this content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:133
-msgid "Last update"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:137
-msgid ""
-"The content's description is 'hidden' into HTML's page headers; but it can be"
-" seen, for example, in some search engines results as content's description"
-msgstr ""
-
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:142
-msgid "Keywords"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:143
-msgid "They will be included into HTML pages metadata"
+msgid "Last update"
 msgstr ""
 
 #: ./src/pyams_content/shared/common/interfaces/__init__.py:146
+msgid ""
+"The content's description is 'hidden' into HTML's page headers; but it can be"
+" seen, for example, in some search engines results as content's description"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:151
+msgid "Keywords"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:152
+msgid "They will be included into HTML pages metadata"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:155
 #: ./src/pyams_content/shared/site/zmi/folder.py:72
 #: ./src/pyams_content/shared/site/interfaces/__init__.py:56
 msgid "Notepad"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:147
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:156
 #: ./src/pyams_content/shared/site/zmi/folder.py:73
 #: ./src/pyams_content/shared/site/interfaces/__init__.py:57
 msgid "Internal information to be known about this content"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:158
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:167
 msgid "Content owner"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:159
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:168
 msgid ""
 "The owner is the creator of content's first version, except if it was "
 "transferred afterwards to another owner"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:172
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:181
 msgid ""
 "Contributors are users which are allowed to update this content in addition "
 "to it's owner"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:177
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:186
 msgid "Readers"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:178
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:187
 msgid ""
 "Readers are users which are asked to verify and comment contents before they "
 "are published"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:183
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:192
 msgid "Guests"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:184
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:193
 msgid ""
 "Guests are users which are allowed to view contents with restricted access"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:207
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:216
 msgid "Principal ID"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:212
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:221
 msgid "Restricted contents"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:213
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:222
 msgid ""
 "If 'yes', this manager will get restricted access to manage contents based on"
 " selected settings"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:218
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:227
 msgid "Selected owners"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:219
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:228
 msgid "Manager will have access to contents owned by these principals"
 msgstr ""
 
@@ -2882,11 +2877,11 @@
 msgid "List"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/properties.py:39
+#: ./src/pyams_content/shared/form/zmi/properties.py:41
 msgid "Main form settings"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/properties.py:64
+#: ./src/pyams_content/shared/form/zmi/properties.py:70
 msgid "Form handler settings"
 msgstr ""
 
@@ -2904,41 +2899,37 @@
 msgid "Form « {title} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:67
+#: ./src/pyams_content/shared/form/zmi/field.py:68
 msgid "Form fields..."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:129
-msgid "Switch field visibility"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:182
+#: ./src/pyams_content/shared/form/zmi/field.py:170
 #: ./src/pyams_content/shared/form/interfaces/__init__.py:56
 msgid "Field type"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:215
+#: ./src/pyams_content/shared/form/zmi/field.py:203
 msgid "Form fields list"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:251
-#: ./src/pyams_content/shared/form/zmi/field.py:262
+#: ./src/pyams_content/shared/form/zmi/field.py:226
+#: ./src/pyams_content/shared/form/zmi/field.py:237
 msgid "Add form field"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:308
+#: ./src/pyams_content/shared/form/zmi/field.py:285
 msgid "Edit form field properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:191
+#: ./src/pyams_content/shared/form/zmi/field.py:179
 msgid "-- unknown field type --"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:110
+#: ./src/pyams_content/shared/form/zmi/field.py:114
 msgid "No currently defined form field."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:287
+#: ./src/pyams_content/shared/form/zmi/field.py:262
 msgid "Specified name is already used!"
 msgstr ""
 
@@ -3092,7 +3083,7 @@
 msgid "News topic"
 msgstr ""
 
-#: ./src/pyams_content/shared/view/zmi/properties.py:38
+#: ./src/pyams_content/shared/view/zmi/properties.py:40
 msgid "Main view settings"
 msgstr ""
 
@@ -3114,11 +3105,11 @@
 msgid "View themes settings"
 msgstr ""
 
-#: ./src/pyams_content/shared/view/zmi/reference.py:54
+#: ./src/pyams_content/shared/view/zmi/reference.py:53
 msgid "References..."
 msgstr ""
 
-#: ./src/pyams_content/shared/view/zmi/reference.py:64
+#: ./src/pyams_content/shared/view/zmi/reference.py:63
 msgid "View internal references settings"
 msgstr ""
 
@@ -3260,20 +3251,20 @@
 msgid "no area defined"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:54
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:55
 msgid "Image map..."
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:65
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:66
 msgid "Add new image map"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:95
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:95
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:98
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:98
 msgid "Edit paragraph properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/properties.py:38
+#: ./src/pyams_content/shared/imagemap/zmi/properties.py:40
 msgid "Background image"
 msgstr ""
 
@@ -3303,24 +3294,28 @@
 msgid "Image map areas"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:136
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:140
 #: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:49
 msgid "Link target"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:109
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:113
 msgid "No currently defined image."
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:111
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:115
 msgid "No currently defined area."
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:180
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:175
+msgid "No provided object_name argument!"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:194
 msgid "Given area name doesn't exist!"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:176
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:186
 msgid "Bad query object_name parameter value!"
 msgstr ""
 
@@ -3332,7 +3327,7 @@
 msgid "Add new image area"
 msgstr ""
 
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:106
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:108
 msgid "Edit image map properties"
 msgstr ""
 
@@ -3384,12 +3379,12 @@
 
 #: ./src/pyams_content/shared/site/zmi/folder.py:68
 #: ./src/pyams_content/shared/site/zmi/__init__.py:63
-#: ./src/pyams_content/shared/site/zmi/link.py:68
+#: ./src/pyams_content/shared/site/zmi/link.py:67
 msgid "Parent"
 msgstr ""
 
 #: ./src/pyams_content/shared/site/zmi/folder.py:69
-#: ./src/pyams_content/shared/site/zmi/link.py:69
+#: ./src/pyams_content/shared/site/zmi/link.py:68
 msgid "Folder's parent"
 msgstr ""
 
@@ -3409,62 +3404,62 @@
 msgid "Topic's parent"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/link.py:59
+#: ./src/pyams_content/shared/site/zmi/link.py:58
 msgid "Rent content..."
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/link.py:78
+#: ./src/pyams_content/shared/site/zmi/link.py:77
 msgid "Rent existing content"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/link.py:140
+#: ./src/pyams_content/shared/site/zmi/link.py:141
 msgid "Edit content link properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:101
-#: ./src/pyams_content/shared/site/zmi/container.py:113
+#: ./src/pyams_content/shared/site/zmi/container.py:102
+#: ./src/pyams_content/shared/site/zmi/container.py:114
 #: ./src/pyams_content/shared/blog/zmi/manager.py:151
 #: ./src/pyams_content/shared/blog/zmi/manager.py:163
 msgid "Publication dates..."
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:124
-#: ./src/pyams_content/shared/blog/zmi/manager.py:174
+#: ./src/pyams_content/shared/site/zmi/container.py:127
+#: ./src/pyams_content/shared/blog/zmi/manager.py:176
 msgid "Update publication dates"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:173
-#: ./src/pyams_content/shared/site/zmi/container.py:183
-#: ./src/pyams_content/root/zmi/sites.py:67
+#: ./src/pyams_content/shared/site/zmi/container.py:172
+#: ./src/pyams_content/shared/site/zmi/container.py:182
+#: ./src/pyams_content/root/zmi/sites.py:68
 msgid "Site tree"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:250
-#: ./src/pyams_content/shared/site/zmi/container.py:148
+#: ./src/pyams_content/shared/site/zmi/container.py:301
+#: ./src/pyams_content/shared/site/zmi/container.py:151
 msgid "Visible element?"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:289
+#: ./src/pyams_content/shared/site/zmi/container.py:302
+msgid "Switch element visibility"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:363
 msgid "Folders and topics"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:409
+#: ./src/pyams_content/shared/site/zmi/container.py:483
 msgid "Delete site item"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:298
+#: ./src/pyams_content/shared/site/zmi/container.py:372
 msgid "Click to open/close all folders"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:314
+#: ./src/pyams_content/shared/site/zmi/container.py:388
 msgid "Click to show/hide inner folders"
 msgstr ""
 
-#: ./src/pyams_content/shared/site/zmi/container.py:577
-msgid "Given object name doesn't exist!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:516
+#: ./src/pyams_content/shared/site/zmi/container.py:258
 msgid "Can't reparent object to one of it's children. Reloading..."
 msgstr ""
 
@@ -3529,15 +3524,15 @@
 msgid "no URL defined"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:54
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:55
 msgid "Logos..."
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:65
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:66
 msgid "Add new logos paragraph"
 msgstr ""
 
-#: ./src/pyams_content/shared/logo/zmi/properties.py:38
+#: ./src/pyams_content/shared/logo/zmi/properties.py:40
 msgid "Main logo settings"
 msgstr ""
 
@@ -3606,7 +3601,7 @@
 msgid "Blog post"
 msgstr ""
 
-#: ./src/pyams_content/profile/zmi/__init__.py:40
+#: ./src/pyams_content/profile/zmi/__init__.py:42
 msgid "Admin. profile"
 msgstr ""
 
@@ -3626,7 +3621,7 @@
 msgid "Default length used for inner tables and dashboards"
 msgstr ""
 
-#: ./src/pyams_content/root/zmi/sites.py:77
+#: ./src/pyams_content/root/zmi/sites.py:78
 msgid "Blogs and shared sites"
 msgstr ""
 
@@ -3642,11 +3637,7 @@
 msgid "Delete shared site"
 msgstr ""
 
-#: ./src/pyams_content/root/zmi/sites.py:205
-msgid "Given site name doesn't exist!"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/search.py:148
+#: ./src/pyams_content/root/zmi/search.py:155
 msgid "Content types"
 msgstr ""
 
@@ -4016,6 +4007,10 @@
 msgstr ""
 
 #: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:87
+msgid "Shared tools"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:108
 msgid "My roles"
 msgstr ""
 
@@ -4047,24 +4042,24 @@
 msgid "Contents"
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/table.py:81
+#: ./src/pyams_content/reference/zmi/table.py:83
 msgid "Table contents"
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/table.py:122
-#: ./src/pyams_content/reference/zmi/__init__.py:64
+#: ./src/pyams_content/reference/zmi/table.py:129
+#: ./src/pyams_content/reference/zmi/__init__.py:69
 msgid "References tables"
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/table.py:136
+#: ./src/pyams_content/reference/zmi/table.py:143
 msgid "Properties..."
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/table.py:147
+#: ./src/pyams_content/reference/zmi/table.py:156
 msgid "Edit table properties"
 msgstr ""
 
-#: ./src/pyams_content/reference/zmi/__init__.py:46
+#: ./src/pyams_content/reference/zmi/__init__.py:51
 msgid "References"
 msgstr ""
 
@@ -4104,12 +4099,12 @@
 msgid "List of selected pictograms which will be available to shared contents"
 msgstr ""
 
-#: ./src/pyams_content/features/renderer/zmi/__init__.py:103
+#: ./src/pyams_content/features/renderer/zmi/__init__.py:105
 #: ./src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
 msgid "Edit renderer properties"
 msgstr ""
 
-#: ./src/pyams_content/features/renderer/zmi/__init__.py:132
+#: ./src/pyams_content/features/renderer/zmi/__init__.py:134
 msgid "Hidden content"
 msgstr ""
 
@@ -4195,7 +4190,7 @@
 msgstr ""
 
 #: ./src/pyams_content/features/alert/interfaces.py:69
-#: ./src/pyams_content/features/alert/zmi/container.py:188
+#: ./src/pyams_content/features/alert/zmi/container.py:170
 msgid "Message"
 msgstr ""
 
@@ -4235,15 +4230,15 @@
 "set to 0 to always display the alert"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/__init__.py:45
+#: ./src/pyams_content/features/alert/zmi/__init__.py:46
 msgid "Add alert"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/__init__.py:55
+#: ./src/pyams_content/features/alert/zmi/__init__.py:56
 msgid "Add new alert"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/__init__.py:82
+#: ./src/pyams_content/features/alert/zmi/__init__.py:85
 msgid "Edit alert properties"
 msgstr ""
 
@@ -4251,22 +4246,14 @@
 msgid "Alerts"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/container.py:128
-msgid "Switch alert visibility"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:234
+#: ./src/pyams_content/features/alert/zmi/container.py:192
 msgid "Alert list"
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/container.py:93
+#: ./src/pyams_content/features/alert/zmi/container.py:91
 msgid "No currently defined alert."
 msgstr ""
 
-#: ./src/pyams_content/features/alert/zmi/container.py:223
-msgid "Given alert name doesn't exist!"
-msgstr ""
-
 #: ./src/pyams_content/features/review/__init__.py:186
 #, python-format
 msgid "Request comment: {comment}"
@@ -4326,11 +4313,11 @@
 msgid "Content review request"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:168
+#: ./src/pyams_content/features/review/zmi/__init__.py:172
 msgid "Comments"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:188
+#: ./src/pyams_content/features/review/zmi/__init__.py:192
 msgid "Review comments"
 msgstr ""
 
@@ -4365,15 +4352,15 @@
 msgid "Ask for content review"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:150
+#: ./src/pyams_content/features/review/zmi/__init__.py:153
 msgid "Request successful. No new notification have been sent"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:261
+#: ./src/pyams_content/features/review/zmi/__init__.py:266
 msgid "Message is mandatory!"
 msgstr ""
 
-#: ./src/pyams_content/features/review/zmi/__init__.py:140
+#: ./src/pyams_content/features/review/zmi/__init__.py:141
 #, python-format
 msgid "Request successful. {count} new notification(s) have been sent"
 msgstr ""
--- a/src/pyams_content/shared/common/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/shared/common/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -123,9 +123,11 @@
     guests = RolePrincipalsFieldProperty(IWfSharedContentRoles['guests'])
 
     content_type = None
+    content_name = None
 
     title = FieldProperty(IWfSharedContent['title'])
     short_name = FieldProperty(IWfSharedContent['short_name'])
+    content_url = FieldProperty(IWfSharedContent['content_url'])
     creator = FieldProperty(IWfSharedContent['creator'])
     modifiers = FieldProperty(IWfSharedContent['modifiers'])
     last_modifier = FieldProperty(IWfSharedContent['last_modifier'])
--- a/src/pyams_content/shared/common/interfaces/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/shared/common/interfaces/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -112,6 +112,12 @@
     content_type = Attribute("Content data type")
     content_name = Attribute("Content name")
 
+    content_url = TextLine(title=_("Content URL"),
+                           description=_("URL used to access this content; this is important for SEO and "
+                                         "should include most important words describing content; spaces and "
+                                         "underscores will be automatically replaced by hyphens"),
+                           required=True)
+
     creator = Principal(title=_("Version creator"),
                         description=_("Name of content's version creator. "
                                       "The creator of the first version is also it's owner."),
--- a/src/pyams_content/shared/common/zmi/__init__.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/__init__.py	Fri Apr 27 12:00:07 2018 +0200
@@ -24,7 +24,7 @@
 from pyams_content.shared.common.interfaces import IWfSharedContent, ISharedContent, IBaseSharedTool, \
     IManagerRestrictions
 from pyams_form.interfaces.form import IFormContextPermissionChecker, IWidgetsPrefixViewletsManager
-from pyams_i18n.interfaces import II18n, II18nManager
+from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
 from pyams_sequence.interfaces import ISequentialIdInfo
 from pyams_skin.interfaces import IContentTitle
 from pyams_skin.interfaces.container import ITable, ITableElementEditor
@@ -50,7 +50,7 @@
 from pyams_utils.registry import get_utility
 from pyams_utils.request import check_request
 from pyams_utils.traversing import get_parent
-from pyams_utils.url import absolute_url
+from pyams_utils.url import absolute_url, generate_url
 from pyams_viewlet.viewlet import viewlet_config, Viewlet
 from pyams_workflow.versions import WorkflowHistoryItem
 from pyams_zmi.form import AdminDialogAddForm
@@ -95,6 +95,8 @@
         content.creator = self.request.principal.id
         content.owner = self.request.principal.id
         content.short_name = content.title.copy()
+        lang = get_utility(INegotiator).server_language
+        content.content_url = generate_url(content.title.get(lang, ''))
         # init content languages
         languages = II18nManager(self.context).languages
         if languages:
@@ -110,7 +112,7 @@
         IWorkflowInfo(wf_content).fire_transition('init', comment=wf_content.notepad)
 
     def nextURL(self):
-        return absolute_url(self.context, self.request, '{0}/++versions++/1/admin'.format(self.__uuid))
+        return absolute_url(self.context, self.request, '{0}/++versions++/1/admin#properties.html'.format(self.__uuid))
 
 
 class SharedContentAJAXAddForm(AJAXAddForm):
--- a/src/pyams_content/shared/common/zmi/properties.py	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/properties.py	Fri Apr 27 12:00:07 2018 +0200
@@ -9,6 +9,11 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyramid.events import subscriber
+from z3c.form.interfaces import IDataExtractedEvent, HIDDEN_MODE
+
+from pyams_skin.event import get_json_widget_refresh_event
+from pyams_utils.url import generate_url
 
 __docformat__ = 'restructuredtext'
 
@@ -77,33 +82,50 @@
 
     legend = _("Content properties")
 
-    fields = field.Fields(IWfSharedContent).select('title', 'short_name', 'description', 'keywords', 'notepad')
+    fields = field.Fields(IWfSharedContent).select('title', 'short_name', 'content_url',
+                                                   'description', 'notepad')
     fields['title'].widgetFactory = I18nSEOTextLineFieldWidget
 
     ajax_handler = 'properties.json'
 
     def updateWidgets(self, prefix=None):
         super(SharedContentPropertiesEditForm, self).updateWidgets(prefix)
+        if 'short_name' in self.widgets:
+            self.widgets['short_name'].set_mode(HIDDEN_MODE)
         if 'description' in self.widgets:
             self.widgets['description'].widget_css_class = 'textarea'
         if 'notepad' in self.widgets:
             self.widgets['notepad'].widget_css_class = 'textarea'
 
 
+@subscriber(IDataExtractedEvent, form_selector=SharedContentPropertiesEditForm)
+def handle_content_properties_data_extraction(event):
+    """Automatically set short_name as title"""
+    data = event.data
+    data['short_name'] = data['title'].copy()
+    data['content_url'] = generate_url(data['content_url'])
+
+
 @view_config(name='properties.json', context=IWfSharedContent, request_type=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
 class SharedContentPropertiesAJAXEditForm(AJAXEditForm, SharedContentPropertiesEditForm):
     """Shared content properties edit form, JSON renderer"""
 
     def get_ajax_output(self, changes):
-        wf_changes = changes.get(IBaseContent, ())
-        if 'title' in wf_changes:
+        updated = changes.get(IBaseContent, ())
+        if 'title' in updated:
             return {
                 'status': 'reload',
                 'message': self.request.localizer.translate(self.successMessage)
             }
         else:
-            return super(SharedContentPropertiesAJAXEditForm, self).get_ajax_output(changes)
+            output = super(SharedContentPropertiesAJAXEditForm, self).get_ajax_output(changes)
+            updated = changes.get(IWfSharedContent, ())
+            if 'content_url' in updated:
+                output.setdefault('events', []).append(
+                    get_json_widget_refresh_event(self.context, self.request,
+                                                  SharedContentPropertiesEditForm, 'content_url'))
+            return output
 
 
 @adapter_config(context=(IWfSharedContent, IAdminLayer, SharedContentPropertiesEditForm), provides=IPageHeader)
--- a/src/pyams_content/skin/resources/js/pyams_content.js	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.js	Fri Apr 27 12:00:07 2018 +0200
@@ -229,20 +229,6 @@
 		},
 
 		/**
-		 * Illustrations management
-		 */
-		illustration: {
-
-			addIllustration: function() {
-				var source = $(this);
-				var group = source.parents('.btn-group');
-				var legend = group.siblings('legend.switcher');
-				$('i.fa-plus', legend).click();
-				source.hide();
-			}
-		},
-
-		/**
 		 * Paragraphs management
 		 */
 		paragraphs: {
--- a/src/pyams_content/skin/resources/js/pyams_content.min.js	Fri Apr 20 16:52:36 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.min.js	Fri Apr 27 12:00:07 2018 +0200
@@ -1,1 +1,1 @@
-!function(t,e){"use strict";var a=e.MyAMS,i={widget:{treeview:{selectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(a.id)},unselectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(null)}}},TinyMCE:{initEditor:function(t){return tinyMCE.addI18n("fr",{"Link list":"Liste de liens","Toggle h3 header":"En-tête H3","Toggle h4 header":"En-tête H4","Insert internal link":"Insérer un lien interne","Link title":"Texte du lien","Internal number":"N° interne"}),tinymce.PluginManager.add("internal_links",function(t,e){t.addButton("internal_links",{icon:"cloud-check",tooltip:"Insert internal link",image:"/--static--/pyams_content/img/internal-link.png",onclick:function(){t.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"title",label:"Link title",value:t.selection.getContent()},{type:"textbox",name:"oid",label:"Internal number"}],onsubmit:function(e){t.insertContent('<a href="oid://'+e.data.oid+'">'+e.data.title+"</a>")}})}})}),tinyMCE.PluginManager.add("headers",function(t,e){["h3","h4"].forEach(function(e){t.addButton("header-"+e,{tooltip:"Toggle "+e+" header",text:e.toUpperCase(),onClick:function(){t.execCommand("mceToggleFormat",!1,e)},onPostRender:function(){var a=this,i=function(){t.formatter.formatChanged(e,function(t){a.active(t)})};t.formatter?i():t.on("init",i)}})})}),t.image_list=i.TinyMCE.getImagesList,t.link_list=i.TinyMCE.getLinksList,t.style_formats=[{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],t.plugins+=" internal_links headers",t.toolbar1&&(t.toolbar1="undo redo | header-h3 header-h4 styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"),t.toolbar2&&(t.toolbar2="forecolor backcolor | charmap internal_links link | fullscreen preview print | code"),t},getImagesList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-images-list.json",{},e)}},getLinksList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-links-list.json",{},e)}}},galleries:{updateMediaTitle:function(e){t('img[id="'+e.media_id+'"]').attr("original-title",e.title)},switchMediaVisibility:function(e){return function(){var e=t(this),i=e.parents(".media"),n=i.parents(".gallery");a.ajax.post(n.data("ams-location")+"/set-media-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){a.visible?(t("i",e).attr("class","fa fa-fw fa-eye"),e.parents(".btn-group").siblings("a.fancyimg").removeClass("not-visible")):(t("i",e).attr("class","fa fa-fw fa-eye-slash text-danger"),e.parents(".btn-group").siblings("a.fancyimg").addClass("not-visible"))})}},setOrder:function(e,i){if(!i||!i.item.hasClass("already-dropped")){var n=i.item.parents(".gallery"),s=t(".media",n).listattr("data-ams-element-name");a.ajax.post(n.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(s)})}},removeMedia:function(e){return function(){var e=t(this);a.skin.bigBox({title:a.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i>&nbsp; '+a.i18n.DELETE_WARNING,buttons:a.i18n.BTN_OK_CANCEL},function(t){if(t===a.i18n.BTN_OK){var i=e.parents(".gallery").data("ams-location"),n=e.parents(".media"),s=n.data("ams-element-name");a.ajax.post(i+"/delete-element.json",{object_name:s},function(t,e){n.remove()})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},illustration:{addIllustration:function(){var e=t(this),a=e.parents(".btn-group").siblings("legend.switcher");t("i.fa-plus",a).click(),e.hide()}},paragraphs:{preReload:function(){i.paragraphs.switched=t("i.switch.fa-minus-square-o","#paragraphs_list").parents("tr").listattr("id")},postReload:function(){t(i.paragraphs.switched).each(function(){t("i.switch.fa-plus-square-o",'[id="'+this+'"]').parents("div").first().click()}),delete i.paragraphs.switched},refreshParagraph:function(e){var a=t('table[id="paragraphs_list"]'),i=t('tr[data-ams-element-name="'+e.object_name+'"]',a);t("span.title",i).html(e.title||" - - - - - - - -")},switchEditor:function(e){var i=t(this),n=t("i.switch",i),s=i.parents("td"),r=t(".editor",s),o=i.parents("tr");if(n.hasClass("fa-plus-square-o")){var l=o.parents("table");r.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),a.ajax.post(l.data("ams-location")+"/get-paragraph-editor.json",{object_name:o.data("ams-element-name")},function(t){r.html(t),t&&(a.initContent(r),n.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),o.data("ams-disabled-handlers",!0))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),o.removeData("ams-disabled-handlers")},switchAllEditors:function(e){var i=t(this),n=t("i",i),s=i.parents("table");n.hasClass("fa-plus-square-o")?(n.removeClass("fa-plus-square-o").addClass("fa-cog fa-spin"),a.ajax.post(s.data("ams-location")+"/get-paragraphs-editors.json",{},function(e){for(var i in e)if(e.hasOwnProperty(i)){var r=t('tr[data-ams-element-name="'+i+'"]',s),o=t(".editor",r);o.is(":empty")&&o.html(e[i]),t(".fa-plus-square-o",r).removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),r.data("ams-disabled-handlers",!0)}t("i.fa-plus-square-o",t("tbody",s)).exists()||n.removeClass("fa-cog fa-spin").addClass("fa-minus-square-o"),a.initContent(s)})):(t(".editor",s).each(function(){a.skin.cleanContainer(t(this)),t(this).empty()}),t(".fa-minus-square-o",s).removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),t("tr",s).removeData("ams-disabled-handlers"))},updateToolbar:function(e){var i=t('table[id="paragraphs_list"]'),n=t('tr[data-ams-element-name="'+e.object_name+'"]',i),s=t(".title-toolbar",n);s.replaceWith(e.toolbar_tag),s=t(".title-toolbar",n),a.initContent(s)},updateMarkers:function(e){var i=t('table[id="paragraphs_list"]'),n=t('tr[data-ams-element-name="'+e.object_name+'"]',i),s=t(".title-toolbar",n),r=t("DIV.action."+e.marker_type,s);r.exists()?r.replaceWith(e.marker_tag):t(e.marker_tag).appendTo(s),e.marker_tag&&(r=t("DIV.action."+e.marker_type,s),a.initContent(r)),a.helpers.sort(s,"weight")}},pictograms:{initManagerSelection:function(){var e=t(this),a=t('input[type="hidden"]',t(".selected-pictograms",e)).listattr("value");return{selected:JSON.stringify(a)}},switchPictogram:function(){var e=t(this),a=e.parents(".pictograms"),i=a.parents(".pictograms-manager");a.hasClass("available-pictograms")?t(".selected-pictograms",i).append(e):t(".available-pictograms",i).append(e)}},themes:{initExtracts:function(e){var i=t('select[name="form.widgets.thesaurus_name:list"]',e).val(),n=t('select[name="form.widgets.extract_name:list"]',e),s=n.val();i&&a.jsonrpc.post("getExtracts",{thesaurus_name:i},{url:"/api/thesaurus/json"},function(e){n.empty(),t(e.result).each(function(){t("<option></option>").attr("value",this.id).attr("selected",this.id===s).text(this.text).appendTo(n)})}),n.attr("data-ams-events-handlers",'{"select2-open": "PyAMS_content.themes.getExtracts"}')},getExtracts:function(e){var i=t(e.currentTarget).parents("form"),n=t('select[name="form.widgets.thesaurus_name:list"]',i).val();n&&a.jsonrpc.post("getExtracts",{thesaurus_name:n},{url:"/api/thesaurus/json"},function(e){var a=t('select[name="form.widgets.extract_name:list"]',i).data("select2");a.results.empty(),a.opts.populateResults.call(a,a.results,e.result,{term:""})})}},fields:{refreshField:function(e){var a=t('table[id="form_fields_list"]'),i=t('tr[data-ams-element-name="'+e.object_name+'"]',a);t("td:nth-child(4)",i).html(e.title)}},imgmap:{init:function(){var e=t(this);a.ajax.check(t.fn.canvasAreaDraw,"/--static--/pyams_content/js/jquery-canvasAreaDraw"+a.devext+".js",function(){e.canvasAreaDraw({imageUrl:e.data("ams-image-url")})})},initPreview:function(){var e=t(this);a.ajax.check(t.fn.mapster,"/--static--/pyams_content/js/jquery-imagemapster-1.2.10"+a.devext+".js",function(){e.mapster({fillColor:"ff0000",fillOpacity:.35,selected:!0,highlight:!0,staticState:!0})})}},types:{switchSubtypes:function(e){var i=t(this),n=t("i.switch",i),s=i.parents("td"),r=t(".subtypes",s),o=i.parents("tr");if(n.hasClass("fa-plus-square-o")){var l=o.parents("table");r.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),a.ajax.post(l.data("ams-location")+"/get-subtypes-table.json",{object_name:o.data("ams-element-name")},function(t){r.html(t),t&&(a.initContent(r),n.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o")}},site:{switchVisibility:function(){return function(){var e=t(this),i=e.parents("tr").first();a.ajax.post(i.data("ams-location")+"/switch-content-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){var n="fa-eye";a.visible||(n+="-slash"),a.published||(n+=" text-danger"),t("i",e).attr("class","fa fa-fw "+n)})}}},review:{timer:null,timer_duration:{general:3e4,chat:5e3},initComments:function(e){var n=t(".chat-body",e);n.animate({scrollTop:n[0].scrollHeight},1e3),clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.chat),a.skin.registerCleanCallback(i.review.cleanCommentsCallback)},cleanCommentsCallback:function(){clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)},updateComments:function(){var e,i=t(".badge",'nav a[href="#review-comments.html"]'),n=t(".chat-body",".widget-body");e=n.exists()?t(".message",n).length:parseInt(i.text()),a.ajax.post("get-last-review-comments.json",{count:e},function(a){n.exists()&&i.removeClass("bg-color-danger").addClass("bg-color-info"),e!==a.count&&(i.text(a.count).removeClass("hidden"),n.exists()&&(t(".messages",n).append(a.content),n.animate({scrollTop:n[0].scrollHeight},1e3)),n.exists()||i.removeClass("bg-color-info").addClass("bg-color-danger").animate({padding:"3px 12px 2px","margin-right":"9px"},"slow",function(){t(this).animate({padding:"3px 6px 2px","margin-right":"15px"},"slow")}))})},initCommentData:function(e){var a=t(".chat-body",".widget-body");return{count:t(".message",a).length}},addCommentAction:function(){return function(){t('textarea[name="comment"]').focus()}},addCommentCallback:function(e){var a=t(this),i=a.parents(".widget-body");t(".messages",i).append(e.content),t('textarea[name="comment"]',a).val("");var n=t(".chat-body",i);n.animate({scrollTop:n[0].scrollHeight},1e3),t(".badge",'nav a[href="#review-comments.html"]').text(e.count).removeClass("hidden")}},profile:{switchFavorite:function(){var e=t(this),i=e.data("sequence-oid");a.ajax.post("switch-user-favorite.json",{oid:i},function(t,a){t.favorite?e.removeClass("fa-star-o").addClass("fa-star"):e.removeClass("fa-star").addClass("fa-star-o")})}}};t(".badge",'nav a[href="#review-comments.html"]').exists()&&(i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)),e.PyAMS_content=i}(jQuery,this);
+!function(t,e){"use strict";var a=e.MyAMS,i={widget:{treeview:{selectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(a.id)},unselectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(null)}}},TinyMCE:{initEditor:function(t){return tinyMCE.addI18n("fr",{"Link list":"Liste de liens","Toggle h3 header":"En-tête H3","Toggle h4 header":"En-tête H4","Insert internal link":"Insérer un lien interne","Link title":"Texte à afficher","Internal number":"N° interne"}),tinymce.PluginManager.add("internal_links",function(t,e){t.addButton("internal_links",{icon:"cloud-check",tooltip:"Insert internal link",image:"/--static--/pyams_content/img/internal-link.png",onclick:function(){t.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"oid",label:"Internal number"},{type:"textbox",name:"title",label:"Link title",value:t.selection.getContent()}],onsubmit:function(e){t.insertContent('<a href="oid://'+e.data.oid+'">'+e.data.title+"</a>")}})}})}),tinyMCE.PluginManager.add("headers",function(t,e){["h3","h4"].forEach(function(e){t.addButton("header-"+e,{tooltip:"Toggle "+e+" header",text:e.toUpperCase(),onClick:function(){t.execCommand("mceToggleFormat",!1,e)},onPostRender:function(){var a=this,i=function(){t.formatter.formatChanged(e,function(t){a.active(t)})};t.formatter?i():t.on("init",i)}})})}),t.image_list=i.TinyMCE.getImagesList,t.link_list=i.TinyMCE.getLinksList,t.style_formats=[{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],t.plugins+=" internal_links headers",t.toolbar1&&(t.toolbar1="undo redo | header-h3 header-h4 styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent"),t.toolbar2&&(t.toolbar2="forecolor backcolor | charmap internal_links link | fullscreen preview print | code"),t},getImagesList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-images-list.json",{},e)}},getLinksList:function(e){var i=t(document.activeElement).parents("form");if(i.exists()){var n=i.attr("data-ams-form-handler")||i.attr("action"),s=n.substr(0,n.lastIndexOf("/")+1);return a.ajax.post(s+"get-links-list.json",{},e)}}},galleries:{updateMediaTitle:function(e){t('img[id="'+e.media_id+'"]').attr("original-title",e.title)},switchMediaVisibility:function(e){return function(){var e=t(this),i=e.parents(".media"),n=i.parents(".gallery");a.ajax.post(n.data("ams-location")+"/set-media-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){a.visible?(t("i",e).attr("class","fa fa-fw fa-eye"),e.parents(".btn-group").siblings("a.fancyimg").removeClass("not-visible")):(t("i",e).attr("class","fa fa-fw fa-eye-slash text-danger"),e.parents(".btn-group").siblings("a.fancyimg").addClass("not-visible"))})}},setOrder:function(e,i){if(!i||!i.item.hasClass("already-dropped")){var n=i.item.parents(".gallery"),s=t(".media",n).listattr("data-ams-element-name");a.ajax.post(n.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(s)})}},removeMedia:function(e){return function(){var e=t(this);a.skin.bigBox({title:a.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i>&nbsp; '+a.i18n.DELETE_WARNING,buttons:a.i18n.BTN_OK_CANCEL},function(t){if(t===a.i18n.BTN_OK){var i=e.parents(".gallery").data("ams-location"),n=e.parents(".media"),s=n.data("ams-element-name");a.ajax.post(i+"/delete-element.json",{object_name:s},function(t,e){n.remove()})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},paragraphs:{preReload:function(){i.paragraphs.switched=t("i.switch.fa-minus-square-o","#paragraphs_list").parents("tr").listattr("id")},postReload:function(){t(i.paragraphs.switched).each(function(){t("i.switch.fa-plus-square-o",'[id="'+this+'"]').parents("div").first().click()}),delete i.paragraphs.switched},refreshParagraph:function(e){var a=t('tr[id="'+e.object_id+'"]');t("span.title",a).html(e.title||" - - - - - - - -")},switchEditor:function(e){var i=t(this),n=t("i.switch",i),s=i.parents("td"),r=t(".editor",s),o=i.parents("tr");if(n.hasClass("fa-plus-square-o")){var l=o.parents("table");r.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),a.ajax.post(l.data("ams-location")+"/get-paragraph-editor.json",{object_name:o.data("ams-element-name")},function(t){r.html(t),t&&(a.initContent(r),n.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),o.data("ams-disabled-handlers",!0))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),o.removeData("ams-disabled-handlers")},switchAllEditors:function(e){var i=t(this),n=t("i",i),s=i.parents("table");n.hasClass("fa-plus-square-o")?(n.removeClass("fa-plus-square-o").addClass("fa-cog fa-spin"),a.ajax.post(s.data("ams-location")+"/get-paragraphs-editors.json",{},function(e){for(var i in e)if(e.hasOwnProperty(i)){var r=t('tr[data-ams-element-name="'+i+'"]',s),o=t(".editor",r);o.is(":empty")&&o.html(e[i]),t(".fa-plus-square-o",r).removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),r.data("ams-disabled-handlers",!0)}t("i.fa-plus-square-o",t("tbody",s)).exists()||n.removeClass("fa-cog fa-spin").addClass("fa-minus-square-o"),a.initContent(s)})):(t(".editor",s).each(function(){a.skin.cleanContainer(t(this)),t(this).empty()}),t(".fa-minus-square-o",s).removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),t("tr",s).removeData("ams-disabled-handlers"))},updateToolbar:function(e){var i=t('tr[id="'+e.object_id+'"]'),n=t(".title-toolbar",i);n.replaceWith(e.toolbar_tag),n=t(".title-toolbar",i),a.initContent(n)},updateMarkers:function(e){var i=t('tr[id="'+e.object_id+'"]'),n=t(".title-toolbar",i),s=t("DIV.action."+e.marker_type,n);s.exists()?s.replaceWith(e.marker_tag):t(e.marker_tag).appendTo(n),e.marker_tag&&(s=t("DIV.action."+e.marker_type,n),a.initContent(s)),a.helpers.sort(n,"weight")}},pictograms:{initManagerSelection:function(){var e=t(this),a=t('input[type="hidden"]',t(".selected-pictograms",e)).listattr("value");return{selected:JSON.stringify(a)}},switchPictogram:function(){var e=t(this),a=e.parents(".pictograms"),i=a.parents(".pictograms-manager");a.hasClass("available-pictograms")?t(".selected-pictograms",i).append(e):t(".available-pictograms",i).append(e)}},themes:{initExtracts:function(e){var i=t('select[name="form.widgets.thesaurus_name:list"]',e).val(),n=t('select[name="form.widgets.extract_name:list"]',e),s=n.val();i&&a.jsonrpc.post("getExtracts",{thesaurus_name:i},{url:"/api/thesaurus/json"},function(e){n.empty(),t(e.result).each(function(){t("<option></option>").attr("value",this.id).attr("selected",this.id===s).text(this.text).appendTo(n)})}),n.attr("data-ams-events-handlers",'{"select2-open": "PyAMS_content.themes.getExtracts"}')},getExtracts:function(e){var i=t(e.currentTarget).parents("form"),n=t('select[name="form.widgets.thesaurus_name:list"]',i).val();n&&a.jsonrpc.post("getExtracts",{thesaurus_name:n},{url:"/api/thesaurus/json"},function(e){var a=t('select[name="form.widgets.extract_name:list"]',i).data("select2");a.results.empty(),a.opts.populateResults.call(a,a.results,e.result,{term:""})})}},fields:{refreshField:function(e){var a=t('table[id="form_fields_list"]'),i=t('tr[data-ams-element-name="'+e.object_name+'"]',a);t("td:nth-child(4)",i).html(e.title)}},imgmap:{init:function(){var e=t(this);a.ajax.check(t.fn.canvasAreaDraw,"/--static--/pyams_content/js/jquery-canvasAreaDraw"+a.devext+".js",function(){e.canvasAreaDraw({imageUrl:e.data("ams-image-url")})})},initPreview:function(){var e=t(this);a.ajax.check(t.fn.mapster,"/--static--/pyams_content/js/jquery-imagemapster-1.2.10"+a.devext+".js",function(){e.mapster({fillColor:"ff0000",fillOpacity:.35,selected:!0,highlight:!0,staticState:!0})})}},types:{switchSubtypes:function(e){var i=t(this),n=t("i.switch",i),s=i.parents("td"),r=t(".subtypes",s),o=i.parents("tr");if(n.hasClass("fa-plus-square-o")){var l=o.parents("table");r.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),a.ajax.post(l.data("ams-location")+"/get-subtypes-table.json",{object_name:o.data("ams-element-name")},function(t){r.html(t),t&&(a.initContent(r),n.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o")}},site:{switchVisibility:function(){return function(){var e=t(this),i=e.parents("tr").first();a.ajax.post(i.data("ams-location")+"/switch-content-visibility.json",{object_name:i.data("ams-element-name")},function(a,i){var n="fa-eye";a.visible||(n+="-slash"),a.published||(n+=" text-danger"),t("i",e).attr("class","fa fa-fw "+n)})}}},review:{timer:null,timer_duration:{general:3e4,chat:5e3},initComments:function(e){var n=t(".chat-body",e);n.animate({scrollTop:n[0].scrollHeight},1e3),clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.chat),a.skin.registerCleanCallback(i.review.cleanCommentsCallback)},cleanCommentsCallback:function(){clearInterval(i.review.timer),i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)},updateComments:function(){var e,i=t(".badge",'nav a[href="#review-comments.html"]'),n=t(".chat-body",".widget-body");e=n.exists()?t(".message",n).length:parseInt(i.text()),a.ajax.post("get-last-review-comments.json",{count:e},function(a){n.exists()&&i.removeClass("bg-color-danger").addClass("bg-color-info"),e!==a.count&&(i.text(a.count).removeClass("hidden"),n.exists()&&(t(".messages",n).append(a.content),n.animate({scrollTop:n[0].scrollHeight},1e3)),n.exists()||i.removeClass("bg-color-info").addClass("bg-color-danger").animate({padding:"3px 12px 2px","margin-right":"9px"},"slow",function(){t(this).animate({padding:"3px 6px 2px","margin-right":"15px"},"slow")}))})},initCommentData:function(e){var a=t(".chat-body",".widget-body");return{count:t(".message",a).length}},addCommentAction:function(){return function(){t('textarea[name="comment"]').focus()}},addCommentCallback:function(e){var a=t(this),i=a.parents(".widget-body");t(".messages",i).append(e.content),t('textarea[name="comment"]',a).val("");var n=t(".chat-body",i);n.animate({scrollTop:n[0].scrollHeight},1e3),t(".badge",'nav a[href="#review-comments.html"]').text(e.count).removeClass("hidden")}},profile:{switchFavorite:function(){var e=t(this),i=e.data("sequence-oid");a.ajax.post("switch-user-favorite.json",{oid:i},function(t,a){t.favorite?e.removeClass("fa-star-o").addClass("fa-star"):e.removeClass("fa-star").addClass("fa-star-o")})}}};t(".badge",'nav a[href="#review-comments.html"]').exists()&&(i.review.timer=setInterval(i.review.updateComments,i.review.timer_duration.general)),e.PyAMS_content=i}(jQuery,this);