在 Wagtail 2.0 中为 Draftail 添加上标
Adding superscript to Draftail in Wagtail 2.0
我正在尝试为 Wagtail 中的新编辑器添加上标。
我在这里看到文档:http://docs.wagtail.io/en/v2.0/advanced_topics/customisation/extending_draftail.html
我应该在哪里添加示例代码?
我是否正确地假设我将能够将示例从 feature_name = 'strikethrough'
和 type_ = 'STRIKETHROUGH'
更改为 superscript
并且它会起作用?
注册后,我是否必须修改每个必须包含在 features
设置中的 RichTextField,或者有没有办法将其添加到我的应用程序中的所有 RTF?
我相信我已经想出了如何做到这一点,如果有更好的方法,希望有人会指正我!
- 在您注册的(在
INSTALLED_APPS
中)应用程序目录之一中创建一个名为 wagtail_hooks.py
. 的文件
将以下代码放入文件中:
import wagtail.admin.rich_text.editors.draftail.features as draftail_features
from wagtail.admin.rich_text.converters.html_to_contentstate import InlineStyleElementHandler
from wagtail.core import hooks
@hooks.register('register_rich_text_features')
def register_strikethrough_feature(features):
feature_name = 'superscript'
type_ = 'SUPERSCRIPT'
tag = 'sup'
control = {
'type': type_,
'label': '^',
'description': 'Superscript',
}
features.register_editor_plugin(
'draftail', feature_name, draftail_features.InlineStyleFeature(control)
)
db_conversion = {
'from_database_format': {tag: InlineStyleElementHandler(type_)},
'to_database_format': {'style_map': {type_: tag}},
}
features.default_features.append(feature_name)
features.register_converter_rule('contentstate', feature_name, db_conversion)
第 features.default_features.append(feature_name)
行回答了我问题的最后一部分 - 并且在文档中缺失(好吧,它在那里,但不在这个上下文中)。这会将此功能添加到所有 RichTextField,而无需将 features=[]
设置添加到每个现有的 and/or 新 RTF。
要修改它以使用另一个内置的 Draftail 功能,请修改 feature_name
、type_
、tag
、label
和 description
字段. Draftail 支持以下类型:
- 块类型:H1、H2、H3、H4、H5、H6、块引用、代码、UL、OL、P
- 内联样式:粗体、斜体、下划线、代码、删除线、标记、键盘、上标、下标
- HR、BR
与bold
、italic
、h2
、h3
、h4
、ul
、ol
、hr
,并且 br
已经在 RichTextField 的 Wagtail 默认设置中。
从 Wagtail v2.5 开始,superscript
是一种内置格式,默认情况下禁用。要使用它,只需启用它。每个字段,在模型定义中:
# [...]
body = RichTextField(features=['superscript'])
# [...]
或网站上的所有编辑:
from wagtail.core import hooks
@hooks.register('register_rich_text_features')
def enable_superscript_feature(features):
features.default_features.append('superscript')
请注意,目前,虽然上标在编辑器中会按预期工作,但它 won’t be possible to copy-paste content with superscript 来自第三方来源(Google 文档、Word、网页)并保留上标格式.
我正在尝试为 Wagtail 中的新编辑器添加上标。
我在这里看到文档:http://docs.wagtail.io/en/v2.0/advanced_topics/customisation/extending_draftail.html
我应该在哪里添加示例代码?
我是否正确地假设我将能够将示例从 feature_name = 'strikethrough'
和 type_ = 'STRIKETHROUGH'
更改为 superscript
并且它会起作用?
注册后,我是否必须修改每个必须包含在 features
设置中的 RichTextField,或者有没有办法将其添加到我的应用程序中的所有 RTF?
我相信我已经想出了如何做到这一点,如果有更好的方法,希望有人会指正我!
- 在您注册的(在
INSTALLED_APPS
中)应用程序目录之一中创建一个名为wagtail_hooks.py
. 的文件
将以下代码放入文件中:
import wagtail.admin.rich_text.editors.draftail.features as draftail_features from wagtail.admin.rich_text.converters.html_to_contentstate import InlineStyleElementHandler from wagtail.core import hooks @hooks.register('register_rich_text_features') def register_strikethrough_feature(features): feature_name = 'superscript' type_ = 'SUPERSCRIPT' tag = 'sup' control = { 'type': type_, 'label': '^', 'description': 'Superscript', } features.register_editor_plugin( 'draftail', feature_name, draftail_features.InlineStyleFeature(control) ) db_conversion = { 'from_database_format': {tag: InlineStyleElementHandler(type_)}, 'to_database_format': {'style_map': {type_: tag}}, } features.default_features.append(feature_name) features.register_converter_rule('contentstate', feature_name, db_conversion)
第
features.default_features.append(feature_name)
行回答了我问题的最后一部分 - 并且在文档中缺失(好吧,它在那里,但不在这个上下文中)。这会将此功能添加到所有 RichTextField,而无需将features=[]
设置添加到每个现有的 and/or 新 RTF。
要修改它以使用另一个内置的 Draftail 功能,请修改 feature_name
、type_
、tag
、label
和 description
字段. Draftail 支持以下类型:
- 块类型:H1、H2、H3、H4、H5、H6、块引用、代码、UL、OL、P
- 内联样式:粗体、斜体、下划线、代码、删除线、标记、键盘、上标、下标
- HR、BR
与bold
、italic
、h2
、h3
、h4
、ul
、ol
、hr
,并且 br
已经在 RichTextField 的 Wagtail 默认设置中。
从 Wagtail v2.5 开始,superscript
是一种内置格式,默认情况下禁用。要使用它,只需启用它。每个字段,在模型定义中:
# [...]
body = RichTextField(features=['superscript'])
# [...]
或网站上的所有编辑:
from wagtail.core import hooks
@hooks.register('register_rich_text_features')
def enable_superscript_feature(features):
features.default_features.append('superscript')
请注意,目前,虽然上标在编辑器中会按预期工作,但它 won’t be possible to copy-paste content with superscript 来自第三方来源(Google 文档、Word、网页)并保留上标格式.