behavior: richtext
behavior: richtext
HTML 所见即所得的编辑行为。
该行为支持类似于 behavior:frame 的文档容器模式 - 它支持在其中加载完整的 <html>...</html>
文档。
Elements
默认情况下应用了以下行为:
<htmlarea>...</htmlarea>
编辑 器;
Attributes
此行为知道:
readonly
- 声明元素是只读的;content-style
- string,要应用于编辑器内容.css文件的 URL。当您需要应用编辑特定样式时使用它。spellcheck
- 布尔值,“真” |“false”,启用/禁用拼写检查
Model
富文本支持两种内容模型,HTML 片段:
<htmlarea>
<h2>Some HTML content</h2>
<p>Line 2</p>
<p>Line 3</p>
</htmlarea>
和完整文档。在这种情况下 <htmlarea>
,表现为 <frame>
包含文档:
<htmlarea>
<html>
<body>
<h2>Some HTML content</h2>
<p>Line 2</p>
<p>Line 3</p>
</body>
</html>
</htmlarea>
内容模型由其中加载的内容确定。
Events
连同标准事件集(鼠标、键盘、焦点)行为:富文本生成:
"change"
event - 由于用户操作而更改元素的值。发布(异步)事件。"changing"
event - 在元素值即将更改时发送。同步事件。
Value
string,反映内容的当前状态 DOM - value 获取/设置当前 HTML 内容。对于富文本 DOM 元素,属性值是属性 html 的别名。
Special key combinations
LEFT, CTRL+LEFT, SHIFT+LEFT, CTRL+SHIFT+LEFT
RIGHT, CTRL+RIGHT, SHIFT+RIGHT, CTRL+SHIFT+RIGHT
HOME, SHIFT+HOME
END, SHIFT+END
BACKSPACE, ALT+BACKSPACE, CTRL+BACKSPACE
CTRL+A
DELETE, SHIFT+DELETE, CTRL+DELETE
INSERT, SHIFT+INSERT, CTRL+INSERT
CTRL+X
CTRL+V
CTRL+Z
格式化命令:
CTRL+D
- 将当前文本换行<code>text</code>
;CTRL+NUMPAD1...6
- 将当前文本块转换为<h1>
...<h6>
;CTRL+NUMPAD7
- 将当前块或文本运行转换为<pre>
;CTRL+NUMPAD0
- 将当前块或文本运行转换为<p>
;CTRL+NUMPAD+
- 缩进当前选择;CTRL+NUMPAD-
- 取消缩进当前选择;CTRL+NUMPAD.
- 将当前选择转换为有序列表<ol>``/<li>
;CTRL+NUMPAD\*
- 将当前选择转换为无序列表<ul>``/<li>
;CTRL+NUMPAD/
- 将当前选择转换为定义列表<dl>``/<dt>/<dd>
;
Commands
该 htmlarea.execCommand(command,attributes)
方法执行撤消的编辑命令。命令字符串标识要执行的命令。
所有可编辑元素通用的编辑命令 ( <input|text>, <textarea>, <plaintext>, <htmlarea>
):
"edit:cut"
- 剪切选区 - 将选区复制到剪贴板并将其删除;"edit:copy"
- 将选择复制到剪贴板;"edit:paste"
- 粘贴剪贴板的内容;"edit:selectall"
- 选择元素的全部内容;"edit:undo"
- 撤消上次编辑操作;"edit:redo"
- 重做上次撤消的操作;"edit:delete-next"
- 如果有选择 - 删除所选内容,否则删除下一个字符;"edit:delete-prev"
- 如果有选择 - 删除所选内容,否则删除上一个字符;"edit:delete-word-next"
- 如果有选择 - 删除所选内容,否则删除下一个单词;"edit:delete-word-prev"
- 如果有选择 - 删除所选内容,否则删除上一个单词;
特定于 behavior:richtext
( <htmlarea>
) 的编辑命令:
"edit:insert-break"
- 本质上这是“ENTER”(VK_RETURN)命令,实际的DOM修改取决于上下文;"edit:insert-soft-break"
- “SHIFT+ENTER”命令,插入<br>
分隔符,但实际的 DOM 修改取决于上下文;"edit:insert-text"
- 在属性中插入文本;"edit:insert-html"
- 在属性中插入 HTML;格式化命令:
"format:apply-span:{tag-list}"
- 将所选内容包装到 span 元素中,如果所选内容包含其中一个标签,则它们将被删除。{tag-list}
是以管道 (|
) 分隔的标记名称列表。示例:execCommand("format:apply-span:b|strong")
- 将把所选内容包装成<b>...</b>
,同时从所选内容中删除任何其他<b>
<strong>
元素。其他映射参数可能包含要添加到包装元素的 DOM 属性列表,例如:
execCommand("format:apply-span:font",{color:"#F00"})
- 将选择包装到<font color="#F00">...</font>
元素中。"format:toggle-span:{tag-list}"
- 如果选择包含其中一个标签 - 删除它们,否则它会执行"format:apply-span:..."
操作。"format:toggle-list:{list-tag}"
- 将所选段落转换为列表。如果选择已经是该类型的列表,则列表中的项目将转换为简单段落;{list-tag}
可以是ul
,ol
也可以dl
是 。"format:toggle-pre"
- 将选择转换为块或从<pre>
块转换。"format:indent"
- 将选定的段落换行到<blockquote>
OR 子列表中。"format:unindent"
- 从<blockquote>
中展开选定的段落或将子列表向上移动一级。"format:morph-block:{tag}"
- 更改所选块元素的标签。例如,这样电流<blockquote>
可以更改为<p>
。只有不包含其他display:block
元素的块元素才能变形。"format:unwrap-element:{tag}"
- 将元素的内容移动到元素的父元素,并从 DOM 中删除(现在是空的)元素。
表编辑操作。仅当选择位于表内时,这些操作才可用:
edit:insert-table-row:{before|after}
- 在选定单元格之前和之后插入行;edit:insert-table-column:{before|after}
- 在所选单元格之前和之后插入列;edit:merge-table-cells
- 将选定的单元格范围合并到单个单元格中(将向单元格添加 rowspan/colspan);edit:delete-table-rows
- 删除选定的行;edit:delete-table-columns
- 删除选定的列;edit:split-table-cells
- 将跨区的单元格拆分为多个单元格。
Properties
richtext.url
- r/w, string, url of loaded document.
Methods
richtext.load(url:string): true|false
将文件从 URL 加载到编辑器中;
richtext.load(html: string | ArrayBuffer, url: string): true|false
将内容从字节或字符串(HTML 源)加载到编辑器中;url 用于解析相对 URL(如果有)。
richtext.save(fileUrl:string): true|false
将内容保存到文件中;
richtext.loadEmpty(): true|false
通过空文档初始化编辑器;
richtext.sourceToContent(html:string, url:string, selStart:integer, selEnd:integer): true|false
该方法从 html 中设置内容,并从给定的 selStart 和 selEnd 中进行选择。
richtext.contentToSource() : \[html:string, url:string, selStart:integer, selEnd:integer\]
将内容和选择作为三个元素的数组返回;
richtext.update(mutator:function(tctx) {}) : bool
tctx.removeAttribute(element,attributeName:string)
- 删除一个属性;tctx.setAttribute(element,attributeName:string,attributeValue:string)
- 添加或更改一个属性的值;tctx.setTag(element,tagName:string)
- 更改元素的标签,用于<li>
更改<p>
例如;tctx.setText(node,text:string)
- 更改节点文本;tctx.insertHTML(node,offset, html:string): [node,offset]
- 在给定的节点/偏移位置插入 HTML,返回插入结束的位置;tctx.insertText(node,offset, text:string): [node,offset]
- 在给定的节点/偏移位置插入文本;tctx.insertNode(node,offset, node): [node,offset]
- 在给定节点/偏移位置插入节点;tctx.deleteSelection(): [node,offset]
- 删除当前选定的范围(如果有);tctx.deleteRange(node1,offset1,node2,offset2): [node,offset]
- 删除给定范围;tctx.deleteNode(node)
- 删除给定的节点或元素;tctx.split(node,offset,until:element): [node,offset]
- 在偏移位置拆分节点,直到父元素。类似于在段落中间按 ENTER 键 - 文本节点和 p[aragraph] 元素将被拆分为两个段落;tctx.wrap(node1,offset1,node2,offset2,element)
- 将范围包装成元素。类似于将选择包装到元素中b
;tctx.unwrap(element)
- 相反的操作来包装;tctx.execCommand(command:string [,params])
- 与element.execCommand()
上述相同,但所有突变都将进入此交易;
内容的事务性更新(更改)。通过 tctx 事务上下文接口进行的多个突变被合并为单个事务,该事务可作为单个操作撤消。Tctx 是具有以下内容突变方法的对象:
mutator 函数应返回 true 以提交事务,或返回 false 以放弃所有更改。