src/pyams_content/component/paragraph/zmi/html.py
changeset 355 5dce53509832
parent 283 9139536eab90
child 395 2a39b333a585
--- a/src/pyams_content/component/paragraph/zmi/html.py	Tue Feb 06 11:15:55 2018 +0100
+++ b/src/pyams_content/component/paragraph/zmi/html.py	Tue Feb 06 11:16:23 2018 +0100
@@ -21,10 +21,9 @@
 from pyams_content.component.illustration.interfaces import IIllustration, IIllustrationRenderer
 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
     IParagraphSummary
-from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph
+from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph
 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
-from pyams_content.shared.common.interfaces import IWfSharedContent
 from pyams_form.interfaces.form import IInnerForm, IEditFormButtons
 from pyams_i18n.interfaces import II18n
 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
@@ -34,14 +33,13 @@
 
 # import packages
 from pyams_content.component.association.zmi import AssociationsTable
-from pyams_content.component.paragraph.html import HTMLParagraph
+from pyams_content.component.paragraph.html import HTMLParagraph, RawParagraph
 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
     BaseParagraphAddMenu, BaseParagraphPropertiesEditForm
 from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable, \
     ParagraphTitleToolbarViewletManager
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_template.template import template_config
-
 from pyams_utils.adapter import adapter_config
 from pyams_utils.traversing import get_parent
 from pyams_viewlet.viewlet import viewlet_config, BaseContentProvider
@@ -55,15 +53,130 @@
 
 
 #
-# HTML paragraph
+# Raw HTML paragraph
+#
+
+@viewlet_config(name='add-raw-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
+                layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=999)
+class RawParagraphAddMenu(BaseParagraphAddMenu):
+    """Raw HTML paragraph add menu"""
+
+    label = _("Add raw HTML paragraph...")
+    label_css_class = 'fa fa-fw fa-code'
+    url = 'add-raw-paragraph.html'
+    paragraph_type = 'raw'
+
+
+@pagelet_config(name='add-raw-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+class RawParagraphAddForm(AdminDialogAddForm):
+    """Raw HTML paragraph add form"""
+
+    legend = _("Add new raw HTML paragraph")
+    dialog_class = 'modal-large'
+    icon_css_class = 'fa fa-fw fa-code'
+    label_css_class = 'control-label col-md-2'
+    input_css_class = 'col-md-10'
+
+    fields = field.Fields(IRawParagraph).omit('__parent__', '__name__', 'visible')
+    ajax_handler = 'add-raw-paragraph.json'
+    edit_permission = MANAGE_CONTENT_PERMISSION
+
+    def updateWidgets(self, prefix=None):
+        super(RawParagraphAddForm, self).updateWidgets(prefix)
+        if 'body' in self.widgets:
+            self.widgets['body'].widget_css_class = 'textarea height-100'
+
+    def create(self, data):
+        return RawParagraph()
+
+    def add(self, object):
+        IParagraphContainer(self.context).append(object)
+
+
+@view_config(name='add-raw-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
+class RawParagraphAJAXAddForm(BaseParagraphAJAXAddForm, RawParagraphAddForm):
+    """Raw HTML paragraph add form, JSON renderer"""
+
+
+@pagelet_config(name='properties.html', context=IRawParagraph, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+class RawParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
+    """Raw HTML paragraph properties edit form"""
+
+    legend = _("Edit raw HTML paragraph properties")
+    icon_css_class = 'fa fa-fw fa-code'
+
+    fields = field.Fields(IRawParagraph).omit('__parent__', '__name__', 'visible')
+    ajax_handler = 'properties.json'
+    edit_permission = MANAGE_CONTENT_PERMISSION
+
+    def updateWidgets(self, prefix=None):
+        super(RawParagraphPropertiesEditForm, self).updateWidgets(prefix)
+        if 'body' in self.widgets:
+            self.widgets['body'].widget_css_class = 'textarea height-100'
+
+
+@view_config(name='properties.json', context=IRawParagraph, request_type=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
+class RawParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, RawParagraphPropertiesEditForm):
+    """Raw HTML paragraph properties edit form, JSON renderer"""
+
+
+@adapter_config(context=(IRawParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
+@implementer(IInnerForm)
+class RawParagraphInnerEditForm(RawParagraphPropertiesEditForm):
+    """Raw HTML paragraph inner edit form"""
+
+    legend = None
+    ajax_handler = 'inner-properties.json'
+
+    @property
+    def buttons(self):
+        if self.mode == INPUT_MODE:
+            return button.Buttons(IEditFormButtons)
+        else:
+            return button.Buttons()
+
+
+@view_config(name='inner-properties.json', context=IRawParagraph, request_type=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
+class RawParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, RawParagraphInnerEditForm):
+    """Raw HTML paragraph inner edit form, JSON renderer"""
+
+
+#
+# Raw HTML paragraph summary
+#
+
+@adapter_config(context=(IRawParagraph, IPyAMSLayer), provides=IParagraphSummary)
+@template_config(template='templates/raw-summary.pt', layer=IPyAMSLayer)
+class RawParagraphSummary(BaseContentProvider):
+    """Raw HTML paragraph summary"""
+
+    language = None
+
+    def update(self):
+        i18n = II18n(self.context)
+        if self.language:
+            for attr in ('title', 'body'):
+                setattr(self, attr, i18n.get_attribute(attr, self.language, request=self.request))
+        else:
+            for attr in ('title', 'body'):
+                setattr(self, attr, i18n.query_attribute(attr, request=self.request))
+
+
+#
+# Rich text paragraph
 #
 
 @viewlet_config(name='add-html-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
                 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=50)
 class HTMLParagraphAddMenu(BaseParagraphAddMenu):
-    """HTML paragraph add menu"""
+    """Rich text paragraph add menu"""
 
-    label = _("Add HTML paragraph...")
+    label = _("Add rich text paragraph...")
     label_css_class = 'fa fa-fw fa-html5'
     url = 'add-html-paragraph.html'
     paragraph_type = 'HTML'
@@ -72,9 +185,9 @@
 @pagelet_config(name='add-html-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
 class HTMLParagraphAddForm(AdminDialogAddForm):
-    """HTML paragraph add form"""
+    """Rich text paragraph add form"""
 
-    legend = _("Add new HTML paragraph")
+    legend = _("Add new rich text paragraph")
     dialog_class = 'modal-max'
     icon_css_class = 'fa fa-fw fa-html5'
     label_css_class = 'control-label col-md-2'
@@ -99,15 +212,15 @@
 @view_config(name='add-html-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
 class HTMLParagraphAJAXAddForm(BaseParagraphAJAXAddForm, HTMLParagraphAddForm):
-    """HTML paragraph add form, JSON renderer"""
+    """Rich text paragraph add form, JSON renderer"""
 
 
 @pagelet_config(name='properties.html', context=IHTMLParagraph, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
 class HTMLParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
-    """HTML paragraph properties edit form"""
+    """Rich text paragraph properties edit form"""
 
-    legend = _("Edit HTML paragraph properties")
+    legend = _("Edit rich text paragraph properties")
     dialog_class = 'modal-max'
     icon_css_class = 'fa fa-fw fa-html5'
     label_css_class = 'control-label col-md-2'
@@ -128,13 +241,13 @@
 
 
 class IHTMLParagraphInnerEditForm(Interface):
-    """Marker interface for HTML paragraph inner form"""
+    """Marker interface for rich text paragraph inner form"""
 
 
 @view_config(name='properties.json', context=IHTMLParagraph, request_type=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
 class HTMLParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, HTMLParagraphPropertiesEditForm):
-    """HTML paragraph properties edit form, JSON renderer"""
+    """Rich text paragraph properties edit form, JSON renderer"""
 
     def get_ajax_output(self, changes):
         output = super(HTMLParagraphPropertiesAJAXEditForm, self).get_ajax_output(changes)
@@ -169,7 +282,7 @@
 @adapter_config(context=(IHTMLParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
 @implementer(IInnerForm, IPropertiesEditForm, IAssociationsParentForm, IHTMLParagraphInnerEditForm)
 class HTMLParagraphInnerEditForm(HTMLParagraphPropertiesEditForm):
-    """HTML paragraph inner edit form"""
+    """Rich text paragraph inner edit form"""
 
     legend = None
     ajax_handler = 'inner-properties.json'
@@ -185,7 +298,7 @@
 @view_config(name='inner-properties.json', context=IHTMLParagraph, request_type=IPyAMSLayer,
              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
 class HTMLParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, HTMLParagraphInnerEditForm):
-    """HTML paragraph inner edit form, JSON renderer"""
+    """Rich text paragraph inner edit form, JSON renderer"""
 
     def get_ajax_output(self, changes):
         output = super(HTMLParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
@@ -218,13 +331,13 @@
 
 
 #
-# HTML paragraph summary
+# rich text paragraph summary
 #
 
 @adapter_config(context=(IHTMLParagraph, IPyAMSLayer), provides=IParagraphSummary)
 @template_config(template='templates/html-summary.pt', layer=IPyAMSLayer)
 class HTMLParagraphSummary(BaseContentProvider):
-    """HTML paragraph summary"""
+    """Rich text paragraph summary"""
 
     illustration = None
     illustration_renderer = None