Merge branch dev-dc
authorThierry Florac <tflorac@ulthar.net>
Wed, 05 Sep 2018 09:23:52 +0200
changeset 127 79f37cf0ded8
parent 124 62632a9571d5 (current diff)
parent 126 bac52cf36b15 (diff)
child 128 102189883637
Merge branch dev-dc
src/pyams_default_theme/component/paragraph/frame.py
src/pyams_default_theme/component/paragraph/interfaces/frame.py
src/pyams_default_theme/component/paragraph/zmi/frame.py
src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo
src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po
src/pyams_default_theme/locales/pyams_default_theme.pot
--- a/src/pyams_default_theme/component/paragraph/frame.py	Mon Sep 03 16:07:19 2018 +0200
+++ b/src/pyams_default_theme/component/paragraph/frame.py	Wed Sep 05 09:23:52 2018 +0200
@@ -21,8 +21,10 @@
 from pyams_content.component.illustration.interfaces import IIllustration
 from pyams_content.component.paragraph.interfaces.frame import IFrameParagraph
 from pyams_content.features.renderer.interfaces import IContentRenderer
+from pyams_content.reference.pictograms.interfaces import IPictogramTable
 from pyams_default_theme.component.paragraph.interfaces.frame import IFrameParagraphRendererSettings, \
-    ILateralFrameParagraphRendererSettings, IDefaultFrameParagraphRendererSettings
+    ILateralFrameParagraphRendererSettings, IDefaultFrameParagraphRendererSettings, ILeftFrameParagraphRendererSettings, \
+    IRightFrameParagraphRendererSettings
 from pyams_i18n.interfaces import II18n
 from pyams_skin.layer import IPyAMSLayer
 
@@ -30,8 +32,10 @@
 from pyams_content.features.renderer.skin import BaseContentRenderer
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config, get_annotation_adapter
+from pyams_utils.registry import query_utility
+from pyams_utils.zodb import volatile_property
 from zope.interface import implementer
-from zope.location import locate, Location
+from zope.location import Location
 from zope.schema.fieldproperty import FieldProperty
 
 from pyams_default_theme import _
@@ -42,6 +46,8 @@
 #
 
 FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY = 'pyams_content.frame.renderer:default'
+LEFT_FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY = 'pyams_content.frame.renderer:lateral:left'
+RIGHT_FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY = 'pyams_content.frame.renderer:lateral:right'
 
 
 @implementer(IFrameParagraphRendererSettings)
@@ -50,6 +56,7 @@
 
     display_illustration = FieldProperty(IFrameParagraphRendererSettings['display_illustration'])
     display_associations = FieldProperty(IFrameParagraphRendererSettings['display_associations'])
+    _pictogram_name = FieldProperty(IDefaultFrameParagraphRendererSettings['pictogram_name'])
 
     def can_display_illustration(self):
         if not self.display_illustration:
@@ -65,19 +72,28 @@
         associations = IAssociationContainer(frame, None)
         return (associations is not None) and (len(associations.get_visible_items()) > 0)
 
+    @property
+    def pictogram_name(self):
+        return self._pictogram_name
+
+    @pictogram_name.setter
+    def pictogram_name(self, value):
+        if value != self._pictogram_name:
+            self._pictogram_name = value
+            del self.pictogram
+
+    @volatile_property
+    def pictogram(self):
+        table = query_utility(IPictogramTable)
+        if table is not None:
+            return table.get(self._pictogram_name)
+
 
 @implementer(IDefaultFrameParagraphRendererSettings)
 class DefaultFrameParagraphRendererSettings(BaseFrameParagraphRendererSettings):
     """Framed text paragraph lateral renderer settings"""
 
 
-@adapter_config(context=IFrameParagraph, provides=IDefaultFrameParagraphRendererSettings)
-def default_frame_paragraph_renderer_settings_factory(context):
-    """Frame paragraph default renderer settings factory"""
-    return get_annotation_adapter(context, FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY,
-                                  DefaultFrameParagraphRendererSettings)
-
-
 @implementer(ILateralFrameParagraphRendererSettings)
 class LateralFrameParagraphRendererSettings(BaseFrameParagraphRendererSettings):
     """Framed text paragraph lateral renderer settings"""
@@ -85,18 +101,43 @@
     relative_width = FieldProperty(ILateralFrameParagraphRendererSettings['relative_width'])
 
 
-LATERAL_FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY = 'pyams_content.frame.renderer:lateral'
+@implementer(ILeftFrameParagraphRendererSettings)
+class LeftFrameParagraphRendererSettings(LateralFrameParagraphRendererSettings):
+    """Left Framed text paragraph lateral renderer settings"""
 
 
-@adapter_config(context=IFrameParagraph, provides=ILateralFrameParagraphRendererSettings)
-def lateral_frame_paragraph_renderer_settings_factory(context):
-    """Frame text paragraph lateral renderer settings factory"""
-    return get_annotation_adapter(context, LATERAL_FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY,
-                                  LateralFrameParagraphRendererSettings)
+@implementer(IRightFrameParagraphRendererSettings)
+class RightFrameParagraphRendererSettings(LateralFrameParagraphRendererSettings):
+    """Right Framed text paragraph lateral renderer settings"""
 
 
 #
-# Framed text paragraph default renderer
+# Framed text paragraph renderers settings
+#
+
+@adapter_config(context=IFrameParagraph, provides=IDefaultFrameParagraphRendererSettings)
+def default_frame_paragraph_renderer_settings_factory(context):
+    """Frame paragraph default renderer settings factory"""
+    return get_annotation_adapter(context, FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY,
+                                  DefaultFrameParagraphRendererSettings)
+
+
+@adapter_config(context=IFrameParagraph, provides=ILeftFrameParagraphRendererSettings)
+def left_lateral_frame_paragraph_renderer_settings_factory(context):
+    """Frame text paragraph lateral renderer settings factory"""
+    return get_annotation_adapter(context, LEFT_FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY,
+                                  LeftFrameParagraphRendererSettings)
+
+
+@adapter_config(context=IFrameParagraph, provides=IRightFrameParagraphRendererSettings)
+def right_lateral_frame_paragraph_renderer_settings_factory(context):
+    """Frame text paragraph lateral renderer settings factory"""
+    return get_annotation_adapter(context, RIGHT_FRAME_PARAGRAPH_RENDERER_SETTINGS_KEY,
+                                  RightFrameParagraphRendererSettings)
+
+
+#
+# Framed text paragraph renderers settings
 #
 
 class BaseFrameParagraphRenderer(BaseContentRenderer):
@@ -134,7 +175,7 @@
     label = _("Small frame on the left")
     weight = 2
 
-    settings_interface = ILateralFrameParagraphRendererSettings
+    settings_interface = ILeftFrameParagraphRendererSettings
 
 
 @adapter_config(name='right', context=(IFrameParagraph, IPyAMSLayer), provides=IContentRenderer)
@@ -145,4 +186,4 @@
     label = _("Small frame on the right")
     weight = 3
 
-    settings_interface = ILateralFrameParagraphRendererSettings
+    settings_interface = IRightFrameParagraphRendererSettings
--- a/src/pyams_default_theme/component/paragraph/interfaces/frame.py	Mon Sep 03 16:07:19 2018 +0200
+++ b/src/pyams_default_theme/component/paragraph/interfaces/frame.py	Wed Sep 05 09:23:52 2018 +0200
@@ -16,9 +16,10 @@
 # import standard library
 
 # import interfaces
+from pyams_content.reference.pictograms.interfaces import PICTOGRAM_VOCABULARY
 
 # import packages
-from zope.interface import Interface
+from zope.interface import Interface, Attribute
 from zope.schema import Bool, Choice
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
 
@@ -54,6 +55,13 @@
     def can_display_associations(self):
         """Check if associations can be displayed"""
 
+    pictogram_name = Choice(title=_("Pictogram"),
+                            description=_("Name of the pictogram associated with this frame paragraph"),
+                            required=False,
+                            vocabulary=PICTOGRAM_VOCABULARY)
+
+    pictogram = Attribute("Selected pictogram object")
+
 
 class IDefaultFrameParagraphRendererSettings(IFrameParagraphRendererSettings):
     """Framed paragraph default renderer settings interface"""
@@ -68,3 +76,11 @@
                             required=True,
                             values=list(range(1, 13)),
                             default=4)
+
+
+class ILeftFrameParagraphRendererSettings(ILateralFrameParagraphRendererSettings):
+    """Framed paragraph left renderer settings interface"""
+
+
+class IRightFrameParagraphRendererSettings(ILateralFrameParagraphRendererSettings):
+    """Framed paragraph right renderer settings interface"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/component/paragraph/zmi/frame.py	Wed Sep 05 09:23:52 2018 +0200
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+# import standard library
+
+# import interfaces
+from pyams_content.component.paragraph.interfaces.frame import IFrameParagraph
+
+# import packages
+from pyams_content.features.renderer.zmi import RendererPropertiesEditForm
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
+from pyams_form.form import ajax_config
+from pyams_skin.layer import IPyAMSLayer
+from pyams_pagelet.pagelet import pagelet_config
+from pyramid.decorator import reify
+
+
+@pagelet_config(name='renderer-properties.html', context=IFrameParagraph, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='renderer-properties.json', context=IFrameParagraph, layer=IPyAMSLayer)
+class FrameParagraphRendererPropertiesEditForm(RendererPropertiesEditForm):
+    """Frame paragraph renderer properties edit form"""
+
+    dialog_class = 'modal-large'
+
+    @reify
+    def fields(self):
+        fields = super(FrameParagraphRendererPropertiesEditForm, self).fields
+        if 'pictogram_name' in fields:
+            fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
+        return fields
Binary file src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo has changed
--- a/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Mon Sep 03 16:07:19 2018 +0200
+++ b/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Wed Sep 05 09:23:52 2018 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-09-03 15:38+0200\n"
+"POT-Creation-Date: 2018-09-05 09:17+0200\n"
 "PO-Revision-Date: 2017-06-07 12:41+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -20,10 +20,6 @@
 msgid "PyAMS default skin"
 msgstr "Skin par défaut (PyAMS)"
 
-#: src/pyams_default_theme/component/gallery/__init__.py:40
-msgid "Default gallery renderer"
-msgstr "Par défaut"
-
 #: src/pyams_default_theme/component/keynumber/__init__.py:53
 msgid "Default key numbers renderer"
 msgstr "Par défaut"
@@ -36,75 +32,27 @@
 msgid "Vertical list"
 msgstr "Liste verticale"
 
-#: src/pyams_default_theme/component/illustration/__init__.py:76
-msgid "Centered illustration before text"
-msgstr "Illustration centrée avant le texte"
-
-#: src/pyams_default_theme/component/illustration/__init__.py:87
-msgid "Small illustration on the left"
-msgstr "Illustration sur la gauche"
-
-#: src/pyams_default_theme/component/illustration/__init__.py:99
-msgid "Small illustration on the right"
-msgstr "Illustration sur la droite"
-
-#: src/pyams_default_theme/component/illustration/__init__.py:111
-msgid "Centered illustration after text"
-msgstr "Illustration centrée après le texte"
-
-#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
-msgid "Zoom on click?"
-msgstr "Zoom sur clic ?"
-
-#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
-msgid "If 'yes', a click on illustration thumbnail is required to zoom"
-msgstr ""
-"Si 'oui', un clic sur la vignette de l'illustration est nécessaire pour "
-"zoomer sur l'image"
-
-#: src/pyams_default_theme/component/paragraph/milestone.py:40
-msgid "Default milestones renderer"
+#: src/pyams_default_theme/component/gallery/__init__.py:40
+msgid "Default gallery renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/keypoint.py:40
-msgid "Default key points renderer"
+#: src/pyams_default_theme/component/video/__init__.py:41
+#: src/pyams_default_theme/component/paragraph/video.py:40
+msgid "Default video renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/map.py:95
-msgid "Default map renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/component/paragraph/video.py:40
-#: src/pyams_default_theme/component/video/__init__.py:41
-msgid "Default video renderer"
-msgstr "Par défaut"
+#: src/pyams_default_theme/component/paragraph/contact.py:85
+msgid "Default contact renderer"
+msgstr "Encadré en pleine largeur (par défaut)"
 
 #: src/pyams_default_theme/component/paragraph/pictogram.py:40
 msgid "Default pictograms renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/audio.py:40
-msgid "Default audio renderer"
+#: src/pyams_default_theme/component/paragraph/milestone.py:40
+msgid "Default milestones renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/frame.py:123
-msgid "Default frame renderer"
-msgstr "Encadré en pleine largeur (par défaut)"
-
-#: src/pyams_default_theme/component/paragraph/frame.py:134
-#: src/pyams_default_theme/component/paragraph/verbatim.py:126
-msgid "Small frame on the left"
-msgstr "Encadré placé sur la gauche"
-
-#: src/pyams_default_theme/component/paragraph/frame.py:145
-#: src/pyams_default_theme/component/paragraph/verbatim.py:137
-msgid "Small frame on the right"
-msgstr "Encadré placé sur la droite"
-
-#: src/pyams_default_theme/component/paragraph/verbatim.py:115
-msgid "Default verbatim renderer"
-msgstr "Encadré en pleine largeur (par défaut)"
-
 #: src/pyams_default_theme/component/paragraph/html.py:41
 msgid "Default raw HTML renderer"
 msgstr "Par défaut"
@@ -113,83 +61,48 @@
 msgid "Default rich text renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/contact.py:85
-msgid "Default contact renderer"
+#: src/pyams_default_theme/component/paragraph/verbatim.py:115
+msgid "Default verbatim renderer"
 msgstr "Encadré en pleine largeur (par défaut)"
 
-#: src/pyams_default_theme/component/paragraph/zmi/map.py:62
-msgid "Don't use default map configuration"
-msgstr "Ne pas utiliser la configuration de carte par défaut"
+#: src/pyams_default_theme/component/paragraph/verbatim.py:126
+#: src/pyams_default_theme/component/paragraph/frame.py:175
+msgid "Small frame on the left"
+msgstr "Encadré placé sur la gauche"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/map.py:34
-msgid "Don't use default configuration?"
-msgstr "Ne pas utiliser la configuration par défaut ?"
+#: src/pyams_default_theme/component/paragraph/verbatim.py:137
+#: src/pyams_default_theme/component/paragraph/frame.py:186
+msgid "Small frame on the right"
+msgstr "Encadré placé sur la droite"
+
+#: src/pyams_default_theme/component/paragraph/map.py:95
+msgid "Default map renderer"
+msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/map.py:38
-msgid "Use default configuration?"
-msgstr "Utiliser la configuration par défaut ?"
+#: src/pyams_default_theme/component/paragraph/keypoint.py:40
+msgid "Default key points renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/component/paragraph/frame.py:164
+msgid "Default frame renderer"
+msgstr "Encadré en pleine largeur (par défaut)"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:29
+#: src/pyams_default_theme/component/paragraph/audio.py:40
+msgid "Default audio renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
 #: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:29
-#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:30
 msgid "Left"
 msgstr "Gauche"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:30
+#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
 #: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:30
-#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:31
 msgid "Right"
 msgstr "Droite"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:31
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:31
-msgid "Center (full width)"
-msgstr "Centré (pleine largeur)"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:41
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:41
-msgid "Show illustration?"
-msgstr "Afficher l'illustration ?"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:42
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:42
-msgid "If 'no', illustration will not be displayed"
-msgstr ""
-"Si 'non', l'illustration ne sera pas affichée même si un contenu a été fourni"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:49
-msgid "Show associations?"
-msgstr "Afficher les associations ?"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:50
-msgid "If 'no', associations will not be displayed"
-msgstr ""
-"Si 'non', les associations ne seront pas affichées même s'il existe des "
-"éléments visibles"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:65
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:57
-msgid "Relative width"
-msgstr "Largeur relative"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:66
-msgid ""
-"Relative width used by this frame, relative to it's parent, given as columns "
-"count; full width counts for 12 columns"
-msgstr ""
-"Largeur relative de ce paragraphe par rapport à son parent. Cette largeur "
-"est indiquée en nombre de colonnes, la largeur totale correspondant à 12 "
-"colonnes."
-
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:58
-msgid ""
-"Relative width used by this paragraph, relative to it's parent, given as "
-"columns count; full width counts for 12 columns"
-msgstr ""
-"Largeur relative de ce paragraphe par rapport à son parent. Cette largeur "
-"est indiquée en nombre de colonnes, la largeur totale correspondant à 12 "
-"colonnes."
-
 #: src/pyams_default_theme/component/paragraph/interfaces/contact.py:40
 msgid "Show photo?"
 msgstr "Afficher la photo ?"
@@ -218,6 +131,75 @@
 msgid "Map position"
 msgstr "Position de la carte"
 
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:31
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:32
+msgid "Center (full width)"
+msgstr "Centré (pleine largeur)"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:41
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:42
+msgid "Show illustration?"
+msgstr "Afficher l'illustration ?"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:42
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:43
+msgid "If 'no', illustration will not be displayed"
+msgstr ""
+"Si 'non', l'illustration ne sera pas affichée même si un contenu a été fourni"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:57
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:73
+msgid "Relative width"
+msgstr "Largeur relative"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:58
+msgid ""
+"Relative width used by this paragraph, relative to it's parent, given as "
+"columns count; full width counts for 12 columns"
+msgstr ""
+"Largeur relative de ce paragraphe par rapport à son parent. Cette largeur "
+"est indiquée en nombre de colonnes, la largeur totale correspondant à 12 "
+"colonnes."
+
+#: src/pyams_default_theme/component/paragraph/interfaces/map.py:34
+msgid "Don't use default configuration?"
+msgstr "Ne pas utiliser la configuration par défaut ?"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/map.py:38
+msgid "Use default configuration?"
+msgstr "Utiliser la configuration par défaut ?"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:50
+msgid "Show associations?"
+msgstr "Afficher les liens et pièces jointes ?"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:51
+msgid "If 'no', associations will not be displayed"
+msgstr ""
+"Si 'non', les liens et pièces jointes ne seront pas affichés même s'il existe des "
+"éléments visibles"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:58
+msgid "Pictogram"
+msgstr "Pictogramme"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:59
+msgid "Name of the pictogram associated with this frame paragraph"
+msgstr "Nom du pictogramme associé à cet encadré"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:74
+msgid ""
+"Relative width used by this frame, relative to it's parent, given as columns "
+"count; full width counts for 12 columns"
+msgstr ""
+"Largeur relative de ce paragraphe par rapport à son parent. Cette largeur "
+"est indiquée en nombre de colonnes, la largeur totale correspondant à 12 "
+"colonnes."
+
+#: src/pyams_default_theme/component/paragraph/zmi/map.py:62
+msgid "Don't use default map configuration"
+msgstr "Ne pas utiliser la configuration de carte par défaut"
+
 #: src/pyams_default_theme/component/association/__init__.py:48
 msgid "Default associations renderer"
 msgstr "Par défaut"
@@ -248,7 +230,9 @@
 
 #: src/pyams_default_theme/component/association/interfaces/__init__.py:42
 msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
-msgstr "Si 'oui', seuls les blocs de contenu désignés comme ancres seront sélectionnés"
+msgstr ""
+"Si 'oui', seuls les blocs de contenu désignés comme ancres seront "
+"sélectionnés"
 
 #: src/pyams_default_theme/component/association/interfaces/__init__.py:46
 msgid "Paragraph types"
@@ -259,38 +243,50 @@
 "Select list of paragraph types you want to include; an empty selection means "
 "that all paragraphs will be selected"
 msgstr ""
-"Sélectionnez le type des blocs de contenu que vous souhaitez intégrer ; si vous laissez "
-"la sélection vide, tous les types de blocs seront pris en compte"
+"Sélectionnez le type des blocs de contenu que vous souhaitez intégrer ; si "
+"vous laissez la sélection vide, tous les types de blocs seront pris en compte"
+
+#: src/pyams_default_theme/component/illustration/__init__.py:76
+msgid "Centered illustration before text"
+msgstr "Illustration centrée avant le texte"
 
-#: src/pyams_default_theme/shared/view/templates/render.pt:2
-msgid "View result items"
-msgstr "Aperçu du contenu de la vue"
+#: src/pyams_default_theme/component/illustration/__init__.py:87
+msgid "Small illustration on the left"
+msgstr "Illustration sur la gauche"
 
-#: src/pyams_default_theme/shared/view/templates/render.pt:3
-msgid "WARNING: items displayed in this preview are out of context!!"
-msgstr ""
-"ATTENTION : la sélection des éléments affichés dans cet aperçu ne tient pas "
-"compte du contexte éventuellement paramétré dans la vue"
+#: src/pyams_default_theme/component/illustration/__init__.py:99
+msgid "Small illustration on the right"
+msgstr "Illustration sur la droite"
+
+#: src/pyams_default_theme/component/illustration/__init__.py:111
+msgid "Centered illustration after text"
+msgstr "Illustration centrée après le texte"
 
-#: src/pyams_default_theme/shared/view/portlet/__init__.py:38
-msgid "Simple vertical view"
-msgstr "Liste verticale simple"
+#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
+msgid "Zoom on click?"
+msgstr "Zoom sur clic ?"
 
-#: src/pyams_default_theme/shared/imagemap/__init__.py:58
-msgid "Default imagemap renderer"
-msgstr "Par défaut"
+#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
+msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+msgstr ""
+"Si 'oui', un clic sur la vignette de l'illustration est nécessaire pour "
+"zoomer sur l'image"
 
-#: src/pyams_default_theme/shared/imagemap/templates/render.pt:2
-msgid "Image map preview"
-msgstr "Aperçu des zones cliquables"
+#: src/pyams_default_theme/features/footer/interfaces.py:31
+msgid "Copyright"
+msgstr "Copyright"
+
+#: src/pyams_default_theme/features/footer/interfaces.py:32
+msgid "Copyright mention displayed in page footer"
+msgstr "Mention affichée dans le pied de page"
 
-#: src/pyams_default_theme/shared/logo/__init__.py:39
-msgid "Default logos renderer"
-msgstr "Par défaut"
+#: src/pyams_default_theme/features/footer/zmi/__init__.py:64
+msgid "Footer links"
+msgstr "Liens du pied de page"
 
-#: src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
-msgid "Back home"
-msgstr "Revenir à l'accueil"
+#: src/pyams_default_theme/features/footer/skin/__init__.py:50
+msgid "PyAMS simple footer with links"
+msgstr "PyAMS: pied de page simple avec liens"
 
 #: src/pyams_default_theme/features/menu/portlet/navigation/__init__.py:49
 msgid "Horizontal list with vertical illustrations"
@@ -324,22 +320,6 @@
 msgid "Label associated with second level options menu"
 msgstr "Libellé associé au second niveau de sélection"
 
-#: src/pyams_default_theme/features/footer/interfaces.py:31
-msgid "Copyright"
-msgstr "Copyright"
-
-#: src/pyams_default_theme/features/footer/interfaces.py:32
-msgid "Copyright mention displayed in page footer"
-msgstr "Mention affichée dans le pied de page"
-
-#: src/pyams_default_theme/features/footer/zmi/__init__.py:64
-msgid "Footer links"
-msgstr "Liens du pied de page"
-
-#: src/pyams_default_theme/features/footer/skin/__init__.py:50
-msgid "PyAMS simple footer with links"
-msgstr "PyAMS: pied de page simple avec liens"
-
 #: src/pyams_default_theme/features/header/interfaces.py:31
 msgid "Banner image"
 msgstr "Bandeau"
@@ -364,6 +344,36 @@
 msgid "PyAMS simple header with banner and tabs"
 msgstr "PyAMS: en-tête simple avec bandeau et onglets de navigation"
 
+#: src/pyams_default_theme/shared/view/portlet/__init__.py:38
+msgid "Simple vertical view"
+msgstr "Liste verticale simple"
+
+#: src/pyams_default_theme/shared/view/templates/render.pt:2
+msgid "View result items"
+msgstr "Aperçu du contenu de la vue"
+
+#: src/pyams_default_theme/shared/view/templates/render.pt:3
+msgid "WARNING: items displayed in this preview are out of context!!"
+msgstr ""
+"ATTENTION : la sélection des éléments affichés dans cet aperçu ne tient pas "
+"compte du contexte éventuellement paramétré dans la vue"
+
+#: src/pyams_default_theme/shared/imagemap/__init__.py:58
+msgid "Default imagemap renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/shared/imagemap/templates/render.pt:2
+msgid "Image map preview"
+msgstr "Aperçu des zones cliquables"
+
+#: src/pyams_default_theme/shared/logo/__init__.py:39
+msgid "Default logos renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
+msgid "Back home"
+msgstr "Revenir à l'accueil"
+
 #~ msgid "Default header renderer"
 #~ msgstr "Par défaut"
 
--- a/src/pyams_default_theme/locales/pyams_default_theme.pot	Mon Sep 03 16:07:19 2018 +0200
+++ b/src/pyams_default_theme/locales/pyams_default_theme.pot	Wed Sep 05 09:23:52 2018 +0200
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-09-03 15:38+0200\n"
+"POT-Creation-Date: 2018-09-05 09:17+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"
@@ -20,10 +20,6 @@
 msgid "PyAMS default skin"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/gallery/__init__.py:40
-msgid "Default gallery renderer"
-msgstr ""
-
 #: ./src/pyams_default_theme/component/keynumber/__init__.py:53
 msgid "Default key numbers renderer"
 msgstr ""
@@ -36,71 +32,25 @@
 msgid "Vertical list"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/__init__.py:76
-msgid "Centered illustration before text"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/__init__.py:87
-msgid "Small illustration on the left"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/__init__.py:99
-msgid "Small illustration on the right"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/__init__.py:111
-msgid "Centered illustration after text"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
-msgid "Zoom on click?"
+#: ./src/pyams_default_theme/component/gallery/__init__.py:40
+msgid "Default gallery renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
-msgid "If 'yes', a click on illustration thumbnail is required to zoom"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/milestone.py:40
-msgid "Default milestones renderer"
+#: ./src/pyams_default_theme/component/video/__init__.py:41
+#: ./src/pyams_default_theme/component/paragraph/video.py:40
+msgid "Default video renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/keypoint.py:40
-msgid "Default key points renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/map.py:95
-msgid "Default map renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/video.py:40
-#: ./src/pyams_default_theme/component/video/__init__.py:41
-msgid "Default video renderer"
+#: ./src/pyams_default_theme/component/paragraph/contact.py:85
+msgid "Default contact renderer"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/paragraph/pictogram.py:40
 msgid "Default pictograms renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/audio.py:40
-msgid "Default audio renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/frame.py:123
-msgid "Default frame renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/frame.py:134
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:126
-msgid "Small frame on the left"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/frame.py:145
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:137
-msgid "Small frame on the right"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:115
-msgid "Default verbatim renderer"
+#: ./src/pyams_default_theme/component/paragraph/milestone.py:40
+msgid "Default milestones renderer"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/paragraph/html.py:41
@@ -111,72 +61,46 @@
 msgid "Default rich text renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/contact.py:85
-msgid "Default contact renderer"
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:115
+msgid "Default verbatim renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/zmi/map.py:62
-msgid "Don't use default map configuration"
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:126
+#: ./src/pyams_default_theme/component/paragraph/frame.py:175
+msgid "Small frame on the left"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:137
+#: ./src/pyams_default_theme/component/paragraph/frame.py:186
+msgid "Small frame on the right"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:34
-msgid "Don't use default configuration?"
+#: ./src/pyams_default_theme/component/paragraph/map.py:95
+msgid "Default map renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/keypoint.py:40
+msgid "Default key points renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:38
-msgid "Use default configuration?"
+#: ./src/pyams_default_theme/component/paragraph/frame.py:164
+msgid "Default frame renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:29
+#: ./src/pyams_default_theme/component/paragraph/audio.py:40
+msgid "Default audio renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
 #: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:29
-#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:30
 msgid "Left"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:30
+#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
 #: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:30
-#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
-msgid "Right"
-msgstr ""
-
 #: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:31
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:31
-msgid "Center (full width)"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:41
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:41
-msgid "Show illustration?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:42
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:42
-msgid "If 'no', illustration will not be displayed"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:49
-msgid "Show associations?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:50
-msgid "If 'no', associations will not be displayed"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:65
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:57
-msgid "Relative width"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:66
-msgid ""
-"Relative width used by this frame, relative to it's parent, given as columns "
-"count; full width counts for 12 columns"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:58
-msgid ""
-"Relative width used by this paragraph, relative to it's parent, given as "
-"columns count; full width counts for 12 columns"
+msgid "Right"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:40
@@ -203,6 +127,66 @@
 msgid "Map position"
 msgstr ""
 
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:31
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:32
+msgid "Center (full width)"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:41
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:42
+msgid "Show illustration?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:42
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:43
+msgid "If 'no', illustration will not be displayed"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:57
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:73
+msgid "Relative width"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:58
+msgid ""
+"Relative width used by this paragraph, relative to it's parent, given as "
+"columns count; full width counts for 12 columns"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:34
+msgid "Don't use default configuration?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:38
+msgid "Use default configuration?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:50
+msgid "Show associations?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:51
+msgid "If 'no', associations will not be displayed"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:58
+msgid "Pictogram"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:59
+msgid "Name of the pictogram associated with this frame paragraph"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:74
+msgid ""
+"Relative width used by this frame, relative to it's parent, given as columns "
+"count; full width counts for 12 columns"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/zmi/map.py:62
+msgid "Don't use default map configuration"
+msgstr ""
+
 #: ./src/pyams_default_theme/component/association/__init__.py:48
 msgid "Default associations renderer"
 msgstr ""
@@ -245,32 +229,44 @@
 "that all paragraphs will be selected"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/view/templates/render.pt:2
-msgid "View result items"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:76
+msgid "Centered illustration before text"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/view/templates/render.pt:3
-msgid "WARNING: items displayed in this preview are out of context!!"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:87
+msgid "Small illustration on the left"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/view/portlet/__init__.py:38
-msgid "Simple vertical view"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:99
+msgid "Small illustration on the right"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/__init__.py:111
+msgid "Centered illustration after text"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/imagemap/__init__.py:58
-msgid "Default imagemap renderer"
+#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
+msgid "Zoom on click?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
+msgid "If 'yes', a click on illustration thumbnail is required to zoom"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/imagemap/templates/render.pt:2
-msgid "Image map preview"
+#: ./src/pyams_default_theme/features/footer/interfaces.py:31
+msgid "Copyright"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/logo/__init__.py:39
-msgid "Default logos renderer"
+#: ./src/pyams_default_theme/features/footer/interfaces.py:32
+msgid "Copyright mention displayed in page footer"
 msgstr ""
 
-#: ./src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
-msgid "Back home"
+#: ./src/pyams_default_theme/features/footer/zmi/__init__.py:64
+msgid "Footer links"
+msgstr ""
+
+#: ./src/pyams_default_theme/features/footer/skin/__init__.py:50
+msgid "PyAMS simple footer with links"
 msgstr ""
 
 #: ./src/pyams_default_theme/features/menu/portlet/navigation/__init__.py:49
@@ -305,22 +301,6 @@
 msgid "Label associated with second level options menu"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/footer/interfaces.py:31
-msgid "Copyright"
-msgstr ""
-
-#: ./src/pyams_default_theme/features/footer/interfaces.py:32
-msgid "Copyright mention displayed in page footer"
-msgstr ""
-
-#: ./src/pyams_default_theme/features/footer/zmi/__init__.py:64
-msgid "Footer links"
-msgstr ""
-
-#: ./src/pyams_default_theme/features/footer/skin/__init__.py:50
-msgid "PyAMS simple footer with links"
-msgstr ""
-
 #: ./src/pyams_default_theme/features/header/interfaces.py:31
 msgid "Banner image"
 msgstr ""
@@ -344,3 +324,31 @@
 #: ./src/pyams_default_theme/features/header/skin/__init__.py:52
 msgid "PyAMS simple header with banner and tabs"
 msgstr ""
+
+#: ./src/pyams_default_theme/shared/view/portlet/__init__.py:38
+msgid "Simple vertical view"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/view/templates/render.pt:2
+msgid "View result items"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/view/templates/render.pt:3
+msgid "WARNING: items displayed in this preview are out of context!!"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/imagemap/__init__.py:58
+msgid "Default imagemap renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/imagemap/templates/render.pt:2
+msgid "Image map preview"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/logo/__init__.py:39
+msgid "Default logos renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
+msgid "Back home"
+msgstr ""