Moved skin related features from PyAMS_content package
authorThierry Florac <tflorac@ulthar.net>
Wed, 07 Nov 2018 18:25:36 +0100
changeset 203 40bffafce365
parent 202 b1854f5a7be6
child 204 713edde7dbf1
Moved skin related features from PyAMS_content package
src/pyams_default_theme/features/search/__init__.py
src/pyams_default_theme/interfaces/__init__.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
src/pyams_default_theme/shared/common/__init__.py
src/pyams_default_theme/shared/common/navigation.py
src/pyams_default_theme/shared/common/oid.py
src/pyams_default_theme/shared/common/opengraph.py
src/pyams_default_theme/shared/common/summary.py
src/pyams_default_theme/shared/common/url.py
src/pyams_default_theme/shared/site/folder.py
src/pyams_default_theme/shared/site/link.py
src/pyams_default_theme/shared/site/portlet/__init__.py
--- a/src/pyams_default_theme/features/search/__init__.py	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/features/search/__init__.py	Wed Nov 07 18:25:36 2018 +0100
@@ -12,9 +12,9 @@
 
 __docformat__ = 'restructuredtext'
 
-from pyams_content.features.search import ISearchFolder
+from pyams_content.features.search.interfaces import ISearchFolder
+from pyams_default_theme.interfaces import IContentSummaryInfo
 from pyams_content.shared.site import ISiteElementNavigation
-from pyams_content.shared.site.interfaces import IContentSummaryInfo
 from pyams_i18n.interfaces import II18n
 from pyams_skin.layer import IPyAMSUserLayer
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
--- a/src/pyams_default_theme/interfaces/__init__.py	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/interfaces/__init__.py	Wed Nov 07 18:25:36 2018 +0100
@@ -12,7 +12,7 @@
 
 __docformat__ = 'restructuredtext'
 
-from zope.interface import Interface
+from zope.interface import Interface, Attribute
 
 
 class IContentNavigationTitle(Interface):
@@ -37,3 +37,15 @@
 
 class IContentNavigationIllustration(Interface):
     """Content navigation illustration adapter interface"""
+
+
+class IContentSummaryInfo(Interface):
+    """Content interface for site summary page"""
+
+    context = Attribute("Link to adapted context")
+
+    title = Attribute("Content's title")
+
+    header = Attribute("Header")
+
+    button_title = Attribute("Button's target")
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	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Wed Nov 07 18:25:36 2018 +0100
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-10-22 16:36+0200\n"
+"POT-Creation-Date: 2018-11-07 18:22+0100\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:34
-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:171
-msgid "Centered illustration before text"
-msgstr "Illustration centrée avant le texte"
-
-#: src/pyams_default_theme/component/illustration/__init__.py:182
-msgid "Small illustration on the left"
-msgstr "Illustration sur la gauche"
-
-#: src/pyams_default_theme/component/illustration/__init__.py:194
-msgid "Small illustration on the right"
-msgstr "Illustration sur la droite"
-
-#: src/pyams_default_theme/component/illustration/__init__.py:206
-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:38
-msgid "Default milestones renderer"
+#: src/pyams_default_theme/component/gallery/__init__.py:34
+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:96
-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:34
 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:38
+msgid "Default milestones renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/frame.py:152
-msgid "Default frame renderer"
-msgstr "Encadré en pleine largeur (par défaut)"
-
-#: src/pyams_default_theme/component/paragraph/frame.py:163
-#: src/pyams_default_theme/component/paragraph/verbatim.py:84
-msgid "Small frame on the left"
-msgstr "Encadré placé sur la gauche"
-
-#: src/pyams_default_theme/component/paragraph/frame.py:174
-#: src/pyams_default_theme/component/paragraph/verbatim.py:95
-msgid "Small frame on the right"
-msgstr "Encadré placé sur la droite"
-
-#: src/pyams_default_theme/component/paragraph/verbatim.py:75
-msgid "Default verbatim renderer"
-msgstr "Encadré en pleine largeur (par défaut)"
-
 #: src/pyams_default_theme/component/paragraph/html.py:35
 msgid "Default raw HTML renderer"
 msgstr "Par défaut"
@@ -113,88 +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:75
+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:84
+#: src/pyams_default_theme/component/paragraph/frame.py:163
+msgid "Small frame on the left"
+msgstr "Encadré placé sur la gauche"
 
-#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
-msgid "Default paragraphs renderer"
+#: src/pyams_default_theme/component/paragraph/verbatim.py:95
+#: src/pyams_default_theme/component/paragraph/frame.py:174
+msgid "Small frame on the right"
+msgstr "Encadré placé sur la droite"
+
+#: src/pyams_default_theme/component/paragraph/map.py:96
+msgid "Default map renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
-msgid "Default paragraphs navigation"
+#: src/pyams_default_theme/component/paragraph/keypoint.py:40
+msgid "Default key points renderer"
 msgstr "Par défaut"
 
-#: 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/frame.py:152
+msgid "Default frame renderer"
+msgstr "Encadré en pleine largeur (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/audio.py:40
+msgid "Default audio renderer"
+msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
+#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
 #: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:22
-#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
 msgid "Left"
 msgstr "Gauche"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
+#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
 #: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:23
-#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
 msgid "Right"
 msgstr "Droite"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
-msgid "Center (full width)"
-msgstr "Centré (pleine largeur)"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:37
-msgid "Show associations?"
-msgstr "Afficher les liens et pièces jointes ?"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
-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:45
-msgid "Pictogram"
-msgstr "Pictogramme"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
-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:60
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
-msgid "Relative width"
-msgstr "Largeur relative"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
-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 bloc par rapport au bloc dans lequel il s'intègre. "
-"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
-"12 colonnes."
-
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
-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 bloc par rapport au bloc dans lequel il s'intègre. "
-"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
-"12 colonnes."
-
 #: src/pyams_default_theme/component/paragraph/interfaces/contact.py:40
 msgid "Show photo?"
 msgstr "Afficher la photo ?"
@@ -223,6 +131,72 @@
 msgid "Map position"
 msgstr "Position de la carte"
 
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
+msgid "Center (full width)"
+msgstr "Centré (pleine largeur)"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
+msgid "Relative width"
+msgstr "Largeur relative"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
+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 bloc par rapport au bloc dans lequel il s'intègre. "
+"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
+"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:37
+msgid "Show associations?"
+msgstr "Afficher les liens et pièces jointes ?"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
+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:45
+msgid "Pictogram"
+msgstr "Pictogramme"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
+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:61
+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 bloc par rapport au bloc dans lequel il s'intègre. "
+"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
+"12 colonnes."
+
+#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
+msgid "Default paragraphs renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
+msgid "Default paragraphs navigation"
+msgstr "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/association/__init__.py:44
 msgid "Default associations renderer"
 msgstr "Par défaut"
@@ -269,47 +243,47 @@
 "Si 'oui', seuls les blocs de contenu désignés comme ancres seront "
 "sélectionnés"
 
-#: src/pyams_default_theme/shared/common/portlet/title.py:37
-msgid "Default title renderer"
-msgstr "Par défaut"
+#: src/pyams_default_theme/component/illustration/__init__.py:171
+msgid "Centered illustration before text"
+msgstr "Illustration centrée avant le texte"
 
-#: src/pyams_default_theme/shared/common/portlet/head.py:38
-msgid "Default header renderer"
-msgstr "Par défaut"
+#: src/pyams_default_theme/component/illustration/__init__.py:182
+msgid "Small illustration on the left"
+msgstr "Illustration sur la gauche"
 
-#: 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:194
+msgid "Small illustration on the right"
+msgstr "Illustration sur la droite"
 
-#: 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:206
+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/shared/view/portlet/__init__.py:38
-msgid "Simple vertical view"
-msgstr "Liste verticale simple"
+#: 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/__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/features/footer/interfaces.py:31
+msgid "Copyright"
+msgstr "Copyright"
 
-#: src/pyams_default_theme/shared/site/portlet/__init__.py:34
-msgid "Site container summary"
-msgstr "Par défaut"
+#: 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"
@@ -343,21 +317,10 @@
 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/search/__init__.py:64
+#: src/pyams_default_theme/shared/site/folder.py:54
+msgid "Consult folder"
+msgstr "Consulter la rubrique"
 
 #: src/pyams_default_theme/features/header/interfaces.py:31
 msgid "Banner image"
@@ -383,6 +346,53 @@
 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/common/summary.py:38
+#: src/pyams_default_theme/shared/site/link.py:62
+msgid "Consult content"
+msgstr "Accéder au contenu"
+
+#: src/pyams_default_theme/shared/common/portlet/title.py:37
+msgid "Default title renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/shared/common/portlet/head.py:38
+msgid "Default header renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/shared/site/portlet/__init__.py:35
+msgid "Site container summary"
+msgstr "Par défaut"
+
+#: 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 "Show illustration?"
 #~ msgstr "Afficher l'illustration ?"
 
--- a/src/pyams_default_theme/locales/pyams_default_theme.pot	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/locales/pyams_default_theme.pot	Wed Nov 07 18:25:36 2018 +0100
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-10-22 16:36+0200\n"
+"POT-Creation-Date: 2018-11-07 18:22+0100\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:34
-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:171
-msgid "Centered illustration before text"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/__init__.py:182
-msgid "Small illustration on the left"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/__init__.py:194
-msgid "Small illustration on the right"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/illustration/__init__.py:206
-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:34
+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:38
-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:96
-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:34
 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:152
-msgid "Default frame renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/frame.py:163
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:84
-msgid "Small frame on the left"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/frame.py:174
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:95
-msgid "Small frame on the right"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:75
-msgid "Default verbatim renderer"
+#: ./src/pyams_default_theme/component/paragraph/milestone.py:38
+msgid "Default milestones renderer"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/paragraph/html.py:35
@@ -111,80 +61,48 @@
 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:75
+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:84
+#: ./src/pyams_default_theme/component/paragraph/frame.py:163
+msgid "Small frame on the left"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
-msgid "Default paragraphs renderer"
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:95
+#: ./src/pyams_default_theme/component/paragraph/frame.py:174
+msgid "Small frame on the right"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
-msgid "Default paragraphs navigation"
+#: ./src/pyams_default_theme/component/paragraph/map.py:96
+msgid "Default map renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:34
-msgid "Don't use default configuration?"
+#: ./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:152
+msgid "Default frame renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
+#: ./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:22
-#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
 msgid "Left"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
+#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
 #: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:23
-#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
 msgid "Right"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
-msgid "Center (full width)"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:37
-msgid "Show associations?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
-msgid "If 'no', associations will not be displayed"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:45
-msgid "Pictogram"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
-msgid "Name of the pictogram associated with this frame paragraph"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
-msgid "Relative width"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
-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:35
-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/contact.py:40
 msgid "Show photo?"
 msgstr ""
@@ -209,6 +127,64 @@
 msgid "Map position"
 msgstr ""
 
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
+msgid "Center (full width)"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
+msgid "Relative width"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
+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:37
+msgid "Show associations?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
+msgid "If 'no', associations will not be displayed"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:45
+msgid "Pictogram"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
+msgid "Name of the pictogram associated with this frame paragraph"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
+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/portlet/__init__.py:40
+msgid "Default paragraphs renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
+msgid "Default paragraphs navigation"
+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:44
 msgid "Default associations renderer"
 msgstr ""
@@ -251,44 +227,44 @@
 msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/common/portlet/title.py:37
-msgid "Default title renderer"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:171
+msgid "Centered illustration before text"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/common/portlet/head.py:38
-msgid "Default header renderer"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:182
+msgid "Small illustration on the left"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/view/templates/render.pt:2
-msgid "View result items"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:194
+msgid "Small illustration on the right"
 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:206
+msgid "Centered illustration after text"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/view/portlet/__init__.py:38
-msgid "Simple vertical view"
+#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
+msgid "Zoom on click?"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/imagemap/__init__.py:58
-msgid "Default imagemap renderer"
+#: ./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/site/portlet/__init__.py:34
-msgid "Site container summary"
+#: ./src/pyams_default_theme/features/footer/interfaces.py:32
+msgid "Copyright mention displayed in page footer"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/logo/__init__.py:39
-msgid "Default logos renderer"
+#: ./src/pyams_default_theme/features/footer/zmi/__init__.py:64
+msgid "Footer links"
 msgstr ""
 
-#: ./src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
-msgid "Back home"
+#: ./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
@@ -323,20 +299,9 @@
 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"
+#: ./src/pyams_default_theme/features/search/__init__.py:64
+#: ./src/pyams_default_theme/shared/site/folder.py:54
+msgid "Consult folder"
 msgstr ""
 
 #: ./src/pyams_default_theme/features/header/interfaces.py:31
@@ -362,3 +327,48 @@
 #: ./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/common/summary.py:38
+#: ./src/pyams_default_theme/shared/site/link.py:62
+msgid "Consult content"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/common/portlet/title.py:37
+msgid "Default title renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/common/portlet/head.py:38
+msgid "Default header renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/site/portlet/__init__.py:35
+msgid "Site container summary"
+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 ""
--- a/src/pyams_default_theme/shared/common/__init__.py	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/shared/common/__init__.py	Wed Nov 07 18:25:36 2018 +0100
@@ -14,9 +14,8 @@
 
 from zope.interface import Interface
 
-from pyams_content.interfaces import IBaseContent
 from pyams_content.shared.common.interfaces import IWfSharedContent
-from pyams_default_theme.interfaces import IContentDate, IContentNavigationTitle, IContentTag
+from pyams_default_theme.interfaces import IContentDate, IContentTag
 from pyams_i18n.interfaces import II18n
 from pyams_skin.interfaces.metas import IHTMLContentMetas
 from pyams_skin.layer import IPyAMSUserLayer
@@ -44,24 +43,6 @@
             yield ContentMeta('description', description)
 
 
-@adapter_config(context=(IBaseContent, IPyAMSUserLayer), provides=IContentNavigationTitle)
-def shared_content_navigation_title(context, request):
-    """Default content navigation title adapter"""
-    return II18n(context).query_attribute('title', request=request)
-
-
-@adapter_config(name='pyams_title',
-                context=(Interface, Interface, Interface),
-                provides=ITALESExtension)
-class PyAMSContentTitleTALESExtension(ContextRequestViewAdapter):
-    """PyAMS content title TALES extension"""
-
-    def render(self, context=None):
-        if context is None:
-            context = self.context
-        return self.request.registry.queryMultiAdapter((context, self.request), IContentNavigationTitle)
-
-
 @adapter_config(context=(IWfSharedContent, IPyAMSUserLayer), provides=IContentTag)
 def shared_content_tag_adapter(context, request):
     """Default shared content tag adapter"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/shared/common/navigation.py	Wed Nov 07 18:25:36 2018 +0100
@@ -0,0 +1,54 @@
+#
+# Copyright (c) 2008-2018 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'
+
+from zope.interface import Interface
+
+from pyams_content.interfaces import IBaseContent
+from pyams_content.shared.common import ISharedContent
+from pyams_default_theme.interfaces import IContentNavigationTitle
+from pyams_content.shared.site import ISiteElementNavigation
+from pyams_i18n.interfaces import II18n
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config
+from pyams_utils.interfaces.tales import ITALESExtension
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
+
+
+@adapter_config(context=(IBaseContent, IPyAMSUserLayer), provides=IContentNavigationTitle)
+def shared_content_navigation_title(context, request):
+    """Default content navigation title adapter"""
+    return II18n(context).query_attribute('title', request=request)
+
+
+@adapter_config(name='pyams_title',
+                context=(Interface, Interface, Interface),
+                provides=ITALESExtension)
+class PyAMSContentTitleTALESExtension(ContextRequestViewAdapter):
+    """PyAMS content title TALES extension"""
+
+    def render(self, context=None):
+        if context is None:
+            context = self.context
+        return self.request.registry.queryMultiAdapter((context, self.request), IContentNavigationTitle)
+
+
+@adapter_config(context=(ISharedContent, IPyAMSUserLayer), provides=ISiteElementNavigation)
+class SharedContentNavigationAdapter(ContextRequestAdapter):
+    """Shared content navigation adapter"""
+
+    @property
+    def visible(self):
+        version = self.context.published_version
+        if version is not None:
+            return IWorkflowPublicationInfo(version).is_visible(self.request)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/shared/common/oid.py	Wed Nov 07 18:25:36 2018 +0100
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2008-2018 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'
+
+from pyramid.exceptions import NotFound
+from zope.interface import Interface
+from zope.traversing.interfaces import ITraversable
+
+from pyams_sequence.interfaces import ISequentialIntIds
+from pyams_sequence.reference import get_reference_target
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_utils.adapter import ContextRequestAdapter, adapter_config
+from pyams_utils.interfaces.url import DISPLAY_CONTEXT
+from pyams_utils.registry import get_utility
+from pyams_workflow.interfaces import IWorkflow, IWorkflowVersions
+
+
+@adapter_config(name='oid', context=(Interface, IPyAMSUserLayer), provides=ITraversable)
+class OidTraverser(ContextRequestAdapter):
+    """++oid++ traverser"""
+
+    def traverse(self, name, furtherpath=None):
+        if not name:
+            raise NotFound()
+        if '::' in name:
+            oid, label = name.split('::', 1)
+        else:
+            oid = name
+        sequence = get_utility(ISequentialIntIds)
+        reference = sequence.get_full_oid(oid)
+        target = get_reference_target(reference)
+        if target is not None:
+            workflow = IWorkflow(target, None)
+            if workflow is not None:
+                versions = IWorkflowVersions(target).get_versions(workflow.published_states, sort=True)
+                if versions:
+                    target = versions[-1]
+        if target is not None:
+            self.request.annotations[DISPLAY_CONTEXT] = self.context
+            return target
+        raise NotFound()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/shared/common/opengraph.py	Wed Nov 07 18:25:36 2018 +0100
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2008-2018 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'
+
+from zope.dublincore.interfaces import IZopeDublinCore
+from zope.interface import Interface
+
+from pyams_content.component.illustration import IIllustration, IIllustrationTarget
+from pyams_content.component.theme import ITagsInfo
+from pyams_content.shared.common import IWfSharedContent
+from pyams_file.interfaces import IThumbnails
+from pyams_i18n.interfaces import II18n, II18nManager, INegotiator
+from pyams_skin.interfaces.configuration import IConfiguration
+from pyams_skin.interfaces.metas import IHTMLContentMetas
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_skin.metas import PropertyMeta
+from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config
+from pyams_utils.registry import get_utility
+from pyams_utils.traversing import get_parent
+from pyams_utils.url import absolute_url, canonical_url
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
+
+
+@adapter_config(name='opengraph', context=(IWfSharedContent, IPyAMSUserLayer, Interface), provides=IHTMLContentMetas)
+class OpengraphSharedContentMetasAdapter(ContextRequestViewAdapter):
+    """Opengraph shared content metas adapter"""
+
+    order = 15
+
+    def get_metas(self):
+        context = self.context
+        i18n = II18n(context)
+        request = self.request
+        negotiator = get_utility(INegotiator)
+        lang = negotiator.server_language
+        # main properties
+        yield PropertyMeta('og:title', i18n.query_attribute('title', lang=lang, request=request))
+        yield PropertyMeta('og:description', i18n.query_attribute('description', lang=lang, request=request) or '')
+        yield PropertyMeta('og:type', 'article')
+        # workflow informations
+        dc = IZopeDublinCore(context, None)
+        if (dc is not None) and dc.modified:
+            yield PropertyMeta('article:modified_time', dc.modified.isoformat())
+        pub_info = IWorkflowPublicationInfo(context, None)
+        if pub_info is not None:
+            if pub_info.first_publication_date:
+                yield PropertyMeta('article:published_time', pub_info.first_publication_date.isoformat())
+            if pub_info.publication_expiration_date:
+                yield PropertyMeta('article:expiration_time', pub_info.publication_expiration_date.isoformat())
+        # tags
+        tags = ITagsInfo(context, None)
+        if tags is not None:
+            for tag in tags.tags or ():
+                yield PropertyMeta('article:tag', tag.label)
+        # URL and site name
+        yield PropertyMeta('og:url', canonical_url(context, request))
+        configuration = IConfiguration(request.root)
+        yield PropertyMeta('og:site_name', configuration.title)
+        # illustration properties
+        registry = request.registry
+        illustration = None
+        target = context
+        while target is not None:
+            illustration = registry.queryAdapter(target, IIllustration, name='link')
+            if (illustration is None) or (not illustration.has_data()):
+                illustration = registry.queryAdapter(target, IIllustration)
+            if (illustration is not None) and illustration.has_data():
+                break
+            target = get_parent(target, IIllustrationTarget, allow_context=False)
+        if (target is not None) and (illustration is not None):
+            data = II18n(illustration).query_attribute('data', lang=lang, request=request)
+            thumbnail = IThumbnails(data).get_thumbnail('800x600')
+            yield PropertyMeta('og:image:url', absolute_url(thumbnail, self.request))
+            yield PropertyMeta('og:image:type', thumbnail.content_type)
+            image_size = thumbnail.image_size
+            yield PropertyMeta('og:image:width', image_size[0])
+            yield PropertyMeta('og:image:height', image_size[1])
+            yield PropertyMeta('og:image:alt', II18n(illustration).query_attribute('alt_title', lang=lang,
+                                                                                   request=request))
+        # locales properties
+        yield PropertyMeta('og:locale', lang)
+        for lang in II18nManager(context).languages or ():
+            yield PropertyMeta('og:locale:alternate', lang)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/shared/common/summary.py	Wed Nov 07 18:25:36 2018 +0100
@@ -0,0 +1,46 @@
+#
+# Copyright (c) 2008-2018 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'
+
+from pyams_content.shared.common import ISharedContent, IWfSharedContent
+from pyams_default_theme.interfaces import IContentSummaryInfo
+from pyams_i18n.interfaces import II18n
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_utils.adapter import ContextRequestAdapter, adapter_config
+
+from pyams_content import _
+
+
+@adapter_config(context=(IWfSharedContent, IPyAMSUserLayer), provides=IContentSummaryInfo)
+class WfSharedContentSummaryInfo(ContextRequestAdapter):
+    """Shared content summary info adapter"""
+
+    @property
+    def title(self):
+        return II18n(self.context).query_attribute('title', request=self.request)
+
+    @property
+    def header(self):
+        return II18n(self.context).query_attribute('header', request=self.request)
+
+    @property
+    def button_title(self):
+        return _("Consult content")
+
+
+@adapter_config(context=(ISharedContent, IPyAMSUserLayer), provides=IContentSummaryInfo)
+def shared_content_summary_adapter(context, request):
+    """Shared content summary adapter"""
+    version = context.published_version
+    if version is not None:
+        return request.registry.queryMultiAdapter((version, request), IContentSummaryInfo)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/shared/common/url.py	Wed Nov 07 18:25:36 2018 +0100
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2008-2018 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'
+
+from pyams_content.shared.common import ISharedContent, IWfSharedContent
+from pyams_sequence.interfaces import ISequentialIdInfo
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_utils.adapter import ContextRequestAdapter, adapter_config
+from pyams_utils.interfaces.url import IRelativeURL
+from pyams_utils.url import absolute_url, relative_url
+
+
+@adapter_config(context=(IWfSharedContent, IPyAMSUserLayer), provides=IRelativeURL)
+class WfSharedContentRelativeUrlAdapter(ContextRequestAdapter):
+    """Workflow managed shared content relative URL adapter"""
+
+    def get_url(self, display_context=None, view_name=None, query=None):
+        return absolute_url(display_context, self.request,
+                            '++oid++{0}::{1}{2}{3}'.format(
+                                ISequentialIdInfo(self.context).get_base_oid().strip(),
+                                self.context.content_url,
+                                '/{}'.format(view_name) if view_name else '.html',
+                                '?{}'.format(query) if query else ''))
+
+
+@adapter_config(context=(ISharedContent, IPyAMSUserLayer), provides=IRelativeURL)
+class SharedContentRelativeURLAdapter(ContextRequestAdapter):
+    """Shared content relative URL adapter"""
+
+    def get_url(self, display_context=None, view_name=None, query=None):
+        version = self.context.published_version
+        if version is not None:
+            return relative_url(version, self.request, display_context, view_name, query)
--- a/src/pyams_default_theme/shared/site/folder.py	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/shared/site/folder.py	Wed Nov 07 18:25:36 2018 +0100
@@ -12,8 +12,9 @@
 
 __docformat__ = 'restructuredtext'
 
+from pyams_content.shared.site.interfaces import ISiteFolder
+from pyams_default_theme.interfaces import IContentSummaryInfo
 from pyams_content.shared.site import ISiteElementNavigation
-from pyams_content.shared.site.interfaces import IContentSummaryInfo, ISiteFolder
 from pyams_i18n.interfaces import II18n
 from pyams_skin.layer import IPyAMSUserLayer
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
--- a/src/pyams_default_theme/shared/site/link.py	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/shared/site/link.py	Wed Nov 07 18:25:36 2018 +0100
@@ -12,7 +12,8 @@
 
 __docformat__ = 'restructuredtext'
 
-from pyams_content.shared.site.interfaces import IContentLink, IContentSummaryInfo
+from pyams_content.shared.site.interfaces import IContentLink
+from pyams_default_theme.interfaces import IContentSummaryInfo
 from pyams_i18n.interfaces import II18n
 from pyams_skin.layer import IPyAMSUserLayer
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
--- a/src/pyams_default_theme/shared/site/portlet/__init__.py	Wed Nov 07 17:49:55 2018 +0100
+++ b/src/pyams_default_theme/shared/site/portlet/__init__.py	Wed Nov 07 18:25:36 2018 +0100
@@ -14,7 +14,8 @@
 
 from zope.interface import Interface
 
-from pyams_content.shared.site.interfaces import IContentSummaryInfo, ISiteContainer
+from pyams_content.shared.site.interfaces import ISiteContainer
+from pyams_default_theme.interfaces import IContentSummaryInfo
 from pyams_content.shared.site.portlet import ISiteContainerSummaryPortletSettings
 from pyams_portal.interfaces import IPortalContext, IPortletRenderer
 from pyams_portal.portlet import PortletRenderer