在 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?

我相信我已经想出了如何做到这一点,如果有更好的方法,希望有人会指正我!

  1. 在您注册的(在 INSTALLED_APPS 中)应用程序目录之一中创建一个名为 wagtail_hooks.py.
  2. 的文件
  3. 将以下代码放入文件中:

    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)
    
  4. features.default_features.append(feature_name) 行回答了我问题的最后一部分 - 并且在文档中缺失(好吧,它在那里,但不在这个上下文中)。这会将此功能添加到所有 RichTextField,而无需将 features=[] 设置添加到每个现有的 and/or 新 RTF。

要修改它以使用另一个内置的 Draftail 功能,请修改 feature_nametype_taglabeldescription 字段. Draftail 支持以下类型:

  • 块类型:H1、H2、H3、H4、H5、H6、块引用、代码、UL、OL、P
  • 内联样式:粗体、斜体、下划线、代码、删除线、标记、键盘、上标、下标
  • HR、BR

bolditalich2h3h4ulolhr,并且 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、网页)并保留上标格式.