
Security News
MCP Community Begins Work on Official MCP Metaregistry
The MCP community is launching an official registry to standardize AI tool discovery and let agents dynamically find and install MCP servers.
This package provides a zope.schema
style field type called RichText
which can be used to store a value with a related MIME type.
The value can be transformed to an output MIME type, for example to transform from structured text to HTML.
To use the field, place it in a schema like so::
from plone.app.textfield import RichText
from zope.interface import Interface
class ITest(Interface):
bodyText = RichText(
title=u"Body text",
default_mime_type='text/structured',
output_mime_type='text/html',
allowed_mime_types=('text/structured', 'text/plain',),
default=u"Default value"
)
This specifies the default MIME type of text content as well as the default output type,
and a tuple of allowed types.
All these values are optional.
The default MIME type is 'text/html', and the default output type is 'text/x-html-safe'.
By default, allowed_mime_types
is None,
which means that the side-wide default set of allowable input MIME types will be permitted.
Note that the default value here is set to a Unicode string,
which will be considered to be of the default MIME type.
This value is converted to a RichTextValue
object (see below) on field initialisation,
so the default
property will be an object of this type.
The field actually stores an immutable object of type plone.app.textfield.value.RichTextValue
.
This object has the following attributes:
raw The raw value as a Unicode string.
mimeType The MIME type of the raw text.
output A Unicode string that represents the value transformed to the default output MIME type. Maybe None if the transformation could not be completed successfully, but will be cached after it has been successfully transformed once.
outputMimeType
The MIME type of the output string.
This is normally copied from the field's output_mime_type
property.
The output
, mimeType
and outputMimeType
properties will be stored in the same _p_jar as the parent content object,
whilst the raw
value is stored in a separate persistent object.
This is to optimize for the common case where the output
is frequently accessed when the object is viewed
(and thus should avoid a separate persistent object load),
whereas the raw
value is infrequently accessed
(and so should not take up memory unless specifically requested).
Transformation takes place using an ITransformer
adapter.
The default implementation uses Plone's portal_transforms
tool to convert from one MIME type to another.
Note that Products.PortalTransforms
must be installed for this to work,
otherwise, no default ITransformer adapter is registered.
You can use the [portaltransforms]
extra to add Products.PortralTransforms
as a dependency.
To invoke alternative transformations from a page template, you can use the following convenience syntax::
Here fieldName
is the name of the field
(which must be found on context
and contain a RichTextValue
).
text/plain
is the desired output MIME type.
The package also contains a plone.supermodel
export/import handler,
which will be configured if plone.supermodel is installed.
You can use the [supermodel]
extra to add a plone.supermodel
dependency.
A z3c.form
widget will be installed if `z3c.formis installed. The
[widget]`` extra will pull this dependency in if nothing else does.
A plone.rfc822
field marshaler will be installed if plone.rfc822
is installed.
The [marshaler]
extra will pull this dependency in if nothing else does.
A plone.schemaeditor
field factory will be installed if plone.schemaeditor
is installed.
The editor
extra will pull this
dependency if nothing else does.
Alternatively, the RichText Field may be used without a WYSIWYG editor displaying a simple TextArea on input,
and formatted output as HTML on display.
In this example, it is expected to have the plone.intelligenttext
transform available.
Also expected is plone.autoform
and plone.app.z3cform
to be installed.
::
from z3c.form.browser.textarea import TextAreaFieldWidget
from plone.autoform.directives import widget
class ITest(Interface):
bodyText = RichText(
title=u"Intelligent text",
default_mime_type='text/x-web-intelligent',
allowed_mime_types=('text/x-web-intelligent', ),
output_mime_type='text/x-html-safe',
default=u"Default value"
)
widget(
'bodyText',
TextAreaFieldWidget,
)
Input is a simple text. At display, an HTML in rendered by the transform and shown. To show HTML unescaped the output has to be 'text/x-html-safe'.
See field.txt for more details about the field's behavior, and handler.txt for more details about the plone.supermodel handler.
Please report issues via the Plone issue tracker
_.
.. _Plone issue tracker
: https://github.com/plone/plone.app.textfield/issues
Questions may be answered via Plone's support channels
_.
.. _Plone's support channels
: http://plone.org/support
Sources are at the Plone code repository hosted at Github <https://github.com/plone/plone.app.textfield>
_.
Contributors please read the document Process for Plone core's development <https://docs.plone.org/develop/coredev/docs/index.html>
_
.. You should NOT be adding new change log entries to this file. You should create a file in the news directory instead. For helpful instructions, please see: https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst
.. towncrier release notes start
Breaking changes:
portal_properties
in getAllowedContentTypes
.
This code was still checking portal_properties.site_properties.forbidden_contenttypes
.
[maurits] (#125)Internal:
Internal:
Breaking changes:
Bug fixes:
Internal:
Bug fixes:
Bug fixes:
Bug fixes:
zope.component.interfaces.ComponentLookupError
.
[maurits] (#43)Bug fixes:
Bug fixes:
Bug fixes:
Bug fixes:
New features:
Python 3 fixes, needs plone.rfc822>=2.0b1. [jensens]
Add getSize method to get the size of a RichTextValue in bytes [davisagli]
Bug fixes:
Bug fixes:
issue CMFPLone#2465 <https://github.com/plone/Products.CMFPlone/issues/2465>
_
[petschki]Bug fixes:
Bug fixes:
Bug fixes:
RichTextValue object. (Did you mean .raw or .output?)
.
Fixes issue 22 <https://github.com/plone/plone.app.textfield/issues/22>
_.
[maurits]New features:
RichText
field to work together with a simple ITextAreaWidget
.
[jensens]Bug fixes:
Fixes:
Add equality check (__eq__
) for RawValueHolder and RichTextValue;
[davisagli]
Fix marshaler decode to always decode raw value into unicode [datakurre]
Remove utils.getSiteEncoding, which was deprecated and not used anywhere. [thet]
For Plone 5, support getting markup control panel settings from the registry, while still supporting normal portal_properties access for Plone < 5. [thet]
Resolved an interesting circular import case, which wasn't effective because of sort order of imports [thet]
Force WYSIWYG, so when we start with 'text/plain' (or another MIME), selecting 'text/html' will cause TinyMCE to spring into life. [lentinj]
Tell Products.TinyMCE what the MIME type is, so it doesn't have to work it out. [lentinj]
Use closest_content to navigate through the sea of subforms to find something that we can use portal_url on. [lentinj]
Do not give an error when the raw value is not unicode and isn't ascii. In that case, encode as unicode then decode as the proper string, bang head on desk. [eleddy]
Internationalization. [thomasdesvenain]
Pass field's max_length to the wysiwyg macro, if it has one. [davisagli]
Determine which editor's wysiwyg_support template to use from within widget_input.pt. Fixes support for collective.ckeditor. [tschorr, davisagli]
Update getSite import locations. [hannosch]
Make sure that the display widget absolutizes relative links relative
to the correct context. To facilitate doing this from custom templates,
RichTextValue now has an output_relative_to
helper method which
can be passed a context.
[davisagli]
Fix an issue with the support for plone.schemaeditor. [davisagli]
Support a max_length
parameter for RichText fields. Input longer
than the max_length does not pass validation.
[davisagli]
Pass some additional context to the wysiwyg_support macro to help with determining the field's mimetype. [davisagli]
Changed deprecated getSiteEncoding to hardcoded utf-8
[tom_gross]
Provide a version of the RichText field schema for use with
plone.schemaeditor. Only the default_mime_type
field is exposed for
editing through-the-web, with a vocabulary of mimetypes derived from
the AllowedContentTypes
vocabulary in plone.app.vocabularies
(which can be adjusted via Plone's markup control panel).
[davisagli]
Log original exception when a TransformError is raised. [rochecompaan]
If no transform path is found: Instead of throwing an exception page in the face of the user, now return an empty string and log error message. [kleist]
Fix infinite recursion bug when source and target mimetype is the same. [rochecompaan]
Make sure the field constraint is validated, if specified. This closes http://code.google.com/p/dexterity/issues/detail?id=200 [davisagli]
Make sure validation fails if no text is entered for a required field. This closes http://code.google.com/p/dexterity/issues/detail?id=199 [davisagli]
Wrap the context in the form context, not the site, so that relative links are generated correctly. [davisagli]
Avoid duplicating the id of the textarea if the form has no prefix. [davisagli]
Fix case where editor did not load if the context being edited is a dict. [davisagli]
Pass through the z3c.form widget's rows
and cols
settings to the
wysiwyg editor macro.
[davisagli]
Don't persistently cache output. Transforms may depend on outside state (e.g. the uuid transform.) PortalTransform's caching is imperfect, but it is time limited. http://code.google.com/p/dexterity/issues/detail?id=151 [elro]
Pass context to portal transforms. [elro]
Fix the field schemata so they can be used as the form schema when adding the field using plone.schemaeditor [rossp]
Remove unused lookup of the current member's editor preference. This is handled by the wysiwyg_support macros. [davisagli]
Fix an error that could occur if the user did not have an editor preference set. [optilude]
Fix tests on Plone 4. [optilude]
Add field factory for use with plone.schemaeditor (only configured if that package is installed). [davisagli]
Update README.txt to be in line with reality. [optilude]
Fix the @@text-transform view to work with path traversal. [optilude]
Store the raw value in a separate persistent object in the ZODB instead of in a BLOB. This avoids potential problems with having thousands of small BLOB files, which would not be very space efficient on many filesystems. [optilude]
Make the RichTextValue immutable. This greatly simplifies the code and avoids the need to keep track of the parent object. [optilude]
FAQs
Text field with MIME type support
We found that plone.app.textfield demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The MCP community is launching an official registry to standardize AI tool discovery and let agents dynamically find and install MCP servers.
Research
Security News
Socket uncovers an npm Trojan stealing crypto wallets and BullX credentials via obfuscated code and Telegram exfiltration.
Research
Security News
Malicious npm packages posing as developer tools target macOS Cursor IDE users, stealing credentials and modifying files to gain persistent backdoor access.