src/pyams_content/component/paragraph/zmi/frame.py
changeset 1006 cbb65b4b8742
parent 1002 ab7787b3faf1
child 1011 f82a78ce9963
--- a/src/pyams_content/component/paragraph/zmi/frame.py	Tue Oct 09 15:05:38 2018 +0200
+++ b/src/pyams_content/component/paragraph/zmi/frame.py	Tue Oct 09 15:06:10 2018 +0200
@@ -9,6 +9,8 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyams_content.component.paragraph import IBaseParagraph
+
 
 __docformat__ = 'restructuredtext'
 
@@ -24,8 +26,8 @@
     PARAGRAPH_HIDDEN_FIELDS
 from pyams_content.component.paragraph.interfaces.frame import FRAME_PARAGRAPH_TYPE, IFrameParagraph
 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
-    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphInnerEditFormButtons, \
-    get_json_paragraph_toolbar_refresh_event
+    BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, IParagraphInnerEditFormButtons, IParagraphTitleValue, \
+    get_json_paragraph_toolbar_refresh_event, get_json_paragraph_refresh_event
 from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable, \
     ParagraphTitleToolbarViewletManager
 from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerView, IParagraphInnerEditor
@@ -33,12 +35,15 @@
 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
 from pyams_form.form import ajax_config
 from pyams_form.interfaces.form import IInnerForm
+from pyams_i18n.interfaces import II18n
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_widget_refresh_event
 from pyams_skin.interfaces.tinymce import ITinyMCEConfiguration
 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
 from pyams_skin.layer import IPyAMSLayer
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
+from pyams_utils.html import html_to_text
+from pyams_utils.text import get_text_start
 from pyams_utils.traversing import get_parent
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
@@ -73,6 +78,18 @@
 # Framed text paragraph
 #
 
+@adapter_config(context=(IFrameParagraph, IPyAMSLayer), provides=IParagraphTitleValue)
+def frame_paragraph_title_adapter(context, request):
+    """Frame paragraph title adapter"""
+    i18n = II18n(context)
+    title = i18n.query_attribute('title', request=request)
+    if not title:
+        body = i18n.query_attribute('body', request=request)
+        if body:
+            title = '<i>{0}</i>'.format(get_text_start(html_to_text(body), 50, 10))
+    return title
+
+
 @viewlet_config(name='add-frame-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
                 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=600)
 class FrameParagraphAddMenu(BaseParagraphAddMenu):
@@ -140,6 +157,9 @@
     def get_ajax_output(self, changes):
         output = super(self.__class__, self).get_ajax_output(changes)
         if 'body' in changes.get(IFrameParagraph, ()):
+            if 'title' not in changes.get(IBaseParagraph, ()):
+                output.setdefault('events', []).append(
+                    get_json_paragraph_refresh_event(self.context, self.request))
             # refresh associations count markers
             parent = get_parent(self.context, IAssociationContainerTarget)
             output.setdefault('events', []).append(
@@ -166,11 +186,3 @@
             return button.Buttons(IParagraphInnerEditFormButtons)
         else:
             return button.Buttons()
-
-    def get_ajax_output(self, changes):
-        output = super(self.__class__, self).get_ajax_output(changes)
-        updated = changes.get(IFrameParagraph, ())
-        if 'renderer' in updated:
-            output.setdefault('events', []).append(
-                get_json_widget_refresh_event(self.context, self.request, FrameParagraphInnerEditForm, 'renderer'))
-        return output