Version 0.1.52 0.1.52
authorThierry Florac <tflorac@ulthar.net>
Fri, 26 Jul 2019 19:23:33 +0200
changeset 1339 401655442ef0
parent 1338 a89ab799a162
child 1340 d2e2e785252b
Version 0.1.52
buildout.cfg
docs/HISTORY.txt
setup.py
src/pyams_content.egg-info/PKG-INFO
src/pyams_content.egg-info/SOURCES.txt
src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo
src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po
src/pyams_content/locales/pyams_content.pot
src/pyams_content/zmi/resources/js/pyams_content.js
src/pyams_content/zmi/resources/js/pyams_content.min.js
--- a/buildout.cfg	Fri Jul 26 13:04:54 2019 +0200
+++ b/buildout.cfg	Fri Jul 26 19:23:33 2019 +0200
@@ -85,4 +85,4 @@
 eggs = pyams_content [test]
 
 [versions]
-pyams_content = 0.1.51.2
+pyams_content = 0.1.52
--- a/docs/HISTORY.txt	Fri Jul 26 13:04:54 2019 +0200
+++ b/docs/HISTORY.txt	Fri Jul 26 19:23:33 2019 +0200
@@ -1,6 +1,16 @@
 History
 =======
 
+0.1.52
+------
+ - updated label dor draft contents using standard workflow
+ - added actions support to form fields container table
+ - make form fields annotatable
+ - use an iterator when getting form's fields list
+ - added Google's Recaptcha support to forms
+ - update permissions management in associations containers and items (including menus)
+ - corrected logos paragraph content checker
+
 0.1.51.2
 --------
  - small update in owner change form (use and store a copy of contributor's attribute instead of updating them
--- a/setup.py	Fri Jul 26 13:04:54 2019 +0200
+++ b/setup.py	Fri Jul 26 19:23:33 2019 +0200
@@ -24,7 +24,7 @@
 README = os.path.join(DOCS, 'README.txt')
 HISTORY = os.path.join(DOCS, 'HISTORY.txt')
 
-version = '0.1.51.2'
+version = '0.1.52'
 long_description = open(README).read() + '\n\n' + open(HISTORY).read()
 
 tests_require = []
--- a/src/pyams_content.egg-info/PKG-INFO	Fri Jul 26 13:04:54 2019 +0200
+++ b/src/pyams_content.egg-info/PKG-INFO	Fri Jul 26 19:23:33 2019 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pyams-content
-Version: 0.1.51.2
+Version: 0.1.52
 Summary: PyAMS base content interfaces and classes
 Home-page: http://hg.ztfy.org/pyams/pyams_content
 Author: Thierry Florac
@@ -72,6 +72,16 @@
         History
         =======
         
+        0.1.52
+        ------
+         - updated label dor draft contents using standard workflow
+         - added actions support to form fields container table
+         - make form fields annotatable
+         - use an iterator when getting form's fields list
+         - added Google's Recaptcha support to forms
+         - update permissions management in associations containers and items (including menus)
+         - corrected logos paragraph content checker
+        
         0.1.51.2
         --------
          - small update in owner change form (use and store a copy of contributor's attribute instead of updating them
--- a/src/pyams_content.egg-info/SOURCES.txt	Fri Jul 26 13:04:54 2019 +0200
+++ b/src/pyams_content.egg-info/SOURCES.txt	Fri Jul 26 19:23:33 2019 +0200
@@ -436,10 +436,6 @@
 src/pyams_content/zmi/resources/js/jquery-imagemapster-1.2.10.min.js
 src/pyams_content/zmi/resources/js/pyams_content.js
 src/pyams_content/zmi/resources/js/pyams_content.min.js
-src/pyams_content/zmi/resources/js/pyams_content.min.min.js
-src/pyams_content/zmi/resources/js/pyams_content.min.min.min.js
-src/pyams_content/zmi/resources/js/pyams_content.min.min.min.min.js
-src/pyams_content/zmi/resources/js/pyams_content.min.min.min.min.min.js
 src/pyams_content/zmi/resources/less/pyams_content.less
 src/pyams_content/zmi/viewlet/__init__.py
 src/pyams_content/zmi/viewlet/toplinks/__init__.py
Binary file src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.mo has changed
--- a/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Fri Jul 26 13:04:54 2019 +0200
+++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po	Fri Jul 26 19:23:33 2019 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2019-06-28 18:06+0200\n"
+"POT-Creation-Date: 2019-07-26 12:53+0200\n"
 "PO-Revision-Date: 2015-09-10 10:42+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -200,7 +200,7 @@
 #: src/pyams_content/features/search/portlet/interfaces.py:25
 #: src/pyams_content/root/zmi/templates/advanced-search.pt:197
 #: src/pyams_content/shared/view/portlet/interfaces.py:52
-#: src/pyams_content/shared/common/zmi/dashboard.py:123
+#: src/pyams_content/shared/common/zmi/dashboard.py:122
 #: src/pyams_content/shared/common/zmi/reverse.py:73
 #: src/pyams_content/shared/common/zmi/templates/advanced-search.pt:200
 #: src/pyams_content/shared/site/portlet/interfaces.py:24
@@ -237,7 +237,7 @@
 #: src/pyams_content/component/association/interfaces.py:37
 #: src/pyams_content/features/alert/interfaces.py:54
 #: src/pyams_content/features/menu/interfaces.py:62
-#: src/pyams_content/shared/form/interfaces.py:85
+#: src/pyams_content/shared/form/interfaces.py:83
 #: src/pyams_content/shared/site/interfaces.py:179
 msgid "Visible?"
 msgstr "Visible ?"
@@ -476,7 +476,7 @@
 #: src/pyams_content/component/paragraph/interfaces/audio.py:50
 #: src/pyams_content/component/extfile/interfaces.py:36
 #: src/pyams_content/features/search/interfaces.py:45
-#: src/pyams_content/shared/form/interfaces.py:64
+#: src/pyams_content/shared/form/interfaces.py:62
 msgid "Description"
 msgstr "Description"
 
@@ -1119,6 +1119,7 @@
 msgstr "Référence d'un formulaire de contact"
 
 #: src/pyams_content/component/paragraph/interfaces/contact.py:69
+#: src/pyams_content/shared/form/field.py:207
 msgid "Phone number"
 msgstr "Téléphone"
 
@@ -2319,9 +2320,9 @@
 
 #: src/pyams_content/features/share/interfaces.py:62
 #: src/pyams_content/features/share/zmi/container.py:155
-#: src/pyams_content/features/menu/zmi/__init__.py:218
-#: src/pyams_content/shared/form/interfaces.py:60
-#: src/pyams_content/shared/form/zmi/field.py:167
+#: src/pyams_content/features/menu/zmi/__init__.py:217
+#: src/pyams_content/shared/form/interfaces.py:58
+#: src/pyams_content/shared/form/zmi/field.py:166
 #: src/pyams_content/shared/common/interfaces/types.py:43
 msgid "Label"
 msgstr "Libellé"
@@ -3119,27 +3120,27 @@
 msgid "Link has no illustration"
 msgstr "Le lien n'a pas d'illustration"
 
-#: src/pyams_content/features/menu/zmi/__init__.py:80
+#: src/pyams_content/features/menu/zmi/__init__.py:83
 msgid "Add menu..."
 msgstr "Ajouter une entrée"
 
-#: src/pyams_content/features/menu/zmi/__init__.py:91
+#: src/pyams_content/features/menu/zmi/__init__.py:94
 msgid "Add new menu"
 msgstr "Ajout d'un menu"
 
-#: src/pyams_content/features/menu/zmi/__init__.py:124
+#: src/pyams_content/features/menu/zmi/__init__.py:127
 msgid "Edit menu properties"
 msgstr "Propriétés du menu"
 
-#: src/pyams_content/features/menu/zmi/__init__.py:230
+#: src/pyams_content/features/menu/zmi/__init__.py:229
 msgid "Inner content"
 msgstr "Contenu interne"
 
-#: src/pyams_content/features/menu/zmi/__init__.py:111
+#: src/pyams_content/features/menu/zmi/__init__.py:114
 msgid "Menu was correctly added."
 msgstr "Le menu a été ajouté."
 
-#: src/pyams_content/features/menu/zmi/__init__.py:415
+#: src/pyams_content/features/menu/zmi/__init__.py:419
 msgid "Link was correctly added."
 msgstr "Le lien a été ajouté."
 
@@ -3536,213 +3537,213 @@
 msgstr "Accueil"
 
 #: src/pyams_content/root/zmi/__init__.py:110
-#: src/pyams_content/shared/common/zmi/dashboard.py:290
+#: src/pyams_content/shared/common/zmi/dashboard.py:289
 msgid "Dashboard"
 msgstr "Tableau de bord"
 
 #: src/pyams_content/root/zmi/__init__.py:159
-#: src/pyams_content/shared/common/zmi/dashboard.py:346
+#: src/pyams_content/shared/common/zmi/dashboard.py:345
 #, python-format
 msgid "MANAGER - {0} content waiting for your action"
 msgstr "RESPONSABLE - {0} contenu en attente de votre intervention"
 
 #: src/pyams_content/root/zmi/__init__.py:160
-#: src/pyams_content/shared/common/zmi/dashboard.py:347
+#: src/pyams_content/shared/common/zmi/dashboard.py:346
 #, python-format
 msgid "MANAGER - {0} contents waiting for your action"
 msgstr "RESPONSABLE - {0} contenus en attente de votre intervention"
 
 #: src/pyams_content/root/zmi/__init__.py:204
-#: src/pyams_content/shared/common/zmi/dashboard.py:388
+#: src/pyams_content/shared/common/zmi/dashboard.py:387
 #, python-format
 msgid "CONTRIBUTOR - {0} content waiting for action"
 msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
 
 #: src/pyams_content/root/zmi/__init__.py:205
-#: src/pyams_content/shared/common/zmi/dashboard.py:389
+#: src/pyams_content/shared/common/zmi/dashboard.py:388
 #, python-format
 msgid "CONTRIBUTOR - {0} contents waiting for action"
 msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
 
 #: src/pyams_content/root/zmi/__init__.py:240
-#: src/pyams_content/shared/common/zmi/dashboard.py:421
+#: src/pyams_content/shared/common/zmi/dashboard.py:420
 #, python-format
 msgid "CONTRIBUTOR - {0} modified content"
 msgstr "CONTRIBUTEUR - {0} contenu modifié"
 
 #: src/pyams_content/root/zmi/__init__.py:283
-#: src/pyams_content/shared/common/zmi/dashboard.py:462
+#: src/pyams_content/shared/common/zmi/dashboard.py:461
 msgid "My contents"
 msgstr "Mes contenus"
 
 #: src/pyams_content/root/zmi/__init__.py:298
 #: src/pyams_content/root/zmi/templates/dashboard.pt:8
-#: src/pyams_content/shared/common/zmi/dashboard.py:477
+#: src/pyams_content/shared/common/zmi/dashboard.py:476
 #: src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
 msgid "My favorites"
 msgstr "Mes favoris"
 
 #: src/pyams_content/root/zmi/__init__.py:307
-#: src/pyams_content/shared/common/zmi/dashboard.py:486
+#: src/pyams_content/shared/common/zmi/dashboard.py:485
 #, python-format
 msgid "CONTRIBUTOR - {0} favorite"
 msgstr "CONTRIBUTEUR - {0} contenu favori"
 
 #: src/pyams_content/root/zmi/__init__.py:308
-#: src/pyams_content/shared/common/zmi/dashboard.py:487
+#: src/pyams_content/shared/common/zmi/dashboard.py:486
 #, python-format
 msgid "CONTRIBUTOR - {0} favorites"
 msgstr "CONTRIBUTEUR - {0} contenus favoris"
 
 #: src/pyams_content/root/zmi/__init__.py:346
-#: src/pyams_content/shared/common/zmi/dashboard.py:562
+#: src/pyams_content/shared/common/zmi/dashboard.py:561
 msgid "Your favorite contents"
 msgstr "Mes contenus favoris"
 
 #: src/pyams_content/root/zmi/__init__.py:359
-#: src/pyams_content/shared/common/zmi/dashboard.py:575
+#: src/pyams_content/shared/common/zmi/dashboard.py:574
 msgid "My drafts"
 msgstr "Mes brouillons"
 
 #: src/pyams_content/root/zmi/__init__.py:368
-#: src/pyams_content/shared/common/zmi/dashboard.py:584
+#: src/pyams_content/shared/common/zmi/dashboard.py:583
 #, python-format
 msgid "CONTRIBUTOR - {0} content in preparation"
 msgstr "CONTRIBUTEUR - {0} contenu en préparation"
 
 #: src/pyams_content/root/zmi/__init__.py:369
-#: src/pyams_content/shared/common/zmi/dashboard.py:585
+#: src/pyams_content/shared/common/zmi/dashboard.py:584
 #, python-format
 msgid "CONTRIBUTOR - {0} contents in preparation"
 msgstr "CONTRIBUTEUR - {0} contenus en préparation"
 
 #: src/pyams_content/root/zmi/__init__.py:408
-#: src/pyams_content/shared/common/zmi/dashboard.py:626
+#: src/pyams_content/shared/common/zmi/dashboard.py:625
 msgid "Your prepared contents"
 msgstr "Mes contenus en préparation"
 
 #: src/pyams_content/root/zmi/__init__.py:421
-#: src/pyams_content/shared/common/zmi/dashboard.py:639
+#: src/pyams_content/shared/common/zmi/dashboard.py:638
 msgid "My submissions"
 msgstr "Mes demandes"
 
 #: src/pyams_content/root/zmi/__init__.py:430
-#: src/pyams_content/shared/common/zmi/dashboard.py:648
+#: src/pyams_content/shared/common/zmi/dashboard.py:647
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted content"
 msgstr "CONTRIBUTEUR - {0} contenu soumis à un responsable"
 
 #: src/pyams_content/root/zmi/__init__.py:431
-#: src/pyams_content/shared/common/zmi/dashboard.py:649
+#: src/pyams_content/shared/common/zmi/dashboard.py:648
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted contents"
 msgstr "CONTRIBUTEUR - {0} contenus soumis à un responsable"
 
 #: src/pyams_content/root/zmi/__init__.py:470
-#: src/pyams_content/shared/common/zmi/dashboard.py:690
+#: src/pyams_content/shared/common/zmi/dashboard.py:689
 msgid "Your submitted contents"
 msgstr "Mes contenus soumis à un responsable"
 
 #: src/pyams_content/root/zmi/__init__.py:483
-#: src/pyams_content/shared/common/zmi/dashboard.py:703
+#: src/pyams_content/shared/common/zmi/dashboard.py:702
 msgid "My publications"
 msgstr "Mes publications"
 
 #: src/pyams_content/root/zmi/__init__.py:492
-#: src/pyams_content/shared/common/zmi/dashboard.py:712
+#: src/pyams_content/shared/common/zmi/dashboard.py:711
 #, python-format
 msgid "CONTRIBUTOR - {0} published content"
 msgstr "CONTRIBUTEUR - {0} contenu publié"
 
 #: src/pyams_content/root/zmi/__init__.py:493
-#: src/pyams_content/shared/common/zmi/dashboard.py:713
+#: src/pyams_content/shared/common/zmi/dashboard.py:712
 #, python-format
 msgid "CONTRIBUTOR - {0} published contents"
 msgstr "CONTRIBUTEUR - {0} contenus publiés"
 
 #: src/pyams_content/root/zmi/__init__.py:532
-#: src/pyams_content/shared/common/zmi/dashboard.py:754
+#: src/pyams_content/shared/common/zmi/dashboard.py:753
 msgid "Your published contents"
 msgstr "Mes contenus publiés"
 
 #: src/pyams_content/root/zmi/__init__.py:545
-#: src/pyams_content/shared/common/zmi/dashboard.py:767
+#: src/pyams_content/shared/common/zmi/dashboard.py:766
 msgid "My retired contents"
 msgstr "Mes contenus retirés"
 
 #: src/pyams_content/root/zmi/__init__.py:554
-#: src/pyams_content/shared/common/zmi/dashboard.py:776
+#: src/pyams_content/shared/common/zmi/dashboard.py:775
 #, python-format
 msgid "CONTRIBUTOR - {0} retired content"
 msgstr "CONTRIBUTEUR - {0} contenu retiré"
 
 #: src/pyams_content/root/zmi/__init__.py:555
-#: src/pyams_content/shared/common/zmi/dashboard.py:777
+#: src/pyams_content/shared/common/zmi/dashboard.py:776
 #, python-format
 msgid "CONTRIBUTOR - {0} retired contents"
 msgstr "CONTRIBUTEUR - {0} contenus retirés"
 
 #: src/pyams_content/root/zmi/__init__.py:595
-#: src/pyams_content/shared/common/zmi/dashboard.py:818
+#: src/pyams_content/shared/common/zmi/dashboard.py:817
 msgid "Your retired contents"
 msgstr "Mes contenus retirés"
 
 #: src/pyams_content/root/zmi/__init__.py:608
-#: src/pyams_content/shared/common/zmi/dashboard.py:831
+#: src/pyams_content/shared/common/zmi/dashboard.py:830
 msgid "My archived contents"
 msgstr "Mes contenus archivés"
 
 #: src/pyams_content/root/zmi/__init__.py:617
-#: src/pyams_content/shared/common/zmi/dashboard.py:840
+#: src/pyams_content/shared/common/zmi/dashboard.py:839
 #, python-format
 msgid "CONTRIBUTOR - {0} archived content"
 msgstr "CONTRIBUTEUR - {0} contenu archivé"
 
 #: src/pyams_content/root/zmi/__init__.py:618
-#: src/pyams_content/shared/common/zmi/dashboard.py:841
+#: src/pyams_content/shared/common/zmi/dashboard.py:840
 #, python-format
 msgid "CONTRIBUTOR - {0} archived contents"
 msgstr "CONTRIBUTEUR - {0} contenus archivés"
 
 #: src/pyams_content/root/zmi/__init__.py:664
-#: src/pyams_content/shared/common/zmi/dashboard.py:888
+#: src/pyams_content/shared/common/zmi/dashboard.py:887
 msgid "Your archived contents"
 msgstr "Mes contenus archivés"
 
 #: src/pyams_content/root/zmi/__init__.py:678
-#: src/pyams_content/shared/common/zmi/dashboard.py:902
+#: src/pyams_content/shared/common/zmi/dashboard.py:901
 msgid "Other interventions"
 msgstr "Toutes les interventions"
 
 #: src/pyams_content/root/zmi/__init__.py:693
-#: src/pyams_content/shared/common/zmi/dashboard.py:917
+#: src/pyams_content/shared/common/zmi/dashboard.py:916
 msgid "Last publications"
 msgstr "Dernières publications"
 
 #: src/pyams_content/root/zmi/__init__.py:702
-#: src/pyams_content/shared/common/zmi/dashboard.py:926
+#: src/pyams_content/shared/common/zmi/dashboard.py:925
 #, python-format
 msgid "CONTRIBUTORS - {0} published content"
 msgstr "TOUS CONTRIBUTEURS - {0} contenu publié"
 
 #: src/pyams_content/root/zmi/__init__.py:748
-#: src/pyams_content/shared/common/zmi/dashboard.py:973
+#: src/pyams_content/shared/common/zmi/dashboard.py:972
 msgid "Last published contents"
 msgstr "Derniers contenus publiés"
 
 #: src/pyams_content/root/zmi/__init__.py:761
-#: src/pyams_content/shared/common/zmi/dashboard.py:986
+#: src/pyams_content/shared/common/zmi/dashboard.py:985
 msgid "Last updates"
 msgstr "Dernières modifications"
 
 #: src/pyams_content/root/zmi/__init__.py:770
-#: src/pyams_content/shared/common/zmi/dashboard.py:995
+#: src/pyams_content/shared/common/zmi/dashboard.py:994
 #, python-format
 msgid "CONTRIBUTORS - {0} updated content"
 msgstr "TOUS CONTRIBUTEURS - {0} contenu modifié"
 
 #: src/pyams_content/root/zmi/__init__.py:814
-#: src/pyams_content/shared/common/zmi/dashboard.py:1040
+#: src/pyams_content/shared/common/zmi/dashboard.py:1039
 msgid "Last updated contents"
 msgstr "Derniers contenus modifiés"
 
@@ -3752,36 +3753,36 @@
 msgstr "Contenu"
 
 #: src/pyams_content/root/zmi/__init__.py:245
-#: src/pyams_content/shared/common/zmi/dashboard.py:426
+#: src/pyams_content/shared/common/zmi/dashboard.py:425
 #, python-format
 msgid "CONTRIBUTOR - {0} modified contents"
 msgstr "CONTRIBUTEUR - {0} contenus modifiés"
 
 #: src/pyams_content/root/zmi/__init__.py:247
-#: src/pyams_content/shared/common/zmi/dashboard.py:428
+#: src/pyams_content/shared/common/zmi/dashboard.py:427
 #, python-format
 msgid "CONTRIBUTOR - Last {0} modified contents"
 msgstr "CONTRIBUTEUR - Les {0} dernières modifications"
 
 #: src/pyams_content/root/zmi/__init__.py:707
-#: src/pyams_content/shared/common/zmi/dashboard.py:931
+#: src/pyams_content/shared/common/zmi/dashboard.py:930
 #, python-format
 msgid "CONTRIBUTORS - Last {0} published contents"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
 
 #: src/pyams_content/root/zmi/__init__.py:709
-#: src/pyams_content/shared/common/zmi/dashboard.py:933
+#: src/pyams_content/shared/common/zmi/dashboard.py:932
 msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières publications"
 
 #: src/pyams_content/root/zmi/__init__.py:775
-#: src/pyams_content/shared/common/zmi/dashboard.py:1000
+#: src/pyams_content/shared/common/zmi/dashboard.py:999
 #, python-format
 msgid "CONTRIBUTORS - Last {0} updated contents"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
 
 #: src/pyams_content/root/zmi/__init__.py:777
-#: src/pyams_content/shared/common/zmi/dashboard.py:1002
+#: src/pyams_content/shared/common/zmi/dashboard.py:1001
 msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
 msgstr "TOUS CONTRIBUTEURS - Les {0} dernières modifications"
 
@@ -3807,7 +3808,7 @@
 msgstr "Types de contenus"
 
 #: src/pyams_content/root/zmi/search.py:162
-#: src/pyams_content/shared/common/zmi/dashboard.py:245
+#: src/pyams_content/shared/common/zmi/dashboard.py:244
 #: src/pyams_content/shared/common/zmi/search.py:169
 #: src/pyams_content/shared/common/zmi/types/updater.py:65
 msgid "Owner"
@@ -4021,248 +4022,303 @@
 msgid "Resource « {title} »"
 msgstr "Ressource « {title} »"
 
-#: src/pyams_content/shared/form/field.py:144
+#: src/pyams_content/shared/form/field.py:147
 msgid "Text"
 msgstr "Texte simple"
 
-#: src/pyams_content/shared/form/field.py:154
+#: src/pyams_content/shared/form/field.py:157
 msgid "Multi-lines text"
 msgstr "Texte multi-lignes"
 
-#: src/pyams_content/shared/form/field.py:164
+#: src/pyams_content/shared/form/field.py:167
 msgid "Boolean"
 msgstr "Booléen"
 
-#: src/pyams_content/shared/form/field.py:174
+#: src/pyams_content/shared/form/field.py:177
 msgid "Integer"
 msgstr "Nombre entier"
 
-#: src/pyams_content/shared/form/field.py:184
+#: src/pyams_content/shared/form/field.py:187
 msgid "Decimal"
 msgstr "Nombre décimal"
 
-#: src/pyams_content/shared/form/field.py:194
+#: src/pyams_content/shared/form/field.py:197
+msgid "Date"
+msgstr "Date"
+
+#: src/pyams_content/shared/form/field.py:217
 msgid "E-mail address"
 msgstr "Adresse de messagerie"
 
-#: src/pyams_content/shared/form/field.py:204
+#: src/pyams_content/shared/form/field.py:227
 msgid "URI"
 msgstr "URI"
 
-#: src/pyams_content/shared/form/field.py:214
-msgid "Date"
-msgstr "Date"
-
-#: src/pyams_content/shared/form/field.py:228
+#: src/pyams_content/shared/form/field.py:241
 msgid "Choice"
 msgstr "Choix unique dans une liste"
 
-#: src/pyams_content/shared/form/field.py:248
+#: src/pyams_content/shared/form/field.py:261
 msgid "List"
 msgstr "Choix multiples dans une liste"
 
 #: src/pyams_content/shared/form/handler.py:75
-msgid "Mailto form handler"
-msgstr "Envoi des données par mail"
+msgid "Direct mailto form handler"
+msgstr "Envoi direct des données par mail"
 
 #: src/pyams_content/shared/form/handler.py:39
 msgid "No selected handler..."
 msgstr "Aucun gestionnaire sélectionné"
 
-#: src/pyams_content/shared/form/__init__.py:98
+#: src/pyams_content/shared/form/__init__.py:100
 msgid "Form fields"
 msgstr "Champs de saisie"
 
-#: src/pyams_content/shared/form/__init__.py:99
+#: src/pyams_content/shared/form/__init__.py:101
 msgid "no field defined"
 msgstr "aucun champ défini"
 
-#: src/pyams_content/shared/form/interfaces.py:33
+#: src/pyams_content/shared/form/interfaces.py:31
 msgid "Form"
 msgstr "Formulaire"
 
-#: src/pyams_content/shared/form/interfaces.py:51
+#: src/pyams_content/shared/form/interfaces.py:49
 msgid "Field name"
 msgstr "Nom du champ"
 
-#: src/pyams_content/shared/form/interfaces.py:52
+#: src/pyams_content/shared/form/interfaces.py:50
 msgid "Field internal name; must be unique for a given form"
 msgstr ""
 "Nom interne du champ ; ce nom doit être unique pour un formulaire donné"
 
-#: src/pyams_content/shared/form/interfaces.py:55
-#: src/pyams_content/shared/form/zmi/field.py:178
+#: src/pyams_content/shared/form/interfaces.py:53
+#: src/pyams_content/shared/form/zmi/field.py:177
 msgid "Field type"
 msgstr "Type de champ"
 
-#: src/pyams_content/shared/form/interfaces.py:56
+#: src/pyams_content/shared/form/interfaces.py:54
 msgid "Selected field type"
 msgstr "Type de champ proposé à l'internaute"
 
-#: src/pyams_content/shared/form/interfaces.py:61
+#: src/pyams_content/shared/form/interfaces.py:59
 msgid "User field label"
 msgstr "Libellé affiché à l'internaute"
 
-#: src/pyams_content/shared/form/interfaces.py:65
+#: src/pyams_content/shared/form/interfaces.py:63
 msgid "Field description can be displayed as hint"
 msgstr ""
 "Description du champ, qui pourra être affichée sous la forme d'une info-bulle"
 
-#: src/pyams_content/shared/form/interfaces.py:68
+#: src/pyams_content/shared/form/interfaces.py:66
 msgid "Placeholder"
 msgstr "Espace réservé"
 
-#: src/pyams_content/shared/form/interfaces.py:69
+#: src/pyams_content/shared/form/interfaces.py:67
 msgid "Some field types like textline can display a placeholder"
 msgstr ""
 "Certains champs tels que les zones de texte peuvent afficher ce texte tant "
 "qu'aucune valeur n'y a été saisie"
 
-#: src/pyams_content/shared/form/interfaces.py:72
+#: src/pyams_content/shared/form/interfaces.py:70
 msgid "Optional values"
 msgstr "Liste de valeurs"
 
-#: src/pyams_content/shared/form/interfaces.py:73
+#: src/pyams_content/shared/form/interfaces.py:71
 msgid "List of available values (for 'choice' and 'list' field types)"
 msgstr ""
 "Liste des valeurs disponibles (pour les champs de types 'Sélection simple' "
 "ou 'Sélection multiple')"
 
-#: src/pyams_content/shared/form/interfaces.py:76
+#: src/pyams_content/shared/form/interfaces.py:74
 msgid "Default value"
 msgstr "Valeur par défaut"
 
-#: src/pyams_content/shared/form/interfaces.py:77
+#: src/pyams_content/shared/form/interfaces.py:75
 msgid "Give default value if field type can use it"
 msgstr ""
 "Donner la valeur par défaut du champ ; attention, tous les types de champs "
 "ne peuvent pas utiliser une valeur par défaut !"
 
-#: src/pyams_content/shared/form/interfaces.py:80
+#: src/pyams_content/shared/form/interfaces.py:78
 msgid "Required?"
 msgstr "Obligatoire ?"
 
-#: src/pyams_content/shared/form/interfaces.py:81
+#: src/pyams_content/shared/form/interfaces.py:79
 msgid "Select 'yes' to set field as mandatory"
 msgstr "Sélectionnez 'oui' pour que la saisie de ce champ soit obligatoire"
 
-#: src/pyams_content/shared/form/interfaces.py:86
+#: src/pyams_content/shared/form/interfaces.py:84
 msgid "Select 'no' to hide given field..."
 msgstr "Sélectionnez 'non' pour masquer ce champ"
 
-#: src/pyams_content/shared/form/interfaces.py:120
+#: src/pyams_content/shared/form/interfaces.py:121
 msgid "Form title"
 msgstr "Titre du formulaire"
 
-#: src/pyams_content/shared/form/interfaces.py:123
-msgid "Form handler"
-msgstr "Gestionnaire du formulaire"
-
 #: src/pyams_content/shared/form/interfaces.py:124
-msgid "Select how form data is transmitted"
-msgstr ""
-"Le gestionnaire sélectionné détermine la façon dont les données saisies par "
-"les internautes seront stockées ou envoyées"
-
-#: src/pyams_content/shared/form/interfaces.py:127
 msgid "Authenticated only?"
 msgstr "Authentification requise ?"
 
-#: src/pyams_content/shared/form/interfaces.py:128
+#: src/pyams_content/shared/form/interfaces.py:125
 msgid "If 'yes', only authenticated users will be able to see and submit form"
 msgstr ""
 "Si 'oui', seuls les utilisateurs authentifiés pourront saisir des données "
 "dans le formulaire et les soumettre"
 
-#: src/pyams_content/shared/form/interfaces.py:132
-msgid "Use captcha?"
-msgstr "Ajouter un captcha ?"
+#: src/pyams_content/shared/form/interfaces.py:129
+msgid "Form header"
+msgstr "En-tête du formulaire"
+
+#: src/pyams_content/shared/form/interfaces.py:130
+msgid "This header is displayed just above form fields"
+msgstr "Cet en-tête sera affiché au-dessus de la liste des champs de saisie"
 
 #: src/pyams_content/shared/form/interfaces.py:133
-msgid "If 'yes', a captcha will be added automatically to the form"
-msgstr "Si 'oui', un captcha sera ajouté automatiquement au formulaire"
+msgid "Submit button"
+msgstr "Libellé de soumission"
+
+#: src/pyams_content/shared/form/interfaces.py:134
+msgid "Label of form submit button"
+msgstr "Libellé du bouton de soumission du formulaire"
 
 #: src/pyams_content/shared/form/interfaces.py:137
-msgid "Submit label"
-msgstr "Libellé de soumission"
+msgid "Submit message"
+msgstr "Message de soumission"
 
 #: src/pyams_content/shared/form/interfaces.py:138
-msgid "Label of form submit button"
-msgstr "Libellé du bouton de soumission du formulaire"
-
-#: src/pyams_content/shared/form/interfaces.py:175
+msgid "This message will be displayed after form submission"
+msgstr "Ce message sera affiché à l'internaute lorsque les données du formulaire auront été soumises"
+
+#: src/pyams_content/shared/form/interfaces.py:141
+msgid "Form handler"
+msgstr "Gestionnaire du formulaire"
+
+#: src/pyams_content/shared/form/interfaces.py:142
+msgid "Select how form data is transmitted"
+msgstr ""
+"Le gestionnaire sélectionné détermine la façon dont les données saisies par "
+"les internautes seront stockées ou envoyées"
+
+#: src/pyams_content/shared/form/interfaces.py:145
+msgid "Use captcha?"
+msgstr "Ajouter un captcha ?"
+
+#: src/pyams_content/shared/form/interfaces.py:146
+msgid "If 'yes', a captcha will be added automatically to the form"
+msgstr "Si 'oui', un captcha sera ajouté automatiquement au formulaire"
+
+#: src/pyams_content/shared/form/interfaces.py:150
+msgid "Site key"
+msgstr "Clé du site"
+
+#: src/pyams_content/shared/form/interfaces.py:151
+msgid "This key is included into HTML code and submitted with form data"
+msgstr ""
+"Cette clé est intégrée dans le code HTML et soumise avec les autres données "
+"du formulaire"
+
+#: src/pyams_content/shared/form/interfaces.py:154
+msgid "Secret key"
+msgstr "Clé secrète"
+
+#: src/pyams_content/shared/form/interfaces.py:155
+msgid "This key is used to communicate with Google's reCaptcha services"
+msgstr "Cette clé est utilisée avec le service reCaptcha de Google"
+
+#: src/pyams_content/shared/form/interfaces.py:158
+msgid "Recaptcha proxy"
+msgstr "Proxy HTTPS"
+
+#: src/pyams_content/shared/form/interfaces.py:159
+msgid ""
+"If your server is behind a proxy, please set it's address here; captcha "
+"verification requires HTTPS support..."
+msgstr ""
+"Si le serveur qui reçoit les données du formulaire est situé derrière un proxy, vous devez l'indiquer ici "
+"pour permettre la vérification du captcha"
+
+#: src/pyams_content/shared/form/interfaces.py:197
 msgid "Source address"
 msgstr "Adresse source"
 
-#: src/pyams_content/shared/form/interfaces.py:176
+#: src/pyams_content/shared/form/interfaces.py:198
 msgid "Mail address from which form data is sent"
-msgstr "Adresse de messagerie émettrice des données"
-
-#: src/pyams_content/shared/form/interfaces.py:179
+msgstr "Adresse de messagerie émettrice des messages envoyés"
+
+#: src/pyams_content/shared/form/interfaces.py:201
 msgid "Source name"
 msgstr "Nom de la source"
 
-#: src/pyams_content/shared/form/interfaces.py:180
+#: src/pyams_content/shared/form/interfaces.py:202
 msgid "Name of mail data sender"
-msgstr "Nom de l'émetteur des données"
-
-#: src/pyams_content/shared/form/interfaces.py:183
+msgstr "Nom de l'émetteur des messages envoyés"
+
+#: src/pyams_content/shared/form/interfaces.py:205
 msgid "Recipient address"
 msgstr "Adresse de destination"
 
-#: src/pyams_content/shared/form/interfaces.py:184
+#: src/pyams_content/shared/form/interfaces.py:206
 msgid "Mail address to which form data is sent"
 msgstr ""
 "Adresse d'envoi des données; vous pouvez indiquer plusieurs adresses en les "
 "séparant par des point-virgules"
 
-#: src/pyams_content/shared/form/interfaces.py:187
+#: src/pyams_content/shared/form/interfaces.py:209
 msgid "Recipient name"
 msgstr "Nom du destinataire"
 
-#: src/pyams_content/shared/form/interfaces.py:188
+#: src/pyams_content/shared/form/interfaces.py:210
 msgid "Name of data recipient"
 msgstr "Nom du destinataire des messages"
 
-#: src/pyams_content/shared/form/zmi/properties.py:41
+#: src/pyams_content/shared/form/zmi/properties.py:39
 msgid "Main form settings"
 msgstr "Paramètres du formulaire"
 
-#: src/pyams_content/shared/form/zmi/properties.py:65
+#: src/pyams_content/shared/form/zmi/properties.py:96
 msgid "Form handler settings"
 msgstr "Paramètres du gestionnaire"
 
-#: src/pyams_content/shared/form/zmi/field.py:69
+#: src/pyams_content/shared/form/zmi/properties.py:56
+msgid "Add captcha"
+msgstr "Intégrer un captcha"
+
+#: src/pyams_content/shared/form/zmi/properties.py:94
+#, python-format
+msgid "« {handler} » form handler settings"
+msgstr "Paramètres du gestionnaire « {handler} »"
+
+#: src/pyams_content/shared/form/zmi/field.py:67
 msgid "Form fields..."
 msgstr "Champs de saisie"
 
-#: src/pyams_content/shared/form/zmi/field.py:156
+#: src/pyams_content/shared/form/zmi/field.py:155
 #: src/pyams_content/shared/common/interfaces/types.py:39
 msgid "Name"
 msgstr "Nom"
 
-#: src/pyams_content/shared/form/zmi/field.py:211
+#: src/pyams_content/shared/form/zmi/field.py:210
 msgid "Form fields list"
 msgstr "Liste des champs du formulaire"
 
-#: src/pyams_content/shared/form/zmi/field.py:234
-#: src/pyams_content/shared/form/zmi/field.py:247
+#: src/pyams_content/shared/form/zmi/field.py:233
+#: src/pyams_content/shared/form/zmi/field.py:246
 msgid "Add form field"
 msgstr "Ajouter un champ"
 
-#: src/pyams_content/shared/form/zmi/field.py:285
+#: src/pyams_content/shared/form/zmi/field.py:284
 msgid "Edit form field properties"
 msgstr "Propriétés du champ"
 
-#: src/pyams_content/shared/form/zmi/field.py:187
+#: src/pyams_content/shared/form/zmi/field.py:186
 msgid "-- unknown field type --"
 msgstr "-- type de champ inconnu --"
 
-#: src/pyams_content/shared/form/zmi/field.py:122
+#: src/pyams_content/shared/form/zmi/field.py:121
 msgid "No currently defined form field."
 msgstr "Ce formulaire ne comporte aucun champ."
 
-#: src/pyams_content/shared/form/zmi/field.py:269
+#: src/pyams_content/shared/form/zmi/field.py:268
 msgid "Specified name is already used!"
 msgstr "Le nom indiqué pour ce champ est déjà utilisé !"
 
@@ -4812,19 +4868,19 @@
 msgid "Blog post « {title} »"
 msgstr "Article « {title} »"
 
-#: src/pyams_content/shared/common/__init__.py:266
+#: src/pyams_content/shared/common/__init__.py:268
 #: src/pyams_content/shared/common/zmi/properties.py:65
 #: src/pyams_content/shared/common/zmi/manager.py:96
 msgid "Properties"
 msgstr "Propriétés"
 
-#: src/pyams_content/shared/common/__init__.py:176
-#: src/pyams_content/shared/common/__init__.py:184
+#: src/pyams_content/shared/common/__init__.py:178
+#: src/pyams_content/shared/common/__init__.py:186
 #, python-format
 msgid "{date} by {principal}"
 msgstr "{date} par {principal}"
 
-#: src/pyams_content/shared/common/__init__.py:289
+#: src/pyams_content/shared/common/__init__.py:291
 #, python-format
 msgid "title length should be between 40 and 66 characters ({length} actually)"
 msgstr ""
@@ -5207,7 +5263,7 @@
 msgstr "depuis {date}"
 
 #: src/pyams_content/shared/common/zmi/header.py:91
-#: src/pyams_content/shared/common/zmi/dashboard.py:185
+#: src/pyams_content/shared/common/zmi/dashboard.py:184
 msgid "Content publication start date is not passed yet"
 msgstr "La date de début de publication n'est pas encore atteinte"
 
@@ -5272,46 +5328,46 @@
 msgid "Tool management"
 msgstr "Gérer cet outil"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:106
+#: src/pyams_content/shared/common/zmi/dashboard.py:105
 msgid "Type"
 msgstr "Type"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:148
+#: src/pyams_content/shared/common/zmi/dashboard.py:147
 msgid "Unique ID"
 msgstr "N° IN"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:168
+#: src/pyams_content/shared/common/zmi/dashboard.py:167
 #: src/pyams_content/shared/common/zmi/search.py:172
 msgid "Status"
 msgstr "Statut"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:195
+#: src/pyams_content/shared/common/zmi/dashboard.py:194
 msgid "Status date"
 msgstr "En date du"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:212
+#: src/pyams_content/shared/common/zmi/dashboard.py:211
 #: src/pyams_content/shared/common/zmi/summary.py:167
 msgid "Version"
 msgstr "Version"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:227
+#: src/pyams_content/shared/common/zmi/dashboard.py:226
 msgid "Status principal"
 msgstr "Intervenant"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:267
+#: src/pyams_content/shared/common/zmi/dashboard.py:266
 msgid "Last modification"
 msgstr "Dernière modification"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:300
+#: src/pyams_content/shared/common/zmi/dashboard.py:299
 msgid "Contents dashboard"
 msgstr "Mon tableau de bord"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:499
+#: src/pyams_content/shared/common/zmi/dashboard.py:498
 #: src/pyams_content/shared/common/zmi/templates/header.pt:26
 msgid "Add/remove from favorites"
 msgstr "Ajouter/enlever des favoris"
 
-#: src/pyams_content/shared/common/zmi/dashboard.py:323
+#: src/pyams_content/shared/common/zmi/dashboard.py:322
 #, python-format
 msgid "SEARCH - Between all contents of type &laquo;&nbsp;{type}&nbsp;&raquo;"
 msgstr "RECHERCHE - Tous contenus &laquo;&nbsp;{type}&nbsp;&raquo; confondus"
@@ -7511,9 +7567,6 @@
 #~ msgid "Display current version date"
 #~ msgstr "Date de publication de cette version"
 
-#~ msgid "The matching date will be displayed in front-office"
-#~ msgstr "La date correspondante sera affichée en front-office"
-
 #~ msgid "Push end date"
 #~ msgstr "Pousser jusqu'au"
 
--- a/src/pyams_content/locales/pyams_content.pot	Fri Jul 26 13:04:54 2019 +0200
+++ b/src/pyams_content/locales/pyams_content.pot	Fri Jul 26 19:23:33 2019 +0200
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2019-06-28 18:06+0200\n"
+"POT-Creation-Date: 2019-07-26 12:53+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"
@@ -197,7 +197,7 @@
 #: ./src/pyams_content/features/search/portlet/interfaces.py:25
 #: ./src/pyams_content/root/zmi/templates/advanced-search.pt:197
 #: ./src/pyams_content/shared/view/portlet/interfaces.py:52
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:123
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:122
 #: ./src/pyams_content/shared/common/zmi/reverse.py:73
 #: ./src/pyams_content/shared/common/zmi/templates/advanced-search.pt:200
 #: ./src/pyams_content/shared/site/portlet/interfaces.py:24
@@ -234,7 +234,7 @@
 #: ./src/pyams_content/component/association/interfaces.py:37
 #: ./src/pyams_content/features/alert/interfaces.py:54
 #: ./src/pyams_content/features/menu/interfaces.py:62
-#: ./src/pyams_content/shared/form/interfaces.py:85
+#: ./src/pyams_content/shared/form/interfaces.py:83
 #: ./src/pyams_content/shared/site/interfaces.py:179
 msgid "Visible?"
 msgstr ""
@@ -460,7 +460,7 @@
 #: ./src/pyams_content/component/paragraph/interfaces/audio.py:50
 #: ./src/pyams_content/component/extfile/interfaces.py:36
 #: ./src/pyams_content/features/search/interfaces.py:45
-#: ./src/pyams_content/shared/form/interfaces.py:64
+#: ./src/pyams_content/shared/form/interfaces.py:62
 msgid "Description"
 msgstr ""
 
@@ -1062,6 +1062,7 @@
 msgstr ""
 
 #: ./src/pyams_content/component/paragraph/interfaces/contact.py:69
+#: ./src/pyams_content/shared/form/field.py:207
 msgid "Phone number"
 msgstr ""
 
@@ -2184,9 +2185,9 @@
 
 #: ./src/pyams_content/features/share/interfaces.py:62
 #: ./src/pyams_content/features/share/zmi/container.py:155
-#: ./src/pyams_content/features/menu/zmi/__init__.py:218
-#: ./src/pyams_content/shared/form/interfaces.py:60
-#: ./src/pyams_content/shared/form/zmi/field.py:167
+#: ./src/pyams_content/features/menu/zmi/__init__.py:217
+#: ./src/pyams_content/shared/form/interfaces.py:58
+#: ./src/pyams_content/shared/form/zmi/field.py:166
 #: ./src/pyams_content/shared/common/interfaces/types.py:43
 msgid "Label"
 msgstr ""
@@ -2875,27 +2876,27 @@
 msgid "Link has no illustration"
 msgstr ""
 
-#: ./src/pyams_content/features/menu/zmi/__init__.py:80
+#: ./src/pyams_content/features/menu/zmi/__init__.py:83
 msgid "Add menu..."
 msgstr ""
 
-#: ./src/pyams_content/features/menu/zmi/__init__.py:91
+#: ./src/pyams_content/features/menu/zmi/__init__.py:94
 msgid "Add new menu"
 msgstr ""
 
-#: ./src/pyams_content/features/menu/zmi/__init__.py:124
+#: ./src/pyams_content/features/menu/zmi/__init__.py:127
 msgid "Edit menu properties"
 msgstr ""
 
-#: ./src/pyams_content/features/menu/zmi/__init__.py:230
+#: ./src/pyams_content/features/menu/zmi/__init__.py:229
 msgid "Inner content"
 msgstr ""
 
-#: ./src/pyams_content/features/menu/zmi/__init__.py:111
+#: ./src/pyams_content/features/menu/zmi/__init__.py:114
 msgid "Menu was correctly added."
 msgstr ""
 
-#: ./src/pyams_content/features/menu/zmi/__init__.py:415
+#: ./src/pyams_content/features/menu/zmi/__init__.py:419
 msgid "Link was correctly added."
 msgstr ""
 
@@ -3264,213 +3265,213 @@
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:110
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:290
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:289
 msgid "Dashboard"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:159
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:346
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:345
 #, python-format
 msgid "MANAGER - {0} content waiting for your action"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:160
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:347
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:346
 #, python-format
 msgid "MANAGER - {0} contents waiting for your action"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:204
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:388
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:387
 #, python-format
 msgid "CONTRIBUTOR - {0} content waiting for action"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:205
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:389
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:388
 #, python-format
 msgid "CONTRIBUTOR - {0} contents waiting for action"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:240
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:421
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:420
 #, python-format
 msgid "CONTRIBUTOR - {0} modified content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:283
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:462
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:461
 msgid "My contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:298
 #: ./src/pyams_content/root/zmi/templates/dashboard.pt:8
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:477
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:476
 #: ./src/pyams_content/shared/common/zmi/templates/dashboard.pt:8
 msgid "My favorites"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:307
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:486
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:485
 #, python-format
 msgid "CONTRIBUTOR - {0} favorite"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:308
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:487
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:486
 #, python-format
 msgid "CONTRIBUTOR - {0} favorites"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:346
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:562
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:561
 msgid "Your favorite contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:359
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:575
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:574
 msgid "My drafts"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:368
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:584
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:583
 #, python-format
 msgid "CONTRIBUTOR - {0} content in preparation"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:369
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:585
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:584
 #, python-format
 msgid "CONTRIBUTOR - {0} contents in preparation"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:408
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:626
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:625
 msgid "Your prepared contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:421
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:639
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:638
 msgid "My submissions"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:430
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:648
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:647
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:431
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:649
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:648
 #, python-format
 msgid "CONTRIBUTOR - {0} submitted contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:470
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:690
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:689
 msgid "Your submitted contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:483
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:703
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:702
 msgid "My publications"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:492
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:712
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:711
 #, python-format
 msgid "CONTRIBUTOR - {0} published content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:493
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:713
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:712
 #, python-format
 msgid "CONTRIBUTOR - {0} published contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:532
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:754
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:753
 msgid "Your published contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:545
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:767
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:766
 msgid "My retired contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:554
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:776
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:775
 #, python-format
 msgid "CONTRIBUTOR - {0} retired content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:555
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:777
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:776
 #, python-format
 msgid "CONTRIBUTOR - {0} retired contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:595
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:818
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:817
 msgid "Your retired contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:608
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:831
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:830
 msgid "My archived contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:617
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:840
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:839
 #, python-format
 msgid "CONTRIBUTOR - {0} archived content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:618
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:841
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:840
 #, python-format
 msgid "CONTRIBUTOR - {0} archived contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:664
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:888
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:887
 msgid "Your archived contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:678
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:902
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:901
 msgid "Other interventions"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:693
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:917
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:916
 msgid "Last publications"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:702
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:926
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:925
 #, python-format
 msgid "CONTRIBUTORS - {0} published content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:748
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:973
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:972
 msgid "Last published contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:761
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:986
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:985
 msgid "Last updates"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:770
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:995
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:994
 #, python-format
 msgid "CONTRIBUTORS - {0} updated content"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:814
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:1040
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:1039
 msgid "Last updated contents"
 msgstr ""
 
@@ -3480,36 +3481,36 @@
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:245
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:426
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:425
 #, python-format
 msgid "CONTRIBUTOR - {0} modified contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:247
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:428
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:427
 #, python-format
 msgid "CONTRIBUTOR - Last {0} modified contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:707
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:931
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:930
 #, python-format
 msgid "CONTRIBUTORS - Last {0} published contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:709
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:933
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:932
 msgid "CONTRIBUTORS - Last published contents (in the limit of 50)"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:775
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:1000
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:999
 #, python-format
 msgid "CONTRIBUTORS - Last {0} updated contents"
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/__init__.py:777
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:1002
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:1001
 msgid "CONTRIBUTORS - Last updated contents (in the limit of 50)"
 msgstr ""
 
@@ -3535,7 +3536,7 @@
 msgstr ""
 
 #: ./src/pyams_content/root/zmi/search.py:162
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:245
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:244
 #: ./src/pyams_content/shared/common/zmi/search.py:169
 #: ./src/pyams_content/shared/common/zmi/types/updater.py:65
 msgid "Owner"
@@ -3748,234 +3749,285 @@
 msgid "Resource « {title} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:144
+#: ./src/pyams_content/shared/form/field.py:147
 msgid "Text"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:154
+#: ./src/pyams_content/shared/form/field.py:157
 msgid "Multi-lines text"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:164
+#: ./src/pyams_content/shared/form/field.py:167
 msgid "Boolean"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:174
+#: ./src/pyams_content/shared/form/field.py:177
 msgid "Integer"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:184
+#: ./src/pyams_content/shared/form/field.py:187
 msgid "Decimal"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:194
+#: ./src/pyams_content/shared/form/field.py:197
+msgid "Date"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/field.py:217
 msgid "E-mail address"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:204
+#: ./src/pyams_content/shared/form/field.py:227
 msgid "URI"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:214
-msgid "Date"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/field.py:228
+#: ./src/pyams_content/shared/form/field.py:241
 msgid "Choice"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/field.py:248
+#: ./src/pyams_content/shared/form/field.py:261
 msgid "List"
 msgstr ""
 
 #: ./src/pyams_content/shared/form/handler.py:75
-msgid "Mailto form handler"
+msgid "Direct mailto form handler"
 msgstr ""
 
 #: ./src/pyams_content/shared/form/handler.py:39
 msgid "No selected handler..."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/__init__.py:98
+#: ./src/pyams_content/shared/form/__init__.py:100
 msgid "Form fields"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/__init__.py:99
+#: ./src/pyams_content/shared/form/__init__.py:101
 msgid "no field defined"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:33
+#: ./src/pyams_content/shared/form/interfaces.py:31
 msgid "Form"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:51
+#: ./src/pyams_content/shared/form/interfaces.py:49
 msgid "Field name"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:52
+#: ./src/pyams_content/shared/form/interfaces.py:50
 msgid "Field internal name; must be unique for a given form"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:55
-#: ./src/pyams_content/shared/form/zmi/field.py:178
+#: ./src/pyams_content/shared/form/interfaces.py:53
+#: ./src/pyams_content/shared/form/zmi/field.py:177
 msgid "Field type"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:56
+#: ./src/pyams_content/shared/form/interfaces.py:54
 msgid "Selected field type"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:61
+#: ./src/pyams_content/shared/form/interfaces.py:59
 msgid "User field label"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:65
+#: ./src/pyams_content/shared/form/interfaces.py:63
 msgid "Field description can be displayed as hint"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:68
+#: ./src/pyams_content/shared/form/interfaces.py:66
 msgid "Placeholder"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:69
+#: ./src/pyams_content/shared/form/interfaces.py:67
 msgid "Some field types like textline can display a placeholder"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:72
+#: ./src/pyams_content/shared/form/interfaces.py:70
 msgid "Optional values"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:73
+#: ./src/pyams_content/shared/form/interfaces.py:71
 msgid "List of available values (for 'choice' and 'list' field types)"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:76
+#: ./src/pyams_content/shared/form/interfaces.py:74
 msgid "Default value"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:77
+#: ./src/pyams_content/shared/form/interfaces.py:75
 msgid "Give default value if field type can use it"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:80
+#: ./src/pyams_content/shared/form/interfaces.py:78
 msgid "Required?"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:81
+#: ./src/pyams_content/shared/form/interfaces.py:79
 msgid "Select 'yes' to set field as mandatory"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:86
+#: ./src/pyams_content/shared/form/interfaces.py:84
 msgid "Select 'no' to hide given field..."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:120
+#: ./src/pyams_content/shared/form/interfaces.py:121
 msgid "Form title"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:123
-msgid "Form handler"
-msgstr ""
-
 #: ./src/pyams_content/shared/form/interfaces.py:124
-msgid "Select how form data is transmitted"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/interfaces.py:127
 msgid "Authenticated only?"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:128
+#: ./src/pyams_content/shared/form/interfaces.py:125
 msgid "If 'yes', only authenticated users will be able to see and submit form"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:132
-msgid "Use captcha?"
+#: ./src/pyams_content/shared/form/interfaces.py:129
+msgid "Form header"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:130
+msgid "This header is displayed just above form fields"
 msgstr ""
 
 #: ./src/pyams_content/shared/form/interfaces.py:133
-msgid "If 'yes', a captcha will be added automatically to the form"
+msgid "Submit button"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:134
+msgid "Label of form submit button"
 msgstr ""
 
 #: ./src/pyams_content/shared/form/interfaces.py:137
-msgid "Submit label"
+msgid "Submit message"
 msgstr ""
 
 #: ./src/pyams_content/shared/form/interfaces.py:138
-msgid "Label of form submit button"
-msgstr ""
-
-#: ./src/pyams_content/shared/form/interfaces.py:175
+msgid "This message will be displayed after form submission"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:141
+msgid "Form handler"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:142
+msgid "Select how form data is transmitted"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:145
+msgid "Use captcha?"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:146
+msgid "If 'yes', a captcha will be added automatically to the form"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:150
+msgid "Site key"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:151
+msgid "This key is included into HTML code and submitted with form data"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:154
+msgid "Secret key"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:155
+msgid "This key is used to communicate with Google's reCaptcha services"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:158
+msgid "Recaptcha proxy"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:159
+msgid ""
+"If your server is behind a proxy, please set it's address here; captcha "
+"verification requires HTTPS support..."
+msgstr ""
+
+#: ./src/pyams_content/shared/form/interfaces.py:197
 msgid "Source address"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:176
+#: ./src/pyams_content/shared/form/interfaces.py:198
 msgid "Mail address from which form data is sent"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:179
+#: ./src/pyams_content/shared/form/interfaces.py:201
 msgid "Source name"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:180
+#: ./src/pyams_content/shared/form/interfaces.py:202
 msgid "Name of mail data sender"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:183
+#: ./src/pyams_content/shared/form/interfaces.py:205
 msgid "Recipient address"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:184
+#: ./src/pyams_content/shared/form/interfaces.py:206
 msgid "Mail address to which form data is sent"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:187
+#: ./src/pyams_content/shared/form/interfaces.py:209
 msgid "Recipient name"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/interfaces.py:188
+#: ./src/pyams_content/shared/form/interfaces.py:210
 msgid "Name of data recipient"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/properties.py:41
+#: ./src/pyams_content/shared/form/zmi/properties.py:39
 msgid "Main form settings"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/properties.py:65
+#: ./src/pyams_content/shared/form/zmi/properties.py:96
 msgid "Form handler settings"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:69
+#: ./src/pyams_content/shared/form/zmi/properties.py:56
+msgid "Add captcha"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/properties.py:94
+#, python-format
+msgid "« {handler} » form handler settings"
+msgstr ""
+
+#: ./src/pyams_content/shared/form/zmi/field.py:67
 msgid "Form fields..."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:156
+#: ./src/pyams_content/shared/form/zmi/field.py:155
 #: ./src/pyams_content/shared/common/interfaces/types.py:39
 msgid "Name"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:211
+#: ./src/pyams_content/shared/form/zmi/field.py:210
 msgid "Form fields list"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:234
-#: ./src/pyams_content/shared/form/zmi/field.py:247
+#: ./src/pyams_content/shared/form/zmi/field.py:233
+#: ./src/pyams_content/shared/form/zmi/field.py:246
 msgid "Add form field"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:285
+#: ./src/pyams_content/shared/form/zmi/field.py:284
 msgid "Edit form field properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:187
+#: ./src/pyams_content/shared/form/zmi/field.py:186
 msgid "-- unknown field type --"
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:122
+#: ./src/pyams_content/shared/form/zmi/field.py:121
 msgid "No currently defined form field."
 msgstr ""
 
-#: ./src/pyams_content/shared/form/zmi/field.py:269
+#: ./src/pyams_content/shared/form/zmi/field.py:268
 msgid "Specified name is already used!"
 msgstr ""
 
@@ -4441,19 +4493,19 @@
 msgid "Blog post « {title} »"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/__init__.py:266
+#: ./src/pyams_content/shared/common/__init__.py:268
 #: ./src/pyams_content/shared/common/zmi/properties.py:65
 #: ./src/pyams_content/shared/common/zmi/manager.py:96
 msgid "Properties"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/__init__.py:176
-#: ./src/pyams_content/shared/common/__init__.py:184
+#: ./src/pyams_content/shared/common/__init__.py:178
+#: ./src/pyams_content/shared/common/__init__.py:186
 #, python-format
 msgid "{date} by {principal}"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/__init__.py:289
+#: ./src/pyams_content/shared/common/__init__.py:291
 #, python-format
 msgid "title length should be between 40 and 66 characters ({length} actually)"
 msgstr ""
@@ -4781,7 +4833,7 @@
 msgstr ""
 
 #: ./src/pyams_content/shared/common/zmi/header.py:91
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:185
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:184
 msgid "Content publication start date is not passed yet"
 msgstr ""
 
@@ -4841,46 +4893,46 @@
 msgid "Tool management"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:106
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:105
 msgid "Type"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:148
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:147
 msgid "Unique ID"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:168
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:167
 #: ./src/pyams_content/shared/common/zmi/search.py:172
 msgid "Status"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:195
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:194
 msgid "Status date"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:212
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:211
 #: ./src/pyams_content/shared/common/zmi/summary.py:167
 msgid "Version"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:227
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:226
 msgid "Status principal"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:267
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:266
 msgid "Last modification"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:300
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:299
 msgid "Contents dashboard"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:499
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:498
 #: ./src/pyams_content/shared/common/zmi/templates/header.pt:26
 msgid "Add/remove from favorites"
 msgstr ""
 
-#: ./src/pyams_content/shared/common/zmi/dashboard.py:323
+#: ./src/pyams_content/shared/common/zmi/dashboard.py:322
 #, python-format
 msgid "SEARCH - Between all contents of type &laquo;&nbsp;{type}&nbsp;&raquo;"
 msgstr ""
--- a/src/pyams_content/zmi/resources/js/pyams_content.js	Fri Jul 26 13:04:54 2019 +0200
+++ b/src/pyams_content/zmi/resources/js/pyams_content.js	Fri Jul 26 19:23:33 2019 +0200
@@ -498,18 +498,6 @@
 		},
 
 		/**
-		 * Form fields management
-		 */
-		fields: {
-
-			refreshField: function(changes) {
-				var container = $('table[id="form_fields_list"]');
-				var para = $('tr[data-ams-element-name="' + changes.object_name + '"]', container);
-				$('td:nth-child(4)', para).html(changes.title);
-			}
-		},
-
-		/**
 		 * Image map management
 		 */
 		imgmap: {
--- a/src/pyams_content/zmi/resources/js/pyams_content.min.js	Fri Jul 26 13:04:54 2019 +0200
+++ b/src/pyams_content/zmi/resources/js/pyams_content.min.js	Fri Jul 26 19:23:33 2019 +0200
@@ -1,1 +1,1 @@
-!function(t,e){"use strict";var a=e.MyAMS,i={widget:{treeview:{selectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(a.id)},unselectFolder:function(e,a){t(e.target).siblings('input[type="hidden"]').val(null)}}},TinyMCE:{initEditor:function(t){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","Custom styles":"Styles spécifiques"}),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",stateSelector:'a[href^="oid://"]',onclick:function(){var e={},a=t.dom,i=t.selection,n=i.getNode(),s=a.getParent(n,"a[href]");e.text=s?s.innerText||s.textContent:i.getContent({format:"text"}),e.href=s?a.getAttrib(s,"href"):"",t.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"oid",label:"Internal number",value:e.href,onchange:function(){e.href=this.value()}},{type:"textbox",name:"title",label:"Link title",value:e.text,onchange:function(){e.text=this.value()}}],onsubmit:function(n){t.focus(),e.href?s?("innerText"in s?s.innerText=e.text:s.textContent=e.text,a.setAttribs(s,{href:e.href}),i.select(s),t.undoManager.add()):t.insertContent('<a href="oid://'+n.data.oid+'">'+n.data.title+"</a>"):t.execCommand("unlink")}})}})}),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.paste_as_text=!0,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"}]}];var e=this.data();return e.amsTinymceEditorStyles&&t.style_formats.push({title:"Custom styles",items:e.amsTinymceEditorStyles}),t.plugins+=" internal_links headers",t.toolbar1&&(t.toolbar1="undo redo | pastetext | 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:{addMediaCallback:function(e){var a=t(".gallery",t('[id="'+e.parent+'"]')),n=a.siblings(".switcher");n.parents("fieldset:first").hasClass("switched")&&n.click();for(var s=0;s<e.medias.length;s++)a.append(e.medias[s]);a.sortable({helper:"clone",stop:i.galleries.setOrder})},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");t("i",e).attr("class","fa fa-fw fa-spinner fa-pulse"),a.ajax.post(n.data("ams-location")+"/set-media-visibility.json",{object_name:i.data("ams-element-name")},function(i,n){i.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")),i.handle_json&&a.ajax.handleJSON(i)})}},setOrder:function(e,i){if(!i||!i.item.hasClass("already-dropped")){var n=i.item.parents(".gallery"),s=t(".media",n).listattr("data-ams-element-name");a.ajax.post(n.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(s)})}},removeMedia:function(e){return function(){var e=t(this);a.skin.bigBox({title:a.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i>&nbsp; '+a.i18n.DELETE_WARNING,buttons:a.i18n.BTN_OK_CANCEL},function(t){if(t===a.i18n.BTN_OK){var i=e.parents(".gallery").data("ams-location"),n=e.parents(".media"),s=n.data("ams-element-name");a.ajax.post(i+"/delete-element.json",{object_name:s},function(t,e){n.remove(),t.handle_json&&a.ajax.handleJSON(t)})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},illustration:{addIllustration:function(){var e=t(this),a=e.parents(".btn-group").siblings("legend.switcher");t("i.fa-plus",a).click(),e.hide(),t('input[type="file"]',a.siblings(".form-group:first")).click()}},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")}},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:{updateThesaurus:function(e){var i=t(this).parents("form"),n=t('select[name$=".extract_name:list"]',i),s=n.data("select2");n.empty(),n.select2("data",null),s.results.empty();var r=t('select[name$=".thesaurus_name:list"]',i).val();r&&a.jsonrpc.post("getExtracts",{thesaurus_name:r},{url:"/api/thesaurus/json"},function(e){n.empty(),t(e.result).each(function(){t("<option></option>").attr("value",this.id).text(this.text).appendTo(n)}),s.opts.populateResults.call(s,s.results,e.result,{term:""})})}},fields:{refreshField:function(e){var a=t('table[id="form_fields_list"]'),i=t('tr[data-ams-element-name="'+e.object_name+'"]',a);t("td:nth-child(4)",i).html(e.title)}},imgmap:{init:function(){var e=t(this);a.ajax.check(t.fn.canvasAreaDraw,"/--static--/pyams_content/js/jquery-canvasAreaDraw"+a.devext+".js",function(){e.canvasAreaDraw({imageUrl:e.data("ams-image-url")})})},initPreview:function(){var e=t(this);a.ajax.check(t.fn.mapster,"/--static--/pyams_content/js/jquery-imagemapster-1.2.10"+a.devext+".js",function(){e.mapster({fillColor:"ff0000",fillOpacity:.35,selected:!0,highlight:!0,staticState:!0})})}},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);
+!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){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","Custom styles":"Styles spécifiques"}),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",stateSelector:'a[href^="oid://"]',onclick:function(){var e={},a=t.dom,i=t.selection,n=i.getNode(),s=a.getParent(n,"a[href]");e.text=s?s.innerText||s.textContent:i.getContent({format:"text"}),e.href=s?a.getAttrib(s,"href"):"",t.windowManager.open({title:"Insert internal link",body:[{type:"textbox",name:"oid",label:"Internal number",value:e.href,onchange:function(){e.href=this.value()}},{type:"textbox",name:"title",label:"Link title",value:e.text,onchange:function(){e.text=this.value()}}],onsubmit:function(n){t.focus(),e.href?s?("innerText"in s?s.innerText=e.text:s.textContent=e.text,a.setAttribs(s,{href:e.href}),i.select(s),t.undoManager.add()):t.insertContent('<a href="oid://'+n.data.oid+'">'+n.data.title+"</a>"):t.execCommand("unlink")}})}})}),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.paste_as_text=!0,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"}]}];var e=this.data();return e.amsTinymceEditorStyles&&t.style_formats.push({title:"Custom styles",items:e.amsTinymceEditorStyles}),t.plugins+=" internal_links headers",t.toolbar1&&(t.toolbar1="undo redo | pastetext | 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:{addMediaCallback:function(e){var a=t(".gallery",t('[id="'+e.parent+'"]')),n=a.siblings(".switcher");n.parents("fieldset:first").hasClass("switched")&&n.click();for(var s=0;s<e.medias.length;s++)a.append(e.medias[s]);a.sortable({helper:"clone",stop:i.galleries.setOrder})},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");t("i",e).attr("class","fa fa-fw fa-spinner fa-pulse"),a.ajax.post(n.data("ams-location")+"/set-media-visibility.json",{object_name:i.data("ams-element-name")},function(i,n){i.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")),i.handle_json&&a.ajax.handleJSON(i)})}},setOrder:function(e,i){if(!i||!i.item.hasClass("already-dropped")){var n=i.item.parents(".gallery"),s=t(".media",n).listattr("data-ams-element-name");a.ajax.post(n.data("ams-location")+"/set-medias-order.json",{medias:JSON.stringify(s)})}},removeMedia:function(e){return function(){var e=t(this);a.skin.bigBox({title:a.i18n.WARNING,content:'<i class="text-danger fa fa-2x fa-bell shake animated"></i>&nbsp; '+a.i18n.DELETE_WARNING,buttons:a.i18n.BTN_OK_CANCEL},function(t){if(t===a.i18n.BTN_OK){var i=e.parents(".gallery").data("ams-location"),n=e.parents(".media"),s=n.data("ams-element-name");a.ajax.post(i+"/delete-element.json",{object_name:s},function(t,e){n.remove(),t.handle_json&&a.ajax.handleJSON(t)})}})}},afterFancyboxLoad:function(t,e){t.element.hasClass("not-visible")&&t.inner.prepend('<div class="hidden-mask"></div>')}},illustration:{addIllustration:function(){var e=t(this),a=e.parents(".btn-group").siblings("legend.switcher");t("i.fa-plus",a).click(),e.hide(),t('input[type="file"]',a.siblings(".form-group:first")).click()}},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")}},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:{updateThesaurus:function(e){var i=t(this).parents("form"),n=t('select[name$=".extract_name:list"]',i),s=n.data("select2");n.empty(),n.select2("data",null),s.results.empty();var r=t('select[name$=".thesaurus_name:list"]',i).val();r&&a.jsonrpc.post("getExtracts",{thesaurus_name:r},{url:"/api/thesaurus/json"},function(e){n.empty(),t(e.result).each(function(){t("<option></option>").attr("value",this.id).text(this.text).appendTo(n)}),s.opts.populateResults.call(s,s.results,e.result,{term:""})})}},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);