配置RTE以创建可访问的网页和站点 configure-rte-for-accessibility
Adobe Experience Manager支持符合各种辅助功能标准的多种标准辅助功能。 此外,开发人员可以自定义或扩展功能,以提供有助于使用使用富文本编辑器(RTE)的Experience Manager组件创建无障碍内容的功能。
在设计网页并将内容添加到页面时,内容开发人员和作者可以使用RTE的功能来提供与辅助功能相关的信息。 例如,通过标题和段落元素添加结构信息。
要配置和自定义这些功能,请为组件配置RTE插件。 例如,paraformat
插件允许您添加其他块级语义元素,包括扩展支持的标题级别数超过默认提供的基本H1
、H2
和H3
。
RTE包含在启用了触屏操作的用户界面和Classic用户界面的各种组件中。 但是,使用RTE的主要组件是可用于两个界面的 Text 组件。 以下图像显示了启用了一系列插件(包括paraformat
)的RTE:
在触屏UI中处于全屏模式的
图:已启用触屏的用户界面中的文本组件。
图:经典用户界面中的文本组件。
有关各种界面中可用的RTE功能之间的差异,请参阅插件及其功能。
配置插件功能 configure-the-plugin-features
有关配置RTE的完整说明,请参阅配置富文本编辑器页。 这涵盖了所有问题,包括关键步骤:
通过在CRXDE Lite中的相应rtePlugins
子分支中配置插件,您可以激活该插件的所有功能或特定功能。
示例 — 指定RTE选择字段中可用的段落格式 example-specifying-paragraph-formats-available-in-rte-selection-field
可以通过以下方式选择新的语义块格式:
-
根据您的RTE,确定并导航到配置位置。
-
然后,内容作者可以从RTE中的选择字段中使用段落格式。 它们可以访问:
- 使用触屏UI中的段落枕图标。
- 在经典UI中使用 格式 字段(弹出选择器)。
利用RTE中通过段落格式选项提供的结构元素,AEM为开发无障碍内容奠定了良好的基础。 内容作者无法使用RTE设置字体大小、颜色或其他相关属性的格式,从而阻止创建内联格式。 相反,他们必须选择相应的结构元素(如标题),并使用从“样式”选项中选择的全局样式。 这确保了标记干净,为使用自己的样式表和结构正确的内容浏览的用户提供了更大的选项。
使用源编辑功能 use-of-the-source-edit-feature
在某些情况下,内容作者会发现必须检查和调整使用RTE创建的HTML源代码。 例如,在RTE内创建的一段内容可能需要额外的标记以确保符合WCAG 2.0。可以使用RTE的源编辑选项完成此操作。 您可以在misctools
插件🔗上指定sourceedit
功能。
sourceedit
功能。 键入错误和/或不支持的功能可能会导致更多问题。添加对更多HTML元素和属性的支持 add-support-for-more-html-elements-and-attributes
要进一步扩展AEM的辅助功能,可以基于RTE扩展具有其他元素和属性的现有组件(如 Text 和 Table 组件)。
以下过程说明了如何使用 Caption 元素扩展 Table 组件,该元素向辅助技术用户提供有关数据表的信息:
示例 — 将标题添加到“表属性”对话框中 example-adding-the-caption-to-the-table-properties-dialog
在TablePropertiesDialog
的构造函数中,添加一个用于编辑描述的其他文本输入字段。 请注意,必须将itemId
设置为caption
(即DOM属性的名称)才能自动处理其内容。
在 Table 中,显式设置或删除DOM元素中的属性。 此值由config
对象中的对话框传递。 请注意,应使用相应的CQ.form.rte.Common
方法设置/删除DOM属性(com
是CQ.form.rte.Common
的快捷方式),以避免浏览器实施中的常见缺陷。
示例 — 在文本中使用强调内容时创建无障碍HTML create-accessible-html-for-text
RTE可以使用strong
和em
标记代替b
和i
。 将以下节点作为同级节点添加到对话框中的uiSettings
和rtePlugins
节点。
<htmlRules jcr:primaryType="nt:unstructured">
<docType jcr:primaryType="nt:unstructured">
<typeConfig jcr:primaryType="nt:unstructured"
useSemanticMarkup="{Boolean}true">
<semanticMarkupMap
b="strong"
i="em"/>
</typeConfig>
</docType>
</htmlRules>
分步说明 step-by-step-instructions
-
启动CRXDE Lite。 例如:http://localhost:4502/crx/de/
-
复制:
/libs/cq/ui/widgets/source/widgets/form/rte/commands/Table.js
到:
/apps/cq/ui/widgets/source/widgets/form/rte/commands/Table.js
note note NOTE 如果中间文件夹尚不存在,您可能需要创建这些文件夹。 -
复制:
/libs/cq/ui/widgets/source/widgets/form/rte/plugins/TablePropertiesDialog.js
到:
/apps/cq/ui/widgets/source/widgets/form/rte/plugins/TablePropertiesDialog.js
。 -
打开以下文件进行编辑(双击打开):
/apps/cq/ui/widgets/source/widgets/form/rte/plugins/TablePropertiesDialog.js
-
在
constructor
方法中,行读取之前:code language-none var dialogRef = this;
添加以下代码:
code language-none editItems.push({ "itemId": "caption", "name": "caption", "xtype": "textfield", "fieldLabel": CQ.I18n.getMessage("Caption"), "value": (this.table && this.table.caption ? this.table.caption.textContent : "") });
-
打开以下文件:
/apps/cq/ui/widgets/source/widgets/form/rte/commands/Table.js
。 -
在
transferConfigToTable
方法的末尾添加以下代码:code language-none /** * Adds Caption Element */ var captionElement; if (dom.firstChild && dom.firstChild.tagName.toLowerCase() == "caption") { captionElement = dom.firstChild; } if (config.caption) { var captionTextNode = document.createTextNode(config.caption) if (captionElement) { dom.replaceNode(captionElement.firstChild,captionTextNode); } else { captionElement = document.createElement("caption"); captionElement.appendChild(captionTextNode); if (dom.childNodes.length>0) { dom.insertBefore(captionElement, dom.firstChild); } else { dom.appendChild(captionElement); } } } else if (captionElement) { dom.removeChild(captionElement); }
-
使用 全部保存…… 保存更改
getValue()
方法提供标题值。- 每个相应字段的
itemId
属性均设置为相应DOM属性(TablePropertiesDialog
)的名称。 - 在DOM元素上显式设置和/或删除了属性(
Table
)。