--- a/.hgtags Mon Jun 25 17:26:50 2018 +0200
+++ b/.hgtags Tue Jul 17 15:09:38 2018 +0200
@@ -18,3 +18,5 @@
95026785904d443509d93895ddf761b7967d9d46 0.1.14
95026785904d443509d93895ddf761b7967d9d46 0.1.14
1978e4dad1d8f950411807ed2df23fd030a39b60 0.1.14
+fc8fe2dede6309db4a8cfc5b53eb894cca2f6970 0.1.15
+9cc7207c1399658ef821a1ecdde86df0b5a1298d 0.1.15.1
--- a/buildout.cfg Mon Jun 25 17:26:50 2018 +0200
+++ b/buildout.cfg Tue Jul 17 15:09:38 2018 +0200
@@ -86,4 +86,4 @@
eggs = pyams_content [test]
[versions]
-pyams_content = 0.1.15
+pyams_content = 0.1.16
--- a/docs/HISTORY.txt Mon Jun 25 17:26:50 2018 +0200
+++ b/docs/HISTORY.txt Tue Jul 17 15:09:38 2018 +0200
@@ -1,12 +1,19 @@
History
=======
+0.1.15.1
+--------
+ - added request argument when rendering pictogram image
+
0.1.15
------
- - added "basic" illustration component
+ - added "basic" and "navigation" illustration components
- added pictogram selection widget
- added optional pictogram to links
- added generic menu feature
+ - added key numbers portlet
+ - added site container "rename" view to change object URL
+ - include quick search results table in main dashboard view
0.1.14
------
--- a/setup.py Mon Jun 25 17:26:50 2018 +0200
+++ b/setup.py Tue Jul 17 15:09:38 2018 +0200
@@ -22,7 +22,7 @@
README = os.path.join(DOCS, 'README.txt')
HISTORY = os.path.join(DOCS, 'HISTORY.txt')
-version = '0.1.15'
+version = '0.1.16'
long_description = open(README).read() + '\n\n' + open(HISTORY).read()
tests_require = []
--- a/src/pyams_content.egg-info/PKG-INFO Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content.egg-info/PKG-INFO Tue Jul 17 15:09:38 2018 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: pyams-content
-Version: 0.1.15
+Version: 0.1.15.1
Summary: PyAMS base content interfaces and classes
Home-page: http://hg.ztfy.org/pyams/pyams_content
Author: Thierry Florac
@@ -73,12 +73,19 @@
History
=======
+ 0.1.15.1
+ --------
+ - added request argument when rendering pictogram image
+
0.1.15
------
- - added "basic" illustration component
+ - added "basic" and "navigation" illustration components
- added pictogram selection widget
- added optional pictogram to links
- added generic menu feature
+ - added key numbers portlet
+ - added site container "rename" view to change object URL
+ - include quick search results table in main dashboard view
0.1.14
------
--- a/src/pyams_content.egg-info/SOURCES.txt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content.egg-info/SOURCES.txt Tue Jul 17 15:09:38 2018 +0200
@@ -181,8 +181,11 @@
src/pyams_content/interfaces/__init__.py
src/pyams_content/interfaces/container.py
src/pyams_content/locales/pyams_content.pot
+src/pyams_content/locales/pyams_content.pot.orig
src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo
+src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo.orig
src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po
+src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po.orig
src/pyams_content/profile/__init__.py
src/pyams_content/profile/admin.py
src/pyams_content/profile/interfaces/__init__.py
@@ -228,6 +231,9 @@
src/pyams_content/shared/common/portlet/content/skin/__init__.py
src/pyams_content/shared/common/portlet/content/zmi/__init__.py
src/pyams_content/shared/common/portlet/content/zmi/preview.pt
+src/pyams_content/shared/common/skin/__init__.py
+src/pyams_content/shared/common/skin/oid.py
+src/pyams_content/shared/common/skin/url.py
src/pyams_content/shared/common/zmi/__init__.py
src/pyams_content/shared/common/zmi/dashboard.py
src/pyams_content/shared/common/zmi/header.py
@@ -236,6 +242,7 @@
src/pyams_content/shared/common/zmi/owner.py
src/pyams_content/shared/common/zmi/portal.py
src/pyams_content/shared/common/zmi/properties.py
+src/pyams_content/shared/common/zmi/rename.py
src/pyams_content/shared/common/zmi/search.py
src/pyams_content/shared/common/zmi/security.py
src/pyams_content/shared/common/zmi/site.py
--- a/src/pyams_content/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -27,7 +27,7 @@
CREATE_CONTENT_PERMISSION, MANAGE_CONTENT_PERMISSION, COMMENT_CONTENT_PERMISSION, PUBLISH_CONTENT_PERMISSION
from pyams_content.interfaces import WEBMASTER_ROLE, PILOT_ROLE, MANAGER_ROLE, OWNER_ROLE, CONTRIBUTOR_ROLE, \
READER_ROLE, OPERATOR_ROLE, GUEST_ROLE
- from pyams_security.interfaces import ADMIN_USER_ID
+ from pyams_security.interfaces import ADMIN_USER_ID, SYSTEM_ADMIN_ROLE
from pyams_thesaurus.interfaces import CREATE_THESAURUS_PERMISSION, ADMIN_THESAURUS_PERMISSION
from pyams_utils.interfaces import PUBLIC_PERMISSION, VIEW_PERMISSION, MANAGE_PERMISSION, \
VIEW_SYSTEM_PERMISSION, MANAGE_ROLES_PERMISSION, MANAGE_SKIN_PERMISSION
@@ -48,6 +48,13 @@
config.register_permission({'id': PUBLISH_CONTENT_PERMISSION,
'title': _("Publish content")})
+ # update system administrator permissions
+ config.register_role({'id': SYSTEM_ADMIN_ROLE,
+ 'title': _("System manager (role)"),
+ 'permissions': {CREATE_THESAURUS_PERMISSION, ADMIN_THESAURUS_PERMISSION,
+ MANAGE_SITE_ROOT_PERMISSION, MANAGE_SITE_PERMISSION, MANAGE_TOOL_PERMISSION,
+ MANAGE_SKIN_PERMISSION}})
+
# register custom roles
config.register_role({'id': WEBMASTER_ROLE,
'title': _("Webmaster (role)"),
@@ -57,7 +64,9 @@
MANAGE_SITE_ROOT_PERMISSION, MANAGE_SITE_PERMISSION, MANAGE_TOOL_PERMISSION,
CREATE_CONTENT_PERMISSION, MANAGE_CONTENT_PERMISSION, MANAGE_SKIN_PERMISSION,
COMMENT_CONTENT_PERMISSION, PUBLISH_CONTENT_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager', 'role:pyams.Webmaster'}})
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE),
+ 'role:{0}'.format(WEBMASTER_ROLE)}})
config.register_role({'id': PILOT_ROLE,
'title': _("Pilot (role)"),
'permissions': {PUBLIC_PERMISSION, VIEW_PERMISSION, MANAGE_PERMISSION,
@@ -65,13 +74,17 @@
MANAGE_SITE_PERMISSION, MANAGE_TOOL_PERMISSION,
MANAGE_CONTENT_PERMISSION, COMMENT_CONTENT_PERMISSION,
PUBLISH_CONTENT_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager', 'role:pyams.Webmaster'}})
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE),
+ 'role:{0}'.format(WEBMASTER_ROLE)}})
config.register_role({'id': MANAGER_ROLE,
'title': _("Manager (role)"),
'permissions': {PUBLIC_PERMISSION, VIEW_PERMISSION, MANAGE_PERMISSION,
VIEW_SYSTEM_PERMISSION, MANAGE_CONTENT_PERMISSION,
COMMENT_CONTENT_PERMISSION, PUBLISH_CONTENT_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager', 'role:pyams.Webmaster',
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE),
+ 'role:{0}'.format(WEBMASTER_ROLE),
'role:pyams.Pilot'}})
config.register_role({'id': OWNER_ROLE,
'title': _("Owner (role)"),
@@ -84,20 +97,32 @@
VIEW_SYSTEM_PERMISSION,
CREATE_CONTENT_PERMISSION, MANAGE_CONTENT_PERMISSION,
COMMENT_CONTENT_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager', 'role:pyams.Webmaster',
- 'role:pyams.Pilot', 'role:pyams.Owner'}})
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE),
+ 'role:{0}'.format(WEBMASTER_ROLE),
+ 'role:pyams.Pilot',
+ 'role:pyams.Owner'}})
config.register_role({'id': READER_ROLE,
'title': _("Reader (role)"),
'permissions': {PUBLIC_PERMISSION, VIEW_PERMISSION, MANAGE_PERMISSION,
VIEW_SYSTEM_PERMISSION, COMMENT_CONTENT_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager', 'role:pyams.Webmaster',
- 'role:pyams.Pilot', 'role:pyams.Manager', 'role:pyams.Contributor'}})
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE),
+ 'role:{0}'.format(WEBMASTER_ROLE),
+ 'role:pyams.Pilot',
+ 'role:pyams.Manager',
+ 'role:pyams.Contributor'}})
config.register_role({'id': OPERATOR_ROLE,
'title': _("Operator (role)"),
'permissions': {PUBLIC_PERMISSION, VIEW_PERMISSION, VIEW_SYSTEM_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager'}})
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE)}})
config.register_role({'id': GUEST_ROLE,
'title': _("Guest user (role)"),
'permissions': {PUBLIC_PERMISSION, VIEW_PERMISSION},
- 'managers': {ADMIN_USER_ID, 'role:system.Manager', 'role:pyams.Webmaster',
- 'role:pyams.Pilot', 'role:pyams.Manager', 'role:pyams.Contributor'}})
+ 'managers': {ADMIN_USER_ID,
+ 'role:{0}'.format(SYSTEM_ADMIN_ROLE),
+ 'role:{0}'.format(WEBMASTER_ROLE),
+ 'role:pyams.Pilot',
+ 'role:pyams.Manager',
+ 'role:pyams.Contributor'}})
--- a/src/pyams_content/component/association/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/association/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -42,6 +42,9 @@
visible = FieldProperty(IAssociationItem['visible'])
+ def is_visible(self, request=None):
+ return True
+
def get_url(self, request=None, view_name=None):
return absolute_url(self, request, view_name)
--- a/src/pyams_content/component/association/container.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/association/container.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,6 +19,7 @@
from pyams_content.component.association.interfaces import IAssociationContainer, IAssociationContainerTarget, \
ASSOCIATION_CONTAINER_KEY, IAssociationItem, IAssociationInfo
from pyams_content.features.checker.interfaces import IContentChecker
+from pyams_zmi.layer import IAdminLayer
from zope.location.interfaces import ISublocations
from zope.traversing.interfaces import ITraversable
@@ -54,8 +55,10 @@
# make sure that association item is correctly indexed
index_object(value)
- def get_visible_items(self):
- return filter(lambda x: IAssociationItem(x).visible, self.values())
+ def get_visible_items(self, request=None):
+ for item in filter(lambda x: IAssociationItem(x).visible, self.values()):
+ if IAdminLayer.providedBy(request) or item.is_visible(request):
+ yield item
@adapter_config(context=IAssociationContainerTarget, provides=IAssociationContainer)
--- a/src/pyams_content/component/association/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/association/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -44,6 +44,9 @@
required=True,
default=True)
+ def is_visible(self, request=None):
+ """Is association item published?"""
+
def get_url(self, request=None, view_name=None):
"""Get link URL"""
@@ -70,7 +73,7 @@
def append(self, value, notify=True):
"""Append given value to container"""
- def get_visible_items(self):
+ def get_visible_items(self, request=None):
"""Get list of visible items"""
--- a/src/pyams_content/component/extfile/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/extfile/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -106,11 +106,6 @@
fields = field.Fields(IExtFile).select('data', 'filename', 'title', 'description', 'author', 'language')
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(ExtFileAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
factory = EXTERNAL_FILES_FACTORIES.get('file')
if factory is not None:
@@ -142,11 +137,6 @@
fields = field.Fields(IExtFile).select('data', 'filename', 'title', 'description', 'author', 'language')
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(ExtFilePropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
if ('title' in changes.get(IBaseExtFile, ())) or \
('filename' in changes.get(IBaseExtFile, ())) or \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/file/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,41 @@
+#
+# 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'
+
+
+# import standard library
+
+# import interfaces
+from pyams_file.interfaces import IFile
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
+
+# import packages
+from pyams_file.views.file import FileView
+from pyramid.exceptions import NotFound
+from pyramid.location import lineage
+from pyramid.view import view_config
+
+
+@view_config(context=IFile, request_type=IPyAMSUserLayer)
+def ProtectedFileView(request):
+ """Protected file view"""
+ context = request.context
+ if not request.has_permission(VIEW_SYSTEM_PERMISSION, context=context): # authenticated operator
+ for parent in lineage(context):
+ publication_info = IWorkflowPublicationInfo(parent, None)
+ if (publication_info is not None) and not publication_info.is_visible(request):
+ raise NotFound()
+
+ return FileView(request)
--- a/src/pyams_content/component/gallery/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/gallery/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -60,7 +60,7 @@
author = TextLine(title=_("Author"),
description=_("Name of document's author"),
- required=False)
+ required=True)
author_comments = I18nTextField(title=_("Author's comments"),
description=_("Comments relatives to author's rights management"),
@@ -88,6 +88,9 @@
default=True)
+GALLERY_FILE_HIDDEN_FIELDS = ('__parent__', '__name__', 'visible')
+
+
class IBaseGallery(IOrderedContainer, IAttributeAnnotatable, IRenderedContent):
"""Base gallery interface"""
--- a/src/pyams_content/component/gallery/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -68,11 +68,6 @@
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(GalleryPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
if 'title' in changes.get(IGallery, ()):
return {
--- a/src/pyams_content/component/gallery/zmi/file.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/file.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,8 @@
# import standard library
# import interfaces
-from pyams_content.component.gallery.interfaces import IGallery, IGalleryFile
+from pyams_content.component.gallery.interfaces import IGallery, IGalleryFile, IGalleryParagraph, \
+ GALLERY_FILE_HIDDEN_FIELDS
from pyams_content.component.gallery.zmi.interfaces import IGalleryMediasAddFields, IGalleryContentsView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_file.interfaces.archive import IArchiveExtractor
@@ -37,12 +38,14 @@
from pyams_form.form import AJAXAddForm, ajax_config
from pyams_form.group import NamedWidgetsGroup
from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.event import get_json_refresh_event
from pyams_skin.viewlet.toolbar import ToolbarAction, JsToolbarActionItem
from pyams_utils.registry import query_utility
from pyams_utils.traversing import get_parent
from pyams_utils.url import absolute_url
from pyams_viewlet.viewlet import viewlet_config
from pyams_zmi.form import AdminDialogEditForm, AdminDialogAddForm
+from pyramid.renderers import render
from z3c.form import field
from zope.lifecycleevent import ObjectCreatedEvent
from zope.location import locate
@@ -72,11 +75,6 @@
fields = field.Fields(IGalleryMediasAddFields)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(GalleryMediaAddForm, self).updateWidgets(prefix)
- if 'author_comments' in self.widgets:
- self.widgets['author_comments'].widget_css_class = 'textarea'
-
def create(self, data):
medias = []
medias_data = data['medias_data']
@@ -185,7 +183,7 @@
icon_css_class = 'fa fa-fw fa-picture-o'
dialog_class = 'modal-large'
- fields = field.Fields(IGalleryFile).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IGalleryFile).omit(*GALLERY_FILE_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
@property
@@ -195,15 +193,9 @@
def updateWidgets(self, prefix=None):
super(GalleryFilePropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
- if 'author_comments' in self.widgets:
- self.widgets['author_comments'].widget_css_class = 'textarea'
if 'pif_number' in self.widgets:
self.widgets['pif_number'].input_css_class = 'col-md-3'
- if 'sound_description' in self.widgets:
- self.widgets['sound_description'].widget_css_class = 'textarea'
-
+
def updateGroups(self):
self.add_group(NamedWidgetsGroup(self, 'audio_file', self.widgets,
('sound', 'sound_title', 'sound_description'),
@@ -227,6 +219,12 @@
'title': II18n(self.context).query_attribute('title', request=self.request)
}
})
+ paragraph = get_parent(self.context, IGalleryParagraph)
+ if paragraph is not None:
+ output.setdefault('events', []).append(
+ get_json_refresh_event(object_id='media_{0}_{1}'.format(paragraph.__name__, self.context.__name__),
+ content=render('templates/gallery-media-thumbnail.pt',
+ {'media': self.context}, request=self.request)))
return output
--- a/src/pyams_content/component/gallery/zmi/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,7 +18,8 @@
# import interfaces
from pyams_content.component.gallery.interfaces import IGalleryParagraph, IBaseGallery, GALLERY_PARAGRAPH_TYPE
from pyams_content.component.gallery.zmi.interfaces import IGalleryContentsView
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
@@ -69,14 +70,9 @@
legend = _("Add new gallery")
icon_css_class = 'fa fa-fw fa-picture-o'
- fields = field.Fields(IGalleryParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IGalleryParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(GalleryAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return Gallery()
@@ -96,16 +92,11 @@
legend = _("Edit gallery properties")
icon_css_class = 'fa fa-fw fa-picture-o'
- fields = field.Fields(IGalleryParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IGalleryParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(GalleryPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
updated = changes.get(IBaseGallery, ())
if 'title' in updated:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/gallery/zmi/templates/gallery-media-thumbnail.pt Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,13 @@
+<img class="thumbnail"
+ data-ams-hint-gravity="s"
+ tal:define="thumbnails tales:thumbnails(media.data);
+ thumbnail thumbnails.get_thumbnail('128x128');
+ image_size thumbnail.get_image_size();
+ margin_left 64 - image_size[0] / 2;
+ margin_top 64 - image_size[1] / 2;
+ title i18n:media.title;
+ src tales:absolute_url(thumbnail);"
+ tal:attributes="src string:${src}?_=${tales:timestamp(thumbnail)};
+ id 'media_{0}_{1}'.format(context.__name__, media.__name__);
+ original-title title or '--';
+ style string:margin-left: ${margin_left}px;; margin-right: ${margin_left}px;; margin-top: ${margin_top}px;; margin-bottom: ${margin_top}px;;" />
--- a/src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,7 +1,7 @@
<div class="form-group" i18n:domain="pyams_content"
data-ams-plugins="pyams_content"
tal:define="gallery_images context.values()"
- tal:attributes="data-ams-plugin-pyams_content-src extension:resource_path('pyams_content.skin:pyams_content');
+ tal:attributes="data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.skin:pyams_content');
id string:gallery_medias_${context.__name__};"
data-ams-plugin-pyams_content-async="false">
<fieldset class="margin-top-10 padding-top-5 padding-bottom-0">
@@ -13,7 +13,7 @@
<div class="btn-group pull-right"
tal:condition="gallery_images">
<a class="btn btn-xs btn-primary"
- tal:attributes="href extension:absolute_url(context, 'get-medias.zip')"
+ tal:attributes="href tales:absolute_url(context, 'get-medias.zip')"
i18n:translate="">Download medias</a>
</div>
<div class="pull-left persistent">
@@ -21,7 +21,7 @@
</div>
<div class="clearfix"></div>
<div class="sortable fancybox gallery"
- tal:attributes="data-ams-location extension:absolute_url(context);
+ tal:attributes="data-ams-location tales:absolute_url(context);
class '{0} fancybox gallery'.format('sortable' if request.has_permission(view.permission) else '');"
data-ams-sortable-stop="PyAMS_content.galleries.setOrder"
data-ams-sortable-helper="clone"
@@ -33,7 +33,7 @@
class="media margin-5 margin-bottom-10 radius-4 padding-5 pull-left text-center"
style="position: relative;"
tal:attributes="data-ams-element-name media.__name__">
- <tal:var define="thumbnails extension:thumbnails(media.data);">
+ <tal:var define="thumbnails tales:thumbnails(media.data);">
<tal:if condition="thumbnails">
<tal:if condition="media.data.content_type.startswith('image/')">
<a class="fancyimg hint" data-toggle
@@ -41,7 +41,7 @@
title="Zoom image" i18n:attributes="title"
tal:define="target thumbnails.get_thumbnail('800x600')"
tal:attributes="class 'fancyimg hint {0}'.format('not-visible' if not media.visible else '');
- href extension:absolute_url(target);
+ href tales:absolute_url(target);
rel string:gallery_${context.__name__};">
<img class="thumbnail"
data-ams-hint-gravity="s"
@@ -49,8 +49,9 @@
image_size thumbnail.get_image_size();
margin_left 64 - image_size[0] / 2;
margin_top 64 - image_size[1] / 2;
- title i18n:media.title;"
- tal:attributes="src extension:absolute_url(thumbnail);
+ title i18n:media.title;
+ src tales:absolute_url(thumbnail);"
+ tal:attributes="src string:${src}?_=${tales:timestamp(thumbnail)};
id 'media_{0}_{1}'.format(context.__name__, media.__name__);
original-title title or '--';
style string:margin-left: ${margin_left}px;; margin-right: ${margin_left}px;; margin-top: ${margin_top}px;; margin-bottom: ${margin_top}px;;" />
@@ -67,7 +68,7 @@
tal:attributes="href target" data-toggle="modal">
<img class="thumbnail no-border"
data-ams-hint-gravity="s"
- tal:attributes="src extension:absolute_url(thumbnail);
+ tal:attributes="src tales:absolute_url(thumbnail);
id 'media_{0}_{1}'.format(context.__name__, media.__name__);
original-title title or '--';
style string:margin-left: ${margin_left}px;; margin-right: ${margin_left}px;; margin-top: ${margin_top}px;; margin-bottom: ${margin_top}px;;" />
@@ -81,7 +82,7 @@
</tal:if>
</tal:var>
<div class="btn-group margin-top-10"
- tal:define="actions extension:context_actions(media);">
+ tal:define="actions tales:context_actions(media);">
<tal:loop repeat="viewlet actions.viewlets"
content="structure viewlet.render()" />
</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/illustration/thesaurus.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,37 @@
+#
+# 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'
+
+
+# import standard library
+
+# import interfaces
+from pyams_content.component.illustration import IBasicIllustrationTarget
+from pyams_thesaurus.interfaces.extension import IThesaurusTermExtension
+
+# import packages
+from pyams_utils.registry import utility_config
+
+from pyams_content import _
+
+
+@utility_config(name='illustration', provides=IThesaurusTermExtension)
+class IllustrationThesaurusExtension(object):
+ """Illustration thesaurus extension"""
+
+ label = _("Illustration")
+
+ target_interface = IBasicIllustrationTarget
+ target_view = 'illustration-dialog.html'
+
+ icon = '<i class="fa fa-fw fa-file-image-o"></i>'
--- a/src/pyams_content/component/illustration/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -122,11 +122,6 @@
if not IBaseParagraph.providedBy(self.context):
return 'open'
- def updateWidgets(self, prefix=None):
- super(IllustrationPropertiesInnerEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
output = super(IllustrationPropertiesInnerEditForm, self).get_ajax_output(changes)
events = output.setdefault('events', [])
--- a/src/pyams_content/component/illustration/zmi/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -79,11 +79,6 @@
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(IllustrationAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return Illustration()
@@ -110,11 +105,6 @@
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(IllustrationPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
if 'title' in changes.get(IIllustration, ()):
--- a/src/pyams_content/component/illustration/zmi/templates/illustration-thumbnail.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/illustration/zmi/templates/illustration-thumbnail.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,4 +1,4 @@
<tal:var i18n:domain="pyams_content">
<img tal:define="illustration i18n:view.illustration.data"
- tal:attributes="src extension:absolute_url(illustration, '++thumb++128x24.png')" />
+ tal:attributes="src tales:absolute_url(illustration, '++thumb++128x24.png')" />
</tal:var>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/component/illustration/zmi/thesaurus.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,50 @@
+#
+# 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'
+
+
+# import standard library
+
+# import interfaces
+from pyams_content.component.illustration.interfaces import IBasicIllustration, IIllustration
+from pyams_skin.layer import IPyAMSLayer
+from pyams_thesaurus.interfaces import MANAGE_THESAURUS_CONTENT_PERMISSION
+from pyams_thesaurus.interfaces.term import IThesaurusTerm
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+
+# import packages
+from pyams_form.form import ajax_config
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_zmi.form import AdminDialogEditForm
+from z3c.form import field
+
+from pyams_content import _
+
+
+@pagelet_config(name='illustration-dialog.html', context=IThesaurusTerm, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='illustration-dialog.json', context=IThesaurusTerm, layer=IPyAMSLayer)
+class ThesaurusTermIllustrationPropertiesEditForm(AdminDialogEditForm):
+ """Thesaurus term illustration properties edit form"""
+
+ prefix = 'illustration_form.'
+
+ legend = _("Edit illustration properties")
+ dialog_class = 'modal-large'
+ icon_css_class = 'fa fa-fw fa-file-image-o'
+
+ fields = field.Fields(IBasicIllustration).omit('__parent__', '__name__')
+ edit_permission = MANAGE_THESAURUS_CONTENT_PERMISSION
+
+ def getContent(self):
+ return IIllustration(self.context)
--- a/src/pyams_content/component/keynumber/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/keynumber/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -146,7 +146,7 @@
index_object(value)
def get_visible_items(self):
- return filter(lambda x: IKeyNumber(x).visible, self.values())
+ yield from filter(lambda x: IKeyNumber(x).visible, self.values())
@adapter_config(context=IKeyNumberContainerTarget, provides=IKeyNumberContainer)
--- a/src/pyams_content/component/keynumber/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/keynumber/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -59,6 +59,9 @@
required=False)
+KEYNUMBER_HIDDEN_FIELDS = ('__parent__', '__name__', 'visible')
+
+
class IKeyNumberContainer(IOrderedContainer):
"""Key numbers container interface"""
--- a/src/pyams_content/component/keynumber/portlet/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/keynumber/portlet/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -55,11 +55,6 @@
class KeyNumberPortletSettingsPropertiesEditor(PortletSettingsPropertiesEditor):
"""Key number portlet settings properties editor"""
- def updateWidgets(self, prefix=None):
- super().updateWidgets(prefix)
- if 'teaser' in self.widgets:
- self.widgets['teaser'].widget_css_class = 'textarea'
-
@adapter_config(name='properties.json', context=(IKeyNumberPortletSettings, IPyAMSLayer), provides=IPagelet)
class KeyNumberPortletAJAXEditor(AJAXEditForm, KeyNumberPortletEditor):
--- a/src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,9 +1,10 @@
<div tal:define="settings view.settings" i18n:domain="pyams_content">
<strong tal:define="title i18n:settings.title"
tal:condition="title">
- <tal:var content="title"/><br /></strong>
+ <tal:var content="title" /><br />
+ </strong>
<div tal:define="teaser i18n:settings.teaser"
- tal:content="structure extension:html(teaser)">Teaser</div>
+ tal:content="structure tales:html(teaser)">Teaser</div>
<ul>
<li tal:repeat="number settings.keynumbers.get_visible_items()">
<span tal:define="label i18n:number.label"
@@ -14,10 +15,13 @@
<span tal:define="unit i18n:number.unit"
tal:condition="unit"
tal:content="unit">Unit</span>
- <span tal:content="i18n:number.text">text</span>
+ <tal:var define="txt i18n:number.text">
+ <tal:if condition="txt"> / </tal:if>
+ <span tal:content="i18n:number.text">text</span>
+ </tal:var>
</li>
</ul>
- <div tal:define="visible_links list(settings.links.get_visible_items())"
+ <div tal:define="visible_links list(settings.links.get_visible_items(request))"
tal:condition="visible_links">
<u><i18n:var translate="" >Associated links</i18n:var> :</u>
<ul>
--- a/src/pyams_content/component/keynumber/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/keynumber/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
import json
# import interfaces
-from pyams_content.component.keynumber.interfaces import IKeyNumberContainer, IKeyNumberContainerTarget, IKeyNumber
+from pyams_content.component.keynumber.interfaces import IKeyNumberContainer, IKeyNumberContainerTarget, IKeyNumber, \
+ KEYNUMBER_HIDDEN_FIELDS
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_form.interfaces.form import IInnerSubForm
from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager
@@ -229,7 +230,7 @@
legend = _("Add new keynumber")
icon_css_class = 'fa fa-fw fa-dashboard'
- fields = field.Fields(IKeyNumber).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IKeyNumber).omit(*KEYNUMBER_HIDDEN_FIELDS)
edit_permission = None # use context permission checker
def create(self, data):
@@ -258,7 +259,7 @@
legend = _("Edit keynumber properties")
icon_css_class = 'fa fa-fw fa-dashboard'
- fields = field.Fields(IKeyNumber).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IKeyNumber).omit(*KEYNUMBER_HIDDEN_FIELDS)
edit_permission = None # use context permission checker
def get_ajax_output(self, changes):
--- a/src/pyams_content/component/links/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/links/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,7 +9,6 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
-from pyams_skin.layer import IPyAMSUserLayer
__docformat__ = 'restructuredtext'
@@ -25,18 +24,17 @@
from pyams_form.interfaces.form import IFormContextPermissionChecker
from pyams_i18n.interfaces import II18n
from pyams_sequence.interfaces import ISequentialIdInfo
-from pyams_workflow.interfaces import IWorkflow
+from pyams_workflow.interfaces import IWorkflow, IWorkflowPublicationInfo
# import packages
from pyams_content.component.association import AssociationItem
from pyams_content.features.checker import BaseContentChecker
-from pyams_content.workflow import VISIBLE_STATES
-from pyams_sequence.utility import get_reference_target
+from pyams_sequence.reference import get_reference_target
from pyams_utils.adapter import adapter_config, ContextAdapter
from pyams_utils.registry import query_utility
from pyams_utils.request import check_request
from pyams_utils.traversing import get_parent
-from pyams_utils.url import absolute_url, relative_url
+from pyams_utils.url import relative_url
from pyams_utils.vocabulary import vocabulary_config
from pyams_utils.zodb import volatile_property
from zope.interface import implementer
@@ -126,8 +124,22 @@
reference = FieldProperty(IInternalLink['reference'])
+ @volatile_property
+ def target(self):
+ return get_reference_target(self.reference)
+
def get_target(self, state=None):
- return get_reference_target(self.reference, state)
+ if not state:
+ return self.target
+ else:
+ return get_reference_target(self.reference, state)
+
+ def is_visible(self, request=None):
+ target = self.get_target()
+ if target is not None:
+ publication_info = IWorkflowPublicationInfo(target, None)
+ if publication_info is not None:
+ return publication_info.is_visible(request)
def get_editor_url(self):
return 'oid://{0}'.format(self.reference)
--- a/src/pyams_content/component/links/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/links/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -54,9 +54,6 @@
class IInternalLink(IBaseLink, IInternalReference):
"""Internal link interface"""
- def get_target(self, state=None):
- """Get reference target"""
-
class IExternalLink(IBaseLink):
"""External link interface"""
--- a/src/pyams_content/component/links/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/links/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -94,11 +94,6 @@
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(InternalLinkAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return InternalLink()
@@ -131,11 +126,6 @@
edit_permission = None # defined by IFormContextPermissionChecker adapter
- def updateWidgets(self, prefix=None):
- super(InternalLinkPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
if ('title' in changes.get(IBaseLink, ())) or \
('reference' in changes.get(IInternalLink, ())):
@@ -193,11 +183,6 @@
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(ExternalLinkAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return ExternalLink()
@@ -230,11 +215,6 @@
edit_permission = None # defined by IFormContextPermissionChecker adapter
- def updateWidgets(self, prefix=None):
- super(ExternalLinkPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
if ('title' in changes.get(IBaseLink, ())) or \
('url' in changes.get(IExternalLink, ())):
@@ -292,11 +272,6 @@
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(MailtoLinkAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return MailtoLink()
@@ -328,11 +303,6 @@
edit_permission = None # defined by IFormContextPermissionChecker adapter
- def updateWidgets(self, prefix=None):
- super(MailtoLinkPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
if ('title' in changes.get(IBaseLink, ())) or changes.get(IMailtoLink, ()):
return self.get_associations_table()
--- a/src/pyams_content/component/paragraph/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -82,6 +82,7 @@
icon_hint = ''
visible = FieldProperty(IBaseParagraph['visible'])
+ anchor = FieldProperty(IBaseParagraph['anchor'])
title = FieldProperty(IBaseParagraph['title'])
empty_title = ' -' * 8
--- a/src/pyams_content/component/paragraph/audio.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/audio.py Tue Jul 17 15:09:38 2018 +0200
@@ -44,10 +44,9 @@
icon_class = 'fa-volume-up'
icon_hint = AUDIO_PARAGRAPH_NAME
- body = FieldProperty(IAudioParagraph['body'])
+ data = FileProperty(IAudioParagraph['data'])
description = FieldProperty(IAudioParagraph['description'])
author = FieldProperty(IAudioParagraph['author'])
- data = FileProperty(IAudioParagraph['data'])
renderer = FieldProperty(IAudioParagraph['renderer'])
--- a/src/pyams_content/component/paragraph/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -46,10 +46,18 @@
required=True,
default=True)
+ anchor = Bool(title=_("Anchor?"),
+ description=_("Is this paragraph a navigation anchor?"),
+ required=True,
+ default=False)
+
title = I18nTextLineField(title=_("§ Title"),
required=False)
+PARAGRAPH_HIDDEN_FIELDS = ('__parent__', '__name__', 'visible', 'anchor')
+
+
class IParagraphContainer(IOrderedContainer):
"""Paragraphs container"""
--- a/src/pyams_content/component/paragraph/interfaces/audio.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/audio.py Tue Jul 17 15:09:38 2018 +0200
@@ -20,7 +20,7 @@
# import packages
from pyams_file.schema import AudioField
-from pyams_i18n.schema import I18nHTMLField, I18nTextField
+from pyams_i18n.schema import I18nTextField, I18nTextLineField
from zope.schema import TextLine, Choice
from pyams_content import _
@@ -38,8 +38,12 @@
class IAudioParagraph(IBaseParagraph):
"""Audio paragraph"""
- body = I18nHTMLField(title=_("Body"),
- required=False)
+ data = AudioField(title=_("Audio data"),
+ description=_("Audio file content"),
+ required=True)
+
+ title = I18nTextLineField(title=_("Legend"),
+ required=False)
description = I18nTextField(title=_("Description"),
description=_("File description displayed by front-office template"),
@@ -47,10 +51,6 @@
author = TextLine(title=_("Author"),
description=_("Name of document's author"),
- required=False)
-
- data = AudioField(title=_("Audio data"),
- description=_("Audio file content"),
required=True)
renderer = Choice(title=_("Audio template"),
--- a/src/pyams_content/component/paragraph/interfaces/contact.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/contact.py Tue Jul 17 15:09:38 2018 +0200
@@ -28,7 +28,7 @@
else:
have_gis = True
from pyams_i18n.schema import I18nTextLineField
-from pyams_sequence.schema import InternalReference
+from pyams_sequence.schema import InternalReferenceField
from pyams_utils.schema import MailAddressField
from zope.schema import TextLine, Text, Choice
@@ -59,10 +59,10 @@
description=_("Contact email address"),
required=False)
- contact_form = InternalReference(title=_("Contact form"),
- description=_("Reference of contact form"),
- required=False,
- content_type=FORM_CONTENT_TYPE)
+ contact_form = InternalReferenceField(title=_("Contact form"),
+ description=_("Reference of contact form"),
+ required=False,
+ content_type=FORM_CONTENT_TYPE)
photo = ImageField(title=_("Photo"),
description=_("Use 'browse' button to select contact picture"),
--- a/src/pyams_content/component/paragraph/interfaces/video.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/interfaces/video.py Tue Jul 17 15:09:38 2018 +0200
@@ -51,7 +51,7 @@
author = TextLine(title=_("Author"),
description=_("Name of document's author"),
- required=False)
+ required=True)
renderer = Choice(title=_("Video template"),
description=_("Presentation template used for this video"),
--- a/src/pyams_content/component/paragraph/milestone.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/milestone.py Tue Jul 17 15:09:38 2018 +0200
@@ -167,7 +167,7 @@
index_object(value)
def get_visible_items(self):
- return filter(lambda x: IMilestone(x).visible, self.values())
+ yield from filter(lambda x: IMilestone(x).visible, self.values())
@adapter_config(context=IMilestoneContainerTarget, provides=IMilestoneContainer)
--- a/src/pyams_content/component/paragraph/pictogram.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/pictogram.py Tue Jul 17 15:09:38 2018 +0200
@@ -158,7 +158,7 @@
index_object(value)
def get_visible_items(self):
- return filter(lambda x: IPictogramItem(x).visible, self.values())
+ yield from filter(lambda x: IPictogramItem(x).visible, self.values())
@adapter_config(context=IPictogramContainerTarget, provides=IPictogramContainer)
--- a/src/pyams_content/component/paragraph/zmi/audio.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/audio.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
# import interfaces
from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.audio import IAudioParagraph, AUDIO_PARAGRAPH_TYPE
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
@@ -31,10 +32,9 @@
# import packages
from pyams_content.component.paragraph.audio import AudioParagraph
from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
- BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons
+ BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphEditFormButtons, get_json_paragraph_refresh_event
from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
from pyams_form.form import ajax_config
-from pyams_form.group import NamedWidgetsGroup
from pyams_pagelet.pagelet import pagelet_config
from pyams_skin.event import get_json_form_refresh_event, get_json_widget_refresh_event
from pyams_utils.adapter import adapter_config
@@ -68,28 +68,9 @@
dialog_class = 'modal-large'
icon_css_class = 'fa fa-fw fa-volume-up'
- fields = field.Fields(IAudioParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IAudioParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(AudioParagraphAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
- if 'body' in self.widgets:
- self.widgets['body'].label = ''
-
- def updateGroups(self):
- self.add_group(NamedWidgetsGroup(self, 'body_group', self.widgets, ('body',),
- bordered=False,
- legend=_("HTML content"),
- css_class='inner switcher padding-right-10 no-y-padding pull-left',
- switch=True,
- display_mode='auto'))
- self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
- ('description', 'author', 'data', 'renderer'),
- bordered=False))
- super(AudioParagraphAddForm, self).updateGroups()
-
def create(self, data):
return AudioParagraph()
@@ -109,31 +90,11 @@
dialog_class = 'modal-large'
icon_css_class = 'fa fa-fw fa-volume-up'
- fields = field.Fields(IAudioParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IAudioParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(AudioParagraphPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
- if 'body' in self.widgets:
- self.widgets['body'].label = ''
-
- def updateGroups(self):
- self.add_group(NamedWidgetsGroup(self, 'body_group', self.widgets, ('body',),
- bordered=False,
- fieldset_class='margin-top-10 padding-y-5',
- legend=_("HTML content"),
- css_class='inner switcher padding-right-10 no-y-padding pull-left',
- switch=True,
- display_mode='auto'))
- self.add_group(NamedWidgetsGroup(self, 'data_group', self.widgets,
- ('description', 'author', 'data', 'renderer'),
- bordered=False))
- super(AudioParagraphPropertiesEditForm, self).updateGroups()
-
@adapter_config(context=(IAudioParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
@ajax_config(name='inner-properties.json', context=IAudioParagraph, layer=IPyAMSLayer,
@@ -159,8 +120,12 @@
ITransactionManager(self.context).get().commit()
output.setdefault('events', []).append(
get_json_form_refresh_event(self.context, self.request, AudioParagraphPropertiesInnerEditForm))
- elif 'renderer' in updated:
- output.setdefault('events', []).append(
- get_json_widget_refresh_event(self.context, self.request,
- AudioParagraphPropertiesInnerEditForm, 'renderer'))
+ else:
+ if 'title' in updated:
+ output.setdefault('events', []).append(
+ get_json_paragraph_refresh_event(self.context, self.request))
+ if 'renderer' in updated:
+ output.setdefault('events', []).append(
+ get_json_widget_refresh_event(self.context, self.request,
+ AudioParagraphPropertiesInnerEditForm, 'renderer'))
return output
--- a/src/pyams_content/component/paragraph/zmi/contact.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/contact.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,7 @@
# import interfaces
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
- IBaseParagraph
+ IBaseParagraph, PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.contact import CONTACT_PARAGRAPH_TYPE, IContactParagraph
from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
@@ -67,14 +67,9 @@
dialog_class = 'modal-large'
icon_css_class = 'fa fa-fw fa-id-card-o'
- fields = field.Fields(IContactParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IContactParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(ContactParagraphAddForm, self).updateWidgets(prefix)
- if 'address' in self.widgets:
- self.widgets['address'].widget_css_class = 'textarea'
-
def create(self, data):
return ContactParagraph()
@@ -94,16 +89,11 @@
legend = _("Edit contact card properties")
icon_css_class = 'fa fa-fw fa-id-card-o'
- fields = field.Fields(IContactParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IContactParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(ContactParagraphPropertiesEditForm, self).updateWidgets(prefix)
- if 'address' in self.widgets:
- self.widgets['address'].widget_css_class = 'textarea'
-
@adapter_config(context=(IContactParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
@ajax_config(name='inner-properties.json', context=IContactParagraph, layer=IPyAMSLayer,
--- a/src/pyams_content/component/paragraph/zmi/container.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/container.py Tue Jul 17 15:09:38 2018 +0200
@@ -41,7 +41,7 @@
from pyams_content.skin import pyams_content
from pyams_form.security import ProtectedFormObjectMixin
from pyams_pagelet.pagelet import pagelet_config
-from pyams_skin.container import switch_element_visibility
+from pyams_skin.container import switch_element_visibility, switch_element_attribute
from pyams_skin.page import DefaultPageHeaderAdapter
from pyams_skin.table import BaseTable, I18nColumn, TrashColumn, SorterColumn, ImageColumn, \
VisibilitySwitcherColumn
@@ -108,7 +108,8 @@
'data-ams-post-reload': 'PyAMS_content.paragraphs.postReload',
'data-ams-tablednd-drag-handle': 'td.sorter',
'data-ams-tablednd-drop-target': 'set-paragraphs-order.json',
- 'data-ams-visibility-switcher': 'switch-paragraph-visibility.json'
+ 'data-ams-visibility-switcher': 'switch-paragraph-visibility.json',
+ 'data-ams-anchor-switcher': 'switch-paragraph-anchor.json'
})
return attributes
@@ -183,12 +184,40 @@
return column.table.context
+@adapter_config(name='anchor', context=(IParagraphContainerTarget, IPyAMSLayer, ParagraphContainerBaseTable),
+ provides=IColumn)
+class ParagraphContainerAnchorColumn(ProtectedFormObjectMixin, VisibilitySwitcherColumn):
+ """Paragraphs container anchor switcher column"""
+
+ switch_attribute = 'anchor'
+ visible_icon_class = 'fa fa-fw fa-anchor'
+ hidden_icon_class = 'fa fa-fw fa-anchor txt-color-silver opacity-50'
+
+ icon_hint = _("Set navigation anchor")
+
+ url = 'PyAMS_content.paragraphs.switchAnchor'
+ weight = 6
+
+
+@view_config(name='switch-paragraph-anchor.json', context=IParagraphContainer, request_type=IPyAMSLayer,
+ permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
+def switch_paragraph_anchor(request):
+ """Switch paragraph anchor"""
+ return switch_element_attribute(request, IParagraphContainer, attribute_name='anchor')
+
+
+@adapter_config(context=ParagraphContainerAnchorColumn, provides=IFormSecurityContext)
+def anchor_column_security_context_factory(column):
+ """Anchor column security context factory"""
+ return column.table.context
+
+
@adapter_config(name='pictogram', context=(IParagraphContainerTarget, IPyAMSLayer, ParagraphContainerBaseTable),
provides=IColumn)
class ParagraphContainerPictogramColumn(ImageColumn):
"""Paragraph container pictogram column"""
- weight = 6
+ weight = 8
def get_icon_class(self, item):
return item.icon_class
--- a/src/pyams_content/component/paragraph/zmi/frame.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/frame.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,7 +18,8 @@
# import interfaces
from pyams_content.component.association.interfaces import IAssociationContainerTarget
from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.frame import IFrameParagraph, FRAME_PARAGRAPH_TYPE
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
@@ -101,14 +102,9 @@
label_css_class = 'control-label col-md-2'
input_css_class = 'col-md-10'
- fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IFrameParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(FrameParagraphAddForm, self).updateWidgets(prefix)
- if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea'
-
def create(self, data):
return FrameParagraph()
@@ -132,7 +128,7 @@
label_css_class = 'control-label col-md-2'
input_css_class = 'col-md-10'
- fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IFrameParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -144,7 +140,6 @@
for lang in body_widget.langs:
widget = body_widget.widgets[lang]
widget.id = '{id}_{name}'.format(id=widget.id, name=self.context.__name__)
- body_widget.widget_css_class = 'textarea'
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
--- a/src/pyams_content/component/paragraph/zmi/header.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/header.py Tue Jul 17 15:09:38 2018 +0200
@@ -69,7 +69,7 @@
def updateWidgets(self, prefix=None):
super(HeaderParagraphAddForm, self).updateWidgets(prefix)
if 'header' in self.widgets:
- self.widgets['header'].widget_css_class = 'textarea height-100'
+ self.widgets['header'].widget_css_class = 'input height-100'
def create(self, data):
return HeaderParagraph()
@@ -98,7 +98,7 @@
def updateWidgets(self, prefix=None):
super(HeaderParagraphPropertiesEditForm, self).updateWidgets(prefix)
if 'header' in self.widgets:
- self.widgets['header'].widget_css_class = 'textarea height-100'
+ self.widgets['header'].widget_css_class = 'input height-100'
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
--- a/src/pyams_content/component/paragraph/zmi/html.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/html.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,7 +19,7 @@
from pyams_content.component.association.interfaces import IAssociationContainerTarget
from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphFactorySettings, \
- IParagraphContainer
+ IParagraphContainer, PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph, RAW_PARAGRAPH_TYPE, \
HTML_PARAGRAPH_TYPE
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
@@ -92,13 +92,13 @@
label_css_class = 'control-label col-md-2'
input_css_class = 'col-md-10'
- fields = field.Fields(IRawParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IRawParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
def updateWidgets(self, prefix=None):
super(RawParagraphAddForm, self).updateWidgets(prefix)
if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea height-100'
+ self.widgets['body'].widget_css_class = 'input height-100'
def create(self, data):
return RawParagraph()
@@ -119,7 +119,7 @@
legend = _("Edit raw HTML paragraph properties")
icon_css_class = 'fa fa-fw fa-code'
- fields = field.Fields(IRawParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IRawParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -127,7 +127,7 @@
def updateWidgets(self, prefix=None):
super(RawParagraphPropertiesEditForm, self).updateWidgets(prefix)
if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea height-100'
+ self.widgets['body'].widget_css_class = 'input height-100'
@adapter_config(context=(IRawParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
@@ -175,14 +175,9 @@
label_css_class = 'control-label col-md-2'
input_css_class = 'col-md-10'
- fields = field.Fields(IHTMLParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IHTMLParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(HTMLParagraphAddForm, self).updateWidgets(prefix)
- if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea'
-
def create(self, data):
return HTMLParagraph()
@@ -205,7 +200,7 @@
label_css_class = 'control-label col-md-2'
input_css_class = 'col-md-10'
- fields = field.Fields(IHTMLParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IHTMLParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -217,7 +212,6 @@
for lang in body_widget.langs:
widget = body_widget.widgets[lang]
widget.id = '{id}_{name}'.format(id=widget.id, name=self.context.__name__)
- body_widget.widget_css_class = 'textarea'
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
--- a/src/pyams_content/component/paragraph/zmi/keypoint.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/keypoint.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,8 @@
# import standard library
# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.keypoint import IKeypointsParagraph, KEYPOINTS_PARAGRAPH_TYPE
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
@@ -64,13 +65,13 @@
legend = _("Add new key points paragraph")
icon_css_class = 'fa fa-fw fa-list-ol'
- fields = field.Fields(IKeypointsParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IKeypointsParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
def updateWidgets(self, prefix=None):
super(KeypointsParagraphAddForm, self).updateWidgets(prefix)
if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea height-100'
+ self.widgets['body'].widget_css_class = 'input height-100'
def create(self, data):
return KeypointsParagraph()
@@ -91,7 +92,7 @@
legend = _("Edit key points paragraph properties")
icon_css_class = 'fa fa-fw fa-list-ol'
- fields = field.Fields(IKeypointsParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IKeypointsParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -99,7 +100,7 @@
def updateWidgets(self, prefix=None):
super(KeypointsParagraphPropertiesEditForm, self).updateWidgets(prefix)
if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea height-100'
+ self.widgets['body'].widget_css_class = 'input height-100'
@adapter_config(context=(IKeypointsParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
--- a/src/pyams_content/component/paragraph/zmi/milestone.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/milestone.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
import json
# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.milestone import MILESTONE_PARAGRAPH_TYPE, IMilestoneParagraph, \
IMilestoneContainer, IMilestoneContainerTarget, IMilestone
from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
@@ -312,7 +313,7 @@
legend = _("Add new milestone")
icon_css_class = 'fa fa-fw fa-arrow-h'
- fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IMilestone).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
def create(self, data):
@@ -339,7 +340,7 @@
legend = _("Edit milestone properties")
icon_css_class = 'fa fa-fw fa-arrows-h'
- fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IMilestone).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
def get_ajax_output(self, changes):
--- a/src/pyams_content/component/paragraph/zmi/pictogram.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/pictogram.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
import json
# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.pictogram import PICTOGRAM_PARAGRAPH_TYPE, IPictogramParagraph, \
IPictogramContainer, IPictogramContainerTarget, IPictogramItem
from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
@@ -228,7 +229,7 @@
if pictogram is not None:
image = II18n(pictogram).query_attribute('image', request=self.request)
if image:
- return render_image(image, 48, 48, self.request)
+ return render_image(image, 48, 48, self.request, timestamp=True)
return '--'
@@ -272,7 +273,7 @@
value = super(PictogramsTableBodyColumn, self).getValue(obj)
if not value:
return BaseParagraph.empty_title
- return get_text_start(value, 40, 10)
+ return get_text_start(value, 80, 10)
@adapter_config(name='trash', context=(IPictogramContainerTarget, IPyAMSLayer, PictogramsTable), provides=IColumn)
@@ -317,7 +318,7 @@
legend = _("Add new pictogram")
icon_css_class = 'fa fa-fw fa-arrow-h'
- fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IPictogramItem).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -325,7 +326,7 @@
def updateWidgets(self, prefix=None):
super(PictogramAddForm, self).updateWidgets(prefix)
if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea height-100'
+ self.widgets['body'].widget_css_class = 'input height-100'
def create(self, data):
return PictogramItem()
@@ -359,7 +360,7 @@
legend = _("Edit pictogram properties")
icon_css_class = 'fa fa-fw fa-linode'
- fields = field.Fields(IPictogramItem).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IPictogramItem).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['pictogram_name'].widgetFactory = PictogramSelectFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
@@ -367,7 +368,7 @@
def updateWidgets(self, prefix=None):
super(PictogramPropertiesEditForm, self).updateWidgets(prefix)
if 'body' in self.widgets:
- self.widgets['body'].widget_css_class = 'textarea height-100'
+ self.widgets['body'].widget_css_class = 'input height-100'
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
--- a/src/pyams_content/component/paragraph/zmi/verbatim.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/verbatim.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
# import interfaces
from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.verbatim import IVerbatimParagraph, VERBATIM_PARAGRAPH_TYPE
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
@@ -69,14 +70,9 @@
legend = _("Add new verbatim paragraph")
icon_css_class = 'fa fa-fw fa-quote-right'
- fields = field.Fields(IVerbatimParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IVerbatimParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(VerbatimParagraphAddForm, self).updateWidgets(prefix)
- if 'quote' in self.widgets:
- self.widgets['quote'].widget_css_class = 'textarea'
-
def create(self, data):
return VerbatimParagraph()
@@ -96,16 +92,11 @@
legend = _("Edit verbatim paragraph properties")
icon_css_class = 'fa fa-fw fa-quote-right'
- fields = field.Fields(IVerbatimParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IVerbatimParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(VerbatimParagraphPropertiesEditForm, self).updateWidgets(prefix)
- if 'quote' in self.widgets:
- self.widgets['quote'].widget_css_class = 'textarea'
-
@adapter_config(context=(IVerbatimParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
@ajax_config(name='inner-properties.json', context=IVerbatimParagraph, layer=IPyAMSLayer,
--- a/src/pyams_content/component/paragraph/zmi/video.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/video.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
# import interfaces
from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.interfaces.video import IVideoParagraph, VIDEO_PARAGRAPH_TYPE
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
@@ -67,14 +68,9 @@
dialog_class = 'modal-large'
icon_css_class = 'fa fa-fw fa-film'
- fields = field.Fields(IVideoParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IVideoParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(VideoParagraphAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return VideoParagraph()
@@ -95,16 +91,11 @@
dialog_class = 'modal-large'
icon_css_class = 'fa fa-fw fa-film'
- fields = field.Fields(IVideoParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IVideoParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(VideoParagraphPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
@adapter_config(context=(IVideoParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
@ajax_config(name='inner-properties.json', context=IVideoParagraph, layer=IPyAMSLayer,
--- a/src/pyams_content/component/theme/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/theme/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,9 @@
# import interfaces
from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, \
- IThemesTarget, IThemesInfo, THEMES_INFO_KEY
+ IThemesTarget, IThemesInfo, THEMES_INFO_KEY, ITagsManager, ITagsManagerTarget, TAGS_MANAGER_KEY, ITagsInfo, \
+ ITagsTarget, TAGS_INFO_KEY, ICollectionsManager, ICollectionsManagerTarget, COLLECTIONS_MANAGER_KEY, \
+ ICollectionsInfo, ICollectionsTarget, COLLECTIONS_INFO_KEY
from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE
# import packages
@@ -31,6 +33,58 @@
from pyams_content import _
+#
+# Tags management
+#
+
+@implementer(ITagsManager)
+class TagsManager(Persistent, Contained):
+ """Tags manager persistent class"""
+
+ thesaurus_name = FieldProperty(ITagsManager['thesaurus_name'])
+ extract_name = FieldProperty(ITagsManager['extract_name'])
+
+
+@adapter_config(context=ITagsManagerTarget, provides=ITagsManager)
+def tags_manager_factory(target):
+ """Tags manager factory"""
+ return get_annotation_adapter(target, TAGS_MANAGER_KEY, TagsManager, name='++tags-manager++')
+
+
+@implementer(ITagsInfo)
+class TagsInfo(Persistent, Contained):
+ """Tags info persistent class"""
+
+ tags = FieldProperty(ITagsInfo['tags'])
+
+
+@adapter_config(context=ITagsTarget, provides=ITagsInfo)
+def tags_info_factory(target):
+ """Tags info factory"""
+ return get_annotation_adapter(target, TAGS_INFO_KEY, TagsInfo, name='++tags++')
+
+
+@adapter_config(name='tags', context=ITagsTarget, provides=IContentChecker)
+class TagsContentChecker(BaseContentChecker):
+ """Tags info content checker"""
+
+ label = _("Tags")
+ weight = 205
+
+ def inner_check(self, request):
+ output = []
+ translate = request.localizer.translate
+ tags = ITagsInfo(self.context)
+ if not tags.tags:
+ output.append(translate(ERROR_VALUE).format(field=translate(ITagsInfo['tags'].title),
+ message=translate(_("no defined tag"))))
+ return output
+
+
+#
+# Themes management
+#
+
@implementer(IThemesManager)
class ThemesManager(Persistent, Contained):
"""Themes manager persistent class"""
@@ -63,7 +117,7 @@
"""Themes info content checker"""
label = _("Themes")
- weight = 200
+ weight = 210
def inner_check(self, request):
output = []
@@ -73,3 +127,51 @@
output.append(translate(ERROR_VALUE).format(field=translate(IThemesInfo['themes'].title),
message=translate(_("no defined theme"))))
return output
+
+
+#
+# Collections management
+#
+
+@implementer(ICollectionsManager)
+class CollectionsManager(Persistent, Contained):
+ """Collections manager persistent class"""
+
+ thesaurus_name = FieldProperty(ICollectionsManager['thesaurus_name'])
+ extract_name = FieldProperty(ICollectionsManager['extract_name'])
+
+
+@adapter_config(context=ICollectionsManagerTarget, provides=ICollectionsManager)
+def collections_manager_factory(target):
+ """Collections manager factory"""
+ return get_annotation_adapter(target, COLLECTIONS_MANAGER_KEY, CollectionsManager, name='++collections-manager++')
+
+
+@implementer(ICollectionsInfo)
+class CollectionsInfo(Persistent, Contained):
+ """Collections info persistent class"""
+
+ collections = FieldProperty(ICollectionsInfo['collections'])
+
+
+@adapter_config(context=ICollectionsTarget, provides=ICollectionsInfo)
+def collections_info_factory(target):
+ """Collections info factory"""
+ return get_annotation_adapter(target, COLLECTIONS_INFO_KEY, CollectionsInfo, name='++collections++')
+
+
+@adapter_config(name='collections', context=ICollectionsTarget, provides=IContentChecker)
+class CollectionsContentChecker(BaseContentChecker):
+ """Collections info content checker"""
+
+ label = _("Collections")
+ weight = 215
+
+ def inner_check(self, request):
+ output = []
+ translate = request.localizer.translate
+ collections = ICollectionsInfo(self.context)
+ if not collections.collections:
+ output.append(translate(ERROR_VALUE).format(field=translate(ICollectionsInfo['collections'].title),
+ message=translate(_("no defined collection"))))
+ return output
--- a/src/pyams_content/component/theme/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/theme/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -25,6 +25,51 @@
from pyams_content import _
+#
+# Tags management
+#
+
+TAGS_MANAGER_KEY = 'pyams_content.tags.manager'
+TAGS_INFO_KEY = 'pyams_content.tags.info'
+
+
+class ITagsManager(IThesaurusContextManager):
+ """Tags manager interface"""
+
+
+class ITagsManagerTarget(IThesaurusContextManagerTarget):
+ """Marker interface for tags manager"""
+
+
+class ITagsInfo(Interface):
+ """Tags information interface"""
+
+ tags = ThesaurusTermsListField(title=_("Tags"),
+ required=False)
+
+
+class ITagsTarget(Interface):
+ """Tags target interface"""
+
+
+PORTLET_SETTINGS_TAGS_KEY = 'pyams_content.portlet.tags.settings'
+
+
+class IPortletTagsSettings(Interface):
+ """Interface for portlet settings managing tags"""
+
+ tags = ThesaurusTermsListField(title=_("Tags"),
+ required=False)
+
+
+class IPortletTagsSettingsTarget(Interface):
+ """Marker interface for portlet settings managing tags"""
+
+
+#
+# Themes management
+#
+
THEMES_MANAGER_KEY = 'pyams_content.themes.manager'
THEMES_INFO_KEY = 'pyams_content.themes.info'
@@ -54,6 +99,50 @@
class IPortletThemesSettings(Interface):
"""Interface for portlet settings managing themes"""
+ themes = ThesaurusTermsListField(title=_("Themes"),
+ required=False)
+
class IPortletThemesSettingsTarget(Interface):
"""Marker interface for portlet settings managing themes"""
+
+
+#
+# Collections management
+#
+
+COLLECTIONS_MANAGER_KEY = 'pyams_content.collections.manager'
+COLLECTIONS_INFO_KEY = 'pyams_content.collections.info'
+
+
+class ICollectionsManager(IThesaurusContextManager):
+ """Collections manager interface"""
+
+
+class ICollectionsManagerTarget(IThesaurusContextManagerTarget):
+ """Marker interface for tools managing collections"""
+
+
+class ICollectionsInfo(Interface):
+ """Collections information interface"""
+
+ collections = ThesaurusTermsListField(title=_("Collections"),
+ required=False)
+
+
+class ICollectionsTarget(Interface):
+ """Collections target interface"""
+
+
+PORTLET_SETTINGS_COLLECTIONS_KEY = 'pyams_content.portlet.collections.settings'
+
+
+class IPortletCollectionsSettings(Interface):
+ """Interface for portlet settings managing collections"""
+
+ collections = ThesaurusTermsListField(title=_("Collections"),
+ required=False)
+
+
+class IPortletCollectionsSettingsTarget(Interface):
+ """Marker interface for portlet settings managing collections"""
--- a/src/pyams_content/component/theme/portlet.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/theme/portlet.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,8 +16,10 @@
# import standard library
# import interfaces
-from pyams_content.component.theme.interfaces import IPortletThemesSettings, IPortletThemesSettingsTarget, \
- PORTLET_SETTINGS_THEMES_KEY
+from pyams_content.component.theme.interfaces import \
+ IPortletThemesSettings, IPortletThemesSettingsTarget, PORTLET_SETTINGS_THEMES_KEY, \
+ IPortletTagsSettings, IPortletTagsSettingsTarget, PORTLET_SETTINGS_TAGS_KEY, \
+ IPortletCollectionsSettings, IPortletCollectionsSettingsTarget, PORTLET_SETTINGS_COLLECTIONS_KEY
from zope.traversing.interfaces import ITraversable
# import packages
@@ -25,17 +27,51 @@
from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
from zope.container.contained import Contained
from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+#
+# Portlets tags management
+#
+
+@implementer(IPortletTagsSettings)
+class PortletTagsSettings(Persistent, Contained):
+ """Portlet tags settings"""
+
+ tags = FieldProperty(IPortletTagsSettings['tags'])
+
+
+@adapter_config(context=IPortletTagsSettingsTarget, provides=IPortletTagsSettings)
+def portlet_tags_settings_factory(context):
+ """Portlet tags settings adapter"""
+ return get_annotation_adapter(context, PORTLET_SETTINGS_TAGS_KEY, PortletTagsSettings,
+ name='++tags++')
+
+
+@adapter_config(name='tags', context=IPortletTagsSettingsTarget, provides=ITraversable)
+class TagsPortletsSettingsTraverser(ContextAdapter):
+ """++tags++ portlet settings adapter"""
+
+ def traverse(self, name, furtherpath=None):
+ return IPortletTagsSettings(self.context)
+
+
+#
+# Portlets themes management
+#
+
@implementer(IPortletThemesSettings)
class PortletThemesSettings(Persistent, Contained):
"""Portlet themes settings"""
+ themes = FieldProperty(IPortletThemesSettings['themes'])
+
@adapter_config(context=IPortletThemesSettingsTarget, provides=IPortletThemesSettings)
def portlet_themes_settings_factory(context):
"""Portlet themes settings adapter"""
- return get_annotation_adapter(context, PORTLET_SETTINGS_THEMES_KEY, PortletThemesSettings, name='++themes++')
+ return get_annotation_adapter(context, PORTLET_SETTINGS_THEMES_KEY, PortletThemesSettings,
+ name='++themes++')
@adapter_config(name='themes', context=IPortletThemesSettingsTarget, provides=ITraversable)
@@ -44,3 +80,29 @@
def traverse(self, name, furtherpath=None):
return IPortletThemesSettings(self.context)
+
+
+#
+# Portlets collections management
+#
+
+@implementer(IPortletCollectionsSettings)
+class PortletCollectionsSettings(Persistent, Contained):
+ """Portlet collections settings"""
+
+ collections = FieldProperty(IPortletCollectionsSettings['collections'])
+
+
+@adapter_config(context=IPortletCollectionsSettingsTarget, provides=IPortletCollectionsSettings)
+def portlet_collections_settings_factory(context):
+ """Portlet collections settings adapter"""
+ return get_annotation_adapter(context, PORTLET_SETTINGS_COLLECTIONS_KEY, PortletCollectionsSettings,
+ name='++collections++')
+
+
+@adapter_config(name='collections', context=IPortletCollectionsSettingsTarget, provides=ITraversable)
+class CollectionsPortletsSettingsTraverser(ContextAdapter):
+ """++collections++ portlet settings adapter"""
+
+ def traverse(self, name, furtherpath=None):
+ return IPortletCollectionsSettings(self.context)
--- a/src/pyams_content/component/theme/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/theme/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,35 +16,83 @@
# import standard library
# import interfaces
-from pyams_content.component.theme.interfaces import IThemesTarget, IThemesInfo, IThemesManagerTarget, IThemesManager
+from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManager, IThemesTarget, IThemesInfo, \
+ IThemesManagerTarget, IThemesManager, ICollectionsTarget, ICollectionsInfo, ICollectionsManager, \
+ ICollectionsManagerTarget
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_form.interfaces.form import IWidgetForm
-from pyams_skin.interfaces import IInnerPage, IPageHeader
+from pyams_skin.interfaces import IInnerPage, IPageHeader, IDialog
from pyams_skin.layer import IPyAMSLayer
-from pyams_thesaurus.interfaces.thesaurus import IThesaurus
from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
from pyams_zmi.interfaces.menu import IPropertiesMenu
from pyams_zmi.layer import IAdminLayer
# import packages
from pyams_content.shared.common.zmi import WfSharedContentHeaderAdapter
-from pyams_form.form import ajax_config
+from pyams_form.form import ajax_config, AJAXEditForm, EditForm
from pyams_pagelet.pagelet import pagelet_config
from pyams_skin.viewlet.menu import MenuItem
-from pyams_template.template import template_config
+from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget
from pyams_utils.adapter import adapter_config
-from pyams_utils.registry import query_utility
from pyams_utils.traversing import get_parent
from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminEditForm
+from pyams_zmi.form import AdminEditForm, AdminDialogEditForm
from z3c.form import field
from zope.interface import implementer
from pyams_content import _
+#
+# Tags management
+#
+
+@viewlet_config(name='tags.menu', context=ITagsTarget, layer=IAdminLayer,
+ manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=350)
+class TagsMenu(MenuItem):
+ """Tags menu"""
+
+ label = _("Tags...")
+ icon_class = 'fa-tag'
+ url = '#tags.html'
+
+
+@pagelet_config(name='tags.html', context=ITagsTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='tags.json', context=ITagsTarget, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
+@implementer(IWidgetForm, IInnerPage)
+class TagsEditForm(AdminEditForm):
+ """Tags edit form"""
+
+ legend = _("Content tags")
+
+ label_css_class = 'control-label hidden'
+ input_css_class = 'col-md-12'
+
+ fields = field.Fields(ITagsInfo)
+ fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
+
+ def updateWidgets(self, prefix=None):
+ super(TagsEditForm, self).updateWidgets(prefix)
+ if 'tags' in self.widgets:
+ widget = self.widgets['tags']
+ manager = ITagsManager(self.request.root)
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+
+
+@adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader)
+class TagsHeaderAdapter(WfSharedContentHeaderAdapter):
+ """Shared content tags header adapter"""
+
+ icon_class = 'fa fa-fw fa-tag'
+
+
+#
+# Themes management
+#
+
@viewlet_config(name='themes.menu', context=IThemesTarget, layer=IAdminLayer,
- manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=350)
+ manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=352)
class ThemesMenu(MenuItem):
"""Themes menu"""
@@ -53,49 +101,101 @@
url = '#themes.html'
-@pagelet_config(name='themes.html', context=IThemesTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
-@template_config(template='templates/themes-info.pt', layer=IPyAMSLayer)
-@ajax_config(name='themes.json', context=IThemesTarget, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
-@implementer(IWidgetForm, IInnerPage)
-class ThemesEditForm(AdminEditForm):
- """Themes edit form"""
+class BaseThemesEditForm(EditForm):
+ """Base themes edit form"""
legend = _("Content themes")
+ label_css_class = 'control-label hidden'
+ input_css_class = 'col-md-12'
+
fields = field.Fields(IThemesInfo)
+ fields['themes'].widgetFactory = ThesaurusTermsTreeFieldWidget
+
+ edit_permission = MANAGE_CONTENT_PERMISSION
+
+ def updateWidgets(self, prefix=None):
+ super(BaseThemesEditForm, self).updateWidgets(prefix)
+ if 'themes' in self.widgets:
+ widget = self.widgets['themes']
+ target = get_parent(self.context, IThemesManagerTarget)
+ manager = IThemesManager(target)
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+
+
+@adapter_config(context=(IThemesTarget, IAdminLayer, BaseThemesEditForm), provides=IPageHeader)
+class ThemesHeaderAdapter(WfSharedContentHeaderAdapter):
+ """Shared content themes header adapter"""
+
+ icon_class = 'fa fa-fw fa-tags'
+
+
+@pagelet_config(name='themes.html', context=IThemesTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='themes.json', context=IThemesTarget, layer=IPyAMSLayer, base=AJAXEditForm)
+@implementer(IWidgetForm, IInnerPage)
+class ThemesEditForm(BaseThemesEditForm, AdminEditForm):
+ """Themes edit form"""
+
+
+@pagelet_config(name='themes-dialog.html', context=IThemesTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='themes-dialog.json', context=IThemesTarget, layer=IPyAMSLayer, base=AJAXEditForm)
+@implementer(IDialog)
+class DialogThemesEditForm(BaseThemesEditForm, AdminDialogEditForm):
+ """Dialog themes edit form"""
+
+ dialog_class = 'modal-large'
+
+
+#
+# Collections management
+#
+
+@viewlet_config(name='collections.menu', context=ICollectionsTarget, layer=IAdminLayer,
+ manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=354)
+class CollectionsMenu(MenuItem):
+ """Collections menu"""
+
+ label = _("Collections...")
+ icon_class = 'fa-book'
+ url = '#collections.html'
+
+
+@pagelet_config(name='collections.html', context=ICollectionsTarget, layer=IPyAMSLayer,
+ permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='collections.json', context=ICollectionsTarget, layer=IPyAMSLayer,
+ permission=MANAGE_CONTENT_PERMISSION)
+@implementer(IWidgetForm, IInnerPage)
+class CollectionsEditForm(AdminEditForm):
+ """Collections edit form"""
+
+ legend = _("Content collections")
+
+ label_css_class = 'control-label hidden'
+ input_css_class = 'col-md-12'
+
+ fields = field.Fields(ICollectionsInfo)
+ fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget
def __init__(self, context, request):
- super(ThemesEditForm, self).__init__(context, request)
- target = get_parent(self.context, IThemesManagerTarget)
- manager = IThemesManager(target)
+ super(CollectionsEditForm, self).__init__(context, request)
+ target = get_parent(self.context, ICollectionsManagerTarget)
+ manager = ICollectionsManager(target)
self.thesaurus_name = manager.thesaurus_name
self.extract_name = manager.extract_name
def updateWidgets(self, prefix=None):
- super(ThemesEditForm, self).updateWidgets(prefix)
- widget = self.widgets['themes']
- widget.thesaurus_name = self.thesaurus_name
- widget.extract_name = self.extract_name
-
- @property
- def top_terms(self):
- thesaurus = query_utility(IThesaurus, name=self.thesaurus_name)
- if thesaurus is not None:
- return sorted(thesaurus.get_top_terms(extract=self.extract_name),
- key=lambda x: x.label)
- else:
- return ()
-
- def get_subterms(self, term):
- for subterm in term.specifics:
- if (not self.extract_name) or (self.extract_name in subterm.extracts):
- yield subterm
- for another in self.get_subterms(subterm):
- yield another
+ super(CollectionsEditForm, self).updateWidgets(prefix)
+ if 'collections' in self.widgets:
+ widget = self.widgets['collections']
+ target = get_parent(self.context, ICollectionsManagerTarget)
+ manager = ICollectionsManager(target)
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
-@adapter_config(context=(IThemesTarget, IAdminLayer, ThemesEditForm), provides=IPageHeader)
-class ThemesHeaderAdapter(WfSharedContentHeaderAdapter):
- """Shared content themes header adapter"""
+@adapter_config(context=(ICollectionsTarget, IAdminLayer, CollectionsEditForm), provides=IPageHeader)
+class CollectionsHeaderAdapter(WfSharedContentHeaderAdapter):
+ """Shared content collections header adapter"""
- icon_class = 'fa fa-fw fa-tags'
+ icon_class = 'fa fa-fw fa-book'
--- a/src/pyams_content/component/theme/zmi/manager.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/theme/zmi/manager.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,6 +9,7 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
+from pyams_content.component.theme import ICollectionsManagerTarget, ICollectionsManager
__docformat__ = 'restructuredtext'
@@ -16,8 +17,9 @@
# import standard library
# import interfaces
-from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager
-from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
+from pyams_content.component.theme.interfaces import ITagsManagerTarget, ITagsManager, IThemesManagerTarget, \
+ IThemesManager
+from pyams_content.interfaces import MANAGE_TOOL_PERMISSION, MANAGE_SITE_ROOT_PERMISSION
from pyams_skin.layer import IPyAMSLayer
from pyams_utils.interfaces.data import IObjectData
from pyams_zmi.interfaces.menu import IPropertiesMenu
@@ -37,8 +39,62 @@
from pyams_content import _
+#
+# Tags management view
+#
+
+@viewlet_config(name='tags-manager.menu', context=ITagsManagerTarget, layer=IAdminLayer,
+ manager=IPropertiesMenu, permission=MANAGE_SITE_ROOT_PERMISSION, weight=40)
+class TagsManagerMenu(MenuItem):
+ """Tags menu"""
+
+ label = _("Tags settings...")
+ icon_class = 'fa-tag'
+ url = 'tags.html'
+ modal_target = True
+
+
+@pagelet_config(name='tags.html', context=ITagsManagerTarget, layer=IPyAMSLayer,
+ permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='tags.json', context=ITagsManagerTarget, layer=IPyAMSLayer)
+class TagsManagerEditForm(AdminDialogEditForm):
+ """Tags manager edit form"""
+
+ prefix = 'manager_themes.'
+
+ legend = _("Selected tags")
+
+ fields = field.Fields(ITagsManager)
+ edit_permission = MANAGE_SITE_ROOT_PERMISSION
+
+ def getContent(self):
+ return ITagsManager(self.context)
+
+ def updateWidgets(self, prefix=None):
+ super(TagsManagerEditForm, self).updateWidgets(prefix)
+ widget = self.widgets['thesaurus_name']
+ widget.object_data = {
+ 'ams-plugins': 'pyams_content',
+ 'ams-plugin-pyams_content-src': get_resource_path(pyams_content),
+ 'ams-plugin-pyams_content-callback': 'PyAMS_content.themes.initExtracts',
+ 'ams-plugin-pyams_content-async': 'false'
+ }
+ alsoProvides(widget, IObjectData)
+ widget = self.widgets['extract_name']
+ widget.object_data = {
+ 'ams-events-handlers': {
+ 'select2-open': 'PyAMS_content.themes.getExtracts'
+ }
+ }
+ alsoProvides(widget, IObjectData)
+
+
+#
+# Themes management view
+#
+
@viewlet_config(name='themes-manager.menu', context=IThemesManagerTarget, layer=IAdminLayer,
- manager=IPropertiesMenu, permission=MANAGE_TOOL_PERMISSION, weight=40)
+ manager=IPropertiesMenu, permission=MANAGE_TOOL_PERMISSION, weight=41)
class ThemesManagerMenu(MenuItem):
"""Themes menu"""
@@ -61,14 +117,73 @@
fields = field.Fields(IThemesManager)
edit_permission = MANAGE_TOOL_PERMISSION
+ def getContent(self):
+ return IThemesManager(self.context)
+
def updateWidgets(self, prefix=None):
super(ThemesManagerEditForm, self).updateWidgets(prefix)
- if 'extract_name' in self.widgets:
- widget = self.widgets['extract_name']
- widget.object_data = {
- 'ams-plugins': 'pyams_content',
- 'ams-plugin-pyams_content-src': get_resource_path(pyams_content),
- 'ams-plugin-pyams_content-callback': 'PyAMS_content.themes.initExtracts',
- 'ams-plugin-pyams_content-async': 'false'
+ widget = self.widgets['thesaurus_name']
+ widget.object_data = {
+ 'ams-plugins': 'pyams_content',
+ 'ams-plugin-pyams_content-src': get_resource_path(pyams_content),
+ 'ams-plugin-pyams_content-callback': 'PyAMS_content.themes.initExtracts',
+ 'ams-plugin-pyams_content-async': 'false'
+ }
+ alsoProvides(widget, IObjectData)
+ widget = self.widgets['extract_name']
+ widget.object_data = {
+ 'ams-events-handlers': {
+ 'select2-open': 'PyAMS_content.themes.getExtracts'
}
- alsoProvides(widget, IObjectData)
+ }
+ alsoProvides(widget, IObjectData)
+
+
+#
+# Collections management view
+#
+
+@viewlet_config(name='collections-manager.menu', context=ICollectionsManagerTarget, layer=IAdminLayer,
+ manager=IPropertiesMenu, permission=MANAGE_TOOL_PERMISSION, weight=42)
+class CollectionsManagerMenu(MenuItem):
+ """Collections menu"""
+
+ label = _("Collections settings...")
+ icon_class = 'fa-book'
+ url = 'collections.html'
+ modal_target = True
+
+
+@pagelet_config(name='collections.html', context=ICollectionsManagerTarget, layer=IPyAMSLayer,
+ permission=MANAGE_TOOL_PERMISSION)
+@ajax_config(name='collections.json', context=ICollectionsManagerTarget, layer=IPyAMSLayer)
+class CollectionsManagerEditForm(AdminDialogEditForm):
+ """Collections manager edit form"""
+
+ prefix = 'manager_themes.'
+
+ legend = _("Selected collections")
+
+ fields = field.Fields(ICollectionsManager)
+ edit_permission = MANAGE_TOOL_PERMISSION
+
+ def getContent(self):
+ return ICollectionsManager(self.context)
+
+ def updateWidgets(self, prefix=None):
+ super(CollectionsManagerEditForm, self).updateWidgets(prefix)
+ widget = self.widgets['thesaurus_name']
+ widget.object_data = {
+ 'ams-plugins': 'pyams_content',
+ 'ams-plugin-pyams_content-src': get_resource_path(pyams_content),
+ 'ams-plugin-pyams_content-callback': 'PyAMS_content.collections.initExtracts',
+ 'ams-plugin-pyams_content-async': 'false'
+ }
+ alsoProvides(widget, IObjectData)
+ widget = self.widgets['extract_name']
+ widget.object_data = {
+ 'ams-events-handlers': {
+ 'select2-open': 'PyAMS_content.themes.getExtracts'
+ }
+ }
+ alsoProvides(widget, IObjectData)
--- a/src/pyams_content/component/theme/zmi/portlet.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/theme/zmi/portlet.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,8 @@
# import standard library
# import interfaces
-from pyams_content.component.theme.interfaces import IPortletThemesSettingsTarget
+from pyams_content.component.theme.interfaces import IPortletTagsSettingsTarget, IPortletThemesSettingsTarget, \
+ IPortletCollectionsSettingsTarget, IPortletTagsSettings, IPortletThemesSettings, IPortletCollectionsSettings
from pyams_form.interfaces.form import IInnerTabForm
from pyams_skin.layer import IPyAMSLayer
@@ -25,11 +26,25 @@
from pyams_utils.adapter import adapter_config
from pyams_zmi.form import InnerAdminEditForm
from z3c.form import field
-from zope.interface import Interface
from pyams_content import _
+@adapter_config(name='tags', context=(IPortletTagsSettingsTarget, IPyAMSLayer, PortletSettingsEditor),
+ provides=IInnerTabForm)
+class PortletSettingsTagsEditor(InnerAdminEditForm):
+ """Portlet settings for tags"""
+
+ prefix = 'tags_form.'
+
+ tab_label = _("Tags")
+ legend = None
+
+ fields = field.Fields(IPortletTagsSettings)
+
+ weight = 50
+
+
@adapter_config(name='themes', context=(IPortletThemesSettingsTarget, IPyAMSLayer, PortletSettingsEditor),
provides=IInnerTabForm)
class PortletSettingsThemesEditor(InnerAdminEditForm):
@@ -40,6 +55,21 @@
tab_label = _("Themes")
legend = None
- fields = field.Fields(Interface)
+ fields = field.Fields(IPortletThemesSettings)
+
+ weight = 52
+
- weight = 50
+@adapter_config(name='collections', context=(IPortletCollectionsSettingsTarget, IPyAMSLayer, PortletSettingsEditor),
+ provides=IInnerTabForm)
+class PortletSettingsCollectionsEditor(InnerAdminEditForm):
+ """Portlet settings for collections"""
+
+ prefix = 'collections_form.'
+
+ tab_label = _("Collections")
+ legend = None
+
+ fields = field.Fields(IPortletCollectionsSettings)
+
+ weight = 54
--- a/src/pyams_content/component/theme/zmi/templates/themes-info.pt Mon Jun 25 17:26:50 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-<div class="ams-widget">
- <header>
- <span tal:condition="view.widget_icon_class | nothing"
- class="widget-icon"><i tal:attributes="class view.widget_icon_class"></i>
- </span>
- <h2 tal:content="view.legend"></h2>
- <tal:var content="structure provider:pyams.widget_title" />
- <tal:var content="structure provider:pyams.toolbar" />
- </header>
- <div class="widget-body no-padding">
- <div tal:define="prefix provider:form_prefix"
- tal:replace="structure prefix">Form prefix</div>
- <tal:var content="structure provider:content_help" />
- <form method="post"
- data-async
- tal:attributes="id view.id;
- name view.name;
- action view.get_form_action();
- method view.method;
- enctype view.enctype;
- acceptCharset view.acceptCharset;
- accept view.accept;
- autocomplete view.autocomplete;
- class view.css_class;
- data-ams-data extension:object_data(view);
- data-ams-form-handler view.get_ajax_handler() | nothing;
- data-ams-form-options view.get_form_options() | nothing;
- data-ams-form-submit-target view.form_target | nothing;
- data-ams-form-download-target view.download_target | nothing;
- data-ams-warn-on-change view.warn_on_change;">
- <div class="modal-viewport">
- <fieldset>
- <div class="widgets-prefix"
- tal:define="prefix provider:widgets_prefix"
- tal:condition="prefix"
- tal:content="structure prefix">Widgets prefix</div>
- <tal:loop repeat="term view.top_terms">
- <div class="col col-xs-6 col-sm-4 col-md-4 col-lg-3">
- <div class="ams-widget" data-ams-widget-toggle-button="false"
- tal:attributes="id string:them_${repeat['term'].index()}">
- <header class="no-margin"><h2 tal:content="term.label"></h2></header>
- <div class="widget-body no-padding viewport-y viewport-200 viewport-x-none"
- style="height: 200px; width: calc(100% - 2px);">
- <tal:loop repeat="subterm view.get_subterms(term)">
- <div tal:define="padding (subterm.level - 1) * 20"
- tal:attributes="style string:padding-left: ${padding}px;; line-height: 1em;;">
- <input type="checkbox" name="form.widgets.themes:list"
- tal:attributes="id string:term_${subterm.label};
- value subterm.label;
- checked subterm.label in view.widgets['themes'].value" />
- <label tal:attributes="for string:term_${subterm.label}"
- tal:content="subterm.label"></label>
- </div>
- </tal:loop>
- </div>
- </div>
- </div>
- </tal:loop>
- <div class="widgets-suffix"
- tal:define="suffix provider:widgets_suffix"
- tal:condition="suffix"
- tal:content="structure suffix">Widgets suffix</div>
- <div class="subforms"
- tal:condition="view.subforms">
- <fieldset tal:define="title view.subforms_legend"
- tal:omit-tag="not:title">
- <legend tal:condition="title" tal:content="title" i18n:translate="">Title</legend>
- <tal:loop repeat="subform view.subforms">
- <tal:var replace="structure subform.render()" />
- </tal:loop>
- </fieldset>
- </div>
- <div class="tabforms"
- tal:condition="view.tabforms">
- <ul class="nav nav-tabs">
- <li tal:repeat="tabform view.tabforms"
- tal:attributes="class 'small {active} {errors}'.format(active='active' if repeat['tabform'].start() else '',
- errors='state-error' if tabform.widgets.errors else '')">
- <a data-toggle="tab"
- tal:attributes="href string:#${tabform.id}"
- tal:content="tabform.tab_label" i18n:translate="">Tab label</a>
- </li>
- </ul>
- <div class="tab-content">
- <div class="tab-pane fade in"
- tal:repeat="tabform view.tabforms"
- tal:attributes="id tabform.id;
- class 'tab-pane {active} fade in'.format(active='active' if repeat['tabform'].start() else '');"
- tal:content="structure tabform.render()"></div>
- </div>
- </div>
- </fieldset>
- </div>
- <footer tal:condition="view.actions and (view.is_dialog or (view.mode == 'input'))">
- <button tal:repeat="action view.actions.values()"
- tal:replace="structure action.render()">Action</button>
- </footer>
- </form>
- <div tal:define="prefix provider:form_suffix"
- tal:replace="structure prefix">Form suffix</div>
- </div>
-</div>
--- a/src/pyams_content/component/video/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/video/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -51,7 +51,7 @@
author = TextLine(title=_("Author"),
description=_("Name of document's author"),
- required=False)
+ required=True)
provider_name = Choice(title=_("Video provider"),
description=_("Name of external platform providing selected video"),
--- a/src/pyams_content/component/video/zmi/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/component/video/zmi/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -81,8 +81,6 @@
def updateWidgets(self, prefix=None):
super(ExternalVideoParagraphAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
if 'provider_name' in self.widgets:
widget = self.widgets['provider_name']
widget.object_data = {
@@ -142,7 +140,6 @@
def updateGroups(self):
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:
@@ -206,8 +203,6 @@
def updateWidgets(self, prefix=None):
super(ExternalVideoParagraphPropertiesEditForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
if 'provider_name' in self.widgets:
self.widgets['provider_name'].mode = DISPLAY_MODE
@@ -216,7 +211,6 @@
provider = self.context.get_provider()
if provider is not None:
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:
--- a/src/pyams_content/features/alert/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/alert/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -23,7 +23,7 @@
from pyams_form.interfaces.form import IFormContextPermissionChecker
# import packages
-from pyams_sequence.utility import get_reference_target
+from pyams_sequence.reference import get_reference_target
from pyams_utils.adapter import adapter_config, ContextAdapter
from pyams_utils.registry import query_utility
from pyams_utils.zodb import volatile_property
@@ -61,9 +61,16 @@
table = query_utility(IPictogramTable)
return table.get(self.pictogram_name)
- def get_target(self):
+ @volatile_property
+ def target(self):
return get_reference_target(self.reference)
+ def get_target(self, state=None):
+ if not state:
+ return self.target
+ else:
+ return get_reference_target(self.reference)
+
@adapter_config(context=IAlertItem, provides=IFormContextPermissionChecker)
class AlertitemPermissionChecker(ContextAdapter):
--- a/src/pyams_content/features/alert/container.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/alert/container.py Tue Jul 17 15:09:38 2018 +0200
@@ -46,7 +46,7 @@
index_object(value)
def get_visible_items(self):
- return filter(lambda x: IAlertItem(x).visible, self.values())
+ yield from filter(lambda x: IAlertItem(x).visible, self.values())
@adapter_config(context=IAlertTarget, provides=IAlertContainer)
--- a/src/pyams_content/features/alert/interfaces.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/alert/interfaces.py Tue Jul 17 15:09:38 2018 +0200
@@ -24,7 +24,7 @@
# import packages
from pyams_i18n.schema import I18nTextLineField
-from pyams_sequence.schema import InternalReference
+from pyams_sequence.schema import InternalReferenceField
from zope.container.constraints import containers, contains
from zope.interface import Interface, Attribute
from zope.schema import Bool, Choice, Datetime, Int
@@ -70,11 +70,11 @@
description=_("Alert message"),
required=True)
- reference = InternalReference(title=_("Internal reference"),
- description=_("Internal link target reference. You can search a reference using "
+ reference = InternalReferenceField(title=_("Internal reference"),
+ description=_("Internal link target reference. You can search a reference using "
"'+' followed by internal number, of by entering text matching "
"content title."),
- required=False)
+ required=False)
pictogram_name = Choice(title=_("Pictogram"),
description=_("Name of the pictogram to select"),
@@ -98,9 +98,6 @@
min=0,
default=48)
- def get_target(self):
- """Get internal reference target"""
-
class IAlertContainer(IOrderedContainer):
"""Alert container interface"""
--- a/src/pyams_content/features/footer/skin/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/footer/skin/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -14,16 +14,23 @@
# import standard library
+import logging
+logger = logging.getLogger('PyAMS (content)')
# import interfaces
from pyams_content.features.footer.interfaces import IFooterTarget, IFooterRenderer, IFooterSettings
from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME
+from pyams_portal.interfaces import PREVIEW_MODE
from pyams_skin.layer import IPyAMSLayer
+from pyams_utils.interfaces import ICacheKeyValue
from pyams_utils.interfaces.url import DISPLAY_CONTEXT
# import packages
+from pyams_cache.beaker import get_cache
from pyams_content.features.renderer.skin import BaseContentRenderer
+from pyams_portal.portlet import PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME, PORTLETS_CACHE_KEY
from pyams_utils.adapter import adapter_config
+from pyams_utils.traversing import get_parent
from pyramid.decorator import reify
from pyams_content import _
@@ -33,17 +40,41 @@
"""Base footer renderer"""
@reify
+ def settings_target(self):
+ context = self.request.annotations.get(DISPLAY_CONTEXT)
+ if context is None:
+ context = self.context
+ return get_parent(context, IFooterTarget)
+
+ @reify
def settings(self):
if self.settings_interface is None:
return None
- context = self.request.annotations.get(DISPLAY_CONTEXT)
- if context is None:
- context = self.context
- settings = IFooterSettings(context)
+ target = self.settings_target
+ settings = IFooterSettings(target)
while settings.inherit:
settings = IFooterSettings(settings.parent)
return settings.settings
+ def render(self):
+ preview_mode = self.request.annotations.get(PREVIEW_MODE, False)
+ if preview_mode:
+ return super(BaseFooterRenderer, self).render()
+ else:
+ portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME)
+ cache_key = PORTLETS_CACHE_KEY.format(portlet=self.name,
+ context=ICacheKeyValue(self.settings_target))
+ if self.context is not self.request.context: # display shared content
+ cache_key = '{0}::shared'.format(cache_key)
+ try:
+ result = portlets_cache.get_value(cache_key)
+ logger.debug("Retrieving header content from cache key {0}".format(cache_key))
+ except KeyError:
+ result = super(BaseFooterRenderer, self).render()
+ portlets_cache.set_value(cache_key, result)
+ logger.debug("Storing header content for cache key {0}".format(cache_key))
+ return result
+
@adapter_config(name=HIDDEN_RENDERER_NAME, context=(IFooterTarget, IPyAMSLayer), provides=IFooterRenderer)
class HiddenFooterRenderer(BaseFooterRenderer):
--- a/src/pyams_content/features/header/skin/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/header/skin/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -14,16 +14,24 @@
# import standard library
+import logging
+logger = logging.getLogger('PyAMS (content)')
# import interfaces
from pyams_content.features.header.interfaces import IHeaderTarget, IHeaderRenderer, IHeaderSettings
+from pyams_content.features.header.skin.interfaces import IHeaderClass
from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME
+from pyams_portal.interfaces import PREVIEW_MODE
from pyams_skin.layer import IPyAMSLayer
+from pyams_utils.interfaces import ICacheKeyValue
from pyams_utils.interfaces.url import DISPLAY_CONTEXT
# import packages
+from pyams_cache.beaker import get_cache
from pyams_content.features.renderer.skin import BaseContentRenderer
+from pyams_portal.portlet import PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME, PORTLETS_CACHE_KEY
from pyams_utils.adapter import adapter_config
+from pyams_utils.traversing import get_parent
from pyramid.decorator import reify
from pyams_content import _
@@ -33,17 +41,46 @@
"""Base header renderer"""
@reify
+ def settings_target(self):
+ context = self.request.annotations.get(DISPLAY_CONTEXT)
+ if context is None:
+ context = self.context
+ return get_parent(context, IHeaderTarget)
+
+ @reify
def settings(self):
if self.settings_interface is None:
return None
- context = self.request.annotations.get(DISPLAY_CONTEXT)
- if context is None:
- context = self.context
- settings = IHeaderSettings(context)
+ target = self.settings_target
+ settings = IHeaderSettings(target)
while settings.inherit:
settings = IHeaderSettings(settings.parent)
return settings.settings
+ @property
+ def main_header_class(self):
+ request = self.request
+ return request.registry.queryMultiAdapter((request.context, request), IHeaderClass, default='')
+
+ def render(self):
+ preview_mode = self.request.annotations.get(PREVIEW_MODE, False)
+ if preview_mode:
+ return super(BaseHeaderRenderer, self).render()
+ else:
+ portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME)
+ cache_key = PORTLETS_CACHE_KEY.format(portlet=self.name,
+ context=ICacheKeyValue(self.settings_target))
+ if self.context is not self.request.context: # display shared content
+ cache_key = '{0}::shared'.format(cache_key)
+ try:
+ result = portlets_cache.get_value(cache_key)
+ logger.debug("Retrieving header content from cache key {0}".format(cache_key))
+ except KeyError:
+ result = super(BaseHeaderRenderer, self).render()
+ portlets_cache.set_value(cache_key, result)
+ logger.debug("Storing header content for cache key {0}".format(cache_key))
+ return result
+
@adapter_config(name=HIDDEN_RENDERER_NAME, context=(IHeaderTarget, IPyAMSLayer), provides=IHeaderRenderer)
class HiddenHeaderRenderer(BaseHeaderRenderer):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/features/header/skin/interfaces.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,25 @@
+#
+# 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'
+
+
+# import standard library
+
+# import interfaces
+
+# import packages
+from zope.interface import Interface
+
+
+class IHeaderClass(Interface):
+ """Custom header CSS class"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/features/html/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,53 @@
+#
+# 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'
+
+
+# import standard library
+from pyquery import PyQuery
+
+# import interfaces
+from pyams_sequence.interfaces import ISequentialIntIds
+from pyams_utils.interfaces.text import IHTMLRenderer
+from pyams_utils.interfaces.url import DISPLAY_CONTEXT
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
+from pyramid.interfaces import IRequest
+
+# import packages
+from pyams_sequence.reference import get_reference_target
+from pyams_utils.adapter import adapter_config, ContextRequestAdapter
+from pyams_utils.registry import get_utility
+from pyams_utils.url import relative_url
+
+
+@adapter_config(name='oid_to_href', context=(str, IRequest), provides=IHTMLRenderer)
+class OIDHTMLRenderer(ContextRequestAdapter):
+ """An HTML renderer converting all "oid://" URLs to internal relative links"""
+
+ def render(self):
+ context = self.request.annotations.get(DISPLAY_CONTEXT, self.request.context)
+ html = PyQuery('<div>{0}</div>'.format(self.context))
+ sequence = get_utility(ISequentialIntIds)
+ for link in html('a[href]'):
+ href = link.attrib['href']
+ if href.startswith('oid://'):
+ oid = sequence.get_full_oid(href.split('//', 1)[1])
+ target = get_reference_target(oid, request=self.request)
+ if target is not None:
+ publication_info = IWorkflowPublicationInfo(target, None)
+ if (publication_info is not None) and publication_info.is_visible(self.request):
+ link.attrib['href'] = relative_url(target, self.request, context)
+ continue
+ # invalid link => remove href!
+ del link.attrib['href']
+ return html.html()
--- a/src/pyams_content/features/menu/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -20,6 +20,8 @@
# import packages
from pyams_content.component.association.container import AssociationContainer
+from pyams_sequence.reference import get_reference_target
+from pyams_utils.zodb import volatile_property
from zope.interface import implementer
from zope.schema.fieldproperty import FieldProperty
@@ -34,11 +36,22 @@
visible = FieldProperty(IMenu['visible'])
title = FieldProperty(IMenu['title'])
+ reference = FieldProperty(IMenu['reference'])
+
+ @volatile_property
+ def target(self):
+ return get_reference_target(self.reference)
+
+ def get_target(self, state=None):
+ if not state:
+ return self.target
+ else:
+ return get_reference_target(self.reference)
@implementer(IMenusContainer)
class MenusContainer(AssociationContainer):
"""Associations menus container"""
- def get_visible_items(self):
- return filter(lambda x: IMenu(x).visible, self.values())
+ def get_visible_items(self, request=None):
+ yield from filter(lambda x: IMenu(x).visible, self.values())
--- a/src/pyams_content/features/menu/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,10 +17,11 @@
# import interfaces
from pyams_content.component.association.interfaces import IAssociationContainer, IAssociationContainerTarget
-from zope.annotation.interfaces import IAttributeAnnotatable
+from pyams_sequence.interfaces import IInternalReference
# import packages
from pyams_i18n.schema import I18nTextLineField
+from pyams_sequence.schema import InternalReferenceField
from zope.container.constraints import containers, contains
from zope.interface import Interface
from zope.schema import Bool
@@ -50,7 +51,7 @@
"""Menu links container marker interface"""
-class IMenu(IMenuLinksContainer):
+class IMenu(IMenuLinksContainer, IInternalReference):
"""Menu container interface"""
containers('.IMenusContainer')
@@ -64,6 +65,10 @@
description=_("Displayed menu label"),
required=True)
+ reference = InternalReferenceField(title=_("Internal reference"),
+ description=_("Direct reference to menu target"),
+ required=False)
+
class IMenusContainer(IAssociationContainer):
"""Menus container interface"""
--- a/src/pyams_content/features/menu/portlet/navigation/zmi/double.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/portlet/navigation/zmi/double.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,6 @@
# import standard library
# import interfaces
-from pyams_content.component.illustration.interfaces import IIllustration, ILinkIllustration
from pyams_content.component.links.interfaces import IInternalLink
from pyams_content.features.menu.portlet.navigation.interfaces.double import IDoubleNavigationPortletSettings, \
IDoubleNavigationMenusContainer
@@ -89,16 +88,3 @@
return True
target = link.get_target()
return (target is not None) and IWorkflowPublicationInfo(target).is_published()
-
- @classmethod
- def get_link_illustration(cls, link):
- illustration = IIllustration(link, None)
- if (illustration is None) or not illustration.has_data():
- if IInternalLink.providedBy(link):
- target = link.get_target()
- if target is None:
- return
- illustration = ILinkIllustration(target, None)
- if (illustration is None) or not illustration.has_data():
- illustration = IIllustration(target, None)
- return illustration
--- a/src/pyams_content/features/menu/portlet/navigation/zmi/simple.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/portlet/navigation/zmi/simple.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,6 @@
# import standard library
# import interfaces
-from pyams_content.component.illustration.interfaces import IIllustration, ILinkIllustration
from pyams_content.component.links.interfaces import IInternalLink
from pyams_content.features.menu.portlet.navigation.interfaces.simple import ISimpleNavigationPortletSettings, \
ISimpleNavigationMenu
@@ -89,16 +88,3 @@
return True
target = link.get_target()
return (target is not None) and IWorkflowPublicationInfo(target).is_published()
-
- @classmethod
- def get_link_illustration(cls, link):
- illustration = IIllustration(link, None)
- if (illustration is None) or not illustration.has_data():
- if IInternalLink.providedBy(link):
- target = link.get_target()
- if target is None:
- return
- illustration = ILinkIllustration(target, None)
- if (illustration is None) or not illustration.has_data():
- illustration = IIllustration(target, None)
- return illustration
--- a/src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,22 +1,19 @@
-<div tal:define="settings view.settings">
+<div tal:define="settings view.settings" i18n:domain="pyams_content">
<strong tal:content="i18n:settings.title">Title</strong>
<tal:var define="subtitle i18n:settings.subtitle" condition="subtitle" content="subtitle" />
<ul>
- <li tal:repeat="menu settings.menus.get_visible_items()">
+ <li tal:repeat="menu settings.menus.get_visible_items(request)">
<span tal:content="i18n:menu.title">Title</span>
<ul>
- <li tal:repeat="link menu.get_visible_items()"
- tal:attributes="illustration view.get_link_illustration(link);">
+ <li tal:repeat="link menu.get_visible_items(request)">
<i class="fa fa-fw fa-eye-slash text-danger hint opaque align-base"
tal:condition="not:view.get_link_status(link)"
title="Link target is not published!" i18n:attributes="title"></i>
<i class="fa fa-fw fa-file-image-o text-danger hint opaque align-base"
- tal:define="illustration view.get_link_illustration(link)"
+ tal:define="illustration tales:pyams_illustration(link)"
tal:condition="not:illustration and illustration.has_data()"
- title="Link has no illustration"></i>
+ title="Link has no illustration" i18n:attributes="title"></i>
<tal:var define="info view.get_link_info(link)">
- <span tal:content="info.user_title">User title</span>
- –
<span tal:content="info.inner_title">Inner title</span>
</tal:var>
</li>
--- a/src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt Tue Jul 17 15:09:38 2018 +0200
@@ -2,18 +2,15 @@
<strong tal:content="i18n:settings.title">Title</strong>
<tal:var define="subtitle i18n:settings.subtitle" condition="subtitle" content="subtitle" />
<ul>
- <li tal:repeat="link settings.links.get_visible_items()"
- tal:attributes="illustration view.get_link_illustration(link);">
+ <li tal:repeat="link settings.links.get_visible_items(request)">
<i class="fa fa-fw fa-eye-slash text-danger hint opaque align-base"
tal:condition="not:view.get_link_status(link)"
title="Link target is not published!" i18n:attributes="title"></i>
<i class="fa fa-fw fa-file-image-o text-danger hint opaque align-base"
- tal:define="illustration view.get_link_illustration(link)"
+ tal:define="illustration tales:pyams_illustration(link)"
tal:condition="not:illustration and illustration.has_data()"
title="Link has no illustration" i18n:attributes="title"></i>
<tal:var define="info view.get_link_info(link)">
- <span tal:content="info.user_title">User title</span>
- –
<span tal:content="info.inner_title">Inner title</span>
</tal:var>
</li>
--- a/src/pyams_content/features/menu/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/menu/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -41,7 +41,7 @@
from pyams_skin.table import BaseTable, SorterColumn, VisibilitySwitcherColumn, I18nColumn, TrashColumn, NameColumn, \
get_table_id
from pyams_skin.viewlet.toolbar import ToolbarAction
-from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextAdapter
+from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextAdapter, NullAdapter
from pyams_utils.traversing import get_parent
from pyams_utils.url import absolute_url
from pyams_viewlet.viewlet import viewlet_config
@@ -92,7 +92,7 @@
legend = _("Add new menu")
icon_css_class = 'fa fa-fw fa-bars'
- fields = field.Fields(IMenu).select('title')
+ fields = field.Fields(IMenu).select('title', 'reference')
edit_permission = MANAGE_TEMPLATE_PERMISSION
def create(self, data):
@@ -125,7 +125,7 @@
dialog_class = 'modal-large'
- fields = field.Fields(IMenu).select('title')
+ fields = field.Fields(IMenu).select('title', 'reference')
edit_permission = MANAGE_TEMPLATE_PERMISSION
def get_ajax_output(self, changes):
@@ -487,3 +487,13 @@
"""Menu external link properties edit form"""
edit_permission = None # managed by IFormContextPermissionChecker adapter
+
+
+#
+# Custom adapters
+#
+
+@adapter_config(name='size', context=(IMenu, IPyAMSLayer, MenuLinksTable), provides=IColumn)
+@adapter_config(name='size', context=(IMenuLinksContainerTarget, IPyAMSLayer, LinksTable), provides=IColumn)
+class MenuLinksTableSizeColumn(NullAdapter):
+ """Menu links table size column"""
--- a/src/pyams_content/features/preview/zmi/templates/preview.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/preview/zmi/templates/preview.pt Tue Jul 17 15:09:38 2018 +0200
@@ -13,8 +13,8 @@
<i class="fa fa-fw fa-times-circle"></i>
</button>
<h3 class="modal-title"
- tal:define="config extension:configuration;">
- <span class="title" tal:content="view.title | context.title | config.title">Title</span>
+ tal:define="config tales:configuration;">
+ <span class="title" tal:content="structure view.title | context.title | config.title">Title</span>
</h3>
<tal:var replace="structure provider:form_toolbar" />
</tal:if>
@@ -24,7 +24,7 @@
<tal:if condition="len(langs) == 1">
<div class="margin-top-10">
<iframe src="preview.html" frameborder="0" style="width: 100%;"
- tal:define="url extension:absolute_url(context, 'preview.html')"
+ tal:define="url tales:absolute_url(context, 'preview.html')"
tal:attributes="src string:${url}?lang=${langs[0]}"
onload="this.style.height = (jQuery(parent.window).height() - 150) + 'px'"></iframe>
</div>
@@ -35,7 +35,7 @@
<li tal:define="active python:'active' if repeat['lang'].start() else ''"
tal:attributes="class string:small ${active}">
<a data-toggle="tab" class="xsmall"
- tal:define="url extension:absolute_url(context, 'preview.html')"
+ tal:define="url tales:absolute_url(context, 'preview.html')"
tal:attributes="href string:#preview-${lang}">
<img tal:attributes="src string:/--static--/pyams_i18n/img/flags/${lang}.png" />
</a>
@@ -48,7 +48,7 @@
tal:attributes="class string:clearfix tab-pane ${active} fade in padding-5;
id string:preview-${lang};">
<iframe src="preview.html" frameborder="0" style="width: 100%;"
- tal:define="url extension:absolute_url(context, 'preview.html')"
+ tal:define="url tales:absolute_url(context, 'preview.html')"
tal:attributes="src string:${url}?lang=${lang}"
onload="this.style.height = (jQuery(parent.window).height() - 150) + 'px'"></iframe>
</div>
--- a/src/pyams_content/features/renderer/zmi/templates/renderer-input.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/renderer/zmi/templates/renderer-input.pt Tue Jul 17 15:09:38 2018 +0200
@@ -4,7 +4,7 @@
title="Edit renderer properties" i18n:attributes="title"
data-ams-hint-gravity="se" data-toggle="modal"
tal:condition="render"
- tal:attributes="data-ams-url extension:absolute_url(context, 'renderer-properties.html');"></i>
+ tal:attributes="data-ams-url tales:absolute_url(context, 'renderer-properties.html');"></i>
<i class="icon-append fa fa-fw fa-pencil-square-o opacity-25"
tal:condition="not:render"></i>
</tal:var>
@@ -33,7 +33,7 @@
onchange view/onchange;
multiple view/multiple;
size view/size;
- data-ams-data extension:object_data(view);'>
+ data-ams-data tales:object_data(view);'>
<option tal:repeat="entry view/items"
tal:attributes="value entry/value;
selected python:entry['value'] in view.value;"
--- a/src/pyams_content/features/review/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/review/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -111,7 +111,6 @@
def updateWidgets(self, prefix=None):
super(WfSharedContentReviewForm, self).updateWidgets(prefix)
if 'comment' in self.widgets:
- self.widgets['comment'].widget_css_class = 'textarea'
self.widgets['comment'].addClass('height-100')
def updateActions(self):
--- a/src/pyams_content/features/review/zmi/templates/review-add-comment.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/review/zmi/templates/review-add-comment.pt Tue Jul 17 15:09:38 2018 +0200
@@ -2,7 +2,7 @@
tal:attributes="class 'message {0}'.format(comment.comment_type)">
<tal:var define="avatar options['profile'].avatar">
<tal:if condition="avatar">
- <img tal:attributes="src extension:absolute_url(avatar, '++thumb++square:32x32.png')" />
+ <img tal:attributes="src tales:absolute_url(avatar, '++thumb++square:32x32.png')" />
</tal:if>
<tal:if condition="not:avatar">
<i class="fa fa-lg fa-user img"></i>
@@ -21,7 +21,7 @@
</tal:if>
<time class="margin-left-10" i18n:translate="">just now</time>
</a>
- <tal:var content="structure extension:html(comment.comment)" />
+ <tal:var content="structure tales:html(comment.comment)" />
</span>
</tal:var>
</li>
--- a/src/pyams_content/features/review/zmi/templates/review-comments-json.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/review/zmi/templates/review-comments-json.pt Tue Jul 17 15:09:38 2018 +0200
@@ -3,7 +3,7 @@
<tal:var define="principal view.get_principal(comment.owner);
avatar view.get_avatar(principal);">
<tal:if condition="avatar">
- <img tal:attributes="src extension:absolute_url(avatar, '++thumb++square:32x32.png')" />
+ <img tal:attributes="src tales:absolute_url(avatar, '++thumb++square:32x32.png')" />
</tal:if>
<tal:if condition="not:avatar">
<i class="fa fa-lg fa-user img"></i>
@@ -30,7 +30,7 @@
i18n:translate="">Selected reviewers:</span>
<tal:var content="comment.reviewers" /><br />
</div>
- <tal:var content="structure extension:html(comment.comment)" />
+ <tal:var content="structure tales:html(comment.comment)" />
</span>
</tal:var>
</li>
--- a/src/pyams_content/features/review/zmi/templates/review-comments.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/review/zmi/templates/review-comments.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,7 +1,7 @@
<div class="ams-widget comments" i18n:domain="pyams_content"
data-ams-plugins="pyams_content"
- tal:attributes="data-ams-plugin-pyams_content-src extension:resource_path('pyams_content.skin:pyams_content');
- data-ams-plugin-pyams_content-css extension:resource_path('pyams_content.skin:pyams_content_css');"
+ tal:attributes="data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.skin:pyams_content');
+ data-ams-plugin-pyams_content-css tales:resource_path('pyams_content.skin:pyams_content_css');"
data-ams-plugin-pyams_content-async="false"
data-ams-callback="PyAMS_content.review.initComments">
<header>
@@ -20,7 +20,7 @@
<tal:var define="principal view.get_principal(comment.owner);
avatar view.get_avatar(principal);">
<tal:if condition="avatar">
- <img tal:attributes="src extension:absolute_url(avatar, '++thumb++square:32x32.png')" />
+ <img tal:attributes="src tales:absolute_url(avatar, '++thumb++square:32x32.png')" />
</tal:if>
<tal:if condition="not:avatar">
<i class="fa fa-lg fa-user img"></i>
@@ -47,7 +47,7 @@
i18n:translate="">Selected reviewers:</span>
<tal:var content="comment.reviewers" />
</div>
- <tal:var content="structure extension:html(comment.comment)" />
+ <tal:var content="structure tales:html(comment.comment)" />
</span>
</tal:var>
</li>
@@ -56,7 +56,7 @@
<div class="chat-footer no-padding">
<form method="post" data-async
data-ams-form-data-init-callback="PyAMS_content.review.initCommentData"
- tal:attributes="data-ams-form-handler extension:absolute_url(context, 'add-review-comment.json')">
+ tal:attributes="data-ams-form-handler tales:absolute_url(context, 'add-review-comment.json')">
<fieldset class="textarea-div no-margin">
<div class="btn btn-xs btn-success margin-left-10 margin-top-5"
data-ams-url="PyAMS_content.review.addCommentAction">
--- a/src/pyams_content/features/review/zmi/templates/review-notification.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/features/review/zmi/templates/review-notification.pt Tue Jul 17 15:09:38 2018 +0200
@@ -39,7 +39,7 @@
</p>
<pre style="padding: 5px 20px;" tal:content="options['comment']">comment</pre>
<p i18n:translate="">To review and comment this publication, please use the following link: <a i18n:name="target"
- tal:attributes="href extension:absolute_url(context, 'admin')"
+ tal:attributes="href tales:absolute_url(context, 'admin')"
tal:content="i18n:context.title"></a>.</p>
<p i18n:translate="">After reading this content, please use the « Comments » menu entry.</p>
<p i18n:translate="">If you don't want to reply to this request, please contact
--- a/src/pyams_content/generations/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/generations/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,10 +19,12 @@
# import interfaces
from pyams_catalog.interfaces import MINUTE_RESOLUTION, DATE_RESOLUTION
-from pyams_content.component.theme import IThemesInfo
-from pyams_content.interfaces import IBaseContent
+from pyams_content.component.theme import ITagsInfo, IThemesInfo, ICollectionsInfo
+from pyams_content.interfaces import IBaseContent, WEBMASTER_ROLE, OWNER_ROLE, PILOT_ROLE, MANAGER_ROLE, \
+ CONTRIBUTOR_ROLE
from pyams_content.root.interfaces import ISiteRootToolsConfiguration
from pyams_content.shared.common.interfaces import IWfSharedContent
+from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
from pyams_content.shared.form.interfaces import IFormsManagerFactory
from pyams_content.shared.imagemap.interfaces import IImageMapManagerFactory
from pyams_content.shared.logo.interfaces import ILogosManagerFactory
@@ -95,11 +97,13 @@
REQUIRED_INDEXES = [
('content_type', FieldIndexWithInterface, {'interface': IBaseContent,
'discriminator': 'content_type'}),
- ('role:owner', PrincipalsRoleIndex, {'role_id': 'pyams.Owner'}),
- ('role:pilot', PrincipalsRoleIndex, {'role_id': 'pyams.Pilot'}),
- ('role:manager', PrincipalsRoleIndex, {'role_id': 'pyams.Manager'}),
- ('role:contributor', PrincipalsRoleIndex, {'role_id': 'pyams.Contributor'}),
- ('role:webmaster', PrincipalsRoleIndex, {'role_id': 'pyams.Webmaster'}),
+ ('data_type', FieldIndexWithInterface, {'interface': IWfTypedSharedContent,
+ 'discriminator': 'data_type'}),
+ ('role:owner', PrincipalsRoleIndex, {'role_id': OWNER_ROLE}),
+ ('role:pilot', PrincipalsRoleIndex, {'role_id': PILOT_ROLE}),
+ ('role:manager', PrincipalsRoleIndex, {'role_id': MANAGER_ROLE}),
+ ('role:contributor', PrincipalsRoleIndex, {'role_id': CONTRIBUTOR_ROLE}),
+ ('role:webmaster', PrincipalsRoleIndex, {'role_id': WEBMASTER_ROLE}),
('parents', KeywordIndexWithInterface, {'interface': IPathElements,
'discriminator': 'parents'}),
('workflow_state', FieldIndexWithInterface, {'interface': IWorkflowState,
@@ -129,6 +133,10 @@
('first_publication_date', DatetimeIndexWithInterface, {'interface': IWorkflowPublicationInfo,
'discriminator': 'first_publication_date',
'resolution': MINUTE_RESOLUTION}),
+ ('tags', ThesaurusTermsListFieldIndex, {'interface': ITagsInfo,
+ 'discriminator': 'tags',
+ 'include_parents': False,
+ 'include_synonyms': False}),
('themes', ThesaurusTermsListFieldIndex, {'interface': IThemesInfo,
'discriminator': 'themes',
'include_parents': False,
@@ -140,7 +148,11 @@
('themes_all', ThesaurusTermsListFieldIndex, {'interface': IThemesInfo,
'discriminator': 'themes',
'include_parents': True,
- 'include_synonyms': True})
+ 'include_synonyms': True}),
+ ('collections', ThesaurusTermsListFieldIndex, {'interface': ICollectionsInfo,
+ 'discriminator': 'collections',
+ 'include_parents': False,
+ 'include_synonyms': False})
]
--- a/src/pyams_content/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -93,7 +93,9 @@
"""Base content interface"""
__name__ = TextLine(title=_("Unique key"),
- description=_("WARNING: this key can't be modified after creation!!!"),
+ description=_("WARNING: this key can't be modified after creation!!! Spaces, "
+ "uppercase letters ou accentuated characters will be replaced "
+ "automatically."),
required=True)
title = I18nTextLineField(title=_("Title"),
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 Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po Tue Jul 17 15:09:38 2018 +0200
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-06-23 16:27+0200\n"
+"POT-Creation-Date: 2018-07-17 14:54+0200\n"
"PO-Revision-Date: 2015-09-10 10:42+0200\n"
"Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
"Language-Team: French\n"
@@ -45,822 +45,141 @@
msgstr "Publier le contenu"
#: src/pyams_content/__init__.py:53
+msgid "System manager (role)"
+msgstr "Administrateur (rôle)"
+
+#: src/pyams_content/__init__.py:60
msgid "Webmaster (role)"
msgstr "Webmestre (rôle)"
-#: src/pyams_content/__init__.py:62
+#: src/pyams_content/__init__.py:71
msgid "Pilot (role)"
msgstr "Pilote (rôle)"
-#: src/pyams_content/__init__.py:70
+#: src/pyams_content/__init__.py:81
msgid "Manager (role)"
msgstr "Responsable (rôle)"
-#: src/pyams_content/__init__.py:77
+#: src/pyams_content/__init__.py:90
msgid "Owner (role)"
msgstr "Propriétaire (rôle)"
-#: src/pyams_content/__init__.py:82
+#: src/pyams_content/__init__.py:95
msgid "Contributor (role)"
msgstr "Contributeur (rôle)"
-#: src/pyams_content/__init__.py:90
+#: src/pyams_content/__init__.py:106
msgid "Reader (role)"
msgstr "Relecteur (rôle)"
-#: src/pyams_content/__init__.py:96
+#: src/pyams_content/__init__.py:116
msgid "Operator (role)"
msgstr "Opérateur (rôle)"
-#: src/pyams_content/__init__.py:100
+#: src/pyams_content/__init__.py:121
msgid "Guest user (role)"
msgstr "Invité (rôle)"
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:44
-#: src/pyams_content/component/extfile/__init__.py:223
-#: src/pyams_content/component/extfile/__init__.py:238
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:66
-#: src/pyams_content/shared/logo/interfaces/__init__.py:46
-msgid "Image"
-msgstr "Image"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:45
-msgid "Pictogram content"
-msgstr "Utilisez le bouton \"Parcourir\" pour modifier le contenu de l'image"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:48
-#: src/pyams_content/component/gallery/interfaces/__init__.py:54
-#: src/pyams_content/component/illustration/interfaces/__init__.py:56
-msgid "Accessibility title"
-msgstr "Alternative (accessibilité)"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:49
-#: src/pyams_content/component/illustration/interfaces/__init__.py:57
-msgid "Alternate title used to describe image content"
-msgstr ""
-"Ce texte est affiché lorsque le contenu ne peut être téléchargé ou affiché ; "
-"il est aussi utilisé par les navigateurs des personnes souffrant de "
-"déficiences visuelles. Il doit donc décrire le contenu, pour se conformer "
-"aux normes d'accessibilité."
-
-#. Default: Header
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:52
-msgid "pictogram-header"
-msgstr "En-tête par défaut"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:53
-msgid "Default header associated with this pictogram"
-msgstr "En-tête par défaut associé à ce pictogramme"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:73
-#: src/pyams_content/reference/pictograms/zmi/manager.py:63
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
-msgid "Selected pictograms"
-msgstr "Pictogrammes sélectionnés"
-
-#: src/pyams_content/reference/pictograms/interfaces/__init__.py:74
-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/reference/pictograms/zmi/__init__.py:59
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:304
-msgid "Add pictogram"
-msgstr "Ajouter un pictogramme"
-
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:71
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:317
-msgid "Add new pictogram"
-msgstr "Ajout d'un pictogramme"
-
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:95
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:359
-msgid "Edit pictogram properties"
-msgstr "Propriétés du pictogramme"
-
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:150
-#: src/pyams_content/interfaces/__init__.py:99
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
-#: src/pyams_content/component/gallery/interfaces/__init__.py:94
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:45
-#: src/pyams_content/component/paragraph/zmi/container.py:223
-#: src/pyams_content/component/paragraph/zmi/milestone.py:231
-#: src/pyams_content/component/links/zmi/reverse.py:73
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
-#: src/pyams_content/shared/imagemap/zmi/container.py:123
-#: src/pyams_content/shared/common/zmi/dashboard.py:109
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:188
-#: src/pyams_content/shared/site/zmi/folder.py:70
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:188
-msgid "Title"
-msgstr "Titre"
-
-#: src/pyams_content/reference/pictograms/zmi/__init__.py:169
-#: src/pyams_content/reference/pictograms/zmi/widget.py:55
-msgid "Default header: --"
-msgstr "En-tête par défaut : --"
-
-#: src/pyams_content/reference/pictograms/zmi/manager.py:51
-msgid "Pictograms selection..."
-msgstr "Sélection de pictogrammes"
-
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
-msgid "Available pictograms"
-msgstr "Pictogrammes disponibles"
-
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
-#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
-msgid "Display pictogram properties"
-msgstr "Propriétés du pictogramme"
-
-#: src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
-msgid "Default header: ${header}"
-msgstr "En-tête par défaut : ${header}"
-
-#: src/pyams_content/reference/zmi/__init__.py:51
-msgid "References"
-msgstr "Tables de réf."
-
-#: src/pyams_content/reference/zmi/__init__.py:69
-#: src/pyams_content/reference/zmi/table.py:129
-msgid "References tables"
-msgstr "Tables de références"
-
-#: src/pyams_content/reference/zmi/table.py:73
-msgid "Contents"
-msgstr "Contenu"
-
-#: src/pyams_content/reference/zmi/table.py:83
-msgid "Table contents"
-msgstr "Contenu de la table"
-
-#: src/pyams_content/reference/zmi/table.py:143
-msgid "Properties..."
-msgstr "Propriétés"
-
-#: src/pyams_content/reference/zmi/table.py:157
-msgid "Edit table properties"
-msgstr "Propriétés de la table"
-
-#: src/pyams_content/reference/zmi/table.py:167
-msgid "Table management"
-msgstr "Gérer cette table"
-
-#: src/pyams_content/interfaces/__init__.py:95
-msgid "Unique key"
-msgstr "Clé unique"
-
-#: src/pyams_content/interfaces/__init__.py:96
-msgid "WARNING: this key can't be modified after creation!!!"
-msgstr "ATTENTION : cette clé ne pourra plus être modifiée !!!"
-
-#: src/pyams_content/interfaces/__init__.py:100
-#: src/pyams_content/shared/site/zmi/folder.py:71
-msgid "Visible label used to display content"
-msgstr "Le titre présenté aux internautes"
-
-#: src/pyams_content/interfaces/__init__.py:103
-msgid "Short name"
-msgstr "Fil d'Ariane"
-
-#: src/pyams_content/interfaces/__init__.py:104
-msgid "Short name used in breadcrumbs"
-msgstr "Libellé utilisé dans le fil d'Ariane"
-
-#: src/pyams_content/interfaces/__init__.py:111
-#: src/pyams_content/features/review/interfaces.py:74
-#: src/pyams_content/shared/view/interfaces/__init__.py:40
-msgid "Creation date"
-msgstr "Date de création"
-
-#: src/pyams_content/interfaces/__init__.py:115
-msgid "Modification date"
-msgstr "Dernière modification apportée"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:46
-msgid "Shared sites"
-msgstr "Sites et blogs"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:67
-msgid "Shared contents"
-msgstr "Gabarits"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:90
-msgid "Shared tools"
-msgstr "Outils"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:113
-msgid "My roles"
-msgstr "Mes rôles"
-
-#: src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
-msgid "Create new content"
-msgstr "Créer un nouveau contenu"
-
-#: src/pyams_content/profile/interfaces/__init__.py:33
-msgid "User favorites"
-msgstr "Favoris de l'utilisateur"
-
-#: src/pyams_content/profile/interfaces/__init__.py:34
-msgid "List of internal numbers of shared contents stored for quick access"
-msgstr "Liste des numéros internes des contenus mémorisés pour un accès rapide"
-
-#: src/pyams_content/profile/interfaces/__init__.py:37
-msgid "Default table length"
-msgstr "Longueur des tableaux"
-
-#: src/pyams_content/profile/interfaces/__init__.py:38
-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/profile/zmi/__init__.py:42
-msgid "Admin. profile"
-msgstr "Profil intervenant"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:58
-#: src/pyams_content/features/alert/interfaces.py:54
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:41
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:40
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:44
-#: src/pyams_content/component/association/interfaces/__init__.py:42
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:39
-#: src/pyams_content/shared/form/interfaces/__init__.py:87
-#: src/pyams_content/shared/site/interfaces/__init__.py:117
-msgid "Visible?"
-msgstr "Visible ?"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:59
-#: src/pyams_content/component/association/interfaces/__init__.py:43
-msgid "Is this item visible in front-office?"
-msgstr "Si 'non', ce lien ne sera pas présenté aux internautes"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:63
-msgid "Menu title"
-msgstr "Libellé"
-
-#: src/pyams_content/features/menu/interfaces/__init__.py:64
-msgid "Displayed menu label"
-msgstr "Libellé du menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:81
-msgid "Add menu..."
-msgstr "Ajouter un menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:92
-msgid "Add new menu"
-msgstr "Ajout d'un menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:123
-msgid "Edit menu properties"
-msgstr "Propriétés du menu"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:208
-#: src/pyams_content/shared/form/interfaces/__init__.py:62
-#: src/pyams_content/shared/form/zmi/field.py:159
-#: src/pyams_content/shared/common/interfaces/types.py:40
-#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
-#: src/pyams_content/shared/common/zmi/templates/check-input.pt:34
-msgid "Label"
-msgstr "Libellé"
-
-#: src/pyams_content/features/menu/zmi/__init__.py:110
-msgid "Menu was correctly added."
-msgstr "Le menu a été ajouté."
-
-#: src/pyams_content/features/menu/zmi/__init__.py:388
-msgid "Link was correctly added."
-msgstr "Le lien a été ajouté."
-
-#: src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
-msgid "Click to see menu items"
-msgstr "Montrer ou cacher les éléments du menu"
-
-#: src/pyams_content/features/menu/portlet/navigation/simple.py:68
-msgid "Simple navigation"
-msgstr "Navigation à un niveau"
-
-#: src/pyams_content/features/menu/portlet/navigation/double.py:68
-msgid "Double navigation"
-msgstr "Navigation à deux niveaux"
-
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
-msgid "Portlet main title"
-msgstr "Titre du composant"
-
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:35
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:35
-msgid "Subtitle"
-msgstr "Sous-titre"
-
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:36
-#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:36
-msgid "Portlet subtitle"
-msgstr "Sous-titre du composant"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:70
-msgid "Navigation links"
-msgstr "Liens de navigation"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/double.py:70
-msgid "Navigation menus"
-msgstr "Menus de navigation"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:9
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:12
-#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:27
-msgid "Link target is not published!"
-msgstr "Le contenu ciblé n'est pas publié"
-
-#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:13
-msgid "Link has no illustration"
-msgstr "Le lien n'a pas d'illustration"
-
-#: src/pyams_content/features/checker/interfaces.py:27
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">no value</span>"
-msgstr " - {field} : <span class=\"text-danger\">non renseigné</span>"
-
-#: src/pyams_content/features/checker/interfaces.py:28
-#, python-format
-msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
-msgstr " - {field} ({lang}) : <span class=\"text-danger\">non renseigné</span>"
-
-#: src/pyams_content/features/checker/interfaces.py:29
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">{message}</span>"
-msgstr " - {field} : <span class=\"text-danger\">{message}</span>"
-
-#: src/pyams_content/features/checker/zmi/__init__.py:43
-#: src/pyams_content/shared/common/zmi/templates/check-input.pt:39
-msgid "Audit"
-msgstr "Audit"
-
-#: src/pyams_content/features/checker/zmi/__init__.py:58
-msgid "Content check"
-msgstr "Audit du contenu"
-
-#: src/pyams_content/features/checker/zmi/__init__.py:82
-msgid "No checker available. This content is clean!"
-msgstr "Pas de vérificateur disponible. Ce contenu est propre !"
-
-#: src/pyams_content/features/checker/zmi/__init__.py:78
-#, python-format
-msgid "{0}:"
-msgstr "{0} :"
-
-#: src/pyams_content/features/alert/interfaces.py:40
-msgid "Success"
-msgstr "Levée d'alerte"
-
-#: src/pyams_content/features/alert/interfaces.py:41
-msgid "Information"
-msgstr "Information"
-
-#: src/pyams_content/features/alert/interfaces.py:42
-msgid "Warning"
-msgstr "Avertissement"
-
-#: src/pyams_content/features/alert/interfaces.py:43
-msgid "Danger"
-msgstr "Danger !"
-
-#: src/pyams_content/features/alert/interfaces.py:55
-msgid "Is this alert visible in front-office?"
-msgstr "Si 'non', cette alerte ne sera pas présentée aux internautes"
-
-#: src/pyams_content/features/alert/interfaces.py:59
-msgid "Alert gravity"
-msgstr "Niveau de gravité"
-
-#: src/pyams_content/features/alert/interfaces.py:60
-msgid "Alert gravity will affect rendered alert style"
-msgstr "Le niveau de gravité choisi affectera le style de rendu de l'alerte"
-
-#. Default: Heading
-#: src/pyams_content/features/alert/interfaces.py:65
-#: src/pyams_content/features/alert/zmi/container.py:157
-msgid "alert-header"
-msgstr "En-tête"
-
-#: src/pyams_content/features/alert/interfaces.py:66
-msgid "Short alert header (Alert, Important...)"
-msgstr "En-tête de l'alerte (« Alerte », « Important », « Prudence »...)"
-
-#: src/pyams_content/features/alert/interfaces.py:69
-#: src/pyams_content/features/alert/zmi/container.py:169
-msgid "Message"
-msgstr "Message"
-
-#: src/pyams_content/features/alert/interfaces.py:70
-msgid "Alert message"
-msgstr "Le message d'alerte doit être assez court et explicite"
-
-#: src/pyams_content/features/alert/interfaces.py:73
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:95
-msgid "Internal reference"
-msgstr "Référence interne"
-
-#: src/pyams_content/features/alert/interfaces.py:74
-msgid ""
-"Internal link target reference. You can search a reference using '+' "
-"followed by internal number, of by entering text matching content title."
-msgstr ""
-"Référence interne vers la cible du lien. Vous pouvez la rechercher par des "
-"mots de son titre, ou par son numéro interne (précédé d'un '+') ; le titre "
-"d'origine peut être modifié en utilisant le titre de substitution."
-
-#: src/pyams_content/features/alert/interfaces.py:79
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:46
-#: src/pyams_content/component/links/interfaces/__init__.py:43
-#: src/pyams_content/shared/common/interfaces/types.py:68
-msgid "Pictogram"
-msgstr "Pictogramme"
-
-#: src/pyams_content/features/alert/interfaces.py:80
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:47
-msgid "Name of the pictogram to select"
-msgstr "Sélection du pictogramme à afficher"
-
-#: src/pyams_content/features/alert/interfaces.py:86
-msgid "Display start date"
-msgstr "Date d'affichage"
-
-#: src/pyams_content/features/alert/interfaces.py:87
-msgid "First date at which alert should be displayed"
-msgstr ""
-"Première date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
-"qu'elle soit affichée immédiatement."
-
-#: src/pyams_content/features/alert/interfaces.py:90
-msgid "Display end date"
-msgstr "Date de retrait"
-
-#: src/pyams_content/features/alert/interfaces.py:91
-msgid "Last date at which alert should be displayed"
-msgstr ""
-"Dernière date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
-"qu'elle ne soit pas retirée."
-
-#: src/pyams_content/features/alert/interfaces.py:94
-msgid "Maximum interval"
-msgstr "Intervalle d'affichage"
-
-#: src/pyams_content/features/alert/interfaces.py:95
-msgid ""
-"Maximum interval between alert displays on a given device, given in hours; "
-"set to 0 to always display the alert"
-msgstr ""
-"Cet intervalle est donné en heures ; passé ce délai, pour un internaute "
-"donné, l'alerte apparaîtra à nouveau. Si aucun intervalle n'est indiqué, "
-"l'alerte s'affichera en permanence."
-
-#: src/pyams_content/features/alert/zmi/container.py:55
-msgid "Alerts"
-msgstr "Alertes"
-
-#: src/pyams_content/features/alert/zmi/container.py:191
-msgid "Alert list"
-msgstr "Liste des alertes"
-
-#: src/pyams_content/features/alert/zmi/container.py:90
-msgid "No currently defined alert."
-msgstr "Aucune alerte n'est définie actuellement."
-
-#: src/pyams_content/features/alert/zmi/__init__.py:45
-msgid "Add alert"
-msgstr "Ajouter une alerte"
-
-#: 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:79
-msgid "Edit alert properties"
-msgstr "Propriétés de l'alerte"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:45
-#: src/pyams_content/component/paragraph/zmi/__init__.py:207
-#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
-msgid "Preview"
-msgstr "Aperçu"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:62
-msgid "Content preview"
-msgstr "Aperçu du contenu"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:67
-#, python-format
-msgid "{title} ({preview})"
-msgstr "{title} ({preview})"
-
-#: src/pyams_content/features/preview/zmi/__init__.py:68
-msgid "preview"
-msgstr "aperçu"
-
-#: src/pyams_content/features/renderer/skin/__init__.py:67
-msgid "Hidden content"
-msgstr "Contenu non affiché"
-
-#: src/pyams_content/features/renderer/zmi/__init__.py:70
-#: 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/header/interfaces/__init__.py:39
-#: src/pyams_content/component/paragraph/interfaces/header.py:43
-msgid "Header template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/features/header/interfaces/__init__.py:40
-#: src/pyams_content/component/paragraph/interfaces/header.py:44
-msgid "Presentation template used for this header"
-msgstr "Mode de rendu utilisé par ce chapô"
-
-#: src/pyams_content/features/header/skin/__init__.py:53
-msgid "Hidden header"
-msgstr "Ne pas afficher d'en-tête de pages"
-
-#: src/pyams_content/features/header/zmi/__init__.py:66
-msgid "Page header"
-msgstr "En-tête de pages"
-
-#: src/pyams_content/features/header/zmi/__init__.py:84
-msgid "Edit header settings"
-msgstr "Paramétrage des en-têtes de pages"
-
-#: src/pyams_content/features/header/zmi/__init__.py:161
-msgid ""
-"WARNING: Header properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-"ATTENTION : les propriétés de l'en-tête sont enregistrées automatiquement "
-"lorsque vous modifiez le mode d'héritage !!"
-
-#: src/pyams_content/features/header/zmi/__init__.py:229
-msgid "Header renderer settings"
-msgstr "Propriétés du mode de rendu"
-
-#: src/pyams_content/features/header/zmi/__init__.py:113
-msgid "Don't inherit parent header"
-msgstr "Ne pas hériter de l'en-tête de pages du parent"
-
-#: src/pyams_content/features/footer/interfaces/__init__.py:39
-msgid "Footer template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/features/footer/interfaces/__init__.py:40
-msgid "Presentation template used for this footer"
-msgstr "Mode de rendu utilisé par ce pied de page"
-
-#: src/pyams_content/features/footer/skin/__init__.py:53
-msgid "Hidden footer"
-msgstr "Ne pas afficher de pied de pages"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:60
-msgid "Page footer"
-msgstr "Pied de pages"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:78
-msgid "Edit footer settings"
-msgstr "Paramétrage des pieds de pages"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:152
-msgid ""
-"WARNING: Footer properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-"ATTENTION : les propriétés du pied de page sont enregistrées automatiquement "
-"lorsque vous modifiez le mode d'héritage !!"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:220
-msgid "Footer renderer settings"
-msgstr "Propriétés du mode de rendu"
-
-#: src/pyams_content/features/footer/zmi/__init__.py:107
-msgid "Don't inherit parent footer"
-msgstr "Ne pas hériter du pied de pages du parent"
-
-#: src/pyams_content/features/review/interfaces.py:32
-msgid "Review request"
-msgstr "Demande de relecture"
-
-#: src/pyams_content/features/review/interfaces.py:33
-msgid "Reviewer comment"
-msgstr "Commentaire"
-
-#: src/pyams_content/features/review/interfaces.py:56
-msgid "Comment writer"
-msgstr "Rédacteur"
-
-#: src/pyams_content/features/review/interfaces.py:59
-msgid "Content reviewers"
-msgstr "Relecteurs sollicités"
-
-#: src/pyams_content/features/review/interfaces.py:62
-msgid "Comment type"
-msgstr "Type de commentaire"
-
-#: src/pyams_content/features/review/interfaces.py:67
-msgid "Comment body"
-msgstr "Commentaire"
-
-#: src/pyams_content/features/review/interfaces.py:70
-msgid "Reviewer comment?"
-msgstr "Commentaire d'un relecteur ?"
-
-#: src/pyams_content/features/review/interfaces.py:86
-msgid "Reviewers list"
-msgstr "Liste des relecteurs"
-
-#: src/pyams_content/features/review/interfaces.py:87
-msgid "List of principals which reviewed the comment"
-msgstr "Liste des utilisateurs qui ont apporté des commentaires sur ce contenu"
-
-#: src/pyams_content/features/review/__init__.py:181
-#, python-format
-msgid "Request comment: {comment}"
-msgstr "Commentaire joint : {comment}"
-
-#: src/pyams_content/features/review/__init__.py:211
-#, python-format
-msgid "A new comment was added on content « {0} »"
-msgstr "Un nouveau commentaire a été ajouté pour le contenu « {0} »"
-
-#: src/pyams_content/features/review/__init__.py:168
-#, python-format
-msgid "[{service_name}] A content review is requested"
-msgstr "[{service_name}] Demande de relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:61
-msgid "Ask for review..."
-msgstr "Demander une relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:100
-msgid "Content review request"
-msgstr "Demande de relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:166
-msgid "Comments"
-msgstr "Commentaires"
-
-#: src/pyams_content/features/review/zmi/__init__.py:186
-msgid "Review comments"
-msgstr "Commentaires associés à cette version"
-
-#: src/pyams_content/features/review/zmi/__init__.py:71
-msgid "Sought principals"
-msgstr "Relecteurs sollicités"
-
-#: src/pyams_content/features/review/zmi/__init__.py:72
-msgid "List of principals from which a review is requested"
-msgstr ""
-"Liste des utilisateurs que vous souhaitez solliciter par mail pour relire ce "
-"contenu"
-
-#: src/pyams_content/features/review/zmi/__init__.py:75
-msgid "Comment"
-msgstr "Commentaire"
-
-#: src/pyams_content/features/review/zmi/__init__.py:76
-msgid "Comment associated with this request"
-msgstr ""
-"Ce commentaire associé à cette demande sera également transmis par mail"
-
-#: src/pyams_content/features/review/zmi/__init__.py:79
-msgid "Notify all reviewers"
-msgstr "Notifier tous les relecteurs"
-
-#: src/pyams_content/features/review/zmi/__init__.py:80
-msgid ""
-"If 'yes', selected reviewers will be notified by mail of your request, even "
-"if they were already members of the reviewers group. Otherwise, only new "
-"reviewers will be notified"
-msgstr ""
-"Si 'oui', tous les relecteurs sollicités seront notifiés par mail de votre "
-"demande, même s'ils avaient déjà été sollicités auparavant. Dans le cas "
-"contraire, seuls les nouveaux relecteurs seront notifiés."
-
-#: src/pyams_content/features/review/zmi/__init__.py:90
-#: src/pyams_content/component/paragraph/zmi/__init__.py:212
-#: src/pyams_content/shared/common/zmi/owner.py:73
-#: src/pyams_content/shared/common/zmi/__init__.py:275
-#: src/pyams_content/shared/common/zmi/workflow.py:122
-#: src/pyams_content/shared/common/zmi/workflow.py:209
-#: src/pyams_content/shared/common/zmi/workflow.py:249
-#: src/pyams_content/shared/common/zmi/workflow.py:303
-#: src/pyams_content/shared/common/zmi/workflow.py:392
-#: src/pyams_content/shared/common/zmi/workflow.py:448
-#: src/pyams_content/shared/common/zmi/workflow.py:488
-#: src/pyams_content/shared/common/zmi/workflow.py:529
-#: src/pyams_content/shared/common/zmi/workflow.py:572
-#: src/pyams_content/shared/common/zmi/workflow.py:612
-#: src/pyams_content/shared/common/zmi/workflow.py:653
-#: src/pyams_content/shared/common/zmi/workflow.py:704
-msgid "Cancel"
-msgstr "Annuler"
-
-#: src/pyams_content/features/review/zmi/__init__.py:91
-msgid "Ask for content review"
-msgstr "Demander la relecture"
-
-#: src/pyams_content/features/review/zmi/__init__.py:147
-msgid "Request successful. No new notification have been sent"
-msgstr ""
-"Votre demande a été transmise. Aucune nouvelle notification n'a été envoyée."
-
-#: src/pyams_content/features/review/zmi/__init__.py:260
-msgid "Message is mandatory!"
-msgstr "Un commentaire est obligatoire !"
-
-#: src/pyams_content/features/review/zmi/__init__.py:135
-#, python-format
-msgid "Request successful. {count} new notification(s) have been sent"
-msgstr "Votre demande a été transmise. {count} notification(s) envoyée(s)."
-
-#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
-#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:32
-msgid "Review query from"
-msgstr "Demande de relecture de "
-
-#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
-#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:38
-msgid "(as reviewer)"
-msgstr "(relecteur)"
-
-#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:47
-msgid "Selected reviewers:"
-msgstr "Auprès de :"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:4
-msgid "[${service_name}] You are requested for a content review"
-msgstr "[${service_name}] Demande de relecture"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:30
-msgid "Hello,"
-msgstr "Bonjour,"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:31
-msgid ""
-"You have been requested by ${sender}, contributor of « ${service_name} » "
-"website, to make a review of a content."
-msgstr ""
-"Vous êtes sollicité par ${sender}, contributeur du site internet "
-"${service_name}, qui souhaite recueillir votre commentaire à propos d'un "
-"contenu."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:36
-msgid "${sender} added the following message to his request:"
-msgstr "${sender} a accompagné sa demande de relecture du message suivant :"
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:41
-msgid ""
-"To review and comment this publication, please use the following link: "
-"${target}."
-msgstr "Pour accéder à cette contribution, cliquer ici : ${target}."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:44
-msgid "After reading this content, please use the « Comments » menu entry."
-msgstr ""
-"Lorsque vous aurez pris connaissance du contenu, cliquez sur « Commentaires "
-"» dans le menu en colonne de gauche."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:45
-msgid ""
-"If you don't want to reply to this request, please contact ${sender} "
-"directly by replying to this mail."
-msgstr ""
-"Si vous ne souhaitez pas donner suite à cette demande, vous pouvez répondre "
-"directement à ${sender} en lui adressant un message dans ce sens."
-
-#: src/pyams_content/features/review/zmi/templates/review-notification.pt:47
-msgid "Thank you."
-msgstr "Merci."
-
-#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
-msgid "just now"
-msgstr "À l'instant !"
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:64
-msgid "Add comment"
-msgstr "Déposer un commentaire"
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:67
-msgid "Add a comment..."
-msgstr "Votre commentaire..."
-
-#: src/pyams_content/features/review/zmi/templates/review-comments.pt:73
-msgid "Add this comment"
-msgstr "Ajouter ce commentaire"
-
#: src/pyams_content/component/gallery/__init__.py:154
msgid "Gallery"
msgstr "Galerie de médias"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:130
+#: src/pyams_content/component/gallery/zmi/file.py:60
+#: src/pyams_content/component/gallery/zmi/file.py:72
+#: src/pyams_content/component/gallery/zmi/paragraph.py:155
+msgid "Add media(s)"
+msgstr "Ajouter des médias"
+
+#: src/pyams_content/component/gallery/zmi/file.py:182
+msgid "Update media properties"
+msgstr "Propriétés du média"
+
+#: src/pyams_content/component/gallery/zmi/file.py:236
+msgid "Remove media..."
+msgstr "Supprimer le média"
+
+#: src/pyams_content/component/gallery/zmi/file.py:146
+msgid "Show/hide media"
+msgstr "Cliquez pour rendre le média visible ou non"
+
+#: src/pyams_content/component/gallery/zmi/file.py:203
+msgid "Audio content"
+msgstr "Contenu audio associé"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:57
+msgid "Medias gallery..."
+msgstr "Galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:70
+msgid "Add new gallery"
+msgstr "Ajout d'une galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/paragraph.py:92
+msgid "Edit gallery properties"
+msgstr "Propriétés de la galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/__init__.py:63
+msgid "Update gallery properties"
+msgstr "Propriétés de la galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/__init__.py:90
+msgid "Update gallery contents"
+msgstr "Contenu de la galerie de médias"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:36
+msgid "Images or videos data"
+msgstr "Fichier"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:37
+msgid "You can upload a single file or choose to upload a whole ZIP archive"
+msgstr ""
+"Vous pouvez déposer les médias un par un, ou en nombre en les réunissant au "
+"préalable dans un fichier ZIP"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:40
+#: 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:68
+#: src/pyams_content/component/paragraph/interfaces/video.py:52
+#: src/pyams_content/component/paragraph/interfaces/audio.py:52
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
+#: src/pyams_content/component/video/interfaces/__init__.py:52
+msgid "Author"
+msgstr "Auteur"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:41
+#: src/pyams_content/component/gallery/interfaces/__init__.py:62
+#: src/pyams_content/component/extfile/interfaces/__init__.py:45
+#: src/pyams_content/component/paragraph/interfaces/video.py:53
+#: src/pyams_content/component/paragraph/interfaces/audio.py:53
+#: src/pyams_content/component/video/interfaces/__init__.py:53
+msgid "Name of document's author"
+msgstr "Sous la forme \"Prénom Nom / Organisme\""
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:44
+msgid "Author comments"
+msgstr "À propos de l'auteur"
+
+#: src/pyams_content/component/gallery/zmi/interfaces.py:45
+#: src/pyams_content/component/gallery/interfaces/__init__.py:66
+msgid "Comments relatives to author's rights management"
+msgstr ""
+"Commentaires (non publiés mais à conserver) relatifs à l'auteur et à la "
+"gestion de ses droits"
+
+#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:11
+msgid "Gallery medias"
+msgstr "Contenu de la galerie"
+
+#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:17
+msgid "Download medias"
+msgstr "Télécharger tous les médias"
+
+#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:41
+msgid "Zoom image"
+msgstr "Agrandir l'image"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:133
msgid "Medias gallery"
msgstr "Galerie de médias"
@@ -878,12 +197,19 @@
"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu..."
#: src/pyams_content/component/gallery/interfaces/__init__.py:51
+#: src/pyams_content/component/illustration/interfaces/__init__.py:53
#: src/pyams_content/component/paragraph/interfaces/video.py:45
+#: src/pyams_content/component/paragraph/interfaces/audio.py:45
#: src/pyams_content/component/video/interfaces/__init__.py:75
-#: src/pyams_content/component/illustration/interfaces/__init__.py:53
msgid "Legend"
msgstr "Légende"
+#: src/pyams_content/component/gallery/interfaces/__init__.py:54
+#: src/pyams_content/component/illustration/interfaces/__init__.py:56
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:48
+msgid "Accessibility title"
+msgstr "Alternative (accessibilité)"
+
#: src/pyams_content/component/gallery/interfaces/__init__.py:55
msgid "Alternate title used to describe media content"
msgstr ""
@@ -893,49 +219,22 @@
"conformer aux normes d'accessibilité."
#: src/pyams_content/component/gallery/interfaces/__init__.py:58
-#: src/pyams_content/component/gallery/interfaces/__init__.py:98
+#: src/pyams_content/component/gallery/interfaces/__init__.py:101
#: src/pyams_content/component/extfile/interfaces/__init__.py:40
+#: src/pyams_content/component/illustration/interfaces/__init__.py:64
#: src/pyams_content/component/paragraph/interfaces/video.py:48
-#: src/pyams_content/component/paragraph/interfaces/audio.py:44
+#: src/pyams_content/component/paragraph/interfaces/audio.py:48
#: src/pyams_content/component/links/interfaces/__init__.py:39
#: src/pyams_content/component/video/interfaces/__init__.py:48
-#: src/pyams_content/component/illustration/interfaces/__init__.py:64
+#: src/pyams_content/shared/common/interfaces/__init__.py:154
#: src/pyams_content/shared/form/interfaces/__init__.py:66
-#: src/pyams_content/shared/common/interfaces/__init__.py:149
msgid "Description"
msgstr "Description"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:61
-#: src/pyams_content/component/gallery/zmi/interfaces.py:40
-#: src/pyams_content/component/extfile/interfaces/__init__.py:44
-#: src/pyams_content/component/paragraph/interfaces/video.py:52
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:44
-#: src/pyams_content/component/paragraph/interfaces/audio.py:48
-#: src/pyams_content/component/video/interfaces/__init__.py:52
-#: src/pyams_content/component/illustration/interfaces/__init__.py:68
-msgid "Author"
-msgstr "Auteur"
-
-#: src/pyams_content/component/gallery/interfaces/__init__.py:62
-#: src/pyams_content/component/gallery/zmi/interfaces.py:41
-#: src/pyams_content/component/extfile/interfaces/__init__.py:45
-#: src/pyams_content/component/paragraph/interfaces/video.py:53
-#: src/pyams_content/component/paragraph/interfaces/audio.py:49
-#: src/pyams_content/component/video/interfaces/__init__.py:53
-msgid "Name of document's author"
-msgstr "Sous la forme \"Prénom Nom / Organisme\""
-
#: src/pyams_content/component/gallery/interfaces/__init__.py:65
msgid "Author's comments"
msgstr "À propos de l'auteur"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:66
-#: src/pyams_content/component/gallery/zmi/interfaces.py:45
-msgid "Comments relatives to author's rights management"
-msgstr ""
-"Commentaires (non publiés mais à conserver) relatifs à l'auteur et à la "
-"gestion de ses droits"
-
#: src/pyams_content/component/gallery/interfaces/__init__.py:69
msgid "Source ID"
msgstr "ID source"
@@ -948,7 +247,7 @@
#: src/pyams_content/component/gallery/interfaces/__init__.py:73
#: src/pyams_content/component/extfile/interfaces/__init__.py:89
-#: src/pyams_content/component/paragraph/interfaces/audio.py:52
+#: src/pyams_content/component/paragraph/interfaces/audio.py:41
msgid "Audio data"
msgstr "Fichier"
@@ -980,125 +279,56 @@
msgid "If 'no', this media won't be displayed in front office"
msgstr "Si 'non', ce média ne sera pas présenté aux internautes"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:95
+#: src/pyams_content/component/gallery/interfaces/__init__.py:97
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
+#: src/pyams_content/component/paragraph/zmi/milestone.py:232
+#: src/pyams_content/component/paragraph/zmi/container.py:252
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:45
+#: src/pyams_content/component/links/zmi/reverse.py:73
+#: src/pyams_content/shared/common/zmi/dashboard.py:109
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:188
+#: src/pyams_content/shared/view/portlet/interfaces.py:56
+#: src/pyams_content/shared/imagemap/zmi/container.py:123
+#: src/pyams_content/shared/site/zmi/folder.py:70
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:188
+#: src/pyams_content/interfaces/__init__.py:101
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:150
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
+msgid "Title"
+msgstr "Titre"
+
+#: src/pyams_content/component/gallery/interfaces/__init__.py:98
msgid "Gallery title, as shown in front-office"
msgstr "Titre de la galerie présenté aux internautes"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:99
+#: src/pyams_content/component/gallery/interfaces/__init__.py:102
msgid "Gallery description displayed by front-office template"
msgstr "Description de la galerie de médias présentée aux internautes"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:102
+#: src/pyams_content/component/gallery/interfaces/__init__.py:105
msgid "Gallery template"
msgstr "Mode de rendu"
-#: src/pyams_content/component/gallery/interfaces/__init__.py:103
+#: src/pyams_content/component/gallery/interfaces/__init__.py:106
msgid "Presentation template used for this gallery"
msgstr ""
"<span>Modèle de présentation utilisé par cette galerie.<br /"
"><strong>ATTENTION :</strong> certains modes de rendu ne prennent en charge "
"que certains types de médias !!</span>"
-#: src/pyams_content/component/gallery/zmi/interfaces.py:36
-msgid "Images or videos data"
-msgstr "Fichier"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:37
-msgid "You can upload a single file or choose to upload a whole ZIP archive"
-msgstr ""
-"Vous pouvez déposer les médias un par un, ou en nombre en les réunissant au "
-"préalable dans un fichier ZIP"
-
-#: src/pyams_content/component/gallery/zmi/interfaces.py:44
-msgid "Author comments"
-msgstr "À propos de l'auteur"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:56
-msgid "Medias gallery..."
-msgstr "Galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:69
-msgid "Add new gallery"
-msgstr "Ajout d'une galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:96
-msgid "Edit gallery properties"
-msgstr "Propriétés de la galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/paragraph.py:164
-#: src/pyams_content/component/gallery/zmi/file.py:57
-#: src/pyams_content/component/gallery/zmi/file.py:69
-msgid "Add media(s)"
-msgstr "Ajouter des médias"
-
-#: src/pyams_content/component/gallery/zmi/__init__.py:63
-msgid "Update gallery properties"
-msgstr "Propriétés de la galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/__init__.py:95
-msgid "Update gallery contents"
-msgstr "Contenu de la galerie de médias"
-
-#: src/pyams_content/component/gallery/zmi/file.py:184
-msgid "Update media properties"
-msgstr "Propriétés du média"
-
-#: src/pyams_content/component/gallery/zmi/file.py:238
-msgid "Remove media..."
-msgstr "Supprimer le média"
-
-#: src/pyams_content/component/gallery/zmi/file.py:148
-msgid "Show/hide media"
-msgstr "Cliquez pour rendre le média visible ou non"
-
-#: src/pyams_content/component/gallery/zmi/file.py:211
-msgid "Audio content"
-msgstr "Contenu audio associé"
-
-#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:11
-msgid "Gallery medias"
-msgstr "Contenu de la galerie"
-
-#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:17
-msgid "Download medias"
-msgstr "Télécharger tous les médias"
-
-#: src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:41
-msgid "Zoom image"
-msgstr "Agrandir l'image"
-
-#: src/pyams_content/component/theme/__init__.py:65
-#: src/pyams_content/component/theme/interfaces/__init__.py:43
-#: src/pyams_content/component/theme/zmi/portlet.py:40
-msgid "Themes"
-msgstr "Thèmes"
-
-#: src/pyams_content/component/theme/__init__.py:74
-msgid "no defined theme"
-msgstr "aucun thème défini"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:51
-#: src/pyams_content/shared/view/zmi/theme.py:48
-msgid "Themes..."
-msgstr "Thèmes"
-
-#: src/pyams_content/component/theme/zmi/__init__.py:63
-msgid "Content themes"
-msgstr "Thèmes du contenu"
-
-#: src/pyams_content/component/theme/zmi/manager.py:45
-msgid "Themes settings..."
-msgstr "Paramétrage des thèmes"
-
-#: src/pyams_content/component/theme/zmi/manager.py:59
-msgid "Selected themes"
-msgstr "Thèmes sélectionnés"
-
#: src/pyams_content/component/extfile/__init__.py:172
#: src/pyams_content/component/extfile/__init__.py:176
msgid "Standard file"
msgstr "Fichier"
+#: src/pyams_content/component/extfile/__init__.py:223
+#: src/pyams_content/component/extfile/__init__.py:238
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:67
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:44
+msgid "Image"
+msgstr "Image"
+
#: src/pyams_content/component/extfile/__init__.py:253
#: src/pyams_content/component/extfile/__init__.py:257
#: src/pyams_content/component/paragraph/interfaces/video.py:34
@@ -1110,10 +340,78 @@
msgid "Audio file"
msgstr "Fichier audio"
+#: src/pyams_content/component/extfile/zmi/__init__.py:74
+msgid "External files"
+msgstr "Fichiers"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:89
+msgid "Add external file"
+msgstr "Fichier"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:103
+msgid "Add new external file"
+msgstr "Ajout d'un fichier"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:133
+msgid "Update file properties"
+msgstr "Propriétés du fichier"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:161
+msgid "Images"
+msgstr "Images"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:176
+msgid "Add image"
+msgstr "Image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:190
+msgid "Add new image"
+msgstr "Ajout d'une image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:221
+msgid "Update image properties"
+msgstr "Propriétés de l'image téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:254
+msgid "Videos"
+msgstr "Vidéos"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:269
+msgid "Add video"
+msgstr "Vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:283
+msgid "Add new video"
+msgstr "Ajout d'une vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:307
+msgid "Update video properties"
+msgstr "Propriétés de la vidéo téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:333
+msgid "Audios files"
+msgstr "Fichiers audios"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:348
+msgid "Add audio file"
+msgstr "Bande son téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:362
+msgid "Add new audio file"
+msgstr "Ajout d'une bande son téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:386
+msgid "Update audio file properties"
+msgstr "Propriétés de la bande son téléchargeable"
+
+#: src/pyams_content/component/extfile/zmi/__init__.py:50
+msgid "External file type"
+msgstr "Type de fichier joint"
+
#: src/pyams_content/component/extfile/interfaces/__init__.py:36
#: src/pyams_content/component/links/interfaces/__init__.py:35
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:54
-#: src/pyams_content/shared/site/interfaces/__init__.py:113
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:55
+#: src/pyams_content/shared/site/interfaces/__init__.py:114
msgid "Alternate title"
msgstr "Titre de substitution"
@@ -1123,13 +421,13 @@
#: src/pyams_content/component/extfile/interfaces/__init__.py:41
#: src/pyams_content/component/paragraph/interfaces/video.py:49
-#: src/pyams_content/component/paragraph/interfaces/audio.py:45
+#: src/pyams_content/component/paragraph/interfaces/audio.py:49
#: 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/links/interfaces/__init__.py:68
+#: src/pyams_content/component/links/interfaces/__init__.py:65
msgid "Language"
msgstr "Langue"
@@ -1158,7 +456,7 @@
"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
#: src/pyams_content/component/extfile/interfaces/__init__.py:73
-#: src/pyams_content/shared/logo/interfaces/__init__.py:47
+#: src/pyams_content/shared/logo/interfaces/__init__.py:48
msgid "Image data"
msgstr "Fichier"
@@ -1178,78 +476,182 @@
"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
#: src/pyams_content/component/extfile/interfaces/__init__.py:90
-#: src/pyams_content/component/paragraph/interfaces/audio.py:53
+#: src/pyams_content/component/paragraph/interfaces/audio.py:42
msgid "Audio file content"
msgstr ""
"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
-#: src/pyams_content/component/extfile/zmi/__init__.py:74
-msgid "External files"
-msgstr "Fichiers"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:89
-msgid "Add external file"
-msgstr "Fichier"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:103
-msgid "Add new external file"
-msgstr "Ajout d'un fichier"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:138
-msgid "Update file properties"
-msgstr "Propriétés du fichier"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:171
-msgid "Images"
-msgstr "Images"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:186
-msgid "Add image"
-msgstr "Image téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:200
-msgid "Add new image"
-msgstr "Ajout d'une image téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:231
-msgid "Update image properties"
-msgstr "Propriétés de l'image téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:264
-msgid "Videos"
-msgstr "Vidéos"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:279
-msgid "Add video"
-msgstr "Vidéo téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:293
-msgid "Add new video"
-msgstr "Ajout d'une vidéo téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:317
-msgid "Update video properties"
-msgstr "Propriétés de la vidéo téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:343
-msgid "Audios files"
-msgstr "Fichiers audios"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:358
-msgid "Add audio file"
-msgstr "Bande son téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:372
-msgid "Add new audio file"
-msgstr "Ajout d'une bande son téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:396
-msgid "Update audio file properties"
-msgstr "Propriétés de la bande son téléchargeable"
-
-#: src/pyams_content/component/extfile/zmi/__init__.py:50
-msgid "External file type"
-msgstr "Type de fichier joint"
+#: src/pyams_content/component/keynumber/__init__.py:189
+#: src/pyams_content/component/keynumber/zmi/__init__.py:199
+#: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:74
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:29
+msgid "Key numbers"
+msgstr "Chiffres-clés"
+
+#. Default: Header
+#: src/pyams_content/component/keynumber/zmi/__init__.py:147
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:44
+msgid "key-number-label"
+msgstr "En-tête"
+
+#: src/pyams_content/component/keynumber/zmi/__init__.py:159
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:49
+msgid "Number"
+msgstr "Chiffre"
+
+#. Default: Unit
+#: src/pyams_content/component/keynumber/zmi/__init__.py:168
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:53
+msgid "key-number-unit"
+msgstr "Unité"
+
+#: src/pyams_content/component/keynumber/zmi/__init__.py:180
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:57
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:268
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:58
+msgid "Associated text"
+msgstr "Texte associé"
+
+#: src/pyams_content/component/keynumber/zmi/__init__.py:218
+msgid "Add keynumber"
+msgstr "Ajouter un chiffre-clé"
+
+#: src/pyams_content/component/keynumber/zmi/__init__.py:230
+msgid "Add new keynumber"
+msgstr "Ajout d'un chiffre-clé"
+
+#: src/pyams_content/component/keynumber/zmi/__init__.py:259
+msgid "Edit keynumber properties"
+msgstr "Propriétés du chiffre-clé"
+
+#: src/pyams_content/component/keynumber/zmi/__init__.py:245
+msgid "Key number was correctly added"
+msgstr "Le chiffre-clé a été ajouté."
+
+#: src/pyams_content/component/keynumber/portlet/__init__.py:71
+msgid "Key Numbers"
+msgstr "Chiffres-clés"
+
+#: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:97
+#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:26
+msgid "Associated links"
+msgstr "Liens associés"
+
+#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:31
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:11
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:8
+msgid "Link target is not published!"
+msgstr "Le contenu ciblé n'est pas publié"
+
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
+msgid "Portlet title"
+msgstr "Titre"
+
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
+msgid "Teaser"
+msgstr "Accroche"
+
+#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
+msgid "Short text displayed above key numbers"
+msgstr "Texte d'introduction des chiffres-clés"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:39
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:40
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:44
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:41
+#: src/pyams_content/component/association/interfaces/__init__.py:42
+#: src/pyams_content/shared/form/interfaces/__init__.py:87
+#: src/pyams_content/shared/site/interfaces/__init__.py:118
+#: src/pyams_content/features/alert/interfaces.py:54
+#: src/pyams_content/features/menu/interfaces/__init__.py:59
+msgid "Visible?"
+msgstr "Visible ?"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:40
+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/keynumber/interfaces/__init__.py:45
+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/keynumber/interfaces/__init__.py:50
+msgid "Key number value"
+msgstr "Chiffre"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:54
+msgid "Displayed unit"
+msgstr "Unité affichée"
+
+#: src/pyams_content/component/keynumber/interfaces/__init__.py:58
+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/illustration/__init__.py:177
+#: src/pyams_content/component/illustration/thesaurus.py:32
+#: src/pyams_content/component/illustration/zmi/paragraph.py:158
+#: src/pyams_content/component/illustration/zmi/__init__.py:56
+#: src/pyams_content/component/illustration/zmi/__init__.py:100
+#: src/pyams_content/component/illustration/interfaces/__init__.py:99
+msgid "Illustration"
+msgstr "Illustration"
+
+#: src/pyams_content/component/illustration/zmi/paragraph.py:60
+msgid "Illustration..."
+msgstr "Illustration"
+
+#: src/pyams_content/component/illustration/zmi/paragraph.py:73
+msgid "Add new illustration"
+msgstr "Ajout d'une illustration"
+
+#: src/pyams_content/component/illustration/zmi/paragraph.py:98
+#: src/pyams_content/component/illustration/zmi/thesaurus.py:42
+msgid "Edit illustration properties"
+msgstr "Propriétés de l'illustration"
+
+#: src/pyams_content/component/illustration/zmi/__init__.py:150
+msgid "Navigation link illustration"
+msgstr "Illustration de navigation"
+
+#: src/pyams_content/component/illustration/zmi/__init__.py:102
+msgid "Header illustration"
+msgstr "Illustration d'en-tête"
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:57
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:49
+msgid "Alternate title used to describe image content"
+msgstr ""
+"Ce texte est affiché lorsque le contenu ne peut être téléchargé ou affiché ; "
+"il est aussi utilisé par les navigateurs des personnes souffrant de "
+"déficiences visuelles. Il doit donc décrire le contenu, pour se conformer "
+"aux normes d'accessibilité."
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:69
+msgid "Name of picture's author"
+msgstr "Sous la forme \"Prénom Nom / Organisme\""
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:72
+msgid "Illustration template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/illustration/interfaces/__init__.py:73
+msgid "Presentation template used for illustration"
+msgstr ""
+"<span>Modèle de présentation utilisé par cette illustration.<br /"
+"><strong>ATTENTION :</strong> certains modes de rendu ne prennent pas en "
+"compte tous les types de médias !</span>"
+
+#: src/pyams_content/component/paragraph/milestone.py:140
+msgid "Selected paragraph is missing"
+msgstr "le bloc sélectionné est introuvable"
+
+#: src/pyams_content/component/paragraph/milestone.py:143
+msgid "Selected paragraph is not visible"
+msgstr "le bloc sélectionné n'est pas visible"
#: src/pyams_content/component/paragraph/container.py:73
msgid "Paragraphs"
@@ -1263,23 +665,441 @@
msgid "Selected pictogram is missing"
msgstr "le pictogramme sélectionné est introuvable"
-#: src/pyams_content/component/paragraph/milestone.py:140
-msgid "Selected paragraph is missing"
-msgstr "le bloc sélectionné est introuvable"
-
-#: src/pyams_content/component/paragraph/milestone.py:143
-msgid "Selected paragraph is not visible"
-msgstr "le bloc sélectionné n'est pas visible"
-
+#: src/pyams_content/component/paragraph/zmi/milestone.py:78
+msgid "Milestones..."
+msgstr "Chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:91
+msgid "Add new milestone paragraph"
+msgstr "Ajout d'une chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:118
+msgid "Edit milestone paragraph properties"
+msgstr "Propriétés de la chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:244
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:49
+msgid "Associated label"
+msgstr "Information associée"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:256
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:53
+msgid "Anchor"
+msgstr "Ancre"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:285
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:76
+msgid "Milestones"
+msgstr "Chronologie"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:300
+msgid "Add milestone"
+msgstr "Ajouter un jalon"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:313
+msgid "Add new milestone"
+msgstr "Ajout d'un jalon"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:340
+msgid "Edit milestone properties"
+msgstr "Propriétés du jalon"
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:328
+msgid "Milestone was correctly added"
+msgstr "Le jalon a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/milestone.py:271
+msgid "(missing paragraph)"
+msgstr "(paragraphe supprimé)"
+
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:52
+msgid "Key points..."
+msgstr "Points clés"
+
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:65
+msgid "Add new key points paragraph"
+msgstr "Ajout de points clés"
+
+#: src/pyams_content/component/paragraph/zmi/keypoint.py:92
+msgid "Edit key points paragraph properties"
+msgstr "Propriétés des points clés"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:65
+msgid "Content block types..."
+msgstr "Types de blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:79
+msgid "Content block types"
+msgstr "Types de blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:89
+msgid ""
+"You can define which types of paragraphs are allowed in this container.\n"
+"\n"
+"Default paragraphs will be added automatically (in selected order) to any "
+"new created content.\n"
+"\n"
+"NOTICE: removing types from allowed types list will have no effect on "
+"already created contents!"
+msgstr ""
+"Vous pouvez indiquer la liste des types de blocs de contenu autorisés pour "
+"ce gabarit.\n"
+"\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 blocs autorisés sera "
+"sans effet sur les contenus existants."
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:207
+#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
+#: src/pyams_content/features/preview/zmi/__init__.py:45
+msgid "Preview"
+msgstr "Aperçu"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:212
+#: src/pyams_content/shared/common/zmi/workflow.py:123
+#: src/pyams_content/shared/common/zmi/workflow.py:210
+#: src/pyams_content/shared/common/zmi/workflow.py:250
+#: src/pyams_content/shared/common/zmi/workflow.py:304
+#: src/pyams_content/shared/common/zmi/workflow.py:393
+#: src/pyams_content/shared/common/zmi/workflow.py:449
+#: src/pyams_content/shared/common/zmi/workflow.py:489
+#: src/pyams_content/shared/common/zmi/workflow.py:530
+#: src/pyams_content/shared/common/zmi/workflow.py:573
+#: src/pyams_content/shared/common/zmi/workflow.py:613
+#: src/pyams_content/shared/common/zmi/workflow.py:654
+#: src/pyams_content/shared/common/zmi/workflow.py:705
+#: src/pyams_content/shared/common/zmi/__init__.py:273
+#: src/pyams_content/shared/common/zmi/owner.py:73
+#: src/pyams_content/features/review/zmi/__init__.py:90
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:214
+msgid "Submit"
+msgstr "Enregistrer"
+
+#: src/pyams_content/component/paragraph/zmi/__init__.py:195
+msgid "Paragraph was correctly added."
+msgstr "Le bloc a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/video.py:54
+msgid "Video paragraph..."
+msgstr "Vidéo"
+
+#: src/pyams_content/component/paragraph/zmi/video.py:67
+msgid "Add new video paragraph"
+msgstr "Ajout d'une vidéo"
+
+#: src/pyams_content/component/paragraph/zmi/video.py:90
+#: src/pyams_content/component/video/zmi/paragraph.py:189
+msgid "Edit video properties"
+msgstr "Propriétés de la vidéo"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:74
+msgid "Contents..."
+msgstr "Contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:196
+msgid "Set navigation anchor"
+msgstr "Ancre de navigation"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:268
+msgid "Show/hide all paragraphs"
+msgstr "Afficher/masquer tous les blocs"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:316
+#: src/pyams_content/component/paragraph/zmi/container.py:325
+#: src/pyams_content/component/paragraph/zmi/container.py:338
+msgid "Content blocks"
+msgstr "Blocs de contenu"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:395
+msgid "Links and attachments..."
+msgstr "Récap. liens et PJ"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:407
+msgid "Content blocks links and attachments"
+msgstr "Récapitulatif des 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 bloc n'est associé à ce contenu."
+
+#: src/pyams_content/component/paragraph/zmi/container.py:277
+msgid "Click to open/close all paragraphs editors"
+msgstr "Afficher/masquer tous les blocs"
+
+#: src/pyams_content/component/paragraph/zmi/container.py:290
+msgid "Click to open/close paragraph editor"
+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 blocs de contenu autorisés pour pouvoir "
+"ajouter de nouveaux blocs."
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:83
+msgid "Pictograms..."
+msgstr "Pictogrammes"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:96
+msgid "Add new pictogram paragraph"
+msgstr "Ajout de pictogrammes"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:123
+msgid "Edit pictogram paragraph properties"
+msgstr "Propriétés des pictogrammes"
+
+#. Default: Header
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:253
+msgid "pictogram-item-header"
+msgstr "En-tête"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:290
#: src/pyams_content/component/paragraph/interfaces/pictogram.py:80
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:289
msgid "Pictograms"
msgstr "Pictogrammes"
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:305
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:59
+msgid "Add pictogram"
+msgstr "Ajouter un pictogramme"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:318
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:71
+msgid "Add new pictogram"
+msgstr "Ajout d'un pictogramme"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:360
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:95
+msgid "Edit pictogram properties"
+msgstr "Propriétés du pictogramme"
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:340
+msgid "Pictogram was correctly added"
+msgstr "Le pictogramme a été ajouté."
+
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:350
+#: src/pyams_content/component/paragraph/zmi/pictogram.py:388
+msgid "You must select a pictogram!"
+msgstr "Vous devez sélectionner un pictogramme !"
+
+#: src/pyams_content/component/paragraph/zmi/audio.py:54
+msgid "Audio paragraph..."
+msgstr "Bande son"
+
+#: src/pyams_content/component/paragraph/zmi/audio.py:67
+msgid "Add new audio paragraph"
+msgstr "Ajout d'une bande son"
+
+#: src/pyams_content/component/paragraph/zmi/audio.py:89
+msgid "Edit audio properties"
+msgstr "Propriétés de la bande son"
+
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:55
+msgid "Key numbers..."
+msgstr "Chiffres-clés"
+
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:68
+msgid "Add new key number paragraph"
+msgstr "Ajout de chiffres-clés"
+
+#: src/pyams_content/component/paragraph/zmi/keynumber.py:96
+msgid "Edit key number paragraph properties"
+msgstr "Propriétés des chiffres-clés"
+
+#: src/pyams_content/component/paragraph/zmi/frame.py:85
+msgid "Framed text..."
+msgstr "Encadré"
+
+#: src/pyams_content/component/paragraph/zmi/frame.py:99
+msgid "Add new framed text paragraph"
+msgstr "Ajout d'un encadré"
+
+#: src/pyams_content/component/paragraph/zmi/frame.py:125
+msgid "Edit framed text paragraph properties"
+msgstr "Propriétés de l'encadré"
+
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:57
+msgid "Verbatim..."
+msgstr "Verbatim"
+
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:70
+msgid "Add new verbatim paragraph"
+msgstr "Ajout d'un verbatim"
+
+#: src/pyams_content/component/paragraph/zmi/verbatim.py:92
+msgid "Edit verbatim paragraph properties"
+msgstr "Propriétés du verbatim"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:76
+msgid "Raw HTML..."
+msgstr "Code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:89
+msgid "Add new raw HTML paragraph"
+msgstr "Ajout d'un bloc de code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:119
+msgid "Edit raw HTML paragraph properties"
+msgstr "Propriétés du code HTML"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:159
+msgid "Rich text..."
+msgstr "Texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:172
+msgid "Add new rich text paragraph"
+msgstr "Ajout d'un bloc de texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/html.py:197
+msgid "Edit rich text paragraph properties"
+msgstr "Propriétés du texte enrichi"
+
+#: src/pyams_content/component/paragraph/zmi/contact.py:53
+msgid "Contact card..."
+msgstr "Fiche contact"
+
+#: src/pyams_content/component/paragraph/zmi/contact.py:66
+msgid "Add new contact card"
+msgstr "Ajout d'une fiche contact"
+
+#: src/pyams_content/component/paragraph/zmi/contact.py:89
+msgid "Edit contact card properties"
+msgstr "Propriétés de la fiche contact"
+
+#: src/pyams_content/component/paragraph/zmi/header.py:50
+msgid "Header..."
+msgstr "Chapô"
+
+#: src/pyams_content/component/paragraph/zmi/header.py:63
+msgid "Add new header paragraph"
+msgstr "Ajout d'un chapô"
+
+#: src/pyams_content/component/paragraph/zmi/header.py:90
+msgid "Edit header paragraph properties"
+msgstr "Propriétés du chapô"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:41
+msgid "Is this milestone visible in front-office?"
+msgstr "Si 'non', ce jalon ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:46
+msgid "Milestone title"
+msgstr "Libellé associé au jalon"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:50
+msgid "The way this label 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/milestone.py:54
+msgid "Paragraph to which this milestone should lead"
+msgstr "Bloc de contenu vers lequel ce jalon doit conduire"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:83
+msgid "Milestones template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/milestone.py:84
+msgid "Presentation template used for milestones"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:33
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:40
+msgid "Key points"
+msgstr "Points clés"
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:41
+msgid "Enter one key point by line, without hyphen or prefix"
+msgstr ""
+"Indiquez un point clé par ligne, sans tiret. Passez à la ligne entre chaque "
+"point clé, la mise en forme sera effectuée automatiquement."
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:44
+msgid "Presentation template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/keypoint.py:45
+#: src/pyams_content/component/paragraph/interfaces/frame.py:44
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:53
+#: src/pyams_content/component/paragraph/interfaces/html.py:46
+#: src/pyams_content/component/paragraph/interfaces/html.py:67
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:101
+#: src/pyams_content/shared/logo/interfaces/__init__.py:82
+msgid "Presentation template used for this paragraph"
+msgstr "Mode de rendu utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:45
+msgid "Is this paragraph visible in front-office?"
+msgstr "Si 'non', ce bloc de contenu ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:49
+msgid "Anchor?"
+msgstr "Ancre ?"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:50
+msgid "Is this paragraph a navigation anchor?"
+msgstr ""
+"Si 'oui', ce bloc pourra recevoir une ancre de navigation au sein du contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:54
+msgid "§ Title"
+msgstr "Titre §"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:88
+msgid "Allowed paragraphs"
+msgstr "Types de blocs autorisés"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:89
+msgid "List of paragraphs allowed for this content type"
+msgstr "Liste des types de blocs de contenu autorisés pour ce gabarit."
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:93
+#: src/pyams_content/shared/common/zmi/types.py:173
+#: src/pyams_content/shared/common/zmi/types.py:413
+msgid "Default paragraphs"
+msgstr "Types de blocs par défaut"
+
+#: src/pyams_content/component/paragraph/interfaces/__init__.py:94
+msgid "List of paragraphs automatically added to a new content"
+msgstr "Liste des types de blocs ajoutés automatiquement aux nouveaux contenus"
+
+#: src/pyams_content/component/paragraph/interfaces/video.py:42
+msgid "Video file content"
+msgstr ""
+"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/video.py:56
+#: src/pyams_content/component/video/interfaces/__init__.py:78
+msgid "Video template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/video.py:57
+#: src/pyams_content/component/video/interfaces/__init__.py:79
+msgid "Presentation template used for this video"
+msgstr "Mode de rendu utilisé par cette vidéo"
+
#: src/pyams_content/component/paragraph/interfaces/pictogram.py:42
msgid "Is this pictogram visible in front-office?"
msgstr "Si 'non', ce pictogramme ne sera pas présenté aux internautes"
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:46
+#: src/pyams_content/component/links/interfaces/__init__.py:43
+#: src/pyams_content/shared/common/interfaces/types.py:75
+#: src/pyams_content/features/alert/interfaces.py:79
+msgid "Pictogram"
+msgstr "Pictogramme"
+
+#: src/pyams_content/component/paragraph/interfaces/pictogram.py:47
+#: src/pyams_content/features/alert/interfaces.py:80
+msgid "Name of the pictogram to select"
+msgstr "Sélection du pictogramme à afficher"
+
#: src/pyams_content/component/paragraph/interfaces/pictogram.py:53
msgid "Alternate header"
msgstr "En-tête de substitution"
@@ -1289,16 +1109,9 @@
"Alternate pictogram label; if not specified, the pictogram header will be "
"used"
msgstr ""
-"EN-tête de substitution utilisé par le pictogramme; si rien n'est spécifié, "
+"En-tête de substitution utilisé par le pictogramme; si rien n'est spécifié, "
"l'en-tête du pictogramme sélectionné sera utilisé."
-#: src/pyams_content/component/paragraph/interfaces/pictogram.py:58
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:267
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:57
-#: src/pyams_content/component/keynumber/zmi/__init__.py:179
-msgid "Associated text"
-msgstr "Texte associé"
-
#: src/pyams_content/component/paragraph/interfaces/pictogram.py:59
msgid "Additional text associated to this pictogram"
msgstr "Texte complémentaire associé à ce pictogramme"
@@ -1311,10 +1124,98 @@
msgid "Presentation template used for pictograms"
msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-#: src/pyams_content/component/paragraph/interfaces/header.py:33
-#: src/pyams_content/component/paragraph/interfaces/header.py:40
-msgid "Header"
-msgstr "Chapô"
+#: src/pyams_content/component/paragraph/interfaces/audio.py:34
+msgid "Audio"
+msgstr "Bande son"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:56
+msgid "Audio template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/audio.py:57
+msgid "Presentation template used for this audio file"
+msgstr "Mode de rendu utilisé pour cette bande son"
+
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:36
+msgid "Key numbers template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/keynumber.py:37
+msgid "Presentation template used for key numbers"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/frame.py:33
+msgid "Framed text"
+msgstr "Encadré"
+
+#: src/pyams_content/component/paragraph/interfaces/frame.py:40
+msgid "Frame body"
+msgstr "Contenu"
+
+#: src/pyams_content/component/paragraph/interfaces/frame.py:43
+msgid "Text template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:33
+msgid "Verbatim"
+msgstr "Verbatim"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:40
+msgid "Quoted text"
+msgstr "Citation"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:41
+msgid "Quotation marks will be added automatically by presentation template"
+msgstr "Les guillemets seront ajoutés automatiquement par le mode de rendu..."
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:45
+msgid "Name of the quote author"
+msgstr "Nom de l'auteur de la citation"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:48
+#: src/pyams_content/component/paragraph/interfaces/contact.py:54
+msgid "In charge of"
+msgstr "Fonction"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:49
+msgid "Label of author function"
+msgstr "Fonction de l'auteur"
+
+#: src/pyams_content/component/paragraph/interfaces/verbatim.py:52
+msgid "Verbatim template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:33
+msgid "Raw HTML "
+msgstr "Code HTML"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:56
+msgid "Rich text"
+msgstr "Texte enrichi"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:40
+msgid "Raw HTML code"
+msgstr "Code HTML"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:41
+msgid ""
+"This HTML code will be used 'as is', without any transformation. Use with "
+"care!!"
+msgstr ""
+"Ce code HTML sera utilisé en l'état et intégré dans les pages sans "
+"modification. À utiliser avec précaution !!!"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:45
+msgid "Raw HTML code template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:63
+msgid "Body"
+msgstr "Contenu HTML"
+
+#: src/pyams_content/component/paragraph/interfaces/html.py:66
+msgid "Body template"
+msgstr "Mode de rendu"
#: src/pyams_content/component/paragraph/interfaces/contact.py:43
msgid "Contact card"
@@ -1328,11 +1229,6 @@
msgid "Name of the contact"
msgstr "Nom complet du contact"
-#: src/pyams_content/component/paragraph/interfaces/contact.py:54
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:48
-msgid "In charge of"
-msgstr "Fonction"
-
#: src/pyams_content/component/paragraph/interfaces/contact.py:55
msgid "Label of contact function"
msgstr "Fonction du contact"
@@ -1381,484 +1277,230 @@
msgid "GPS coordinates used to locate contact"
msgstr "Coordonnées GPS de situation du contact"
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:33
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:40
-msgid "Key points"
-msgstr "Points clés"
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:41
-msgid "Enter one key point by line, without hyphen or prefix"
-msgstr ""
-"Indiquez un point clé par ligne, sans tiret. Passez à la ligne entre chaque "
-"point clé, la mise en forme sera effectuée automatiquement."
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:44
-msgid "Presentation template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/keypoint.py:45
-#: src/pyams_content/component/paragraph/interfaces/html.py:46
-#: src/pyams_content/component/paragraph/interfaces/html.py:67
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:53
-#: src/pyams_content/component/paragraph/interfaces/frame.py:44
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:100
-#: src/pyams_content/shared/logo/interfaces/__init__.py:76
-msgid "Presentation template used for this paragraph"
-msgstr "Mode de rendu utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/video.py:42
-msgid "Video file content"
-msgstr ""
-"Cliquez sur le bouton 'Parcourir...' pour sélectionner un nouveau contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/video.py:56
-#: src/pyams_content/component/video/interfaces/__init__.py:78
-msgid "Video template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/video.py:57
-#: src/pyams_content/component/video/interfaces/__init__.py:79
-msgid "Presentation template used for this video"
-msgstr "Mode de rendu utilisé par cette vidéo"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:76
-#: src/pyams_content/component/paragraph/zmi/milestone.py:284
-msgid "Milestones"
-msgstr "Chronologie"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:41
-msgid "Is this milestone visible in front-office?"
-msgstr "Si 'non', ce jalon ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:46
-msgid "Milestone title"
-msgstr "Libellé associé au jalon"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:49
-#: src/pyams_content/component/paragraph/zmi/milestone.py:243
-msgid "Associated label"
-msgstr "Information associée"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:50
-msgid "The way this label 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/milestone.py:53
-#: src/pyams_content/component/paragraph/zmi/milestone.py:255
-msgid "Anchor"
-msgstr "Ancre"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:54
-msgid "Paragraph to which this milestone should lead"
-msgstr "Bloc de contenu vers lequel ce jalon doit conduire"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:83
-msgid "Milestones template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/milestone.py:84
-msgid "Presentation template used for milestones"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:29
-#: src/pyams_content/component/keynumber/__init__.py:180
-#: src/pyams_content/component/keynumber/zmi/__init__.py:198
-#: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:79
-msgid "Key numbers"
-msgstr "Chiffres-clés"
-
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:36
-msgid "Key numbers template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/keynumber.py:37
-msgid "Presentation template used for key numbers"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:45
-msgid "Is this paragraph visible in front-office?"
-msgstr "Si 'non', ce bloc de contenu ne sera pas présenté aux internautes"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:49
-msgid "§ Title"
-msgstr "Titre §"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:80
-msgid "Allowed paragraphs"
-msgstr "Types de blocs autorisés"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:81
-msgid "List of paragraphs allowed for this content type"
-msgstr "Liste des types de blocs de contenu autorisés pour ce gabarit."
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:85
-#: src/pyams_content/shared/common/zmi/types.py:169
-#: src/pyams_content/shared/common/zmi/types.py:380
-msgid "Default paragraphs"
-msgstr "Types de blocs par défaut"
-
-#: src/pyams_content/component/paragraph/interfaces/__init__.py:86
-msgid "List of paragraphs automatically added to a new content"
-msgstr "Liste des types de blocs ajoutés automatiquement aux nouveaux contenus"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:33
-msgid "Raw HTML "
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:56
-msgid "Rich text"
-msgstr "Texte enrichi"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:40
-msgid "Raw HTML code"
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:41
-msgid ""
-"This HTML code will be used 'as is', without any transformation. Use with "
-"care!!"
-msgstr ""
-"Ce code HTML sera utilisé en l'état et intégré dans les pages sans "
-"modification. À utiliser avec précaution !!!"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:45
-msgid "Raw HTML code template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:63
-#: src/pyams_content/component/paragraph/interfaces/audio.py:41
-msgid "Body"
-msgstr "Contenu HTML"
-
-#: src/pyams_content/component/paragraph/interfaces/html.py:66
-msgid "Body template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:33
-msgid "Verbatim"
-msgstr "Verbatim"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:40
-msgid "Quoted text"
-msgstr "Citation"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:41
-msgid "Quotation marks will be added automatically by presentation template"
-msgstr "Les guillemets seront ajoutés automatiquement par le mode de rendu..."
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:45
-msgid "Name of the quote author"
-msgstr "Nom de l'auteur de la citation"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:49
-msgid "Label of author function"
-msgstr "Fonction de l'auteur"
-
-#: src/pyams_content/component/paragraph/interfaces/verbatim.py:52
-msgid "Verbatim template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/frame.py:33
-msgid "Framed text"
-msgstr "Encadré"
-
-#: src/pyams_content/component/paragraph/interfaces/frame.py:40
-msgid "Frame body"
-msgstr "Contenu"
-
-#: src/pyams_content/component/paragraph/interfaces/frame.py:43
-msgid "Text template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/paragraph/interfaces/audio.py:34
-msgid "Audio"
-msgstr "Bande son"
-
-#: src/pyams_content/component/paragraph/interfaces/audio.py:56
-msgid "Audio template"
+#: src/pyams_content/component/paragraph/interfaces/header.py:33
+#: src/pyams_content/component/paragraph/interfaces/header.py:40
+msgid "Header"
+msgstr "Chapô"
+
+#: src/pyams_content/component/paragraph/interfaces/header.py:43
+#: src/pyams_content/features/header/interfaces/__init__.py:39
+msgid "Header template"
msgstr "Mode de rendu"
-#: src/pyams_content/component/paragraph/interfaces/audio.py:57
-msgid "Presentation template used for this audio file"
-msgstr "Mode de rendu utilisé pour cette bande son"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:74
-msgid "Contents..."
-msgstr "Contenu"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:239
-msgid "Show/hide all paragraphs"
-msgstr "Afficher/masquer tous les blocs"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:287
-#: src/pyams_content/component/paragraph/zmi/container.py:296
-#: src/pyams_content/component/paragraph/zmi/container.py:309
-msgid "Content blocks"
-msgstr "Blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:366
-msgid "Links and attachments..."
-msgstr "Récap. liens et PJ"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:378
-msgid "Content blocks links and attachments"
-msgstr "Récapitulatif des liens et pièces jointes par bloc de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:126
-msgid "No currently defined paragraph."
-msgstr "Aucun bloc n'est associé à ce contenu."
-
-#: src/pyams_content/component/paragraph/zmi/container.py:248
-msgid "Click to open/close all paragraphs editors"
-msgstr "Afficher/masquer tous les blocs"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:261
-msgid "Click to open/close paragraph editor"
-msgstr "Afficher/masquer ce bloc"
-
-#: src/pyams_content/component/paragraph/zmi/container.py:132
-msgid "Check allowed paragraph types to be able to create new paragraphs."
-msgstr ""
-"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:82
-msgid "Pictograms..."
-msgstr "Pictogrammes"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:95
-msgid "Add new pictogram paragraph"
-msgstr "Ajout de pictogrammes"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:122
-msgid "Edit pictogram paragraph properties"
-msgstr "Propriétés des pictogrammes"
-
-#. Default: Header
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:252
-msgid "pictogram-item-header"
-msgstr "En-tête"
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:339
-msgid "Pictogram was correctly added"
-msgstr "Le pictogramme a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:349
-#: src/pyams_content/component/paragraph/zmi/pictogram.py:387
-msgid "You must select a pictogram!"
-msgstr "Vous devez sélectionner un pictogramme !"
-
-#: src/pyams_content/component/paragraph/zmi/header.py:50
-msgid "Header..."
-msgstr "Chapô"
-
-#: src/pyams_content/component/paragraph/zmi/header.py:63
-msgid "Add new header paragraph"
-msgstr "Ajout d'un chapô"
-
-#: src/pyams_content/component/paragraph/zmi/header.py:90
-msgid "Edit header paragraph properties"
-msgstr "Propriétés du chapô"
-
-#: src/pyams_content/component/paragraph/zmi/contact.py:53
-msgid "Contact card..."
-msgstr "Fiche contact"
-
-#: src/pyams_content/component/paragraph/zmi/contact.py:66
-msgid "Add new contact card"
-msgstr "Ajout d'une fiche contact"
-
-#: src/pyams_content/component/paragraph/zmi/contact.py:94
-msgid "Edit contact card properties"
-msgstr "Propriétés de la fiche contact"
-
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:51
-msgid "Key points..."
-msgstr "Points clés"
-
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:64
-msgid "Add new key points paragraph"
-msgstr "Ajout de points clés"
-
-#: src/pyams_content/component/paragraph/zmi/keypoint.py:91
-msgid "Edit key points paragraph properties"
-msgstr "Propriétés des points clés"
-
-#: src/pyams_content/component/paragraph/zmi/video.py:53
-msgid "Video paragraph..."
-msgstr "Vidéo"
-
-#: src/pyams_content/component/paragraph/zmi/video.py:66
-msgid "Add new video paragraph"
-msgstr "Ajout d'une vidéo"
-
-#: src/pyams_content/component/paragraph/zmi/video.py:94
-#: src/pyams_content/component/video/zmi/paragraph.py:192
-msgid "Edit video properties"
-msgstr "Propriétés de la vidéo"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:77
-msgid "Milestones..."
-msgstr "Chronologie"
-
-#: 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:117
-msgid "Edit milestone paragraph properties"
-msgstr "Propriétés de la chronologie"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:299
-msgid "Add milestone"
-msgstr "Ajouter un jalon"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:312
-msgid "Add new milestone"
-msgstr "Ajout d'un jalon"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:339
-msgid "Edit milestone properties"
-msgstr "Propriétés du jalon"
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:327
-msgid "Milestone was correctly added"
-msgstr "Le jalon a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/milestone.py:270
-msgid "(missing paragraph)"
-msgstr "(paragraphe supprimé)"
-
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:55
-msgid "Key numbers..."
-msgstr "Chiffres-clés"
-
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:68
-msgid "Add new key number paragraph"
-msgstr "Ajout de chiffres-clés"
-
-#: src/pyams_content/component/paragraph/zmi/keynumber.py:96
-msgid "Edit key number paragraph properties"
-msgstr "Propriétés des chiffres-clés"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:65
-msgid "Content block types..."
-msgstr "Types de blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:79
-msgid "Content block types"
-msgstr "Types de blocs de contenu"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:89
-msgid ""
-"You can define which types of paragraphs are allowed in this container.\n"
-"\n"
-"Default paragraphs will be added automatically (in selected order) to any "
-"new created content.\n"
-"\n"
-"NOTICE: removing types from allowed types list will have no effect on "
-"already created contents!"
-msgstr ""
-"Vous pouvez indiquer la liste des types de blocs de contenu autorisés pour "
-"ce gabarit.\n"
-"\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 blocs autorisés sera "
-"sans effet sur les contenus existants."
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:214
-msgid "Submit"
-msgstr "Enregistrer"
-
-#: src/pyams_content/component/paragraph/zmi/__init__.py:195
-msgid "Paragraph was correctly added."
-msgstr "Le bloc a été ajouté."
-
-#: src/pyams_content/component/paragraph/zmi/html.py:76
-msgid "Raw HTML..."
-msgstr "Code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:89
-msgid "Add new raw HTML paragraph"
-msgstr "Ajout d'un bloc de code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:119
-msgid "Edit raw HTML paragraph properties"
-msgstr "Propriétés du code HTML"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:159
-msgid "Rich text..."
-msgstr "Texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:172
-msgid "Add new rich text paragraph"
-msgstr "Ajout d'un bloc de texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/html.py:202
-msgid "Edit rich text paragraph properties"
-msgstr "Propriétés du texte enrichi"
-
-#: src/pyams_content/component/paragraph/zmi/verbatim.py:56
-msgid "Verbatim..."
-msgstr "Verbatim"
-
-#: 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:96
-msgid "Edit verbatim paragraph properties"
-msgstr "Propriétés du verbatim"
-
-#: src/pyams_content/component/paragraph/zmi/frame.py:84
-msgid "Framed text..."
-msgstr "Encadré"
-
-#: src/pyams_content/component/paragraph/zmi/frame.py:98
-msgid "Add new framed text paragraph"
-msgstr "Ajout d'un encadré"
-
-#: src/pyams_content/component/paragraph/zmi/frame.py:129
-msgid "Edit framed text paragraph properties"
-msgstr "Propriétés de l'encadré"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:54
-msgid "Audio paragraph..."
-msgstr "Bande son"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:67
-msgid "Add new audio paragraph"
-msgstr "Ajout d'une bande son"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:108
-msgid "Edit audio properties"
-msgstr "Propriétés de la bande son"
-
-#: src/pyams_content/component/paragraph/zmi/audio.py:84
-#: src/pyams_content/component/paragraph/zmi/audio.py:128
-msgid "HTML content"
-msgstr "Contenu HTML"
-
-#: src/pyams_content/component/links/__init__.py:125
+#: src/pyams_content/component/paragraph/interfaces/header.py:44
+#: src/pyams_content/features/header/interfaces/__init__.py:40
+msgid "Presentation template used for this header"
+msgstr "Mode de rendu utilisé par ce chapô"
+
+#: src/pyams_content/component/theme/__init__.py:71
+#: src/pyams_content/component/theme/zmi/portlet.py:40
+#: src/pyams_content/component/theme/interfaces/__init__.py:47
+#: src/pyams_content/component/theme/interfaces/__init__.py:61
+msgid "Tags"
+msgstr "Tags"
+
+#: src/pyams_content/component/theme/__init__.py:119
+#: src/pyams_content/component/theme/zmi/portlet.py:55
+#: src/pyams_content/component/theme/interfaces/__init__.py:88
+#: src/pyams_content/component/theme/interfaces/__init__.py:102
+msgid "Themes"
+msgstr "Thèmes"
+
+#: src/pyams_content/component/theme/__init__.py:167
+#: src/pyams_content/component/theme/zmi/portlet.py:70
+#: src/pyams_content/component/theme/interfaces/__init__.py:129
+#: src/pyams_content/component/theme/interfaces/__init__.py:143
+msgid "Collections"
+msgstr "Collections"
+
+#: src/pyams_content/component/theme/__init__.py:80
+msgid "no defined tag"
+msgstr "aucun tag défini"
+
+#: src/pyams_content/component/theme/__init__.py:128
+msgid "no defined theme"
+msgstr "aucun thème défini"
+
+#: src/pyams_content/component/theme/__init__.py:176
+msgid "no defined collection"
+msgstr "aucune collection définie"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:55
+#: src/pyams_content/shared/view/zmi/theme.py:56
+msgid "Tags..."
+msgstr "Tags"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:66
+msgid "Content tags"
+msgstr "Tags du contenu"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:99
+#: src/pyams_content/shared/view/zmi/theme.py:102
+msgid "Themes..."
+msgstr "Thèmes"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:107
+msgid "Content themes"
+msgstr "Thèmes du contenu"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:159
+#: src/pyams_content/shared/view/zmi/theme.py:148
+msgid "Collections..."
+msgstr "Collections"
+
+#: src/pyams_content/component/theme/zmi/__init__.py:172
+msgid "Content collections"
+msgstr "Collections associées au contenu"
+
+#: src/pyams_content/component/theme/zmi/manager.py:51
+msgid "Tags settings..."
+msgstr "Paramétrage des tags"
+
+#: src/pyams_content/component/theme/zmi/manager.py:65
+msgid "Selected tags"
+msgstr "Tags sélectionnés"
+
+#: src/pyams_content/component/theme/zmi/manager.py:101
+msgid "Themes settings..."
+msgstr "Paramétrage des thèmes"
+
+#: src/pyams_content/component/theme/zmi/manager.py:115
+msgid "Selected themes"
+msgstr "Thèmes sélectionnés"
+
+#: src/pyams_content/component/theme/zmi/manager.py:151
+msgid "Collections settings..."
+msgstr "Paramétrage des collections"
+
+#: src/pyams_content/component/theme/zmi/manager.py:165
+msgid "Selected collections"
+msgstr "Collections sélectionnées"
+
+#: src/pyams_content/component/association/container.py:91
+#: src/pyams_content/component/association/zmi/__init__.py:296
+#: src/pyams_content/component/association/interfaces/__init__.py:93
+msgid "Associations"
+msgstr "Liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/paragraph.py:54
+#: src/pyams_content/component/association/zmi/__init__.py:96
+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 bloc « liens et pièces jointes »"
+
+#: src/pyams_content/component/association/zmi/paragraph.py:93
+msgid "Edit association paragraph properties"
+msgstr "Propriétés du bloc « liens et pièces jointes »"
+
+#: src/pyams_content/component/association/zmi/__init__.py:198
+msgid "Public title"
+msgstr "Libellé public"
+
+#: src/pyams_content/component/association/zmi/__init__.py:216
+msgid "Inner title"
+msgstr "Contenu interne"
+
+#: src/pyams_content/component/association/zmi/__init__.py:232
+msgid "Size"
+msgstr "Taille"
+
+#: src/pyams_content/component/association/zmi/__init__.py:273
+#: src/pyams_content/component/association/zmi/__init__.py:283
+msgid "Associations list"
+msgstr "Liste des liens et pièces jointes"
+
+#: src/pyams_content/component/association/zmi/__init__.py:66
+msgid "Association was correctly added."
+msgstr "L'association a été ajoutée."
+
+#: src/pyams_content/component/association/interfaces/__init__.py:43
+#: src/pyams_content/features/menu/interfaces/__init__.py:60
+msgid "Is this item visible in front-office?"
+msgstr "Si 'non', ce lien ne sera pas présenté aux internautes"
+
+#: src/pyams_content/component/association/interfaces/__init__.py:100
+msgid "Associations template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/component/association/interfaces/__init__.py:101
+msgid "Presentation template used for associations"
+msgstr "Modèle de présentation utilisé par ce bloc de contenu"
+
+#: src/pyams_content/component/links/__init__.py:123
msgid "Internal link"
msgstr "Lien interne"
-#: src/pyams_content/component/links/__init__.py:207
+#: src/pyams_content/component/links/__init__.py:219
msgid "External link"
msgstr "Lien externe"
-#: src/pyams_content/component/links/__init__.py:260
+#: src/pyams_content/component/links/__init__.py:272
msgid "Mailto link"
msgstr "Lien mailto"
-#: src/pyams_content/component/links/__init__.py:194
+#: src/pyams_content/component/links/__init__.py:206
msgid "target is not published"
msgstr "le contenu ciblé n'est pas publié"
+#: src/pyams_content/component/links/zmi/__init__.py:60
+msgid "Internal links"
+msgstr "Liens internes"
+
+#: src/pyams_content/component/links/zmi/__init__.py:75
+msgid "Add internal link"
+msgstr "Lien interne"
+
+#: src/pyams_content/component/links/zmi/__init__.py:89
+msgid "Add new internal link"
+msgstr "Ajout d'un lien interne"
+
+#: src/pyams_content/component/links/zmi/__init__.py:120
+msgid "Edit internal link properties"
+msgstr "Propriétés du lien interne"
+
+#: src/pyams_content/component/links/zmi/__init__.py:149
+msgid "External links"
+msgstr "Liens externes"
+
+#: src/pyams_content/component/links/zmi/__init__.py:164
+msgid "Add external link"
+msgstr "Lien externe"
+
+#: src/pyams_content/component/links/zmi/__init__.py:178
+msgid "Add new external link"
+msgstr "Ajout d'un lien externe"
+
+#: src/pyams_content/component/links/zmi/__init__.py:209
+msgid "Edit external link properties"
+msgstr "Propriétés du lien externe"
+
+#: src/pyams_content/component/links/zmi/__init__.py:238
+msgid "Mailto links"
+msgstr "Liens mailto"
+
+#: src/pyams_content/component/links/zmi/__init__.py:253
+msgid "Add mailto link"
+msgstr "Lien mailto"
+
+#: src/pyams_content/component/links/zmi/__init__.py:267
+msgid "Add new mailto link"
+msgstr "Ajout d'un lien « mailto »"
+
+#: src/pyams_content/component/links/zmi/__init__.py:298
+msgid "Edit mailto link properties"
+msgstr "Propriétés du lien « mailto »"
+
+#: src/pyams_content/component/links/zmi/reverse.py:57
+msgid "Reverse links"
+msgstr "Liens amont"
+
+#: src/pyams_content/component/links/zmi/reverse.py:66
+msgid "Content's internal links"
+msgstr "Autres contenus qui pointent vers ce contenu"
+
#: src/pyams_content/component/links/interfaces/__init__.py:36
msgid "Link title, as shown in front-office"
msgstr ""
@@ -1871,112 +1513,66 @@
#: src/pyams_content/component/links/interfaces/__init__.py:44
msgid "Name of the pictogram associated with this link"
-msgstr "Pictogramme à associer à ce lien"
-
-#: src/pyams_content/component/links/interfaces/__init__.py:64
-#: src/pyams_content/shared/logo/interfaces/__init__.py:50
+msgstr ""
+"Pictogramme à associer à ce lien. ATTENTION: ce pictogramme n'est affiché "
+"que par certains modes de rendu !!"
+
+#: src/pyams_content/component/links/interfaces/__init__.py:61
+#: src/pyams_content/shared/logo/interfaces/__init__.py:56
msgid "Target URL"
msgstr "URL cible"
-#: src/pyams_content/component/links/interfaces/__init__.py:65
-#: src/pyams_content/shared/logo/interfaces/__init__.py:51
+#: src/pyams_content/component/links/interfaces/__init__.py:62
+#: src/pyams_content/shared/logo/interfaces/__init__.py:57
msgid "URL used to access external resource"
msgstr ""
"URL utilisée pour accéder à cette ressource externe. Doit comprendre le "
"protocole d'accès au site, comme « http:// » ou « https:// »."
-#: src/pyams_content/component/links/interfaces/__init__.py:69
+#: src/pyams_content/component/links/interfaces/__init__.py:66
msgid "Language used in this remote resource"
msgstr ""
"Langue utilisée par cette ressource extene ; à préciser lorsqu'il ne s'agit "
"pas de la langue par défaut du site."
-#: src/pyams_content/component/links/interfaces/__init__.py:77
+#: src/pyams_content/component/links/interfaces/__init__.py:74
msgid "Target address"
msgstr "Adresse mail"
-#: src/pyams_content/component/links/interfaces/__init__.py:78
+#: src/pyams_content/component/links/interfaces/__init__.py:75
msgid "Target email address"
msgstr "Adresse de messagerie \"stricte\", soit uniquement \"xxx@yyy.com\""
-#: src/pyams_content/component/links/interfaces/__init__.py:81
+#: src/pyams_content/component/links/interfaces/__init__.py:78
msgid "Address name"
msgstr "Nom de messagerie"
-#: src/pyams_content/component/links/interfaces/__init__.py:82
+#: src/pyams_content/component/links/interfaces/__init__.py:79
msgid "Address as displayed in address book"
msgstr ""
"Nom de la boîte aux lettres, tel qu'il sera affiché dans l'application de "
"messagerie."
-#: src/pyams_content/component/links/zmi/__init__.py:60
-msgid "Internal links"
-msgstr "Liens internes"
-
-#: src/pyams_content/component/links/zmi/__init__.py:75
-msgid "Add internal link"
-msgstr "Lien interne"
-
-#: src/pyams_content/component/links/zmi/__init__.py:89
-msgid "Add new internal link"
-msgstr "Ajout d'un lien interne"
-
-#: src/pyams_content/component/links/zmi/__init__.py:125
-msgid "Edit internal link properties"
-msgstr "Propriétés du lien interne"
-
-#: src/pyams_content/component/links/zmi/__init__.py:159
-msgid "External links"
-msgstr "Liens externes"
-
-#: src/pyams_content/component/links/zmi/__init__.py:174
-msgid "Add external link"
-msgstr "Lien externe"
-
-#: src/pyams_content/component/links/zmi/__init__.py:188
-msgid "Add new external link"
-msgstr "Ajout d'un lien externe"
-
-#: src/pyams_content/component/links/zmi/__init__.py:224
-msgid "Edit external link properties"
-msgstr "Propriétés du lien externe"
-
-#: src/pyams_content/component/links/zmi/__init__.py:258
-msgid "Mailto links"
-msgstr "Liens mailto"
-
-#: src/pyams_content/component/links/zmi/__init__.py:273
-msgid "Add mailto link"
-msgstr "Lien mailto"
-
-#: src/pyams_content/component/links/zmi/__init__.py:287
-msgid "Add new mailto link"
-msgstr "Ajout d'un lien « mailto »"
-
-#: src/pyams_content/component/links/zmi/__init__.py:323
-msgid "Edit mailto link properties"
-msgstr "Propriétés du lien « mailto »"
-
-#: src/pyams_content/component/links/zmi/reverse.py:57
-msgid "Reverse links"
-msgstr "Liens amont"
-
-#: src/pyams_content/component/links/zmi/reverse.py:66
-msgid "Content's internal links"
-msgstr "Autres contenus qui pointent vers ce contenu"
-
#: src/pyams_content/component/video/__init__.py:73
#: src/pyams_content/component/video/interfaces/__init__.py:68
msgid "External video"
msgstr "Vidéo externe"
-#: src/pyams_content/component/video/interfaces/__init__.py:56
-msgid "Video provider"
-msgstr "Fournisseur"
-
-#: 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/component/video/provider/dailymotion.py:94
+msgid "Dailymotion settings"
+msgstr "Paramètres Dailymotion"
+
+#: src/pyams_content/component/video/provider/__init__.py:70
+msgid "Other provider"
+msgstr "Autre fournisseur"
+
+#: src/pyams_content/component/video/provider/__init__.py:94
+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
msgid "Integration code"
@@ -2216,26 +1812,10 @@
msgstr ""
"Couleur utilisée pour le titre, la signature et les commandes du lecteur"
-#: src/pyams_content/component/video/provider/__init__.py:70
-msgid "Other provider"
-msgstr "Autre fournisseur"
-
-#: src/pyams_content/component/video/provider/__init__.py:94
-msgid "Custom video settings"
-msgstr "Paramètres spécifiques"
-
#: src/pyams_content/component/video/provider/youtube.py:96
msgid "Youtube settings"
msgstr "Paramétres Youtube"
-#: src/pyams_content/component/video/provider/vimeo.py:92
-msgid "Vimeo settings"
-msgstr "Paramètres Vimeo"
-
-#: src/pyams_content/component/video/provider/dailymotion.py:94
-msgid "Dailymotion settings"
-msgstr "Paramètres Dailymotion"
-
#: src/pyams_content/component/video/zmi/paragraph.py:62
msgid "External video..."
msgstr "Vidéo externe"
@@ -2244,565 +1824,1488 @@
msgid "Add new external video..."
msgstr "Ajout d'une vidéo externe"
-#: src/pyams_content/component/video/zmi/paragraph.py:126
+#: src/pyams_content/component/video/zmi/paragraph.py:124
msgid "Video provider is required"
msgstr "Le nom du fournisseur est obligatoire"
-#: src/pyams_content/component/video/zmi/paragraph.py:175
-#: src/pyams_content/component/video/zmi/paragraph.py:229
+#: src/pyams_content/component/video/zmi/paragraph.py:172
+#: src/pyams_content/component/video/zmi/paragraph.py:223
msgid "Video provider settings"
msgstr "Paramètres liés au fournisseur"
-#: src/pyams_content/component/video/zmi/paragraph.py:155
+#: src/pyams_content/component/video/zmi/paragraph.py:152
msgid "Other settings"
msgstr "Autres paramètres"
-#: src/pyams_content/component/illustration/__init__.py:177
-#: src/pyams_content/component/illustration/interfaces/__init__.py:99
-#: src/pyams_content/component/illustration/zmi/paragraph.py:168
-#: src/pyams_content/component/illustration/zmi/__init__.py:56
-#: src/pyams_content/component/illustration/zmi/__init__.py:100
-msgid "Illustration"
-msgstr "Illustration"
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:69
-msgid "Name of picture's author"
-msgstr "Sous la forme \"Prénom Nom / Organisme\""
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:72
-msgid "Illustration template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/illustration/interfaces/__init__.py:73
-msgid "Presentation template used for illustration"
+#: src/pyams_content/component/video/interfaces/__init__.py:56
+msgid "Video provider"
+msgstr "Fournisseur"
+
+#: 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:240
+#: src/pyams_content/shared/common/zmi/properties.py:70
+#: src/pyams_content/shared/common/zmi/manager.py:96
+msgid "Properties"
+msgstr "Propriétés"
+
+#: src/pyams_content/shared/common/__init__.py:150
+#: src/pyams_content/shared/common/__init__.py:158
+#, python-format
+msgid "{date} by {principal}"
+msgstr "{date} par {principal}"
+
+#: src/pyams_content/shared/common/__init__.py:263
+#, python-format
+msgid "title length should be between 40 and 66 characters ({length} actually)"
msgstr ""
-"<span>Modèle de présentation utilisé par cette illustration.<br /"
-"><strong>ATTENTION :</strong> certains modes de rendu ne prennent pas en "
-"compte tous les types de médias !</span>"
-
-#: src/pyams_content/component/illustration/zmi/paragraph.py:60
-msgid "Illustration..."
-msgstr "Illustration"
-
-#: src/pyams_content/component/illustration/zmi/paragraph.py:73
-msgid "Add new illustration"
-msgstr "Ajout d'une illustration"
-
-#: src/pyams_content/component/illustration/zmi/paragraph.py:103
-msgid "Edit illustration properties"
-msgstr "Propriétés de l'illustration"
-
-#: src/pyams_content/component/illustration/zmi/__init__.py:155
-msgid "Navigation link illustration"
-msgstr "Illustration de navigation"
-
-#: src/pyams_content/component/illustration/zmi/__init__.py:102
-msgid "Header illustration"
-msgstr "Illustration d'en-tête"
-
-#: src/pyams_content/component/association/container.py:88
-#: src/pyams_content/component/association/interfaces/__init__.py:90
-#: src/pyams_content/component/association/zmi/__init__.py:296
-msgid "Associations"
-msgstr "Liens et pièces jointes"
-
-#: src/pyams_content/component/association/interfaces/__init__.py:97
-msgid "Associations template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/component/association/interfaces/__init__.py:98
-msgid "Presentation template used for associations"
-msgstr "Modèle de présentation utilisé par ce bloc de contenu"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:54
-#: src/pyams_content/component/association/zmi/__init__.py:96
-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 bloc « liens et pièces jointes »"
-
-#: src/pyams_content/component/association/zmi/paragraph.py:93
-msgid "Edit association paragraph properties"
-msgstr "Propriétés du bloc « liens et pièces jointes »"
-
-#: src/pyams_content/component/association/zmi/__init__.py:198
-msgid "Public title"
-msgstr "Libellé public"
-
-#: src/pyams_content/component/association/zmi/__init__.py:216
-msgid "Inner title"
-msgstr "Contenu interne"
-
-#: src/pyams_content/component/association/zmi/__init__.py:232
-msgid "Size"
-msgstr "Taille"
-
-#: src/pyams_content/component/association/zmi/__init__.py:273
-#: src/pyams_content/component/association/zmi/__init__.py:283
-msgid "Associations list"
-msgstr "Liste des liens et pièces jointes"
-
-#: src/pyams_content/component/association/zmi/__init__.py:66
-msgid "Association was correctly added."
-msgstr "L'association a été ajoutée."
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:40
-msgid "Is this key number visible in front-office?"
-msgstr "Si 'non', ce chiffre-clé ne sera pas présenté aux internautes"
-
-#. Default: Header
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:44
-#: src/pyams_content/component/keynumber/zmi/__init__.py:146
-msgid "key-number-label"
-msgstr "En-tête"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:45
+"Le titre devrait être composé de 40 à 66 caractères ({length} actuellement)"
+
+#: 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: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: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:165
+#: src/pyams_content/shared/common/zmi/dashboard.py:231
+#: src/pyams_content/root/zmi/search.py:159
+msgid "Owner"
+msgstr "Propriétaire"
+
+#: 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:172
+#: src/pyams_content/root/zmi/search.py:162
+msgid "Created after..."
+msgstr "Créé entre le"
+
+#: 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:178
+#: src/pyams_content/root/zmi/search.py:168
+msgid "Modified after..."
+msgstr "Modifié entre le"
+
+#: 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:60
+msgid "Composition"
+msgstr "Composition"
+
+#: 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:71
+msgid "Data types"
+msgstr "Types de contenus"
+
+#: src/pyams_content/shared/common/zmi/types.py:149
+msgid "Data type label"
+msgstr "Libellé du type"
+
+#: src/pyams_content/shared/common/zmi/types.py:189
+#: src/pyams_content/shared/common/zmi/types.py:429
+msgid "Default associations"
+msgstr "Liens et pièces jointes par défaut"
+
+#: src/pyams_content/shared/common/zmi/types.py:205
+msgid "Default themes"
+msgstr "Thèmes par défaut"
+
+#: src/pyams_content/shared/common/zmi/types.py:233
+msgid "Content data types"
+msgstr "Types de contenus"
+
+#: src/pyams_content/shared/common/zmi/types.py:256
+msgid "Add data type"
+msgstr "Ajouter un type"
+
+#: src/pyams_content/shared/common/zmi/types.py:268
+msgid "Add new data type"
+msgstr "Ajout d'un type de contenu"
+
+#: src/pyams_content/shared/common/zmi/types.py:311
+msgid "Data type properties"
+msgstr "Propriétés du type de contenu"
+
+#: src/pyams_content/shared/common/zmi/types.py:392
+msgid "Subtype label"
+msgstr "Libellé du sous-type"
+
+#: src/pyams_content/shared/common/zmi/types.py:473
+msgid "Add subtype"
+msgstr "Ajouter un sous-type"
+
+#: src/pyams_content/shared/common/zmi/types.py:485
+msgid "Add new subtype"
+msgstr "Ajout d'un sous-type de contenu"
+
+#: src/pyams_content/shared/common/zmi/types.py:532
+msgid "Data subtype properties"
+msgstr "Propriétés du fichier standard"
+
+#: src/pyams_content/shared/common/zmi/types.py:116
+msgid "No currently defined data type."
+msgstr "Aucun type de contenu n'est actuellement défini."
+
+#: src/pyams_content/shared/common/zmi/types.py:301
+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:508
+msgid "Subtype was correctly added."
+msgstr "Le sous-type a été ajouté."
+
+#: src/pyams_content/shared/common/zmi/types.py:522
+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:161
+msgid "Click to see subtypes"
+msgstr "Montrer ou caher les sous-types"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:845
+msgid "Prior checks"
+msgstr "Contrôles préalables : avez-vous ?"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:124
+msgid "Request publication"
+msgstr "Demander la publication"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:211
+#: src/pyams_content/workflow/__init__.py:315
+msgid "Cancel publication request"
+msgstr "Annuler la demande de publication"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:251
+msgid "Refuse publication request"
+msgstr "Refuser la demande de publication"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:305
+#: src/pyams_content/workflow/basic.py:196
+msgid "Publish"
+msgstr "Publier"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:394
+msgid "Request retire"
+msgstr "Demander le retrait"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:450
+msgid "Cancel retire request"
+msgstr "Annuler la demande de retrait"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:490
+msgid "Retire"
+msgstr "Retirer"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:531
+#: src/pyams_content/workflow/__init__.py:436
+msgid "Request archive"
+msgstr "Demander l'archivage"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:574
+msgid "Cancel archive request"
+msgstr "Annuler la demande d'archivage"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:614
+msgid "Archive"
+msgstr "Archiver"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:655
+#: src/pyams_content/workflow/__init__.py:501
+#: src/pyams_content/workflow/__init__.py:513
+#: src/pyams_content/workflow/__init__.py:525
+#: src/pyams_content/workflow/__init__.py:537
+#: src/pyams_content/workflow/__init__.py:549
+#: src/pyams_content/workflow/basic.py:224
+#: src/pyams_content/workflow/basic.py:236
+msgid "Create new version"
+msgstr "Créer une nouvelle version"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:706
+#: src/pyams_content/workflow/__init__.py:561
+#: src/pyams_content/workflow/basic.py:248
+msgid "Delete version"
+msgstr "Supprimer cette version"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:791
+msgid "Previewed content?"
+msgstr "Prévisualisé ce contenu ?"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:795
+msgid "Verified content?"
+msgstr "Audité ce contenu ?"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:181
+#: src/pyams_content/shared/common/zmi/workflow.py:363
+msgid "Publication start date is required"
+msgstr "La date de début de publication est obligatoire"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:274
+#: src/pyams_content/shared/common/zmi/workflow.py:420
+msgid "A comment is required"
+msgstr "Le commentaire est obligatoire"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:730
+msgid "Delete content"
+msgstr "Supprimer définitivement ce contenu"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:739
+msgid "Delete definitively"
+msgstr "Supprimer définitivement"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:868
msgid ""
-"Small text to be displayed above number (according to selected renderer)"
+"You must confirm that you previewed and checked this content before "
+"requesting publication!!"
+msgstr ""
+"Vous devez avoir prévisualisé et audité ce contenu avant de pouvoir le "
+"publier !!"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:88
+#, python-format
+msgid "{state} | by {principal}"
+msgstr "{state} | par {principal}"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:871
+msgid ""
+"You must confirm that you checked this content before requesting "
+"publication!!"
+msgstr ""
+"Vous devez avoir audité ce contenu avant de pouvoir le publier !!"
+
+#: src/pyams_content/shared/common/zmi/workflow.py:84
+#: src/pyams_content/workflow/__init__.py:648
+#: src/pyams_content/workflow/__init__.py:619
+#: src/pyams_content/workflow/basic.py:315
+#: src/pyams_content/workflow/basic.py:286
+#, python-format
+msgid "{state} {date}"
+msgstr "{state} {date}"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:263
+msgid "Duplicate content..."
+msgstr "Dupliquer le contenu"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:283
+msgid "Duplicate content"
+msgstr "Dupliquer ce contenu"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:84
+msgid "This title can be modified afterwards"
+msgstr "Pourra être modifié ultérieurement"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:274
+msgid "Duplicate this content"
+msgstr "Dupliquer ce contenu"
+
+#: src/pyams_content/shared/common/zmi/__init__.py:330
+#, 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:375
+msgid "Created or modified in this version"
+msgstr "Créé ou modifié dans cette version"
+
+#: 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:74
+msgid "Identity card"
+msgstr "Carte d'identité"
+
+#: src/pyams_content/shared/common/zmi/summary.py:86
+msgid "Requested action"
+msgstr "Évolution demandée"
+
+#: 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:146
+msgid "Current version"
+msgstr "À propos de cette version"
+
+#: src/pyams_content/shared/common/zmi/summary.py:176
+msgid "Content history"
+msgstr "Pour mémoire"
+
+#: src/pyams_content/shared/common/zmi/summary.py:117
+msgid "Associated comment"
+msgstr "Commentaire associé"
+
+#: 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:107
+#, python-format
+msgid "{state} {date} by {principal}"
+msgstr "{state} {date} par {principal}"
+
+#: src/pyams_content/shared/common/zmi/summary.py:164
+#, python-format
+msgid "{state} since {date}, by {principal}"
+msgstr "{state} depuis {date} par {principal}"
+
+#: src/pyams_content/shared/common/zmi/manager.py:107
+msgid "Shared tool properties"
+msgstr "Propriétés de l'outil"
+
+#: src/pyams_content/shared/common/zmi/manager.py:125
+msgid "WARNING"
+msgstr "ATTENTION"
+
+#: src/pyams_content/shared/common/zmi/manager.py:127
+msgid ""
+"Workflow shouldn't be modified if this tool already contains any shared "
+"content!"
msgstr ""
-"Texte court affiché au-dessus du chiffre (selon le mode de rendu sélectionné)"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:49
-#: src/pyams_content/component/keynumber/zmi/__init__.py:158
-msgid "Number"
-msgstr "Chiffre"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:50
-msgid "Key number value"
-msgstr "Chiffre"
-
-#. Default: Unit
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:53
-#: src/pyams_content/component/keynumber/zmi/__init__.py:167
-msgid "key-number-unit"
-msgstr "Unité"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:54
-msgid "Displayed unit"
-msgstr "Unité affichée"
-
-#: src/pyams_content/component/keynumber/interfaces/__init__.py:58
-msgid "The way this text will be rendered depends on presentation template"
+"Le workflow ne doit pas être modifié si cet outil renferme déjà des contenus "
+"partagés !"
+
+#: src/pyams_content/shared/common/zmi/manager.py:150
+msgid "Languages"
+msgstr "Langues"
+
+#: src/pyams_content/shared/common/zmi/manager.py:162
+msgid "Content languages"
+msgstr "Langues pour la traduction de cet outil"
+
+#: src/pyams_content/shared/common/zmi/manager.py:172
+msgid ""
+"Tool languages are used to translate own tool properties, and newly created "
+"contents will propose these languages by default"
+msgstr ""
+"Les langues sont utilisées pour traduire les propriétés de l'outil.\n"
+"\n"
+"Les nouveaux contenus proposeront également ces langues par défaut."
+
+#: src/pyams_content/shared/common/zmi/manager.py:80
+msgid "Content management"
+msgstr "Gérer ce gabarit"
+
+#: src/pyams_content/shared/common/zmi/manager.py:82
+msgid "Tool management"
+msgstr "Gérer cet outil"
+
+#: src/pyams_content/shared/common/zmi/owner.py:50
+msgid "Change owner..."
+msgstr "Changer de propriétaire"
+
+#: src/pyams_content/shared/common/zmi/owner.py:83
+msgid "Change content's owner"
+msgstr "Changement de propriétaire"
+
+#: src/pyams_content/shared/common/zmi/owner.py:125
+msgid ""
+"All versions of this content which are not archived will be transferred to "
+"newly selected owner"
+msgstr ""
+"Toutes les versions non archivées de ce contenu seront transférées au "
+"nouveau propriétaire sélectionné"
+
+#: src/pyams_content/shared/common/zmi/owner.py:60
+msgid "New owner"
+msgstr "Nouveau propriétaire"
+
+#: src/pyams_content/shared/common/zmi/owner.py:61
+msgid "The selected user will become the new content's owner"
+msgstr "L'utilisateur sélectionné deviendra le nouveau propriétaire du contenu"
+
+#: src/pyams_content/shared/common/zmi/owner.py:63
+msgid "Keep previous owner as contributor"
+msgstr "L'ancien propriétaire reste contributeur"
+
+#: src/pyams_content/shared/common/zmi/owner.py:64
+msgid "If 'yes', the previous owner will still be able to modify this content"
+msgstr ""
+"Si 'oui', l'actuel propriétaire du contenu en restera contributeur et pourra "
+"donc continuer à le mettre à jour"
+
+#: src/pyams_content/shared/common/zmi/owner.py:74
+msgid "Change owner"
+msgstr "Changer le propriétaire"
+
+#: src/pyams_content/shared/common/zmi/rename.py:62
+msgid "Change URL..."
+msgstr "Changer d'URL"
+
+#: src/pyams_content/shared/common/zmi/rename.py:79
+msgid "Change item URL"
+msgstr "Modification de l'URL"
+
+#: src/pyams_content/shared/common/zmi/rename.py:86
+msgid "Item URL part"
+msgstr "URL du contenu"
+
+#: src/pyams_content/shared/common/zmi/rename.py:87
+msgid "URL part used to access this content"
+msgstr "Portion de l'URL utilisée pour accéder à ce contenu"
+
+#: src/pyams_content/shared/common/zmi/rename.py:121
+msgid "You must provide an URL for this item!"
+msgstr "Vous devez fournir une URL pour ce contenu !"
+
+#: src/pyams_content/shared/common/zmi/site.py:38
+#, python-format
+msgid ""
+"SEARCH - Between all contents published into « {site} »"
+msgstr ""
+"RECHERCHE - Tous contenus présents dans « {site} » "
+"confondus"
+
+#: src/pyams_content/shared/common/zmi/portal.py:46
+msgid "Edit default template properties"
+msgstr "Modèle de présentation par défaut"
+
+#: src/pyams_content/shared/common/zmi/portal.py:56
+msgid ""
+"**This form allows you to select shared content default template.**\n"
+"\n"
+"If you choose to use a shared template, you can only adjust settings of each "
+"portlet individually but can't change portlets list or page configuration.\n"
+"\n"
+"If you use a local template, you can define a whole custom configuration but "
+"the template definition can't be reused anywhere..."
msgstr ""
-"La présentation de cette information peut varier en fonction du mode de "
-"rendu choisi"
-
-#: src/pyams_content/component/keynumber/zmi/__init__.py:217
-msgid "Add keynumber"
-msgstr "Ajouter un chiffre-clé"
-
-#: src/pyams_content/component/keynumber/zmi/__init__.py:230
-msgid "Add new keynumber"
-msgstr "Ajout d'un chiffre-clé"
-
-#: src/pyams_content/component/keynumber/zmi/__init__.py:259
-msgid "Edit keynumber properties"
-msgstr "Propriétés du chiffre-clé"
-
-#: src/pyams_content/component/keynumber/zmi/__init__.py:245
-msgid "Key number was correctly added"
-msgstr "Le chiffre-clé a été ajouté."
-
-#: src/pyams_content/component/keynumber/portlet/__init__.py:71
-msgid "Key Numbers"
-msgstr "Chiffres-clés"
-
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
-msgid "Portlet title"
-msgstr "Titre"
-
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
-msgid "Teaser"
-msgstr "Accroche"
-
-#: src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
-msgid "Short text displayed above key numbers"
-msgstr "Texte d'introduction des chiffres-clés"
-
-#: src/pyams_content/component/keynumber/portlet/zmi/__init__.py:102
-#: src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:22
-msgid "Associated links"
-msgstr "Liens associés"
-
-#: src/pyams_content/shared/blog/interfaces/__init__.py:33
-msgid "Blog post"
-msgstr "Article de blog"
-
-#: src/pyams_content/shared/blog/zmi/__init__.py:52
-msgid "This blog post"
-msgstr "Cet article"
-
-#: src/pyams_content/shared/blog/zmi/__init__.py:71
-#: src/pyams_content/shared/blog/zmi/__init__.py:81
-msgid "Add blog post"
-msgstr "Ajouter un article"
-
-#: src/pyams_content/shared/blog/zmi/__init__.py:62
+"Vous pouvez modifier le modèle de présentation qui sera appliqué **par "
+"défaut** à tous les contenus de ce gabarit.\n"
+"\n"
+"Si vous choisissez d'utiliser un modèle de présentation partagé, vous "
+"pourrez ajuster les paramètres de chaque composant mais ne pourrez pas "
+"modifier la liste des composants ou leur position et la configuration de la "
+"page.\n"
+"\n"
+"Si vous choisissez d'utiliser un modèle de présentation \"local\", vous "
+"pourrez définir l'ensemble de la configuration mais le modèle de "
+"présentation ne pourra pas être réutilisé ailleurs que dans les contenus de "
+"ce gabarit."
+
+#: src/pyams_content/shared/common/zmi/portal.py:72
+msgid "Override tool default template"
+msgstr "Ne pas utiliser le modèle par défaut de ce gabarit"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:134
+msgid "Unique ID"
+msgstr "N° IN"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:181
+msgid "Status date"
+msgstr "En date du"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:213
+msgid "Status principal"
+msgstr "Intervenant"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:250
+msgid "Last modification"
+msgstr "Dernière modification"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:273
+#: src/pyams_content/root/zmi/__init__.py:110
+msgid "Dashboard"
+msgstr "Tableau de bord"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:283
+msgid "Contents dashboard"
+msgstr "Mon tableau de bord"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:329
+#: src/pyams_content/root/zmi/__init__.py:159
+#, python-format
+msgid "MANAGER - {0} content waiting for your action"
+msgstr "RESPONSABLE - {0} contenu en attente de votre intervention"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:330
+#: src/pyams_content/root/zmi/__init__.py:160
+#, python-format
+msgid "MANAGER - {0} contents waiting for your action"
+msgstr "RESPONSABLE - {0} contenus en attente de votre intervention"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:371
+#: src/pyams_content/root/zmi/__init__.py:204
+#, python-format
+msgid "CONTRIBUTOR - {0} content waiting for action"
+msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:372
+#: src/pyams_content/root/zmi/__init__.py:205
+#, python-format
+msgid "CONTRIBUTOR - {0} contents waiting for action"
+msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:404
+#: src/pyams_content/root/zmi/__init__.py:240
+#, python-format
+msgid "CONTRIBUTOR - {0} modified content"
+msgstr "CONTRIBUTEUR - {0} contenu modifié"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:445
+#: src/pyams_content/root/zmi/__init__.py:283
+msgid "My contents"
+msgstr "Mes contenus"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:460
+#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
+#: src/pyams_content/root/zmi/__init__.py:298
+#: src/pyams_content/root/zmi/templates/dashboard.pt:8
+msgid "My favorites"
+msgstr "Mes favoris"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:469
+#: src/pyams_content/root/zmi/__init__.py:307
+#, python-format
+msgid "CONTRIBUTOR - {0} favorite"
+msgstr "CONTRIBUTEUR - {0} contenu favori"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:470
+#: src/pyams_content/root/zmi/__init__.py:308
+#, python-format
+msgid "CONTRIBUTOR - {0} favorites"
+msgstr "CONTRIBUTEUR - {0} contenus favoris"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:482
+#: src/pyams_content/shared/common/zmi/templates/header.pt:23
+msgid "Add/remove from favorites"
+msgstr "Ajouter/enlever des favoris"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:545
+#: src/pyams_content/root/zmi/__init__.py:346
+msgid "Your favorites"
+msgstr "Mes favoris"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:558
+#: src/pyams_content/root/zmi/__init__.py:359
+msgid "My preparations"
+msgstr "Mes préparations"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:567
+#: src/pyams_content/root/zmi/__init__.py:368
+#, python-format
+msgid "CONTRIBUTOR - {0} prepared content"
+msgstr "CONTRIBUTEUR - {0} contenu en préparation"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:568
+#: src/pyams_content/root/zmi/__init__.py:369
#, python-format
-msgid "Blog post « {title} »"
-msgstr "Article de blog « {title} »"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:60
-msgid "Blog management"
-msgstr "Gérer ce blog"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:83
-#: src/pyams_content/shared/blog/zmi/manager.py:97
-msgid "Add blog manager"
-msgstr "Ajouter un blog"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:96
-msgid "Blog manager"
-msgstr "Blog"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:155
-#: src/pyams_content/shared/blog/zmi/manager.py:167
-#: src/pyams_content/shared/site/zmi/container.py:107
-#: src/pyams_content/shared/site/zmi/container.py:119
-msgid "Publication dates..."
-msgstr "Dates de publication"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:181
-#: src/pyams_content/shared/site/zmi/container.py:133
-msgid "Update publication dates"
-msgstr "Dates de publication"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:127
-#: src/pyams_content/shared/site/zmi/manager.py:156
-msgid "You must provide a short name for default server language!"
-msgstr "Vous devez fournir un nom court pour la langue par défaut du serveur !"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:131
-msgid "Specified blog manager name is already used!"
-msgstr "Le nom indiqué pour ce blog existe déjà !"
-
-#: src/pyams_content/shared/blog/zmi/manager.py:135
-msgid "A blog manager is already registered with this name!!"
-msgstr "Un blog est déjà inscrit dans le registre avec ce nom !"
-
-#: src/pyams_content/shared/imagemap/paragraph.py:91
-msgid "no selected image map"
-msgstr "aucune image cliquable sélectionnée"
-
-#: src/pyams_content/shared/imagemap/paragraph.py:97
+msgid "CONTRIBUTOR - {0} prepared contents"
+msgstr "CONTRIBUTEUR - {0} contenus en préparation"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:608
+#: src/pyams_content/root/zmi/__init__.py:408
+msgid "Your prepared contents"
+msgstr "Mes contenus en préparation"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:621
+#: src/pyams_content/root/zmi/__init__.py:421
+msgid "My submissions"
+msgstr "Mes demandes"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:630
+#: src/pyams_content/root/zmi/__init__.py:430
+#, python-format
+msgid "CONTRIBUTOR - {0} submitted content"
+msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:631
+#: src/pyams_content/root/zmi/__init__.py:431
+#, python-format
+msgid "CONTRIBUTOR - {0} submitted contents"
+msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:671
+#: src/pyams_content/root/zmi/__init__.py:470
+msgid "Your submitted contents"
+msgstr "Mes contenus soumis à un responsable"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:684
+#: src/pyams_content/root/zmi/__init__.py:483
+msgid "My publications"
+msgstr "Mes publications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:693
+#: src/pyams_content/root/zmi/__init__.py:492
+#, python-format
+msgid "CONTRIBUTOR - {0} published content"
+msgstr "CONTRIBUTEUR - {0} contenu publié"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:694
+#: src/pyams_content/root/zmi/__init__.py:493
+#, python-format
+msgid "CONTRIBUTOR - {0} published contents"
+msgstr "CONTRIBUTEUR - {0} contenus publiés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:734
+#: src/pyams_content/root/zmi/__init__.py:532
+msgid "Your published contents"
+msgstr "Mes contenus publiés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:747
+#: src/pyams_content/root/zmi/__init__.py:545
+msgid "My retired contents"
+msgstr "Mes contenus retirés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:756
+#: src/pyams_content/root/zmi/__init__.py:554
+#, python-format
+msgid "CONTRIBUTOR - {0} retired content"
+msgstr "CONTRIBUTEUR - {0} contenu retiré"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:757
+#: src/pyams_content/root/zmi/__init__.py:555
#, python-format
-msgid "image map '{0}' can't be found"
-msgstr "l'image cliquable '{0}' est introuvable"
-
-#: src/pyams_content/shared/imagemap/paragraph.py:105
+msgid "CONTRIBUTOR - {0} retired contents"
+msgstr "CONTRIBUTEUR - {0} contenus retirés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:798
+#: src/pyams_content/root/zmi/__init__.py:595
+msgid "Your retired contents"
+msgstr "Mes contenus retirés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:811
+#: src/pyams_content/root/zmi/__init__.py:608
+msgid "My archived contents"
+msgstr "Mes contenus archivés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:820
+#: src/pyams_content/root/zmi/__init__.py:617
+#, python-format
+msgid "CONTRIBUTOR - {0} archived content"
+msgstr "CONTRIBUTEUR - {0} contenu archivé"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:821
+#: src/pyams_content/root/zmi/__init__.py:618
+#, python-format
+msgid "CONTRIBUTOR - {0} archived contents"
+msgstr "CONTRIBUTEUR - {0} contenus archivés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:868
+#: src/pyams_content/root/zmi/__init__.py:664
+msgid "Your archived contents"
+msgstr "Mes contenus archivés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:882
+#: src/pyams_content/root/zmi/__init__.py:678
+msgid "Other interventions"
+msgstr "Toutes les interventions"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:897
+#: src/pyams_content/root/zmi/__init__.py:693
+msgid "Last publications"
+msgstr "Dernières publications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:906
+#: src/pyams_content/root/zmi/__init__.py:702
+#, python-format
+msgid "CONTRIBUTORS - {0} published content"
+msgstr "TOUS CONTRIBUTEURS - {0} contenu publié"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:953
+#: src/pyams_content/root/zmi/__init__.py:748
+msgid "Last published contents"
+msgstr "Derniers contenus publiés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:966
+#: src/pyams_content/root/zmi/__init__.py:761
+msgid "Last updates"
+msgstr "Dernières modifications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:975
+#: src/pyams_content/root/zmi/__init__.py:770
+#, python-format
+msgid "CONTRIBUTORS - {0} updated content"
+msgstr "TOUS CONTRIBUTEURS - {0} contenu modifié"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:1020
+#: src/pyams_content/root/zmi/__init__.py:814
+msgid "Last updated contents"
+msgstr "Derniers contenus modifiés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:409
+#: src/pyams_content/root/zmi/__init__.py:245
+#, python-format
+msgid "CONTRIBUTOR - {0} modified contents"
+msgstr "CONTRIBUTEUR - {0} contenus modifiés"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:411
+#: src/pyams_content/root/zmi/__init__.py:247
+#, python-format
+msgid "CONTRIBUTOR - Last {0} modified contents"
+msgstr "CONTRIBUTEUR - Les {0} dernières modifications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:911
+#: src/pyams_content/root/zmi/__init__.py:707
#, python-format
-msgid "image map '{0}' is not published"
-msgstr "l'image cliquable '{0}' n'est pas publiée"
-
-#: src/pyams_content/shared/imagemap/__init__.py:154
-msgid "no area defined"
-msgstr "aucune zone définie"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:35
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:88
-msgid "Image map"
-msgstr "Image cliquable"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:49
-#: src/pyams_content/shared/imagemap/zmi/container.py:140
-msgid "Link target"
-msgstr "Cible du lien"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:50
-msgid "Internal or external link associated with this map area"
-msgstr "Lien interne ou externe associé à cette zone"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:55
-msgid "Alternate label associated with this area"
-msgstr "Libellé de substitution associé à cette zone"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:58
-msgid "Map area coordinates"
-msgstr "Coordonnées"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:59
-msgid "List of coordinates of image area"
-msgstr "Positionnement de la zone cliquable sur l'image"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:67
-msgid "Image supporting map areas"
-msgstr "Sélection de l'image qui supportera les zones cliquables"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:70
-#: src/pyams_content/shared/imagemap/zmi/container.py:65
-msgid "Image map areas"
-msgstr "Zones cliquables de l'images"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:71
-msgid "List of defined map areas"
-msgstr "Liste des zones cliquables définies sur l'image"
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:96
-msgid "Reference to image map object"
+msgid "CONTRIBUTORS - Last {0} published contents"
+msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:913
+#: src/pyams_content/root/zmi/__init__.py:709
+msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
+msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:980
+#: src/pyams_content/root/zmi/__init__.py:775
+#, python-format
+msgid "CONTRIBUTORS - Last {0} updated contents"
+msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:982
+#: src/pyams_content/root/zmi/__init__.py:777
+msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
+msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:306
+#, python-format
+msgid "SEARCH - Between all contents of type « {type} »"
+msgstr "RECHERCHE - Tous contenus « {type} » confondus"
+
+#: src/pyams_content/shared/common/zmi/dashboard.py:171
+#: src/pyams_content/shared/common/zmi/header.py:96
+msgid "Content publication start date is not passed yet"
+msgstr "La date de début de publication n'est pas encore atteinte"
+
+#: src/pyams_content/shared/common/zmi/security.py:64
+msgid "Contributors restrictions"
+msgstr "Paramètres des contributeurs"
+
+#: src/pyams_content/shared/common/zmi/security.py:73
+msgid "Content contributors restrictions"
+msgstr "Liste des contributeurs"
+
+#: src/pyams_content/shared/common/zmi/security.py:107
+msgid "Contributor name"
+msgstr "Nom du contributeur"
+
+#: src/pyams_content/shared/common/zmi/security.py:118
+#: src/pyams_content/shared/common/zmi/security.py:270
+msgid "Activated publication checks?"
+msgstr "Tunnel de publication actif ?"
+
+#: src/pyams_content/shared/common/zmi/security.py:218
+msgid "Managers restrictions"
+msgstr "Paramètres des responsables"
+
+#: src/pyams_content/shared/common/zmi/security.py:227
+msgid "Content managers restrictions"
+msgstr "Liste des responsables"
+
+#: src/pyams_content/shared/common/zmi/security.py:259
+msgid "Manager name"
+msgstr "Nom du responsable"
+
+#: src/pyams_content/shared/common/zmi/security.py:287
+msgid "Restricted"
+msgstr "Restrictions"
+
+#: src/pyams_content/shared/common/zmi/security.py:304
+msgid "Owners"
+msgstr "Propriétaires"
+
+#: src/pyams_content/shared/common/zmi/security.py:394
+msgid "Publication workflow"
+msgstr "Workflow de publication"
+
+#: src/pyams_content/shared/common/zmi/security.py:167
+#, python-format
+msgid "Edit contributor restrictions for « {0} »"
+msgstr "Gérer les paramètres d'intervention de « {0} »"
+
+#: src/pyams_content/shared/common/zmi/security.py:353
+#, python-format
+msgid "Edit manager restrictions for « {0} »"
+msgstr "Gérer les paramètres d'intervention de « {0} »"
+
+#: src/pyams_content/shared/common/zmi/security.py:400
+msgid "Apply contents restrictions"
+msgstr "Appliquer des restrictions d'accès"
+
+#: src/pyams_content/shared/common/zmi/security.py:402
+msgid ""
+"You can specify which contents this manager will be able to manage. If you "
+"specify several criteria, the manager will be able to manage contents for "
+"which at least one criteria is matching."
msgstr ""
-"Référence interne de l'image cliquable. Vous pouvez la rechercher par des "
-"mots de son titre, ou par son numéro interne (précédé d'un '+')."
-
-#: src/pyams_content/shared/imagemap/interfaces/__init__.py:99
-msgid "Image map template"
-msgstr "Mode de rendu"
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:54
-msgid "Image areas"
-msgstr "Zones de l'image"
-
-#: 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:115
-msgid "No currently defined area."
-msgstr "Aucune zone cliquable n'est actuellement définie."
-
-#: src/pyams_content/shared/imagemap/zmi/container.py:175
-#: src/pyams_content/root/zmi/sites.py:170
-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:186
-msgid "Bad query object_name parameter value!"
-msgstr "Valeur incorrecte du paramètre object_name !"
-
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:54
-msgid "Image map..."
-msgstr "Image cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:67
-msgid "Add new image map"
-msgstr "Ajout d'une image cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/paragraph.py:94
-#: src/pyams_content/shared/logo/zmi/paragraph.py:93
-msgid "Edit paragraph properties"
-msgstr "Propriétés de l'image cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:44
-msgid "This image map"
-msgstr "Cette image"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:63
-msgid "Add image map"
-msgstr "Ajouter une image"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:73
-msgid "Adding image map"
-msgstr "Ajout d'une image"
-
-#: src/pyams_content/shared/imagemap/zmi/__init__.py:54
+"Vous pouvez indiquer les propriétés des contenus que ce responsable sera "
+"autorisé à gérer. Si vous indiquez plusieurs critères, il pourra gérer les "
+"contenus pour lesquels au moins l'un des critères correspond."
+
+#: src/pyams_content/shared/common/zmi/header.py:85
+#, python-format
+msgid "{state} by {principal}"
+msgstr "{state} par {principal}"
+
+#: src/pyams_content/shared/common/zmi/header.py:116
#, python-format
-msgid "Image map « {title} »"
-msgstr "Article de blog « {title} »"
-
-#: src/pyams_content/shared/imagemap/zmi/area.py:47
-msgid "Add image area"
-msgstr "Ajouter une zone"
-
-#: src/pyams_content/shared/imagemap/zmi/area.py:66
-msgid "Add new image area"
-msgstr "Ajout d'une zone cliquable"
-
-#: src/pyams_content/shared/imagemap/zmi/area.py:107
-msgid "Edit image map properties"
-msgstr "Propriétés de l'image"
-
-#: src/pyams_content/shared/imagemap/zmi/properties.py:40
-msgid "Background image"
-msgstr "Image de fond"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:32
-msgid "View"
-msgstr "Vue"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:41
-msgid "Last update date"
-msgstr "Date de dernière modification"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:42
-msgid "Current publication date"
-msgstr "Date de publication de la version actuelle"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:43
-msgid "First publication date"
-msgstr "Date de première publication"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:148
-msgid "Always include selected internal references"
-msgstr "Toujours inclure toutes les références internes"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:149
-msgid "Include selected internal references only if empty"
-msgstr "Inclure les références internes seulement lorsque la vue est vide"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:60
-msgid "Select context type?"
-msgstr "Type du contexte ?"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:61
-msgid "If 'yes', content type will be extracted from context"
+msgid "since {date}"
+msgstr "depuis {date}"
+
+#: src/pyams_content/shared/common/zmi/header.py:128
+msgid "access published version"
+msgstr "accéder à la version en ligne"
+
+#: src/pyams_content/shared/common/zmi/header.py:135
+msgid "access new version"
+msgstr "accéder à la version en préparation"
+
+#: src/pyams_content/shared/common/zmi/header.py:145
+msgid "access waiting version"
+msgstr "accéder à la version en attente"
+
+#: src/pyams_content/shared/common/zmi/header.py:156
+msgid "access retired version"
+msgstr "accéder à la version retirée"
+
+#: src/pyams_content/shared/common/zmi/header.py:166
+msgid "access archived version"
+msgstr "accéder à la version archivée"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
+msgid ""
+"You considerate that the currently published version should no more be "
+"publicly visible."
+msgstr ""
+"Vous considérez que la version actuellement en ligne ne doit plus être "
+"consultable."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
+msgid ""
+"WARNING: the content will remain visible until a manager validate the "
+"request."
+msgstr ""
+"ATTENTION : ce contenu restera visible jusqu'à ce qu'un responsable prenne "
+"en charge votre demande."
+
+#: src/pyams_content/shared/common/zmi/templates/header.pt:6
+msgid "Back to previous page"
+msgstr "Revenir à la page précédente"
+
+#: src/pyams_content/shared/common/zmi/templates/header.pt:20
+msgid "by ${owner}"
+msgstr "de ${owner}"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
+msgid "As a manager, you considerate that this content must be archived."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu doit être archivé."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
+#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
+msgid ""
+"After archiving, it will be backed up but you will not be able to publish it "
+"again except by creating a new version."
+msgstr ""
+"L'archivage permet de conserver une version d'un contenu dans son état "
+"actuel ; il pourra ensuite à nouveau être publié, en créant une nouvelle "
+"version."
+
+#: src/pyams_content/shared/common/zmi/templates/check-input.pt:34
+#: src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
+#: src/pyams_content/shared/common/interfaces/types.py:47
+#: src/pyams_content/shared/form/zmi/field.py:160
+#: src/pyams_content/shared/form/interfaces/__init__.py:62
+#: src/pyams_content/features/menu/zmi/__init__.py:208
+msgid "Label"
+msgstr "Libellé"
+
+#: src/pyams_content/shared/common/zmi/templates/check-input.pt:39
+#: src/pyams_content/features/checker/zmi/__init__.py:43
+msgid "Audit"
+msgstr "Audit"
+
+#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:29
+#: src/pyams_content/root/zmi/templates/dashboard.pt:29
+msgid "Quick search..."
+msgstr "Recherche rapide..."
+
+#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
+#: src/pyams_content/root/zmi/templates/dashboard.pt:35
+msgid "Advanced search..."
+msgstr "Recherche avancée..."
+
+#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:49
+#: src/pyams_content/root/zmi/templates/dashboard.pt:49
+msgid "You are not actually concerned by any content."
+msgstr "Vous n'êtes actuellement concerné par aucun contenu."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
+msgid ""
+"As a manager, you considerate that this content is complete and can be "
+"published 'as is'."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu peut être publié en "
+"l'état."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
+msgid ""
+"This operation will make the content publicly available (except if "
+"restricted access has been set)."
+msgstr ""
+"Cette opération va rendre le contenu visible de tous, sauf si des "
+"restrictions d'accès lui ont été appliquées."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
+msgid ""
+"This new content is going to be created in 'draft' mode, so that you can "
+"complete it before publication."
+msgstr ""
+"Ce nouveau contenu va être créé en statut 'Brouillon' pour vous permettre de "
+"le préparer."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
+msgid ""
+"A unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+"Un numéro unique va lui être attribué ; il sera permanent, quelle que soit "
+"la version."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
+msgid ""
+"WARNING: this request was made by a contributor which is not the owner of "
+"this content."
msgstr ""
-"Si 'oui', seuls des contenus du même type que le contexte seront "
-"automatiquement sélectionnés"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:65
-msgid "Other content types"
-msgstr "Autres types de contenus"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:66
-msgid "Selected content types; leave empty for all"
+"ATTENTION : cette demande est formulée par un contributeur habilité qui "
+"n'est pas le propriétaire."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
+msgid "You considerate that the currently published must evolve."
+msgstr "Vous considérez que la version actuelle de ce contenu doit évoluer."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
+msgid ""
+"By creating a new version, you can update it's content without impacting the "
+"currently published one."
+msgstr ""
+"En créant une nouvelle version, vous pourrez apporter des modifications sans "
+"impacter la version actuelle."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
+msgid ""
+"When the new version will be complete, you will be able to make a new "
+"publication request to replace the currently published version (which will "
+"be archived automatically)."
+msgstr ""
+"Lorsque la nouvelle version sera prête, vous demanderez sa publication (et "
+"la version actuelle sera automatiquement archivée)."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
+msgid ""
+"This publication request is going to be transmitted to a content manager."
+msgstr "Cette demande de publication va être soumise à un responsable."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
+msgid "You are going to duplicate a whole content."
+msgstr ""
+"Vous vous apprêtez à dupliquer une version de ce contenu pour en créer un "
+"nouveau."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
+msgid ""
+"The new copy is going to be created in 'draft' mode, so that you can modify "
+"it before publication."
+msgstr ""
+"Cette copie va être créée en statut 'Brouillon' pour vous permettre de la "
+"préparer."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
+msgid ""
+"A new unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
msgstr ""
-"Autres types de contenus sélectionnés ; si l'on n'extrait pas le type du "
-"contexte et si cette sélection est vide, tous les types seront pris en charge"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:73
-msgid "Order by"
-msgstr "Ordre de tri"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:74
-msgid "Property to use to sort results"
-msgstr "Propriété utilisée pour trier les résultats"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:79
-msgid "Reversed order?"
-msgstr "Ordre inverse ?"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:80
-msgid "If 'yes', items order will be reversed"
-msgstr "Si 'oui', le tri se fera en ordre descendant"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:84
-msgid "Results count limit"
-msgstr "Limite de résultats"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:85
-msgid "Maximum number of results that the view may retrieve"
-msgstr "Nombre maximal de résultats que la vue doit renvoyer"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:158
-msgid "Internal references usage"
-msgstr "Utilisation des références internes"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:159
-msgid "Specify how selected references are included into view results"
+"Un numéro unique lui sera également attribué ; ce numéro sera conservé "
+"pendant toute la vie du contenu, quelle que soit la version."
+
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:128
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:128
+msgid "Created between"
+msgstr "Créé entre le"
+
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:140
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:166
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:140
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:166
+msgid "and"
+msgstr "et le"
+
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:154
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:154
+msgid "Modified between"
+msgstr "Modifié entre le"
+
+#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:202
+#: src/pyams_content/root/zmi/templates/advanced-search.pt:202
+msgid "Tab label"
+msgstr "Libellé de l'onglet"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content can't be published "
+"'as is'."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu ne peut pas être "
+"publié en l'état."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
+msgid ""
+"The contributor will be notified of this and will be able to update the "
+"content before doing a new publication request."
+msgstr ""
+"Le contributeur qui vous a sollicité va être notifié de votre refus ; il "
+"pourra modifier ce contenu et effectuer une nouvelle demande de publication."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's previous "
+"retired state."
+msgstr "En annulant cette demande, ce contenu va retourner en statut 'Retiré'."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's normal "
+"published state."
+msgstr "En annulant cette demande, ce contenu va retourner en statut 'Publié'."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content should no longer be "
+"published."
+msgstr ""
+"En tant que responsable, vous considérez que ce contenu ne doit plus être "
+"publié."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
+msgid ""
+"Retired content won't be visible anymore, but it can be updated and "
+"published again, or archived."
+msgstr ""
+"Après ce retrait, il ne sera plus visible des internautes. Il pourra par "
+"contre être publié à nouveau, archivé, ou modifié en créant une nouvelle "
+"version."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
+msgid ""
+"After canceling the request, you will be able to update the content again."
+msgstr "En annulant cette demande, ce contenu pourra à nouveau être modifié."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
+msgid ""
+"This content was never published. If you confirm deletion, it won't be "
+"possible to restore it."
+msgstr ""
+"Ce contenu n'a jamais été publié. Une fois supprimé, il ne pourra pas être "
+"récupéré."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
+msgid ""
+"The content version is going to be definitely deleted. Will only remain the "
+"currently published version."
+msgstr ""
+"Cette version va être définitivement supprimée, pour revenir à la version "
+"précédente."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
+msgid ""
+"RECALL: you are not the owner of the content on which you are intervening."
msgstr ""
-"Indique comment les références internes indiquées seront intégrées à la "
-"liste des résultats"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:164
-msgid "Exclude context?"
-msgstr "Exclure le contexte ?"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:165
-msgid "If 'yes', context will be excluded from results list"
+"ATTENTION : vous intervenez sur un contenu dont vous n'êtes pas le "
+"propriétaire."
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
+msgid "FOR YOUR INFORMATION"
+msgstr "POUR VOTRE INFORMATION"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
+msgid "Next step"
+msgstr "Étape suivante"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
+msgid "Previous step"
+msgstr "Étape précédente"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
+msgid "With this comment:"
+msgstr "Avec ce commentaire :"
+
+#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
+msgid "This content is already retired and not visible."
+msgstr "Ce contenu est déjà retiré et n'est plus visible des internautes."
+
+#: src/pyams_content/shared/common/portlet/content/__init__.py:44
+msgid "Context content"
+msgstr "Contenu partagé"
+
+#: src/pyams_content/shared/common/portlet/content/zmi/preview.pt:2
+msgid "This is where the content will be displayed!!"
+msgstr "C'est ici que seront affichés les éléments du contenu."
+
+#: src/pyams_content/shared/common/portlet/content/skin/__init__.py:36
+msgid "Default content renderer"
+msgstr "Par défaut"
+
+#: src/pyams_content/shared/common/interfaces/types.py:43
+#: src/pyams_content/shared/form/zmi/field.py:149
+msgid "Name"
+msgstr "Nom"
+
+#: src/pyams_content/shared/common/interfaces/types.py:44
+msgid "Name of this data type; must be unique between all data types"
+msgstr "Nom de ce type de donnée ; doit être unique entre tous les types"
+
+#: src/pyams_content/shared/common/interfaces/types.py:50
+msgid "Navigation label"
+msgstr "Libellé de navigation"
+
+#: src/pyams_content/shared/common/interfaces/types.py:51
+msgid "Label used for navigation entries"
+msgstr "Libellé utilisé pour les entrées de navigation"
+
+#: src/pyams_content/shared/common/interfaces/types.py:54
+msgid "Tab-folder label"
+msgstr "Libellé d'un l'onglet"
+
+#: src/pyams_content/shared/common/interfaces/types.py:55
+msgid "Label used to include into tab folder"
+msgstr "Libellé utilisé pour l'affichage du type sous la forme d'un onglet"
+
+#: src/pyams_content/shared/common/interfaces/types.py:58
+msgid "'See also' label"
+msgstr "Libellé 'À voir aussi'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:59
+msgid ""
+"This label can be used when contents of this type will be displayed in a "
+"'See also' entries block"
msgstr ""
-"Si 'oui', le contexte d'application de la vue sera automatiquement exclus de "
-"la liste des résultats"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:176
-msgid "Select context themes?"
-msgstr "Thèmes du contexte ?"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:177
-msgid "If 'yes', themes will be extracted from context"
+"Ce libellé peut être utilisé lorsque des contenus de ce type sont affichés "
+"sous la forme d'un bloc 'À voir aussi'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:63
+msgid "'Single value' label"
+msgstr "Libellé 'Valeur unique'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:64
+msgid "Label given to this type when a single value is displayed"
+msgstr "Libellé utilisé pour ce type lorsqu'une seule valeur est affichée"
+
+#: src/pyams_content/shared/common/interfaces/types.py:67
+msgid "'Link to list' label"
+msgstr "Libellé 'Lien vers une liste'"
+
+#: src/pyams_content/shared/common/interfaces/types.py:68
+msgid "Label used to display a link to a list of items of this type"
+msgstr ""
+"Libellé utilisé lorsque l'on crée un lien vers uns liste de contenus de ce "
+"type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:71
+msgid "Next content label"
+msgstr "Libellé du contenu suivant"
+
+#: src/pyams_content/shared/common/interfaces/types.py:72
+msgid "Label used to announce next date for this type"
+msgstr ""
+"Libellé utilisé pour afficher la prochaine date d'un événement pour ce type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:76
+msgid "Pictogram associated with this data type"
+msgstr "Pictogramme associé à ce type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:90
+msgid "Field names"
+msgstr "Champs associés"
+
+#: src/pyams_content/shared/common/interfaces/types.py:91
+msgid "List of fields associated with this data type"
+msgstr "Liste des champs de saisie associés à ce type"
+
+#: src/pyams_content/shared/common/interfaces/types.py:125
+msgid "Data type"
+msgstr "Type du contenu"
+
+#: src/pyams_content/shared/common/interfaces/types.py:126
+msgid "Type of content data"
+msgstr "Type du contenu associé à ce gabarit"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:46
+#: src/pyams_content/root/interfaces/__init__.py:43
+msgid "Webmasters"
+msgstr "Webmestres"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:47
+msgid "Webmasters can handle all contents, including published ones"
+msgstr ""
+"Les webmestres peuvent modifier et gérer tous les contenus, y compris ceux "
+"qui sont publiés et hormis ceux qui sont archivés"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:51
+msgid "Pilots"
+msgstr "Pilotes"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:52
+msgid ""
+"Pilots can handle tool configuration, manage access rules, grant users roles "
+"and manage managers restrictions"
+msgstr ""
+"Les pilotes gèrent la configuration des outils, désignent les responsables "
+"et les contributeurs, et limitent si nécessaire l'intervention des "
+"responsables à certains contenus"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:57
+#: src/pyams_content/shared/common/interfaces/__init__.py:191
+msgid "Managers"
+msgstr "Responsables"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:58
+#: src/pyams_content/shared/common/interfaces/__init__.py:192
+msgid ""
+"Managers can handle main operations in tool's workflow, like publish or "
+"retire contents"
msgstr ""
-"Si 'oui', les thèmes associés au contexte d'application de la vue seront "
-"automatiquement sélectionnés"
-
-#: src/pyams_content/shared/view/interfaces/__init__.py:181
-msgid "Other terms"
-msgstr "Autres thèmes"
-
-#: src/pyams_content/shared/view/zmi/theme.py:59
-msgid "View themes settings"
-msgstr "Paramétrage des thèmes de la vue"
-
-#: src/pyams_content/shared/view/zmi/__init__.py:44
-msgid "This view"
-msgstr "Cette vue"
-
-#: src/pyams_content/shared/view/zmi/__init__.py:63
-#: src/pyams_content/shared/view/zmi/__init__.py:73
-msgid "Add view"
-msgstr "Ajouter une vue"
-
-#: src/pyams_content/shared/view/zmi/__init__.py:54
-#, python-format
-msgid "View « {title} »"
-msgstr "Vue « {title} »"
-
-#: src/pyams_content/shared/view/zmi/properties.py:40
-msgid "Main view settings"
-msgstr "Paramètres de la vue"
-
-#: src/pyams_content/shared/view/zmi/reference.py:52
-msgid "References..."
-msgstr "Références"
-
-#: src/pyams_content/shared/view/zmi/reference.py:63
-msgid "View internal references settings"
-msgstr "Références internes de la vue"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:31
-msgid "Selected view"
-msgstr "Vue sélectionnée"
-
-#: src/pyams_content/shared/view/portlet/interfaces.py:32
-msgid "Reference to the view from which items are extracted"
-msgstr "Référence de la vue depuis laquelle est extraite la liste de contenus"
-
-#: src/pyams_content/shared/view/portlet/__init__.py:58
-msgid "View items"
-msgstr "Contenu d'une vue"
-
-#: src/pyams_content/shared/form/field.py:137
-msgid "Text"
-msgstr "Texte simple"
-
-#: src/pyams_content/shared/form/field.py:147
-msgid "Multi-lines text"
-msgstr "Texte multi-lignes"
-
-#: src/pyams_content/shared/form/field.py:157
-msgid "Boolean"
-msgstr "Booléen"
-
-#: src/pyams_content/shared/form/field.py:167
-msgid "Integer"
-msgstr "Nombre entier"
-
-#: src/pyams_content/shared/form/field.py:177
-msgid "Decimal"
-msgstr "Nombre décimal"
-
-#: src/pyams_content/shared/form/field.py:187
-msgid "E-mail address"
-msgstr "Adresse de messagerie"
-
-#: src/pyams_content/shared/form/field.py:197
-msgid "URI"
-msgstr "URI"
-
-#: src/pyams_content/shared/form/field.py:207
-msgid "Date"
-msgstr "Date"
-
-#: src/pyams_content/shared/form/field.py:221
-msgid "Choice"
-msgstr "Choix unique dans une liste"
-
-#: src/pyams_content/shared/form/field.py:241
-msgid "List"
-msgstr "Choix multiples dans une liste"
+"Les responsables peuvent intervenir sur les étapes importantes du workflow "
+"(comme la publication ou le retrait des contenus), dans la limite des "
+"restrictions qui leur sont imposées"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:63
+#: src/pyams_content/shared/common/interfaces/__init__.py:197
+msgid "Contributors"
+msgstr "Contributeurs"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:64
+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:68
+#: src/pyams_content/shared/common/interfaces/__init__.py:203
+msgid "Designers"
+msgstr "Designers"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:69
+#: src/pyams_content/shared/common/interfaces/__init__.py:204
+msgid "Designers are users which are allowed to manage presentation templates"
+msgstr "Les designers sont autorisés à configurer les modèles de présentation"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:95
+msgid "Workflow name"
+msgstr "Nom du workflow"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:96
+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:124
+msgid "Content URL"
+msgstr "URL du contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:125
+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:130
+msgid "Version creator"
+msgstr "À l'origine de cette version"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:131
+msgid ""
+"Name of content's version creator. The creator of the first version is also "
+"it's owner."
+msgstr ""
+"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:135
+msgid "First owner"
+msgstr "Premier propriétaire"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:136
+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:140
+msgid "Version creation"
+msgstr "Date de création"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:143
+msgid "Version modifiers"
+msgstr "Intervenants"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:144
+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:147
+msgid "Last modifier"
+msgstr "Dernier intervenant"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:148
+msgid "Last principal who modified this content"
+msgstr "Dernier utilisateur étant intervenu sur ce contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:151
+msgid "Last update"
+msgstr "Dernière modification"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:155
+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"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:160
+msgid "Keywords"
+msgstr "Mots-clés"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:161
+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:164
+#: src/pyams_content/shared/site/zmi/folder.py:78
+#: src/pyams_content/shared/site/interfaces/__init__.py:67
+msgid "Notepad"
+msgstr "Bloc-notes"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:165
+#: src/pyams_content/shared/site/zmi/folder.py:79
+#: src/pyams_content/shared/site/interfaces/__init__.py:68
+msgid "Internal information to be known about this content"
+msgstr ""
+"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:184
+msgid "Content owner"
+msgstr "Propriétaire"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:185
+msgid ""
+"The owner is the creator of content's first version, except if it was "
+"transferred afterwards to another owner"
+msgstr ""
+"Le propriétaire est le créateur de la première version d'un contenu, sauf "
+"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:198
+msgid ""
+"Contributors are users which are allowed to update this content in addition "
+"to it's owner"
+msgstr ""
+"Les contributeurs sont autorisés, en plus du propriétaire, à modifier ce "
+"contenu"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:208
+msgid "Readers"
+msgstr "Relecteurs"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:209
+msgid ""
+"Readers are users which are asked to verify and comment contents before they "
+"are published"
+msgstr ""
+"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:214
+msgid "Guests"
+msgstr "Invités"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:215
+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:235
+msgid "Principal ID"
+msgstr "ID utilisateur"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:274
+#: src/pyams_content/shared/common/interfaces/__init__.py:299
+msgid "Publication checks"
+msgstr "Activer le tunnel de publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:275
+msgid ""
+"If 'yes', this contributor will have to confirm that contents have been "
+"previewed and checked before asking for publication"
+msgstr ""
+"Si 'oui', ce contributeur devra confirmer qu'il a bien prévisualisé et "
+"audité chaque contenu avant de pouvoir effectuer une demande de publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:300
+msgid ""
+"If 'yes', this manager will have to confirm that contents have been "
+"previewed and checked before publishing a content"
+msgstr ""
+"Si 'oui', ce responsable devra confirmer qu'il a bien prévisualisé et audité "
+"chaque contenu avant de pouvoir effectuer une publication"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:305
+msgid "Restricted contents"
+msgstr "Accès restreints"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:306
+msgid ""
+"If 'yes', this manager will get restricted access to manage contents based "
+"on selected settings"
+msgstr ""
+"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:311
+msgid "Selected owners"
+msgstr "Propriétaires"
+
+#: src/pyams_content/shared/common/interfaces/__init__.py:312
+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 "
+"propriétaires"
#: src/pyams_content/shared/form/__init__.py:99
msgid "Form fields"
@@ -2820,6 +3323,102 @@
msgid "No selected handler..."
msgstr "Aucun gestionnaire sélectionné"
+#: src/pyams_content/shared/form/field.py:146
+msgid "Text"
+msgstr "Texte simple"
+
+#: src/pyams_content/shared/form/field.py:156
+msgid "Multi-lines text"
+msgstr "Texte multi-lignes"
+
+#: src/pyams_content/shared/form/field.py:166
+msgid "Boolean"
+msgstr "Booléen"
+
+#: src/pyams_content/shared/form/field.py:176
+msgid "Integer"
+msgstr "Nombre entier"
+
+#: src/pyams_content/shared/form/field.py:186
+msgid "Decimal"
+msgstr "Nombre décimal"
+
+#: src/pyams_content/shared/form/field.py:196
+msgid "E-mail address"
+msgstr "Adresse de messagerie"
+
+#: src/pyams_content/shared/form/field.py:206
+msgid "URI"
+msgstr "URI"
+
+#: src/pyams_content/shared/form/field.py:216
+msgid "Date"
+msgstr "Date"
+
+#: src/pyams_content/shared/form/field.py:230
+msgid "Choice"
+msgstr "Choix unique dans une liste"
+
+#: src/pyams_content/shared/form/field.py:250
+msgid "List"
+msgstr "Choix multiples dans une liste"
+
+#: 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:65
+msgid "Form handler settings"
+msgstr "Paramètres du gestionnaire"
+
+#: src/pyams_content/shared/form/zmi/__init__.py:44
+msgid "This form"
+msgstr "Ce formulaire"
+
+#: src/pyams_content/shared/form/zmi/__init__.py:63
+#: src/pyams_content/shared/form/zmi/__init__.py:74
+msgid "Add form"
+msgstr "Ajouter un formulaire"
+
+#: src/pyams_content/shared/form/zmi/__init__.py:54
+#, python-format
+msgid "Form « {title} »"
+msgstr "Formulaire « {title} »"
+
+#: src/pyams_content/shared/form/zmi/field.py:69
+msgid "Form fields..."
+msgstr "Champs de saisie"
+
+#: src/pyams_content/shared/form/zmi/field.py:171
+#: src/pyams_content/shared/form/interfaces/__init__.py:57
+msgid "Field type"
+msgstr "Type de champ"
+
+#: src/pyams_content/shared/form/zmi/field.py:204
+msgid "Form fields list"
+msgstr "Liste des champs du formulaire"
+
+#: src/pyams_content/shared/form/zmi/field.py:227
+#: src/pyams_content/shared/form/zmi/field.py:240
+msgid "Add form field"
+msgstr "Ajouter un champ"
+
+#: src/pyams_content/shared/form/zmi/field.py:278
+msgid "Edit form field properties"
+msgstr "Propriétés du champ"
+
+#: src/pyams_content/shared/form/zmi/field.py:180
+msgid "-- unknown field type --"
+msgstr "-- type de champ inconnu --"
+
+#: src/pyams_content/shared/form/zmi/field.py:115
+msgid "No currently defined form field."
+msgstr "Ce formulaire ne comporte aucun champ."
+
+#: 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é !"
+
#: src/pyams_content/shared/form/interfaces/__init__.py:35
msgid "Form"
msgstr "Formulaire"
@@ -2833,11 +3432,6 @@
msgstr ""
"Nom interne du champ ; ce nom doit être unique pour un formulaire donné"
-#: src/pyams_content/shared/form/interfaces/__init__.py:57
-#: src/pyams_content/shared/form/zmi/field.py:170
-msgid "Field type"
-msgstr "Type de champ"
-
#: src/pyams_content/shared/form/interfaces/__init__.py:58
msgid "Selected field type"
msgstr "Type de champ proposé à l'internaute"
@@ -2971,66 +3565,6 @@
msgid "Name of data recipient"
msgstr "Nom du destinataire des messages"
-#: src/pyams_content/shared/form/zmi/field.py:68
-msgid "Form fields..."
-msgstr "Champs de saisie"
-
-#: src/pyams_content/shared/form/zmi/field.py:148
-#: src/pyams_content/shared/common/interfaces/types.py:36
-msgid "Name"
-msgstr "Nom"
-
-#: 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:226
-#: src/pyams_content/shared/form/zmi/field.py:239
-msgid "Add form field"
-msgstr "Ajouter un champ"
-
-#: src/pyams_content/shared/form/zmi/field.py:281
-msgid "Edit form field properties"
-msgstr "Propriétés du champ"
-
-#: 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:114
-msgid "No currently defined form field."
-msgstr "Ce formulaire ne comporte aucun champ."
-
-#: src/pyams_content/shared/form/zmi/field.py:266
-msgid "Specified name is already used!"
-msgstr "Le nom indiqué pour ce champ est déjà utilisé !"
-
-#: src/pyams_content/shared/form/zmi/__init__.py:44
-msgid "This form"
-msgstr "Ce formulaire"
-
-#: src/pyams_content/shared/form/zmi/__init__.py:63
-#: src/pyams_content/shared/form/zmi/__init__.py:74
-msgid "Add form"
-msgstr "Ajouter un formulaire"
-
-#: src/pyams_content/shared/form/zmi/__init__.py:54
-#, python-format
-msgid "Form « {title} »"
-msgstr "Formulaire « {title} »"
-
-#: 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:70
-msgid "Form handler settings"
-msgstr "Paramètres du gestionnaire"
-
-#: src/pyams_content/shared/news/interfaces/__init__.py:29
-msgid "News topic"
-msgstr "Actualité"
-
#: src/pyams_content/shared/news/zmi/__init__.py:44
msgid "This news topic"
msgstr "Cette actualité"
@@ -3045,56 +3579,673 @@
msgid "News topic « {title} »"
msgstr "Actualité « {title} »"
-#: src/pyams_content/shared/logo/paragraph.py:95
+#: src/pyams_content/shared/news/interfaces/__init__.py:29
+msgid "News topic"
+msgstr "Actualité"
+
+#: src/pyams_content/shared/view/merge.py:59
+msgid "Concatenate views items in order"
+msgstr "Concaténer les résultats de chaque vue dans l'ordre sélectionné"
+
+#: src/pyams_content/shared/view/merge.py:71
+msgid "Extract items randomly"
+msgstr "Extraire les résultats en ordre aléatoire"
+
+#: src/pyams_content/shared/view/merge.py:85
+msgid "Take items from views one by one, in views order"
+msgstr ""
+"Extraire les résultats de chaque vue, une par une (ordre des vues imposé)"
+
+#: src/pyams_content/shared/view/merge.py:98
+msgid "Take items from views one by one, in random order"
+msgstr ""
+"Extraire les résultats de chaque vue, une par une (ordre des vues aléatoire)"
+
+#: src/pyams_content/shared/view/merge.py:127
+msgid "Sort all results by creation date"
+msgstr ""
+"Trier tous les résultats sur la date de création (du plus récent au plus "
+"ancien)"
+
+#: src/pyams_content/shared/view/merge.py:136
+msgid "Sort all results by last update date"
+msgstr ""
+"Trier tous les résultats sur la date de dernière mise à jour (du plus récent "
+"au plus ancien)"
+
+#: src/pyams_content/shared/view/merge.py:145
+msgid "Sort all results by current publication date"
+msgstr ""
+"Trier tous les résultats sur la date de publication (du plus récent au plus "
+"ancien)"
+
+#: src/pyams_content/shared/view/merge.py:154
+msgid "Sort all results by first publication date"
+msgstr ""
+"Trier tous les résultats sur la date de première publication (du plus récent "
+"au plus ancien)"
+
+#: src/pyams_content/shared/view/zmi/properties.py:40
+msgid "Main view settings"
+msgstr "Paramètres de la vue"
+
+#: src/pyams_content/shared/view/zmi/__init__.py:44
+msgid "This view"
+msgstr "Cette vue"
+
+#: src/pyams_content/shared/view/zmi/__init__.py:63
+#: src/pyams_content/shared/view/zmi/__init__.py:73
+msgid "Add view"
+msgstr "Ajouter une vue"
+
+#: src/pyams_content/shared/view/zmi/__init__.py:54
+#, python-format
+msgid "View « {title} »"
+msgstr "Vue « {title} »"
+
+#: src/pyams_content/shared/view/zmi/theme.py:67
+msgid "View tags settings"
+msgstr "Paramétrage des tags de la vue"
+
+#: src/pyams_content/shared/view/zmi/theme.py:113
+msgid "View themes settings"
+msgstr "Paramétrage des thèmes de la vue"
+
+#: src/pyams_content/shared/view/zmi/theme.py:159
+msgid "View collections settings"
+msgstr "Paramétrage des collections de la vue"
+
+#: src/pyams_content/shared/view/zmi/reference.py:52
+msgid "References..."
+msgstr "Références"
+
+#: src/pyams_content/shared/view/zmi/reference.py:63
+msgid "View internal references settings"
+msgstr "Références internes de la vue"
+
+#: src/pyams_content/shared/view/portlet/__init__.py:89
+msgid "View items"
+msgstr "Contenu d'une vue"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:41
+msgid "Display context"
+msgstr "Contexte d'affichage"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:42
+msgid "Content context"
+msgstr "Contexte du contenu"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:59
+msgid "Selected views"
+msgstr "Vue(s) sélectionnée(s)"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:60
+msgid ""
+"Reference to the view(s) from which items are extracted; you can combine "
+"several views together and specify in which order they should be mixed"
+msgstr ""
+"Références des vues dont sont extraits les résultats ; vous pouvez combiner "
+"plusieurs vues ensemble en indiquant la façon dont leurs résultats seront "
+"fusionnés"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:69
+msgid "Views context"
+msgstr "Contexte des vues"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:70
+msgid ""
+"When searching for items, a view receives a \"context\" which is the object "
+"from which settings can be extracted; this context can be the \"display\" "
+"context or the \"content\" context: when the portlet is used to display the "
+"site root, a site manager or a site folder, both are identical; when the "
+"portlet is used to display a shared content, the \"content\" context is the "
+"displayed content, while the \"display\" context is the container (site "
+"root, site manager or site folder) into which content is displayed"
+msgstr ""
+"Pour extraire sa liste de résultats, chaque vue est associée à un \"contexte"
+"\", qui est l'objet dont sont extraits les critères de recherche ; ce "
+"contexte peut être le contexte \"d'affichage\" ou le contexte \"du contenu"
+"\" : lorsque ce composant est associé à la page d'accueil, à un site ou à "
+"une rubrique, ces deux contextes sont identiques ; par contre, lorsque ce "
+"composant est associé à un contenu partagé, le contexte de contenu est le "
+"contenu partagé, tandis que le contexte d'affichage est le conteneur (page "
+"d'accueil, site ou rubrique) au sein duquel le contenu est affiché."
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:81
+msgid "Views merge mode"
+msgstr "Mode de fusion des vues"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:82
+msgid ""
+"If you select several views, you can select \"merge\" mode, which is the way "
+"used to merge items from several views"
+msgstr ""
+"Si vous sélectionnez plusieurs vues, vous devez indiquer la façon dont leurs "
+"résultats seront fusionnés; ce paramètre est sans effet lorsque vous ne "
+"sélectionnez qu'une seule vue, car l'ordre des résultats est alors basé "
+"uniquement sur les paramètres de la vue."
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:91
+#: src/pyams_content/shared/view/interfaces/__init__.py:86
+msgid "Results count limit"
+msgstr "Limite de résultats"
+
+#: src/pyams_content/shared/view/portlet/interfaces.py:92
+msgid ""
+"Maximum number of results that the component may extract from merged views"
+msgstr ""
+"Nombre maximal de résultats que le composant doit extraire des vues "
+"fusionnées"
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:14
+msgid "No result found"
+msgstr "Aucun résultat à afficher."
+
+#: src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:15
+msgid "No selected view"
+msgstr "Aucune vue sélectionnée."
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:32
+msgid "View"
+msgstr "Vue"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:150
+msgid "Always include selected internal references"
+msgstr "Toujours inclure toutes les références internes"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:151
+msgid "Include selected internal references only if empty"
+msgstr "Inclure les références internes seulement lorsque la vue est vide"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:41
+#: src/pyams_content/interfaces/__init__.py:113
+#: src/pyams_content/features/review/interfaces.py:74
+msgid "Creation date"
+msgstr "Date de création"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:42
+msgid "Last update date"
+msgstr "Date de dernière modification"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:43
+msgid "Current publication date"
+msgstr "Date de publication de la version actuelle"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:44
+msgid "First publication date"
+msgstr "Date de première publication"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:62
+msgid "Select context type?"
+msgstr "Type du contexte ?"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:63
+msgid "If 'yes', content type will be extracted from context"
+msgstr ""
+"Si 'oui', seuls des contenus du même type que le contexte seront "
+"automatiquement sélectionnés"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:67
+msgid "Other content types"
+msgstr "Autres types de contenus"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:68
+msgid "Selected content types; leave empty for all"
+msgstr ""
+"Autres types de contenus sélectionnés ; si l'on n'extrait pas le type du "
+"contexte et si cette sélection est vide, tous les types seront pris en charge"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:75
+msgid "Order by"
+msgstr "Ordre de tri"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:76
+msgid "Property to use to sort results"
+msgstr ""
+"Propriété utilisée pour trier les résultats ; par défaut, le tri se fait en "
+"ordre inverse, donc du plus récent au plus ancien"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:81
+msgid "Reversed order?"
+msgstr "Ordre inverse ?"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:82
+msgid "If 'yes', items order will be reversed"
+msgstr ""
+"Si 'non', le tri se fera en ordre \"naturel\", donc du plus ancien au plus "
+"récent"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:87
+msgid "Maximum number of results that the view may retrieve"
+msgstr "Nombre maximal de résultats que la vue doit renvoyer"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:160
+msgid "Internal references usage"
+msgstr "Utilisation des références internes"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:161
+msgid "Specify how selected references are included into view results"
+msgstr ""
+"Indique comment les références internes indiquées seront intégrées à la "
+"liste des résultats"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:166
+msgid "Exclude context?"
+msgstr "Exclure le contexte ?"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:167
+msgid "If 'yes', context will be excluded from results list"
+msgstr ""
+"Si 'oui', le contexte d'application de la vue sera automatiquement exclus de "
+"la liste des résultats"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:178
+msgid "Select context tags?"
+msgstr "Tags du contexte ?"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:179
+msgid "If 'yes', tags will be extracted from context"
+msgstr ""
+"Si 'oui', les tags associés au contexte d'application de la vue seront "
+"automatiquement sélectionnés"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:183
+msgid "Other tags"
+msgstr "Autres tags"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:199
+msgid "Select context themes?"
+msgstr "Thèmes du contexte ?"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:200
+msgid "If 'yes', themes will be extracted from context"
+msgstr ""
+"Si 'oui', les thèmes associés au contexte d'application de la vue seront "
+"automatiquement sélectionnés"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:204
+msgid "Other themes"
+msgstr "Autres thèmes"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:220
+msgid "Select context collections?"
+msgstr "Collections du contexte ?"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:221
+msgid "If 'yes', collections will be extracted from context"
+msgstr ""
+"Si 'oui', les collections associées au contexte d'application de la vue "
+"seront automatiquement sélectionnés"
+
+#: src/pyams_content/shared/view/interfaces/__init__.py:225
+msgid "Other collections"
+msgstr "Autres collections"
+
+#: src/pyams_content/shared/imagemap/paragraph.py:99
+msgid "no selected image map"
+msgstr "aucune image cliquable sélectionnée"
+
+#: src/pyams_content/shared/imagemap/paragraph.py:105
+#, python-format
+msgid "image map '{0}' can't be found"
+msgstr "l'image cliquable '{0}' est introuvable"
+
+#: src/pyams_content/shared/imagemap/paragraph.py:113
+#, python-format
+msgid "image map '{0}' is not published"
+msgstr "l'image cliquable '{0}' n'est pas publiée"
+
+#: src/pyams_content/shared/imagemap/__init__.py:154
+msgid "no area defined"
+msgstr "aucune zone définie"
+
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:55
+msgid "Image map..."
+msgstr "Image cliquable"
+
+#: src/pyams_content/shared/imagemap/zmi/paragraph.py:68
+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:94
+msgid "Edit paragraph properties"
+msgstr "Propriétés de l'image cliquable"
+
+#: src/pyams_content/shared/imagemap/zmi/properties.py:40
+msgid "Background image"
+msgstr "Image de fond"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:44
+msgid "This image map"
+msgstr "Cette image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:63
+msgid "Add image map"
+msgstr "Ajouter une image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:73
+msgid "Adding image map"
+msgstr "Ajout d'une image"
+
+#: src/pyams_content/shared/imagemap/zmi/__init__.py:54
+#, python-format
+msgid "Image map « {title} »"
+msgstr "Article de blog « {title} »"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:54
+msgid "Image areas"
+msgstr "Zones de l'image"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:65
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:71
+msgid "Image map areas"
+msgstr "Zones cliquables de l'images"
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:140
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:50
+msgid "Link target"
+msgstr "Cible du lien"
+
+#: 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:115
+msgid "No currently defined area."
+msgstr "Aucune zone cliquable n'est actuellement définie."
+
+#: src/pyams_content/shared/imagemap/zmi/container.py:175
+#: src/pyams_content/root/zmi/sites.py:170
+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:186
+msgid "Bad query object_name parameter value!"
+msgstr "Valeur incorrecte du paramètre object_name !"
+
+#: src/pyams_content/shared/imagemap/zmi/area.py:47
+msgid "Add image area"
+msgstr "Ajouter une zone"
+
+#: src/pyams_content/shared/imagemap/zmi/area.py:66
+msgid "Add new image area"
+msgstr "Ajout d'une zone cliquable"
+
+#: src/pyams_content/shared/imagemap/zmi/area.py:107
+msgid "Edit image map properties"
+msgstr "Propriétés de l'image"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:36
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:89
+msgid "Image map"
+msgstr "Image cliquable"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:51
+msgid "Internal or external link associated with this map area"
+msgstr "Lien interne ou externe associé à cette zone"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:56
+msgid "Alternate label associated with this area"
+msgstr "Libellé de substitution associé à cette zone"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:59
+msgid "Map area coordinates"
+msgstr "Coordonnées"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:60
+msgid "List of coordinates of image area"
+msgstr "Positionnement de la zone cliquable sur l'image"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:68
+msgid "Image supporting map areas"
+msgstr "Sélection de l'image qui supportera les zones cliquables"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:72
+msgid "List of defined map areas"
+msgstr "Liste des zones cliquables définies sur l'image"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:96
+#: src/pyams_content/features/alert/interfaces.py:73
+#: src/pyams_content/features/menu/interfaces/__init__.py:68
+msgid "Internal reference"
+msgstr "Référence interne"
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:97
+msgid "Reference to image map object"
+msgstr ""
+"Référence interne de l'image cliquable. Vous pouvez la rechercher par des "
+"mots de son titre, ou par son numéro interne (précédé d'un '+')."
+
+#: src/pyams_content/shared/imagemap/interfaces/__init__.py:100
+msgid "Image map template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/shared/site/folder.py:59
+msgid "Site folder"
+msgstr "Rubrique"
+
+#: src/pyams_content/shared/site/link.py:49
+msgid "Content link"
+msgstr "Contenu lié"
+
+#: src/pyams_content/shared/site/manager.py:68
+#: src/pyams_content/shared/site/zmi/manager.py:125
+msgid "Site manager"
+msgstr "Site"
+
+#: src/pyams_content/shared/site/zmi/folder.py:61
+msgid "Add site folder..."
+msgstr "Ajouter une rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:93
+msgid "Add site folder"
+msgstr "Ajout d'une rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:160
+msgid "Site folder management"
+msgstr "Gérer cette rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:188
+msgid "Site folder properties"
+msgstr "Propriétés de la rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:71
+#: src/pyams_content/interfaces/__init__.py:102
+msgid "Visible label used to display content"
+msgstr "Le titre présenté aux internautes"
+
+#: src/pyams_content/shared/site/zmi/folder.py:74
+#: src/pyams_content/shared/site/zmi/__init__.py:72
+#: src/pyams_content/shared/site/zmi/link.py:66
+msgid "Parent"
+msgstr "Niveau parent"
+
+#: src/pyams_content/shared/site/zmi/folder.py:75
+#: src/pyams_content/shared/site/zmi/link.py:67
+msgid "Folder's parent"
+msgstr "Niveau de rattachement de cette rubrique"
+
+#: src/pyams_content/shared/site/zmi/folder.py:153
+msgid "You must provide a folder name for default server language!"
+msgstr ""
+"Vous devez fournir un nom pour ce dossier pour la langue par défaut du "
+"serveur !"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:55
+msgid "This topic"
+msgstr "Cet article"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:63
+msgid "Add topic..."
+msgstr "Ajouter un article"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:86
+msgid "Add topic"
+msgstr "Ajout d'un article"
+
+#: src/pyams_content/shared/site/zmi/__init__.py:73
+msgid "Topic's parent"
+msgstr "Niveau parent"
+
+#: src/pyams_content/shared/site/zmi/link.py:57
+msgid "Rent content..."
+msgstr "Lier un contenu"
+
+#: 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:135
+msgid "Edit content link properties"
+msgstr "Propriétés du lien"
+
+#: src/pyams_content/shared/site/zmi/container.py:106
+#: src/pyams_content/shared/site/zmi/container.py:118
+#: src/pyams_content/shared/blog/zmi/manager.py:155
+#: src/pyams_content/shared/blog/zmi/manager.py:167
+msgid "Publication dates..."
+msgstr "Dates de publication"
+
+#: src/pyams_content/shared/site/zmi/container.py:132
+#: src/pyams_content/shared/blog/zmi/manager.py:181
+msgid "Update publication dates"
+msgstr "Dates de publication"
+
+#: src/pyams_content/shared/site/zmi/container.py:178
+#: src/pyams_content/shared/site/zmi/container.py:188
+#: src/pyams_content/root/zmi/sites.py:68
+msgid "Site tree"
+msgstr "Arborescence du site"
+
+#: src/pyams_content/shared/site/zmi/container.py:310
+#: src/pyams_content/shared/site/zmi/container.py:156
+msgid "Visible element?"
+msgstr "Élément visible ?"
+
+#: src/pyams_content/shared/site/zmi/container.py:311
+msgid "Switch element visibility"
+msgstr "Cliquez pour rendre l'élément visible ou non"
+
+#: src/pyams_content/shared/site/zmi/container.py:372
+msgid "Folders and topics"
+msgstr "Rubriquage"
+
+#: src/pyams_content/shared/site/zmi/container.py:408
+#: src/pyams_content/root/zmi/__init__.py:825
+msgid "Content"
+msgstr "Contenu"
+
+#: src/pyams_content/shared/site/zmi/container.py:504
+msgid "Delete site item"
+msgstr "Supprimer ce contenu"
+
+#: src/pyams_content/shared/site/zmi/container.py:381
+msgid "Click to open/close all folders"
+msgstr "Afficher/masquer toutes les rubriques"
+
+#: src/pyams_content/shared/site/zmi/container.py:397
+msgid "Click to show/hide inner folders"
+msgstr "Cliquer pour afficher ou cache les sous-niveaux"
+
+#: src/pyams_content/shared/site/zmi/container.py:267
+msgid "Can't reparent object to one of it's children. Reloading..."
+msgstr ""
+"Impossible de déplacer une rubrique dans l'une de ses sous-rubriques ou "
+"contenus ! Rechargement de la page..."
+
+#: src/pyams_content/shared/site/zmi/manager.py:57
+msgid "Site management"
+msgstr "Gérer ce site"
+
+#: src/pyams_content/shared/site/zmi/manager.py:112
+#: src/pyams_content/shared/site/zmi/manager.py:126
+msgid "Add site manager"
+msgstr "Ajouter un site"
+
+#: src/pyams_content/shared/site/zmi/manager.py:156
+#: src/pyams_content/shared/blog/zmi/manager.py:127
+msgid "You must provide a short name for default server language!"
+msgstr "Vous devez fournir un nom court pour la langue par défaut du serveur !"
+
+#: src/pyams_content/shared/site/zmi/manager.py:160
+msgid "Specified site manager name is already used!"
+msgstr "Le nom indiqué pour ce site existe déjà !"
+
+#: src/pyams_content/shared/site/zmi/manager.py:164
+msgid "A site manager is already registered with this name!!"
+msgstr "Un site est déjà inscrit dans le registre avec ce nom !"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:96
+msgid "Topic"
+msgstr "Article"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:59
+msgid "Heading"
+msgstr "Chapô"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:60
+msgid "Heading displayed according to presentation template"
+msgstr ""
+"Ce chapô pourra être affiché ou non en fonction du modèle de présentation "
+"retenu"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:63
+msgid "Navigation title"
+msgstr "Titre de navigation"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:64
+msgid "Title displayed in navigation items"
+msgstr ""
+"Libellé utilisé en lieu et place du titre dans les blocs de navigation, "
+"notamment dans les pages carrefours"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:115
+msgid "Content title, as shown in front-office"
+msgstr "Titre présenté aux internautes"
+
+#: src/pyams_content/shared/site/interfaces/__init__.py:119
+msgid "If 'no', link is not visible"
+msgstr "Si 'non', le lien ne sera pas visible"
+
+#: src/pyams_content/shared/logo/paragraph.py:96
msgid "no selected logo"
msgstr "aucun logo sélectionné"
-#: src/pyams_content/shared/logo/paragraph.py:101
+#: src/pyams_content/shared/logo/paragraph.py:102
#, python-format
msgid "logo '{0}' can't be found"
msgstr "le logo '{0}' est introuvable"
-#: src/pyams_content/shared/logo/paragraph.py:109
+#: src/pyams_content/shared/logo/paragraph.py:110
#, python-format
msgid "logo '{0}' is not published"
msgstr "le logo '{0}' n'est pas publié"
-#: src/pyams_content/shared/logo/__init__.py:67
+#: src/pyams_content/shared/logo/__init__.py:68
msgid "no image defined"
msgstr "aucune image définie"
-#: src/pyams_content/shared/logo/__init__.py:70
+#: src/pyams_content/shared/logo/__init__.py:71
msgid "no URL defined"
msgstr "aucune URL définie"
-#: src/pyams_content/shared/logo/interfaces/__init__.py:32
-msgid "Logo"
-msgstr "Logo"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:64
-msgid "Logos"
-msgstr "Logos"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:71
-msgid "Logos references"
-msgstr "Logos sélectionnés"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:72
-msgid "List of internal logos references"
-msgstr "Liste de références internes vers les logos à afficher"
-
-#: src/pyams_content/shared/logo/interfaces/__init__.py:75
-msgid "Logos template"
-msgstr "Mode de rendu"
-
-#: 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:67
+#: src/pyams_content/shared/logo/zmi/paragraph.py:68
msgid "Add new logos paragraph"
msgstr "Ajout d'une sélection de logos"
+#: src/pyams_content/shared/logo/zmi/properties.py:40
+msgid "Main logo settings"
+msgstr "Propriétés du logo"
+
#: src/pyams_content/shared/logo/zmi/__init__.py:45
msgid "This logo"
msgstr "Ce logo"
@@ -3109,1608 +4260,103 @@
msgid "Logo « {title} »"
msgstr "Logo « {title} »"
-#: src/pyams_content/shared/logo/zmi/properties.py:40
-msgid "Main logo settings"
-msgstr "Propriétés du logo"
-
-#: src/pyams_content/shared/common/__init__.py:237
-#: src/pyams_content/shared/common/zmi/manager.py:96
-#: src/pyams_content/shared/common/zmi/properties.py:70
-msgid "Properties"
-msgstr "Propriétés"
-
-#: 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: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/interfaces/types.py:37
-msgid "Name of this data type; must be unique between all data types"
-msgstr "Nom de ce type de donnée ; doit être unique entre tous les types"
-
-#: src/pyams_content/shared/common/interfaces/types.py:43
-msgid "Navigation label"
-msgstr "Libellé de navigation"
-
-#: src/pyams_content/shared/common/interfaces/types.py:44
-msgid "Label used for navigation entries"
-msgstr "Libellé utilisé pour les entrées de navigation"
-
-#: src/pyams_content/shared/common/interfaces/types.py:47
-msgid "Tab-folder label"
-msgstr "Libellé d'un l'onglet"
-
-#: src/pyams_content/shared/common/interfaces/types.py:48
-msgid "Label used to include into tab folder"
-msgstr "Libellé utilisé pour l'affichage du type sous la forme d'un onglet"
-
-#: src/pyams_content/shared/common/interfaces/types.py:51
-msgid "'See also' label"
-msgstr "Libellé 'À voir aussi'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:52
-msgid ""
-"This label can be used when contents of this type will be displayed in a "
-"'See also' entries block"
-msgstr ""
-"Ce libellé peut être utilisé lorsque des contenus de ce type sont affichés "
-"sous la forme d'un bloc 'À voir aussi'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:56
-msgid "'Single value' label"
-msgstr "Libellé 'Valeur unique'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:57
-msgid "Label given to this type when a single value is displayed"
-msgstr "Libellé utilisé pour ce type lorsqu'une seule valeur est affichée"
-
-#: src/pyams_content/shared/common/interfaces/types.py:60
-msgid "'Link to list' label"
-msgstr "Libellé 'Lien vers une liste'"
-
-#: src/pyams_content/shared/common/interfaces/types.py:61
-msgid "Label used to display a link to a list of items of this type"
-msgstr ""
-"Libellé utilisé lorsque l'on crée un lien vers uns liste de contenus de ce "
-"type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:64
-msgid "Next content label"
-msgstr "Libellé du contenu suivant"
-
-#: src/pyams_content/shared/common/interfaces/types.py:65
-msgid "Label used to announce next date for this type"
-msgstr ""
-"Libellé utilisé pour afficher la prochaine date d'un événement pour ce type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:69
-msgid "Image associated to this data type"
-msgstr "Image associée à ce type"
-
-#: src/pyams_content/shared/common/interfaces/types.py:82
-msgid "Field names"
-msgstr "Champs associés"
-
-#: src/pyams_content/shared/common/interfaces/types.py:83
-msgid "List of fields associated with this data type"
-msgstr "Liste des champs de saisie associés à ce type"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:46
-#: src/pyams_content/root/interfaces/__init__.py:40
-msgid "Webmasters"
-msgstr "Webmestres"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:47
-msgid "Webmasters can handle all contents, including published ones"
-msgstr ""
-"Les webmestres peuvent modifier et gérer tous les contenus, y compris ceux "
-"qui sont publiés et hormis ceux qui sont archivés"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:51
-msgid "Pilots"
-msgstr "Pilotes"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:52
-msgid ""
-"Pilots can handle tool configuration, manage access rules, grant users roles "
-"and manage managers restrictions"
-msgstr ""
-"Les pilotes gèrent la configuration des outils, désignent les responsables "
-"et les contributeurs, et limitent si nécessaire l'intervention des "
-"responsables à certains contenus"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:57
-#: src/pyams_content/shared/common/interfaces/__init__.py:182
-msgid "Managers"
-msgstr "Responsables"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:58
-#: src/pyams_content/shared/common/interfaces/__init__.py:183
-msgid ""
-"Managers can handle main operations in tool's workflow, like publish or "
-"retire contents"
-msgstr ""
-"Les responsables peuvent intervenir sur les étapes importantes du workflow "
-"(comme la publication ou le retrait des contenus), dans la limite des "
-"restrictions qui leur sont imposées"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:63
-#: src/pyams_content/shared/common/interfaces/__init__.py:188
-msgid "Contributors"
-msgstr "Contributeurs"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:64
-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:90
-msgid "Workflow name"
-msgstr "Nom du workflow"
-
-#: 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:119
-msgid "Content URL"
-msgstr "URL du contenu"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:120
-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:125
-msgid "Version creator"
-msgstr "À l'origine de cette version"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:126
-msgid ""
-"Name of content's version creator. The creator of the first version is also "
-"it's owner."
-msgstr ""
-"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:130
-msgid "First owner"
-msgstr "Premier propriétaire"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:131
-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:135
-msgid "Version creation"
-msgstr "Date de création"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:138
-msgid "Version modifiers"
-msgstr "Intervenants"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:139
-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:142
-msgid "Last modifier"
-msgstr "Dernier intervenant"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:143
-msgid "Last principal who modified this content"
-msgstr "Dernier utilisateur étant intervenu sur ce contenu"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:146
-msgid "Last update"
-msgstr "Dernière modification"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:150
-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"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:155
-msgid "Keywords"
-msgstr "Mots-clés"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:156
-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:159
-#: src/pyams_content/shared/site/interfaces/__init__.py:66
-#: src/pyams_content/shared/site/zmi/folder.py:78
-msgid "Notepad"
-msgstr "Bloc-notes"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:160
-#: src/pyams_content/shared/site/interfaces/__init__.py:67
-#: src/pyams_content/shared/site/zmi/folder.py:79
-msgid "Internal information to be known about this content"
-msgstr ""
-"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:175
-msgid "Content owner"
-msgstr "Propriétaire"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:176
-msgid ""
-"The owner is the creator of content's first version, except if it was "
-"transferred afterwards to another owner"
-msgstr ""
-"Le propriétaire est le créateur de la première version d'un contenu, sauf "
-"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:189
-msgid ""
-"Contributors are users which are allowed to update this content in addition "
-"to it's owner"
-msgstr ""
-"Les contributeurs sont autorisés, en plus du propriétaire, à modifier ce "
-"contenu"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:194
-msgid "Readers"
-msgstr "Relecteurs"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:195
-msgid ""
-"Readers are users which are asked to verify and comment contents before they "
-"are published"
-msgstr ""
-"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:200
-msgid "Guests"
-msgstr "Invités"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:201
-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:221
-msgid "Principal ID"
-msgstr "ID utilisateur"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:260
-#: src/pyams_content/shared/common/interfaces/__init__.py:285
-#: src/pyams_content/shared/common/zmi/security.py:118
-#: src/pyams_content/shared/common/zmi/security.py:270
-msgid "Publication checks"
-msgstr "Activer le tunnel de publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:261
-msgid ""
-"If 'yes', this contributor will have to confirm that contents have been "
-"previewed and checked before asking for publication"
-msgstr ""
-"Si 'oui', ce contributeur devra confirmer qu'il a bien prévisualisé et "
-"audité chaque contenu avant de pouvoir effectuer une demande de publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:286
-msgid ""
-"If 'yes', this manager will have to confirm that contents have been "
-"previewed and checked before publishing a content"
-msgstr ""
-"Si 'oui', ce responsable devra confirmer qu'il a bien prévisualisé et audité "
-"chaque contenu avant de pouvoir effectuer une publication"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:291
-msgid "Restricted contents"
-msgstr "Accès restreints"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:292
-msgid ""
-"If 'yes', this manager will get restricted access to manage contents based "
-"on selected settings"
-msgstr ""
-"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:297
-msgid "Selected owners"
-msgstr "Propriétaires"
-
-#: src/pyams_content/shared/common/interfaces/__init__.py:298
-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 "
-"propriétaires"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:134
-msgid "Unique ID"
-msgstr "N° IN"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:154
-#: src/pyams_content/shared/common/zmi/search.py:168
-msgid "Status"
-msgstr "Statut"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:181
-msgid "Status date"
-msgstr "En date du"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:198
-#: src/pyams_content/shared/common/zmi/summary.py:158
-msgid "Version"
-msgstr "Version"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:213
-msgid "Status principal"
-msgstr "Intervenant"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:231
-#: src/pyams_content/shared/common/zmi/search.py:165
-#: src/pyams_content/root/zmi/search.py:159
-msgid "Owner"
-msgstr "Propriétaire"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:250
-msgid "Last modification"
-msgstr "Dernière modification"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:273
-#: src/pyams_content/root/zmi/__init__.py:110
-msgid "Dashboard"
-msgstr "Tableau de bord"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:283
-msgid "Contents dashboard"
-msgstr "Mon tableau de bord"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:329
-#: src/pyams_content/root/zmi/__init__.py:159
-#, python-format
-msgid "MANAGER - {0} content waiting for your action"
-msgstr "RESPONSABLE - {0} contenu en attente de votre intervention"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:330
-#: src/pyams_content/root/zmi/__init__.py:160
-#, python-format
-msgid "MANAGER - {0} contents waiting for your action"
-msgstr "RESPONSABLE - {0} contenus en attente de votre intervention"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:370
-#: src/pyams_content/root/zmi/__init__.py:203
-#, python-format
-msgid "CONTRIBUTOR - {0} content waiting for action"
-msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:371
-#: src/pyams_content/root/zmi/__init__.py:204
-#, python-format
-msgid "CONTRIBUTOR - {0} contents waiting for action"
-msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:402
-#: src/pyams_content/root/zmi/__init__.py:238
-#, python-format
-msgid "CONTRIBUTOR - {0} modified content"
-msgstr "CONTRIBUTEUR - {0} contenu modifié"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:443
-#: src/pyams_content/root/zmi/__init__.py:281
-msgid "My contents"
-msgstr "Mes contenus"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:458
-#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
-#: src/pyams_content/root/zmi/__init__.py:296
-#: src/pyams_content/root/zmi/templates/dashboard.pt:8
-msgid "My favorites"
-msgstr "Mes favoris"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:467
-#: src/pyams_content/root/zmi/__init__.py:305
-#, python-format
-msgid "CONTRIBUTOR - {0} favorite"
-msgstr "CONTRIBUTEUR - {0} contenu favori"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:468
-#: src/pyams_content/root/zmi/__init__.py:306
-#, python-format
-msgid "CONTRIBUTOR - {0} favorites"
-msgstr "CONTRIBUTEUR - {0} contenus favoris"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:480
-#: src/pyams_content/shared/common/zmi/templates/header.pt:23
-msgid "Add/remove from favorites"
-msgstr "Ajouter/enlever des favoris"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:543
-#: src/pyams_content/root/zmi/__init__.py:344
-msgid "Your favorites"
-msgstr "Mes favoris"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:556
-#: src/pyams_content/root/zmi/__init__.py:357
-msgid "My preparations"
-msgstr "Mes préparations"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:565
-#: src/pyams_content/root/zmi/__init__.py:366
-#, python-format
-msgid "CONTRIBUTOR - {0} prepared content"
-msgstr "CONTRIBUTEUR - {0} contenu en préparation"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:566
-#: src/pyams_content/root/zmi/__init__.py:367
-#, python-format
-msgid "CONTRIBUTOR - {0} prepared contents"
-msgstr "CONTRIBUTEUR - {0} contenus en préparation"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:605
-#: src/pyams_content/root/zmi/__init__.py:405
-msgid "Your prepared contents"
-msgstr "Mes contenus en préparation"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:618
-#: src/pyams_content/root/zmi/__init__.py:418
-msgid "My submissions"
-msgstr "Mes demandes"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:627
-#: src/pyams_content/root/zmi/__init__.py:427
-#, python-format
-msgid "CONTRIBUTOR - {0} submitted content"
-msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:628
-#: src/pyams_content/root/zmi/__init__.py:428
-#, python-format
-msgid "CONTRIBUTOR - {0} submitted contents"
-msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:667
-#: src/pyams_content/root/zmi/__init__.py:466
-msgid "Your submitted contents"
-msgstr "Mes contenus soumis à un responsable"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:680
-#: src/pyams_content/root/zmi/__init__.py:479
-msgid "My publications"
-msgstr "Mes publications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:689
-#: src/pyams_content/root/zmi/__init__.py:488
-#, python-format
-msgid "CONTRIBUTOR - {0} published content"
-msgstr "CONTRIBUTEUR - {0} contenu publié"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:690
-#: src/pyams_content/root/zmi/__init__.py:489
-#, python-format
-msgid "CONTRIBUTOR - {0} published contents"
-msgstr "CONTRIBUTEUR - {0} contenus publiés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:729
-#: src/pyams_content/root/zmi/__init__.py:527
-msgid "Your published contents"
-msgstr "Mes contenus publiés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:742
-#: src/pyams_content/root/zmi/__init__.py:540
-msgid "My retired contents"
-msgstr "Mes contenus retirés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:751
-#: src/pyams_content/root/zmi/__init__.py:549
-#, python-format
-msgid "CONTRIBUTOR - {0} retired content"
-msgstr "CONTRIBUTEUR - {0} contenu retiré"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:752
-#: src/pyams_content/root/zmi/__init__.py:550
-#, python-format
-msgid "CONTRIBUTOR - {0} retired contents"
-msgstr "CONTRIBUTEUR - {0} contenus retirés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:792
-#: src/pyams_content/root/zmi/__init__.py:589
-msgid "Your retired contents"
-msgstr "Mes contenus retirés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:805
-#: src/pyams_content/root/zmi/__init__.py:602
-msgid "My archived contents"
-msgstr "Mes contenus archivés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:814
-#: src/pyams_content/root/zmi/__init__.py:611
-#, python-format
-msgid "CONTRIBUTOR - {0} archived content"
-msgstr "CONTRIBUTEUR - {0} contenu archivé"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:815
-#: src/pyams_content/root/zmi/__init__.py:612
-#, python-format
-msgid "CONTRIBUTOR - {0} archived contents"
-msgstr "CONTRIBUTEUR - {0} contenus archivés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:861
-#: src/pyams_content/root/zmi/__init__.py:657
-msgid "Your archived contents"
-msgstr "Mes contenus archivés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:875
-#: src/pyams_content/root/zmi/__init__.py:671
-msgid "Other interventions"
-msgstr "Toutes les interventions"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:890
-#: src/pyams_content/root/zmi/__init__.py:686
-msgid "Last publications"
-msgstr "Dernières publications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:899
-#: src/pyams_content/root/zmi/__init__.py:695
-#, python-format
-msgid "CONTRIBUTORS - {0} published content"
-msgstr "TOUS CONTRIBUTEURS - {0} contenu publié"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:945
-#: src/pyams_content/root/zmi/__init__.py:740
-msgid "Last published contents"
-msgstr "Derniers contenus publiés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:958
-#: src/pyams_content/root/zmi/__init__.py:753
-msgid "Last updates"
-msgstr "Dernières modifications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:967
-#: src/pyams_content/root/zmi/__init__.py:762
-#, python-format
-msgid "CONTRIBUTORS - {0} updated content"
-msgstr "TOUS CONTRIBUTEURS - {0} contenu modifié"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:1012
-#: src/pyams_content/root/zmi/__init__.py:806
-msgid "Last updated contents"
-msgstr "Derniers contenus modifiés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:407
-#: src/pyams_content/root/zmi/__init__.py:243
-#, python-format
-msgid "CONTRIBUTOR - {0} modified contents"
-msgstr "CONTRIBUTEUR - {0} contenus modifiés"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:409
-#: src/pyams_content/root/zmi/__init__.py:245
-#, python-format
-msgid "CONTRIBUTOR - Last {0} modified contents"
-msgstr "CONTRIBUTEUR - Les {0} dernières modifications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:904
-#: src/pyams_content/root/zmi/__init__.py:700
-#, python-format
-msgid "CONTRIBUTORS - Last {0} published contents"
-msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:906
-#: src/pyams_content/root/zmi/__init__.py:702
-msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
-msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:972
-#: src/pyams_content/root/zmi/__init__.py:767
-#, python-format
-msgid "CONTRIBUTORS - Last {0} updated contents"
-msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:974
-#: src/pyams_content/root/zmi/__init__.py:769
-msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
-msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:306
-#, python-format
-msgid "SEARCH - Between all contents of type « {type} »"
-msgstr "RECHERCHE - Tous contenus « {type} » confondus"
-
-#: src/pyams_content/shared/common/zmi/dashboard.py:171
-#: src/pyams_content/shared/common/zmi/header.py:96
-msgid "Content publication start date is not passed yet"
-msgstr "La date de début de publication n'est pas encore atteinte"
-
-#: src/pyams_content/shared/common/zmi/header.py:85
-#, python-format
-msgid "{state} by {principal}"
-msgstr "{state} par {principal}"
-
-#: src/pyams_content/shared/common/zmi/header.py:116
-#, python-format
-msgid "since {date}"
-msgstr "depuis {date}"
-
-#: src/pyams_content/shared/common/zmi/header.py:128
-msgid "access published version"
-msgstr "accéder à la version en ligne"
-
-#: src/pyams_content/shared/common/zmi/header.py:135
-msgid "access new version"
-msgstr "accéder à la version en préparation"
-
-#: src/pyams_content/shared/common/zmi/header.py:145
-msgid "access waiting version"
-msgstr "accéder à la version en attente"
-
-#: src/pyams_content/shared/common/zmi/header.py:156
-msgid "access retired version"
-msgstr "accéder à la version retirée"
-
-#: src/pyams_content/shared/common/zmi/header.py:166
-msgid "access archived version"
-msgstr "accéder à la version archivée"
-
-#: src/pyams_content/shared/common/zmi/types.py:67
-msgid "Data types"
-msgstr "Types de contenus"
-
-#: 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:185
-#: src/pyams_content/shared/common/zmi/types.py:396
-msgid "Default associations"
-msgstr "Liens et pièces jointes par défaut"
-
-#: src/pyams_content/shared/common/zmi/types.py:213
-msgid "Content data types"
-msgstr "Types de contenus"
-
-#: src/pyams_content/shared/common/zmi/types.py:236
-msgid "Add data type"
-msgstr "Ajouter un type"
-
-#: src/pyams_content/shared/common/zmi/types.py:248
-msgid "Add new data type"
-msgstr "Ajout d'un type de contenu"
-
-#: src/pyams_content/shared/common/zmi/types.py:285
-msgid "Data type properties"
-msgstr "Propriétés du type de contenu"
-
-#: src/pyams_content/shared/common/zmi/types.py:359
-msgid "Subtype label"
-msgstr "Libellé du sous-type"
-
-#: src/pyams_content/shared/common/zmi/types.py:440
-msgid "Add subtype"
-msgstr "Ajouter un sous-type"
-
-#: src/pyams_content/shared/common/zmi/types.py:452
-msgid "Add new subtype"
-msgstr "Ajout d'un sous-type de contenu"
-
-#: src/pyams_content/shared/common/zmi/types.py:498
-msgid "Data subtype properties"
-msgstr "Propriétés du fichier standard"
-
-#: 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:275
-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:474
-msgid "Subtype was correctly added."
-msgstr "Le sous-type a été ajouté."
-
-#: src/pyams_content/shared/common/zmi/types.py:488
-msgid "Specified subtype name is already used!"
-msgstr "Le nom indiqué pour ce sous-type de contenu est déjà utilisé !"
-
-#: src/pyams_content/shared/common/zmi/types.py:157
-msgid "Click to see subtypes"
-msgstr "Montrer ou caher les sous-types"
-
-#: src/pyams_content/shared/common/zmi/site.py:38
-#, python-format
-msgid ""
-"SEARCH - Between all contents published into « {site} »"
-msgstr ""
-"RECHERCHE - Tous contenus présents dans « {site} » "
-"confondus"
-
-#: src/pyams_content/shared/common/zmi/owner.py:50
-msgid "Change owner..."
-msgstr "Changer de propriétaire"
-
-#: src/pyams_content/shared/common/zmi/owner.py:83
-msgid "Change content's owner"
-msgstr "Changement de propriétaire"
-
-#: src/pyams_content/shared/common/zmi/owner.py:125
-msgid ""
-"All versions of this content which are not archived will be transferred to "
-"newly selected owner"
-msgstr ""
-"Toutes les versions non archivées de ce contenu seront transférées au "
-"nouveau propriétaire sélectionné"
-
-#: src/pyams_content/shared/common/zmi/owner.py:60
-msgid "New owner"
-msgstr "Nouveau propriétaire"
-
-#: src/pyams_content/shared/common/zmi/owner.py:61
-msgid "The selected user will become the new content's owner"
-msgstr "L'utilisateur sélectionné deviendra le nouveau propriétaire du contenu"
-
-#: src/pyams_content/shared/common/zmi/owner.py:63
-msgid "Keep previous owner as contributor"
-msgstr "L'ancien propriétaire reste contributeur"
-
-#: src/pyams_content/shared/common/zmi/owner.py:64
-msgid "If 'yes', the previous owner will still be able to modify this content"
+#: src/pyams_content/shared/logo/interfaces/__init__.py:33
+msgid "Logo"
+msgstr "Logo"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:70
+msgid "Logos"
+msgstr "Logos"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:47
+msgid "Image (colored)"
+msgstr "Image (version couleur)"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:51
+msgid "Image (monochrome)"
+msgstr "Image (version noir et blanc)"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:52
+msgid "An alternate image which can be used by some presentation templates"
msgstr ""
-"Si 'oui', l'actuel propriétaire du contenu en restera contributeur et pourra "
-"donc continuer à le mettre à jour"
-
-#: src/pyams_content/shared/common/zmi/owner.py:74
-msgid "Change owner"
-msgstr "Changer le propriétaire"
-
-#: 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:74
-msgid "Identity card"
-msgstr "Carte d'identité"
-
-#: src/pyams_content/shared/common/zmi/summary.py:86
-msgid "Requested action"
-msgstr "Évolution demandée"
-
-#: 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:146
-msgid "Current version"
-msgstr "À propos de cette version"
-
-#: src/pyams_content/shared/common/zmi/summary.py:176
-msgid "Content history"
-msgstr "Pour mémoire"
-
-#: src/pyams_content/shared/common/zmi/summary.py:117
-msgid "Associated comment"
-msgstr "Commentaire associé"
-
-#: 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:164
-#, python-format
-msgid "{state} since {date}, by {principal}"
-msgstr "{state} depuis {date} par {principal}"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:265
-msgid "Duplicate content..."
-msgstr "Dupliquer le contenu"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:285
-msgid "Duplicate content"
-msgstr "Dupliquer ce contenu"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:84
-msgid "This title can be modified afterwards"
-msgstr "Pourra être modifié ultérieurement"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:276
-msgid "Duplicate this content"
-msgstr "Dupliquer ce contenu"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:337
-#, python-format
-msgid "Clone created from version {source} of {oid} (in « {state} » state)"
-msgstr ""
-"Duplication de la version {source} du contenu {oid} (alors en statut "
-"« {state} »)"
-
-#: src/pyams_content/shared/common/zmi/__init__.py:382
-msgid "Created or modified in this version"
-msgstr "Créé ou modifié dans cette version"
-
-#: src/pyams_content/shared/common/zmi/manager.py:107
-msgid "Shared tool properties"
-msgstr "Propriétés de l'outil"
-
-#: src/pyams_content/shared/common/zmi/manager.py:125
-msgid "WARNING"
-msgstr "ATTENTION"
-
-#: src/pyams_content/shared/common/zmi/manager.py:127
-msgid ""
-"Workflow shouldn't be modified if this tool already contains any shared "
-"content!"
-msgstr ""
-"Le workflow ne doit pas être modifié si cet outil renferme déjà des contenus "
-"partagés !"
-
-#: src/pyams_content/shared/common/zmi/manager.py:150
-msgid "Languages"
-msgstr "Langues"
-
-#: src/pyams_content/shared/common/zmi/manager.py:162
-msgid "Content languages"
-msgstr "Langues pour la traduction de cet outil"
-
-#: src/pyams_content/shared/common/zmi/manager.py:172
-msgid ""
-"Tool languages are used to translate own tool properties, and newly created "
-"contents will propose these languages by default"
-msgstr ""
-"Les langues sont utilisées pour traduire les propriétés de l'outil.\n"
-"\n"
-"Les nouveaux contenus proposeront également ces langues par défaut."
-
-#: src/pyams_content/shared/common/zmi/manager.py:80
-msgid "Content management"
-msgstr "Gérer ce gabarit"
-
-#: src/pyams_content/shared/common/zmi/manager.py:82
-msgid "Tool management"
-msgstr "Gérer l'outil partagé"
-
-#: src/pyams_content/shared/common/zmi/portal.py:46
-msgid "Edit default template properties"
-msgstr "Modèle de présentation par défaut"
-
-#: src/pyams_content/shared/common/zmi/portal.py:56
-msgid ""
-"**This form allows you to select shared content default template.**\n"
-"\n"
-"If you choose to use a shared template, you can only adjust settings of each "
-"portlet individually but can't change portlets list or page configuration.\n"
-"\n"
-"If you use a local template, you can define a whole custom configuration but "
-"the template definition can't be reused anywhere..."
-msgstr ""
-"Vous pouvez modifier le modèle de présentation qui sera appliqué **par "
-"défaut** à tous les contenus de ce gabarit.\n"
-"\n"
-"Si vous choisissez d'utiliser un modèle de présentation partagé, vous "
-"pourrez ajuster les paramètres de chaque composant mais ne pourrez pas "
-"modifier la liste des composants ou leur position et la configuration de la "
-"page.\n"
-"\n"
-"Si vous choisissez d'utiliser un modèle de présentation \"local\", vous "
-"pourrez définir l'ensemble de la configuration mais le modèle de "
-"présentation ne pourra pas être réutilisé ailleurs que dans les contenus de "
-"ce gabarit."
-
-#: src/pyams_content/shared/common/zmi/portal.py:72
-msgid "Override tool default template"
-msgstr "Ne pas utiliser le modèle par défaut de ce gabarit"
-
-#: 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: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: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:172
-#: src/pyams_content/root/zmi/search.py:162
-msgid "Created after..."
-msgstr "Créé entre le"
-
-#: 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:178
-#: src/pyams_content/root/zmi/search.py:168
-msgid "Modified after..."
-msgstr "Modifié entre le"
-
-#: 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:60
-msgid "Composition"
-msgstr "Composition"
-
-#: src/pyams_content/shared/common/zmi/properties.py:82
-msgid "Content properties"
-msgstr "Propriétés élémentaires"
-
-#: src/pyams_content/shared/common/zmi/security.py:64
-msgid "Contributors restrictions"
-msgstr "Paramètres des contributeurs"
-
-#: src/pyams_content/shared/common/zmi/security.py:73
-msgid "Content contributors restrictions"
-msgstr "Liste des contributeurs"
-
-#: src/pyams_content/shared/common/zmi/security.py:107
-msgid "Contributor name"
-msgstr "Nom du contributeur"
-
-#: src/pyams_content/shared/common/zmi/security.py:218
-msgid "Managers restrictions"
-msgstr "Paramètres des responsables"
-
-#: src/pyams_content/shared/common/zmi/security.py:227
-msgid "Content managers restrictions"
-msgstr "Liste des responsables"
-
-#: src/pyams_content/shared/common/zmi/security.py:259
-msgid "Manager name"
-msgstr "Nom du responsable"
-
-#: src/pyams_content/shared/common/zmi/security.py:287
-msgid "Restricted"
-msgstr "Restrictions"
-
-#: src/pyams_content/shared/common/zmi/security.py:304
-msgid "Owners"
-msgstr "Propriétaires"
-
-#: src/pyams_content/shared/common/zmi/security.py:394
-msgid "Publication workflow"
-msgstr "Workflow de publication"
-
-#: src/pyams_content/shared/common/zmi/security.py:167
-#, python-format
-msgid "Edit contributor restrictions for « {0} »"
-msgstr "Gérer les paramètres d'intervention de « {0} »"
-
-#: src/pyams_content/shared/common/zmi/security.py:353
-#, python-format
-msgid "Edit manager restrictions for « {0} »"
-msgstr "Gérer les paramètres d'intervention de « {0} »"
-
-#: src/pyams_content/shared/common/zmi/security.py:400
-msgid "Apply contents restrictions"
-msgstr "Appliquer des restrictions d'accès"
-
-#: src/pyams_content/shared/common/zmi/security.py:402
-msgid ""
-"You can specify which contents this manager will be able to manage. If you "
-"specify several criteria, the manager will be able to manage contents for "
-"which at least one criteria is matching."
-msgstr ""
-"Vous pouvez indiquer les propriétés des contenus que ce responsable sera "
-"autorisé à gérer. Si vous indiquez plusieurs critères, il pourra gérer les "
-"contenus pour lesquels au moins l'un des critères correspond."
-
-#: src/pyams_content/shared/common/zmi/workflow.py:844
-msgid "Prior checks"
-msgstr "Contrôles préalables : avez-vous ?"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:123
-msgid "Request publication"
-msgstr "Demander la publication"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:210
-#: src/pyams_content/workflow/__init__.py:315
-msgid "Cancel publication request"
-msgstr "Annuler la demande de publication"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:250
-msgid "Refuse publication request"
-msgstr "Refuser la demande de publication"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:304
-#: src/pyams_content/workflow/basic.py:196
-msgid "Publish"
-msgstr "Publier"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:393
-msgid "Request retire"
-msgstr "Demander le retrait"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:449
-msgid "Cancel retire request"
-msgstr "Annuler la demande de retrait"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:489
-msgid "Retire"
-msgstr "Retirer"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:530
-#: src/pyams_content/workflow/__init__.py:436
-msgid "Request archive"
-msgstr "Demander l'archivage"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:573
-msgid "Cancel archive request"
-msgstr "Annuler la demande d'archivage"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:613
-msgid "Archive"
-msgstr "Archiver"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:654
-#: src/pyams_content/workflow/basic.py:224
-#: src/pyams_content/workflow/basic.py:236
-#: src/pyams_content/workflow/__init__.py:501
-#: src/pyams_content/workflow/__init__.py:513
-#: src/pyams_content/workflow/__init__.py:525
-#: src/pyams_content/workflow/__init__.py:537
-#: src/pyams_content/workflow/__init__.py:549
-msgid "Create new version"
-msgstr "Créer une nouvelle version"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:705
-#: src/pyams_content/workflow/basic.py:248
-#: src/pyams_content/workflow/__init__.py:561
-msgid "Delete version"
-msgstr "Supprimer cette version"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:790
-msgid "Previewed content?"
-msgstr "Prévisualisé ce contenu ?"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:794
-msgid "Verified content?"
-msgstr "Audité ce contenu ?"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:180
-#: src/pyams_content/shared/common/zmi/workflow.py:362
-msgid "Publication start date is required"
-msgstr "La date de début de publication est obligatoire"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:273
-#: src/pyams_content/shared/common/zmi/workflow.py:419
-msgid "A comment is required"
-msgstr "Le commentaire est obligatoire"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:729
-msgid "Delete content"
-msgstr "Supprimer définitivement ce contenu"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:738
-msgid "Delete definitively"
-msgstr "Supprimer définitivement"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:860
-msgid ""
-"You must confirm that you previewed and checked this content before "
-"requesting publication!!"
-msgstr ""
-"Vous devez avoir prévisualisé et audité ce contenu avant de pouvoir le "
-"publier !!"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:87
-#, python-format
-msgid "{state} | by {principal}"
-msgstr "{state} | par {principal}"
-
-#: src/pyams_content/shared/common/zmi/workflow.py:83
-#: src/pyams_content/workflow/basic.py:315
-#: src/pyams_content/workflow/basic.py:286
-#: src/pyams_content/workflow/__init__.py:648
-#: src/pyams_content/workflow/__init__.py:619
+"Image de substitution monochrome pouvant être utilisée par certains modes de "
+"rendu"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:77
+msgid "Logos references"
+msgstr "Logos sélectionnés"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:78
+msgid "List of internal logos references"
+msgstr "Liste de références internes vers les logos à afficher"
+
+#: src/pyams_content/shared/logo/interfaces/__init__.py:81
+msgid "Logos template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/shared/blog/zmi/__init__.py:52
+msgid "This blog post"
+msgstr "Cet article"
+
+#: src/pyams_content/shared/blog/zmi/__init__.py:71
+#: src/pyams_content/shared/blog/zmi/__init__.py:81
+msgid "Add blog post"
+msgstr "Ajouter un article"
+
+#: src/pyams_content/shared/blog/zmi/__init__.py:62
#, python-format
-msgid "{state} {date}"
-msgstr "{state} {date}"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
-msgid "This content is already retired and not visible."
-msgstr "Ce contenu est déjà retiré et n'est plus visible des internautes."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
-#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
-msgid ""
-"After archiving, it will be backed up but you will not be able to publish it "
-"again except by creating a new version."
-msgstr ""
-"L'archivage permet de conserver une version d'un contenu dans son état "
-"actuel ; il pourra ensuite à nouveau être publié, en créant une nouvelle "
-"version."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
-msgid ""
-"After canceling the request, you will be able to update the content again."
-msgstr "En annulant cette demande, ce contenu pourra à nouveau être modifié."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
-msgid "As a manager, you considerate that this content must be archived."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu doit être archivé."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
-msgid ""
-"This new content is going to be created in 'draft' mode, so that you can "
-"complete it before publication."
-msgstr ""
-"Ce nouveau contenu va être créé en statut 'Brouillon' pour vous permettre de "
-"le préparer."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
-msgid ""
-"A unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-"Un numéro unique va lui être attribué ; il sera permanent, quelle que soit "
-"la version."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
-msgid ""
-"You considerate that the currently published version should no more be "
-"publicly visible."
-msgstr ""
-"Vous considérez que la version actuellement en ligne ne doit plus être "
-"consultable."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
-msgid ""
-"WARNING: the content will remain visible until a manager validate the "
-"request."
-msgstr ""
-"ATTENTION : ce contenu restera visible jusqu'à ce qu'un responsable prenne "
-"en charge votre demande."
-
-#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:29
-#: src/pyams_content/root/zmi/templates/dashboard.pt:29
-msgid "Quick search..."
-msgstr "Recherche rapide..."
-
-#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
-#: src/pyams_content/root/zmi/templates/dashboard.pt:35
-msgid "Advanced search..."
-msgstr "Recherche avancée..."
-
-#: src/pyams_content/shared/common/zmi/templates/dashboard.pt:49
-#: src/pyams_content/root/zmi/templates/dashboard.pt:49
-msgid "You are not actually concerned by any content."
-msgstr "Vous n'êtes actuellement concerné par aucun contenu."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
-msgid "You are going to duplicate a whole content."
-msgstr ""
-"Vous vous apprêtez à dupliquer une version de ce contenu pour en créer un "
-"nouveau."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
-msgid ""
-"The new copy is going to be created in 'draft' mode, so that you can modify "
-"it before publication."
-msgstr ""
-"Cette copie va être créée en statut 'Brouillon' pour vous permettre de la "
-"préparer."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
-msgid ""
-"A new unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-"Un numéro unique lui sera également attribué ; ce numéro sera conservé "
-"pendant toute la vie du contenu, quelle que soit la version."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's normal "
-"published state."
-msgstr "En annulant cette demande, ce contenu va retourner en statut 'Publié'."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
-msgid ""
-"RECALL: you are not the owner of the content on which you are intervening."
-msgstr ""
-"ATTENTION : vous intervenez sur un contenu dont vous n'êtes pas le "
-"propriétaire."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
-msgid "You considerate that the currently published must evolve."
-msgstr "Vous considérez que la version actuelle de ce contenu doit évoluer."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
-msgid ""
-"By creating a new version, you can update it's content without impacting the "
-"currently published one."
-msgstr ""
-"En créant une nouvelle version, vous pourrez apporter des modifications sans "
-"impacter la version actuelle."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
-msgid ""
-"When the new version will be complete, you will be able to make a new "
-"publication request to replace the currently published version (which will "
-"be archived automatically)."
-msgstr ""
-"Lorsque la nouvelle version sera prête, vous demanderez sa publication (et "
-"la version actuelle sera automatiquement archivée)."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content should no longer be "
-"published."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu ne doit plus être "
-"publié."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
-msgid ""
-"Retired content won't be visible anymore, but it can be updated and "
-"published again, or archived."
-msgstr ""
-"Après ce retrait, il ne sera plus visible des internautes. Il pourra par "
-"contre être publié à nouveau, archivé, ou modifié en créant une nouvelle "
-"version."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
-msgid "FOR YOUR INFORMATION"
-msgstr "POUR VOTRE INFORMATION"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
-msgid "Next step"
-msgstr "Étape suivante"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
-msgid "Previous step"
-msgstr "Étape précédente"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
-msgid "With this comment:"
-msgstr "Avec ce commentaire :"
-
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:128
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:128
-msgid "Created between"
-msgstr "Créé entre le"
-
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:140
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:166
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:140
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:166
-msgid "and"
-msgstr "et le"
-
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:154
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:154
-msgid "Modified between"
-msgstr "Modifié entre le"
-
-#: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:202
-#: src/pyams_content/root/zmi/templates/advanced-search.pt:202
-msgid "Tab label"
-msgstr "Libellé de l'onglet"
-
-#: src/pyams_content/shared/common/zmi/templates/header.pt:6
-msgid "Back to previous page"
-msgstr "Revenir à la page précédente"
-
-#: src/pyams_content/shared/common/zmi/templates/header.pt:20
-msgid "by ${owner}"
-msgstr "de ${owner}"
-
-#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
-msgid ""
-"This content was never published. If you confirm deletion, it won't be "
-"possible to restore it."
-msgstr ""
-"Ce contenu n'a jamais été publié. Une fois supprimé, il ne pourra pas être "
-"récupéré."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
-msgid ""
-"The content version is going to be definitely deleted. Will only remain the "
-"currently published version."
-msgstr ""
-"Cette version va être définitivement supprimée, pour revenir à la version "
-"précédente."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
-msgid ""
-"WARNING: this request was made by a contributor which is not the owner of "
-"this content."
-msgstr ""
-"ATTENTION : cette demande est formulée par un contributeur habilité qui "
-"n'est pas le propriétaire."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
-msgid ""
-"As a manager, you considerate that this content is complete and can be "
-"published 'as is'."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu peut être publié en "
-"l'état."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
-msgid ""
-"This operation will make the content publicly available (except if "
-"restricted access has been set)."
-msgstr ""
-"Cette opération va rendre le contenu visible de tous, sauf si des "
-"restrictions d'accès lui ont été appliquées."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's previous "
-"retired state."
-msgstr "En annulant cette demande, ce contenu va retourner en statut 'Retiré'."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
-msgid ""
-"This publication request is going to be transmitted to a content manager."
-msgstr "Cette demande de publication va être soumise à un responsable."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content can't be published "
-"'as is'."
-msgstr ""
-"En tant que responsable, vous considérez que ce contenu ne peut pas être "
-"publié en l'état."
-
-#: src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
-msgid ""
-"The contributor will be notified of this and will be able to update the "
-"content before doing a new publication request."
-msgstr ""
-"Le contributeur qui vous a sollicité va être notifié de votre refus ; il "
-"pourra modifier ce contenu et effectuer une nouvelle demande de publication."
-
-#: src/pyams_content/shared/common/portlet/content/__init__.py:44
-msgid "Context content"
-msgstr "Contenu partagé"
-
-#: src/pyams_content/shared/common/portlet/content/skin/__init__.py:36
-msgid "Default content renderer"
-msgstr "Par défaut"
-
-#: src/pyams_content/shared/common/portlet/content/zmi/preview.pt:2
-msgid "This is where the content will be displayed!!"
-msgstr "C'est ici que seront affichés les éléments du contenu."
-
-#: src/pyams_content/shared/site/manager.py:68
-#: src/pyams_content/shared/site/zmi/manager.py:125
-msgid "Site manager"
-msgstr "Site"
-
-#: src/pyams_content/shared/site/folder.py:59
-msgid "Site folder"
-msgstr "Rubrique"
-
-#: src/pyams_content/shared/site/link.py:46
-msgid "Content link"
-msgstr "Contenu lié"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:95
-msgid "Topic"
-msgstr "Article"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:58
-msgid "Heading"
-msgstr "Chapô"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:59
-msgid "Heading displayed according to presentation template"
-msgstr ""
-"Ce chapô pourra être affiché ou non en fonction du modèle de présentation "
-"retenu"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:62
-msgid "Navigation title"
-msgstr "Titre de navigation"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:63
-msgid "Title displayed in navigation items"
-msgstr ""
-"Libellé utilisé en lieu et place du titre dans les blocs de navigation, "
-"notamment dans les pages carrefours"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:114
-msgid "Content title, as shown in front-office"
-msgstr "Titre présenté aux internautes"
-
-#: src/pyams_content/shared/site/interfaces/__init__.py:118
-msgid "If 'no', link is not visible"
-msgstr "Si 'non', le lien ne sera pas visible"
-
-#: src/pyams_content/shared/site/zmi/container.py:179
-#: src/pyams_content/shared/site/zmi/container.py:189
-#: src/pyams_content/root/zmi/sites.py:68
-msgid "Site tree"
-msgstr "Arborescence du site"
-
-#: src/pyams_content/shared/site/zmi/container.py:308
-#: src/pyams_content/shared/site/zmi/container.py:157
-msgid "Visible element?"
-msgstr "Élément visible ?"
-
-#: src/pyams_content/shared/site/zmi/container.py:309
-msgid "Switch element visibility"
-msgstr "Cliquez pour rendre l'élément visible ou non"
-
-#: src/pyams_content/shared/site/zmi/container.py:370
-msgid "Folders and topics"
-msgstr "Rubriquage"
-
-#: src/pyams_content/shared/site/zmi/container.py:406
-#: src/pyams_content/root/zmi/__init__.py:817
-msgid "Content"
-msgstr "Contenu"
-
-#: src/pyams_content/shared/site/zmi/container.py:502
-msgid "Delete site item"
-msgstr "Supprimer ce contenu"
-
-#: src/pyams_content/shared/site/zmi/container.py:648
-msgid "Change URL..."
-msgstr "Changer d'URL"
-
-#: src/pyams_content/shared/site/zmi/container.py:663
-msgid "Change item URL"
-msgstr "Modification de l'URL"
-
-#: src/pyams_content/shared/site/zmi/container.py:670
-msgid "Item URL part"
-msgstr "URL du contenu"
-
-#: src/pyams_content/shared/site/zmi/container.py:379
-msgid "Click to open/close all folders"
-msgstr "Afficher/masquer toutes les rubriques"
-
-#: src/pyams_content/shared/site/zmi/container.py:395
-msgid "Click to show/hide inner folders"
-msgstr "Cliquer pour afficher ou cache les sous-niveaux"
-
-#: src/pyams_content/shared/site/zmi/container.py:265
-msgid "Can't reparent object to one of it's children. Reloading..."
-msgstr ""
-"Impossible de déplacer une rubrique dans l'une de ses sous-rubriques ou "
-"contenus ! Rechargement de la page..."
-
-#: src/pyams_content/shared/site/zmi/__init__.py:55
-msgid "This topic"
-msgstr "Cet article"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:63
-msgid "Add topic..."
-msgstr "Ajouter un article"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:86
-msgid "Add topic"
-msgstr "Ajout d'un article"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:72
-#: src/pyams_content/shared/site/zmi/folder.py:74
-#: src/pyams_content/shared/site/zmi/link.py:66
-msgid "Parent"
-msgstr "Niveau parent"
-
-#: src/pyams_content/shared/site/zmi/__init__.py:73
-msgid "Topic's parent"
-msgstr "Niveau parent"
-
-#: src/pyams_content/shared/site/zmi/manager.py:57
-msgid "Site management"
-msgstr "Gérer ce site"
-
-#: src/pyams_content/shared/site/zmi/manager.py:112
-#: src/pyams_content/shared/site/zmi/manager.py:126
-msgid "Add site manager"
-msgstr "Ajouter un site"
-
-#: src/pyams_content/shared/site/zmi/manager.py:160
-msgid "Specified site manager name is already used!"
-msgstr "Le nom indiqué pour ce site existe déjà !"
-
-#: src/pyams_content/shared/site/zmi/manager.py:164
-msgid "A site manager is already registered with this name!!"
-msgstr "Un site est déjà inscrit dans le registre avec ce nom !"
-
-#: src/pyams_content/shared/site/zmi/folder.py:61
-msgid "Add site folder..."
-msgstr "Ajouter une rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:93
-msgid "Add site folder"
-msgstr "Ajout d'une rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:162
-msgid "Site folder management"
-msgstr "Gérer cette rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:190
-msgid "Site folder properties"
-msgstr "Propriétés de la rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:75
-#: src/pyams_content/shared/site/zmi/link.py:67
-msgid "Folder's parent"
-msgstr "Niveau de rattachement de cette rubrique"
-
-#: src/pyams_content/shared/site/zmi/folder.py:155
-msgid "You must provide a folder name for default server language!"
-msgstr ""
-"Vous devez fournir un nom pour ce dossier pour la langue par défaut du "
-"serveur !"
-
-#: src/pyams_content/shared/site/zmi/link.py:57
-msgid "Rent content..."
-msgstr "Lier un contenu"
-
-#: 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:135
-msgid "Edit content link properties"
-msgstr "Propriétés du lien"
-
-#: src/pyams_content/root/__init__.py:67
+msgid "Blog post « {title} »"
+msgstr "Article de blog « {title} »"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:60
+msgid "Blog management"
+msgstr "Gérer ce blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:83
+#: src/pyams_content/shared/blog/zmi/manager.py:97
+msgid "Add blog manager"
+msgstr "Ajouter un blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:96
+msgid "Blog manager"
+msgstr "Blog"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:131
+msgid "Specified blog manager name is already used!"
+msgstr "Le nom indiqué pour ce blog existe déjà !"
+
+#: src/pyams_content/shared/blog/zmi/manager.py:135
+msgid "A blog manager is already registered with this name!!"
+msgstr "Un blog est déjà inscrit dans le registre avec ce nom !"
+
+#: src/pyams_content/shared/blog/interfaces/__init__.py:33
+msgid "Blog post"
+msgstr "Article de blog"
+
+#: src/pyams_content/profile/zmi/__init__.py:42
+msgid "Admin. profile"
+msgstr "Profil intervenant"
+
+#: src/pyams_content/profile/interfaces/__init__.py:33
+msgid "User favorites"
+msgstr "Favoris de l'utilisateur"
+
+#: src/pyams_content/profile/interfaces/__init__.py:34
+msgid "List of internal numbers of shared contents stored for quick access"
+msgstr "Liste des numéros internes des contenus mémorisés pour un accès rapide"
+
+#: src/pyams_content/profile/interfaces/__init__.py:37
+msgid "Default table length"
+msgstr "Longueur des tableaux"
+
+#: src/pyams_content/profile/interfaces/__init__.py:38
+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/__init__.py:68
msgid "Site root"
msgstr "Racine du site"
-#: src/pyams_content/root/interfaces/__init__.py:36
-msgid "Site managers"
-msgstr "Administrateurs"
-
-#: src/pyams_content/root/interfaces/__init__.py:44
-msgid "Templates managers"
-msgstr "Designers"
-
-#: src/pyams_content/root/interfaces/__init__.py:48
-msgid "Operators group"
-msgstr "Groupe des opérateurs"
-
-#: src/pyams_content/root/interfaces/__init__.py:49
-msgid "Name of group containing all roles owners"
-msgstr ""
-"Tous les utilisateurs auxquels sera attribué un rôle seront placés dans ce "
-"groupe"
-
-#: src/pyams_content/root/zmi/__init__.py:78
-msgid "Home"
-msgstr "Accueil"
-
-#: src/pyams_content/root/zmi/search.py:155
-msgid "Content types"
-msgstr "Types de contenus"
-
#: src/pyams_content/root/zmi/sites.py:78
msgid "Blogs and shared sites"
msgstr "Blogs et sites partagés"
@@ -4731,6 +4377,14 @@
msgid "Given element name doesn't exist!"
msgstr "Le nom de l'élément indiqué n'existe pas !"
+#: src/pyams_content/root/zmi/search.py:155
+msgid "Content types"
+msgstr "Types de contenus"
+
+#: src/pyams_content/root/zmi/__init__.py:78
+msgid "Home"
+msgstr "Accueil"
+
#: src/pyams_content/root/zmi/templates/dashboard.pt:7
msgid "Your contents dashboard"
msgstr "Les contenus qui me concernent"
@@ -4739,116 +4393,29 @@
msgid "SEARCH - Between all contents"
msgstr "RECHERCHE - Tous contenus confondus"
+#: src/pyams_content/root/interfaces/__init__.py:39
+msgid "Site managers"
+msgstr "Administrateurs"
+
+#: src/pyams_content/root/interfaces/__init__.py:47
+msgid "Templates managers"
+msgstr "Designers"
+
+#: src/pyams_content/root/interfaces/__init__.py:51
+msgid "Operators group"
+msgstr "Groupe des opérateurs"
+
+#: src/pyams_content/root/interfaces/__init__.py:52
+msgid "Name of group containing all roles owners"
+msgstr ""
+"Tous les utilisateurs auxquels sera attribué un rôle seront placés dans ce "
+"groupe"
+
+#: src/pyams_content/workflow/__init__.py:70
#: src/pyams_content/workflow/basic.py:53
-#: src/pyams_content/workflow/__init__.py:70
msgid "Draft"
msgstr "Brouillon"
-#: src/pyams_content/workflow/basic.py:54
-#: src/pyams_content/workflow/__init__.py:74
-msgid "Published"
-msgstr "Publié"
-
-#: src/pyams_content/workflow/basic.py:55
-#: src/pyams_content/workflow/__init__.py:78
-msgid "Archived"
-msgstr "Archivé"
-
-#: src/pyams_content/workflow/basic.py:56
-#: src/pyams_content/workflow/__init__.py:79
-msgid "Deleted"
-msgstr "Supprimé"
-
-#: src/pyams_content/workflow/basic.py:61
-#: src/pyams_content/workflow/__init__.py:84
-msgid "draft created"
-msgstr "brouillon créé"
-
-#: src/pyams_content/workflow/basic.py:62
-#: src/pyams_content/workflow/__init__.py:86
-msgid "published"
-msgstr "publié"
-
-#: src/pyams_content/workflow/basic.py:63
-#: src/pyams_content/workflow/__init__.py:90
-msgid "archived"
-msgstr "archivé"
-
-#: src/pyams_content/workflow/basic.py:190
-#: src/pyams_content/workflow/__init__.py:279
-msgid "Initialize"
-msgstr "Création"
-
-#: src/pyams_content/workflow/basic.py:193
-#: src/pyams_content/workflow/__init__.py:282
-msgid "Draft creation"
-msgstr "Création du brouillon"
-
-#: src/pyams_content/workflow/basic.py:204
-#: src/pyams_content/workflow/__init__.py:383
-msgid "Content published"
-msgstr "Publication"
-
-#: src/pyams_content/workflow/basic.py:206
-#: src/pyams_content/workflow/__init__.py:385
-#, python-format
-msgid "published the content « {0} »"
-msgstr "a publié le contenu « {0} »"
-
-#: src/pyams_content/workflow/basic.py:210
-#: src/pyams_content/workflow/__init__.py:463
-msgid "Archive content"
-msgstr "Archiver"
-
-#: src/pyams_content/workflow/basic.py:218
-#: src/pyams_content/workflow/__init__.py:471
-msgid "Content archived"
-msgstr "Archivage"
-
-#: src/pyams_content/workflow/basic.py:220
-#: src/pyams_content/workflow/__init__.py:473
-#, python-format
-msgid "archived content « {0} »"
-msgstr "a archivé le contenu « {0} »"
-
-#: src/pyams_content/workflow/basic.py:232
-#: src/pyams_content/workflow/basic.py:244
-#: src/pyams_content/workflow/__init__.py:509
-#: src/pyams_content/workflow/__init__.py:521
-#: src/pyams_content/workflow/__init__.py:533
-#: src/pyams_content/workflow/__init__.py:545
-#: src/pyams_content/workflow/__init__.py:557
-msgid "New version created"
-msgstr "Création d'une nouvelle version"
-
-#: src/pyams_content/workflow/basic.py:256
-#: src/pyams_content/workflow/__init__.py:569
-msgid "Version deleted"
-msgstr "Version supprimée"
-
-#: src/pyams_content/workflow/basic.py:289
-#: src/pyams_content/workflow/basic.py:311
-#: src/pyams_content/workflow/__init__.py:622
-#: src/pyams_content/workflow/__init__.py:644
-msgid "Unknown state"
-msgstr "(statut inconnu)"
-
-#: src/pyams_content/workflow/basic.py:313
-#: src/pyams_content/workflow/__init__.py:646
-msgid "publication refused"
-msgstr "publication refusée"
-
-#: src/pyams_content/workflow/basic.py:309
-#: src/pyams_content/workflow/__init__.py:642
-msgid "new version created"
-msgstr "nouvelle version en préparation"
-
-#: src/pyams_content/workflow/basic.py:160
-#: src/pyams_content/workflow/__init__.py:249
-#, python-format
-msgid "Published version {0}"
-msgstr "Version {0} publiée"
-
#: src/pyams_content/workflow/__init__.py:71
msgid "Proposed"
msgstr "Publication demandée"
@@ -4861,6 +4428,11 @@
msgid "Refused"
msgstr "Refusé"
+#: src/pyams_content/workflow/__init__.py:74
+#: src/pyams_content/workflow/basic.py:54
+msgid "Published"
+msgstr "Publié"
+
#: src/pyams_content/workflow/__init__.py:75
msgid "Retiring"
msgstr "Retrait demandé"
@@ -4873,10 +4445,30 @@
msgid "Archiving"
msgstr "Archivage demandé"
+#: src/pyams_content/workflow/__init__.py:78
+#: src/pyams_content/workflow/basic.py:55
+msgid "Archived"
+msgstr "Archivé"
+
+#: src/pyams_content/workflow/__init__.py:79
+#: src/pyams_content/workflow/basic.py:56
+msgid "Deleted"
+msgstr "Supprimé"
+
+#: src/pyams_content/workflow/__init__.py:84
+#: src/pyams_content/workflow/basic.py:61
+msgid "draft created"
+msgstr "brouillon créé"
+
#: src/pyams_content/workflow/__init__.py:85
msgid "publication requested"
msgstr "publication demandée"
+#: src/pyams_content/workflow/__init__.py:86
+#: src/pyams_content/workflow/basic.py:62
+msgid "published"
+msgstr "publié"
+
#: src/pyams_content/workflow/__init__.py:87
msgid "retiring requested"
msgstr "retrait demandé"
@@ -4889,6 +4481,21 @@
msgid "archiving requested"
msgstr "archivage demandé"
+#: src/pyams_content/workflow/__init__.py:90
+#: src/pyams_content/workflow/basic.py:63
+msgid "archived"
+msgstr "archivé"
+
+#: src/pyams_content/workflow/__init__.py:279
+#: src/pyams_content/workflow/basic.py:190
+msgid "Initialize"
+msgstr "Création"
+
+#: src/pyams_content/workflow/__init__.py:282
+#: src/pyams_content/workflow/basic.py:193
+msgid "Draft creation"
+msgstr "Création du brouillon"
+
#: src/pyams_content/workflow/__init__.py:285
#: src/pyams_content/workflow/__init__.py:300
msgid "Propose publication"
@@ -4967,6 +4574,17 @@
msgid "State reset to 'refused' (automatic)"
msgstr "Retour automatique en status 'refusé'"
+#: src/pyams_content/workflow/__init__.py:383
+#: src/pyams_content/workflow/basic.py:204
+msgid "Content published"
+msgstr "Publication"
+
+#: src/pyams_content/workflow/__init__.py:385
+#: src/pyams_content/workflow/basic.py:206
+#, python-format
+msgid "published the content « {0} »"
+msgstr "a publié le contenu « {0} »"
+
#: src/pyams_content/workflow/__init__.py:389
msgid "Request retiring"
msgstr "Demander le retrait"
@@ -5036,6 +4654,22 @@
msgid "cancelled the archive request for content « {0} »"
msgstr "a annulé la demande d'archivage du contenu « {0} »"
+#: src/pyams_content/workflow/__init__.py:463
+#: src/pyams_content/workflow/basic.py:210
+msgid "Archive content"
+msgstr "Archiver"
+
+#: src/pyams_content/workflow/__init__.py:471
+#: src/pyams_content/workflow/basic.py:218
+msgid "Content archived"
+msgstr "Archivage"
+
+#: src/pyams_content/workflow/__init__.py:473
+#: src/pyams_content/workflow/basic.py:220
+#, python-format
+msgid "archived content « {0} »"
+msgstr "a archivé le contenu « {0} »"
+
#: src/pyams_content/workflow/__init__.py:477
msgid "Archive published content"
msgstr "Archivage automatique d'un contenu publié"
@@ -5054,6 +4688,44 @@
msgid "Archive retired content"
msgstr "Archivage automatique d'un contenu retiré"
+#: src/pyams_content/workflow/__init__.py:509
+#: src/pyams_content/workflow/__init__.py:521
+#: src/pyams_content/workflow/__init__.py:533
+#: src/pyams_content/workflow/__init__.py:545
+#: src/pyams_content/workflow/__init__.py:557
+#: src/pyams_content/workflow/basic.py:232
+#: src/pyams_content/workflow/basic.py:244
+msgid "New version created"
+msgstr "Création d'une nouvelle version"
+
+#: src/pyams_content/workflow/__init__.py:569
+#: src/pyams_content/workflow/basic.py:256
+msgid "Version deleted"
+msgstr "Version supprimée"
+
+#: src/pyams_content/workflow/__init__.py:622
+#: src/pyams_content/workflow/__init__.py:644
+#: src/pyams_content/workflow/basic.py:289
+#: src/pyams_content/workflow/basic.py:311
+msgid "Unknown state"
+msgstr "(statut inconnu)"
+
+#: src/pyams_content/workflow/__init__.py:646
+#: src/pyams_content/workflow/basic.py:313
+msgid "publication refused"
+msgstr "publication refusée"
+
+#: src/pyams_content/workflow/__init__.py:642
+#: src/pyams_content/workflow/basic.py:309
+msgid "new version created"
+msgstr "nouvelle version en préparation"
+
+#: src/pyams_content/workflow/__init__.py:249
+#: src/pyams_content/workflow/basic.py:160
+#, python-format
+msgid "Published version {0}"
+msgstr "Version {0} publiée"
+
#: src/pyams_content/workflow/task.py:62
msgid "Automatic contents withdrawal:\n"
msgstr ""
@@ -5067,6 +4739,640 @@
msgid "Add automatic content archiver"
msgstr "Ajout d'une tâche d'archivage automatique"
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:46
+msgid "Shared sites"
+msgstr "Sites et blogs"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:67
+msgid "Shared contents"
+msgstr "Gabarits"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:90
+msgid "Shared tools"
+msgstr "Outils"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:113
+msgid "My roles"
+msgstr "Mes rôles"
+
+#: src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
+msgid "Create new content"
+msgstr "Créer un nouveau contenu"
+
+#: src/pyams_content/interfaces/__init__.py:95
+msgid "Unique key"
+msgstr "Clé unique"
+
+#: src/pyams_content/interfaces/__init__.py:96
+msgid ""
+"WARNING: this key can't be modified after creation!!! Spaces, uppercase "
+"letters ou accentuated characters will be replaced automatically."
+msgstr ""
+"ATTENTION : cette clé ne pourra plus être modifiée après sa création. Les "
+"espaces, les majuscules, les lettres accentuées et les caractères spéciaux "
+"seront remplacées automatiquement."
+
+#: src/pyams_content/interfaces/__init__.py:105
+msgid "Short name"
+msgstr "Fil d'Ariane"
+
+#: src/pyams_content/interfaces/__init__.py:106
+msgid "Short name used in breadcrumbs"
+msgstr "Libellé utilisé dans le fil d'Ariane"
+
+#: src/pyams_content/interfaces/__init__.py:117
+msgid "Modification date"
+msgstr "Dernière modification apportée"
+
+#: src/pyams_content/reference/zmi/table.py:73
+msgid "Contents"
+msgstr "Contenu"
+
+#: src/pyams_content/reference/zmi/table.py:83
+msgid "Table contents"
+msgstr "Contenu de la table"
+
+#: 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:143
+msgid "Properties..."
+msgstr "Propriétés"
+
+#: src/pyams_content/reference/zmi/table.py:157
+msgid "Edit table properties"
+msgstr "Propriétés de la table"
+
+#: src/pyams_content/reference/zmi/table.py:167
+msgid "Table management"
+msgstr "Gérer cette table"
+
+#: src/pyams_content/reference/zmi/__init__.py:51
+msgid "References"
+msgstr "Tables de réf."
+
+#: src/pyams_content/reference/pictograms/zmi/__init__.py:169
+#: src/pyams_content/reference/pictograms/zmi/widget.py:55
+msgid "Default header: --"
+msgstr "En-tête par défaut : --"
+
+#: src/pyams_content/reference/pictograms/zmi/manager.py:51
+msgid "Pictograms selection..."
+msgstr "Sélection de pictogrammes"
+
+#: src/pyams_content/reference/pictograms/zmi/manager.py:63
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:73
+msgid "Selected pictograms"
+msgstr "Pictogrammes sélectionnés"
+
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
+msgid "Available pictograms"
+msgstr "Pictogrammes disponibles"
+
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
+#: src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
+msgid "Display pictogram properties"
+msgstr "Propriétés du pictogramme"
+
+#: src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
+msgid "Default header: ${header}"
+msgstr "En-tête par défaut : ${header}"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:45
+msgid "Pictogram content"
+msgstr "Utilisez le bouton \"Parcourir\" pour modifier le contenu de l'image"
+
+#. Default: Header
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:52
+msgid "pictogram-header"
+msgstr "En-tête par défaut"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:53
+msgid "Default header associated with this pictogram"
+msgstr "En-tête par défaut associé à ce pictogramme"
+
+#: src/pyams_content/reference/pictograms/interfaces/__init__.py:74
+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:70
+#: 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/skin/__init__.py:67
+msgid "Hidden content"
+msgstr "Contenu non affiché"
+
+#: src/pyams_content/features/checker/interfaces.py:27
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">no value</span>"
+msgstr " - {field} : <span class=\"text-danger\">non renseigné</span>"
+
+#: src/pyams_content/features/checker/interfaces.py:28
+#, python-format
+msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
+msgstr " - {field} ({lang}) : <span class=\"text-danger\">non renseigné</span>"
+
+#: src/pyams_content/features/checker/interfaces.py:29
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">{message}</span>"
+msgstr " - {field} : <span class=\"text-danger\">{message}</span>"
+
+#: src/pyams_content/features/checker/zmi/__init__.py:58
+msgid "Content check"
+msgstr "Audit du contenu"
+
+#: src/pyams_content/features/checker/zmi/__init__.py:82
+msgid "No checker available. This content is clean!"
+msgstr "Pas de vérificateur disponible. Ce contenu est propre !"
+
+#: src/pyams_content/features/checker/zmi/__init__.py:78
+#, python-format
+msgid "{0}:"
+msgstr "{0} :"
+
+#: src/pyams_content/features/preview/zmi/__init__.py:62
+msgid "Content preview"
+msgstr "Aperçu du contenu"
+
+#: src/pyams_content/features/preview/zmi/__init__.py:67
+#, python-format
+msgid "{title} ({preview})"
+msgstr "{title} ({preview})"
+
+#: src/pyams_content/features/preview/zmi/__init__.py:68
+msgid "preview"
+msgstr "aperçu"
+
+#: src/pyams_content/features/alert/interfaces.py:40
+msgid "Success"
+msgstr "Levée d'alerte"
+
+#: src/pyams_content/features/alert/interfaces.py:41
+msgid "Information"
+msgstr "Information"
+
+#: src/pyams_content/features/alert/interfaces.py:42
+msgid "Warning"
+msgstr "Avertissement"
+
+#: src/pyams_content/features/alert/interfaces.py:43
+msgid "Danger"
+msgstr "Danger !"
+
+#: src/pyams_content/features/alert/interfaces.py:55
+msgid "Is this alert visible in front-office?"
+msgstr "Si 'non', cette alerte ne sera pas présentée aux internautes"
+
+#: src/pyams_content/features/alert/interfaces.py:59
+msgid "Alert gravity"
+msgstr "Niveau de gravité"
+
+#: src/pyams_content/features/alert/interfaces.py:60
+msgid "Alert gravity will affect rendered alert style"
+msgstr "Le niveau de gravité choisi affectera le style de rendu de l'alerte"
+
+#. Default: Heading
+#: src/pyams_content/features/alert/interfaces.py:65
+#: src/pyams_content/features/alert/zmi/container.py:157
+msgid "alert-header"
+msgstr "En-tête"
+
+#: src/pyams_content/features/alert/interfaces.py:66
+msgid "Short alert header (Alert, Important...)"
+msgstr "En-tête de l'alerte (« Alerte », « Important », « Prudence »...)"
+
+#: src/pyams_content/features/alert/interfaces.py:69
+#: src/pyams_content/features/alert/zmi/container.py:169
+msgid "Message"
+msgstr "Message"
+
+#: src/pyams_content/features/alert/interfaces.py:70
+msgid "Alert message"
+msgstr "Le message d'alerte doit être assez court et explicite"
+
+#: src/pyams_content/features/alert/interfaces.py:74
+msgid ""
+"Internal link target reference. You can search a reference using '+' "
+"followed by internal number, of by entering text matching content title."
+msgstr ""
+"Référence interne vers la cible du lien. Vous pouvez la rechercher par des "
+"mots de son titre, ou par son numéro interne (précédé d'un '+') ; le titre "
+"d'origine peut être modifié en utilisant le titre de substitution."
+
+#: src/pyams_content/features/alert/interfaces.py:86
+msgid "Display start date"
+msgstr "Date d'affichage"
+
+#: src/pyams_content/features/alert/interfaces.py:87
+msgid "First date at which alert should be displayed"
+msgstr ""
+"Première date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
+"qu'elle soit affichée immédiatement."
+
+#: src/pyams_content/features/alert/interfaces.py:90
+msgid "Display end date"
+msgstr "Date de retrait"
+
+#: src/pyams_content/features/alert/interfaces.py:91
+msgid "Last date at which alert should be displayed"
+msgstr ""
+"Dernière date à laquelle l'alerte sera affichée. Laissez la zone vide pour "
+"qu'elle ne soit pas retirée."
+
+#: src/pyams_content/features/alert/interfaces.py:94
+msgid "Maximum interval"
+msgstr "Intervalle d'affichage"
+
+#: src/pyams_content/features/alert/interfaces.py:95
+msgid ""
+"Maximum interval between alert displays on a given device, given in hours; "
+"set to 0 to always display the alert"
+msgstr ""
+"Cet intervalle est donné en heures ; passé ce délai, pour un internaute "
+"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
+msgid "Add alert"
+msgstr "Ajouter une alerte"
+
+#: 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:79
+msgid "Edit alert properties"
+msgstr "Propriétés de l'alerte"
+
+#: src/pyams_content/features/alert/zmi/container.py:55
+msgid "Alerts"
+msgstr "Alertes"
+
+#: src/pyams_content/features/alert/zmi/container.py:191
+msgid "Alert list"
+msgstr "Liste des alertes"
+
+#: src/pyams_content/features/alert/zmi/container.py:90
+msgid "No currently defined alert."
+msgstr "Aucune alerte n'est définie actuellement."
+
+#: src/pyams_content/features/menu/zmi/__init__.py:81
+msgid "Add menu..."
+msgstr "Ajouter un menu"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:92
+msgid "Add new menu"
+msgstr "Ajout d'un menu"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:123
+msgid "Edit menu properties"
+msgstr "Propriétés du menu"
+
+#: src/pyams_content/features/menu/zmi/__init__.py:110
+msgid "Menu was correctly added."
+msgstr "Le menu a été ajouté."
+
+#: src/pyams_content/features/menu/zmi/__init__.py:388
+msgid "Link was correctly added."
+msgstr "Le lien a été ajouté."
+
+#: src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
+msgid "Click to see menu items"
+msgstr "Montrer ou cacher les éléments du menu"
+
+#: src/pyams_content/features/menu/portlet/navigation/simple.py:68
+msgid "Simple navigation"
+msgstr "Navigation à un niveau"
+
+#: src/pyams_content/features/menu/portlet/navigation/double.py:68
+msgid "Double navigation"
+msgstr "Navigation à deux niveaux"
+
+#: src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:69
+msgid "Navigation links"
+msgstr "Liens de navigation"
+
+#: src/pyams_content/features/menu/portlet/navigation/zmi/double.py:69
+msgid "Navigation menus"
+msgstr "Menus de navigation"
+
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:15
+#: src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:12
+msgid "Link has no illustration"
+msgstr "Le lien n'a pas d'illustration"
+
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
+msgid "Portlet main title"
+msgstr "Titre du composant"
+
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:35
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:35
+msgid "Subtitle"
+msgstr "Sous-titre"
+
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:36
+#: src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:36
+msgid "Portlet subtitle"
+msgstr "Sous-titre du composant"
+
+#: src/pyams_content/features/menu/interfaces/__init__.py:64
+msgid "Menu title"
+msgstr "Libellé"
+
+#: src/pyams_content/features/menu/interfaces/__init__.py:65
+msgid "Displayed menu label"
+msgstr "Libellé du menu"
+
+#: src/pyams_content/features/menu/interfaces/__init__.py:69
+msgid "Direct reference to menu target"
+msgstr ""
+"Lorsque le menu est utilisé dans l'en-tête de page, référence interne vers "
+"la cible du menu (site ou rubrique) permettant de mettre en évidence le menu "
+"actif ; un lien sera également créé vers cette référence si le menu ne "
+"contient aucun lien."
+
+#: src/pyams_content/features/footer/zmi/__init__.py:60
+msgid "Page footer"
+msgstr "Pied de pages"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:78
+msgid "Edit footer settings"
+msgstr "Paramétrage des pieds de pages"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:152
+msgid ""
+"WARNING: Footer properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+"ATTENTION : les propriétés du pied de page sont enregistrées automatiquement "
+"lorsque vous modifiez le mode d'héritage !!"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:220
+msgid "Footer renderer settings"
+msgstr "Propriétés du mode de rendu"
+
+#: src/pyams_content/features/footer/zmi/__init__.py:107
+msgid "Don't inherit parent footer"
+msgstr "Ne pas hériter du pied de pages du parent"
+
+#: src/pyams_content/features/footer/skin/__init__.py:84
+msgid "Hidden footer"
+msgstr "Ne pas afficher de pied de pages"
+
+#: src/pyams_content/features/footer/interfaces/__init__.py:39
+msgid "Footer template"
+msgstr "Mode de rendu"
+
+#: src/pyams_content/features/footer/interfaces/__init__.py:40
+msgid "Presentation template used for this footer"
+msgstr "Mode de rendu utilisé par ce pied de page"
+
+#: src/pyams_content/features/review/__init__.py:181
+#, python-format
+msgid "Request comment: {comment}"
+msgstr "Commentaire joint : {comment}"
+
+#: src/pyams_content/features/review/__init__.py:211
+#, python-format
+msgid "A new comment was added on content « {0} »"
+msgstr "Un nouveau commentaire a été ajouté pour le contenu « {0} »"
+
+#: src/pyams_content/features/review/__init__.py:168
+#, python-format
+msgid "[{service_name}] A content review is requested"
+msgstr "[{service_name}] Demande de relecture"
+
+#: src/pyams_content/features/review/interfaces.py:32
+msgid "Review request"
+msgstr "Demande de relecture"
+
+#: src/pyams_content/features/review/interfaces.py:33
+msgid "Reviewer comment"
+msgstr "Commentaire"
+
+#: src/pyams_content/features/review/interfaces.py:56
+msgid "Comment writer"
+msgstr "Rédacteur"
+
+#: src/pyams_content/features/review/interfaces.py:59
+msgid "Content reviewers"
+msgstr "Relecteurs sollicités"
+
+#: src/pyams_content/features/review/interfaces.py:62
+msgid "Comment type"
+msgstr "Type de commentaire"
+
+#: src/pyams_content/features/review/interfaces.py:67
+msgid "Comment body"
+msgstr "Commentaire"
+
+#: src/pyams_content/features/review/interfaces.py:70
+msgid "Reviewer comment?"
+msgstr "Commentaire d'un relecteur ?"
+
+#: src/pyams_content/features/review/interfaces.py:86
+msgid "Reviewers list"
+msgstr "Liste des relecteurs"
+
+#: src/pyams_content/features/review/interfaces.py:87
+msgid "List of principals which reviewed the comment"
+msgstr "Liste des utilisateurs qui ont apporté des commentaires sur ce contenu"
+
+#: src/pyams_content/features/review/zmi/__init__.py:61
+msgid "Ask for review..."
+msgstr "Demander une relecture"
+
+#: src/pyams_content/features/review/zmi/__init__.py:100
+msgid "Content review request"
+msgstr "Demande de relecture"
+
+#: src/pyams_content/features/review/zmi/__init__.py:165
+msgid "Comments"
+msgstr "Commentaires"
+
+#: src/pyams_content/features/review/zmi/__init__.py:185
+msgid "Review comments"
+msgstr "Commentaires associés à cette version"
+
+#: src/pyams_content/features/review/zmi/__init__.py:71
+msgid "Sought principals"
+msgstr "Relecteurs sollicités"
+
+#: src/pyams_content/features/review/zmi/__init__.py:72
+msgid "List of principals from which a review is requested"
+msgstr ""
+"Liste des utilisateurs que vous souhaitez solliciter par mail pour relire ce "
+"contenu"
+
+#: src/pyams_content/features/review/zmi/__init__.py:75
+msgid "Comment"
+msgstr "Commentaire"
+
+#: src/pyams_content/features/review/zmi/__init__.py:76
+msgid "Comment associated with this request"
+msgstr ""
+"Ce commentaire associé à cette demande sera également transmis par mail"
+
+#: src/pyams_content/features/review/zmi/__init__.py:79
+msgid "Notify all reviewers"
+msgstr "Notifier tous les relecteurs"
+
+#: src/pyams_content/features/review/zmi/__init__.py:80
+msgid ""
+"If 'yes', selected reviewers will be notified by mail of your request, even "
+"if they were already members of the reviewers group. Otherwise, only new "
+"reviewers will be notified"
+msgstr ""
+"Si 'oui', tous les relecteurs sollicités seront notifiés par mail de votre "
+"demande, même s'ils avaient déjà été sollicités auparavant. Dans le cas "
+"contraire, seuls les nouveaux relecteurs seront notifiés."
+
+#: src/pyams_content/features/review/zmi/__init__.py:91
+msgid "Ask for content review"
+msgstr "Demander la relecture"
+
+#: src/pyams_content/features/review/zmi/__init__.py:146
+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:259
+msgid "Message is mandatory!"
+msgstr "Un commentaire est obligatoire !"
+
+#: src/pyams_content/features/review/zmi/__init__.py:134
+#, python-format
+msgid "Request successful. {count} new notification(s) have been sent"
+msgstr "Votre demande a été transmise. {count} notification(s) envoyée(s)."
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:32
+#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
+#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
+msgid "Review query from"
+msgstr "Demande de relecture de "
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:38
+#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
+#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
+msgid "(as reviewer)"
+msgstr "(relecteur)"
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:47
+#: src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
+msgid "Selected reviewers:"
+msgstr "Auprès de :"
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:64
+msgid "Add comment"
+msgstr "Déposer un commentaire"
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:67
+msgid "Add a comment..."
+msgstr "Votre commentaire..."
+
+#: src/pyams_content/features/review/zmi/templates/review-comments.pt:73
+msgid "Add this comment"
+msgstr "Ajouter ce commentaire"
+
+#: src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
+msgid "just now"
+msgstr "À l'instant !"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:4
+msgid "[${service_name}] You are requested for a content review"
+msgstr "[${service_name}] Demande de relecture"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:30
+msgid "Hello,"
+msgstr "Bonjour,"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:31
+msgid ""
+"You have been requested by ${sender}, contributor of « ${service_name} » "
+"website, to make a review of a content."
+msgstr ""
+"Vous êtes sollicité par ${sender}, contributeur du site internet "
+"${service_name}, qui souhaite recueillir votre commentaire à propos d'un "
+"contenu."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:36
+msgid "${sender} added the following message to his request:"
+msgstr "${sender} a accompagné sa demande de relecture du message suivant :"
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:41
+msgid ""
+"To review and comment this publication, please use the following link: "
+"${target}."
+msgstr "Pour accéder à cette contribution, cliquer ici : ${target}."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:44
+msgid "After reading this content, please use the « Comments » menu entry."
+msgstr ""
+"Lorsque vous aurez pris connaissance du contenu, cliquez sur « Commentaires "
+"» dans le menu en colonne de gauche."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:45
+msgid ""
+"If you don't want to reply to this request, please contact ${sender} "
+"directly by replying to this mail."
+msgstr ""
+"Si vous ne souhaitez pas donner suite à cette demande, vous pouvez répondre "
+"directement à ${sender} en lui adressant un message dans ce sens."
+
+#: src/pyams_content/features/review/zmi/templates/review-notification.pt:47
+msgid "Thank you."
+msgstr "Merci."
+
+#: src/pyams_content/features/header/zmi/__init__.py:66
+msgid "Page header"
+msgstr "En-tête de pages"
+
+#: src/pyams_content/features/header/zmi/__init__.py:84
+msgid "Edit header settings"
+msgstr "Paramétrage des en-têtes de pages"
+
+#: src/pyams_content/features/header/zmi/__init__.py:161
+msgid ""
+"WARNING: Header properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+"ATTENTION : les propriétés de l'en-tête sont enregistrées automatiquement "
+"lorsque vous modifiez le mode d'héritage !!"
+
+#: src/pyams_content/features/header/zmi/__init__.py:229
+msgid "Header renderer settings"
+msgstr "Propriétés du mode de rendu"
+
+#: src/pyams_content/features/header/zmi/__init__.py:113
+msgid "Don't inherit parent header"
+msgstr "Ne pas hériter de l'en-tête de pages du parent"
+
+#: src/pyams_content/features/header/skin/__init__.py:90
+msgid "Hidden header"
+msgstr "Ne pas afficher d'en-tête de pages"
+
+#~ msgid "Image associated to this data type"
+#~ msgstr "Image associée à ce type"
+
+#~ msgid "Monochrome image"
+#~ msgstr "Image monochrome"
+
+#~ msgid "Reference to the view from which items are extracted"
+#~ msgstr ""
+#~ "Référence de la vue depuis laquelle est extraite la liste de contenus"
+
+#~ msgid "HTML content"
+#~ msgstr "Contenu HTML"
+
+#~ msgid "WARNING: this key can't be modified after creation!!!"
+#~ msgstr "ATTENTION : cette clé ne pourra plus être modifiée !!!"
+
#~ msgid "Links"
#~ msgstr "Liens"
@@ -5266,9 +5572,6 @@
#~ msgid "The content « {0} » has been archived"
#~ msgstr "Le contenu « {0} » a été archivé"
-#~ msgid "Publication settings"
-#~ msgstr "Dates de publication et de retrait"
-
#~ msgid "Add new data subtype"
#~ msgstr "Ajout d'un sous-type"
--- a/src/pyams_content/locales/pyams_content.pot Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/locales/pyams_content.pot Tue Jul 17 15:09:38 2018 +0200
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-06-23 16:27+0200\n"
+"POT-Creation-Date: 2018-07-17 14:54+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -46,790 +46,137 @@
msgstr ""
#: ./src/pyams_content/__init__.py:53
+msgid "System manager (role)"
+msgstr ""
+
+#: ./src/pyams_content/__init__.py:60
msgid "Webmaster (role)"
msgstr ""
-#: ./src/pyams_content/__init__.py:62
+#: ./src/pyams_content/__init__.py:71
msgid "Pilot (role)"
msgstr ""
-#: ./src/pyams_content/__init__.py:70
+#: ./src/pyams_content/__init__.py:81
msgid "Manager (role)"
msgstr ""
-#: ./src/pyams_content/__init__.py:77
-msgid "Owner (role)"
-msgstr ""
-
-#: ./src/pyams_content/__init__.py:82
-msgid "Contributor (role)"
-msgstr ""
-
#: ./src/pyams_content/__init__.py:90
+msgid "Owner (role)"
+msgstr ""
+
+#: ./src/pyams_content/__init__.py:95
+msgid "Contributor (role)"
+msgstr ""
+
+#: ./src/pyams_content/__init__.py:106
msgid "Reader (role)"
msgstr ""
-#: ./src/pyams_content/__init__.py:96
+#: ./src/pyams_content/__init__.py:116
msgid "Operator (role)"
msgstr ""
-#: ./src/pyams_content/__init__.py:100
+#: ./src/pyams_content/__init__.py:121
msgid "Guest user (role)"
msgstr ""
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:44
-#: ./src/pyams_content/component/extfile/__init__.py:223
-#: ./src/pyams_content/component/extfile/__init__.py:238
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:66
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:46
-msgid "Image"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:45
-msgid "Pictogram content"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:48
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:54
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
-msgid "Accessibility title"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:49
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:57
-msgid "Alternate title used to describe image content"
-msgstr ""
-
-#. Default: Header
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:52
-msgid "pictogram-header"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:53
-msgid "Default header associated with this pictogram"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:73
-#: ./src/pyams_content/reference/pictograms/zmi/manager.py:63
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
-msgid "Selected pictograms"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:74
-msgid "List of selected pictograms which will be available to shared contents"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:59
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:304
-msgid "Add pictogram"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:71
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:317
-msgid "Add new pictogram"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:95
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:359
-msgid "Edit pictogram properties"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:150
-#: ./src/pyams_content/interfaces/__init__.py:99
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:94
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:45
-#: ./src/pyams_content/component/paragraph/zmi/container.py:223
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:231
-#: ./src/pyams_content/component/links/zmi/reverse.py:73
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:123
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:109
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:188
-#: ./src/pyams_content/shared/site/zmi/folder.py:70
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:188
-msgid "Title"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:169
-#: ./src/pyams_content/reference/pictograms/zmi/widget.py:55
-msgid "Default header: --"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/manager.py:51
-msgid "Pictograms selection..."
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
-msgid "Available pictograms"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
-#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
-msgid "Display pictogram properties"
-msgstr ""
-
-#: ./src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
-msgid "Default header: ${header}"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/__init__.py:51
-msgid "References"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/__init__.py:69
-#: ./src/pyams_content/reference/zmi/table.py:129
-msgid "References tables"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:73
-msgid "Contents"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:83
-msgid "Table contents"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:143
-msgid "Properties..."
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:157
-msgid "Edit table properties"
-msgstr ""
-
-#: ./src/pyams_content/reference/zmi/table.py:167
-msgid "Table management"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:95
-msgid "Unique key"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:96
-msgid "WARNING: this key can't be modified after creation!!!"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:100
-#: ./src/pyams_content/shared/site/zmi/folder.py:71
-msgid "Visible label used to display content"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:103
-msgid "Short name"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:104
-msgid "Short name used in breadcrumbs"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:111
-#: ./src/pyams_content/features/review/interfaces.py:74
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:40
-msgid "Creation date"
-msgstr ""
-
-#: ./src/pyams_content/interfaces/__init__.py:115
-msgid "Modification date"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:46
-msgid "Shared sites"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:67
-msgid "Shared contents"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:90
-msgid "Shared tools"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:113
-msgid "My roles"
-msgstr ""
-
-#: ./src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
-msgid "Create new content"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:33
-msgid "User favorites"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:34
-msgid "List of internal numbers of shared contents stored for quick access"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:37
-msgid "Default table length"
-msgstr ""
-
-#: ./src/pyams_content/profile/interfaces/__init__.py:38
-msgid "Default length used for inner tables and dashboards"
-msgstr ""
-
-#: ./src/pyams_content/profile/zmi/__init__.py:42
-msgid "Admin. profile"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:58
-#: ./src/pyams_content/features/alert/interfaces.py:54
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:41
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:40
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:44
-#: ./src/pyams_content/component/association/interfaces/__init__.py:42
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:39
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:87
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:117
-msgid "Visible?"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:59
-#: ./src/pyams_content/component/association/interfaces/__init__.py:43
-msgid "Is this item visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:63
-msgid "Menu title"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/interfaces/__init__.py:64
-msgid "Displayed menu label"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:81
-msgid "Add menu..."
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:92
-msgid "Add new menu"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:123
-msgid "Edit menu properties"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:208
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:62
-#: ./src/pyams_content/shared/form/zmi/field.py:159
-#: ./src/pyams_content/shared/common/interfaces/types.py:40
-#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
-#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:34
-msgid "Label"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:110
-msgid "Menu was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/__init__.py:388
-msgid "Link was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
-msgid "Click to see menu items"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/simple.py:68
-msgid "Simple navigation"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/double.py:68
-msgid "Double navigation"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
-msgid "Portlet main title"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:35
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:35
-msgid "Subtitle"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:36
-#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:36
-msgid "Portlet subtitle"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:70
-msgid "Navigation links"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/double.py:70
-msgid "Navigation menus"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:9
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:12
-#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:27
-msgid "Link target is not published!"
-msgstr ""
-
-#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:13
-msgid "Link has no illustration"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/interfaces.py:27
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">no value</span>"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/interfaces.py:28
-#, python-format
-msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/interfaces.py:29
-#, python-format
-msgid " - {field}: <span class=\"text-danger\">{message}</span>"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:43
-#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:39
-msgid "Audit"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:58
-msgid "Content check"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:82
-msgid "No checker available. This content is clean!"
-msgstr ""
-
-#: ./src/pyams_content/features/checker/zmi/__init__.py:78
-#, python-format
-msgid "{0}:"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:40
-msgid "Success"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:41
-msgid "Information"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:42
-msgid "Warning"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:43
-msgid "Danger"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:55
-msgid "Is this alert visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:59
-msgid "Alert gravity"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:60
-msgid "Alert gravity will affect rendered alert style"
-msgstr ""
-
-#. Default: Heading
-#: ./src/pyams_content/features/alert/interfaces.py:65
-#: ./src/pyams_content/features/alert/zmi/container.py:157
-msgid "alert-header"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:66
-msgid "Short alert header (Alert, Important...)"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:69
-#: ./src/pyams_content/features/alert/zmi/container.py:169
-msgid "Message"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:70
-msgid "Alert message"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:73
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:95
-msgid "Internal reference"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:74
-msgid ""
-"Internal link target reference. You can search a reference using '+' followed"
-" by internal number, of by entering text matching content title."
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:79
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:46
-#: ./src/pyams_content/component/links/interfaces/__init__.py:43
-#: ./src/pyams_content/shared/common/interfaces/types.py:68
-msgid "Pictogram"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:80
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:47
-msgid "Name of the pictogram to select"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:86
-msgid "Display start date"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:87
-msgid "First date at which alert should be displayed"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:90
-msgid "Display end date"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:91
-msgid "Last date at which alert should be displayed"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:94
-msgid "Maximum interval"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/interfaces.py:95
-msgid ""
-"Maximum interval between alert displays on a given device, given in hours; "
-"set to 0 to always display the alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:55
-msgid "Alerts"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:191
-msgid "Alert list"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/container.py:90
-msgid "No currently defined alert."
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/__init__.py:45
-msgid "Add alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/__init__.py:56
-msgid "Add new alert"
-msgstr ""
-
-#: ./src/pyams_content/features/alert/zmi/__init__.py:79
-msgid "Edit alert properties"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:45
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:207
-#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
-msgid "Preview"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:62
-msgid "Content preview"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:67
-#, python-format
-msgid "{title} ({preview})"
-msgstr ""
-
-#: ./src/pyams_content/features/preview/zmi/__init__.py:68
-msgid "preview"
-msgstr ""
-
-#: ./src/pyams_content/features/renderer/skin/__init__.py:67
-msgid "Hidden content"
-msgstr ""
-
-#: ./src/pyams_content/features/renderer/zmi/__init__.py:70
-#: ./src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
-msgid "Edit renderer properties"
-msgstr ""
-
-#: ./src/pyams_content/features/header/interfaces/__init__.py:39
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:43
-msgid "Header template"
-msgstr ""
-
-#: ./src/pyams_content/features/header/interfaces/__init__.py:40
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:44
-msgid "Presentation template used for this header"
-msgstr ""
-
-#: ./src/pyams_content/features/header/skin/__init__.py:53
-msgid "Hidden header"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:66
-msgid "Page header"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:84
-msgid "Edit header settings"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:161
-msgid ""
-"WARNING: Header properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:229
-msgid "Header renderer settings"
-msgstr ""
-
-#: ./src/pyams_content/features/header/zmi/__init__.py:113
-msgid "Don't inherit parent header"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/interfaces/__init__.py:39
-msgid "Footer template"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/interfaces/__init__.py:40
-msgid "Presentation template used for this footer"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/skin/__init__.py:53
-msgid "Hidden footer"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:60
-msgid "Page footer"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:78
-msgid "Edit footer settings"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:152
-msgid ""
-"WARNING: Footer properties are saved automatically when changing inherit "
-"mode!!"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:220
-msgid "Footer renderer settings"
-msgstr ""
-
-#: ./src/pyams_content/features/footer/zmi/__init__.py:107
-msgid "Don't inherit parent footer"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:32
-msgid "Review request"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:33
-msgid "Reviewer comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:56
-msgid "Comment writer"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:59
-msgid "Content reviewers"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:62
-msgid "Comment type"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:67
-msgid "Comment body"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:70
-msgid "Reviewer comment?"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:86
-msgid "Reviewers list"
-msgstr ""
-
-#: ./src/pyams_content/features/review/interfaces.py:87
-msgid "List of principals which reviewed the comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/__init__.py:181
-#, python-format
-msgid "Request comment: {comment}"
-msgstr ""
-
-#: ./src/pyams_content/features/review/__init__.py:211
-#, python-format
-msgid "A new comment was added on content « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/features/review/__init__.py:168
-#, python-format
-msgid "[{service_name}] A content review is requested"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:61
-msgid "Ask for review..."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:100
-msgid "Content review request"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:166
-msgid "Comments"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:186
-msgid "Review comments"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:71
-msgid "Sought principals"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:72
-msgid "List of principals from which a review is requested"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:75
-msgid "Comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:76
-msgid "Comment associated with this request"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:79
-msgid "Notify all reviewers"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:80
-msgid ""
-"If 'yes', selected reviewers will be notified by mail of your request, even "
-"if they were already members of the reviewers group. Otherwise, only new "
-"reviewers will be notified"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:90
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:212
-#: ./src/pyams_content/shared/common/zmi/owner.py:73
-#: ./src/pyams_content/shared/common/zmi/__init__.py:275
-#: ./src/pyams_content/shared/common/zmi/workflow.py:122
-#: ./src/pyams_content/shared/common/zmi/workflow.py:209
-#: ./src/pyams_content/shared/common/zmi/workflow.py:249
-#: ./src/pyams_content/shared/common/zmi/workflow.py:303
-#: ./src/pyams_content/shared/common/zmi/workflow.py:392
-#: ./src/pyams_content/shared/common/zmi/workflow.py:448
-#: ./src/pyams_content/shared/common/zmi/workflow.py:488
-#: ./src/pyams_content/shared/common/zmi/workflow.py:529
-#: ./src/pyams_content/shared/common/zmi/workflow.py:572
-#: ./src/pyams_content/shared/common/zmi/workflow.py:612
-#: ./src/pyams_content/shared/common/zmi/workflow.py:653
-#: ./src/pyams_content/shared/common/zmi/workflow.py:704
-msgid "Cancel"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:91
-msgid "Ask for content review"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:147
-msgid "Request successful. No new notification have been sent"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:260
-msgid "Message is mandatory!"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/__init__.py:135
-#, python-format
-msgid "Request successful. {count} new notification(s) have been sent"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
-#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:32
-msgid "Review query from"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
-#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:38
-msgid "(as reviewer)"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:47
-msgid "Selected reviewers:"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:4
-msgid "[${service_name}] You are requested for a content review"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:30
-msgid "Hello,"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:31
-msgid ""
-"You have been requested by ${sender}, contributor of « ${service_name} » "
-"website, to make a review of a content."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:36
-msgid "${sender} added the following message to his request:"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:41
-msgid ""
-"To review and comment this publication, please use the following link: "
-"${target}."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:44
-msgid "After reading this content, please use the « Comments » menu entry."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:45
-msgid ""
-"If you don't want to reply to this request, please contact ${sender} directly"
-" by replying to this mail."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:47
-msgid "Thank you."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
-msgid "just now"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:64
-msgid "Add comment"
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:67
-msgid "Add a comment..."
-msgstr ""
-
-#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:73
-msgid "Add this comment"
-msgstr ""
-
#: ./src/pyams_content/component/gallery/__init__.py:154
msgid "Gallery"
msgstr ""
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:130
+#: ./src/pyams_content/component/gallery/zmi/file.py:60
+#: ./src/pyams_content/component/gallery/zmi/file.py:72
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:155
+msgid "Add media(s)"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:182
+msgid "Update media properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:236
+msgid "Remove media..."
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:146
+msgid "Show/hide media"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/file.py:203
+msgid "Audio content"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:57
+msgid "Medias gallery..."
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:70
+msgid "Add new gallery"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/paragraph.py:92
+msgid "Edit gallery properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:63
+msgid "Update gallery properties"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/__init__.py:90
+msgid "Update gallery contents"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:36
+msgid "Images or videos data"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:37
+msgid "You can upload a single file or choose to upload a whole ZIP archive"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:40
+#: ./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:68
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:52
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:52
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
+#: ./src/pyams_content/component/video/interfaces/__init__.py:52
+msgid "Author"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:41
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:62
+#: ./src/pyams_content/component/extfile/interfaces/__init__.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:53
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:53
+#: ./src/pyams_content/component/video/interfaces/__init__.py:53
+msgid "Name of document's author"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:44
+msgid "Author comments"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/interfaces.py:45
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:66
+msgid "Comments relatives to author's rights management"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:11
+msgid "Gallery medias"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:17
+msgid "Download medias"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:41
+msgid "Zoom image"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:133
msgid "Medias gallery"
msgstr ""
@@ -846,58 +193,40 @@
msgstr ""
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:51
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:53
#: ./src/pyams_content/component/paragraph/interfaces/video.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:45
#: ./src/pyams_content/component/video/interfaces/__init__.py:75
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:53
msgid "Legend"
msgstr ""
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:54
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:56
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:48
+msgid "Accessibility title"
+msgstr ""
+
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:55
msgid "Alternate title used to describe media content"
msgstr ""
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:58
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:98
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:101
#: ./src/pyams_content/component/extfile/interfaces/__init__.py:40
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:64
#: ./src/pyams_content/component/paragraph/interfaces/video.py:48
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:44
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:48
#: ./src/pyams_content/component/links/interfaces/__init__.py:39
#: ./src/pyams_content/component/video/interfaces/__init__.py:48
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:64
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:154
#: ./src/pyams_content/shared/form/interfaces/__init__.py:66
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:149
msgid "Description"
msgstr ""
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:61
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:40
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:44
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:52
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:44
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:48
-#: ./src/pyams_content/component/video/interfaces/__init__.py:52
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:68
-msgid "Author"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:62
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:41
-#: ./src/pyams_content/component/extfile/interfaces/__init__.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:53
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:49
-#: ./src/pyams_content/component/video/interfaces/__init__.py:53
-msgid "Name of document's author"
-msgstr ""
-
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:65
msgid "Author's comments"
msgstr ""
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:66
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:45
-msgid "Comments relatives to author's rights management"
-msgstr ""
-
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:69
msgid "Source ID"
msgstr ""
@@ -908,7 +237,7 @@
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:73
#: ./src/pyams_content/component/extfile/interfaces/__init__.py:89
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:52
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:41
msgid "Audio data"
msgstr ""
@@ -940,120 +269,53 @@
msgid "If 'no', this media won't be displayed in front office"
msgstr ""
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:95
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:97
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:31
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:232
+#: ./src/pyams_content/component/paragraph/zmi/container.py:252
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:45
+#: ./src/pyams_content/component/links/zmi/reverse.py:73
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:109
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:188
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:56
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:123
+#: ./src/pyams_content/shared/site/zmi/folder.py:70
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:188
+#: ./src/pyams_content/interfaces/__init__.py:101
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:150
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:31
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:31
+msgid "Title"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:98
msgid "Gallery title, as shown in front-office"
msgstr ""
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:99
-msgid "Gallery description displayed by front-office template"
-msgstr ""
-
#: ./src/pyams_content/component/gallery/interfaces/__init__.py:102
+msgid "Gallery description displayed by front-office template"
+msgstr ""
+
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:105
msgid "Gallery template"
msgstr ""
-#: ./src/pyams_content/component/gallery/interfaces/__init__.py:103
+#: ./src/pyams_content/component/gallery/interfaces/__init__.py:106
msgid "Presentation template used for this gallery"
msgstr ""
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:36
-msgid "Images or videos data"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:37
-msgid "You can upload a single file or choose to upload a whole ZIP archive"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/interfaces.py:44
-msgid "Author comments"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:56
-msgid "Medias gallery..."
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:69
-msgid "Add new gallery"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:96
-msgid "Edit gallery properties"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/paragraph.py:164
-#: ./src/pyams_content/component/gallery/zmi/file.py:57
-#: ./src/pyams_content/component/gallery/zmi/file.py:69
-msgid "Add media(s)"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:63
-msgid "Update gallery properties"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/__init__.py:95
-msgid "Update gallery contents"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:184
-msgid "Update media properties"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:238
-msgid "Remove media..."
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:148
-msgid "Show/hide media"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/file.py:211
-msgid "Audio content"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:11
-msgid "Gallery medias"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:17
-msgid "Download medias"
-msgstr ""
-
-#: ./src/pyams_content/component/gallery/zmi/templates/gallery-medias.pt:41
-msgid "Zoom image"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:65
-#: ./src/pyams_content/component/theme/interfaces/__init__.py:43
-#: ./src/pyams_content/component/theme/zmi/portlet.py:40
-msgid "Themes"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/__init__.py:74
-msgid "no defined theme"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:51
-#: ./src/pyams_content/shared/view/zmi/theme.py:48
-msgid "Themes..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/__init__.py:63
-msgid "Content themes"
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:45
-msgid "Themes settings..."
-msgstr ""
-
-#: ./src/pyams_content/component/theme/zmi/manager.py:59
-msgid "Selected themes"
-msgstr ""
-
#: ./src/pyams_content/component/extfile/__init__.py:172
#: ./src/pyams_content/component/extfile/__init__.py:176
msgid "Standard file"
msgstr ""
+#: ./src/pyams_content/component/extfile/__init__.py:223
+#: ./src/pyams_content/component/extfile/__init__.py:238
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:67
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:44
+msgid "Image"
+msgstr ""
+
#: ./src/pyams_content/component/extfile/__init__.py:253
#: ./src/pyams_content/component/extfile/__init__.py:257
#: ./src/pyams_content/component/paragraph/interfaces/video.py:34
@@ -1065,10 +327,78 @@
msgid "Audio file"
msgstr ""
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:74
+msgid "External files"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:89
+msgid "Add external file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:103
+msgid "Add new external file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:133
+msgid "Update file properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:161
+msgid "Images"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:176
+msgid "Add image"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:190
+msgid "Add new image"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:221
+msgid "Update image properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:254
+msgid "Videos"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:269
+msgid "Add video"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:283
+msgid "Add new video"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:307
+msgid "Update video properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:333
+msgid "Audios files"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:348
+msgid "Add audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:362
+msgid "Add new audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:386
+msgid "Update audio file properties"
+msgstr ""
+
+#: ./src/pyams_content/component/extfile/zmi/__init__.py:50
+msgid "External file type"
+msgstr ""
+
#: ./src/pyams_content/component/extfile/interfaces/__init__.py:36
#: ./src/pyams_content/component/links/interfaces/__init__.py:35
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:54
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:113
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:55
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:114
msgid "Alternate title"
msgstr ""
@@ -1078,13 +408,13 @@
#: ./src/pyams_content/component/extfile/interfaces/__init__.py:41
#: ./src/pyams_content/component/paragraph/interfaces/video.py:49
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:49
#: ./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/links/interfaces/__init__.py:68
+#: ./src/pyams_content/component/links/interfaces/__init__.py:65
msgid "Language"
msgstr ""
@@ -1109,7 +439,7 @@
msgstr ""
#: ./src/pyams_content/component/extfile/interfaces/__init__.py:73
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:47
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:48
msgid "Image data"
msgstr ""
@@ -1127,76 +457,170 @@
msgstr ""
#: ./src/pyams_content/component/extfile/interfaces/__init__.py:90
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:53
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:42
msgid "Audio file content"
msgstr ""
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:74
-msgid "External files"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:89
-msgid "Add external file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:103
-msgid "Add new external file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:138
-msgid "Update file properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:171
-msgid "Images"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:186
-msgid "Add image"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:200
-msgid "Add new image"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:231
-msgid "Update image properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:264
-msgid "Videos"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:279
-msgid "Add video"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:293
-msgid "Add new video"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:317
-msgid "Update video properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:343
-msgid "Audios files"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:358
-msgid "Add audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:372
-msgid "Add new audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:396
-msgid "Update audio file properties"
-msgstr ""
-
-#: ./src/pyams_content/component/extfile/zmi/__init__.py:50
-msgid "External file type"
+#: ./src/pyams_content/component/keynumber/__init__.py:189
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:199
+#: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:74
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:29
+msgid "Key numbers"
+msgstr ""
+
+#. Default: Header
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:147
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:44
+msgid "key-number-label"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:159
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:49
+msgid "Number"
+msgstr ""
+
+#. Default: Unit
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:168
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:53
+msgid "key-number-unit"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:180
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:57
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:268
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:58
+msgid "Associated text"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:218
+msgid "Add keynumber"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:230
+msgid "Add new keynumber"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:259
+msgid "Edit keynumber properties"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/zmi/__init__.py:245
+msgid "Key number was correctly added"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/__init__.py:71
+msgid "Key Numbers"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:97
+#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:26
+msgid "Associated links"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:31
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:11
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:8
+msgid "Link target is not published!"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
+msgid "Portlet title"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
+msgid "Teaser"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
+msgid "Short text displayed above key numbers"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:39
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:40
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:44
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:41
+#: ./src/pyams_content/component/association/interfaces/__init__.py:42
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:87
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:118
+#: ./src/pyams_content/features/alert/interfaces.py:54
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:59
+msgid "Visible?"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:40
+msgid "Is this key number visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:45
+msgid ""
+"Small text to be displayed above number (according to selected renderer)"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:50
+msgid "Key number value"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:54
+msgid "Displayed unit"
+msgstr ""
+
+#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:58
+msgid "The way this text will be rendered depends on presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/__init__.py:177
+#: ./src/pyams_content/component/illustration/thesaurus.py:32
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:158
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:56
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:100
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:99
+msgid "Illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:60
+msgid "Illustration..."
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:73
+msgid "Add new illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/paragraph.py:98
+#: ./src/pyams_content/component/illustration/zmi/thesaurus.py:42
+msgid "Edit illustration properties"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:150
+msgid "Navigation link illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/zmi/__init__.py:102
+msgid "Header illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:57
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:49
+msgid "Alternate title used to describe image content"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:69
+msgid "Name of picture's author"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:72
+msgid "Illustration template"
+msgstr ""
+
+#: ./src/pyams_content/component/illustration/interfaces/__init__.py:73
+msgid "Presentation template used for illustration"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/milestone.py:140
+msgid "Selected paragraph is missing"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/milestone.py:143
+msgid "Selected paragraph is not visible"
msgstr ""
#: ./src/pyams_content/component/paragraph/container.py:73
@@ -1211,23 +635,423 @@
msgid "Selected pictogram is missing"
msgstr ""
-#: ./src/pyams_content/component/paragraph/milestone.py:140
-msgid "Selected paragraph is missing"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/milestone.py:143
-msgid "Selected paragraph is not visible"
-msgstr ""
-
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:78
+msgid "Milestones..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:91
+msgid "Add new milestone paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:118
+msgid "Edit milestone paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:244
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:49
+msgid "Associated label"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:256
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:53
+msgid "Anchor"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:285
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:76
+msgid "Milestones"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:300
+msgid "Add milestone"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:313
+msgid "Add new milestone"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:340
+msgid "Edit milestone properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:328
+msgid "Milestone was correctly added"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/milestone.py:271
+msgid "(missing paragraph)"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:52
+msgid "Key points..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:65
+msgid "Add new key points paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:92
+msgid "Edit key points paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:65
+msgid "Content block types..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:79
+msgid "Content block types"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:89
+msgid ""
+"You can define which types of paragraphs are allowed in this container.\n"
+"\n"
+"Default paragraphs will be added automatically (in selected order) to any new created content.\n"
+"\n"
+"NOTICE: removing types from allowed types list will have no effect on already created contents!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:207
+#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:39
+#: ./src/pyams_content/features/preview/zmi/__init__.py:45
+msgid "Preview"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:212
+#: ./src/pyams_content/shared/common/zmi/workflow.py:123
+#: ./src/pyams_content/shared/common/zmi/workflow.py:210
+#: ./src/pyams_content/shared/common/zmi/workflow.py:250
+#: ./src/pyams_content/shared/common/zmi/workflow.py:304
+#: ./src/pyams_content/shared/common/zmi/workflow.py:393
+#: ./src/pyams_content/shared/common/zmi/workflow.py:449
+#: ./src/pyams_content/shared/common/zmi/workflow.py:489
+#: ./src/pyams_content/shared/common/zmi/workflow.py:530
+#: ./src/pyams_content/shared/common/zmi/workflow.py:573
+#: ./src/pyams_content/shared/common/zmi/workflow.py:613
+#: ./src/pyams_content/shared/common/zmi/workflow.py:654
+#: ./src/pyams_content/shared/common/zmi/workflow.py:705
+#: ./src/pyams_content/shared/common/zmi/__init__.py:273
+#: ./src/pyams_content/shared/common/zmi/owner.py:73
+#: ./src/pyams_content/features/review/zmi/__init__.py:90
+msgid "Cancel"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:214
+msgid "Submit"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/__init__.py:195
+msgid "Paragraph was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/video.py:54
+msgid "Video paragraph..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/video.py:67
+msgid "Add new video paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/video.py:90
+#: ./src/pyams_content/component/video/zmi/paragraph.py:189
+msgid "Edit video properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:74
+msgid "Contents..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:196
+msgid "Set navigation anchor"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:268
+msgid "Show/hide all paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:316
+#: ./src/pyams_content/component/paragraph/zmi/container.py:325
+#: ./src/pyams_content/component/paragraph/zmi/container.py:338
+msgid "Content blocks"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:395
+msgid "Links and attachments..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:407
+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:277
+msgid "Click to open/close all paragraphs editors"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/container.py:290
+msgid "Click to open/close paragraph editor"
+msgstr ""
+
+#: ./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:83
+msgid "Pictograms..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:96
+msgid "Add new pictogram paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:123
+msgid "Edit pictogram paragraph properties"
+msgstr ""
+
+#. Default: Header
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:253
+msgid "pictogram-item-header"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:290
#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:80
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:289
msgid "Pictograms"
msgstr ""
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:305
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:59
+msgid "Add pictogram"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:318
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:71
+msgid "Add new pictogram"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:360
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:95
+msgid "Edit pictogram properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:340
+msgid "Pictogram was correctly added"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:350
+#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:388
+msgid "You must select a pictogram!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:54
+msgid "Audio paragraph..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:67
+msgid "Add new audio paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/audio.py:89
+msgid "Edit audio properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:55
+msgid "Key numbers..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:68
+msgid "Add new key number paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:96
+msgid "Edit key number paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:85
+msgid "Framed text..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:99
+msgid "Add new framed text paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/frame.py:125
+msgid "Edit framed text paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:57
+msgid "Verbatim..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:70
+msgid "Add new verbatim paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:92
+msgid "Edit verbatim paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:76
+msgid "Raw HTML..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:89
+msgid "Add new raw HTML paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:119
+msgid "Edit raw HTML paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:159
+msgid "Rich text..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:172
+msgid "Add new rich text paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/html.py:197
+msgid "Edit rich text paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:53
+msgid "Contact card..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:66
+msgid "Add new contact card"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/contact.py:89
+msgid "Edit contact card properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/header.py:50
+msgid "Header..."
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/header.py:63
+msgid "Add new header paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/zmi/header.py:90
+msgid "Edit header paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:41
+msgid "Is this milestone visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:46
+msgid "Milestone title"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:50
+msgid "The way this label will be rendered depends on presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:54
+msgid "Paragraph to which this milestone should lead"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:83
+msgid "Milestones template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:84
+msgid "Presentation template used for milestones"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:33
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:40
+msgid "Key points"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:41
+msgid "Enter one key point by line, without hyphen or prefix"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:44
+msgid "Presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:45
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:44
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:53
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:46
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:67
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:101
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:82
+msgid "Presentation template used for this paragraph"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:45
+msgid "Is this paragraph visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:49
+msgid "Anchor?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:50
+msgid "Is this paragraph a navigation anchor?"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:54
+msgid "§ Title"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:88
+msgid "Allowed paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:89
+msgid "List of paragraphs allowed for this content type"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:93
+#: ./src/pyams_content/shared/common/zmi/types.py:173
+#: ./src/pyams_content/shared/common/zmi/types.py:413
+msgid "Default paragraphs"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:94
+msgid "List of paragraphs automatically added to a new content"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:42
+msgid "Video file content"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:56
+#: ./src/pyams_content/component/video/interfaces/__init__.py:78
+msgid "Video template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/video.py:57
+#: ./src/pyams_content/component/video/interfaces/__init__.py:79
+msgid "Presentation template used for this video"
+msgstr ""
+
#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:42
msgid "Is this pictogram visible in front-office?"
msgstr ""
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:46
+#: ./src/pyams_content/component/links/interfaces/__init__.py:43
+#: ./src/pyams_content/shared/common/interfaces/types.py:75
+#: ./src/pyams_content/features/alert/interfaces.py:79
+msgid "Pictogram"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:47
+#: ./src/pyams_content/features/alert/interfaces.py:80
+msgid "Name of the pictogram to select"
+msgstr ""
+
#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:53
msgid "Alternate header"
msgstr ""
@@ -1238,13 +1062,6 @@
"used"
msgstr ""
-#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:58
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:267
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:57
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:179
-msgid "Associated text"
-msgstr ""
-
#: ./src/pyams_content/component/paragraph/interfaces/pictogram.py:59
msgid "Additional text associated to this pictogram"
msgstr ""
@@ -1257,9 +1074,95 @@
msgid "Presentation template used for pictograms"
msgstr ""
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:33
-#: ./src/pyams_content/component/paragraph/interfaces/header.py:40
-msgid "Header"
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:34
+msgid "Audio"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:56
+msgid "Audio template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/audio.py:57
+msgid "Presentation template used for this audio file"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:36
+msgid "Key numbers template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:37
+msgid "Presentation template used for key numbers"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:33
+msgid "Framed text"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:40
+msgid "Frame body"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/frame.py:43
+msgid "Text template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:33
+msgid "Verbatim"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:40
+msgid "Quoted text"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:41
+msgid "Quotation marks will be added automatically by presentation template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:45
+msgid "Name of the quote author"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:48
+#: ./src/pyams_content/component/paragraph/interfaces/contact.py:54
+msgid "In charge of"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:49
+msgid "Label of author function"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:52
+msgid "Verbatim template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:33
+msgid "Raw HTML "
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:56
+msgid "Rich text"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:40
+msgid "Raw HTML code"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:41
+msgid ""
+"This HTML code will be used 'as is', without any transformation. Use with "
+"care!!"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:45
+msgid "Raw HTML code template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
+msgid "Body"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/html.py:66
+msgid "Body template"
msgstr ""
#: ./src/pyams_content/component/paragraph/interfaces/contact.py:43
@@ -1274,11 +1177,6 @@
msgid "Name of the contact"
msgstr ""
-#: ./src/pyams_content/component/paragraph/interfaces/contact.py:54
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:48
-msgid "In charge of"
-msgstr ""
-
#: ./src/pyams_content/component/paragraph/interfaces/contact.py:55
msgid "Label of contact function"
msgstr ""
@@ -1327,465 +1225,230 @@
msgid "GPS coordinates used to locate contact"
msgstr ""
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:33
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:40
-msgid "Key points"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:41
-msgid "Enter one key point by line, without hyphen or prefix"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:44
-msgid "Presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keypoint.py:45
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:46
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:67
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:53
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:44
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:100
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:76
-msgid "Presentation template used for this paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:42
-msgid "Video file content"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:56
-#: ./src/pyams_content/component/video/interfaces/__init__.py:78
-msgid "Video template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/video.py:57
-#: ./src/pyams_content/component/video/interfaces/__init__.py:79
-msgid "Presentation template used for this video"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:76
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:284
-msgid "Milestones"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:41
-msgid "Is this milestone visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:46
-msgid "Milestone title"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:49
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:243
-msgid "Associated label"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:50
-msgid "The way this label will be rendered depends on presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:53
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:255
-msgid "Anchor"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:54
-msgid "Paragraph to which this milestone should lead"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:83
-msgid "Milestones template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/milestone.py:84
-msgid "Presentation template used for milestones"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:29
-#: ./src/pyams_content/component/keynumber/__init__.py:180
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:198
-#: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:79
-msgid "Key numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:36
-msgid "Key numbers template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/keynumber.py:37
-msgid "Presentation template used for key numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:45
-msgid "Is this paragraph visible in front-office?"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:49
-msgid "§ Title"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:80
-msgid "Allowed paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:81
-msgid "List of paragraphs allowed for this content type"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:85
-#: ./src/pyams_content/shared/common/zmi/types.py:169
-#: ./src/pyams_content/shared/common/zmi/types.py:380
-msgid "Default paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/__init__.py:86
-msgid "List of paragraphs automatically added to a new content"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:33
-msgid "Raw HTML "
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:56
-msgid "Rich text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:40
-msgid "Raw HTML code"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:41
-msgid ""
-"This HTML code will be used 'as is', without any transformation. Use with "
-"care!!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:45
-msgid "Raw HTML code template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:63
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:41
-msgid "Body"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/html.py:66
-msgid "Body template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:33
-msgid "Verbatim"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:40
-msgid "Quoted text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:41
-msgid "Quotation marks will be added automatically by presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:45
-msgid "Name of the quote author"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:49
-msgid "Label of author function"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/verbatim.py:52
-msgid "Verbatim template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:33
-msgid "Framed text"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:40
-msgid "Frame body"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/frame.py:43
-msgid "Text template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:34
-msgid "Audio"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:56
-msgid "Audio template"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/interfaces/audio.py:57
-msgid "Presentation template used for this audio file"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:74
-msgid "Contents..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:239
-msgid "Show/hide all paragraphs"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:287
-#: ./src/pyams_content/component/paragraph/zmi/container.py:296
-#: ./src/pyams_content/component/paragraph/zmi/container.py:309
-msgid "Content blocks"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:366
-msgid "Links and attachments..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:378
-msgid "Content blocks links and attachments"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:126
-msgid "No currently defined paragraph."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:248
-msgid "Click to open/close all paragraphs editors"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:261
-msgid "Click to open/close paragraph editor"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/container.py:132
-msgid "Check allowed paragraph types to be able to create new paragraphs."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:82
-msgid "Pictograms..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:95
-msgid "Add new pictogram paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:122
-msgid "Edit pictogram paragraph properties"
-msgstr ""
-
-#. Default: Header
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:252
-msgid "pictogram-item-header"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:339
-msgid "Pictogram was correctly added"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:349
-#: ./src/pyams_content/component/paragraph/zmi/pictogram.py:387
-msgid "You must select a pictogram!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/header.py:50
-msgid "Header..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/header.py:63
-msgid "Add new header paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/header.py:90
-msgid "Edit header paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:53
-msgid "Contact card..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:66
-msgid "Add new contact card"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/contact.py:94
-msgid "Edit contact card properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:51
-msgid "Key points..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:64
-msgid "Add new key points paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keypoint.py:91
-msgid "Edit key points paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/video.py:53
-msgid "Video paragraph..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/video.py:66
-msgid "Add new video paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/video.py:94
-#: ./src/pyams_content/component/video/zmi/paragraph.py:192
-msgid "Edit video properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:77
-msgid "Milestones..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:90
-msgid "Add new milestone paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:117
-msgid "Edit milestone paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:299
-msgid "Add milestone"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:312
-msgid "Add new milestone"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:339
-msgid "Edit milestone properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:327
-msgid "Milestone was correctly added"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/milestone.py:270
-msgid "(missing paragraph)"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:55
-msgid "Key numbers..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:68
-msgid "Add new key number paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/keynumber.py:96
-msgid "Edit key number paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:65
-msgid "Content block types..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:79
-msgid "Content block types"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:89
-msgid ""
-"You can define which types of paragraphs are allowed in this container.\n"
-"\n"
-"Default paragraphs will be added automatically (in selected order) to any new created content.\n"
-"\n"
-"NOTICE: removing types from allowed types list will have no effect on already created contents!"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:214
-msgid "Submit"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/__init__.py:195
-msgid "Paragraph was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:76
-msgid "Raw HTML..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:89
-msgid "Add new raw HTML paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:119
-msgid "Edit raw HTML paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:159
-msgid "Rich text..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:172
-msgid "Add new rich text paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/html.py:202
-msgid "Edit rich text paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:56
-msgid "Verbatim..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:69
-msgid "Add new verbatim paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/verbatim.py:96
-msgid "Edit verbatim paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:84
-msgid "Framed text..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:98
-msgid "Add new framed text paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/frame.py:129
-msgid "Edit framed text paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:54
-msgid "Audio paragraph..."
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:67
-msgid "Add new audio paragraph"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:108
-msgid "Edit audio properties"
-msgstr ""
-
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:84
-#: ./src/pyams_content/component/paragraph/zmi/audio.py:128
-msgid "HTML content"
-msgstr ""
-
-#: ./src/pyams_content/component/links/__init__.py:125
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:33
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:40
+msgid "Header"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:43
+#: ./src/pyams_content/features/header/interfaces/__init__.py:39
+msgid "Header template"
+msgstr ""
+
+#: ./src/pyams_content/component/paragraph/interfaces/header.py:44
+#: ./src/pyams_content/features/header/interfaces/__init__.py:40
+msgid "Presentation template used for this header"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:71
+#: ./src/pyams_content/component/theme/zmi/portlet.py:40
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:47
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:61
+msgid "Tags"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:119
+#: ./src/pyams_content/component/theme/zmi/portlet.py:55
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:88
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:102
+msgid "Themes"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:167
+#: ./src/pyams_content/component/theme/zmi/portlet.py:70
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:129
+#: ./src/pyams_content/component/theme/interfaces/__init__.py:143
+msgid "Collections"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:80
+msgid "no defined tag"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:128
+msgid "no defined theme"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/__init__.py:176
+msgid "no defined collection"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:55
+#: ./src/pyams_content/shared/view/zmi/theme.py:56
+msgid "Tags..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:66
+msgid "Content tags"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:99
+#: ./src/pyams_content/shared/view/zmi/theme.py:102
+msgid "Themes..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:107
+msgid "Content themes"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:159
+#: ./src/pyams_content/shared/view/zmi/theme.py:148
+msgid "Collections..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/__init__.py:172
+msgid "Content collections"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:51
+msgid "Tags settings..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:65
+msgid "Selected tags"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:101
+msgid "Themes settings..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:115
+msgid "Selected themes"
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:151
+msgid "Collections settings..."
+msgstr ""
+
+#: ./src/pyams_content/component/theme/zmi/manager.py:165
+msgid "Selected collections"
+msgstr ""
+
+#: ./src/pyams_content/component/association/container.py:91
+#: ./src/pyams_content/component/association/zmi/__init__.py:296
+#: ./src/pyams_content/component/association/interfaces/__init__.py:93
+msgid "Associations"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/paragraph.py:54
+#: ./src/pyams_content/component/association/zmi/__init__.py:96
+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:93
+msgid "Edit association paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:198
+msgid "Public title"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:216
+msgid "Inner title"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:232
+msgid "Size"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:273
+#: ./src/pyams_content/component/association/zmi/__init__.py:283
+msgid "Associations list"
+msgstr ""
+
+#: ./src/pyams_content/component/association/zmi/__init__.py:66
+msgid "Association was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/component/association/interfaces/__init__.py:43
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:60
+msgid "Is this item visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/component/association/interfaces/__init__.py:100
+msgid "Associations template"
+msgstr ""
+
+#: ./src/pyams_content/component/association/interfaces/__init__.py:101
+msgid "Presentation template used for associations"
+msgstr ""
+
+#: ./src/pyams_content/component/links/__init__.py:123
msgid "Internal link"
msgstr ""
-#: ./src/pyams_content/component/links/__init__.py:207
+#: ./src/pyams_content/component/links/__init__.py:219
msgid "External link"
msgstr ""
-#: ./src/pyams_content/component/links/__init__.py:260
+#: ./src/pyams_content/component/links/__init__.py:272
msgid "Mailto link"
msgstr ""
-#: ./src/pyams_content/component/links/__init__.py:194
+#: ./src/pyams_content/component/links/__init__.py:206
msgid "target is not published"
msgstr ""
+#: ./src/pyams_content/component/links/zmi/__init__.py:60
+msgid "Internal links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:75
+msgid "Add internal link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:89
+msgid "Add new internal link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:120
+msgid "Edit internal link properties"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:149
+msgid "External links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:164
+msgid "Add external link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:178
+msgid "Add new external link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:209
+msgid "Edit external link properties"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:238
+msgid "Mailto links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:253
+msgid "Add mailto link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:267
+msgid "Add new mailto link"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/__init__.py:298
+msgid "Edit mailto link properties"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/reverse.py:57
+msgid "Reverse links"
+msgstr ""
+
+#: ./src/pyams_content/component/links/zmi/reverse.py:66
+msgid "Content's internal links"
+msgstr ""
+
#: ./src/pyams_content/component/links/interfaces/__init__.py:36
msgid "Link title, as shown in front-office"
msgstr ""
@@ -1798,103 +1461,55 @@
msgid "Name of the pictogram associated with this link"
msgstr ""
-#: ./src/pyams_content/component/links/interfaces/__init__.py:64
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:50
+#: ./src/pyams_content/component/links/interfaces/__init__.py:61
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:56
msgid "Target URL"
msgstr ""
-#: ./src/pyams_content/component/links/interfaces/__init__.py:65
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:51
+#: ./src/pyams_content/component/links/interfaces/__init__.py:62
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:57
msgid "URL used to access external resource"
msgstr ""
-#: ./src/pyams_content/component/links/interfaces/__init__.py:69
+#: ./src/pyams_content/component/links/interfaces/__init__.py:66
msgid "Language used in this remote resource"
msgstr ""
-#: ./src/pyams_content/component/links/interfaces/__init__.py:77
+#: ./src/pyams_content/component/links/interfaces/__init__.py:74
msgid "Target address"
msgstr ""
+#: ./src/pyams_content/component/links/interfaces/__init__.py:75
+msgid "Target email address"
+msgstr ""
+
#: ./src/pyams_content/component/links/interfaces/__init__.py:78
-msgid "Target email address"
-msgstr ""
-
-#: ./src/pyams_content/component/links/interfaces/__init__.py:81
msgid "Address name"
msgstr ""
-#: ./src/pyams_content/component/links/interfaces/__init__.py:82
+#: ./src/pyams_content/component/links/interfaces/__init__.py:79
msgid "Address as displayed in address book"
msgstr ""
-#: ./src/pyams_content/component/links/zmi/__init__.py:60
-msgid "Internal links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:75
-msgid "Add internal link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:89
-msgid "Add new internal link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:125
-msgid "Edit internal link properties"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:159
-msgid "External links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:174
-msgid "Add external link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:188
-msgid "Add new external link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:224
-msgid "Edit external link properties"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:258
-msgid "Mailto links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:273
-msgid "Add mailto link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:287
-msgid "Add new mailto link"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/__init__.py:323
-msgid "Edit mailto link properties"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/reverse.py:57
-msgid "Reverse links"
-msgstr ""
-
-#: ./src/pyams_content/component/links/zmi/reverse.py:66
-msgid "Content's internal links"
-msgstr ""
-
#: ./src/pyams_content/component/video/__init__.py:73
#: ./src/pyams_content/component/video/interfaces/__init__.py:68
msgid "External video"
msgstr ""
-#: ./src/pyams_content/component/video/interfaces/__init__.py:56
-msgid "Video provider"
-msgstr ""
-
-#: ./src/pyams_content/component/video/interfaces/__init__.py:57
-msgid "Name of external platform providing selected video"
+#: ./src/pyams_content/component/video/provider/dailymotion.py:94
+msgid "Dailymotion settings"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/__init__.py:70
+msgid "Other provider"
+msgstr ""
+
+#: ./src/pyams_content/component/video/provider/__init__.py:94
+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
@@ -2113,26 +1728,10 @@
msgid "Color used for title and signature"
msgstr ""
-#: ./src/pyams_content/component/video/provider/__init__.py:70
-msgid "Other provider"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/__init__.py:94
-msgid "Custom video settings"
-msgstr ""
-
#: ./src/pyams_content/component/video/provider/youtube.py:96
msgid "Youtube settings"
msgstr ""
-#: ./src/pyams_content/component/video/provider/vimeo.py:92
-msgid "Vimeo settings"
-msgstr ""
-
-#: ./src/pyams_content/component/video/provider/dailymotion.py:94
-msgid "Dailymotion settings"
-msgstr ""
-
#: ./src/pyams_content/component/video/zmi/paragraph.py:62
msgid "External video..."
msgstr ""
@@ -2141,546 +1740,1366 @@
msgid "Add new external video..."
msgstr ""
-#: ./src/pyams_content/component/video/zmi/paragraph.py:126
+#: ./src/pyams_content/component/video/zmi/paragraph.py:124
msgid "Video provider is required"
msgstr ""
-#: ./src/pyams_content/component/video/zmi/paragraph.py:175
-#: ./src/pyams_content/component/video/zmi/paragraph.py:229
+#: ./src/pyams_content/component/video/zmi/paragraph.py:172
+#: ./src/pyams_content/component/video/zmi/paragraph.py:223
msgid "Video provider settings"
msgstr ""
-#: ./src/pyams_content/component/video/zmi/paragraph.py:155
+#: ./src/pyams_content/component/video/zmi/paragraph.py:152
msgid "Other settings"
msgstr ""
-#: ./src/pyams_content/component/illustration/__init__.py:177
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:99
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:168
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:56
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:100
-msgid "Illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:69
-msgid "Name of picture's author"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:72
-msgid "Illustration template"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/interfaces/__init__.py:73
-msgid "Presentation template used for illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:60
-msgid "Illustration..."
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:73
-msgid "Add new illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/paragraph.py:103
-msgid "Edit illustration properties"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:155
-msgid "Navigation link illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/illustration/zmi/__init__.py:102
-msgid "Header illustration"
-msgstr ""
-
-#: ./src/pyams_content/component/association/container.py:88
-#: ./src/pyams_content/component/association/interfaces/__init__.py:90
-#: ./src/pyams_content/component/association/zmi/__init__.py:296
-msgid "Associations"
-msgstr ""
-
-#: ./src/pyams_content/component/association/interfaces/__init__.py:97
-msgid "Associations template"
-msgstr ""
-
-#: ./src/pyams_content/component/association/interfaces/__init__.py:98
-msgid "Presentation template used for associations"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/paragraph.py:54
-#: ./src/pyams_content/component/association/zmi/__init__.py:96
-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:93
-msgid "Edit association paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:198
-msgid "Public title"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:216
-msgid "Inner title"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:232
-msgid "Size"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:273
-#: ./src/pyams_content/component/association/zmi/__init__.py:283
-msgid "Associations list"
-msgstr ""
-
-#: ./src/pyams_content/component/association/zmi/__init__.py:66
-msgid "Association was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:40
-msgid "Is this key number visible in front-office?"
-msgstr ""
-
-#. Default: Header
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:44
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:146
-msgid "key-number-label"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:45
+#: ./src/pyams_content/component/video/interfaces/__init__.py:56
+msgid "Video provider"
+msgstr ""
+
+#: ./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:240
+#: ./src/pyams_content/shared/common/zmi/properties.py:70
+#: ./src/pyams_content/shared/common/zmi/manager.py:96
+msgid "Properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/__init__.py:150
+#: ./src/pyams_content/shared/common/__init__.py:158
+#, python-format
+msgid "{date} by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/__init__.py:263
+#, python-format
+msgid "title length should be between 40 and 66 characters ({length} actually)"
+msgstr ""
+
+#: ./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: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:282
+#: ./src/pyams_content/root/zmi/search.py:260
+msgid "Advanced search results"
+msgstr ""
+
+#: ./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:159
+msgid "Owner"
+msgstr ""
+
+#: ./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:172
+#: ./src/pyams_content/root/zmi/search.py:162
+msgid "Created after..."
+msgstr ""
+
+#: ./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:178
+#: ./src/pyams_content/root/zmi/search.py:168
+msgid "Modified after..."
+msgstr ""
+
+#: ./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:60
+msgid "Composition"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/properties.py:83
+msgid "Content properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:71
+msgid "Data types"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:149
+msgid "Data type label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:189
+#: ./src/pyams_content/shared/common/zmi/types.py:429
+msgid "Default associations"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:205
+msgid "Default themes"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:233
+msgid "Content data types"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:256
+msgid "Add data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:268
+msgid "Add new data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:311
+msgid "Data type properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:392
+msgid "Subtype label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:473
+msgid "Add subtype"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:485
+msgid "Add new subtype"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:532
+msgid "Data subtype properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:116
+msgid "No currently defined data type."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:301
+msgid "Specified type name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:508
+msgid "Subtype was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:522
+msgid "Specified subtype name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/types.py:161
+msgid "Click to see subtypes"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:845
+msgid "Prior checks"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:124
+msgid "Request publication"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:211
+#: ./src/pyams_content/workflow/__init__.py:315
+msgid "Cancel publication request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:251
+msgid "Refuse publication request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:305
+#: ./src/pyams_content/workflow/basic.py:196
+msgid "Publish"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:394
+msgid "Request retire"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:450
+msgid "Cancel retire request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:490
+msgid "Retire"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:531
+#: ./src/pyams_content/workflow/__init__.py:436
+msgid "Request archive"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:574
+msgid "Cancel archive request"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:614
+msgid "Archive"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:655
+#: ./src/pyams_content/workflow/__init__.py:501
+#: ./src/pyams_content/workflow/__init__.py:513
+#: ./src/pyams_content/workflow/__init__.py:525
+#: ./src/pyams_content/workflow/__init__.py:537
+#: ./src/pyams_content/workflow/__init__.py:549
+#: ./src/pyams_content/workflow/basic.py:224
+#: ./src/pyams_content/workflow/basic.py:236
+msgid "Create new version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:706
+#: ./src/pyams_content/workflow/__init__.py:561
+#: ./src/pyams_content/workflow/basic.py:248
+msgid "Delete version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:791
+msgid "Previewed content?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:795
+msgid "Verified content?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:181
+#: ./src/pyams_content/shared/common/zmi/workflow.py:363
+msgid "Publication start date is required"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:274
+#: ./src/pyams_content/shared/common/zmi/workflow.py:420
+msgid "A comment is required"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:730
+msgid "Delete content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:739
+msgid "Delete definitively"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:868
+msgid ""
+"You must confirm that you previewed and checked this content before "
+"requesting publication!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:88
+#, python-format
+msgid "{state} | by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:871
msgid ""
-"Small text to be displayed above number (according to selected renderer)"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:49
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:158
-msgid "Number"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:50
-msgid "Key number value"
-msgstr ""
-
-#. Default: Unit
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:53
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:167
-msgid "key-number-unit"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:54
-msgid "Displayed unit"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/interfaces/__init__.py:58
-msgid "The way this text will be rendered depends on presentation template"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:217
-msgid "Add keynumber"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:230
-msgid "Add new keynumber"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:259
-msgid "Edit keynumber properties"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/zmi/__init__.py:245
-msgid "Key number was correctly added"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/__init__.py:71
-msgid "Key Numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:32
-msgid "Portlet title"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:35
-msgid "Teaser"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/interfaces/__init__.py:36
-msgid "Short text displayed above key numbers"
-msgstr ""
-
-#: ./src/pyams_content/component/keynumber/portlet/zmi/__init__.py:102
-#: ./src/pyams_content/component/keynumber/portlet/zmi/templates/keynumber-preview.pt:22
-msgid "Associated links"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/interfaces/__init__.py:33
-msgid "Blog post"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:52
-msgid "This blog post"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:71
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:81
-msgid "Add blog post"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/__init__.py:62
+"You must confirm that you checked this content before requesting "
+"publication!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/workflow.py:84
+#: ./src/pyams_content/workflow/__init__.py:648
+#: ./src/pyams_content/workflow/__init__.py:619
+#: ./src/pyams_content/workflow/basic.py:315
+#: ./src/pyams_content/workflow/basic.py:286
+#, python-format
+msgid "{state} {date}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:263
+msgid "Duplicate content..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:283
+msgid "Duplicate content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:84
+msgid "This title can be modified afterwards"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:274
+msgid "Duplicate this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:330
+#, python-format
+msgid "Clone created from version {source} of {oid} (in « {state} » state)"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/__init__.py:375
+msgid "Created or modified in this version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:50
+msgid "Display content summary"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:74
+msgid "Identity card"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:86
+msgid "Requested action"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:127
+msgid "Publication and retire dates"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:146
+msgid "Current version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:176
+msgid "Content history"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:117
+msgid "Associated comment"
+msgstr ""
+
+#: ./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:107
+#, python-format
+msgid "{state} {date} by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/summary.py:164
+#, python-format
+msgid "{state} since {date}, by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:107
+msgid "Shared tool properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:125
+msgid "WARNING"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:127
+msgid ""
+"Workflow shouldn't be modified if this tool already contains any shared "
+"content!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:150
+msgid "Languages"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:162
+msgid "Content languages"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:172
+msgid ""
+"Tool languages are used to translate own tool properties, and newly created "
+"contents will propose these languages by default"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:80
+msgid "Content management"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/manager.py:82
+msgid "Tool management"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:50
+msgid "Change owner..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:83
+msgid "Change content's owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:125
+msgid ""
+"All versions of this content which are not archived will be transferred to "
+"newly selected owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:60
+msgid "New owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:61
+msgid "The selected user will become the new content's owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:63
+msgid "Keep previous owner as contributor"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:64
+msgid "If 'yes', the previous owner will still be able to modify this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/owner.py:74
+msgid "Change owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:62
+msgid "Change URL..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:79
+msgid "Change item URL"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:86
+msgid "Item URL part"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:87
+msgid "URL part used to access this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/rename.py:121
+msgid "You must provide an URL for this item!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/site.py:38
#, python-format
-msgid "Blog post « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:60
-msgid "Blog management"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:83
-#: ./src/pyams_content/shared/blog/zmi/manager.py:97
-msgid "Add blog manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:96
-msgid "Blog manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:155
-#: ./src/pyams_content/shared/blog/zmi/manager.py:167
-#: ./src/pyams_content/shared/site/zmi/container.py:107
-#: ./src/pyams_content/shared/site/zmi/container.py:119
-msgid "Publication dates..."
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:181
-#: ./src/pyams_content/shared/site/zmi/container.py:133
-msgid "Update publication dates"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:127
-#: ./src/pyams_content/shared/site/zmi/manager.py:156
-msgid "You must provide a short name for default server language!"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:131
-msgid "Specified blog manager name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/blog/zmi/manager.py:135
-msgid "A blog manager is already registered with this name!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/paragraph.py:91
-msgid "no selected image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/paragraph.py:97
+msgid ""
+"SEARCH - Between all contents published into « {site} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/portal.py:46
+msgid "Edit default template properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/portal.py:56
+msgid ""
+"**This form allows you to select shared content default template.**\n"
+"\n"
+"If you choose to use a shared template, you can only adjust settings of each portlet individually but can't change portlets list or page configuration.\n"
+"\n"
+"If you use a local template, you can define a whole custom configuration but the template definition can't be reused anywhere..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/portal.py:72
+msgid "Override tool default template"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:134
+msgid "Unique ID"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:181
+msgid "Status date"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:213
+msgid "Status principal"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:250
+msgid "Last modification"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:273
+#: ./src/pyams_content/root/zmi/__init__.py:110
+msgid "Dashboard"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:283
+msgid "Contents dashboard"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:329
+#: ./src/pyams_content/root/zmi/__init__.py:159
+#, python-format
+msgid "MANAGER - {0} content waiting for your action"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:330
+#: ./src/pyams_content/root/zmi/__init__.py:160
+#, python-format
+msgid "MANAGER - {0} contents waiting for your action"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:371
+#: ./src/pyams_content/root/zmi/__init__.py:204
+#, python-format
+msgid "CONTRIBUTOR - {0} content waiting for action"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:372
+#: ./src/pyams_content/root/zmi/__init__.py:205
+#, python-format
+msgid "CONTRIBUTOR - {0} contents waiting for action"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:404
+#: ./src/pyams_content/root/zmi/__init__.py:240
+#, python-format
+msgid "CONTRIBUTOR - {0} modified content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:445
+#: ./src/pyams_content/root/zmi/__init__.py:283
+msgid "My contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:460
+#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
+#: ./src/pyams_content/root/zmi/__init__.py:298
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:8
+msgid "My favorites"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:469
+#: ./src/pyams_content/root/zmi/__init__.py:307
+#, python-format
+msgid "CONTRIBUTOR - {0} favorite"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:470
+#: ./src/pyams_content/root/zmi/__init__.py:308
#, python-format
-msgid "image map '{0}' can't be found"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/paragraph.py:105
+msgid "CONTRIBUTOR - {0} favorites"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:482
+#: ./src/pyams_content/shared/common/zmi/templates/header.pt:23
+msgid "Add/remove from favorites"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:545
+#: ./src/pyams_content/root/zmi/__init__.py:346
+msgid "Your favorites"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:558
+#: ./src/pyams_content/root/zmi/__init__.py:359
+msgid "My preparations"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:567
+#: ./src/pyams_content/root/zmi/__init__.py:368
+#, python-format
+msgid "CONTRIBUTOR - {0} prepared content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:568
+#: ./src/pyams_content/root/zmi/__init__.py:369
+#, python-format
+msgid "CONTRIBUTOR - {0} prepared contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:608
+#: ./src/pyams_content/root/zmi/__init__.py:408
+msgid "Your prepared contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:621
+#: ./src/pyams_content/root/zmi/__init__.py:421
+msgid "My submissions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:630
+#: ./src/pyams_content/root/zmi/__init__.py:430
+#, python-format
+msgid "CONTRIBUTOR - {0} submitted content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:631
+#: ./src/pyams_content/root/zmi/__init__.py:431
+#, python-format
+msgid "CONTRIBUTOR - {0} submitted contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:671
+#: ./src/pyams_content/root/zmi/__init__.py:470
+msgid "Your submitted contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:684
+#: ./src/pyams_content/root/zmi/__init__.py:483
+msgid "My publications"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:693
+#: ./src/pyams_content/root/zmi/__init__.py:492
+#, python-format
+msgid "CONTRIBUTOR - {0} published content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:694
+#: ./src/pyams_content/root/zmi/__init__.py:493
+#, python-format
+msgid "CONTRIBUTOR - {0} published contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:734
+#: ./src/pyams_content/root/zmi/__init__.py:532
+msgid "Your published contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:747
+#: ./src/pyams_content/root/zmi/__init__.py:545
+msgid "My retired contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:756
+#: ./src/pyams_content/root/zmi/__init__.py:554
+#, python-format
+msgid "CONTRIBUTOR - {0} retired content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:757
+#: ./src/pyams_content/root/zmi/__init__.py:555
+#, python-format
+msgid "CONTRIBUTOR - {0} retired contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:798
+#: ./src/pyams_content/root/zmi/__init__.py:595
+msgid "Your retired contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:811
+#: ./src/pyams_content/root/zmi/__init__.py:608
+msgid "My archived contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:820
+#: ./src/pyams_content/root/zmi/__init__.py:617
+#, python-format
+msgid "CONTRIBUTOR - {0} archived content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:821
+#: ./src/pyams_content/root/zmi/__init__.py:618
+#, python-format
+msgid "CONTRIBUTOR - {0} archived contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:868
+#: ./src/pyams_content/root/zmi/__init__.py:664
+msgid "Your archived contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:882
+#: ./src/pyams_content/root/zmi/__init__.py:678
+msgid "Other interventions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:897
+#: ./src/pyams_content/root/zmi/__init__.py:693
+msgid "Last publications"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:906
+#: ./src/pyams_content/root/zmi/__init__.py:702
#, python-format
-msgid "image map '{0}' is not published"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/__init__.py:154
-msgid "no area defined"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:35
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:88
-msgid "Image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:49
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:140
-msgid "Link target"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:50
-msgid "Internal or external link associated with this map area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:55
-msgid "Alternate label associated with this area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:58
-msgid "Map area coordinates"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:59
-msgid "List of coordinates of image area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:67
-msgid "Image supporting map areas"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:70
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:65
-msgid "Image map areas"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:71
-msgid "List of defined map areas"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:96
-msgid "Reference to image map object"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:99
-msgid "Image map template"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:54
-msgid "Image areas"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:113
-msgid "No currently defined image."
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:115
-msgid "No currently defined area."
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/container.py:175
-#: ./src/pyams_content/root/zmi/sites.py:170
-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:186
-msgid "Bad query object_name parameter value!"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:54
-msgid "Image map..."
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:67
-msgid "Add new image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:94
-#: ./src/pyams_content/shared/logo/zmi/paragraph.py:93
-msgid "Edit paragraph properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:44
-msgid "This image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:63
-msgid "Add image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:73
-msgid "Adding image map"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:54
+msgid "CONTRIBUTORS - {0} published content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:953
+#: ./src/pyams_content/root/zmi/__init__.py:748
+msgid "Last published contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:966
+#: ./src/pyams_content/root/zmi/__init__.py:761
+msgid "Last updates"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:975
+#: ./src/pyams_content/root/zmi/__init__.py:770
+#, python-format
+msgid "CONTRIBUTORS - {0} updated content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:1020
+#: ./src/pyams_content/root/zmi/__init__.py:814
+msgid "Last updated contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:409
+#: ./src/pyams_content/root/zmi/__init__.py:245
+#, python-format
+msgid "CONTRIBUTOR - {0} modified contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:411
+#: ./src/pyams_content/root/zmi/__init__.py:247
+#, python-format
+msgid "CONTRIBUTOR - Last {0} modified contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:911
+#: ./src/pyams_content/root/zmi/__init__.py:707
+#, python-format
+msgid "CONTRIBUTORS - Last {0} published contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:913
+#: ./src/pyams_content/root/zmi/__init__.py:709
+msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:980
+#: ./src/pyams_content/root/zmi/__init__.py:775
+#, python-format
+msgid "CONTRIBUTORS - Last {0} updated contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:982
+#: ./src/pyams_content/root/zmi/__init__.py:777
+msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:306
+#, python-format
+msgid "SEARCH - Between all contents of type « {type} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:171
+#: ./src/pyams_content/shared/common/zmi/header.py:96
+msgid "Content publication start date is not passed yet"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:64
+msgid "Contributors restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:73
+msgid "Content contributors restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:107
+msgid "Contributor name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:118
+#: ./src/pyams_content/shared/common/zmi/security.py:270
+msgid "Activated publication checks?"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:218
+msgid "Managers restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:227
+msgid "Content managers restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:259
+msgid "Manager name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:287
+msgid "Restricted"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:304
+msgid "Owners"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:394
+msgid "Publication workflow"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:167
+#, python-format
+msgid "Edit contributor restrictions for « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:353
+#, python-format
+msgid "Edit manager restrictions for « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:400
+msgid "Apply contents restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/security.py:402
+msgid ""
+"You can specify which contents this manager will be able to manage. If you "
+"specify several criteria, the manager will be able to manage contents for "
+"which at least one criteria is matching."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:85
+#, python-format
+msgid "{state} by {principal}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:116
#, python-format
-msgid "Image map « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:47
-msgid "Add image area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:66
-msgid "Add new image area"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/area.py:107
-msgid "Edit image map properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/imagemap/zmi/properties.py:40
-msgid "Background image"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:32
-msgid "View"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:41
-msgid "Last update date"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:42
-msgid "Current publication date"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:43
-msgid "First publication date"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:148
-msgid "Always include selected internal references"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:149
-msgid "Include selected internal references only if empty"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:60
-msgid "Select context type?"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:61
-msgid "If 'yes', content type will be extracted from context"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:65
-msgid "Other content types"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:66
-msgid "Selected content types; leave empty for all"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:73
-msgid "Order by"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:74
-msgid "Property to use to sort results"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:79
-msgid "Reversed order?"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:80
-msgid "If 'yes', items order will be reversed"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:84
-msgid "Results count limit"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:85
-msgid "Maximum number of results that the view may retrieve"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:158
-msgid "Internal references usage"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:159
-msgid "Specify how selected references are included into view results"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:164
-msgid "Exclude context?"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:165
-msgid "If 'yes', context will be excluded from results list"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:176
-msgid "Select context themes?"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:177
-msgid "If 'yes', themes will be extracted from context"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/interfaces/__init__.py:181
-msgid "Other terms"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/theme.py:59
-msgid "View themes settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/__init__.py:44
-msgid "This view"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/__init__.py:63
-#: ./src/pyams_content/shared/view/zmi/__init__.py:73
-msgid "Add view"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/__init__.py:54
-#, python-format
-msgid "View « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/properties.py:40
-msgid "Main view settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/reference.py:52
-msgid "References..."
-msgstr ""
-
-#: ./src/pyams_content/shared/view/zmi/reference.py:63
-msgid "View internal references settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:31
-msgid "Selected view"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/interfaces.py:32
-msgid "Reference to the view from which items are extracted"
-msgstr ""
-
-#: ./src/pyams_content/shared/view/portlet/__init__.py:58
-msgid "View items"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:137
-msgid "Text"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:147
-msgid "Multi-lines text"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:157
-msgid "Boolean"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:167
-msgid "Integer"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:177
-msgid "Decimal"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:187
-msgid "E-mail address"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:197
-msgid "URI"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:207
-msgid "Date"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:221
-msgid "Choice"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:241
-msgid "List"
+msgid "since {date}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:128
+msgid "access published version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:135
+msgid "access new version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:145
+msgid "access waiting version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:156
+msgid "access retired version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/header.py:166
+msgid "access archived version"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
+msgid ""
+"You considerate that the currently published version should no more be "
+"publicly visible."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
+msgid ""
+"WARNING: the content will remain visible until a manager validate the "
+"request."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/header.pt:6
+msgid "Back to previous page"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/header.pt:20
+msgid "by ${owner}"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
+msgid "As a manager, you considerate that this content must be archived."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
+msgid ""
+"After archiving, it will be backed up but you will not be able to publish it "
+"again except by creating a new version."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:34
+#: ./src/pyams_content/shared/common/zmi/templates/preview-input.pt:34
+#: ./src/pyams_content/shared/common/interfaces/types.py:47
+#: ./src/pyams_content/shared/form/zmi/field.py:160
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:62
+#: ./src/pyams_content/features/menu/zmi/__init__.py:208
+msgid "Label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/check-input.pt:39
+#: ./src/pyams_content/features/checker/zmi/__init__.py:43
+msgid "Audit"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:29
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:29
+msgid "Quick search..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:35
+msgid "Advanced search..."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:49
+#: ./src/pyams_content/root/zmi/templates/dashboard.pt:49
+msgid "You are not actually concerned by any content."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
+msgid ""
+"As a manager, you considerate that this content is complete and can be "
+"published 'as is'."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
+msgid ""
+"This operation will make the content publicly available (except if restricted"
+" access has been set)."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
+msgid ""
+"This new content is going to be created in 'draft' mode, so that you can "
+"complete it before publication."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
+msgid ""
+"A unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
+msgid ""
+"WARNING: this request was made by a contributor which is not the owner of "
+"this content."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
+msgid "You considerate that the currently published must evolve."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
+msgid ""
+"By creating a new version, you can update it's content without impacting the "
+"currently published one."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
+msgid ""
+"When the new version will be complete, you will be able to make a new "
+"publication request to replace the currently published version (which will be"
+" archived automatically)."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
+msgid ""
+"This publication request is going to be transmitted to a content manager."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
+msgid "You are going to duplicate a whole content."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
+msgid ""
+"The new copy is going to be created in 'draft' mode, so that you can modify "
+"it before publication."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
+msgid ""
+"A new unique number is also going to be assigned to it. This number will be "
+"shared by all content's versions."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:128
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:128
+msgid "Created between"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:140
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:166
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:140
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:166
+msgid "and"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:154
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:154
+msgid "Modified between"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:202
+#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:202
+msgid "Tab label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content can't be published "
+"'as is'."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
+msgid ""
+"The contributor will be notified of this and will be able to update the "
+"content before doing a new publication request."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's previous "
+"retired state."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
+msgid ""
+"After cancelling this request, the content will return to it's normal "
+"published state."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
+msgid ""
+"As a content manager, you considerate that this content should no longer be "
+"published."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
+msgid ""
+"Retired content won't be visible anymore, but it can be updated and published"
+" again, or archived."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
+msgid ""
+"After canceling the request, you will be able to update the content again."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
+msgid ""
+"This content was never published. If you confirm deletion, it won't be "
+"possible to restore it."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
+msgid ""
+"The content version is going to be definitely deleted. Will only remain the "
+"currently published version."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
+msgid ""
+"RECALL: you are not the owner of the content on which you are intervening."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
+msgid "FOR YOUR INFORMATION"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
+msgid "Next step"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
+msgid "Previous step"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
+msgid "With this comment:"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
+msgid "This content is already retired and not visible."
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/content/__init__.py:44
+msgid "Context content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/content/zmi/preview.pt:2
+msgid "This is where the content will be displayed!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/portlet/content/skin/__init__.py:36
+msgid "Default content renderer"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:43
+#: ./src/pyams_content/shared/form/zmi/field.py:149
+msgid "Name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:44
+msgid "Name of this data type; must be unique between all data types"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:50
+msgid "Navigation label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:51
+msgid "Label used for navigation entries"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:54
+msgid "Tab-folder label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:55
+msgid "Label used to include into tab folder"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:58
+msgid "'See also' label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:59
+msgid ""
+"This label can be used when contents of this type will be displayed in a 'See"
+" also' entries block"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:63
+msgid "'Single value' label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:64
+msgid "Label given to this type when a single value is displayed"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:67
+msgid "'Link to list' label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:68
+msgid "Label used to display a link to a list of items of this type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:71
+msgid "Next content label"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:72
+msgid "Label used to announce next date for this type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:76
+msgid "Pictogram associated with this data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:90
+msgid "Field names"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:91
+msgid "List of fields associated with this data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:125
+msgid "Data type"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/types.py:126
+msgid "Type of content data"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:46
+#: ./src/pyams_content/root/interfaces/__init__.py:43
+msgid "Webmasters"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:47
+msgid "Webmasters can handle all contents, including published ones"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:51
+msgid "Pilots"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:52
+msgid ""
+"Pilots can handle tool configuration, manage access rules, grant users roles "
+"and manage managers restrictions"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:57
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:191
+msgid "Managers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:58
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:192
+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:197
+msgid "Contributors"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:64
+msgid "Contributors are users which are allowed to create new contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:68
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:203
+msgid "Designers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:69
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:204
+msgid "Designers are users which are allowed to manage presentation templates"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:95
+msgid "Workflow name"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:96
+msgid "Name of workflow utility used to manage tool contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:124
+msgid "Content URL"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:125
+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:130
+msgid "Version creator"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:131
+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:135
+msgid "First owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:136
+msgid "Name of content's first version owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:140
+msgid "Version creation"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:143
+msgid "Version modifiers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:144
+msgid "List of principals who modified this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:147
+msgid "Last modifier"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:148
+msgid "Last principal who modified this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:151
+msgid "Last update"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:155
+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:160
+msgid "Keywords"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:161
+msgid "They will be included into HTML pages metadata"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:164
+#: ./src/pyams_content/shared/site/zmi/folder.py:78
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:67
+msgid "Notepad"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:165
+#: ./src/pyams_content/shared/site/zmi/folder.py:79
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:68
+msgid "Internal information to be known about this content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:184
+msgid "Content owner"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:185
+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:198
+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:208
+msgid "Readers"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:209
+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:214
+msgid "Guests"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:215
+msgid ""
+"Guests are users which are allowed to view contents with restricted access"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:235
+msgid "Principal ID"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:274
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:299
+msgid "Publication checks"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:275
+msgid ""
+"If 'yes', this contributor will have to confirm that contents have been "
+"previewed and checked before asking for publication"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:300
+msgid ""
+"If 'yes', this manager will have to confirm that contents have been previewed"
+" and checked before publishing a content"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:305
+msgid "Restricted contents"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:306
+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:311
+msgid "Selected owners"
+msgstr ""
+
+#: ./src/pyams_content/shared/common/interfaces/__init__.py:312
+msgid "Manager will have access to contents owned by these principals"
msgstr ""
#: ./src/pyams_content/shared/form/__init__.py:99
@@ -2699,6 +3118,102 @@
msgid "No selected handler..."
msgstr ""
+#: ./src/pyams_content/shared/form/field.py:146
+msgid "Text"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:156
+msgid "Multi-lines text"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:166
+msgid "Boolean"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:176
+msgid "Integer"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:186
+msgid "Decimal"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:196
+msgid "E-mail address"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:206
+msgid "URI"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:216
+msgid "Date"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:230
+msgid "Choice"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:250
+msgid "List"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/properties.py:41
+msgid "Main form settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/properties.py:65
+msgid "Form handler settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/__init__.py:44
+msgid "This form"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/__init__.py:63
+#: ./src/pyams_content/shared/form/zmi/__init__.py:74
+msgid "Add form"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/__init__.py:54
+#, python-format
+msgid "Form « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:69
+msgid "Form fields..."
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:171
+#: ./src/pyams_content/shared/form/interfaces/__init__.py:57
+msgid "Field type"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:204
+msgid "Form fields list"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:227
+#: ./src/pyams_content/shared/form/zmi/field.py:240
+msgid "Add form field"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:278
+msgid "Edit form field properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:180
+msgid "-- unknown field type --"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:115
+msgid "No currently defined form field."
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:262
+msgid "Specified name is already used!"
+msgstr ""
+
#: ./src/pyams_content/shared/form/interfaces/__init__.py:35
msgid "Form"
msgstr ""
@@ -2711,11 +3226,6 @@
msgid "Field internal name; must be unique for a given form"
msgstr ""
-#: ./src/pyams_content/shared/form/interfaces/__init__.py:57
-#: ./src/pyams_content/shared/form/zmi/field.py:170
-msgid "Field type"
-msgstr ""
-
#: ./src/pyams_content/shared/form/interfaces/__init__.py:58
msgid "Selected field type"
msgstr ""
@@ -2836,66 +3346,6 @@
msgid "Name of data recipient"
msgstr ""
-#: ./src/pyams_content/shared/form/zmi/field.py:68
-msgid "Form fields..."
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:148
-#: ./src/pyams_content/shared/common/interfaces/types.py:36
-msgid "Name"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:203
-msgid "Form fields list"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:226
-#: ./src/pyams_content/shared/form/zmi/field.py:239
-msgid "Add form field"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:281
-msgid "Edit form field properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:179
-msgid "-- unknown field type --"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:114
-msgid "No currently defined form field."
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/field.py:266
-msgid "Specified name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/__init__.py:44
-msgid "This form"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/__init__.py:63
-#: ./src/pyams_content/shared/form/zmi/__init__.py:74
-msgid "Add form"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/__init__.py:54
-#, python-format
-msgid "Form « {title} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/properties.py:41
-msgid "Main form settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/zmi/properties.py:70
-msgid "Form handler settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/news/interfaces/__init__.py:29
-msgid "News topic"
-msgstr ""
-
#: ./src/pyams_content/shared/news/zmi/__init__.py:44
msgid "This news topic"
msgstr ""
@@ -2910,56 +3360,618 @@
msgid "News topic « {title} »"
msgstr ""
-#: ./src/pyams_content/shared/logo/paragraph.py:95
+#: ./src/pyams_content/shared/news/interfaces/__init__.py:29
+msgid "News topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:59
+msgid "Concatenate views items in order"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:71
+msgid "Extract items randomly"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:85
+msgid "Take items from views one by one, in views order"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:98
+msgid "Take items from views one by one, in random order"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:127
+msgid "Sort all results by creation date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:136
+msgid "Sort all results by last update date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:145
+msgid "Sort all results by current publication date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/merge.py:154
+msgid "Sort all results by first publication date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/properties.py:40
+msgid "Main view settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/__init__.py:44
+msgid "This view"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/__init__.py:63
+#: ./src/pyams_content/shared/view/zmi/__init__.py:73
+msgid "Add view"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/__init__.py:54
+#, python-format
+msgid "View « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/theme.py:67
+msgid "View tags settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/theme.py:113
+msgid "View themes settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/theme.py:159
+msgid "View collections settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/reference.py:52
+msgid "References..."
+msgstr ""
+
+#: ./src/pyams_content/shared/view/zmi/reference.py:63
+msgid "View internal references settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/__init__.py:89
+msgid "View items"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:41
+msgid "Display context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:42
+msgid "Content context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:59
+msgid "Selected views"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:60
+msgid ""
+"Reference to the view(s) from which items are extracted; you can combine "
+"several views together and specify in which order they should be mixed"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:69
+msgid "Views context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:70
+msgid ""
+"When searching for items, a view receives a \"context\" which is the object "
+"from which settings can be extracted; this context can be the \"display\" "
+"context or the \"content\" context: when the portlet is used to display the "
+"site root, a site manager or a site folder, both are identical; when the "
+"portlet is used to display a shared content, the \"content\" context is the "
+"displayed content, while the \"display\" context is the container (site root,"
+" site manager or site folder) into which content is displayed"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:81
+msgid "Views merge mode"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:82
+msgid ""
+"If you select several views, you can select \"merge\" mode, which is the way "
+"used to merge items from several views"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:91
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:86
+msgid "Results count limit"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/interfaces.py:92
+msgid ""
+"Maximum number of results that the component may extract from merged views"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:14
+msgid "No result found"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt:15
+msgid "No selected view"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:32
+msgid "View"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:150
+msgid "Always include selected internal references"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:151
+msgid "Include selected internal references only if empty"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:41
+#: ./src/pyams_content/interfaces/__init__.py:113
+#: ./src/pyams_content/features/review/interfaces.py:74
+msgid "Creation date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:42
+msgid "Last update date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:43
+msgid "Current publication date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:44
+msgid "First publication date"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:62
+msgid "Select context type?"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:63
+msgid "If 'yes', content type will be extracted from context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:67
+msgid "Other content types"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:68
+msgid "Selected content types; leave empty for all"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:75
+msgid "Order by"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:76
+msgid "Property to use to sort results"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:81
+msgid "Reversed order?"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:82
+msgid "If 'yes', items order will be reversed"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:87
+msgid "Maximum number of results that the view may retrieve"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:160
+msgid "Internal references usage"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:161
+msgid "Specify how selected references are included into view results"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:166
+msgid "Exclude context?"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:167
+msgid "If 'yes', context will be excluded from results list"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:178
+msgid "Select context tags?"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:179
+msgid "If 'yes', tags will be extracted from context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:183
+msgid "Other tags"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:199
+msgid "Select context themes?"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:200
+msgid "If 'yes', themes will be extracted from context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:204
+msgid "Other themes"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:220
+msgid "Select context collections?"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:221
+msgid "If 'yes', collections will be extracted from context"
+msgstr ""
+
+#: ./src/pyams_content/shared/view/interfaces/__init__.py:225
+msgid "Other collections"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/paragraph.py:99
+msgid "no selected image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/paragraph.py:105
+#, python-format
+msgid "image map '{0}' can't be found"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/paragraph.py:113
+#, python-format
+msgid "image map '{0}' is not published"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/__init__.py:154
+msgid "no area defined"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:55
+msgid "Image map..."
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:68
+msgid "Add new image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/paragraph.py:95
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:94
+msgid "Edit paragraph properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/properties.py:40
+msgid "Background image"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:44
+msgid "This image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:63
+msgid "Add image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:73
+msgid "Adding image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/__init__.py:54
+#, python-format
+msgid "Image map « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:54
+msgid "Image areas"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:65
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:71
+msgid "Image map areas"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:140
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:50
+msgid "Link target"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:113
+msgid "No currently defined image."
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:115
+msgid "No currently defined area."
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/container.py:175
+#: ./src/pyams_content/root/zmi/sites.py:170
+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:186
+msgid "Bad query object_name parameter value!"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:47
+msgid "Add image area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:66
+msgid "Add new image area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/zmi/area.py:107
+msgid "Edit image map properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:36
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:89
+msgid "Image map"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:51
+msgid "Internal or external link associated with this map area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:56
+msgid "Alternate label associated with this area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:59
+msgid "Map area coordinates"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:60
+msgid "List of coordinates of image area"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:68
+msgid "Image supporting map areas"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:72
+msgid "List of defined map areas"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:96
+#: ./src/pyams_content/features/alert/interfaces.py:73
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:68
+msgid "Internal reference"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:97
+msgid "Reference to image map object"
+msgstr ""
+
+#: ./src/pyams_content/shared/imagemap/interfaces/__init__.py:100
+msgid "Image map template"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/folder.py:59
+msgid "Site folder"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/link.py:49
+msgid "Content link"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/manager.py:68
+#: ./src/pyams_content/shared/site/zmi/manager.py:125
+msgid "Site manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:61
+msgid "Add site folder..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:93
+msgid "Add site folder"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:160
+msgid "Site folder management"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:188
+msgid "Site folder properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:71
+#: ./src/pyams_content/interfaces/__init__.py:102
+msgid "Visible label used to display content"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:74
+#: ./src/pyams_content/shared/site/zmi/__init__.py:72
+#: ./src/pyams_content/shared/site/zmi/link.py:66
+msgid "Parent"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:75
+#: ./src/pyams_content/shared/site/zmi/link.py:67
+msgid "Folder's parent"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/folder.py:153
+msgid "You must provide a folder name for default server language!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:55
+msgid "This topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:63
+msgid "Add topic..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:86
+msgid "Add topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/__init__.py:73
+msgid "Topic's parent"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/link.py:57
+msgid "Rent content..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/link.py:77
+msgid "Rent existing content"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/link.py:135
+msgid "Edit content link properties"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:106
+#: ./src/pyams_content/shared/site/zmi/container.py:118
+#: ./src/pyams_content/shared/blog/zmi/manager.py:155
+#: ./src/pyams_content/shared/blog/zmi/manager.py:167
+msgid "Publication dates..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:132
+#: ./src/pyams_content/shared/blog/zmi/manager.py:181
+msgid "Update publication dates"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:178
+#: ./src/pyams_content/shared/site/zmi/container.py:188
+#: ./src/pyams_content/root/zmi/sites.py:68
+msgid "Site tree"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:310
+#: ./src/pyams_content/shared/site/zmi/container.py:156
+msgid "Visible element?"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:311
+msgid "Switch element visibility"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:372
+msgid "Folders and topics"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:408
+#: ./src/pyams_content/root/zmi/__init__.py:825
+msgid "Content"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:504
+msgid "Delete site item"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:381
+msgid "Click to open/close all folders"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:397
+msgid "Click to show/hide inner folders"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/container.py:267
+msgid "Can't reparent object to one of it's children. Reloading..."
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:57
+msgid "Site management"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:112
+#: ./src/pyams_content/shared/site/zmi/manager.py:126
+msgid "Add site manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:156
+#: ./src/pyams_content/shared/blog/zmi/manager.py:127
+msgid "You must provide a short name for default server language!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:160
+msgid "Specified site manager name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/zmi/manager.py:164
+msgid "A site manager is already registered with this name!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:96
+msgid "Topic"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:59
+msgid "Heading"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:60
+msgid "Heading displayed according to presentation template"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:63
+msgid "Navigation title"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:64
+msgid "Title displayed in navigation items"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:115
+msgid "Content title, as shown in front-office"
+msgstr ""
+
+#: ./src/pyams_content/shared/site/interfaces/__init__.py:119
+msgid "If 'no', link is not visible"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/paragraph.py:96
msgid "no selected logo"
msgstr ""
-#: ./src/pyams_content/shared/logo/paragraph.py:101
+#: ./src/pyams_content/shared/logo/paragraph.py:102
#, python-format
msgid "logo '{0}' can't be found"
msgstr ""
-#: ./src/pyams_content/shared/logo/paragraph.py:109
+#: ./src/pyams_content/shared/logo/paragraph.py:110
#, python-format
msgid "logo '{0}' is not published"
msgstr ""
-#: ./src/pyams_content/shared/logo/__init__.py:67
+#: ./src/pyams_content/shared/logo/__init__.py:68
msgid "no image defined"
msgstr ""
-#: ./src/pyams_content/shared/logo/__init__.py:70
+#: ./src/pyams_content/shared/logo/__init__.py:71
msgid "no URL defined"
msgstr ""
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:32
-msgid "Logo"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:64
-msgid "Logos"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:71
-msgid "Logos references"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:72
-msgid "List of internal logos references"
-msgstr ""
-
-#: ./src/pyams_content/shared/logo/interfaces/__init__.py:75
-msgid "Logos template"
-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:67
+#: ./src/pyams_content/shared/logo/zmi/paragraph.py:68
msgid "Add new logos paragraph"
msgstr ""
+#: ./src/pyams_content/shared/logo/zmi/properties.py:40
+msgid "Main logo settings"
+msgstr ""
+
#: ./src/pyams_content/shared/logo/zmi/__init__.py:45
msgid "This logo"
msgstr ""
@@ -2974,1478 +3986,101 @@
msgid "Logo « {title} »"
msgstr ""
-#: ./src/pyams_content/shared/logo/zmi/properties.py:40
-msgid "Main logo settings"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/__init__.py:237
-#: ./src/pyams_content/shared/common/zmi/manager.py:96
-#: ./src/pyams_content/shared/common/zmi/properties.py:70
-msgid "Properties"
-msgstr ""
-
-#: ./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:260
-#, python-format
-msgid "title length should be between 40 and 66 characters ({length} actually)"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:37
-msgid "Name of this data type; must be unique between all data types"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:43
-msgid "Navigation label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:44
-msgid "Label used for navigation entries"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:47
-msgid "Tab-folder label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:48
-msgid "Label used to include into tab folder"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:51
-msgid "'See also' label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:52
-msgid ""
-"This label can be used when contents of this type will be displayed in a 'See"
-" also' entries block"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:56
-msgid "'Single value' label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:57
-msgid "Label given to this type when a single value is displayed"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:60
-msgid "'Link to list' label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:61
-msgid "Label used to display a link to a list of items of this type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:64
-msgid "Next content label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:65
-msgid "Label used to announce next date for this type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:69
-msgid "Image associated to this data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:82
-msgid "Field names"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/types.py:83
-msgid "List of fields associated with this data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:46
-#: ./src/pyams_content/root/interfaces/__init__.py:40
-msgid "Webmasters"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:47
-msgid "Webmasters can handle all contents, including published ones"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:51
-msgid "Pilots"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:52
-msgid ""
-"Pilots can handle tool configuration, manage access rules, grant users roles "
-"and manage managers restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:57
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:182
-msgid "Managers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:58
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:183
-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:188
-msgid "Contributors"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:64
-msgid "Contributors are users which are allowed to create new contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:90
-msgid "Workflow name"
-msgstr ""
-
-#: ./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:119
-msgid "Content URL"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:120
-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:125
-msgid "Version creator"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:126
-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:130
-msgid "First owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:131
-msgid "Name of content's first version owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:135
-msgid "Version creation"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:138
-msgid "Version modifiers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:139
-msgid "List of principals who modified this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:142
-msgid "Last modifier"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:143
-msgid "Last principal who modified this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:146
-msgid "Last update"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:150
-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:155
-msgid "Keywords"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:156
-msgid "They will be included into HTML pages metadata"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:159
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:66
-#: ./src/pyams_content/shared/site/zmi/folder.py:78
-msgid "Notepad"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:160
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:67
-#: ./src/pyams_content/shared/site/zmi/folder.py:79
-msgid "Internal information to be known about this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:175
-msgid "Content owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:176
-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:189
-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:194
-msgid "Readers"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:195
-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:200
-msgid "Guests"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:201
-msgid ""
-"Guests are users which are allowed to view contents with restricted access"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:221
-msgid "Principal ID"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:260
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:285
-#: ./src/pyams_content/shared/common/zmi/security.py:118
-#: ./src/pyams_content/shared/common/zmi/security.py:270
-msgid "Publication checks"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:261
-msgid ""
-"If 'yes', this contributor will have to confirm that contents have been "
-"previewed and checked before asking for publication"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:286
-msgid ""
-"If 'yes', this manager will have to confirm that contents have been previewed"
-" and checked before publishing a content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:291
-msgid "Restricted contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:292
-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:297
-msgid "Selected owners"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/interfaces/__init__.py:298
-msgid "Manager will have access to contents owned by these principals"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:134
-msgid "Unique ID"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:154
-#: ./src/pyams_content/shared/common/zmi/search.py:168
-msgid "Status"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:181
-msgid "Status date"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:198
-#: ./src/pyams_content/shared/common/zmi/summary.py:158
-msgid "Version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:213
-msgid "Status principal"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:231
-#: ./src/pyams_content/shared/common/zmi/search.py:165
-#: ./src/pyams_content/root/zmi/search.py:159
-msgid "Owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:250
-msgid "Last modification"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:273
-#: ./src/pyams_content/root/zmi/__init__.py:110
-msgid "Dashboard"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:283
-msgid "Contents dashboard"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:329
-#: ./src/pyams_content/root/zmi/__init__.py:159
-#, python-format
-msgid "MANAGER - {0} content waiting for your action"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:330
-#: ./src/pyams_content/root/zmi/__init__.py:160
-#, python-format
-msgid "MANAGER - {0} contents waiting for your action"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:370
-#: ./src/pyams_content/root/zmi/__init__.py:203
-#, python-format
-msgid "CONTRIBUTOR - {0} content waiting for action"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:371
-#: ./src/pyams_content/root/zmi/__init__.py:204
-#, python-format
-msgid "CONTRIBUTOR - {0} contents waiting for action"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:402
-#: ./src/pyams_content/root/zmi/__init__.py:238
-#, python-format
-msgid "CONTRIBUTOR - {0} modified content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:443
-#: ./src/pyams_content/root/zmi/__init__.py:281
-msgid "My contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:458
-#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
-#: ./src/pyams_content/root/zmi/__init__.py:296
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:8
-msgid "My favorites"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:467
-#: ./src/pyams_content/root/zmi/__init__.py:305
-#, python-format
-msgid "CONTRIBUTOR - {0} favorite"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:468
-#: ./src/pyams_content/root/zmi/__init__.py:306
-#, python-format
-msgid "CONTRIBUTOR - {0} favorites"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:480
-#: ./src/pyams_content/shared/common/zmi/templates/header.pt:23
-msgid "Add/remove from favorites"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:543
-#: ./src/pyams_content/root/zmi/__init__.py:344
-msgid "Your favorites"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:556
-#: ./src/pyams_content/root/zmi/__init__.py:357
-msgid "My preparations"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:565
-#: ./src/pyams_content/root/zmi/__init__.py:366
-#, python-format
-msgid "CONTRIBUTOR - {0} prepared content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:566
-#: ./src/pyams_content/root/zmi/__init__.py:367
-#, python-format
-msgid "CONTRIBUTOR - {0} prepared contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:605
-#: ./src/pyams_content/root/zmi/__init__.py:405
-msgid "Your prepared contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:618
-#: ./src/pyams_content/root/zmi/__init__.py:418
-msgid "My submissions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:627
-#: ./src/pyams_content/root/zmi/__init__.py:427
-#, python-format
-msgid "CONTRIBUTOR - {0} submitted content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:628
-#: ./src/pyams_content/root/zmi/__init__.py:428
-#, python-format
-msgid "CONTRIBUTOR - {0} submitted contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:667
-#: ./src/pyams_content/root/zmi/__init__.py:466
-msgid "Your submitted contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:680
-#: ./src/pyams_content/root/zmi/__init__.py:479
-msgid "My publications"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:689
-#: ./src/pyams_content/root/zmi/__init__.py:488
-#, python-format
-msgid "CONTRIBUTOR - {0} published content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:690
-#: ./src/pyams_content/root/zmi/__init__.py:489
-#, python-format
-msgid "CONTRIBUTOR - {0} published contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:729
-#: ./src/pyams_content/root/zmi/__init__.py:527
-msgid "Your published contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:742
-#: ./src/pyams_content/root/zmi/__init__.py:540
-msgid "My retired contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:751
-#: ./src/pyams_content/root/zmi/__init__.py:549
-#, python-format
-msgid "CONTRIBUTOR - {0} retired content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:752
-#: ./src/pyams_content/root/zmi/__init__.py:550
-#, python-format
-msgid "CONTRIBUTOR - {0} retired contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:792
-#: ./src/pyams_content/root/zmi/__init__.py:589
-msgid "Your retired contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:805
-#: ./src/pyams_content/root/zmi/__init__.py:602
-msgid "My archived contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:814
-#: ./src/pyams_content/root/zmi/__init__.py:611
-#, python-format
-msgid "CONTRIBUTOR - {0} archived content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:815
-#: ./src/pyams_content/root/zmi/__init__.py:612
-#, python-format
-msgid "CONTRIBUTOR - {0} archived contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:861
-#: ./src/pyams_content/root/zmi/__init__.py:657
-msgid "Your archived contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:875
-#: ./src/pyams_content/root/zmi/__init__.py:671
-msgid "Other interventions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:890
-#: ./src/pyams_content/root/zmi/__init__.py:686
-msgid "Last publications"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:899
-#: ./src/pyams_content/root/zmi/__init__.py:695
-#, python-format
-msgid "CONTRIBUTORS - {0} published content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:945
-#: ./src/pyams_content/root/zmi/__init__.py:740
-msgid "Last published contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:958
-#: ./src/pyams_content/root/zmi/__init__.py:753
-msgid "Last updates"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:967
-#: ./src/pyams_content/root/zmi/__init__.py:762
-#, python-format
-msgid "CONTRIBUTORS - {0} updated content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:1012
-#: ./src/pyams_content/root/zmi/__init__.py:806
-msgid "Last updated contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:407
-#: ./src/pyams_content/root/zmi/__init__.py:243
-#, python-format
-msgid "CONTRIBUTOR - {0} modified contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:409
-#: ./src/pyams_content/root/zmi/__init__.py:245
-#, python-format
-msgid "CONTRIBUTOR - Last {0} modified contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:904
-#: ./src/pyams_content/root/zmi/__init__.py:700
-#, python-format
-msgid "CONTRIBUTORS - Last {0} published contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:906
-#: ./src/pyams_content/root/zmi/__init__.py:702
-msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:972
-#: ./src/pyams_content/root/zmi/__init__.py:767
-#, python-format
-msgid "CONTRIBUTORS - Last {0} updated contents"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:974
-#: ./src/pyams_content/root/zmi/__init__.py:769
-msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:306
-#, python-format
-msgid "SEARCH - Between all contents of type « {type} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:171
-#: ./src/pyams_content/shared/common/zmi/header.py:96
-msgid "Content publication start date is not passed yet"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:85
-#, python-format
-msgid "{state} by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:116
-#, python-format
-msgid "since {date}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:128
-msgid "access published version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:135
-msgid "access new version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:145
-msgid "access waiting version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:156
-msgid "access retired version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/header.py:166
-msgid "access archived version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:67
-msgid "Data types"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:145
-msgid "Data type label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:185
-#: ./src/pyams_content/shared/common/zmi/types.py:396
-msgid "Default associations"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:213
-msgid "Content data types"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:236
-msgid "Add data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:248
-msgid "Add new data type"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:285
-msgid "Data type properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:359
-msgid "Subtype label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:440
-msgid "Add subtype"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:452
-msgid "Add new subtype"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:498
-msgid "Data subtype properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:112
-msgid "No currently defined data type."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:275
-msgid "Specified type name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:474
-msgid "Subtype was correctly added."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:488
-msgid "Specified subtype name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/types.py:157
-msgid "Click to see subtypes"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/site.py:38
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:33
+msgid "Logo"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:70
+msgid "Logos"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:47
+msgid "Image (colored)"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:51
+msgid "Image (monochrome)"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:52
+msgid "An alternate image which can be used by some presentation templates"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:77
+msgid "Logos references"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:78
+msgid "List of internal logos references"
+msgstr ""
+
+#: ./src/pyams_content/shared/logo/interfaces/__init__.py:81
+msgid "Logos template"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:52
+msgid "This blog post"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:71
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:81
+msgid "Add blog post"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/__init__.py:62
#, python-format
-msgid ""
-"SEARCH - Between all contents published into « {site} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:50
-msgid "Change owner..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:83
-msgid "Change content's owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:125
-msgid ""
-"All versions of this content which are not archived will be transferred to "
-"newly selected owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:60
-msgid "New owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:61
-msgid "The selected user will become the new content's owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:63
-msgid "Keep previous owner as contributor"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:64
-msgid "If 'yes', the previous owner will still be able to modify this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/owner.py:74
-msgid "Change owner"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:50
-msgid "Display content summary"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:74
-msgid "Identity card"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:86
-msgid "Requested action"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:127
-msgid "Publication and retire dates"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:146
-msgid "Current version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:176
-msgid "Content history"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/summary.py:117
-msgid "Associated comment"
-msgstr ""
-
-#: ./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:164
-#, python-format
-msgid "{state} since {date}, by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:265
-msgid "Duplicate content..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:285
-msgid "Duplicate content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:84
-msgid "This title can be modified afterwards"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:276
-msgid "Duplicate this content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:337
-#, python-format
-msgid "Clone created from version {source} of {oid} (in « {state} » state)"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/__init__.py:382
-msgid "Created or modified in this version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:107
-msgid "Shared tool properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:125
-msgid "WARNING"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:127
-msgid ""
-"Workflow shouldn't be modified if this tool already contains any shared "
-"content!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:150
-msgid "Languages"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:162
-msgid "Content languages"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:172
-msgid ""
-"Tool languages are used to translate own tool properties, and newly created "
-"contents will propose these languages by default"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:80
-msgid "Content management"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/manager.py:82
-msgid "Tool management"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/portal.py:46
-msgid "Edit default template properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/portal.py:56
-msgid ""
-"**This form allows you to select shared content default template.**\n"
-"\n"
-"If you choose to use a shared template, you can only adjust settings of each portlet individually but can't change portlets list or page configuration.\n"
-"\n"
-"If you use a local template, you can define a whole custom configuration but the template definition can't be reused anywhere..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/portal.py:72
-msgid "Override tool default template"
-msgstr ""
-
-#: ./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: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:282
-#: ./src/pyams_content/root/zmi/search.py:260
-msgid "Advanced search results"
-msgstr ""
-
-#: ./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:175
-#: ./src/pyams_content/root/zmi/search.py:165
-msgid "Created before..."
-msgstr ""
-
-#: ./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:181
-#: ./src/pyams_content/root/zmi/search.py:171
-msgid "Modified before..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/properties.py:60
-msgid "Composition"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/properties.py:82
-msgid "Content properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:64
-msgid "Contributors restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:73
-msgid "Content contributors restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:107
-msgid "Contributor name"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:218
-msgid "Managers restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:227
-msgid "Content managers restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:259
-msgid "Manager name"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:287
-msgid "Restricted"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:304
-msgid "Owners"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:394
-msgid "Publication workflow"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:167
-#, python-format
-msgid "Edit contributor restrictions for « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:353
-#, python-format
-msgid "Edit manager restrictions for « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:400
-msgid "Apply contents restrictions"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/security.py:402
-msgid ""
-"You can specify which contents this manager will be able to manage. If you "
-"specify several criteria, the manager will be able to manage contents for "
-"which at least one criteria is matching."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:844
-msgid "Prior checks"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:123
-msgid "Request publication"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:210
-#: ./src/pyams_content/workflow/__init__.py:315
-msgid "Cancel publication request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:250
-msgid "Refuse publication request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:304
-#: ./src/pyams_content/workflow/basic.py:196
-msgid "Publish"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:393
-msgid "Request retire"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:449
-msgid "Cancel retire request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:489
-msgid "Retire"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:530
-#: ./src/pyams_content/workflow/__init__.py:436
-msgid "Request archive"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:573
-msgid "Cancel archive request"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:613
-msgid "Archive"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:654
-#: ./src/pyams_content/workflow/basic.py:224
-#: ./src/pyams_content/workflow/basic.py:236
-#: ./src/pyams_content/workflow/__init__.py:501
-#: ./src/pyams_content/workflow/__init__.py:513
-#: ./src/pyams_content/workflow/__init__.py:525
-#: ./src/pyams_content/workflow/__init__.py:537
-#: ./src/pyams_content/workflow/__init__.py:549
-msgid "Create new version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:705
-#: ./src/pyams_content/workflow/basic.py:248
-#: ./src/pyams_content/workflow/__init__.py:561
-msgid "Delete version"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:790
-msgid "Previewed content?"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:794
-msgid "Verified content?"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:180
-#: ./src/pyams_content/shared/common/zmi/workflow.py:362
-msgid "Publication start date is required"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:273
-#: ./src/pyams_content/shared/common/zmi/workflow.py:419
-msgid "A comment is required"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:729
-msgid "Delete content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:738
-msgid "Delete definitively"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:860
-msgid ""
-"You must confirm that you previewed and checked this content before "
-"requesting publication!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:87
-#, python-format
-msgid "{state} | by {principal}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/workflow.py:83
-#: ./src/pyams_content/workflow/basic.py:315
-#: ./src/pyams_content/workflow/basic.py:286
-#: ./src/pyams_content/workflow/__init__.py:648
-#: ./src/pyams_content/workflow/__init__.py:619
-#, python-format
-msgid "{state} {date}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:2
-msgid "This content is already retired and not visible."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archiving-message.pt:3
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:3
-msgid ""
-"After archiving, it will be backed up but you will not be able to publish it "
-"again except by creating a new version."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-propose-message.pt:1
-msgid ""
-"After canceling the request, you will be able to update the content again."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-archive-message.pt:2
-msgid "As a manager, you considerate that this content must be archived."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:2
-msgid ""
-"This new content is going to be created in 'draft' mode, so that you can "
-"complete it before publication."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-create-message.pt:4
-msgid ""
-"A unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:2
-msgid ""
-"You considerate that the currently published version should no more be "
-"publicly visible."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retiring-message.pt:3
-msgid ""
-"WARNING: the content will remain visible until a manager validate the "
-"request."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:29
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:29
-msgid "Quick search..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:35
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:35
-msgid "Advanced search..."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:49
-#: ./src/pyams_content/root/zmi/templates/dashboard.pt:49
-msgid "You are not actually concerned by any content."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:2
-msgid "You are going to duplicate a whole content."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:3
-msgid ""
-"The new copy is going to be created in 'draft' mode, so that you can modify "
-"it before publication."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-duplicate-message.pt:5
-msgid ""
-"A new unique number is also going to be assigned to it. This number will be "
-"shared by all content's versions."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-retiring-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's normal "
-"published state."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-owner-warning.pt:1
-msgid ""
-"RECALL: you are not the owner of the content on which you are intervening."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:2
-msgid "You considerate that the currently published must evolve."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:3
-msgid ""
-"By creating a new version, you can update it's content without impacting the "
-"currently published one."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-clone-message.pt:5
-msgid ""
-"When the new version will be complete, you will be able to make a new "
-"publication request to replace the currently published version (which will be"
-" archived automatically)."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content should no longer be "
-"published."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-retire-message.pt:4
-msgid ""
-"Retired content won't be visible anymore, but it can be updated and published"
-" again, or archived."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:2
-msgid "FOR YOUR INFORMATION"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:5
-msgid "Next step"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:7
-msgid "Previous step"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-transition-info.pt:10
-msgid "With this comment:"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:128
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:128
-msgid "Created between"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:140
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:166
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:140
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:166
-msgid "and"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:154
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:154
-msgid "Modified between"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:202
-#: ./src/pyams_content/root/zmi/templates/advanced-search.pt:202
-msgid "Tab label"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/header.pt:6
-msgid "Back to previous page"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/header.pt:20
-msgid "by ${owner}"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:2
-msgid ""
-"This content was never published. If you confirm deletion, it won't be "
-"possible to restore it."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-delete-message.pt:6
-msgid ""
-"The content version is going to be definitely deleted. Will only remain the "
-"currently published version."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-operator-warning.pt:1
-msgid ""
-"WARNING: this request was made by a contributor which is not the owner of "
-"this content."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:2
-msgid ""
-"As a manager, you considerate that this content is complete and can be "
-"published 'as is'."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-publish-message.pt:4
-msgid ""
-"This operation will make the content publicly available (except if restricted"
-" access has been set)."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-cancel-archiving-message.pt:1
-msgid ""
-"After cancelling this request, the content will return to it's previous "
-"retired state."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-propose-message.pt:1
-msgid ""
-"This publication request is going to be transmitted to a content manager."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:2
-msgid ""
-"As a content manager, you considerate that this content can't be published "
-"'as is'."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/zmi/templates/wf-refuse-propose-message.pt:4
-msgid ""
-"The contributor will be notified of this and will be able to update the "
-"content before doing a new publication request."
-msgstr ""
-
-#: ./src/pyams_content/shared/common/portlet/content/__init__.py:44
-msgid "Context content"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/portlet/content/skin/__init__.py:36
-msgid "Default content renderer"
-msgstr ""
-
-#: ./src/pyams_content/shared/common/portlet/content/zmi/preview.pt:2
-msgid "This is where the content will be displayed!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/manager.py:68
-#: ./src/pyams_content/shared/site/zmi/manager.py:125
-msgid "Site manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/folder.py:59
-msgid "Site folder"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/link.py:46
-msgid "Content link"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:95
-msgid "Topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:58
-msgid "Heading"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:59
-msgid "Heading displayed according to presentation template"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:62
-msgid "Navigation title"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:63
-msgid "Title displayed in navigation items"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:114
-msgid "Content title, as shown in front-office"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/interfaces/__init__.py:118
-msgid "If 'no', link is not visible"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:179
-#: ./src/pyams_content/shared/site/zmi/container.py:189
-#: ./src/pyams_content/root/zmi/sites.py:68
-msgid "Site tree"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:308
-#: ./src/pyams_content/shared/site/zmi/container.py:157
-msgid "Visible element?"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:309
-msgid "Switch element visibility"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:370
-msgid "Folders and topics"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:406
-#: ./src/pyams_content/root/zmi/__init__.py:817
-msgid "Content"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:502
-msgid "Delete site item"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:648
-msgid "Change URL..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:663
-msgid "Change item URL"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:670
-msgid "Item URL part"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:379
-msgid "Click to open/close all folders"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:395
-msgid "Click to show/hide inner folders"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/container.py:265
-msgid "Can't reparent object to one of it's children. Reloading..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:55
-msgid "This topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:63
-msgid "Add topic..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:86
-msgid "Add topic"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:72
-#: ./src/pyams_content/shared/site/zmi/folder.py:74
-#: ./src/pyams_content/shared/site/zmi/link.py:66
-msgid "Parent"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/__init__.py:73
-msgid "Topic's parent"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:57
-msgid "Site management"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:112
-#: ./src/pyams_content/shared/site/zmi/manager.py:126
-msgid "Add site manager"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:160
-msgid "Specified site manager name is already used!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/manager.py:164
-msgid "A site manager is already registered with this name!!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:61
-msgid "Add site folder..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:93
-msgid "Add site folder"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:162
-msgid "Site folder management"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:190
-msgid "Site folder properties"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:75
-#: ./src/pyams_content/shared/site/zmi/link.py:67
-msgid "Folder's parent"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/folder.py:155
-msgid "You must provide a folder name for default server language!"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/link.py:57
-msgid "Rent content..."
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/link.py:77
-msgid "Rent existing content"
-msgstr ""
-
-#: ./src/pyams_content/shared/site/zmi/link.py:135
-msgid "Edit content link properties"
-msgstr ""
-
-#: ./src/pyams_content/root/__init__.py:67
+msgid "Blog post « {title} »"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:60
+msgid "Blog management"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:83
+#: ./src/pyams_content/shared/blog/zmi/manager.py:97
+msgid "Add blog manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:96
+msgid "Blog manager"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:131
+msgid "Specified blog manager name is already used!"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/zmi/manager.py:135
+msgid "A blog manager is already registered with this name!!"
+msgstr ""
+
+#: ./src/pyams_content/shared/blog/interfaces/__init__.py:33
+msgid "Blog post"
+msgstr ""
+
+#: ./src/pyams_content/profile/zmi/__init__.py:42
+msgid "Admin. profile"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:33
+msgid "User favorites"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:34
+msgid "List of internal numbers of shared contents stored for quick access"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:37
+msgid "Default table length"
+msgstr ""
+
+#: ./src/pyams_content/profile/interfaces/__init__.py:38
+msgid "Default length used for inner tables and dashboards"
+msgstr ""
+
+#: ./src/pyams_content/root/__init__.py:68
msgid "Site root"
msgstr ""
-#: ./src/pyams_content/root/interfaces/__init__.py:36
-msgid "Site managers"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:44
-msgid "Templates managers"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:48
-msgid "Operators group"
-msgstr ""
-
-#: ./src/pyams_content/root/interfaces/__init__.py:49
-msgid "Name of group containing all roles owners"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/__init__.py:78
-msgid "Home"
-msgstr ""
-
-#: ./src/pyams_content/root/zmi/search.py:155
-msgid "Content types"
-msgstr ""
-
#: ./src/pyams_content/root/zmi/sites.py:78
msgid "Blogs and shared sites"
msgstr ""
@@ -4466,6 +4101,14 @@
msgid "Given element name doesn't exist!"
msgstr ""
+#: ./src/pyams_content/root/zmi/search.py:155
+msgid "Content types"
+msgstr ""
+
+#: ./src/pyams_content/root/zmi/__init__.py:78
+msgid "Home"
+msgstr ""
+
#: ./src/pyams_content/root/zmi/templates/dashboard.pt:7
msgid "Your contents dashboard"
msgstr ""
@@ -4474,116 +4117,27 @@
msgid "SEARCH - Between all contents"
msgstr ""
+#: ./src/pyams_content/root/interfaces/__init__.py:39
+msgid "Site managers"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:47
+msgid "Templates managers"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:51
+msgid "Operators group"
+msgstr ""
+
+#: ./src/pyams_content/root/interfaces/__init__.py:52
+msgid "Name of group containing all roles owners"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:70
#: ./src/pyams_content/workflow/basic.py:53
-#: ./src/pyams_content/workflow/__init__.py:70
msgid "Draft"
msgstr ""
-#: ./src/pyams_content/workflow/basic.py:54
-#: ./src/pyams_content/workflow/__init__.py:74
-msgid "Published"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:55
-#: ./src/pyams_content/workflow/__init__.py:78
-msgid "Archived"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:56
-#: ./src/pyams_content/workflow/__init__.py:79
-msgid "Deleted"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:61
-#: ./src/pyams_content/workflow/__init__.py:84
-msgid "draft created"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:62
-#: ./src/pyams_content/workflow/__init__.py:86
-msgid "published"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:63
-#: ./src/pyams_content/workflow/__init__.py:90
-msgid "archived"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:190
-#: ./src/pyams_content/workflow/__init__.py:279
-msgid "Initialize"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:193
-#: ./src/pyams_content/workflow/__init__.py:282
-msgid "Draft creation"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:204
-#: ./src/pyams_content/workflow/__init__.py:383
-msgid "Content published"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:206
-#: ./src/pyams_content/workflow/__init__.py:385
-#, python-format
-msgid "published the content « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:210
-#: ./src/pyams_content/workflow/__init__.py:463
-msgid "Archive content"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:218
-#: ./src/pyams_content/workflow/__init__.py:471
-msgid "Content archived"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:220
-#: ./src/pyams_content/workflow/__init__.py:473
-#, python-format
-msgid "archived content « {0} »"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:232
-#: ./src/pyams_content/workflow/basic.py:244
-#: ./src/pyams_content/workflow/__init__.py:509
-#: ./src/pyams_content/workflow/__init__.py:521
-#: ./src/pyams_content/workflow/__init__.py:533
-#: ./src/pyams_content/workflow/__init__.py:545
-#: ./src/pyams_content/workflow/__init__.py:557
-msgid "New version created"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:256
-#: ./src/pyams_content/workflow/__init__.py:569
-msgid "Version deleted"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:289
-#: ./src/pyams_content/workflow/basic.py:311
-#: ./src/pyams_content/workflow/__init__.py:622
-#: ./src/pyams_content/workflow/__init__.py:644
-msgid "Unknown state"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:313
-#: ./src/pyams_content/workflow/__init__.py:646
-msgid "publication refused"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:309
-#: ./src/pyams_content/workflow/__init__.py:642
-msgid "new version created"
-msgstr ""
-
-#: ./src/pyams_content/workflow/basic.py:160
-#: ./src/pyams_content/workflow/__init__.py:249
-#, python-format
-msgid "Published version {0}"
-msgstr ""
-
#: ./src/pyams_content/workflow/__init__.py:71
msgid "Proposed"
msgstr ""
@@ -4596,6 +4150,11 @@
msgid "Refused"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:74
+#: ./src/pyams_content/workflow/basic.py:54
+msgid "Published"
+msgstr ""
+
#: ./src/pyams_content/workflow/__init__.py:75
msgid "Retiring"
msgstr ""
@@ -4608,10 +4167,30 @@
msgid "Archiving"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:78
+#: ./src/pyams_content/workflow/basic.py:55
+msgid "Archived"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:79
+#: ./src/pyams_content/workflow/basic.py:56
+msgid "Deleted"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:84
+#: ./src/pyams_content/workflow/basic.py:61
+msgid "draft created"
+msgstr ""
+
#: ./src/pyams_content/workflow/__init__.py:85
msgid "publication requested"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:86
+#: ./src/pyams_content/workflow/basic.py:62
+msgid "published"
+msgstr ""
+
#: ./src/pyams_content/workflow/__init__.py:87
msgid "retiring requested"
msgstr ""
@@ -4624,6 +4203,21 @@
msgid "archiving requested"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:90
+#: ./src/pyams_content/workflow/basic.py:63
+msgid "archived"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:279
+#: ./src/pyams_content/workflow/basic.py:190
+msgid "Initialize"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:282
+#: ./src/pyams_content/workflow/basic.py:193
+msgid "Draft creation"
+msgstr ""
+
#: ./src/pyams_content/workflow/__init__.py:285
#: ./src/pyams_content/workflow/__init__.py:300
msgid "Propose publication"
@@ -4700,6 +4294,17 @@
msgid "State reset to 'refused' (automatic)"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:383
+#: ./src/pyams_content/workflow/basic.py:204
+msgid "Content published"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:385
+#: ./src/pyams_content/workflow/basic.py:206
+#, python-format
+msgid "published the content « {0} »"
+msgstr ""
+
#: ./src/pyams_content/workflow/__init__.py:389
msgid "Request retiring"
msgstr ""
@@ -4769,6 +4374,22 @@
msgid "cancelled the archive request for content « {0} »"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:463
+#: ./src/pyams_content/workflow/basic.py:210
+msgid "Archive content"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:471
+#: ./src/pyams_content/workflow/basic.py:218
+msgid "Content archived"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:473
+#: ./src/pyams_content/workflow/basic.py:220
+#, python-format
+msgid "archived content « {0} »"
+msgstr ""
+
#: ./src/pyams_content/workflow/__init__.py:477
msgid "Archive published content"
msgstr ""
@@ -4787,6 +4408,44 @@
msgid "Archive retired content"
msgstr ""
+#: ./src/pyams_content/workflow/__init__.py:509
+#: ./src/pyams_content/workflow/__init__.py:521
+#: ./src/pyams_content/workflow/__init__.py:533
+#: ./src/pyams_content/workflow/__init__.py:545
+#: ./src/pyams_content/workflow/__init__.py:557
+#: ./src/pyams_content/workflow/basic.py:232
+#: ./src/pyams_content/workflow/basic.py:244
+msgid "New version created"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:569
+#: ./src/pyams_content/workflow/basic.py:256
+msgid "Version deleted"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:622
+#: ./src/pyams_content/workflow/__init__.py:644
+#: ./src/pyams_content/workflow/basic.py:289
+#: ./src/pyams_content/workflow/basic.py:311
+msgid "Unknown state"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:646
+#: ./src/pyams_content/workflow/basic.py:313
+msgid "publication refused"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:642
+#: ./src/pyams_content/workflow/basic.py:309
+msgid "new version created"
+msgstr ""
+
+#: ./src/pyams_content/workflow/__init__.py:249
+#: ./src/pyams_content/workflow/basic.py:160
+#, python-format
+msgid "Published version {0}"
+msgstr ""
+
#: ./src/pyams_content/workflow/task.py:62
msgid "Automatic contents withdrawal:\n"
msgstr ""
@@ -4798,3 +4457,586 @@
#: ./src/pyams_content/workflow/zmi/task.py:55
msgid "Add automatic content archiver"
msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:46
+msgid "Shared sites"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:67
+msgid "Shared contents"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:90
+msgid "Shared tools"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py:113
+msgid "My roles"
+msgstr ""
+
+#: ./src/pyams_content/skin/zmi/viewlet/toplinks/templates/user-addings.pt:7
+msgid "Create new content"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:95
+msgid "Unique key"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:96
+msgid ""
+"WARNING: this key can't be modified after creation!!! Spaces, uppercase "
+"letters ou accentuated characters will be replaced automatically."
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:105
+msgid "Short name"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:106
+msgid "Short name used in breadcrumbs"
+msgstr ""
+
+#: ./src/pyams_content/interfaces/__init__.py:117
+msgid "Modification date"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:73
+msgid "Contents"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:83
+msgid "Table contents"
+msgstr ""
+
+#: ./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:143
+msgid "Properties..."
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:157
+msgid "Edit table properties"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/table.py:167
+msgid "Table management"
+msgstr ""
+
+#: ./src/pyams_content/reference/zmi/__init__.py:51
+msgid "References"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/__init__.py:169
+#: ./src/pyams_content/reference/pictograms/zmi/widget.py:55
+msgid "Default header: --"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/manager.py:51
+msgid "Pictograms selection..."
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/manager.py:63
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:34
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:73
+msgid "Selected pictograms"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:7
+msgid "Available pictograms"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:21
+#: ./src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt:48
+msgid "Display pictogram properties"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt:6
+msgid "Default header: ${header}"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:45
+msgid "Pictogram content"
+msgstr ""
+
+#. Default: Header
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:52
+msgid "pictogram-header"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:53
+msgid "Default header associated with this pictogram"
+msgstr ""
+
+#: ./src/pyams_content/reference/pictograms/interfaces/__init__.py:74
+msgid "List of selected pictograms which will be available to shared contents"
+msgstr ""
+
+#: ./src/pyams_content/features/renderer/zmi/__init__.py:70
+#: ./src/pyams_content/features/renderer/zmi/templates/renderer-input.pt:4
+msgid "Edit renderer properties"
+msgstr ""
+
+#: ./src/pyams_content/features/renderer/skin/__init__.py:67
+msgid "Hidden content"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/interfaces.py:27
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">no value</span>"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/interfaces.py:28
+#, python-format
+msgid " - {field} ({lang}): <span class=\"text-danger\">no value</span>"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/interfaces.py:29
+#, python-format
+msgid " - {field}: <span class=\"text-danger\">{message}</span>"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:58
+msgid "Content check"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:82
+msgid "No checker available. This content is clean!"
+msgstr ""
+
+#: ./src/pyams_content/features/checker/zmi/__init__.py:78
+#, python-format
+msgid "{0}:"
+msgstr ""
+
+#: ./src/pyams_content/features/preview/zmi/__init__.py:62
+msgid "Content preview"
+msgstr ""
+
+#: ./src/pyams_content/features/preview/zmi/__init__.py:67
+#, python-format
+msgid "{title} ({preview})"
+msgstr ""
+
+#: ./src/pyams_content/features/preview/zmi/__init__.py:68
+msgid "preview"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:40
+msgid "Success"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:41
+msgid "Information"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:42
+msgid "Warning"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:43
+msgid "Danger"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:55
+msgid "Is this alert visible in front-office?"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:59
+msgid "Alert gravity"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:60
+msgid "Alert gravity will affect rendered alert style"
+msgstr ""
+
+#. Default: Heading
+#: ./src/pyams_content/features/alert/interfaces.py:65
+#: ./src/pyams_content/features/alert/zmi/container.py:157
+msgid "alert-header"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:66
+msgid "Short alert header (Alert, Important...)"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:69
+#: ./src/pyams_content/features/alert/zmi/container.py:169
+msgid "Message"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:70
+msgid "Alert message"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:74
+msgid ""
+"Internal link target reference. You can search a reference using '+' followed"
+" by internal number, of by entering text matching content title."
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:86
+msgid "Display start date"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:87
+msgid "First date at which alert should be displayed"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:90
+msgid "Display end date"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:91
+msgid "Last date at which alert should be displayed"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:94
+msgid "Maximum interval"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/interfaces.py:95
+msgid ""
+"Maximum interval between alert displays on a given device, given in hours; "
+"set to 0 to always display the alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/__init__.py:45
+msgid "Add alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/__init__.py:56
+msgid "Add new alert"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/__init__.py:79
+msgid "Edit alert properties"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/container.py:55
+msgid "Alerts"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/container.py:191
+msgid "Alert list"
+msgstr ""
+
+#: ./src/pyams_content/features/alert/zmi/container.py:90
+msgid "No currently defined alert."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:81
+msgid "Add menu..."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:92
+msgid "Add new menu"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:123
+msgid "Edit menu properties"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:110
+msgid "Menu was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/__init__.py:388
+msgid "Link was correctly added."
+msgstr ""
+
+#: ./src/pyams_content/features/menu/zmi/templates/menu-name-cell.pt:7
+msgid "Click to see menu items"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/simple.py:68
+msgid "Simple navigation"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/double.py:68
+msgid "Double navigation"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/simple.py:69
+msgid "Navigation links"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/double.py:69
+msgid "Navigation menus"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/double-preview.pt:15
+#: ./src/pyams_content/features/menu/portlet/navigation/zmi/templates/simple-preview.pt:12
+msgid "Link has no illustration"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:32
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:32
+msgid "Portlet main title"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:35
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:35
+msgid "Subtitle"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/simple.py:36
+#: ./src/pyams_content/features/menu/portlet/navigation/interfaces/double.py:36
+msgid "Portlet subtitle"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:64
+msgid "Menu title"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:65
+msgid "Displayed menu label"
+msgstr ""
+
+#: ./src/pyams_content/features/menu/interfaces/__init__.py:69
+msgid "Direct reference to menu target"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:60
+msgid "Page footer"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:78
+msgid "Edit footer settings"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:152
+msgid ""
+"WARNING: Footer properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:220
+msgid "Footer renderer settings"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/zmi/__init__.py:107
+msgid "Don't inherit parent footer"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/skin/__init__.py:84
+msgid "Hidden footer"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/interfaces/__init__.py:39
+msgid "Footer template"
+msgstr ""
+
+#: ./src/pyams_content/features/footer/interfaces/__init__.py:40
+msgid "Presentation template used for this footer"
+msgstr ""
+
+#: ./src/pyams_content/features/review/__init__.py:181
+#, python-format
+msgid "Request comment: {comment}"
+msgstr ""
+
+#: ./src/pyams_content/features/review/__init__.py:211
+#, python-format
+msgid "A new comment was added on content « {0} »"
+msgstr ""
+
+#: ./src/pyams_content/features/review/__init__.py:168
+#, python-format
+msgid "[{service_name}] A content review is requested"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:32
+msgid "Review request"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:33
+msgid "Reviewer comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:56
+msgid "Comment writer"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:59
+msgid "Content reviewers"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:62
+msgid "Comment type"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:67
+msgid "Comment body"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:70
+msgid "Reviewer comment?"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:86
+msgid "Reviewers list"
+msgstr ""
+
+#: ./src/pyams_content/features/review/interfaces.py:87
+msgid "List of principals which reviewed the comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:61
+msgid "Ask for review..."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:100
+msgid "Content review request"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:165
+msgid "Comments"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:185
+msgid "Review comments"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:71
+msgid "Sought principals"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:72
+msgid "List of principals from which a review is requested"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:75
+msgid "Comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:76
+msgid "Comment associated with this request"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:79
+msgid "Notify all reviewers"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:80
+msgid ""
+"If 'yes', selected reviewers will be notified by mail of your request, even "
+"if they were already members of the reviewers group. Otherwise, only new "
+"reviewers will be notified"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:91
+msgid "Ask for content review"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:146
+msgid "Request successful. No new notification have been sent"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:259
+msgid "Message is mandatory!"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/__init__.py:134
+#, python-format
+msgid "Request successful. {count} new notification(s) have been sent"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:32
+#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:15
+#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:14
+msgid "Review query from"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:38
+#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:21
+#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:20
+msgid "(as reviewer)"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:47
+#: ./src/pyams_content/features/review/zmi/templates/review-comments-json.pt:30
+msgid "Selected reviewers:"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:64
+msgid "Add comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:67
+msgid "Add a comment..."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-comments.pt:73
+msgid "Add this comment"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-add-comment.pt:22
+msgid "just now"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:4
+msgid "[${service_name}] You are requested for a content review"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:30
+msgid "Hello,"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:31
+msgid ""
+"You have been requested by ${sender}, contributor of « ${service_name} » "
+"website, to make a review of a content."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:36
+msgid "${sender} added the following message to his request:"
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:41
+msgid ""
+"To review and comment this publication, please use the following link: "
+"${target}."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:44
+msgid "After reading this content, please use the « Comments » menu entry."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:45
+msgid ""
+"If you don't want to reply to this request, please contact ${sender} directly"
+" by replying to this mail."
+msgstr ""
+
+#: ./src/pyams_content/features/review/zmi/templates/review-notification.pt:47
+msgid "Thank you."
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:66
+msgid "Page header"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:84
+msgid "Edit header settings"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:161
+msgid ""
+"WARNING: Header properties are saved automatically when changing inherit "
+"mode!!"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:229
+msgid "Header renderer settings"
+msgstr ""
+
+#: ./src/pyams_content/features/header/zmi/__init__.py:113
+msgid "Don't inherit parent header"
+msgstr ""
+
+#: ./src/pyams_content/features/header/skin/__init__.py:90
+msgid "Hidden header"
+msgstr ""
--- a/src/pyams_content/reference/pictograms/manager.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/reference/pictograms/manager.py Tue Jul 17 15:09:38 2018 +0200
@@ -66,4 +66,5 @@
terms = [SimpleTerm(v.__name__,
title=II18n(v).query_attribute('title', request=request))
for v in table.values()]
+ terms = sorted(terms, key=lambda x: x.title)
super(SelectedPictogramsVocabulary, self).__init__(terms)
--- a/src/pyams_content/reference/pictograms/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/reference/pictograms/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -139,7 +139,7 @@
def getValue(self, obj):
image = II18n(obj).query_attribute('image', request=self.request)
if image:
- return render_image(image, 32, 32, timestamp=True)
+ return render_image(image, 32, 32, self.request, timestamp=True)
return '--'
--- a/src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/reference/pictograms/zmi/templates/manager-selection.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,8 +1,8 @@
<div class="pictograms-manager" i18n:domain="pyams_content"
data-ams-plugins="pyams_content"
data-ams-plugin-pyams_content-async="false"
- tal:attributes="data-ams-plugin-pyams_content-src extension:resource_path('pyams_content.skin:pyams_content');
- data-ams-plugin-pyams_content-css extension:resource_path('pyams_content.skin:pyams_content_css');">
+ tal:attributes="data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.skin:pyams_content');
+ data-ams-plugin-pyams_content-css tales:resource_path('pyams_content.skin:pyams_content_css');">
<fieldset class="bordered margin-x-20 col-md-5">
<legend class="inner" i18n:translate="">Available pictograms</legend>
<div class="droppable sortable height-min-100 pictograms available-pictograms viewport-y viewport-500"
@@ -15,7 +15,7 @@
tal:attributes="value pictogram.__name__" />
<div class="pull-right margin-right-5">
<a data-toggle="modal"
- tal:attributes="data-ams-url extension:absolute_url(pictogram, 'properties.html')">
+ tal:attributes="data-ams-url tales:absolute_url(pictogram, 'properties.html')">
<i class="fa fa-fw fa-search hint opaque baseline"
data-ams-hint-gravity="se" data-ams-hint-offset="3"
title="Display pictogram properties" i18n:attributes="title"></i>
@@ -24,7 +24,7 @@
<div class="width-50 text-center pull-left margin-right-10">
<tal:var define="img i18n:pictogram.image"
condition="img"
- content="structure extension:thumbnail(img, 48, 48)" />
+ content="structure tales:thumbnail(img, 48, 48)" />
</div>
<span tal:content="i18n:pictogram.title">Title</span>
</div>
@@ -42,7 +42,7 @@
tal:attributes="value pictogram.__name__" />
<div class="pull-right margin-right-5">
<a data-toggle="modal"
- tal:attributes="data-ams-url extension:absolute_url(pictogram, 'properties.html')">
+ tal:attributes="data-ams-url tales:absolute_url(pictogram, 'properties.html')">
<i class="fa fa-fw fa-search hint opaque baseline"
data-ams-hint-gravity="se" data-ams-hint-offset="3"
title="Display pictogram properties" i18n:attributes="title"></i>
@@ -51,7 +51,7 @@
<div class="width-50 text-center pull-left margin-right-10">
<tal:var define="img i18n:pictogram.image"
condition="img"
- content="structure extension:thumbnail(img, 48, 48)" />
+ content="structure tales:thumbnail(img, 48, 48)" />
</div>
<span tal:content="i18n:pictogram.title">Title</span>
</div>
--- a/src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/reference/pictograms/zmi/templates/pictogram-header.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,7 +1,7 @@
<div class="padding-5" i18n:domain="pyams_content">
<tal:var define="image i18n:context.image"
condition="image"
- content="structure extension:thumbnail(image, 32, 32)" />
+ content="structure tales:thumbnail(image, 32, 32)" />
<span class="padding-left-5" tal:define="header i18n:context.header"
i18n:translate="">Default header:
<strong i18n:name="header" tal:content="header or '--'" />
--- a/src/pyams_content/root/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/root/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,7 +18,8 @@
# import standard library
# import interfaces
-from pyams_content.component.illustration import IIllustrationTarget
+from pyams_content.component.illustration.interfaces import IIllustrationTarget
+from pyams_content.component.theme.interfaces import ITagsManagerTarget
from pyams_content.features.alert.interfaces import IAlertTarget
from pyams_content.features.footer.interfaces import IFooterTarget
from pyams_content.features.header.interfaces import IHeaderTarget
@@ -27,8 +28,8 @@
from pyams_content.root.interfaces import ISiteRootRoles, ISiteRootConfiguration, ISiteRoot, \
ISiteRootToolsConfiguration, ISiteRootBackOfficeConfiguration
from pyams_form.interfaces.form import IFormContextPermissionChecker
-from pyams_portal.interfaces import IPortalContext
-from pyams_security.interfaces import IDefaultProtectionPolicy, IGrantedRoleEvent, ISecurityManager
+from pyams_portal.interfaces import IPortalContext, DESIGNER_ROLE
+from pyams_security.interfaces import IDefaultProtectionPolicy, IGrantedRoleEvent, ISecurityManager, SYSTEM_ADMIN_ROLE
from pyams_skin.interfaces.configuration import IConfiguration, IBackOfficeConfiguration
from pyams_utils.interfaces import MANAGE_SYSTEM_PERMISSION
from pyams_utils.interfaces.site import ISiteRootFactory
@@ -50,19 +51,19 @@
from pyams_content import _
-@implementer(IDefaultProtectionPolicy, ISiteRoot, ISiteRootRoles, IPortalContext,
+@implementer(IDefaultProtectionPolicy, ISiteRoot, ISiteRootRoles, IPortalContext, ITagsManagerTarget,
IIllustrationTarget, IHeaderTarget, IFooterTarget, IAlertTarget, IPreviewTarget)
class SiteRoot(ProtectedObject, BaseSiteRoot, UserSkinnableContent):
"""Main site root"""
- __roles__ = ('system.Manager', WEBMASTER_ROLE, OPERATOR_ROLE, 'pyams.TemplatesManager')
+ __roles__ = (SYSTEM_ADMIN_ROLE, WEBMASTER_ROLE, OPERATOR_ROLE, DESIGNER_ROLE)
roles_interface = ISiteRootRoles
managers = RolePrincipalsFieldProperty(ISiteRootRoles['managers'])
webmasters = RolePrincipalsFieldProperty(ISiteRootRoles['webmasters'])
operators = RolePrincipalsFieldProperty(ISiteRootRoles['operators'])
- templates_managers = RolePrincipalsFieldProperty(ISiteRootRoles['templates_managers'])
+ designers = RolePrincipalsFieldProperty(ISiteRootRoles['designers'])
content_name = _("Site root")
@@ -91,7 +92,7 @@
def handle_granted_role(event):
"""Add principals to operators group when a role is granted"""
role_id = event.role_id
- if (role_id == 'pyams.Operator') or (not role_id.startswith('pyams.')):
+ if (role_id == OPERATOR_ROLE) or (not role_id.startswith('pyams.')):
return
root = get_parent(event.object, ISiteRoot)
if not root.operators:
--- a/src/pyams_content/root/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/root/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,6 +16,9 @@
# import standard library
# import interfaces
+from pyams_content.interfaces import WEBMASTER_ROLE, OPERATOR_ROLE
+from pyams_portal.interfaces import DESIGNER_ROLE
+from pyams_security.interfaces import SYSTEM_ADMIN_ROLE
from pyams_skin.interfaces.configuration import IConfiguration, IBackOfficeConfiguration
from pyams_utils.interfaces.site import ISiteRoot as ISiteRootBase
@@ -34,20 +37,20 @@
"""Main site roles"""
managers = PrincipalsSet(title=_("Site managers"),
- role_id='system.Manager',
+ role_id=SYSTEM_ADMIN_ROLE,
required=False)
webmasters = PrincipalsSet(title=_("Webmasters"),
- role_id='pyams.Webmaster',
+ role_id=WEBMASTER_ROLE,
required=False)
- templates_managers = PrincipalsSet(title=_("Templates managers"),
- role_id='pyams.TemplatesManager',
- required=False)
+ designers = PrincipalsSet(title=_("Templates managers"),
+ role_id=DESIGNER_ROLE,
+ required=False)
operators = Principal(title=_("Operators group"),
description=_("Name of group containing all roles owners"),
- role_id='pyams.Operator',
+ role_id=OPERATOR_ROLE,
required=False)
--- a/src/pyams_content/root/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/root/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -51,7 +51,7 @@
from pyams_skin.viewlet.menu import MenuItem
from pyams_template.template import template_config
from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
-from pyams_utils.list import unique
+from pyams_utils.list import unique_iter
from pyams_utils.registry import get_utility, get_all_utilities_registered_for
from pyams_viewlet.manager import viewletmanager_config
from pyams_viewlet.viewlet import viewlet_config
@@ -172,13 +172,14 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = Eq(catalog['parents'], intids.register(tool)) & \
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Any(catalog['workflow_state'], workflow.waiting_states)
params = params | query if params else query
- return filter(self.check_access,
- unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
- key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date')))))
+ yield from filter(self.check_access,
+ unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
+ key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date')))))
def check_access(self, content):
if self.request.has_permission(MANAGE_SITE_ROOT_PERMISSION, context=content):
@@ -218,13 +219,14 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = Eq(catalog['parents'], intids.register(tool)) & \
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Any(catalog['workflow_state'], workflow.waiting_states) & \
Eq(catalog['workflow_principal'], self.request.principal.id)
params = params | query if params else query
- return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
- key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date'))))
+ yield from unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
+ key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date'))))
#
@@ -260,11 +262,11 @@
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)))
params = params | query if params else query
- return unique(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- limit=50,
- sort_index='modified_date',
- reverse=True))))
+ yield from unique_iter(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ limit=50,
+ sort_index='modified_date',
+ reverse=True))))
#
@@ -321,10 +323,10 @@
Any(catalog['content_type'], CONTENT_TYPES.keys()),
Any(catalog['oid'], profile.favorites or ()))
params = params | query if params else query
- return unique(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True))))
+ yield from unique_iter(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True))))
@pagelet_config(name='my-favorites.html', context=ISiteRoot, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -379,13 +381,14 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = And(Eq(catalog['parents'], intids.register(tool)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Eq(catalog['workflow_state'], workflow.initial_state))
params = params | query if params else query
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-preparations.html', context=ISiteRoot, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -440,13 +443,14 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = And(Eq(catalog['parents'], intids.register(tool)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Any(catalog['workflow_state'], workflow.waiting_states))
params = params | query if params else query
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-submissions.html', context=ISiteRoot, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -501,13 +505,14 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = And(Eq(catalog['parents'], intids.register(tool)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Any(catalog['workflow_state'], workflow.published_states))
params = params | query if params else query
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-publications.html', context=ISiteRoot, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -562,13 +567,14 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = And(Eq(catalog['parents'], intids.register(tool)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Any(catalog['workflow_state'], workflow.retired_states))
params = params | query if params else query
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-retired-contents.html', context=ISiteRoot, layer=IPyAMSLayer,
@@ -625,18 +631,19 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = And(Eq(catalog['parents'], intids.register(tool)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], principal_id),
Eq(catalog['role:contributor'], principal_id)),
Any(catalog['workflow_state'], workflow.archived_states))
params = params | query if params else query
- return unique(map(lambda x: sorted((version for version in
- IWorkflowVersions(x).get_versions(IWorkflow(x).archived_states)
- if principal_id in (version.owner | version.contributors)),
- key=lambda x: IWorkflowState(x).version_id,
- reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True))))
+ yield from unique_iter(map(lambda x: sorted((version for version in
+ IWorkflowVersions(x).get_versions(IWorkflow(x).archived_states)
+ if principal_id in (version.owner | version.contributors)),
+ key=lambda x: IWorkflowState(x).version_id,
+ reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True))))
@pagelet_config(name='my-archived-contents.html', context=ISiteRoot, layer=IPyAMSLayer,
@@ -714,12 +721,13 @@
for tool in get_all_utilities_registered_for(IBaseSharedTool):
workflow = IWorkflow(tool)
query = And(Eq(catalog['parents'], intids.register(tool)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Any(catalog['workflow_state'], workflow.published_states))
params = params | query if params else query
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- limit=50,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ limit=50,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='all-publications.html', context=ISiteRoot, layer=IPyAMSLayer,
@@ -782,10 +790,10 @@
query = Eq(catalog['parents'], intids.register(tool)) & \
Any(catalog['content_type'], CONTENT_TYPES.keys())
params = params | query if params else query
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- limit=50,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ limit=50,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='all-updates.html', context=ISiteRoot, layer=IPyAMSLayer,
--- a/src/pyams_content/root/zmi/templates/advanced-search.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/root/zmi/templates/advanced-search.pt Tue Jul 17 15:09:38 2018 +0200
@@ -22,7 +22,7 @@
accept view.accept;
autocomplete view.autocomplete;
class view.css_class;
- data-ams-data extension:object_data(view);
+ data-ams-data tales:object_data(view);
data-ams-form-handler view.get_ajax_handler() | nothing;
data-ams-form-options view.get_form_options() | nothing;
data-ams-form-submit-target view.form_target | nothing;
@@ -75,7 +75,7 @@
<div class="col-md-9">
<label class="input"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -96,7 +96,7 @@
<div class="col-md-4">
<label class="input"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -116,7 +116,7 @@
<div class="col-md-3">
<label class="input"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -131,7 +131,7 @@
<label class="input"
tal:define="widget view.widgets['created_after']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -143,7 +143,7 @@
<label class="input"
tal:define="widget view.widgets['created_before']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -157,7 +157,7 @@
<label class="input"
tal:define="widget view.widgets['modified_after']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -169,7 +169,7 @@
<label class="input"
tal:define="widget view.widgets['modified_before']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
--- a/src/pyams_content/shared/blog/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/blog/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,7 +18,7 @@
# import interfaces
from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
-from pyams_content.component.theme.interfaces import IThemesTarget
+from pyams_content.component.theme.interfaces import ITagsTarget, IThemesTarget
from pyams_content.features.preview.interfaces import IPreviewTarget
from pyams_content.features.review.interfaces import IReviewTarget
from pyams_content.shared.blog.interfaces import IWfBlogPost, BLOG_CONTENT_TYPE, BLOG_CONTENT_NAME, IBlogPost, \
@@ -31,7 +31,7 @@
from zope.interface import implementer, provider
-@implementer(IWfBlogPost, IParagraphContainerTarget, IThemesTarget, IIllustrationTarget,
+@implementer(IWfBlogPost, IParagraphContainerTarget, ITagsTarget, IThemesTarget, IIllustrationTarget,
ILinkIllustrationTarget, IPreviewTarget, IReviewTarget)
class WfBlogPost(WfSharedContent):
"""Base blog post"""
--- a/src/pyams_content/shared/common/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,12 +17,14 @@
# import interfaces
from hypatia.interfaces import ICatalog
-from pyams_content.interfaces import IBaseContentInfo
+from pyams_content.interfaces import IBaseContentInfo, OWNER_ROLE, MANAGER_ROLE, CONTRIBUTOR_ROLE, READER_ROLE, \
+ GUEST_ROLE
from pyams_content.features.checker.interfaces import IContentChecker, MISSING_VALUE, MISSING_LANG_VALUE, ERROR_VALUE
from pyams_content.features.review.interfaces import IReviewComments
from pyams_content.shared.common.interfaces import IWfSharedContent, IWfSharedContentRoles, ISharedContent, \
IBaseSharedTool, ISharedSite, IWfSharedContentFactory
from pyams_i18n.interfaces import II18nManager, II18n
+from pyams_portal.interfaces import DESIGNER_ROLE
from pyams_security.interfaces import IDefaultProtectionPolicy
from pyams_sequence.interfaces import ISequentialIdTarget, ISequentialIdInfo
from pyams_utils.interfaces import VIEW_PERMISSION
@@ -113,12 +115,13 @@
class WfSharedContent(ProtectedObject, Persistent, Contained, I18nManagerMixin):
"""Shared data content class"""
- __roles__ = ('pyams.Owner', 'pyams.Manager', 'pyams.Contributors', 'pyams.Reader', 'pyams.Guest')
+ __roles__ = (OWNER_ROLE, MANAGER_ROLE, CONTRIBUTOR_ROLE, DESIGNER_ROLE, READER_ROLE, GUEST_ROLE)
roles_interface = IWfSharedContentRoles
owner = RolePrincipalsFieldProperty(IWfSharedContentRoles['owner'])
managers = RolePrincipalsFieldProperty(IWfSharedContentRoles['managers'])
contributors = RolePrincipalsFieldProperty(IWfSharedContentRoles['contributors'])
+ designers = RolePrincipalsFieldProperty(IWfSharedContentRoles['designers'])
readers = RolePrincipalsFieldProperty(IWfSharedContentRoles['readers'])
guests = RolePrincipalsFieldProperty(IWfSharedContentRoles['guests'])
--- a/src/pyams_content/shared/common/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,7 +18,7 @@
# import interfaces
from pyams_content.interfaces import IBaseContent, MANAGE_CONTENT_PERMISSION, OWNER_ROLE, MANAGER_ROLE, \
READER_ROLE, GUEST_ROLE, WEBMASTER_ROLE, PILOT_ROLE, CONTRIBUTOR_ROLE
-from pyams_portal.interfaces import IPortalContext
+from pyams_portal.interfaces import IPortalContext, DESIGNER_ROLE
from pyams_workflow.interfaces import IWorkflowManagedContent
from zope.container.interfaces import IContainer
@@ -65,6 +65,11 @@
role_id=CONTRIBUTOR_ROLE,
required=False)
+ designers = PrincipalsSet(title=_("Designers"),
+ description=_("Designers are users which are allowed to manage presentation templates"),
+ role_id=DESIGNER_ROLE,
+ required=False)
+
class ISharedSite(IBaseContent, IDeletableElement):
"""Shared site interface"""
@@ -161,7 +166,11 @@
required=False)
-class IWfSharedContentPortalContext(IWfSharedContent, IPortalContext):
+class IBaseContentPortalContext(IPortalContext):
+ """Content portal context interface"""
+
+
+class IWfSharedContentPortalContext(IWfSharedContent, IBaseContentPortalContext):
"""Shared content with portal support"""
@@ -188,9 +197,14 @@
contributors = PrincipalsSet(title=_("Contributors"),
description=_("Contributors are users which are allowed to update this content in "
"addition to it's owner"),
- role_id='pyams.Contributor',
+ role_id=CONTRIBUTOR_ROLE,
required=False)
+ designers = PrincipalsSet(title=_("Designers"),
+ description=_("Designers are users which are allowed to manage presentation templates"),
+ role_id=DESIGNER_ROLE,
+ required=False)
+
readers = PrincipalsSet(title=_("Readers"),
description=_("Readers are users which are asked to verify and comment contents before "
"they are published"),
--- a/src/pyams_content/shared/common/interfaces/types.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/interfaces/types.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,13 +16,14 @@
# import standard library
# import interfaces
-from pyams_content.shared.common.interfaces import ISharedTool
+from pyams_content.reference.pictograms.interfaces import PICTOGRAM_VOCABULARY
+from pyams_content.shared.common.interfaces import ISharedTool, IWfSharedContent, IBaseContentPortalContext
from pyams_portal.interfaces import IPortalContext
from zope.container.interfaces import IContainer
from zope.location.interfaces import ILocation
# import packages
-from pyams_i18n.schema import I18nTextLineField, I18nThumbnailImageField
+from pyams_i18n.schema import I18nTextLineField
from zope.container.constraints import contains
from zope.interface import Attribute
from zope.schema import TextLine, List, Choice
@@ -30,6 +31,12 @@
from pyams_content import _
+ALL_DATA_TYPES_VOCABULARY = 'PyAMS all data types'
+DATA_TYPES_VOCABULARY = 'PyAMS data types'
+DATA_SUBTYPES_VOCABULARY = 'PyAMS data subtypes'
+DATA_TYPE_FIELDS_VOCABULARY = 'PyAMS types interface fields'
+
+
class IBaseDataType(ILocation):
"""Data interface for data-types and sub-types"""
@@ -65,9 +72,10 @@
description=_("Label used to announce next date for this type"),
required=False)
- pictogram = I18nThumbnailImageField(title=_("Pictogram"),
- description=_("Image associated to this data type"),
- required=False)
+ pictogram = Choice(title=_("Pictogram"),
+ description=_("Pictogram associated with this data type"),
+ vocabulary=PICTOGRAM_VOCABULARY,
+ required=False)
class ISubType(IBaseDataType):
@@ -81,7 +89,7 @@
field_names = List(title=_("Field names"),
description=_("List of fields associated with this data type"),
- value_type=Choice(vocabulary='PyAMS types interface fields'))
+ value_type=Choice(vocabulary=DATA_TYPE_FIELDS_VOCABULARY))
#
@@ -105,3 +113,23 @@
class ITypedSharedToolPortalContext(ITypedSharedTool, IPortalContext):
"""Typed shared tool with portal context"""
+
+
+#
+# Typed content interfaces
+#
+
+class IWfTypedSharedContent(IWfSharedContent):
+ """Typed shared content"""
+
+ data_type = Choice(title=_("Data type"),
+ description=_("Type of content data"),
+ required=True,
+ vocabulary=DATA_TYPES_VOCABULARY)
+
+ def get_data_type(self):
+ """Get associated data type"""
+
+
+class IWfTypedSharedContentPortalContext(IWfTypedSharedContent, IBaseContentPortalContext):
+ """Shared content with portal support"""
--- a/src/pyams_content/shared/common/manager.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/manager.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,6 +19,7 @@
from pyams_content.interfaces import WEBMASTER_ROLE, PILOT_ROLE, MANAGER_ROLE, CONTRIBUTOR_ROLE
from pyams_content.shared.common.interfaces import ISharedToolContainer, IBaseSharedTool, ISharedTool, ISharedToolRoles, \
ISharedContentFactory
+from pyams_portal.interfaces import DESIGNER_ROLE
from pyams_security.interfaces import IDefaultProtectionPolicy
from pyams_workflow.interfaces import IWorkflow
from zope.annotation.interfaces import IAttributeAnnotatable
@@ -46,7 +47,7 @@
class BaseSharedTool(ProtectedObject, I18nManagerMixin):
"""Base shared tool class"""
- __roles__ = (WEBMASTER_ROLE, PILOT_ROLE, MANAGER_ROLE, CONTRIBUTOR_ROLE)
+ __roles__ = (WEBMASTER_ROLE, PILOT_ROLE, MANAGER_ROLE, DESIGNER_ROLE, CONTRIBUTOR_ROLE)
roles_interface = ISharedToolRoles
@@ -54,6 +55,7 @@
pilots = RolePrincipalsFieldProperty(ISharedToolRoles['pilots'])
managers = RolePrincipalsFieldProperty(ISharedToolRoles['managers'])
contributors = RolePrincipalsFieldProperty(ISharedToolRoles['contributors'])
+ designers = RolePrincipalsFieldProperty(ISharedToolRoles['designers'])
title = FieldProperty(IBaseSharedTool['title'])
short_name = FieldProperty(IBaseSharedTool['short_name'])
--- a/src/pyams_content/shared/common/portal.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/portal.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,7 @@
# import standard library
# import interfaces
-from pyams_content.shared.common.interfaces import IBaseSharedTool, IWfSharedContentPortalContext
+from pyams_content.shared.common.interfaces import IBaseSharedTool, IBaseContentPortalContext
from pyams_portal.interfaces import IPortalPage, PORTAL_PAGE_KEY
# import packages
@@ -37,7 +37,7 @@
return get_parent(self, IBaseSharedTool, allow_context=False)
-@adapter_config(context=IWfSharedContentPortalContext, provides=IPortalPage)
+@adapter_config(context=IBaseContentPortalContext, provides=IPortalPage)
def shared_content_portal_page_adapter(context):
"""Shared content portal page adapter"""
return get_annotation_adapter(context, PORTAL_PAGE_KEY, SharedContentPortalPage)
--- a/src/pyams_content/shared/common/skin/oid.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/skin/oid.py Tue Jul 17 15:09:38 2018 +0200
@@ -23,7 +23,7 @@
from zope.traversing.interfaces import ITraversable
# import packages
-from pyams_sequence.utility import get_reference_target
+from pyams_sequence.reference import get_reference_target
from pyams_utils.adapter import adapter_config, ContextRequestAdapter
from pyams_utils.registry import get_utility
from pyramid.exceptions import NotFound
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/common/skin/opengraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,97 @@
+#
+# 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'
+
+
+# import standard library
+
+# import interfaces
+from pyams_content.component.illustration import IIllustration, IIllustrationTarget
+from pyams_content.component.theme.interfaces import ITagsInfo
+from pyams_content.shared.common.interfaces import IWfSharedContent
+from pyams_i18n.interfaces import II18n, INegotiator, II18nManager
+from pyams_file.interfaces import IThumbnails
+from pyams_skin.interfaces.configuration import IConfiguration
+from pyams_skin.interfaces.metas import IHTMLContentMetas
+from pyams_skin.layer import IPyAMSUserLayer
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
+from zope.dublincore.interfaces import IZopeDublinCore
+
+# import packages
+from pyams_skin.metas import PropertyMeta
+from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
+from pyams_utils.registry import get_utility
+from pyams_utils.traversing import get_parent
+from pyams_utils.url import canonical_url, absolute_url
+from zope.interface import Interface
+
+
+@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('of:locale', lang)
+ for lang in II18nManager(context).languages or ():
+ yield PropertyMeta('of:locale:alternate', lang)
--- a/src/pyams_content/shared/common/types.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/types.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,21 +19,26 @@
from pyams_content.component.extfile.interfaces import IExtFileContainerTarget
from pyams_content.component.links.interfaces import ILinkContainerTarget
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
+from pyams_content.component.theme.interfaces import IThemesTarget, IThemesInfo
from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
from pyams_content.shared.common.interfaces.types import IDataType, ISubType, IBaseDataType, ITypedSharedTool, \
- ITypedDataManager, DATA_MANAGER_ANNOTATION_KEY
+ ITypedDataManager, DATA_MANAGER_ANNOTATION_KEY, DATA_TYPES_VOCABULARY, DATA_TYPE_FIELDS_VOCABULARY, \
+ IWfTypedSharedContent, DATA_SUBTYPES_VOCABULARY
from pyams_form.interfaces.form import IFormContextPermissionChecker
+from pyams_i18n.interfaces import II18n
+from zope.lifecycleevent.interfaces import IObjectAddedEvent
from zope.location.interfaces import ISublocations
from zope.traversing.interfaces import ITraversable
# import packages
from persistent import Persistent
+from pyams_content.shared.common import WfSharedContent
from pyams_content.shared.common.manager import SharedTool
-from pyams_i18n.property import I18nFileProperty
from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
from pyams_utils.request import check_request
from pyams_utils.traversing import get_parent
from pyams_utils.vocabulary import vocabulary_config
+from pyramid.events import subscriber
from zope.container.contained import Contained
from zope.container.ordered import OrderedContainer
from zope.interface import implementer
@@ -52,7 +57,7 @@
single_label = FieldProperty(IBaseDataType['single_label'])
seeall_label = FieldProperty(IBaseDataType['seeall_label'])
next_label = FieldProperty(IBaseDataType['next_label'])
- pictogram = I18nFileProperty(IBaseDataType['pictogram'])
+ pictogram = FieldProperty(IBaseDataType['pictogram'])
@implementer(ISubType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget)
@@ -60,7 +65,7 @@
"""Data sub-type persistent class"""
-@implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget)
+@implementer(IDataType, IParagraphContainerTarget, IExtFileContainerTarget, ILinkContainerTarget, IThemesTarget)
class DataType(BaseDataType, OrderedContainer):
"""Data type persistent class"""
@@ -108,16 +113,83 @@
return ITypedDataManager(self.context).values()
-@vocabulary_config(name='PyAMS types interface fields')
-class TypedSharedToolDataTypesFields(SimpleVocabulary):
- """Typed shared tool data types fields vocabulary"""
+#
+# Typed shared content
+#
+
+@implementer(IWfTypedSharedContent)
+class WfTypedSharedContent(WfSharedContent):
+ """Typed shared content"""
+
+ data_type = FieldProperty(IWfTypedSharedContent['data_type'])
+
+ def get_data_type(self):
+ if not self.data_type:
+ return None
+ tool = get_parent(self, ITypedSharedTool)
+ if tool is not None:
+ manager = ITypedDataManager(tool)
+ return manager.get(self.data_type)
+
+
+@subscriber(IObjectAddedEvent, context_selector=IWfTypedSharedContent)
+def handle_added_typed_shared_content(event):
+ """Automatically assign themes for newly created contents"""
+ content = event.object
+ if not IThemesTarget.providedBy(content):
+ return
+ data_type = content.get_data_type()
+ if data_type is not None:
+ IThemesInfo(content).themes = IThemesInfo(data_type).themes
+
+
+#
+# Data types vocabularies
+#
+
+@vocabulary_config(name=DATA_TYPES_VOCABULARY)
+class TypedSharedToolDataTypesVocabulary(SimpleVocabulary):
+ """Typed shared tool data types vocabulary"""
def __init__(self, context):
terms = []
parent = get_parent(context, ITypedSharedTool)
if parent is not None:
request = check_request()
+ manager = ITypedDataManager(parent)
+ terms = [SimpleTerm(datatype.__name__,
+ title=II18n(datatype).query_attribute('label', request=request))
+ for datatype in manager.values()]
+ super(TypedSharedToolDataTypesVocabulary, self).__init__(terms)
+
+
+@vocabulary_config(name=DATA_SUBTYPES_VOCABULARY)
+class TypedSharedToolDataSubtypesVocabulary(SimpleVocabulary):
+ """Typed shared tool data subtypes vocabulary"""
+
+ def __init__(self, context):
+ terms = []
+ if IWfTypedSharedContent.providedBy(context):
+ parent = get_parent(context, ITypedSharedTool)
+ if parent is not None:
+ request = check_request()
+ datatype = ITypedDataManager(parent).get(context.data_type)
+ terms = [SimpleTerm(subtype.__name__,
+ title=II18n(subtype).query_attribute('label', request=request))
+ for subtype in datatype.values()]
+ super(TypedSharedToolDataSubtypesVocabulary, self).__init__(terms)
+
+
+@vocabulary_config(name=DATA_TYPE_FIELDS_VOCABULARY)
+class TypedSharedToolDataTypesFieldsVocabulary(SimpleVocabulary):
+ """Typed shared tool data types fields vocabulary"""
+
+ def __init__(self, context):
+ terms = []
+ parent = get_parent(context, ITypedSharedTool)
+ if (parent is not None) and parent.shared_content_types_fields:
+ request = check_request()
translate = request.localizer.translate
terms = [SimpleTerm(name, title=translate(field.title))
for name, field in getFieldsInOrder(parent.shared_content_types_fields)]
- super(TypedSharedToolDataTypesFields, self).__init__(terms)
+ super(TypedSharedToolDataTypesFieldsVocabulary, self).__init__(terms)
--- a/src/pyams_content/shared/common/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -82,8 +82,6 @@
super(SharedContentAddForm, self).updateWidgets(prefix)
if 'title' in self.widgets:
self.widgets['title'].description = _("This title can be modified afterwards")
- if 'notepad' in self.widgets:
- self.widgets['notepad'].widget_css_class = 'textarea'
def create(self, data):
return self.context.shared_content_factory.content_class()
@@ -290,11 +288,6 @@
edit_permission = CREATE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(WfSharedContentDuplicateForm, self).updateWidgets(prefix)
- if 'comment' in self.widgets:
- self.widgets['comment'].widget_css_class = 'textarea'
-
def updateActions(self):
super(WfSharedContentDuplicateForm, self).updateActions()
if 'duplicate' in self.actions:
--- a/src/pyams_content/shared/common/zmi/dashboard.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/dashboard.py Tue Jul 17 15:09:38 2018 +0200
@@ -52,7 +52,7 @@
from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
from pyams_utils.date import format_datetime, SH_DATETIME_FORMAT
from pyams_utils.fanstatic import get_resource_path
-from pyams_utils.list import unique
+from pyams_utils.list import unique_iter
from pyams_utils.property import cached_property
from pyams_utils.registry import get_utility
from pyams_utils.timezone import tztime
@@ -340,12 +340,13 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = Eq(catalog['parents'], intids.register(self.context)) & \
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Any(catalog['workflow_state'], workflow.waiting_states)
- return filter(self.check_access,
- unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
- key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date')))))
+ yield from filter(self.check_access,
+ unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
+ key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date')))))
def check_access(self, content):
if self.request.has_permission(MANAGE_SITE_ROOT_PERMISSION, context=content):
@@ -383,12 +384,13 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = Eq(catalog['parents'], intids.register(self.context)) & \
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Any(catalog['workflow_state'], workflow.waiting_states) & \
Eq(catalog['workflow_principal'], self.request.principal.id)
- return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
- key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date'))))
+ yield from unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
+ key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date'))))
#
@@ -421,12 +423,12 @@
Any(catalog['content_type'], CONTENT_TYPES.keys()),
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)))
- return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
- key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- limit=50,
- sort_index='modified_date',
- reverse=True))))
+ yield from unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
+ key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ limit=50,
+ sort_index='modified_date',
+ reverse=True))))
#
@@ -516,10 +518,10 @@
params = And(Eq(catalog['parents'], intids.register(self.context)),
Any(catalog['content_type'], CONTENT_TYPES.keys()),
Any(catalog['oid'], profile.favorites or ()))
- return unique(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True))))
+ yield from unique_iter(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True))))
@pagelet_config(name='my-favorites.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -576,12 +578,13 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = And(Eq(catalog['parents'], intids.register(self.context)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Eq(catalog['workflow_state'], workflow.initial_state))
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-preparations.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -638,12 +641,13 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = And(Eq(catalog['parents'], intids.register(self.context)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Any(catalog['workflow_state'], workflow.waiting_states))
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-submissions.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -700,12 +704,13 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = And(Eq(catalog['parents'], intids.register(self.context)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Any(catalog['workflow_state'], workflow.published_states))
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-publications.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -762,12 +767,13 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = And(Eq(catalog['parents'], intids.register(self.context)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], self.request.principal.id),
Eq(catalog['role:contributor'], self.request.principal.id)),
Any(catalog['workflow_state'], workflow.retired_states))
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='my-retired-contents.html', context=IBaseSharedTool, layer=IPyAMSLayer,
@@ -826,17 +832,18 @@
principal_id = self.request.principal.id
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = And(Eq(catalog['parents'], intids.register(self.context)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Or(Eq(catalog['role:owner'], principal_id),
Eq(catalog['role:contributor'], principal_id)),
Any(catalog['workflow_state'], workflow.archived_states))
- return unique(map(lambda x: sorted((version for version in
- IWorkflowVersions(x).get_versions(workflow.archived_states)
- if principal_id in (version.owner | version.contributors)),
- key=lambda x: IWorkflowState(x).version_id,
- reverse=True)[0],
- CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index='modified_date',
- reverse=True))))
+ yield from unique_iter(map(lambda x: sorted((version for version in
+ IWorkflowVersions(x).get_versions(workflow.archived_states)
+ if principal_id in (version.owner | version.contributors)),
+ key=lambda x: IWorkflowState(x).version_id,
+ reverse=True)[0],
+ CatalogResultSet(CatalogQuery(catalog).query(params,
+ sort_index='modified_date',
+ reverse=True))))
@pagelet_config(name='my-archived-contents.html', context=IBaseSharedTool, layer=IPyAMSLayer,
@@ -916,11 +923,12 @@
catalog = get_utility(ICatalog)
workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
params = And(Eq(catalog['parents'], intids.register(self.context)),
+ Any(catalog['content_type'], CONTENT_TYPES.keys()) & \
Any(catalog['workflow_state'], workflow.published_states))
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- limit=50,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ limit=50,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='all-publications.html', context=IBaseSharedTool, layer=IPyAMSLayer,
@@ -984,10 +992,10 @@
catalog = get_utility(ICatalog)
params = Eq(catalog['parents'], intids.register(self.context)) & \
Any(catalog['content_type'], CONTENT_TYPES.keys())
- return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
- limit=50,
- sort_index='modified_date',
- reverse=True)))
+ yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params,
+ limit=50,
+ sort_index='modified_date',
+ reverse=True)))
@pagelet_config(name='all-updates.html', context=IBaseSharedTool, layer=IPyAMSLayer,
--- a/src/pyams_content/shared/common/zmi/manager.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/manager.py Tue Jul 17 15:09:38 2018 +0200
@@ -120,7 +120,7 @@
class SharedToolPropertiesHelpAdapter(FormHelp):
"""Shared tool properties help adapter"""
- permission = MANAGE_TOOL_PERMISSION
+ permission = MANAGE_SYSTEM_PERMISSION
header = _("WARNING")
status = 'danger'
--- a/src/pyams_content/shared/common/zmi/portal.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/portal.py Tue Jul 17 15:09:38 2018 +0200
@@ -20,6 +20,7 @@
from pyams_content.shared.common.interfaces import IWfSharedContentPortalContext, ISharedToolPortalContext, ISharedTool
from pyams_content.shared.common.interfaces.types import ITypedSharedToolPortalContext
from pyams_form.interfaces.form import IFormHelp
+from pyams_portal.interfaces import MANAGE_TEMPLATE_PERMISSION
from pyams_skin.layer import IPyAMSLayer
from pyams_zmi.layer import IAdminLayer
@@ -27,7 +28,6 @@
from pyams_form.form import ajax_config
from pyams_form.help import FormHelp
from pyams_pagelet.pagelet import pagelet_config
-from pyams_portal import MANAGE_TEMPLATE_PERMISSION
from pyams_portal.zmi.page import PortalContextTemplatePropertiesEditForm
from pyams_utils.adapter import adapter_config
--- a/src/pyams_content/shared/common/zmi/properties.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/properties.py Tue Jul 17 15:09:38 2018 +0200
@@ -74,7 +74,8 @@
@pagelet_config(name='properties.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
-@ajax_config(name='properties.json', context=IWfSharedContent, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='properties.json', context=IWfSharedContent, layer=IPyAMSLayer,
+ permission=MANAGE_CONTENT_PERMISSION)
@implementer(IPropertiesEditForm, IWidgetForm, IInnerPage)
class SharedContentPropertiesEditForm(AdminEditForm):
"""Shared content properties edit form"""
@@ -89,10 +90,6 @@
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'
def get_ajax_output(self, changes):
updated = changes.get(IBaseContent, ())
--- a/src/pyams_content/shared/common/zmi/rename.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/rename.py Tue Jul 17 15:09:38 2018 +0200
@@ -84,11 +84,12 @@
def updateWidgets(self, prefix=None):
super(SiteContainerRenameForm, self).updateWidgets(prefix)
self.widgets['__name__'].label = _("Item URL part")
+ self.widgets['__name__'].description = _("URL part used to access this content")
def update_content(self, content, data):
data = data.get(self, data)
old_name = content.__name__
- new_name = data['__name__'] = translate_string(content.__name__, spaces='-', keep_chars='-')
+ new_name = data['__name__'] = translate_string(data['__name__'], spaces='-', keep_chars='-')
changes = super(SiteContainerRenameForm, self).update_content(content, data)
if changes:
# revert rename to adjust container properties
--- a/src/pyams_content/shared/common/zmi/security.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/security.py Tue Jul 17 15:09:38 2018 +0200
@@ -115,7 +115,7 @@
class SharedToolContributorsRestrictionsChecksColumn(I18nColumn, GetAttrColumn):
"""Shared tool contributor enabled publication checks column"""
- _header = _("Publication checks")
+ _header = _("Activated publication checks?")
weight = 20
cssClasses = {'td': 'center'}
@@ -267,7 +267,7 @@
class SharedToolManagerRestrictionsChecksColumn(I18nColumn, GetAttrColumn):
"""Shared tool manager enabled publication checks column"""
- _header = _("Publication checks")
+ _header = _("Activated publication checks?")
weight = 40
cssClasses = {'td': 'center'}
--- a/src/pyams_content/shared/common/zmi/templates/advanced-search.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/templates/advanced-search.pt Tue Jul 17 15:09:38 2018 +0200
@@ -22,7 +22,7 @@
accept view.accept;
autocomplete view.autocomplete;
class view.css_class;
- data-ams-data extension:object_data(view);
+ data-ams-data tales:object_data(view);
data-ams-form-handler view.get_ajax_handler() | nothing;
data-ams-form-options view.get_form_options() | nothing;
data-ams-form-submit-target view.form_target | nothing;
@@ -75,7 +75,7 @@
<div class="col-md-9">
<label class="input"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -96,7 +96,7 @@
<div class="col-md-4">
<label class="input"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -116,7 +116,7 @@
<div class="col-md-4">
<label class="input"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -131,7 +131,7 @@
<label class="input"
tal:define="widget view.widgets['created_after']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -143,7 +143,7 @@
<label class="input"
tal:define="widget view.widgets['created_before']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -157,7 +157,7 @@
<label class="input"
tal:define="widget view.widgets['modified_after']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
@@ -169,7 +169,7 @@
<label class="input"
tal:define="widget view.widgets['modified_before']"
tal:attributes="class widget.widget_css_class | default;
- data-ams-data extension:object_data(widget);
+ data-ams-data tales:object_data(widget);
data-ams-form-validator view.get_widget_callback(widget.field.getName())">
<input tal:replace="structure widget.render()" />
</label>
--- a/src/pyams_content/shared/common/zmi/templates/check-input.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/templates/check-input.pt Tue Jul 17 15:09:38 2018 +0200
@@ -30,7 +30,7 @@
accesskey view/accesskey;
onselect view/onselect;
checked python: checked and 'checked' or None;
- data-ams-data extension:object_data(view);" />
+ data-ams-data tales:object_data(view);" />
<i></i><span tal:replace="item/label" i18n:translate="">Label</span>
</label>
<button class="btn btn-xs col-md-2" i18n:domain="pyams_content"
--- a/src/pyams_content/shared/common/zmi/templates/header.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/templates/header.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,5 +1,5 @@
<tal:block i18n:domain="pyams_content"
- define="config extension:back_configuration">
+ define="config tales:back_configuration">
<tal:if condition="config.display_shared_tool_title">
<h1 class="page-title margin-bottom-5" tal:define="back_url view.back_url">
<a class="font-xs hint" data-ams-target="#content"
@@ -22,7 +22,7 @@
data-ams-click-handler="PyAMS_content.profile.switchFavorite"
data-ams-hint-gravity="w" title="Add/remove from favorites" i18n:attributes="title"
tal:attributes="class 'fa fa-star{0} txt-color-blue hint opaque align-middle padding-left-10 padding-bottom-5'.format('' if view.favorite_content else '-o');
- data-ams-plugin-pyams_content-src extension:resource_path('pyams_content.skin:pyams_content');
+ data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.skin:pyams_content');
data-sequence-oid view.hex_oid;"></i><br />
<span class="content-version" tal:content="string:V${view.version_id}">Version</span> =
<span class="content-state" tal:content="structure view.state">state</span> |
--- a/src/pyams_content/shared/common/zmi/templates/preview-input.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/templates/preview-input.pt Tue Jul 17 15:09:38 2018 +0200
@@ -30,7 +30,7 @@
accesskey view/accesskey;
onselect view/onselect;
checked python: checked and 'checked' or None;
- data-ams-data extension:object_data(view);" />
+ data-ams-data tales:object_data(view);" />
<i></i><span tal:replace="item/label" i18n:translate="">Label</span>
</label>
<button class="btn btn-xs col-md-2" i18n:domain="pyams_content"
--- a/src/pyams_content/shared/common/zmi/types.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/types.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,9 +17,9 @@
import json
# import interfaces
-from pyams_content.interfaces import MANAGE_TOOL_PERMISSION
+from pyams_content.interfaces import MANAGE_TOOL_PERMISSION, MANAGE_CONTENT_PERMISSION
from pyams_content.shared.common.interfaces.types import ITypedSharedTool, ITypedDataManager, \
- IBaseDataType, IDataType, ISubType
+ IBaseDataType, IDataType, ISubType, IWfTypedSharedContent
from pyams_content.skin import pyams_content
from pyams_i18n.interfaces import II18n
from pyams_skin.interfaces.container import ITableElementName
@@ -32,9 +32,13 @@
from z3c.table.interfaces import IValues, IColumn
# import packages
+from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget
from pyams_content.shared.common.types import DataType, SubType
+from pyams_content.shared.common.zmi import SharedContentAddForm
+from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm
from pyams_form.form import AJAXAddForm, ajax_config
from pyams_form.security import ProtectedFormObjectMixin
+from pyams_i18n.widget import I18nSEOTextLineFieldWidget
from pyams_pagelet.pagelet import pagelet_config
from pyams_skin.container import delete_container_element
from pyams_skin.event import get_json_table_refresh_event
@@ -60,7 +64,7 @@
@viewlet_config(name='data-types.menu', context=ITypedSharedTool, layer=IAdminLayer,
- manager=IPropertiesMenu, permission=MANAGE_TOOL_PERMISSION, weight=10)
+ manager=IPropertiesMenu, permission=MANAGE_TOOL_PERMISSION, weight=5)
class TypedSharedToolTypesMenu(MenuItem):
"""Typed shared tool types menu"""
@@ -190,6 +194,22 @@
permission = MANAGE_TOOL_PERMISSION
+@adapter_config(name='themes', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable),
+ provides=IColumn)
+class TypedSharedToolTypesThemesColumn(ActionColumn):
+ """Typed shared tool types themes column"""
+
+ weight = 120
+
+ icon_class = 'fa fa-fw fa-tags'
+ icon_hint = _("Default themes")
+
+ url = 'themes-dialog.html'
+ modal_target = True
+
+ permission = MANAGE_TOOL_PERMISSION
+
+
@adapter_config(name='trash', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable),
provides=IColumn)
class TypedSharedToolTypesTrashColumn(TrashColumn):
@@ -250,7 +270,13 @@
label_css_class = 'control-label col-md-4'
input_css_class = 'col-md-8'
- fields = field.Fields(IDataType).omit('__parent__', '__name__')
+ @property
+ def fields(self):
+ fields = field.Fields(IDataType).omit('__parent__', '__name__')
+ fields['pictogram'].widgetFactory = PictogramSelectFieldWidget
+ if not self.context.shared_content_types_fields:
+ fields = fields.omit('field_names')
+ return fields
edit_permission = MANAGE_TOOL_PERMISSION
@@ -287,7 +313,14 @@
label_css_class = 'control-label col-md-4'
input_css_class = 'col-md-8'
- fields = field.Fields(IDataType).omit('__parent__', '__name__')
+ @property
+ def fields(self):
+ fields = field.Fields(IDataType).omit('__parent__', '__name__')
+ fields['pictogram'].widgetFactory = PictogramSelectFieldWidget
+ tool = get_parent(self.context, ITypedSharedTool)
+ if not tool.shared_content_types_fields:
+ fields = fields.omit('field_names')
+ return fields
edit_permission = MANAGE_TOOL_PERMISSION
@@ -455,6 +488,7 @@
input_css_class = 'col-md-8'
fields = field.Fields(ISubType).omit('__parent__', '__name__')
+ fields['pictogram'].widgetFactory = PictogramSelectFieldWidget
edit_permission = MANAGE_TOOL_PERMISSION
@@ -501,6 +535,7 @@
input_css_class = 'col-md-8'
fields = field.Fields(ISubType).omit('__parent__', '__name__')
+ fields['pictogram'].widgetFactory = PictogramSelectFieldWidget
edit_permission = MANAGE_TOOL_PERMISSION
@@ -521,3 +556,25 @@
}
else:
return super(self.__class__, self).get_ajax_output(changes)
+
+
+#
+# Typed shared content views
+#
+
+class TypedSharedContentAddForm(SharedContentAddForm):
+ """Typed shared content add form"""
+
+ fields = field.Fields(IWfTypedSharedContent).select('title', 'data_type', 'notepad')
+
+
+@pagelet_config(name='properties.html', context=IWfTypedSharedContent, layer=IPyAMSLayer,
+ permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='properties.json', context=IWfTypedSharedContent, layer=IPyAMSLayer,
+ permission=MANAGE_CONTENT_PERMISSION)
+class TypedSharedContentProperteisEditForm(SharedContentPropertiesEditForm):
+ """Typed shared content properties edit form"""
+
+ fields = field.Fields(IWfTypedSharedContent).select('title', 'short_name', 'content_url',
+ 'data_type', 'description', 'notepad')
+ fields['title'].widgetFactory = I18nSEOTextLineFieldWidget
--- a/src/pyams_content/shared/common/zmi/workflow.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/workflow.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,6 +9,7 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
+from pyams_content.features.preview.interfaces import IPreviewTarget
__docformat__ = 'restructuredtext'
@@ -44,7 +45,7 @@
from pyams_utils.traversing import get_parent
from pyams_utils.url import absolute_url
from pyams_viewlet.viewlet import viewlet_config, Viewlet
-from pyams_workflow.zmi.transition import WorkflowContentTransitionForm, WorkflowContentTransitionAJAXForm
+from pyams_workflow.zmi.transition import WorkflowContentTransitionForm
from pyams_zmi.form import InnerAdminAddForm
from pyramid.events import subscriber
from z3c.form import field, button
@@ -126,7 +127,7 @@
@pagelet_config(name='wf-propose.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-propose.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationRequestForm(WorkflowContentTransitionForm):
"""Shared content publication request form"""
@@ -213,7 +214,7 @@
@pagelet_config(name='wf-cancel-propose.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-cancel-propose.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationRequestCancelForm(WorkflowContentTransitionForm):
"""Shared content publication request cancel form"""
@@ -253,7 +254,7 @@
@pagelet_config(name='wf-refuse.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=PUBLISH_CONTENT_PERMISSION)
@ajax_config(name='wf-refuse.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=PUBLISH_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationRequestRefuseForm(WorkflowContentTransitionForm):
"""Shared content publication request refuse form"""
@@ -307,7 +308,7 @@
@pagelet_config(name='wf-publish.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=PUBLISH_CONTENT_PERMISSION)
@ajax_config(name='wf-publish.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=PUBLISH_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationForm(WorkflowContentTransitionForm):
"""Shared content publication form"""
@@ -396,7 +397,7 @@
@pagelet_config(name='wf-retiring.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-retiring.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationRetireRequestForm(WorkflowContentTransitionForm):
"""Shared content publication request refuse form"""
@@ -452,7 +453,7 @@
@pagelet_config(name='wf-cancel-retiring.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-cancel-retiring.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationRetireCancelForm(WorkflowContentTransitionForm):
"""Shared content publication retire request cancel form"""
@@ -492,7 +493,7 @@
@pagelet_config(name='wf-retire.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=PUBLISH_CONTENT_PERMISSION)
@ajax_config(name='wf-retire.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=PUBLISH_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationRetireForm(WorkflowContentTransitionForm):
"""Shared content publication retire form"""
@@ -533,7 +534,7 @@
@pagelet_config(name='wf-archiving.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-archiving.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationArchiveRequestForm(WorkflowContentTransitionForm):
"""Shared content publication request archive form"""
@@ -576,7 +577,7 @@
@pagelet_config(name='wf-cancel-archiving.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-cancel-archiving.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationArchiveCancelForm(WorkflowContentTransitionForm):
"""Shared content publication archive request cancel form"""
@@ -616,7 +617,7 @@
@pagelet_config(name='wf-archive.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=PUBLISH_CONTENT_PERMISSION)
@ajax_config(name='wf-archive.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=PUBLISH_CONTENT_PERMISSION, base=AJAXAddForm)
class PublicationArchiveForm(WorkflowContentTransitionForm):
"""Shared content publication archive form"""
@@ -708,7 +709,7 @@
@pagelet_config(name='wf-delete.html', context=IWfSharedContent, layer=IPyAMSLayer,
permission=MANAGE_CONTENT_PERMISSION)
@ajax_config(name='wf-delete.json', context=IWfSharedContent, layer=IPyAMSLayer,
- permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
+ permission=MANAGE_CONTENT_PERMISSION, base=AJAXAddForm)
class SharedContentDeleteForm(WorkflowContentTransitionForm):
"""Shared content delete form"""
@@ -847,15 +848,25 @@
label_css_class = 'control-label col-md-4'
input_css_class = 'col-md-8'
- fields = field.Fields(IContributorChecks)
- fields['preview'].widgetFactory = PreviewFieldWidget
- fields['check'].widgetFactory = CheckFieldWidget
+ @property
+ def fields(self):
+ fields = field.Fields(IContributorChecks)
+ if not IPreviewTarget.providedBy(self.context):
+ fields = fields.omit('preview')
+ else:
+ fields['preview'].widgetFactory = PreviewFieldWidget
+ fields['check'].widgetFactory = CheckFieldWidget
+ return fields
@subscriber(IDataExtractedEvent, form_selector=ContributorChecksForm)
def handle_contributor_checks_data_extraction(event):
"""Handle extraction of contributor checks"""
data = event.data
- if not (data.get('preview') and data.get('check')):
- event.form.widgets.errors += (Invalid(_("You must confirm that you previewed and checked this content before "
- "requesting publication!!")), )
+ can_preview = IPreviewTarget.providedBy(event.form.context)
+ if can_preview and (not (data.get('preview') and data.get('check'))):
+ event.form.widgets.errors += (Invalid(_("You must confirm that you previewed and checked this content before "
+ "requesting publication!!")),)
+ elif (not can_preview) and not data.get('check'):
+ event.form.widgets.errors += (Invalid(_("You must confirm that you checked this content before "
+ "requesting publication!!")),)
--- a/src/pyams_content/shared/form/field.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/form/field.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,8 +17,9 @@
from collections import OrderedDict
# import interfaces
-from pyams_content.shared.form.interfaces import IFormFieldFactory, IFormField, IFormFieldContainer, \
+from pyams_content.shared.form.interfaces import IWfForm, IFormFieldFactory, IFormField, IFormFieldContainer, \
IFormFieldContainerTarget, FORM_FIELD_CONTAINER_KEY
+from pyams_form.interfaces.form import IFormContextPermissionChecker
from pyams_i18n.interfaces import II18n
from zope.location.interfaces import ISublocations
from zope.traversing.interfaces import ITraversable
@@ -29,6 +30,7 @@
from pyams_utils.registry import utility_config, get_global_registry
from pyams_utils.request import check_request
from pyams_utils.schema import MailAddressField
+from pyams_utils.traversing import get_parent
from pyams_utils.vocabulary import vocabulary_config
from zope.container.contained import Contained
from zope.container.ordered import OrderedContainer
@@ -55,6 +57,13 @@
visible = FieldProperty(IFormField['visible'])
+@adapter_config(context=IFormField, provides=IFormContextPermissionChecker)
+def form_field_permission_checker(context):
+ """Form field permission checker"""
+ form = get_parent(context, IWfForm)
+ return IFormContextPermissionChecker(form)
+
+
@implementer(IFormFieldContainer)
class FormFieldContainer(OrderedContainer):
"""Form fields container persistent class"""
--- a/src/pyams_content/shared/form/zmi/field.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/form/zmi/field.py Tue Jul 17 15:09:38 2018 +0200
@@ -46,6 +46,7 @@
from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
from pyams_utils.fanstatic import get_resource_path
from pyams_utils.traversing import get_parent
+from pyams_utils.unicode import translate_string
from pyams_utils.url import absolute_url
from pyams_viewlet.viewlet import viewlet_config
from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
@@ -242,11 +243,6 @@
fields = field.Fields(IFormField).omit('__parent__', '__name__', 'visible')
edit_permission = MANAGE_CONTENT_PERMISSION
- def updateWidgets(self, prefix=None):
- super(FormFieldAddForm, self).updateWidgets(prefix)
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
-
def create(self, data):
return FormField()
@@ -261,9 +257,10 @@
def handle_new_form_field_data_extraction(event):
"""Handle new form field form data extraction"""
container = IFormFieldContainer(event.form.context)
- name = event.data.get('name')
+ name = translate_string(event.data.get('name'), spaces='_', keep_chars='_')
if name in container:
event.form.widgets.errors += (Invalid(_("Specified name is already used!")),)
+ event.data['name'] = name
@pagelet_config(name='properties.html', context=IFormField, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
@@ -288,8 +285,6 @@
super(FormFieldPropertiesEditForm, self).updateWidgets(prefix)
if 'name' in self.widgets:
self.widgets['name'].mode = DISPLAY_MODE
- if 'description' in self.widgets:
- self.widgets['description'].widget_css_class = 'textarea'
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
--- a/src/pyams_content/shared/form/zmi/properties.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/form/zmi/properties.py Tue Jul 17 15:09:38 2018 +0200
@@ -44,11 +44,6 @@
fields = field.Fields(IWfForm).select('user_title', 'header', 'handler', 'auth_only', 'use_captcha', 'submit_label')
weight = 1
- def updateWidgets(self, prefix=None):
- super(FormPropertiesEditForm, self).updateWidgets(prefix)
- if 'header' in self.widgets:
- self.widgets['header'].widget_css_class = 'textarea'
-
def get_ajax_output(self, changes):
if 'handler' in changes.get(IWfForm, ()):
return {
--- a/src/pyams_content/shared/form/zmi/render.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/form/zmi/render.py Tue Jul 17 15:09:38 2018 +0200
@@ -55,8 +55,6 @@
field = IFormFieldContainer(self.context).get(widget.field.__name__)
if field is not None:
widget.placeholder = field.placeholder
- if field.field_type == 'text':
- widget.widget_css_class = 'textarea'
@adapter_config(context=(IFormFieldContainerTarget, IPyAMSLayer, FormFieldContainerDisplayForm),
--- a/src/pyams_content/shared/imagemap/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/imagemap/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,12 +18,13 @@
# import interfaces
from pyams_content.component.paragraph.interfaces import IBaseParagraph
from pyams_content.shared.common.interfaces import ISharedTool, IWfSharedContent, ISharedContent
+from pyams_sequence.interfaces import IInternalReference
from zope.annotation.interfaces import IAttributeAnnotatable
# import packages
from pyams_content.shared.imagemap.schema import MapArea
from pyams_i18n.schema import I18nTextLineField, I18nImageField
-from pyams_sequence.schema import InternalReference
+from pyams_sequence.schema import InternalReferenceField
from pyams_utils.schema import PersistentDict
from zope.interface import Interface
from zope.schema import Object, Choice
@@ -89,17 +90,14 @@
IMAGEMAP_PARAGRAPH_RENDERERS = 'PyAMS.paragraph.imagemap.renderers'
-class IImageMapParagraph(IBaseParagraph):
+class IImageMapParagraph(IBaseParagraph, IInternalReference):
"""Image map paragraph"""
- reference = InternalReference(title=_("Internal reference"),
- description=_("Reference to image map object"),
- content_type=IMAGEMAP_CONTENT_TYPE)
+ reference = InternalReferenceField(title=_("Internal reference"),
+ description=_("Reference to image map object"),
+ content_type=IMAGEMAP_CONTENT_TYPE)
renderer = Choice(title=_("Image map template"),
description=_("Presentation template used for this paragraph"),
vocabulary=IMAGEMAP_PARAGRAPH_RENDERERS,
default='default')
-
- def get_target(self, state=None):
- """Get reference target"""
--- a/src/pyams_content/shared/imagemap/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/imagemap/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -26,12 +26,13 @@
# import packages
from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory
from pyams_content.features.renderer import RenderersVocabulary
-from pyams_sequence.utility import get_reference_target
+from pyams_sequence.reference import get_reference_target
from pyams_utils.adapter import adapter_config
from pyams_utils.factory import factory_config
from pyams_utils.registry import utility_config, get_utility
from pyams_utils.traversing import get_parent
from pyams_utils.vocabulary import vocabulary_config
+from pyams_utils.zodb import volatile_property
from zope.interface import implementer
from zope.schema.fieldproperty import FieldProperty
@@ -49,8 +50,15 @@
reference = FieldProperty(IImageMapParagraph['reference'])
renderer = FieldProperty(IImageMapParagraph['renderer'])
+ @volatile_property
+ def target(self):
+ return get_reference_target(self.reference)
+
def get_target(self, state=None):
- return get_reference_target(self.reference, state)
+ if not state:
+ return self.target
+ else:
+ return get_reference_target(self.reference, state)
@utility_config(name=IMAGEMAP_PARAGRAPH_TYPE, provides=IParagraphFactory)
--- a/src/pyams_content/shared/imagemap/zmi/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/imagemap/zmi/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,8 @@
# import standard library
# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_content.shared.common.interfaces import IWfSharedContent
@@ -67,7 +68,7 @@
legend = _("Add new image map")
icon_css_class = 'fa fa-fw fa-location-arrow'
- fields = field.Fields(IImageMapParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IImageMapParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
def create(self, data):
@@ -94,7 +95,7 @@
legend = _("Edit paragraph properties")
icon_css_class = 'fa fa-fw fa-location-arrow'
- fields = field.Fields(IImageMapParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(IImageMapParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
--- a/src/pyams_content/shared/imagemap/zmi/templates/imagemap-preview.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/imagemap/zmi/templates/imagemap-preview.pt Tue Jul 17 15:09:38 2018 +0200
@@ -3,6 +3,6 @@
<div class="col-md-9">
<img tal:define="map context.get_target();
image i18n:map.image;"
- tal:attributes="src extension:absolute_url(image, '++thumb++600x480')" />
+ tal:attributes="src tales:absolute_url(image, '++thumb++600x480')" />
</div>
</div>
--- a/src/pyams_content/shared/imagemap/zmi/templates/widget-input.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/imagemap/zmi/templates/widget-input.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,5 +1,5 @@
<label data-ams-plugins="pyams_content"
- tal:attributes="data-ams-plugin-pyams_content-src extension:resource_path('pyams_content.skin:pyams_content')">
+ tal:attributes="data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.skin:pyams_content')">
<input type="hidden"
tal:attributes="id view/id;
name view/name;
--- a/src/pyams_content/shared/logo/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/logo/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -39,6 +39,7 @@
content_name = LOGO_CONTENT_NAME
image = FileProperty(IWfLogo['image'])
+ monochrome_image = FileProperty(IWfLogo['monochrome_image'])
url = FieldProperty(IWfLogo['url'])
register_content_type(WfLogo)
@@ -47,7 +48,7 @@
@provider(IWfLogoFactory)
@implementer(ILogo)
class Logo(SharedContent):
- """WOrkflow managed logo persistent class"""
+ """Workflow managed logo persistent class"""
@adapter_config(context=IWfLogoFactory, provides=IWfSharedContentFactory)
--- a/src/pyams_content/shared/logo/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/logo/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,10 +18,11 @@
# import interfaces
from pyams_content.component.paragraph import IBaseParagraph
from pyams_content.shared.common.interfaces import ISharedTool, IWfSharedContent, ISharedContent
+from pyams_sequence.interfaces import IInternalReferencesList
# import packages
from pyams_file.schema import ImageField
-from pyams_sequence.schema import InternalReferencesList
+from pyams_sequence.schema import InternalReferencesListField
from zope.interface import Interface
from zope.schema import URI, Choice
@@ -43,10 +44,15 @@
class IWfLogo(IWfSharedContent):
"""Logo interface"""
- image = ImageField(title=_("Image"),
+ image = ImageField(title=_("Image (colored)"),
description=_("Image data"),
required=True)
+ monochrome_image = ImageField(title=_("Image (monochrome)"),
+ description=_("An alternate image which can be used by some "
+ "presentation templates"),
+ required=False)
+
url = URI(title=_("Target URL"),
description=_("URL used to access external resource"),
required=False)
@@ -65,17 +71,14 @@
LOGOS_PARAGRAPH_RENDERERS = 'PyAMS.shared.logos.renderers'
-class ILogosParagraph(IBaseParagraph):
+class ILogosParagraph(IBaseParagraph, IInternalReferencesList):
"""Logos paragraph"""
- references = InternalReferencesList(title=_("Logos references"),
- description=_("List of internal logos references"),
- content_type=LOGO_CONTENT_TYPE)
+ references = InternalReferencesListField(title=_("Logos references"),
+ description=_("List of internal logos references"),
+ content_type=LOGO_CONTENT_TYPE)
renderer = Choice(title=_("Logos template"),
description=_("Presentation template used for this paragraph"),
vocabulary=LOGOS_PARAGRAPH_RENDERERS,
default='default')
-
- def get_targets(self, state=None):
- """Get references targets"""
--- a/src/pyams_content/shared/logo/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/logo/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,6 +9,7 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
+from pyams_utils.zodb import volatile_property
__docformat__ = 'restructuredtext'
@@ -26,7 +27,7 @@
# import packages
from pyams_content.component.paragraph import BaseParagraph, IParagraphFactory, BaseParagraphFactory, \
BaseParagraphContentChecker
-from pyams_sequence.utility import get_reference_target
+from pyams_sequence.reference import get_reference_target
from pyams_utils.adapter import adapter_config
from pyams_utils.registry import utility_config, get_utility
from pyams_utils.request import check_request
--- a/src/pyams_content/shared/logo/zmi/paragraph.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/logo/zmi/paragraph.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,8 @@
# import standard library
# import interfaces
-from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer
+from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
+ PARAGRAPH_HIDDEN_FIELDS
from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
from pyams_content.shared.common import IWfSharedContent
@@ -67,7 +68,7 @@
legend = _("Add new logos paragraph")
icon_css_class = 'fa fa-fw fa-th-large'
- fields = field.Fields(ILogosParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(ILogosParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
edit_permission = MANAGE_CONTENT_PERMISSION
def create(self, data):
@@ -93,7 +94,7 @@
legend = _("Edit paragraph properties")
icon_css_class = 'fa fa-fw fa-th-large'
- fields = field.Fields(ILogosParagraph).omit('__parent__', '__name__', 'visible')
+ fields = field.Fields(ILogosParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
fields['renderer'].widgetFactory = RendererFieldWidget
edit_permission = MANAGE_CONTENT_PERMISSION
--- a/src/pyams_content/shared/logo/zmi/properties.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/logo/zmi/properties.py Tue Jul 17 15:09:38 2018 +0200
@@ -40,11 +40,11 @@
legend = _("Main logo settings")
fieldset_class = 'bordered no-x-margin margin-y-10'
- fields = field.Fields(IWfLogo).select('image', 'url')
+ fields = field.Fields(IWfLogo).select('image', 'monochrome_image', 'url')
weight = 1
def get_ajax_output(self, changes):
- if 'image' in changes.get(IWfLogo, ()):
+ if changes:
return {
'status': 'reload',
'message': self.request.localizer.translate(self.successMessage)
--- a/src/pyams_content/shared/news/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/news/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,20 +18,21 @@
# import interfaces
from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
-from pyams_content.component.theme.interfaces import IThemesTarget
+from pyams_content.component.theme.interfaces import ITagsTarget, IThemesTarget
from pyams_content.features.preview.interfaces import IPreviewTarget
from pyams_content.features.review.interfaces import IReviewTarget
+from pyams_content.shared.common.interfaces import IWfSharedContentFactory
from pyams_content.shared.news.interfaces import INewsEvent, IWfNewsEvent, NEWS_CONTENT_TYPE, NEWS_CONTENT_NAME, \
IWfNewsEventFactory
# import packages
-from pyams_content.shared.common import SharedContent, WfSharedContent, register_content_type, IWfSharedContentFactory
+from pyams_content.shared.common import SharedContent, WfSharedContent, register_content_type
from pyams_utils.adapter import adapter_config
from zope.interface import implementer, provider
-@implementer(IWfNewsEvent, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget, IThemesTarget,
- IPreviewTarget, IReviewTarget)
+@implementer(IWfNewsEvent, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget,
+ ITagsTarget, IThemesTarget, IPreviewTarget, IReviewTarget)
class WfNewsEvent(WfSharedContent):
"""Base news event"""
--- a/src/pyams_content/shared/site/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,7 +18,7 @@
# import interfaces
from pyams_content.component.illustration import IIllustrationTarget, ILinkIllustrationTarget
from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget
-from pyams_content.component.theme.interfaces import IThemesTarget
+from pyams_content.component.theme.interfaces import ITagsTarget, IThemesTarget
from pyams_content.features.preview.interfaces import IPreviewTarget
from pyams_content.features.review.interfaces import IReviewTarget
from pyams_content.shared.site.interfaces import ITopic, IWfTopic, TOPIC_CONTENT_NAME, \
@@ -32,7 +32,7 @@
@implementer(IWfTopic, IIllustrationTarget, ILinkIllustrationTarget, IParagraphContainerTarget,
- IThemesTarget, IPreviewTarget, IReviewTarget)
+ ITagsTarget, IThemesTarget, IPreviewTarget, IReviewTarget)
class WfTopic(WfSharedContent):
"""Base topic"""
--- a/src/pyams_content/shared/site/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,6 +19,7 @@
from pyams_content.interfaces import IBaseContent
from pyams_sequence.interfaces import ISequentialIdTarget, IInternalReference
from pyams_workflow.interfaces import IWorkflowPublicationSupport
+from zope.annotation.interfaces import IAttributeAnnotatable
from zope.container.interfaces import IContainer, IContained
# import packages
@@ -107,7 +108,7 @@
"""Workflow managed topic interface"""
-class IContentLink(ISiteElement, IInternalReference):
+class IContentLink(ISiteElement, IInternalReference, IAttributeAnnotatable):
"""Rented content interface"""
alt_title = I18nTextLineField(title=_("Alternate title"),
@@ -118,6 +119,3 @@
description=_("If 'no', link is not visible"),
required=True,
default=True)
-
- def get_target(self):
- """Get reference target"""
--- a/src/pyams_content/shared/site/link.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/link.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,13 +17,16 @@
# import interfaces
from pyams_content.shared.site.interfaces import IContentLink
+from pyams_utils.interfaces.url import IRelativeURL
from pyams_workflow.interfaces import IWorkflow, IWorkflowVersion, IWorkflowVersions, IWorkflowPublicationInfo, \
IWorkflowState
# import packages
from persistent import Persistent
-from pyams_sequence.utility import get_reference_target
+from pyams_sequence.reference import get_reference_target
+from pyams_skin.layer import IPyAMSUserLayer
from pyams_utils.adapter import adapter_config
+from pyams_utils.zodb import volatile_property
from zope.container.contained import Contained
from zope.interface import implementer
from zope.schema.fieldproperty import FieldProperty
@@ -48,7 +51,8 @@
def is_deletable(self):
return True
- def get_target(self):
+ @volatile_property
+ def target(self):
target = get_reference_target(self.reference)
if IWorkflowVersion.providedBy(target):
workflow = IWorkflow(target, None)
@@ -60,6 +64,9 @@
target = versions[-1]
return target
+ def get_target(self, state=None):
+ return self.target
+
@adapter_config(context=IContentLink, provides=IWorkflow)
def content_link_workflow_info(context):
@@ -83,3 +90,11 @@
target = context.get_target()
if target is not None:
return IWorkflowPublicationInfo(target, None)
+
+
+@adapter_config(context=(IContentLink, IPyAMSUserLayer), provides=IRelativeURL)
+def content_link_relative_url(context):
+ """Content link relative URL"""
+ target = context.get_target()
+ if target is not None:
+ return IRelativeURL(target, None)
--- a/src/pyams_content/shared/site/zmi/container.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/container.py Tue Jul 17 15:09:38 2018 +0200
@@ -203,7 +203,10 @@
permission = self.permission
if self.can_sort and ((not permission) or self.request.has_permission(permission, self.context)):
classes.append('table-dnd')
- return {'table': ' '.join(classes)}
+ return {
+ 'table': ' '.join(classes),
+ 'tr.selected': lambda item, col, row: 'current' if item is self.context else ''
+ }
@property
def data_attributes(self):
--- a/src/pyams_content/shared/site/zmi/folder.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/folder.py Tue Jul 17 15:09:38 2018 +0200
@@ -102,8 +102,6 @@
super(SiteFolderAddForm, self).updateWidgets(prefix)
if 'parent' in self.widgets:
self.widgets['parent'].permission = MANAGE_SITE_PERMISSION
- if 'notepad' in self.widgets:
- self.widgets['notepad'].widget_css_class = 'textarea'
def create(self, data):
registry = self.request.registry
@@ -192,13 +190,6 @@
fields = field.Fields(ISiteFolder).select('title', 'short_name', 'heading', 'navigation_title', 'notepad') + \
field.Fields(IBaseSharedTool).select('shared_content_workflow')
- def updateWidgets(self, prefix=None):
- super(SiteFolderPropertiesEditForm, self).updateWidgets(prefix)
- if 'heading' in self.widgets:
- self.widgets['heading'].widget_css_class = 'textarea'
- if 'notepad' in self.widgets:
- self.widgets['notepad'].widget_css_class = 'textarea'
-
@view_config(name='properties.json', context=ISiteFolder, request_type=IPyAMSLayer,
permission=MANAGE_TOOL_PERMISSION, renderer='json', xhr=True)
--- a/src/pyams_content/shared/site/zmi/link.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/link.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,6 +9,7 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
+from pyams_skin.event import get_json_table_row_refresh_event
__docformat__ = 'restructuredtext'
@@ -21,7 +22,6 @@
from pyams_content.shared.site.interfaces import ISiteContainer, IContentLink
from pyams_content.skin.zmi.interfaces import ISiteTreeTable
from pyams_i18n.interfaces import II18n
-from pyams_sequence.interfaces import IInternalReference
from pyams_skin.interfaces.container import ITableElementName
from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
from pyams_skin.layer import IPyAMSLayer
@@ -31,7 +31,7 @@
# import packages
from pyams_content.shared.site.link import ContentLink
-from pyams_content.shared.site.zmi.container import SiteContainerTreeTable, SiteContainerTreeNameColumn
+from pyams_content.shared.site.zmi.container import SiteContainerTreeTable
from pyams_content.shared.site.zmi.widget import SiteManagerFoldersSelectorFieldWidget
from pyams_form.form import AJAXAddForm, ajax_config
from pyams_pagelet.pagelet import pagelet_config
@@ -140,7 +140,7 @@
def get_ajax_output(self, changes):
output = super(self.__class__, self).get_ajax_output(changes)
intids = get_utility(IIntIds)
- if 'reference' in changes.get(IInternalReference, ()):
+ if changes:
table = SiteContainerTreeTable(self.context.__parent__, self.request)
table.update()
row = table.setUpRow(self.context)
@@ -152,16 +152,4 @@
'row': table.renderRow(row)
}
})
- elif 'alt_title' in changes.get(IContentLink, ()):
- adapter = ContentLinkTableElementName(self.context, self.request, None)
- column = SiteContainerTreeNameColumn(self.context, self.request, None)
- output.setdefault('events', []).append({
- 'event': 'myams.refresh',
- 'options': {
- 'handler': 'MyAMS.skin.refreshRowCell',
- 'object_id': '{0}::{1}'.format(SiteContainerTreeTable.id, intids.queryId(self.context)),
- 'col_name': 'name',
- 'cell': column.renderCell(self.context, name=adapter.name)
- }
- })
return output
--- a/src/pyams_content/shared/site/zmi/widget/templates/folders-input.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/site/zmi/widget/templates/folders-input.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,6 +1,6 @@
<div i18n:domain="pyams_content"
data-ams-plugins="pyams_content"
- tal:attributes="data-ams-plugin-pyams_content-src extension:resource_path('pyams_content.skin:pyams_content')">
+ tal:attributes="data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.skin:pyams_content')">
<input type="hidden"
tal:attributes="id view/id;
name view/name;
--- a/src/pyams_content/shared/view/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -18,6 +18,7 @@
logger = logging.getLogger("PyAMS (content)")
from datetime import datetime
+from itertools import tee
# import interfaces
from hypatia.interfaces import ICatalog
@@ -36,7 +37,7 @@
from pyams_catalog.query import CatalogResultSet, or_
from pyams_content.shared.common import WfSharedContent, register_content_type, SharedContent, IWfSharedContentFactory
from pyams_utils.adapter import adapter_config, ContextAdapter
-from pyams_utils.list import unique
+from pyams_utils.list import unique_iter
from pyams_utils.registry import get_utility, get_global_registry
from pyams_utils.timezone import tztime
from pyams_workflow.interfaces import IWorkflow
@@ -52,6 +53,8 @@
VIEW_CACHE_KEY = 'view_{view}'
VIEW_CONTEXT_CACHE_KEY = 'view_{view}.context_{context}'
+_MARKER = object()
+
@implementer(IWfView, IPreviewTarget, IReviewTarget)
class WfView(WfSharedContent):
@@ -86,24 +89,35 @@
content_types |= set(self.selected_content_types)
return list(content_types)
- def get_results(self, context):
- views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME)
- if self.is_using_context:
- cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self),
- context=ICacheKeyValue(context))
- else:
- cache_key = VIEW_CACHE_KEY.format(ICacheKeyValue(self))
- try:
- results = views_cache.get_value(cache_key)
- except KeyError:
+ def get_results(self, context, sort_index=None, reverse=None, limit=None, ignore_cache=False):
+ results = _MARKER
+ if not ignore_cache:
+ # check for cache
+ views_cache = get_cache(VIEWS_CACHE_REGION, VIEWS_CACHE_NAME)
+ if self.is_using_context:
+ cache_key = VIEW_CONTEXT_CACHE_KEY.format(view=ICacheKeyValue(self),
+ context=ICacheKeyValue(context))
+ else:
+ cache_key = VIEW_CACHE_KEY.format(view=ICacheKeyValue(self))
+ try:
+ results = views_cache.get_value(cache_key)
+ except KeyError:
+ pass
+ # Execute query
+ if results is _MARKER:
registry = get_current_registry()
adapter = registry.queryAdapter(self, IViewQuery, name='es')
if adapter is None:
adapter = registry.getAdapter(self, IViewQuery)
- results = adapter.get_results(context, self.limit)
+ results = adapter.get_results(context,
+ sort_index or self.order_by,
+ reverse if reverse is not None else self.reversed_order,
+ limit or self.limit)
intids = get_utility(IIntIds)
- views_cache.set_value(cache_key, [intids.queryId(item) for item in results])
- logger.debug("Storing view items to cache key {0}".format(cache_key))
+ cache, results = tee(results)
+ if not ignore_cache:
+ views_cache.set_value(cache_key, [intids.queryId(item) for item in cache])
+ logger.debug("Storing view items to cache key {0}".format(cache_key))
else:
results = CatalogResultSet(results)
logger.debug("Retrieving view items from cache key {0}".format(cache_key))
@@ -152,19 +166,19 @@
params &= new_params
return params
- def get_results(self, context, limit=None):
+ def get_results(self, context, sort_index, reverse, limit):
view = self.context
catalog = get_utility(ICatalog)
registry = get_current_registry()
params = self.get_params(context)
items = CatalogResultSet(CatalogQuery(catalog).query(params,
- sort_index=view.order_by,
- reverse=view.reversed_order,
+ sort_index=sort_index,
+ reverse=reverse,
limit=limit))
for name, adapter in sorted(registry.getAdapters((view,), IViewQueryFilterExtension),
key=lambda x: x[1].weight):
items = adapter.filter(context, items)
- return unique(items)
+ return unique_iter(items)
@subscriber(IObjectModifiedEvent, context_selector=IWfView)
--- a/src/pyams_content/shared/view/interfaces/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/interfaces/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -37,13 +37,15 @@
PUBLICATION_DATE_ORDER = 'publication_date'
FIRSTPUBLICATION_DATE_ORDER = 'first_publication_date'
-VIEW_ORDER = {CREATION_DATE_ORDER: _("Creation date"),
- UPDATE_DATE_ORDER: _("Last update date"),
- PUBLICATION_DATE_ORDER: _("Current publication date"),
- FIRSTPUBLICATION_DATE_ORDER: _("First publication date")}
+VIEW_ORDERS = (
+ {'id': CREATION_DATE_ORDER, 'title': _("Creation date")},
+ {'id': UPDATE_DATE_ORDER,'title': _("Last update date")},
+ {'id': PUBLICATION_DATE_ORDER, 'title': _("Current publication date")},
+ {'id': FIRSTPUBLICATION_DATE_ORDER, 'title': _("First publication date")}
+)
-VIEW_ORDER_VOCABULARY = SimpleVocabulary([SimpleTerm(v, title=t)
- for v, t in VIEW_ORDER.items()])
+VIEW_ORDER_VOCABULARY = SimpleVocabulary([SimpleTerm(item['id'], title=item['title'])
+ for item in VIEW_ORDERS])
class IViewsManager(ISharedTool):
@@ -87,7 +89,7 @@
is_using_context = Attribute("Check if view is using context settings")
- def get_results(self, context):
+ def get_results(self, context, sort_index=None, reverse=True, limit=None, ignore_cache=False):
"""Get results of catalog query"""
@@ -108,7 +110,7 @@
class IViewQuery(Interface):
"""View query interface"""
- def get_results(self, context, limit=None):
+ def get_results(self, context, sort_index, reverse, limit):
"""Get results of catalog query"""
@@ -167,18 +169,39 @@
default=True)
+VIEW_TAGS_SETTINGS_KEY = 'pyams_content.view.tags'
+
+
+class IViewTagsSettings(IViewSettings):
+ """View tags settings"""
+
+ select_context_tags = Bool(title=_("Select context tags?"),
+ description=_("If 'yes', tags will be extracted from context"),
+ required=False,
+ default=False)
+
+ tags = ThesaurusTermsListField(title=_("Other tags"),
+ required=False)
+
+ def get_tags(self, context):
+ """Get all tags for given context"""
+
+ def get_tags_index(self, context):
+ """Get all tags index values for given context"""
+
+
VIEW_THEMES_SETTINGS_KEY = 'pyams_content.view.themes'
class IViewThemesSettings(IViewSettings):
- """View themess ettings"""
+ """View themes settings"""
select_context_themes = Bool(title=_("Select context themes?"),
description=_("If 'yes', themes will be extracted from context"),
- required=True,
+ required=False,
default=False)
- themes = ThesaurusTermsListField(title=_("Other terms"),
+ themes = ThesaurusTermsListField(title=_("Other themes"),
required=False)
def get_themes(self, context):
@@ -186,3 +209,37 @@
def get_themes_index(self, context):
"""Get all themes index values for given context"""
+
+
+VIEW_COLLECTIONS_SETTINGS_KEY = 'pyams_content.view.collections'
+
+
+class IViewCollectionsSettings(IViewSettings):
+ """View collections settings"""
+
+ select_context_collections = Bool(title=_("Select context collections?"),
+ description=_("If 'yes', collections will be extracted from context"),
+ required=False,
+ default=False)
+
+ collections = ThesaurusTermsListField(title=_("Other collections"),
+ required=False)
+
+ def get_collections(self, context):
+ """Get all collections for given context"""
+
+ def get_collections_index(self, context):
+ """Get all collections index values for given context"""
+
+
+VIEWS_MERGERS_VOCABULARY = 'pyams_content.views.mergers'
+
+
+class IViewsMerger(Interface):
+ """Interface used to define views mergers
+
+ Mergers are used to merge results of several views.
+ """
+
+ def get_results(self, views, context, ignore_cache=False):
+ """Merge results of several views together"""
--- a/src/pyams_content/shared/view/manager.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/manager.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,7 +16,7 @@
# import standard library
# import interfaces
-from pyams_content.component.theme.interfaces import IThemesManagerTarget
+from pyams_content.component.theme.interfaces import IThemesManagerTarget, ICollectionsManagerTarget
from pyams_content.shared.common.interfaces import ISharedContentFactory
from pyams_content.shared.view.interfaces import IViewsManager, VIEW_CONTENT_TYPE, IViewsManagerFactory
from zope.annotation.interfaces import IAttributeAnnotatable
@@ -33,7 +33,7 @@
from zope.interface import implementer
-@implementer(IViewsManager, IThemesManagerTarget, IAttributeAnnotatable)
+@implementer(IViewsManager, IThemesManagerTarget, ICollectionsManagerTarget, IAttributeAnnotatable)
class ViewsManager(SharedTool):
"""Views manager class"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_content/shared/view/merge.py Tue Jul 17 15:09:38 2018 +0200
@@ -0,0 +1,156 @@
+#
+# 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'
+
+
+# import standard library
+from heapq import merge
+from random import shuffle
+from itertools import chain, zip_longest
+
+# import interfaces
+from pyams_content.shared.view.interfaces import VIEWS_MERGERS_VOCABULARY, IViewsMerger, CREATION_DATE_ORDER, \
+ UPDATE_DATE_ORDER, PUBLICATION_DATE_ORDER, FIRSTPUBLICATION_DATE_ORDER
+from pyams_workflow.interfaces import IWorkflowPublicationInfo
+from zope.dublincore.interfaces import IZopeDublinCore
+
+# import packages
+from pyams_utils.registry import utility_config
+from pyams_utils.request import check_request
+from pyams_utils.vocabulary import vocabulary_config
+from zope.componentvocabulary.vocabulary import UtilityVocabulary, UtilityTerm
+
+from pyams_content import _
+
+
+@vocabulary_config(name=VIEWS_MERGERS_VOCABULARY)
+class ViewsMergersVocabulary(UtilityVocabulary):
+ """Views mergers vocabulary"""
+
+ interface = IViewsMerger
+ nameOnly = True
+
+ def __init__(self, context, **kw):
+ request = check_request()
+ registry = request.registry
+ translate = request.localizer.translate
+ utils = [(name, translate(util.label))
+ for (name, util) in registry.getUtilitiesFor(self.interface)]
+ self._terms = dict((title, UtilityTerm(name, title)) for name, title in utils)
+
+
+CONCAT_VIEWS_MERGE_MODE = 'concat'
+
+
+@utility_config(name=CONCAT_VIEWS_MERGE_MODE, provides=IViewsMerger)
+class ViewsConcatenateMergeMode(object):
+ """Views concatenate merge mode"""
+
+ label = _("Concatenate views items in order")
+
+ @classmethod
+ def get_results(cls, views, context, ignore_cache=False):
+ results = (view.get_results(context, ignore_cache=ignore_cache) for view in views)
+ yield from chain(*results)
+
+
+@utility_config(name='random', provides=IViewsMerger)
+class ViewsRandomMergeMode(object):
+ """Views random merge mode"""
+
+ label = _("Extract items randomly")
+
+ @classmethod
+ def get_results(cls, views, context, ignore_cache=False):
+ results = (view.get_results(context, ignore_cache=ignore_cache) for view in views)
+ results = list(chain(*results))
+ shuffle(results)
+ yield from iter(results)
+
+
+@utility_config(name='zip', provides=IViewsMerger)
+class ViewsZipMergeMode(object):
+ """Views zip merge mode"""
+
+ label = _("Take items from views one by one, in views order")
+
+ @classmethod
+ def get_results(cls, views, context, ignore_cache=False):
+ results = (view.get_results(context, ignore_cache=ignore_cache) for view in views)
+ for array in zip_longest(*results):
+ yield from filter(lambda x: x is not None, array)
+
+
+@utility_config(name='zip_random', provides=IViewsMerger)
+class ViewsRandomZipMergeMode(object):
+ """Views random zip merge mode"""
+
+ label = _("Take items from views one by one, in random order")
+
+ @classmethod
+ def get_results(cls, views, context, ignore_cache=False):
+ results = [view.get_results(context, ignore_cache=ignore_cache) for view in views]
+ shuffle(results)
+ for array in zip_longest(*results):
+ yield from filter(lambda x: x is not None, array)
+
+
+class SortedMergeMode(object):
+ """Sorted merge mode base class"""
+
+ sort_index = None
+ sort_key = None
+
+ @classmethod
+ def get_results(cls, views, context, ignore_cache=False):
+ results = (sorted(view.get_results(context,
+ ignore_cache=ignore_cache),
+ key=cls.sort_key, reverse=True)
+ for view in views)
+ yield from merge(*results, key=cls.sort_key, reverse=True)
+
+
+@utility_config(name='{0}.sort'.format(CREATION_DATE_ORDER), provides=IViewsMerger)
+class CreationDateSortedMergeMode(SortedMergeMode):
+ """Merge pre-sorted views by creation date"""
+
+ label = _("Sort all results by creation date")
+ sort_index = CREATION_DATE_ORDER
+ sort_key = lambda x: IZopeDublinCore(x).created
+
+
+@utility_config(name='{0}.sort'.format(UPDATE_DATE_ORDER), provides=IViewsMerger)
+class UpdateDateSortedMergeMode(SortedMergeMode):
+ """Merge pre-sorted views by last update date"""
+
+ label = _("Sort all results by last update date")
+ sort_index = UPDATE_DATE_ORDER
+ sort_key = lambda x: IZopeDublinCore(x).modified
+
+
+@utility_config(name='{0}.sort'.format(PUBLICATION_DATE_ORDER), provides=IViewsMerger)
+class PublicationDateSortedMergeMode(SortedMergeMode):
+ """Merge pre-sorted views by publication date"""
+
+ label = _("Sort all results by current publication date")
+ sort_index = PUBLICATION_DATE_ORDER
+ sort_key = lambda x: IWorkflowPublicationInfo(x).publication_date
+
+
+@utility_config(name='{0}.sort'.format(FIRSTPUBLICATION_DATE_ORDER), provides=IViewsMerger)
+class FirstPublicationDateSortedMergeMode(SortedMergeMode):
+ """Merge pre-sorted views by first publication date"""
+
+ label = _("Sort all results by first publication date")
+ sort_index = FIRSTPUBLICATION_DATE_ORDER
+ sort_key = lambda x: IWorkflowPublicationInfo(x).first_publication_date
--- a/src/pyams_content/shared/view/portlet/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -14,16 +14,23 @@
# import standard library
+from itertools import islice
# import interfaces
-from pyams_content.shared.view.portlet.interfaces import IViewItemsPortletSettings
+from pyams_content.shared.view.interfaces import IViewsMerger, IViewsManager
+from pyams_content.shared.view.portlet.interfaces import IViewItemsPortletSettings, VIEW_DISPLAY_CONTEXT
+from pyams_portal.interfaces import PREVIEW_MODE
from pyams_utils.interfaces import VIEW_PERMISSION
+from pyams_utils.interfaces.url import DISPLAY_CONTEXT
+from pyams_workflow.interfaces import IWorkflow
# import packages
-from pyams_content.workflow import PUBLISHED_STATES
from pyams_portal.portlet import PortletSettings, portlet_config, Portlet
-from pyams_sequence.utility import get_sequence_target
+from pyams_sequence.reference import get_sequence_target
from pyams_utils.factory import factory_config
+from pyams_utils.list import unique_iter
+from pyams_utils.registry import get_utility
+from pyams_utils.request import check_request
from zope.interface import implementer
from zope.schema.fieldproperty import FieldProperty
@@ -38,16 +45,40 @@
class ViewItemsPortletSettings(PortletSettings):
"""View items portlet settings"""
- view = FieldProperty(IViewItemsPortletSettings['view'])
+ title = FieldProperty(IViewItemsPortletSettings['title'])
+ views = FieldProperty(IViewItemsPortletSettings['views'])
+ views_context = FieldProperty(IViewItemsPortletSettings['views_context'])
+ views_merge_mode = FieldProperty(IViewItemsPortletSettings['views_merge_mode'])
+ limit = FieldProperty(IViewItemsPortletSettings['limit'])
+
+ def get_views(self):
+ views_manager = get_utility(IViewsManager)
+ workflow = IWorkflow(views_manager)
+ for oid in self.views or ():
+ view = get_sequence_target(oid, state=workflow.published_states)
+ if view is not None:
+ yield view
- def get_view(self):
- if self.view is not None:
- return get_sequence_target(self.view, state=PUBLISHED_STATES)
+ def get_merger(self, request=None):
+ if request is None:
+ request = check_request()
+ return request.registry.queryUtility(IViewsMerger, name=self.views_merge_mode)
- def get_items(self, context):
- view = self.get_view()
- if view is not None:
- return view.get_results(context)
+ def get_items(self, request=None, ignore_cache=False):
+ if request is None:
+ request = check_request()
+ if self.views_context == VIEW_DISPLAY_CONTEXT:
+ context = request.annotations.get(DISPLAY_CONTEXT, request.root)
+ else:
+ context = request.context
+ if not ignore_cache:
+ ignore_cache = request.annotations.get(PREVIEW_MODE, False)
+ merger = self.get_merger(request)
+ if merger is not None:
+ yield from islice(unique_iter(merger.get_results(self.get_views(),
+ context,
+ ignore_cache=ignore_cache)),
+ self.limit)
@portlet_config(permission=VIEW_PERMISSION)
--- a/src/pyams_content/shared/view/portlet/interfaces.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/interfaces.py Tue Jul 17 15:09:38 2018 +0200
@@ -16,19 +16,81 @@
# import standard library
# import interfaces
+from pyams_content.shared.view.interfaces import VIEWS_MERGERS_VOCABULARY
from pyams_portal.interfaces import IPortletSettings
# import packages
from pyams_content.shared.view import WfView
-from pyams_sequence.schema import InternalReference
+from pyams_content.shared.view.merge import CONCAT_VIEWS_MERGE_MODE
+from pyams_i18n.schema import I18nTextLineField
+from pyams_sequence.schema import InternalReferencesListField
+from zope.schema import Choice, Int
+from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from pyams_content import _
+#
+# Views display contexts
+#
+
+VIEW_DISPLAY_CONTEXT = 'display'
+VIEW_CONTENT_CONTEXT = 'content'
+
+VIEW_CONTEXTS = (
+ {'id': VIEW_DISPLAY_CONTEXT, 'title': _("Display context")},
+ {'id': VIEW_CONTENT_CONTEXT, 'title': _("Content context")}
+)
+
+VIEW_CONTEXT_VOCABULARY = SimpleVocabulary([SimpleTerm(item['id'], title=item['title'])
+ for item in VIEW_CONTEXTS])
+
+
+#
+# Views merge modes
+#
+
class IViewItemsPortletSettings(IPortletSettings):
"""View items portlet settings interface"""
- view = InternalReference(title=_("Selected view"),
- description=_("Reference to the view from which items are extracted"),
- content_type=WfView.content_type,
- required=True)
+ title = I18nTextLineField(title=_("Title"),
+ required=False)
+
+ views = InternalReferencesListField(title=_("Selected views"),
+ description=_("Reference to the view(s) from which items are extracted; "
+ "you can combine several views together and specify in which "
+ "order they should be mixed"),
+ content_type=WfView.content_type,
+ required=True)
+
+ def get_views(self):
+ """Get iterator over selected views"""
+
+ views_context = Choice(title=_("Views context"),
+ description=_("When searching for items, a view receives a \"context\" which is the object "
+ "from which settings can be extracted; this context can be the \"display\" "
+ "context or the \"content\" context: when the portlet is used to display the "
+ "site root, a site manager or a site folder, both are identical; when the "
+ "portlet is used to display a shared content, the \"content\" context is the "
+ "displayed content, while the \"display\" context is the container (site "
+ "root, site manager or site folder) into which content is displayed"),
+ vocabulary=VIEW_CONTEXT_VOCABULARY,
+ default=VIEW_DISPLAY_CONTEXT,
+ required=True)
+
+ views_merge_mode = Choice(title=_("Views merge mode"),
+ description=_("If you select several views, you can select \"merge\" mode, which is "
+ "the way used to merge items from several views"),
+ vocabulary=VIEWS_MERGERS_VOCABULARY,
+ default=CONCAT_VIEWS_MERGE_MODE,
+ required=True)
+
+ def get_merger(self):
+ """Get selected views merger utility"""
+
+ limit = Int(title=_("Results count limit"),
+ description=_("Maximum number of results that the component may extract from merged views"),
+ required=False)
+
+ def get_items(self):
+ """Get iterator over items returned by selected views, using selected merger"""
--- a/src/pyams_content/shared/view/portlet/zmi/__init__.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/zmi/__init__.py Tue Jul 17 15:09:38 2018 +0200
@@ -48,4 +48,4 @@
@adapter_config(context=(Interface, IPyAMSLayer, Interface, IViewItemsPortletSettings), provides=IPortletPreviewer)
@template_config(template='templates/view-items-list-preview.pt', layer=IPyAMSLayer)
class ViewItemsPortletPreviewer(PortletPreviewer):
- """Image portlet previewer"""
+ """View items portlet previewer"""
--- a/src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/portlet/zmi/templates/view-items-list-preview.pt Tue Jul 17 15:09:38 2018 +0200
@@ -1,12 +1,17 @@
-<tal:var define="settings view.settings">
- <tal:var define="items settings.get_items(context)">
- <tal:if condition="items">
- <div tal:repeat="item items">
- <tal:var content="i18n:item.title" />
- </div>
- </tal:if>
- <tal:if condition="not:items" i18n:translate="">
- No result found
- </tal:if>
- </tal:var>
-</tal:var>
+<div class="padding-x-5"
+ tal:define="settings view.settings; global count 0;" i18n:domain="pyams_content">
+ <strong tal:define="title i18n:settings.title"
+ tal:condition="title">
+ <tal:var content="title" /><br />
+ </strong>
+ <ul>
+ <li tal:repeat="item settings.get_items(request, ignore_cache=True)">
+ <tal:var content="i18n:item.title" />
+ <tal:var define="global count count+1" />
+ </li>
+ </ul>
+ <tal:if condition="not:count">
+ <tal:if condition="settings.views" i18n:translate="">No result found</tal:if>
+ <tal:if condition="not:settings.views" i18n:translate="">No selected view</tal:if>
+ </tal:if>
+</div>
--- a/src/pyams_content/shared/view/reference.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/reference.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,7 +9,6 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
-from pyams_sequence.interfaces import ISequentialIdInfo
__docformat__ = 'restructuredtext'
@@ -21,6 +20,7 @@
from hypatia.interfaces import ICatalog
from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \
IViewQueryParamsExtension, IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE
+from pyams_sequence.interfaces import ISequentialIdInfo
# import packages
from hypatia.catalog import CatalogQuery
@@ -62,13 +62,15 @@
weight = 50
def get_params(self, context):
- catalog = get_utility(ICatalog)
settings = IViewInternalReferencesSettings(self.context)
params = None
# check themes
if settings.exclude_context:
- oid = ISequentialIdInfo(context).hex_oid
- params = and_(params, NotEq(catalog['oid'], oid))
+ sequence = ISequentialIdInfo(context, None)
+ if sequence is not None:
+ oid = sequence.hex_oid
+ catalog = get_utility(ICatalog)
+ params = and_(params, NotEq(catalog['oid'], oid))
return params
--- a/src/pyams_content/shared/view/theme.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/theme.py Tue Jul 17 15:09:38 2018 +0200
@@ -9,6 +9,7 @@
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
+from pyams_content.component.theme import ICollectionsInfo
__docformat__ = 'restructuredtext'
@@ -17,9 +18,10 @@
# import interfaces
from hypatia.interfaces import ICatalog
-from pyams_content.component.theme.interfaces import IThemesInfo
+from pyams_content.component.theme.interfaces import ITagsInfo, IThemesInfo
from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewThemesSettings, \
- IViewQueryParamsExtension, VIEW_THEMES_SETTINGS_KEY
+ IViewQueryParamsExtension, VIEW_THEMES_SETTINGS_KEY, IViewTagsSettings, VIEW_TAGS_SETTINGS_KEY, \
+ IViewCollectionsSettings, VIEW_COLLECTIONS_SETTINGS_KEY
from zope.intid.interfaces import IIntIds
# import packages
@@ -33,6 +35,65 @@
from zope.schema.fieldproperty import FieldProperty
+#
+# Tags management
+#
+
+@implementer(IViewTagsSettings)
+class ViewTagsSettings(Persistent, Contained):
+ """View tags settings"""
+
+ select_context_tags = FieldProperty(IViewTagsSettings['select_context_tags'])
+ tags = FieldProperty(IViewTagsSettings['tags'])
+
+ @property
+ def is_using_context(self):
+ return self.select_context_tags
+
+ def get_tags(self, context):
+ tags = set()
+ if self.select_context_tags:
+ tags_info = ITagsInfo(context, None)
+ if tags_info is not None:
+ tags |= set(tags_info.tags or ())
+ if self.tags:
+ tags |= set(self.tags)
+ return tags
+
+ def get_tags_index(self, context):
+ intids = get_utility(IIntIds)
+ return [intids.register(term) for term in self.get_tags(context)]
+
+
+@adapter_config(context=IWfView, provides=IViewTagsSettings)
+@adapter_config(name='tags', context=IWfView, provides=IViewSettings)
+def view_tags_settings_factory(view):
+ """View tags settings factory"""
+ return get_annotation_adapter(view, VIEW_TAGS_SETTINGS_KEY, ViewTagsSettings,
+ name='++view:tags++')
+
+
+@adapter_config(name='tags', context=IWfView, provides=IViewQueryParamsExtension)
+class ViewTagsQueryParamsExtension(ContextAdapter):
+ """View tags query params extension"""
+
+ weight = 50
+
+ def get_params(self, context):
+ catalog = get_utility(ICatalog)
+ settings = IViewTagsSettings(self.context)
+ params = None
+ # check tags
+ tags = settings.get_tags_index(context)
+ if tags:
+ params = and_(params, Any(catalog['tags'], tags))
+ return params
+
+
+#
+# Themes management
+#
+
@implementer(IViewThemesSettings)
class ViewThemesSettings(Persistent, Contained):
"""View themes settings"""
@@ -71,7 +132,7 @@
class ViewThemesQueryParamsExtension(ContextAdapter):
"""View themes query params extension"""
- weight = 50
+ weight = 52
def get_params(self, context):
catalog = get_utility(ICatalog)
@@ -82,3 +143,58 @@
if themes:
params = and_(params, Any(catalog['themes'], themes))
return params
+
+
+#
+# Collections management
+#
+
+@implementer(IViewCollectionsSettings)
+class ViewCollectionsSettings(Persistent, Contained):
+ """View collections settings"""
+
+ select_context_collections = FieldProperty(IViewCollectionsSettings['select_context_collections'])
+ collections = FieldProperty(IViewCollectionsSettings['collections'])
+
+ @property
+ def is_using_context(self):
+ return self.select_context_collections
+
+ def get_collections(self, context):
+ collections = set()
+ if self.select_context_collections:
+ collections_info = ICollectionsInfo(context, None)
+ if collections_info is not None:
+ collections |= set(collections_info.collections or ())
+ if self.collections:
+ collections |= set(self.collections)
+ return collections
+
+ def get_collections_index(self, context):
+ intids = get_utility(IIntIds)
+ return [intids.register(term) for term in self.get_collections(context)]
+
+
+@adapter_config(context=IWfView, provides=IViewCollectionsSettings)
+@adapter_config(name='collections', context=IWfView, provides=IViewSettings)
+def view_collections_settings_factory(view):
+ """View collections settings factory"""
+ return get_annotation_adapter(view, VIEW_COLLECTIONS_SETTINGS_KEY, ViewCollectionsSettings,
+ name='++view:collections++')
+
+
+@adapter_config(name='collections', context=IWfView, provides=IViewQueryParamsExtension)
+class ViewCollectionsQueryParamsExtension(ContextAdapter):
+ """View collections query params extension"""
+
+ weight = 54
+
+ def get_params(self, context):
+ catalog = get_utility(ICatalog)
+ settings = IViewCollectionsSettings(self.context)
+ params = None
+ # check collections
+ collections = settings.get_collections_index(context)
+ if collections:
+ params = and_(params, Any(catalog['collections'], collections))
+ return params
--- a/src/pyams_content/shared/view/zmi/theme.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/shared/view/zmi/theme.py Tue Jul 17 15:09:38 2018 +0200
@@ -17,7 +17,8 @@
# import interfaces
from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_content.shared.view.interfaces import IWfView, IViewThemesSettings, IViewsManager
+from pyams_content.shared.view.interfaces import IWfView, IViewThemesSettings, IViewsManager, IViewTagsSettings, \
+ IViewCollectionsSettings
from pyams_form.interfaces.form import IWidgetForm, IUncheckedEditFormButtons
from pyams_skin.interfaces import IInnerPage
from pyams_skin.layer import IPyAMSLayer
@@ -28,20 +29,73 @@
from z3c.form.interfaces import INPUT_MODE
# import packages
+from pyams_content.component.theme import ITagsManager
from pyams_form.form import ajax_config
from pyams_pagelet.pagelet import pagelet_config
from pyams_skin.viewlet.menu import MenuItem
+from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget
from pyams_utils.registry import get_utility
from pyams_viewlet.viewlet import viewlet_config
from pyams_zmi.form import AdminEditForm
from z3c.form import field, button
+from z3c.form.browser.checkbox import SingleCheckBoxFieldWidget
from zope.interface import implementer, Interface
from pyams_content import _
+#
+# Tags management
+#
+
+@viewlet_config(name='tags.menu', context=IWfView, layer=IAdminLayer,
+ manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=350)
+class ViewTagsMenu(MenuItem):
+ """View tags menu"""
+
+ label = _("Tags...")
+ icon_class = 'fa-tag'
+ url = '#tags.html'
+
+
+@pagelet_config(name='tags.html', context=IWfView, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='tags.json', context=IWfView, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
+@implementer(IWidgetForm, IInnerPage)
+class ViewTagsEditForm(AdminEditForm):
+ """View tags settings edit form"""
+
+ legend = _("View tags settings")
+ label_css_class = 'control-label col-md-1'
+ input_css_class = 'col-md-11'
+
+ fields = field.Fields(IViewTagsSettings)
+ fields['select_context_tags'].widgetFactory = SingleCheckBoxFieldWidget
+ fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget
+
+ @property
+ def buttons(self):
+ if self.mode == INPUT_MODE:
+ return button.Buttons(IUncheckedEditFormButtons)
+ else:
+ return button.Buttons(Interface)
+
+ def updateWidgets(self, prefix=None):
+ super(ViewTagsEditForm, self).updateWidgets(prefix)
+ if 'tags' in self.widgets:
+ manager = ITagsManager(self.request.root)
+ widget = self.widgets['tags']
+ widget.label_css_class = 'control-label col-md-2'
+ widget.input_css_class = 'col-md-12'
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+
+
+#
+# Themes management
+#
+
@viewlet_config(name='themes.menu', context=IWfView, layer=IAdminLayer,
- manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=350)
+ manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=352)
class ViewThemesMenu(MenuItem):
"""View themes menu"""
@@ -57,8 +111,12 @@
"""View themes settings edit form"""
legend = _("View themes settings")
+ label_css_class = 'control-label col-md-1'
+ input_css_class = 'col-md-11'
fields = field.Fields(IViewThemesSettings)
+ fields['select_context_themes'].widgetFactory = SingleCheckBoxFieldWidget
+ fields['themes'].widgetFactory = ThesaurusTermsTreeFieldWidget
@property
def buttons(self):
@@ -70,5 +128,55 @@
def updateWidgets(self, prefix=None):
super(ViewThemesEditForm, self).updateWidgets(prefix)
if 'themes' in self.widgets:
- manager = get_utility(IViewsManager)
- self.widgets['themes'].thesaurus_name = IThesaurusContextManager(manager).thesaurus_name
+ manager = IThesaurusContextManager(get_utility(IViewsManager))
+ widget = self.widgets['themes']
+ widget.label_css_class = 'control-label col-md-2'
+ widget.input_css_class = 'col-md-12'
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
+
+
+#
+# Collections management
+#
+
+@viewlet_config(name='collections.menu', context=IWfView, layer=IAdminLayer,
+ manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=354)
+class ViewCollectionsMenu(MenuItem):
+ """View collections menu"""
+
+ label = _("Collections...")
+ icon_class = 'fa-book'
+ url = '#collections.html'
+
+
+@pagelet_config(name='collections.html', context=IWfView, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@ajax_config(name='collections.json', context=IWfView, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
+@implementer(IWidgetForm, IInnerPage)
+class ViewCollectionsEditForm(AdminEditForm):
+ """View collections settings edit form"""
+
+ legend = _("View collections settings")
+ label_css_class = 'control-label col-md-1'
+ input_css_class = 'col-md-11'
+
+ fields = field.Fields(IViewCollectionsSettings)
+ fields['select_context_collections'].widgetFactory = SingleCheckBoxFieldWidget
+ fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget
+
+ @property
+ def buttons(self):
+ if self.mode == INPUT_MODE:
+ return button.Buttons(IUncheckedEditFormButtons)
+ else:
+ return button.Buttons(Interface)
+
+ def updateWidgets(self, prefix=None):
+ super(ViewCollectionsEditForm, self).updateWidgets(prefix)
+ if 'collections' in self.widgets:
+ manager = IThesaurusContextManager(get_utility(IViewsManager))
+ widget = self.widgets['collections']
+ widget.label_css_class = 'control-label col-md-2'
+ widget.input_css_class = 'col-md-12'
+ widget.thesaurus_name = manager.thesaurus_name
+ widget.extract_name = manager.extract_name
--- a/src/pyams_content/site.py Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/site.py Tue Jul 17 15:09:38 2018 +0200
@@ -19,6 +19,7 @@
# import interfaces
from hypatia.interfaces import ICatalog
from pyams_content.shared.common.interfaces import IWfSharedContent
+from pyams_content.shared.site.interfaces import IContentLink
from zope.intid.interfaces import IIntIds
# import packages
@@ -38,6 +39,9 @@
for document in find_objects_providing(application, IWfSharedContent):
print("Indexing: {0!r}".format(document))
catalog.reindex_doc(intids.register(document), document)
+ for document in find_objects_providing(application, IContentLink):
+ print("Indexing: {0!r}".format(document))
+ catalog.reindex_doc(intids.register(document), document)
finally:
set_local_registry(None)
transaction.commit()
--- a/src/pyams_content/skin/resources/js/pyams_content.js Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.js Tue Jul 17 15:09:38 2018 +0200
@@ -350,6 +350,24 @@
MyAMS.initContent(marker);
}
MyAMS.helpers.sort(toolbar, 'weight');
+ },
+
+ switchAnchor: function() {
+ return function () {
+ var source = $(this);
+ var element = source.parents('tr').first();
+ var container = element.parents('table');
+ MyAMS.ajax.post(container.data('ams-location') + '/' +
+ container.data('ams-anchor-switcher'),
+ {object_name: element.data('ams-element-name')},
+ function (result, status) {
+ if (result.anchor) {
+ $('i', source).attr('class', 'fa fa-fw fa-anchor');
+ } else {
+ $('i', source).attr('class', 'fa fa-fw fa-anchor txt-color-silver opacity-50');
+ }
+ });
+ }
}
},
@@ -384,9 +402,9 @@
themes: {
initExtracts: function(element) {
- var thesaurus = $('select[name="form.widgets.thesaurus_name:list"]', element);
+ var thesaurus = $('select[name="manager_themes.widgets.thesaurus_name:list"]', element);
var thesaurus_name = thesaurus.val();
- var extract = $('select[name="form.widgets.extract_name:list"]', element);
+ var extract = $('select[name="manager_themes.widgets.extract_name:list"]', element);
var extract_name = extract.val();
if (thesaurus_name) {
MyAMS.jsonrpc.post('getExtracts',
@@ -402,24 +420,27 @@
});
});
}
- extract.attr('data-ams-events-handlers', '{"select2-open": "PyAMS_content.themes.getExtracts"}');
},
getExtracts: function(event) {
var select = $(event.currentTarget);
var form = select.parents('form');
- var thesaurus_name = $('select[name="form.widgets.thesaurus_name:list"]', form).val();
- if (thesaurus_name) {
+ var thesaurus_name = $('select[name="manager_themes.widgets.thesaurus_name:list"]', form).val();
+ var extract = $('select[name="manager_themes.widgets.extract_name:list"]', form);
+ var plugin = extract.data('select2');
+ if (thesaurus_name && (thesaurus_name !== '--NOVALUE--')) {
MyAMS.jsonrpc.post('getExtracts',
{thesaurus_name: thesaurus_name},
{url: '/api/thesaurus/json'},
function(data) {
- var extract = $('select[name="form.widgets.extract_name:list"]', form);
- var plugin = extract.data('select2');
plugin.results.empty();
plugin.opts.populateResults.call(plugin, plugin.results, data.result,
{term: ''});
});
+ } else {
+ extract.select2('data', null);
+ plugin.results.empty();
+ plugin.opts.populateResults.call(plugin, plugin.results, [], {term: ''});
}
}
},
--- a/src/pyams_content/skin/resources/js/pyams_content.min.js Mon Jun 25 17:26:50 2018 +0200
+++ b/src/pyams_content/skin/resources/js/pyams_content.min.js Tue Jul 17 15:09:38 2018 +0200
@@ -1,1 +1,1 @@
-!function(o,t){"use strict";var l=t.MyAMS,a={widget:{treeview:{selectFolder:function(t,e){o(t.target).siblings('input[type="hidden"]').val(e.id)},unselectFolder:function(t,e){o(t.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(e,t){e.addButton("internal_links",{icon:"cloud-check",tooltip:"Insert internal link",image:"/--static--/pyams_content/img/internal-link.png",onclick:function(){e.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"oid",label:"Internal number"},{type:"textbox",name:"title",label:"Link title",value:e.selection.getContent()}],onsubmit:function(t){e.insertContent('<a href="oid://'+t.data.oid+'">'+t.data.title+"</a>")}})}})}),tinyMCE.PluginManager.add("headers",function(i,t){["h3","h4"].forEach(function(a){i.addButton("header-"+a,{tooltip:"Toggle "+a+" header",text:a.toUpperCase(),onClick:function(){i.execCommand("mceToggleFormat",!1,a)},onPostRender:function(){var e=this,t=function(){i.formatter.formatChanged(a,function(t){e.active(t)})};i.formatter?t():i.on("init",t)}})})}),t.image_list=a.TinyMCE.getImagesList,t.link_list=a.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(t){var e=o(document.activeElement).parents("form");if(e.exists()){var a=e.attr("data-ams-form-handler")||e.attr("action"),i=a.substr(0,a.lastIndexOf("/")+1);return l.ajax.post(i+"get-images-list.json",{},t)}},getLinksList:function(t){var e=o(document.activeElement).parents("form");if(e.exists()){var a=e.attr("data-ams-form-handler")||e.attr("action"),i=a.substr(0,a.lastIndexOf("/")+1);return l.ajax.post(i+"get-links-list.json",{},t)}}},galleries:{updateMediaTitle:function(t){o('img[id="'+t.media_id+'"]').attr("original-title",t.title)},switchMediaVisibility:function(t){return function(){var a=o(this),t=a.parents(".media"),e=t.parents(".gallery");l.ajax.post(e.data("ams-location")+"/set-media-visibility.json",{object_name:t.data("ams-element-name")},function(t,e){t.visible?(o("i",a).attr("class","fa fa-fw fa-eye"),a.parents(".btn-group").siblings("a.fancyimg").removeClass("not-visible")):(o("i",a).attr("class","fa fa-fw fa-eye-slash text-danger"),a.parents(".btn-group").siblings("a.fancyimg").addClass("not-visible"))})}},setOrder:function(t,e){if(!e||!e.item.hasClass("already-dropped")){var a=e.item.parents(".gallery"),i=o(".media",a).listattr("data-ams-element-name");l.ajax.post(a.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(i)})}},removeMedia:function(t){return function(){var n=o(this);l.skin.bigBox({title:l.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i> '+l.i18n.DELETE_WARNING,buttons:l.i18n.BTN_OK_CANCEL},function(t){if(t===l.i18n.BTN_OK){var e=n.parents(".gallery").data("ams-location"),a=n.parents(".media"),i=a.data("ams-element-name");l.ajax.post(e+"/delete-element.json",{object_name:i},function(t,e){a.remove()})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},paragraphs:{preReload:function(){a.paragraphs.switched=o("i.switch.fa-minus-square-o","#paragraphs_list").parents("tr").listattr("id")},postReload:function(){o(a.paragraphs.switched).each(function(){o("i.switch.fa-plus-square-o",'[id="'+this+'"]').parents("div").first().click()}),delete a.paragraphs.switched},refreshParagraph:function(t){var e=o('tr[id="'+t.object_id+'"]');o("span.title",e).html(t.title||" - - - - - - - -")},switchEditor:function(t){var e=o(this),a=o("i.switch",e),i=e.parents("td"),n=o(".editor",i),s=e.parents("tr");if(a.hasClass("fa-plus-square-o")){var r=s.parents("table");n.html('<h1 class="loading"><i class="fa fa-2x fa-gear fa-spin"></i></h1>'),l.ajax.post(r.data("ams-location")+"/get-paragraph-editor.json",{object_name:s.data("ams-element-name")},function(t){n.html(t),t&&(l.initContent(n),a.removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),s.data("ams-disabled-handlers",!0),l.skin.scrollTo(n,{offset:n.height()-s.height()}))})}else l.skin.cleanContainer(n),n.empty(),a.removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),s.removeData("ams-disabled-handlers")},switchLastEditor:function(t){var e=o('table[id="'+t+'"]'),a=o("tr:last",e);o('[data-ams-click-handler="PyAMS_content.paragraphs.switchEditor"]',a).click()},switchAllEditors:function(t){var e=o(this),n=o("i",e),s=e.parents("table");n.hasClass("fa-plus-square-o")?(n.removeClass("fa-plus-square-o").addClass("fa-cog fa-spin"),l.ajax.post(s.data("ams-location")+"/get-paragraphs-editors.json",{},function(t){for(var e in t)if(t.hasOwnProperty(e)){var a=o('tr[data-ams-element-name="'+e+'"]',s),i=o(".editor",a);i.is(":empty")&&i.html(t[e]),o(".fa-plus-square-o",a).removeClass("fa-plus-square-o").addClass("fa-minus-square-o"),a.data("ams-disabled-handlers",!0)}o("i.fa-plus-square-o",o("tbody",s)).exists()||n.removeClass("fa-cog fa-spin").addClass("fa-minus-square-o"),l.initContent(s)})):(o(".editor",s).each(function(){l.skin.cleanContainer(o(this)),o(this).empty()}),o(".fa-minus-square-o",s).removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),o("tr",s).removeData("ams-disabled-handlers"))},updateToolbar:function(t){var e=o('tr[id="'+t.object_id+'"]'),a=o(".title-toolbar",e);a.replaceWith(t.toolbar_tag),a=o(".title-toolbar",e),l.initContent(a)},updateMarkers:function(t){var e=o('tr[id="'+t.object_id+'"]'),a=o(".title-toolbar",e),i=o("DIV.action."+t.marker_type,a);i.exists()?i.replaceWith(t.marker_tag):o(t.marker_tag).appendTo(a),t.marker_tag&&(i=o("DIV.action."+t.marker_type,a),l.initContent(i)),l.helpers.sort(a,"weight")}},pictograms:{initManagerSelection:function(){var t=o(this),e=o('input[type="hidden"]',o(".selected-pictograms",t)).listattr("value");return{selected:JSON.stringify(e)}},switchPictogram:function(){var t=o(this),e=t.parents(".pictograms"),a=e.parents(".pictograms-manager");e.hasClass("available-pictograms")?o(".selected-pictograms",a).append(t):o(".available-pictograms",a).append(t)}},themes:{initExtracts:function(t){var e=o('select[name="form.widgets.thesaurus_name:list"]',t).val(),a=o('select[name="form.widgets.extract_name:list"]',t),i=a.val();e&&l.jsonrpc.post("getExtracts",{thesaurus_name:e},{url:"/api/thesaurus/json"},function(t){a.empty(),o(t.result).each(function(){o("<option></option>").attr("value",this.id).attr("selected",this.id===i).text(this.text).appendTo(a)})}),a.attr("data-ams-events-handlers",'{"select2-open": "PyAMS_content.themes.getExtracts"}')},getExtracts:function(t){var a=o(t.currentTarget).parents("form"),e=o('select[name="form.widgets.thesaurus_name:list"]',a).val();e&&l.jsonrpc.post("getExtracts",{thesaurus_name:e},{url:"/api/thesaurus/json"},function(t){var e=o('select[name="form.widgets.extract_name:list"]',a).data("select2");e.results.empty(),e.opts.populateResults.call(e,e.results,t.result,{term:""})})}},fields:{refreshField:function(t){var e=o('table[id="form_fields_list"]'),a=o('tr[data-ams-element-name="'+t.object_name+'"]',e);o("td:nth-child(4)",a).html(t.title)}},imgmap:{init:function(){var t=o(this);l.ajax.check(o.fn.canvasAreaDraw,"/--static--/pyams_content/js/jquery-canvasAreaDraw"+l.devext+".js",function(){t.canvasAreaDraw({imageUrl:t.data("ams-image-url")})})},initPreview:function(){var t=o(this);l.ajax.check(o.fn.mapster,"/--static--/pyams_content/js/jquery-imagemapster-1.2.10"+l.devext+".js",function(){t.mapster({fillColor:"ff0000",fillOpacity:.35,selected:!0,highlight:!0,staticState:!0})})}},site:{switchVisibility:function(){return function(){var i=o(this),t=i.parents("tr").first();l.ajax.post(t.data("ams-location")+"/switch-content-visibility.json",{object_name:t.data("ams-element-name")},function(t,e){var a="fa-eye";t.visible||(a+="-slash"),t.published||(a+=" text-danger"),o("i",i).attr("class","fa fa-fw "+a)})}}},review:{timer:null,timer_duration:{general:3e4,chat:5e3},initComments:function(t){var e=o(".chat-body",t);e.animate({scrollTop:e[0].scrollHeight},1e3),clearInterval(a.review.timer),a.review.timer=setInterval(a.review.updateComments,a.review.timer_duration.chat),l.skin.registerCleanCallback(a.review.cleanCommentsCallback)},cleanCommentsCallback:function(){clearInterval(a.review.timer),a.review.timer=setInterval(a.review.updateComments,a.review.timer_duration.general)},updateComments:function(){var e,a=o(".badge",'nav a[href="#review-comments.html"]'),i=o(".chat-body",".widget-body");e=i.exists()?o(".message",i).length:parseInt(a.text()),l.ajax.post("get-last-review-comments.json",{count:e},function(t){i.exists()&&a.removeClass("bg-color-danger").addClass("bg-color-info"),e!==t.count&&(a.text(t.count).removeClass("hidden"),i.exists()&&(o(".messages",i).append(t.content),i.animate({scrollTop:i[0].scrollHeight},1e3)),i.exists()||a.removeClass("bg-color-info").addClass("bg-color-danger").animate({padding:"3px 12px 2px","margin-right":"9px"},"slow",function(){o(this).animate({padding:"3px 6px 2px","margin-right":"15px"},"slow")}))})},initCommentData:function(t){var e=o(".chat-body",".widget-body");return{count:o(".message",e).length}},addCommentAction:function(){return function(){o('textarea[name="comment"]').focus()}},addCommentCallback:function(t){var e=o(this),a=e.parents(".widget-body");o(".messages",a).append(t.content),o('textarea[name="comment"]',e).val("");var i=o(".chat-body",a);i.animate({scrollTop:i[0].scrollHeight},1e3),o(".badge",'nav a[href="#review-comments.html"]').text(t.count).removeClass("hidden")}},header:{submitEditForm:function(){var t=o(this).parents("form").first();l.form.submit(t,{form_data:{autosubmit:!0}})}},footer:{submitEditForm:function(){var t=o(this).parents("form").first();l.form.submit(t,{form_data:{autosubmit:!0}})}},profile:{switchFavorite:function(){var a=o(this),t=a.data("sequence-oid");l.ajax.post("switch-user-favorite.json",{oid:t},function(t,e){t.favorite?a.removeClass("fa-star-o").addClass("fa-star"):a.removeClass("fa-star").addClass("fa-star-o")})}}};o(".badge",'nav a[href="#review-comments.html"]').exists()&&(a.review.timer=setInterval(a.review.updateComments,a.review.timer_duration.general)),t.PyAMS_content=a}(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> '+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),a.skin.scrollTo(r,{offset:r.height()-o.height()}))})}else a.skin.cleanContainer(r),r.empty(),n.removeClass("fa-minus-square-o").addClass("fa-plus-square-o"),o.removeData("ams-disabled-handlers")},switchLastEditor:function(e){var a=t('table[id="'+e+'"]'),i=t("tr:last",a);t('[data-ams-click-handler="PyAMS_content.paragraphs.switchEditor"]',i).click()},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")},switchAnchor:function(){return function(){var e=t(this),i=e.parents("tr").first(),n=i.parents("table");a.ajax.post(n.data("ams-location")+"/"+n.data("ams-anchor-switcher"),{object_name:i.data("ams-element-name")},function(a,i){a.anchor?t("i",e).attr("class","fa fa-fw fa-anchor"):t("i",e).attr("class","fa fa-fw fa-anchor txt-color-silver opacity-50")})}}},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="manager_themes.widgets.thesaurus_name:list"]',e).val(),n=t('select[name="manager_themes.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)})})},getExtracts:function(e){var i=t(e.currentTarget).parents("form"),n=t('select[name="manager_themes.widgets.thesaurus_name:list"]',i).val(),s=t('select[name="manager_themes.widgets.extract_name:list"]',i),r=s.data("select2");n&&"--NOVALUE--"!==n?a.jsonrpc.post("getExtracts",{thesaurus_name:n},{url:"/api/thesaurus/json"},function(t){r.results.empty(),r.opts.populateResults.call(r,r.results,t.result,{term:""})}):(s.select2("data",null),r.results.empty(),r.opts.populateResults.call(r,r.results,[],{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})})}},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")}},header:{submitEditForm:function(){var e=t(this).parents("form").first();a.form.submit(e,{form_data:{autosubmit:!0}})}},footer:{submitEditForm:function(){var e=t(this).parents("form").first();a.form.submit(e,{form_data:{autosubmit:!0}})}},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);