Updated groups management
authorThierry Florac <thierry.florac@onf.fr>
Thu, 03 May 2018 11:48:17 +0200
changeset 87 e1bed28e3ff7
parent 86 48af829c3e59
child 88 d44d666ca164
Updated groups management
src/pyams_portal/locales/fr/LC_MESSAGES/pyams_portal.mo
src/pyams_portal/locales/fr/LC_MESSAGES/pyams_portal.po
src/pyams_portal/locales/pyams_portal.pot
src/pyams_portal/zmi/page.py
Binary file src/pyams_portal/locales/fr/LC_MESSAGES/pyams_portal.mo has changed
--- a/src/pyams_portal/locales/fr/LC_MESSAGES/pyams_portal.po	Thu May 03 11:36:20 2018 +0200
+++ b/src/pyams_portal/locales/fr/LC_MESSAGES/pyams_portal.po	Thu May 03 11:48:17 2018 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2017-06-28 16:44+0200\n"
+"POT-Creation-Date: 2018-05-03 11:36+0200\n"
 "PO-Revision-Date: 2015-05-12 12:10+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -24,63 +24,70 @@
 msgid "Portal templates manager"
 msgstr "Gestionnaire des modèles"
 
-#: src/pyams_portal/zmi/portlet.py:45
+#: src/pyams_portal/zmi/portlet.py:50
+msgid "Edit portlet settings"
+msgstr "Propriétés du composant"
+
+#: src/pyams_portal/zmi/portlet.py:92
+msgid "Main properties"
+msgstr "Propriétés"
+
+#: src/pyams_portal/zmi/portlet.py:66 src/pyams_portal/zmi/portlet.py:72
+msgid "Override template settings"
+msgstr "Remplacer le paramétrage du modèle"
+
+#: src/pyams_portal/zmi/portlet.py:47
 #, python-format
 msgid "« {0} »  portal template - {1}"
 msgstr "Modèle de présentation « {0} »  - {1}"
 
-#: src/pyams_portal/zmi/portlet.py:48
-msgid "Edit portlet settings"
-msgstr "Propriétés du composant"
-
-#: src/pyams_portal/zmi/portlet.py:63
+#: src/pyams_portal/zmi/portlet.py:70
 msgid "Override parent settings"
 msgstr "Remplacer le paramétrage du parent"
 
-#: src/pyams_portal/zmi/portlet.py:65
-msgid "Override template settings"
-msgstr "Remplacer le paramétrage du modèle"
-
-#: src/pyams_portal/zmi/portlet.py:84
-msgid "Main properties"
-msgstr "Propriétés"
-
-#: src/pyams_portal/zmi/page.py:63
+#: src/pyams_portal/zmi/page.py:67
 msgid "Presentation"
 msgstr "Présentation"
 
-#: src/pyams_portal/zmi/page.py:78
+#: src/pyams_portal/zmi/page.py:124
 msgid "Edit template configuration"
 msgstr "Choix du modèle de présentation"
 
-#: src/pyams_portal/zmi/page.py:98
-msgid "Use shared template"
-msgstr "Utiliser un modèle de présentation partagé"
-
-#: src/pyams_portal/zmi/page.py:128
+#: src/pyams_portal/zmi/page.py:201
 msgid ""
 "If you choose a shared template, you can only adjust settings of each "
 "portlet individually but can't change portlets list or page configuration.\n"
 "If you use a local template, you can define a whole custom configuration but "
 "the template definition can't be reused anywhere..."
 msgstr ""
-"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"
-"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é en dehors des sous-niveaux "
-"qui pourront en hériter...\n"
-"ATTENTION : si vous choisissez d'hériter du modèle du parent, les autres paramètres modifiés ici seront sans effet !!!"
+"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"
+"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é en dehors des sous-niveaux qui pourront en "
+"hériter...\n"
+"ATTENTION : si vous choisissez d'hériter du modèle du parent, les autres "
+"paramètres modifiés ici seront sans effet !!!"
 
-#: src/pyams_portal/zmi/page.py:144
+#: src/pyams_portal/zmi/page.py:217
 msgid "Template properties"
 msgstr "Configuration du modèle"
 
-#: src/pyams_portal/zmi/template.py:63 src/pyams_portal/zmi/layout.py:220
-#: src/pyams_portal/zmi/layout.py:382
-#, python-format
-msgid "« {0} »  portal template"
-msgstr "Modèle de présentation « {0} »"
+#: src/pyams_portal/zmi/page.py:93 src/pyams_portal/zmi/page.py:156
+msgid "Use shared template"
+msgstr "Utiliser un modèle de présentation partagé"
+
+#: src/pyams_portal/zmi/page.py:110 src/pyams_portal/zmi/page.py:172
+msgid "You must choose to use a local template or select a shared one!"
+msgstr ""
+"Vous devez choisir un modèle de présentation partagé lorsque vous "
+"n'appliquez pas de modèle local !"
+
+#: src/pyams_portal/zmi/page.py:146
+msgid "Override parent template"
+msgstr "Ne pas hériter du modèle de présentation du parent"
 
 #: src/pyams_portal/zmi/template.py:84
 msgid "Add template"
@@ -94,31 +101,20 @@
 msgid "Add shared template"
 msgstr "Ajout d'un modèle de présentation"
 
-#: src/pyams_portal/zmi/template.py:119 src/pyams_portal/zmi/layout.py:246
+#: src/pyams_portal/zmi/template.py:119 src/pyams_portal/zmi/layout.py:247
 msgid "Specified name is already used!"
 msgstr "Le nom indiqué est déjà utilisé !"
 
-#: src/pyams_portal/zmi/layout.py:68
-msgid "Template management"
-msgstr "Ce modèle"
+#: src/pyams_portal/zmi/template.py:63 src/pyams_portal/zmi/layout.py:220
+#: src/pyams_portal/zmi/layout.py:393
+#, python-format
+msgid "« {0} »  portal template"
+msgstr "Modèle de présentation « {0} »"
 
-#: src/pyams_portal/zmi/layout.py:78
+#: src/pyams_portal/zmi/layout.py:77
 msgid "Properties"
 msgstr "Propriétés"
 
-#: src/pyams_portal/zmi/layout.py:96
-msgid "Local template configuration"
-msgstr "Configuration d'un modèle local"
-
-#: src/pyams_portal/zmi/layout.py:99
-#, python-format
-msgid "Shared template configuration ({0})"
-msgstr "Configuration d'un modèle partagé ({0})"
-
-#: src/pyams_portal/zmi/layout.py:101
-msgid "Template configuration"
-msgstr "Configuration d'un modèle"
-
 #: src/pyams_portal/zmi/layout.py:164
 msgid "Add row..."
 msgstr "Ajouter une ligne"
@@ -132,49 +128,69 @@
 msgid "Add slot"
 msgstr "Ajout d'un panneau"
 
-#: src/pyams_portal/zmi/layout.py:300
+#: src/pyams_portal/zmi/layout.py:310
+msgid "Edit slot properties"
+msgstr "Propriétés d'un panneau"
+
+#: src/pyams_portal/zmi/layout.py:379
+msgid "Add portlet..."
+msgstr "Ajouter un composant"
+
+#: src/pyams_portal/zmi/layout.py:395
+msgid "Add portlet"
+msgstr "Ajouter un composant"
+
+#: src/pyams_portal/zmi/layout.py:67
+msgid "Template management"
+msgstr "Ce modèle"
+
+#: src/pyams_portal/zmi/layout.py:101
+msgid "Template configuration"
+msgstr "Configuration d'un modèle"
+
+#: src/pyams_portal/zmi/layout.py:96
+msgid "Local template configuration"
+msgstr "Configuration d'un modèle local"
+
+#: src/pyams_portal/zmi/layout.py:307
 #, python-format
 msgid "« {0} »  portal template - {1} slot"
 msgstr "Modèle de présentation « {0} » - Panneau {1}"
 
-#: src/pyams_portal/zmi/layout.py:303
-msgid "Edit slot properties"
-msgstr "Propriétés d'un panneau"
-
-#: src/pyams_portal/zmi/layout.py:368
-msgid "Add portlet..."
-msgstr "Ajouter un composant"
-
-#: src/pyams_portal/zmi/layout.py:384
-msgid "Add portlet"
-msgstr "Ajouter un composant"
+#: src/pyams_portal/zmi/layout.py:99
+#, python-format
+msgid "Shared template configuration ({0})"
+msgstr "Configuration d'un modèle partagé ({0})"
 
 #: src/pyams_portal/zmi/container.py:87
 msgid "Shared portal templates"
 msgstr "Modèles de présentation partagés"
 
-#: src/pyams_portal/zmi/container.py:127
+#: src/pyams_portal/zmi/container.py:124
 msgid "Delete template"
 msgstr "Supprimer le modèle"
 
-#: src/pyams_portal/zmi/container.py:170
+#: src/pyams_portal/zmi/container.py:174
 msgid "Selected portlets..."
 msgstr "Composants sélectionnés"
 
-#: src/pyams_portal/zmi/container.py:186
+#: src/pyams_portal/zmi/container.py:192
 msgid "Portal templates container"
 msgstr "Gestionnaire des modèles"
 
-#: src/pyams_portal/zmi/container.py:187
+#: src/pyams_portal/zmi/container.py:193
 msgid "Edit selected portlets"
 msgstr "Sélection des composants"
 
-#: src/pyams_portal/zmi/templates/portlet.pt:129
-#: src/pyams_portal/zmi/templates/portlet.pt:144
+#: src/pyams_portal/zmi/templates/portlet.pt:134
 msgid "Title"
 msgstr "Titre"
 
-#: src/pyams_portal/zmi/templates/portlet.pt:159
+#: src/pyams_portal/zmi/templates/portlet.pt:149
+msgid "Legend"
+msgstr "Légende"
+
+#: src/pyams_portal/zmi/templates/portlet.pt:164
 msgid "Tab label"
 msgstr "Libellé de l'onglet"
 
@@ -210,23 +226,27 @@
 msgid "Large desktop device (> 1170px)"
 msgstr "Écrans de grande taille (> 1170 px)"
 
-#: src/pyams_portal/zmi/templates/layout.pt:123
+#: src/pyams_portal/zmi/templates/layout.pt:110
+msgid "Override parent or template settings"
+msgstr "Remplacer le paramétrage du parent ou du modèle"
+
+#: src/pyams_portal/zmi/templates/layout.pt:129
 msgid "Delete row..."
 msgstr "Supprimer la ligne"
 
-#: src/pyams_portal/zmi/templates/layout.pt:132
+#: src/pyams_portal/zmi/templates/layout.pt:138
 msgid "Edit slot properties..."
 msgstr "Propriétés"
 
-#: src/pyams_portal/zmi/templates/layout.pt:139
+#: src/pyams_portal/zmi/templates/layout.pt:145
 msgid "Delete slot..."
 msgstr "Supprimer le panneau"
 
-#: src/pyams_portal/zmi/templates/layout.pt:147
+#: src/pyams_portal/zmi/templates/layout.pt:153
 msgid "Edit portlet properties..."
 msgstr "Propriétés"
 
-#: src/pyams_portal/zmi/templates/layout.pt:155
+#: src/pyams_portal/zmi/templates/layout.pt:161
 msgid "Delete portlet..."
 msgstr "Supprimer le composant"
 
@@ -250,6 +270,38 @@
 msgid "Default content renderer"
 msgstr "Rendu de contenu (par défaut)"
 
+#: src/pyams_portal/portlets/html/__init__.py:53
+msgid "Raw HTML"
+msgstr "Code HTML"
+
+#: src/pyams_portal/portlets/html/__init__.py:65
+msgid "Default code renderer"
+msgstr "Rendu de code HTML (par défaut)"
+
+#: src/pyams_portal/portlets/html/__init__.py:87
+msgid "Rich text"
+msgstr "Texte enrichi"
+
+#: src/pyams_portal/portlets/html/__init__.py:99
+msgid "Default text renderer"
+msgstr "Rendu de code HTML (par défaut)"
+
+#: src/pyams_portal/portlets/html/interfaces.py:31
+msgid "Raw HTML code"
+msgstr "Code HTML"
+
+#: src/pyams_portal/portlets/html/interfaces.py:32
+msgid ""
+"This HTML code will be used 'as is', without any transformation. Use with "
+"care!!"
+msgstr ""
+"Ce code HTML sera utilisé 'en l'état', sans aucune vérification ni transformation. "
+"À utiliser donc avec précaution !!"
+
+#: src/pyams_portal/portlets/html/interfaces.py:40
+msgid "Body"
+msgstr "Contenu HTML"
+
 #: src/pyams_portal/interfaces/__init__.py:65
 msgid "Portlet"
 msgstr "Composant"
@@ -363,19 +415,19 @@
 msgid "CSS class applied to this slot"
 msgstr "Classe CSS spécifique appliquée à ce panneau"
 
-#: src/pyams_portal/interfaces/__init__.py:344
+#: src/pyams_portal/interfaces/__init__.py:346
 msgid "Template name"
 msgstr "Nom du modèle"
 
-#: src/pyams_portal/interfaces/__init__.py:345
+#: src/pyams_portal/interfaces/__init__.py:347
 msgid "Two registered templates can't share the same name..."
 msgstr "Deux modèles partagés ne peuvent pas utiliser le même nom..."
 
-#: src/pyams_portal/interfaces/__init__.py:366
+#: src/pyams_portal/interfaces/__init__.py:368
 msgid "Toolbar portlets"
 msgstr "Composants de la barre d'outils"
 
-#: src/pyams_portal/interfaces/__init__.py:367
+#: src/pyams_portal/interfaces/__init__.py:369
 msgid ""
 "These portlets will be directly available in templates configuration page "
 "toolbar"
@@ -383,48 +435,51 @@
 "Ces composants seront directement accessibles dans la page de configuration "
 "des modèles de présentation sous la forme d'une barre d'icônes"
 
-#: src/pyams_portal/interfaces/__init__.py:393
+#: src/pyams_portal/interfaces/__init__.py:395
 msgid "Inherit parent template?"
 msgstr "Hériter du modèle du parent ?"
 
-#: src/pyams_portal/interfaces/__init__.py:394
+#: src/pyams_portal/interfaces/__init__.py:396
 msgid "Should we reuse parent template?"
 msgstr "Doit-on ré-utiliser le modèle du parent ?"
 
-#: src/pyams_portal/interfaces/__init__.py:398
+#: src/pyams_portal/interfaces/__init__.py:400
+msgid "Override parent template?"
+msgstr "Ne pas hériter du modèle du parent ?"
+
+#: src/pyams_portal/interfaces/__init__.py:401
+msgid "Should we override parent template?"
+msgstr "Doit-on remplacer le modèle de présentation du parent ?"
+
+#: src/pyams_portal/interfaces/__init__.py:405
 msgid "Use local template?"
 msgstr "Utiliser un modèle local ?"
 
-#: src/pyams_portal/interfaces/__init__.py:399
+#: src/pyams_portal/interfaces/__init__.py:406
 msgid ""
 "If 'yes', you can define a custom local template instead of a shared template"
 msgstr ""
 "Si 'oui', vous pouvez définir un modèle de présentation local au lieu d'un "
 "modèle partagé"
 
-#: src/pyams_portal/interfaces/__init__.py:404
+#: src/pyams_portal/interfaces/__init__.py:411
+msgid "Local template"
+msgstr "Modèle local"
+
+#: src/pyams_portal/interfaces/__init__.py:416
 msgid "Use shared template?"
 msgstr "Utiliser un modèle partagé"
 
-#: src/pyams_portal/interfaces/__init__.py:405
+#: src/pyams_portal/interfaces/__init__.py:417
 msgid "If 'yes', you can select a shared template"
 msgstr ""
-"Si 'oui', vous pouvez sélectionner un modèle de présentation partagé au lieu d'un modèle local"
+"Si 'oui', vous pouvez sélectionner un modèle de présentation partagé au lieu "
+"d'un modèle local"
 
-#: src/pyams_portal/interfaces/__init__.py:409
+#: src/pyams_portal/interfaces/__init__.py:421
 msgid "Page template"
 msgstr "Modèle de page"
 
-#: src/pyams_portal/interfaces/__init__.py:410
+#: src/pyams_portal/interfaces/__init__.py:422
 msgid "Template used for this page"
 msgstr "Modèle de présentation utilisé pour cette page"
-
-#: src/pyams_portal/interfaces/__init__.py:417
-msgid "You must choose to use a local template or select a shared one!"
-msgstr ""
-"Vous devez choisir un modèle de présentation partagé lorsque vous "
-"n'appliquez pas de modèle local !"
-
-#: src/pyams_portal/interfaces/__init__.py:419
-msgid "Local template"
-msgstr "Modèle local"
--- a/src/pyams_portal/locales/pyams_portal.pot	Thu May 03 11:36:20 2018 +0200
+++ b/src/pyams_portal/locales/pyams_portal.pot	Thu May 03 11:48:17 2018 +0200
@@ -1,12 +1,12 @@
 #
 # SOME DESCRIPTIVE TITLE
 # This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2017-06-28 16:44+0200\n"
+"POT-Creation-Date: 2018-05-03 11:36+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"
@@ -14,7 +14,7 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Lingua 4.13\n"
+"Generated-By: Lingua 3.10.dev0\n"
 
 #: ./src/pyams_portal/__init__.py:43
 msgid "Manage portal templates"
@@ -24,53 +24,55 @@
 msgid "Portal templates manager"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/portlet.py:45
+#: ./src/pyams_portal/zmi/portlet.py:50
+msgid "Edit portlet settings"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/portlet.py:92
+msgid "Main properties"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/portlet.py:66 ./src/pyams_portal/zmi/portlet.py:72
+msgid "Override template settings"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/portlet.py:47
 #, python-format
 msgid "« {0} »  portal template - {1}"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/portlet.py:48
-msgid "Edit portlet settings"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/portlet.py:63
+#: ./src/pyams_portal/zmi/portlet.py:70
 msgid "Override parent settings"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/portlet.py:65
-msgid "Override template settings"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/portlet.py:84
-msgid "Main properties"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/page.py:63
+#: ./src/pyams_portal/zmi/page.py:67
 msgid "Presentation"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/page.py:78
+#: ./src/pyams_portal/zmi/page.py:124
 msgid "Edit template configuration"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/page.py:98
-msgid "Use shared template"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/page.py:128
+#: ./src/pyams_portal/zmi/page.py:201
 msgid ""
 "If you choose a shared template, you can only adjust settings of each portlet individually but can't change portlets list or page configuration.\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_portal/zmi/page.py:144
+#: ./src/pyams_portal/zmi/page.py:217
 msgid "Template properties"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/template.py:63 ./src/pyams_portal/zmi/layout.py:220
-#: ./src/pyams_portal/zmi/layout.py:382
-#, python-format
-msgid "« {0} »  portal template"
+#: ./src/pyams_portal/zmi/page.py:93 ./src/pyams_portal/zmi/page.py:156
+msgid "Use shared template"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/page.py:110 ./src/pyams_portal/zmi/page.py:172
+msgid "You must choose to use a local template or select a shared one!"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/page.py:146
+msgid "Override parent template"
 msgstr ""
 
 #: ./src/pyams_portal/zmi/template.py:84
@@ -85,29 +87,18 @@
 msgid "Add shared template"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/template.py:119 ./src/pyams_portal/zmi/layout.py:246
+#: ./src/pyams_portal/zmi/template.py:119 ./src/pyams_portal/zmi/layout.py:247
 msgid "Specified name is already used!"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/layout.py:68
-msgid "Template management"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/layout.py:78
-msgid "Properties"
+#: ./src/pyams_portal/zmi/template.py:63 ./src/pyams_portal/zmi/layout.py:220
+#: ./src/pyams_portal/zmi/layout.py:393
+#, python-format
+msgid "« {0} »  portal template"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/layout.py:96
-msgid "Local template configuration"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/layout.py:99
-#, python-format
-msgid "Shared template configuration ({0})"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/layout.py:101
-msgid "Template configuration"
+#: ./src/pyams_portal/zmi/layout.py:77
+msgid "Properties"
 msgstr ""
 
 #: ./src/pyams_portal/zmi/layout.py:164
@@ -123,49 +114,69 @@
 msgid "Add slot"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/layout.py:300
+#: ./src/pyams_portal/zmi/layout.py:310
+msgid "Edit slot properties"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/layout.py:379
+msgid "Add portlet..."
+msgstr ""
+
+#: ./src/pyams_portal/zmi/layout.py:395
+msgid "Add portlet"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/layout.py:67
+msgid "Template management"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/layout.py:101
+msgid "Template configuration"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/layout.py:96
+msgid "Local template configuration"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/layout.py:307
 #, python-format
 msgid "« {0} »  portal template - {1} slot"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/layout.py:303
-msgid "Edit slot properties"
-msgstr ""
-
-#: ./src/pyams_portal/zmi/layout.py:368
-msgid "Add portlet..."
-msgstr ""
-
-#: ./src/pyams_portal/zmi/layout.py:384
-msgid "Add portlet"
+#: ./src/pyams_portal/zmi/layout.py:99
+#, python-format
+msgid "Shared template configuration ({0})"
 msgstr ""
 
 #: ./src/pyams_portal/zmi/container.py:87
 msgid "Shared portal templates"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/container.py:127
+#: ./src/pyams_portal/zmi/container.py:124
 msgid "Delete template"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/container.py:170
+#: ./src/pyams_portal/zmi/container.py:174
 msgid "Selected portlets..."
 msgstr ""
 
-#: ./src/pyams_portal/zmi/container.py:186
+#: ./src/pyams_portal/zmi/container.py:192
 msgid "Portal templates container"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/container.py:187
+#: ./src/pyams_portal/zmi/container.py:193
 msgid "Edit selected portlets"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/portlet.pt:129
-#: ./src/pyams_portal/zmi/templates/portlet.pt:144
+#: ./src/pyams_portal/zmi/templates/portlet.pt:134
 msgid "Title"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/portlet.pt:159
+#: ./src/pyams_portal/zmi/templates/portlet.pt:149
+msgid "Legend"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/templates/portlet.pt:164
 msgid "Tab label"
 msgstr ""
 
@@ -201,23 +212,27 @@
 msgid "Large desktop device (> 1170px)"
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/layout.pt:123
+#: ./src/pyams_portal/zmi/templates/layout.pt:110
+msgid "Override parent or template settings"
+msgstr ""
+
+#: ./src/pyams_portal/zmi/templates/layout.pt:129
 msgid "Delete row..."
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/layout.pt:132
+#: ./src/pyams_portal/zmi/templates/layout.pt:138
 msgid "Edit slot properties..."
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/layout.pt:139
+#: ./src/pyams_portal/zmi/templates/layout.pt:145
 msgid "Delete slot..."
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/layout.pt:147
+#: ./src/pyams_portal/zmi/templates/layout.pt:153
 msgid "Edit portlet properties..."
 msgstr ""
 
-#: ./src/pyams_portal/zmi/templates/layout.pt:155
+#: ./src/pyams_portal/zmi/templates/layout.pt:161
 msgid "Delete portlet..."
 msgstr ""
 
@@ -241,6 +256,36 @@
 msgid "Default content renderer"
 msgstr ""
 
+#: ./src/pyams_portal/portlets/html/__init__.py:53
+msgid "Raw HTML"
+msgstr ""
+
+#: ./src/pyams_portal/portlets/html/__init__.py:65
+msgid "Default code renderer"
+msgstr ""
+
+#: ./src/pyams_portal/portlets/html/__init__.py:87
+msgid "Rich text"
+msgstr ""
+
+#: ./src/pyams_portal/portlets/html/__init__.py:99
+msgid "Default text renderer"
+msgstr ""
+
+#: ./src/pyams_portal/portlets/html/interfaces.py:31
+msgid "Raw HTML code"
+msgstr ""
+
+#: ./src/pyams_portal/portlets/html/interfaces.py:32
+msgid ""
+"This HTML code will be used 'as is', without any transformation. Use with "
+"care!!"
+msgstr ""
+
+#: ./src/pyams_portal/portlets/html/interfaces.py:40
+msgid "Body"
+msgstr ""
+
 #: ./src/pyams_portal/interfaces/__init__.py:65
 msgid "Portlet"
 msgstr ""
@@ -344,61 +389,65 @@
 msgid "CSS class applied to this slot"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:344
+#: ./src/pyams_portal/interfaces/__init__.py:346
 msgid "Template name"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:345
+#: ./src/pyams_portal/interfaces/__init__.py:347
 msgid "Two registered templates can't share the same name..."
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:366
+#: ./src/pyams_portal/interfaces/__init__.py:368
 msgid "Toolbar portlets"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:367
+#: ./src/pyams_portal/interfaces/__init__.py:369
 msgid ""
 "These portlets will be directly available in templates configuration page "
 "toolbar"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:393
+#: ./src/pyams_portal/interfaces/__init__.py:395
 msgid "Inherit parent template?"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:394
+#: ./src/pyams_portal/interfaces/__init__.py:396
 msgid "Should we reuse parent template?"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:398
+#: ./src/pyams_portal/interfaces/__init__.py:400
+msgid "Override parent template?"
+msgstr ""
+
+#: ./src/pyams_portal/interfaces/__init__.py:401
+msgid "Should we override parent template?"
+msgstr ""
+
+#: ./src/pyams_portal/interfaces/__init__.py:405
 msgid "Use local template?"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:399
+#: ./src/pyams_portal/interfaces/__init__.py:406
 msgid ""
 "If 'yes', you can define a custom local template instead of a shared template"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:404
+#: ./src/pyams_portal/interfaces/__init__.py:411
+msgid "Local template"
+msgstr ""
+
+#: ./src/pyams_portal/interfaces/__init__.py:416
 msgid "Use shared template?"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:405
+#: ./src/pyams_portal/interfaces/__init__.py:417
 msgid "If 'yes', you can select a shared template"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:409
+#: ./src/pyams_portal/interfaces/__init__.py:421
 msgid "Page template"
 msgstr ""
 
-#: ./src/pyams_portal/interfaces/__init__.py:410
+#: ./src/pyams_portal/interfaces/__init__.py:422
 msgid "Template used for this page"
 msgstr ""
-
-#: ./src/pyams_portal/interfaces/__init__.py:417
-msgid "You must choose to use a local template or select a shared one!"
-msgstr ""
-
-#: ./src/pyams_portal/interfaces/__init__.py:419
-msgid "Local template"
-msgstr ""
--- a/src/pyams_portal/zmi/page.py	Thu May 03 11:36:20 2018 +0200
+++ b/src/pyams_portal/zmi/page.py	Thu May 03 11:48:17 2018 +0200
@@ -16,7 +16,7 @@
 # import standard library
 
 # import interfaces
-from pyams_form.interfaces.form import IWidgetForm, IFormHelp
+from pyams_form.interfaces.form import IWidgetForm, IFormHelp, IInnerSubForm
 from pyams_portal.interfaces import IPortalContext, IPortalPage, IPortalTemplateConfiguration, \
     MANAGE_TEMPLATE_PERMISSION
 from pyams_portal.zmi.interfaces import IPortalContextTemplatePropertiesMenu
@@ -25,11 +25,12 @@
 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
 from pyams_zmi.interfaces.menu import ISiteManagementMenu
 from pyams_zmi.layer import IAdminLayer
+from z3c.form.interfaces import IDataExtractedEvent
 
 # import packages
 from pyramid.view import view_config
 from pyams_form.form import AJAXEditForm
-from pyams_form.group import NamedWidgetsGroup
+from pyams_form.group import NamedWidgetsGroup, FormWidgetsGroup
 from pyams_form.help import FormHelp
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_portal.zmi.layout import PortalTemplateLayoutView, PortalTemplatePortletEditForm, \
@@ -40,11 +41,12 @@
 from pyams_utils.url import absolute_url
 from pyams_viewlet.manager import viewletmanager_config
 from pyams_viewlet.viewlet import viewlet_config
-from pyams_zmi.form import AdminEditForm
+from pyams_zmi.form import AdminEditForm, InnerAdminEditForm
 from pyams_zmi.zmi.site import PropertiesEditFormHeaderAdapter
+from pyramid.events import subscriber
 from z3c.form import field
 from z3c.form.browser.checkbox import SingleCheckBoxFieldWidget
-from zope.interface import implementer, Interface
+from zope.interface import implementer, Interface, Invalid
 
 from pyams_portal import _
 
@@ -66,6 +68,48 @@
     url = '#template-properties.html'
 
 
+class InheritedTemplateWidgetsGroup(FormWidgetsGroup):
+    """Inherit template widgets groups"""
+
+
+@adapter_config(context=(IPortalContext, IPyAMSLayer, InheritedTemplateWidgetsGroup), provides=IInnerSubForm)
+class InheritedPortalContextTemplatePropertiesEditForm(InnerAdminEditForm):
+    """Inherited portal context template properties"""
+
+    def __new__(cls, context, request, group):
+        if not group.form.getContent().can_inherit:
+            return None
+        return InnerAdminEditForm.__new__(cls)
+
+    legend = None
+
+    fields = field.Fields(IPortalPage).select('use_shared_template', 'shared_template')
+    fields['use_shared_template'].widgetFactory = SingleCheckBoxFieldWidget
+
+    def updateGroups(self):
+        self.add_group(NamedWidgetsGroup(self, 'inherited_template_properties', self.widgets,
+                                         ('use_shared_template', 'shared_template',),
+                                         legend=_("Use shared template"),
+                                         css_class='inner',
+                                         switch=True,
+                                         checkbox_switch=True,
+                                         checkbox_field=IPortalPage['use_shared_template']))
+        super(InheritedPortalContextTemplatePropertiesEditForm, self).updateGroups()
+
+
+@subscriber(IDataExtractedEvent, form_selector=InheritedPortalContextTemplatePropertiesEditForm)
+def handle_inherited_template_proterties_extract_event(event):
+    """Handle template properties extract event"""
+    form = event.form
+    parent = form.parent_form  # parent group!
+    form_data, form_errors = parent.form.extractData()
+    if form_data.get('override_parent'):
+        data = event.data
+        if data.get('use_shared_template') and not data.get('shared_template'):
+            parent.form.widgets.errors += (Invalid(_("You must choose to use a local template or select a shared "
+                                                     "one!")),)
+
+
 @pagelet_config(name='template-properties.html', context=IPortalContext, layer=IPyAMSLayer,
                 permission=MANAGE_TEMPLATE_PERMISSION)
 @implementer(IWidgetForm, IInnerPage)
@@ -80,10 +124,12 @@
 
     @property
     def fields(self):
-        fields = field.Fields(IPortalPage).select('inherit_parent', 'use_shared_template', 'shared_template')
-        if not self.getContent().can_inherit:
-            fields = fields.omit('inherit_parent')
-        fields['use_shared_template'].widgetFactory = SingleCheckBoxFieldWidget
+        if self.getContent().can_inherit:
+            fields = field.Fields(IPortalPage).select('override_parent')
+            fields['override_parent'].widgetFactory = SingleCheckBoxFieldWidget
+        else:
+            fields = field.Fields(IPortalPage).select('use_shared_template', 'shared_template')
+            fields['use_shared_template'].widgetFactory = SingleCheckBoxFieldWidget
         return fields
 
     ajax_handler = 'template-properties.json'
@@ -92,15 +138,37 @@
     def getContent(self):
         return IPortalPage(self.context)
 
-    def update(self):
-        super(PortalContextTemplatePropertiesEditForm, self).update()
-        self.add_group(NamedWidgetsGroup(self, 'template_properties', self.widgets,
-                                         ('use_shared_template', 'shared_template', ),
-                                         legend=_("Use shared template"),
-                                         css_class='inner',
-                                         switch=True,
-                                         checkbox_switch=True,
-                                         checkbox_field=IPortalPage['use_shared_template']))
+    def updateGroups(self):
+        if self.getContent().can_inherit:
+            group = NamedWidgetsGroup(self, 'template_properties', self.widgets,
+                                      ('override_parent',),
+                                      legend=_("Override parent template"),
+                                      css_class='inner',
+                                      switch=True,
+                                      checkbox_switch=True,
+                                      checkbox_mode='disable',
+                                      checkbox_field=IPortalPage['override_parent'],
+                                      factory=InheritedTemplateWidgetsGroup)
+        else:
+            group = NamedWidgetsGroup(self, 'template_properties', self.widgets,
+                                      ('use_shared_template', 'shared_template',),
+                                      legend=_("Use shared template"),
+                                      css_class='inner',
+                                      switch=True,
+                                      checkbox_switch=True,
+                                      checkbox_field=IPortalPage['use_shared_template'])
+        self.add_group(group)
+        super(PortalContextTemplatePropertiesEditForm, self).updateGroups()
+
+
+@subscriber(IDataExtractedEvent, form_selector=PortalContextTemplatePropertiesEditForm)
+def handle_template_proterties_extract_event(event):
+    """Handle template properties extract event"""
+    form = event.form
+    if not form.getContent().can_inherit:
+        data = event.data
+        if data.get('use_shared_template') and not data.get('shared_template'):
+            form.widgets.errors += (Invalid(_("You must choose to use a local template or select a shared one!")),)
 
 
 @view_config(name='template-properties.json', context=IPortalContext, request_type=IPyAMSLayer,
@@ -109,11 +177,13 @@
     """Portal context template properties edit form, JSON renderer"""
 
     def get_ajax_output(self, changes):
-        if ('inherit_parent' in changes.get(IPortalPage, ())) or \
-           ('use_shared_template' in changes.get(IPortalPage, ())):
-            return {'status': 'redirect'}
-        else:
-            return super(PortalContextTemplatePropertiesAJAXEditForm, self).get_ajax_output(changes)
+        output = super(PortalContextTemplatePropertiesAJAXEditForm, self).get_ajax_output(changes)
+        if changes:
+            output.update({
+                'status': 'redirect',
+                'message': self.request.localizer.translate(self.successMessage)
+            })
+        return output
 
 
 @adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm), provides=IPageHeader)