8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 """PyAMS_form.help module |
|
14 |
|
15 This module provides a 'form_help' content provider, which can be used to insert help text |
|
16 inside any form using an :py:class:`IFormHelp <pyams_form.interfaces.form.IFormHlep>` adapter. |
|
17 """ |
|
18 |
|
19 from zope.interface import Interface, implementer |
|
20 from zope.schema.fieldproperty import FieldProperty |
|
21 |
|
22 from pyams_form.interfaces.form import IFormHelp |
|
23 from pyams_skin.layer import IPyAMSLayer |
|
24 from pyams_template.template import template_config |
|
25 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config |
|
26 from pyams_utils.interfaces.text import IHTMLRenderer |
|
27 from pyams_utils.text import text_to_html |
|
28 from pyams_viewlet.viewlet import ViewContentProvider, contentprovider_config |
14 |
29 |
15 |
30 |
16 # import standard library |
31 __docformat__ = 'restructuredtext' |
17 |
|
18 # import interfaces |
|
19 from pyams_form.interfaces.form import IFormHelp |
|
20 from pyams_skin.layer import IPyAMSLayer |
|
21 from pyams_utils.interfaces.text import IHTMLRenderer |
|
22 |
|
23 # import packages |
|
24 from pyams_template.template import template_config |
|
25 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config |
|
26 from pyams_utils.text import text_to_html |
|
27 from pyams_viewlet.viewlet import contentprovider_config |
|
28 from zope.interface import implementer, Interface |
|
29 from zope.schema.fieldproperty import FieldProperty |
|
30 |
32 |
31 |
33 |
32 @contentprovider_config(name='form_help', view=Interface, layer=IPyAMSLayer) |
34 @contentprovider_config(name='form_help', view=Interface, layer=IPyAMSLayer) |
33 @template_config(template='templates/help.pt', layer=IPyAMSLayer) |
35 @template_config(template='templates/help.pt', layer=IPyAMSLayer) |
34 class HelpContentProvider(object): |
36 class HelpContentProvider(ViewContentProvider): |
35 """Form help provider""" |
37 """Form help content provider""" |
36 |
38 |
37 help = None |
39 help = None |
38 |
40 |
39 def update(self): |
41 def update(self): |
|
42 """Update content provider state""" |
40 registry = self.request.registry |
43 registry = self.request.registry |
41 help = self.help = registry.queryMultiAdapter((self.context, self.request, self.view), IFormHelp) |
44 # pylint: disable=redefined-builtin |
|
45 help = self.help = registry.queryMultiAdapter((self.context, self.request, self.view), |
|
46 IFormHelp) |
42 if help is not None: |
47 if help is not None: |
43 if help.permission and not self.request.has_permission(help.permission, context=self.context): |
48 if help.permission and not self.request.has_permission(help.permission, |
|
49 context=self.context): |
44 self.help = None |
50 self.help = None |
45 elif help.mode and (self.view.mode != help.mode): |
51 elif help.mode and (self.view.mode != help.mode): |
46 self.help = None |
52 self.help = None |
47 |
53 |
48 |
54 |
49 @implementer(IFormHelp) |
55 @implementer(IFormHelp) |
50 class FormHelp(ContextRequestViewAdapter): |
56 class FormHelp(ContextRequestViewAdapter): |
51 """Form help""" |
57 """Default form help base implementation""" |
52 |
58 |
53 permission = FieldProperty(IFormHelp['permission']) |
59 permission = FieldProperty(IFormHelp['permission']) |
54 mode = FieldProperty(IFormHelp['mode']) |
60 mode = FieldProperty(IFormHelp['mode']) |
55 |
61 |
56 outer_margin = FieldProperty(IFormHelp['outer_margin']) |
62 outer_margin = FieldProperty(IFormHelp['outer_margin']) |
60 message_format = FieldProperty(IFormHelp['message_format']) |
66 message_format = FieldProperty(IFormHelp['message_format']) |
61 |
67 |
62 |
68 |
63 @adapter_config(context=(IFormHelp, IPyAMSLayer, Interface), provides=IHTMLRenderer) |
69 @adapter_config(context=(IFormHelp, IPyAMSLayer, Interface), provides=IHTMLRenderer) |
64 class HelpRenderer(ContextRequestViewAdapter): |
70 class HelpRenderer(ContextRequestViewAdapter): |
65 """Help renderer""" |
71 """Default form help renderer""" |
66 |
72 |
67 def render(self, **kwargs): |
73 def render(self, **kwargs): # pylint: disable=unused-argument |
|
74 """Render help text to HTML""" |
68 message = self.request.localizer.translate(self.context.message) |
75 message = self.request.localizer.translate(self.context.message) |
69 return text_to_html(message, self.context.message_format) |
76 return text_to_html(message, self.context.message_format) |