文档手册

behavior: richtext

2024-07-18 16:18:44

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} 可以是 ulol 也可以 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 事务上下文接口进行的多个突变被合并为单个事务,该事务可作为单个操作撤消。Tctx 是具有以下内容突变方法的对象:

    • 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() 上述相同,但所有突变都将进入此交易;

    mutator 函数应返回 true 以提交事务,或返回 false 以放弃所有更改。