src/pyams_skin/event.py
changeset 557 bca7a7e058a3
equal deleted inserted replaced
-1:000000000000 557:bca7a7e058a3
       
     1 #
       
     2 # Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
       
     3 # All Rights Reserved.
       
     4 #
       
     5 # This software is subject to the provisions of the Zope Public License,
       
     6 # Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
       
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
       
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
       
    10 # FOR A PARTICULAR PURPOSE.
       
    11 #
       
    12 
       
    13 __docformat__ = 'restructuredtext'
       
    14 
       
    15 from zope.dublincore.interfaces import IZopeDublinCore
       
    16 
       
    17 from pyams_utils.interfaces import ICacheKeyValue
       
    18 from pyams_utils.url import absolute_url
       
    19 
       
    20 
       
    21 def get_json_refresh_event(object_id, content):
       
    22     """Get JSON response for basic refresh event"""
       
    23     return {
       
    24         'event': 'myams.refresh',
       
    25         'options': {
       
    26             'handler': 'MyAMS.skin.refreshContent',
       
    27             'object_id': object_id,
       
    28             'content': content
       
    29         }
       
    30     }
       
    31 
       
    32 
       
    33 def get_json_image_refresh_event(image, request, source=None):
       
    34     """Get JSON response for image refresh event"""
       
    35     dc = IZopeDublinCore(image)
       
    36     src = absolute_url(image if source is None else source, request)
       
    37     target = absolute_url(image, request)
       
    38     return {
       
    39         'event': 'myams.refresh',
       
    40         'options': {
       
    41             'handler': 'MyAMS.skin.refreshImage',
       
    42             'src': src,
       
    43             'target': '{0}?_={1}'.format(target, dc.modified.timestamp())
       
    44         }
       
    45     }
       
    46 
       
    47 
       
    48 def get_json_form_refresh_event(context, request, form_factory):
       
    49     """Get JSON response for form refresh event"""
       
    50     form = form_factory(context, request)
       
    51     form.ignoreRequest = True
       
    52     form.update()
       
    53     return {
       
    54         'event': 'myams.refresh',
       
    55         'options': {
       
    56             'handler': 'MyAMS.skin.refreshContent',
       
    57             'object_id': form.id,
       
    58             'content': form.render()
       
    59         }
       
    60     }
       
    61 
       
    62 
       
    63 def get_json_widget_refresh_event(context, request, form_factory, widget):
       
    64     """Get JSON response for form widget refresh event"""
       
    65     form = form_factory(context, request)
       
    66     form.ignoreRequest = True
       
    67     form.update()
       
    68     widget = form.widgets[widget]
       
    69     return {
       
    70         'event': 'myams.refresh',
       
    71         'options': {
       
    72             'handler': 'MyAMS.skin.refreshWidget',
       
    73             'parent_id': form.id,
       
    74             'widget_name': widget.name,
       
    75             'content': widget.render()
       
    76         }
       
    77     }
       
    78 
       
    79 
       
    80 def get_json_table_refresh_event(context, request, table_factory):
       
    81     """Get JSON response for table refresh event"""
       
    82     table = table_factory(context, request)
       
    83     table.update()
       
    84     return {
       
    85         'event': 'myams.refresh',
       
    86         'options': {
       
    87             'handler': 'MyAMS.skin.refreshTable',
       
    88             'object_id': table.id,
       
    89             'table': table.render()
       
    90         }
       
    91     }
       
    92 
       
    93 
       
    94 def get_json_switched_table_refresh_event(context, request, table_factory):
       
    95     """Get JSON response for switched table refresh event"""
       
    96     table = table_factory(context, request)
       
    97     table.update()
       
    98     return {
       
    99         'event': 'myams.refresh',
       
   100         'options': {
       
   101             'handler': 'MyAMS.skin.refreshSwitchedTable',
       
   102             'object_id': table.id,
       
   103             'table': table.render()
       
   104         }
       
   105     }
       
   106 
       
   107 
       
   108 def get_json_table_row_refresh_event(context, request, table_factory, table_item):
       
   109     """Get JSON response for table row refresh event"""
       
   110     table = table_factory(context, request)
       
   111     table.update()
       
   112     row = table.setUpRow(table_item)
       
   113     return {
       
   114         'event': 'myams.refresh',
       
   115         'options': {
       
   116             'handler': 'MyAMS.skin.refreshRow',
       
   117             'object_id': '{0}::{1}'.format(table.id, ICacheKeyValue(table_item)),
       
   118             'row': table.renderRow(row)
       
   119         }
       
   120     }
       
   121 
       
   122 
       
   123 def get_json_table_cell_refresh_event(context, request, object_id, col_name, cell_content=None, column_factory=None):
       
   124     """Get JSON response for table cell refresh event"""
       
   125     if cell_content is None:
       
   126         column = column_factory(context, request, None)
       
   127         cell_content = column.renderCell(context)
       
   128     return {
       
   129         'event': 'myams.refresh',
       
   130         'options': {
       
   131             'handler': 'MyAMS.skin.refreshRowCell',
       
   132             'object_id': object_id,
       
   133             'col_name': col_name,
       
   134             'cell': cell_content
       
   135         }
       
   136     }