在Wagtail 2.0中为Draftail添加上标

时间:2018-03-13 19:36:11

标签: wagtail

我试图在Wagtail的新编辑器中添加上标。

我在这里看到了文档:http://docs.wagtail.io/en/v2.0/advanced_topics/customisation/extending_draftail.html

我应该在哪里添加示例代码? 如果我能够将示例从feature_name = 'strikethrough'type_ = 'STRIKETHROUGH'更改为superscript并且它会起作用,我是否正确?

注册后,我是否必须修改我必须在features设置中包含它的每个RichTextField,或者有没有办法将其添加到我的应用程序中的所有RTF?

2 个答案:

答案 0 :(得分:4)

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

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

    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)
    
  3. features.default_features.append(feature_name)是回答我问题的最后一部分的内容 - 而且文档中缺少(嗯,它在那里,但在此上下文中没有)。这会将功能添加到所有RichTextField,而无需将features=[]设置添加到每个现有和/或新RTF。

  4. 要修改此项以使用其他内置Draftail功能,请修改feature_nametype_taglabeldescription字段。 Draftail支持以下类型:

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

    bolditalich2h3h4ulol,{{1} }和hr已经在RichTextField的Wagtail默认集中。

答案 1 :(得分:1)

从Wa v2.5开始,superscript是一种内置格式,默认情况下禁用。要使用它,只需启用它即可。在模型定义中,每个字段均可:

    # [...]
    body = RichTextField(features=['strikethrough'])
    # [...]

或针对网站上的所有编辑者:

from wagtail.core import hooks

@hooks.register('register_rich_text_features')
def enable_superscript_feature(features):
    features.default_features.append('superscript')