是否可以扩展 quill 以支持 <li> 内部的 <br>?
Is it possible to extend quill to support a <br> inside of an <li>?
我希望能够在 Quill 中实现如下内容:
<ul>
<li>Something<br>
Else
</li>
</ul>
开箱即用,Quill 删除了 br 并且不支持使用 insertText(..., '\n', ...) 或用户编辑在 li 中添加 br。
我知道如何注册一个键盘绑定来处理,例如,"shift-enter" 以便能够创作这样的内容,它似乎既可以在 Parchment 中表示,也可以在 Quill 中表示这一点的 Blots(即 Break 等)。
综上所述,我不清楚这个用例是否可以通过模块在 Quill 编辑器中实现。
任何指点将不胜感激!
谢谢!
请记住以下几个限制条件:
Quill 内容必须通过 API 规范地表示和明确修改。因此,如果您有 <ul><li>SomethingElse</li></ul>
并使用 insertText(index, '\n')
,则生成 <ul><li>Something<br>Else</li></ul>
或 <p>Something</p><ul><li>Else</li></ul>
存在歧义。在 Quill 核心中,前者是不可能的,所以没有这样的歧义(注意产生 <ul><li>Something</li><li>Else</li></ul>
你会调用 insertText(index, '\n', 'list', 'bullet');
)。因此,如果添加了软中断,则不能用换行符表示。 \r
vs \n
vs \r\n
的历史表明生成另一个换行符作为解决方案是个坏主意。
在架构上,Quill 数据模型在所有位置的相应 DOM 中始终同时具有块和叶节点,这很方便。 <br>
用作占位符,因此 <p><br></p>
表示一个空行,而不仅仅是 <p></p>
(即使您指定,较旧的 IE <= 10 也不会在 <p></p>
上呈现任何高度它与 CSS 所以 <br>
在历史上是必要的)。内部块将添加 <br>
并在删除最后一个子项时自动添加,并在插入子项时删除 <br>
。鉴于这种特殊行为(虽然可以通过 defaultChild 修改),您不想扩展默认的 <br>
实现。
所以我的建议是创建一个使用
并指定 class 的自定义内联嵌入印迹,这样它就可以消除正常 <br>
之间的歧义。要通过 API 插入它,它将是 insertEmbed(index, 'customBr', true);
并且 getContents()
中 <ul><li>Something<br class="custombr">Else</li></ul>
的 JSON 表示将是 [{ insert: "Something" }, { insert: { custombr: true } }, { insert: "Else" }, { insert: "\n", attributes: { list: 'bullet' } }]
.
这似乎可行,但尚未经过全面测试:https://codepen.io/quill/pen/BJaOxP。
我希望能够在 Quill 中实现如下内容:
<ul>
<li>Something<br>
Else
</li>
</ul>
开箱即用,Quill 删除了 br 并且不支持使用 insertText(..., '\n', ...) 或用户编辑在 li 中添加 br。
我知道如何注册一个键盘绑定来处理,例如,"shift-enter" 以便能够创作这样的内容,它似乎既可以在 Parchment 中表示,也可以在 Quill 中表示这一点的 Blots(即 Break 等)。
综上所述,我不清楚这个用例是否可以通过模块在 Quill 编辑器中实现。
任何指点将不胜感激!
谢谢!
请记住以下几个限制条件:
Quill 内容必须通过 API 规范地表示和明确修改。因此,如果您有
<ul><li>SomethingElse</li></ul>
并使用insertText(index, '\n')
,则生成<ul><li>Something<br>Else</li></ul>
或<p>Something</p><ul><li>Else</li></ul>
存在歧义。在 Quill 核心中,前者是不可能的,所以没有这样的歧义(注意产生<ul><li>Something</li><li>Else</li></ul>
你会调用insertText(index, '\n', 'list', 'bullet');
)。因此,如果添加了软中断,则不能用换行符表示。\r
vs\n
vs\r\n
的历史表明生成另一个换行符作为解决方案是个坏主意。在架构上,Quill 数据模型在所有位置的相应 DOM 中始终同时具有块和叶节点,这很方便。
<br>
用作占位符,因此<p><br></p>
表示一个空行,而不仅仅是<p></p>
(即使您指定,较旧的 IE <= 10 也不会在<p></p>
上呈现任何高度它与 CSS 所以<br>
在历史上是必要的)。内部块将添加<br>
并在删除最后一个子项时自动添加,并在插入子项时删除<br>
。鉴于这种特殊行为(虽然可以通过 defaultChild 修改),您不想扩展默认的<br>
实现。
所以我的建议是创建一个使用
并指定 class 的自定义内联嵌入印迹,这样它就可以消除正常 <br>
之间的歧义。要通过 API 插入它,它将是 insertEmbed(index, 'customBr', true);
并且 getContents()
中 <ul><li>Something<br class="custombr">Else</li></ul>
的 JSON 表示将是 [{ insert: "Something" }, { insert: { custombr: true } }, { insert: "Else" }, { insert: "\n", attributes: { list: 'bullet' } }]
.
这似乎可行,但尚未经过全面测试:https://codepen.io/quill/pen/BJaOxP。