@instructure/canvas-rce 5.14.1 → 5.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/DEVELOPMENT.md +2 -2
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +18 -73
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +21 -77
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +15 -39
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +105 -64
  25. package/es/common/incremental-loading/LoadMoreButton.js +4 -4
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +5 -13
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +16 -10
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +24 -35
  36. package/es/enhance-user-content/enhance_user_content.js +32 -67
  37. package/es/enhance-user-content/external_links.js +6 -9
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +22 -50
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +48 -107
  42. package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
  43. package/es/format-message.js +4 -5
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.d.ts +59 -0
  47. package/es/index.js +6 -6
  48. package/es/rce/AlertMessageArea.js +15 -16
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +3 -2
  51. package/es/rce/RCE.js +16 -17
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +29 -14
  54. package/es/rce/RCEWrapper.js +530 -641
  55. package/es/rce/RCEWrapper.utils.js +131 -0
  56. package/es/rce/RCEWrapperProps.js +9 -5
  57. package/es/rce/RceHtmlEditor.js +17 -19
  58. package/es/rce/ResizeHandle.js +4 -10
  59. package/es/rce/RestoreAutoSaveModal.js +1 -2
  60. package/es/rce/ShowOnFocusButton/index.js +2 -8
  61. package/es/rce/StatusBar.js +10 -44
  62. package/es/rce/alertHandler.js +1 -4
  63. package/es/rce/contentInsertion.js +36 -59
  64. package/es/rce/contentInsertionUtils.js +6 -8
  65. package/es/rce/contentRendering.js +13 -17
  66. package/es/rce/customEvents.js +1 -0
  67. package/es/rce/editorLanguage.js +23 -11
  68. package/es/rce/indicatorRegion.js +7 -7
  69. package/es/rce/normalizeLocale.js +5 -3
  70. package/es/rce/normalizeProps.js +7 -5
  71. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  72. package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
  74. package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
  75. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  76. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  78. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
  83. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
  84. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  85. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  86. package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
  87. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
  93. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
  95. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
  96. package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
  97. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  98. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  99. package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
  100. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  101. package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
  102. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  103. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  104. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
  127. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  128. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
  129. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  130. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  131. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  132. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  133. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
  134. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  135. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  136. package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
  137. package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
  138. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  139. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
  140. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
  141. package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
  142. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
  144. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  145. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
  147. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  148. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  149. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
  150. package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
  151. package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
  153. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
  154. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  155. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_image/plugin.js +14 -20
  157. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
  159. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  160. package/es/rce/plugins/instructure_links/components/Link.js +68 -84
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  164. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
  165. package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
  166. package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
  167. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  168. package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
  169. package/es/rce/plugins/instructure_links/plugin.js +23 -49
  170. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  171. package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
  172. package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
  173. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  174. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  175. package/es/rce/plugins/instructure_paste/plugin.js +29 -33
  176. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
  177. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
  182. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  184. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  185. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  186. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
  187. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  188. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
  189. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
  199. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
  200. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  201. package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
  202. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
  203. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
  204. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  205. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
  206. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
  207. package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
  208. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  209. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  210. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
  211. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
  212. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
  213. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  214. package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
  215. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  216. package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
  217. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
  218. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  219. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
  220. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
  221. package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
  222. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  223. package/es/rce/plugins/shared/ColorInput.js +27 -39
  224. package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
  225. package/es/rce/plugins/shared/ContentSelection.js +29 -78
  226. package/es/rce/plugins/shared/DimensionUtils.js +3 -12
  227. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  228. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  229. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  230. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  231. package/es/rce/plugins/shared/EventUtils.js +2 -4
  232. package/es/rce/plugins/shared/Filter.js +8 -38
  233. package/es/rce/plugins/shared/FixedContentTray.js +16 -17
  234. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
  235. package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
  236. package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
  237. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
  239. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
  240. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
  241. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
  242. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
  244. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
  245. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  246. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
  247. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  250. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  252. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
  253. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
  254. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
  255. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  256. package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
  257. package/es/rce/plugins/shared/LinkDisplay.js +9 -11
  258. package/es/rce/plugins/shared/PreviewIcon.js +9 -15
  259. package/es/rce/plugins/shared/Previewable.js +1 -0
  260. package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
  261. package/es/rce/plugins/shared/StoreContext.js +9 -12
  262. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
  263. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  264. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
  265. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
  266. package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
  267. package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
  268. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  269. package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
  270. package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
  271. package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
  272. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
  273. package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
  274. package/es/rce/plugins/shared/Upload/index.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
  276. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
  277. package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
  278. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  279. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  280. package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
  281. package/es/rce/plugins/shared/compressionUtils.js +18 -28
  282. package/es/rce/plugins/shared/dateUtils.js +1 -1
  283. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  284. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
  285. package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
  286. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  287. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  288. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  289. package/es/rce/plugins/shared/fileShape.js +4 -9
  290. package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
  291. package/es/rce/plugins/shared/fileUtils.js +1 -2
  292. package/es/rce/plugins/shared/linkUtils.js +1 -16
  293. package/es/rce/plugins/shared/round.js +2 -2
  294. package/es/rce/plugins/shared/trayUtils.js +7 -3
  295. package/es/rce/plugins/shared/useDataUrl.js +13 -14
  296. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  297. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
  298. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
  299. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  300. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  301. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  302. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
  303. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
  315. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  316. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  317. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
  321. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
  322. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
  323. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  324. package/es/rce/root.js +17 -16
  325. package/es/rce/sanitizePlugins.js +1 -3
  326. package/es/rce/style.js +1 -4
  327. package/es/rce/tinyRCE.js +14 -9
  328. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  329. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  330. package/es/rce/transformContent.js +9 -11
  331. package/es/rce/types.js +1 -0
  332. package/es/rce/userOS.js +1 -1
  333. package/es/rce/wrapInitCb.js +50 -43
  334. package/es/rcs/api.js +100 -171
  335. package/es/rcs/buildError.js +8 -20
  336. package/es/rcs/fake.js +9 -20
  337. package/es/sidebar/actions/all_files.js +2 -0
  338. package/es/sidebar/actions/data.js +4 -7
  339. package/es/sidebar/actions/documents.js +19 -18
  340. package/es/sidebar/actions/files.js +21 -28
  341. package/es/sidebar/actions/filter.js +5 -5
  342. package/es/sidebar/actions/flickr.js +1 -1
  343. package/es/sidebar/actions/images.js +32 -37
  344. package/es/sidebar/actions/links.js +1 -0
  345. package/es/sidebar/actions/media.js +27 -28
  346. package/es/sidebar/actions/session.js +2 -5
  347. package/es/sidebar/actions/ui.js +1 -0
  348. package/es/sidebar/actions/upload.js +38 -74
  349. package/es/sidebar/containers/Sidebar.js +1 -2
  350. package/es/sidebar/containers/sidebarHandlers.js +9 -13
  351. package/es/sidebar/dragHtml.js +11 -5
  352. package/es/sidebar/reducers/all_files.js +5 -6
  353. package/es/sidebar/reducers/collection.js +12 -15
  354. package/es/sidebar/reducers/collections.js +6 -8
  355. package/es/sidebar/reducers/documents.js +7 -16
  356. package/es/sidebar/reducers/files.js +4 -6
  357. package/es/sidebar/reducers/filter.js +8 -23
  358. package/es/sidebar/reducers/flickr.js +10 -12
  359. package/es/sidebar/reducers/folder.js +16 -18
  360. package/es/sidebar/reducers/folders.js +4 -6
  361. package/es/sidebar/reducers/images.js +4 -16
  362. package/es/sidebar/reducers/index.js +3 -1
  363. package/es/sidebar/reducers/media.js +7 -16
  364. package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
  365. package/es/sidebar/reducers/noop.js +2 -2
  366. package/es/sidebar/reducers/rootFolderId.js +2 -5
  367. package/es/sidebar/reducers/session.js +4 -6
  368. package/es/sidebar/reducers/ui.js +6 -25
  369. package/es/sidebar/reducers/upload.js +16 -64
  370. package/es/sidebar/store/configureStore.js +1 -0
  371. package/es/sidebar/store/initialState.js +14 -26
  372. package/es/translations/locales/ab.js +1 -0
  373. package/es/translations/locales/ar.js +72 -8
  374. package/es/translations/locales/ca.js +72 -8
  375. package/es/translations/locales/cs.js +1 -0
  376. package/es/translations/locales/cs_CZ.js +1 -0
  377. package/es/translations/locales/cy.js +72 -8
  378. package/es/translations/locales/da-x-k12.js +72 -8
  379. package/es/translations/locales/da.js +72 -8
  380. package/es/translations/locales/da_DK.js +1 -0
  381. package/es/translations/locales/de.js +72 -8
  382. package/es/translations/locales/el.js +4 -0
  383. package/es/translations/locales/en-AU-x-unimelb.js +72 -8
  384. package/es/translations/locales/en-GB-x-ukhe.js +72 -8
  385. package/es/translations/locales/en.js +72 -8
  386. package/es/translations/locales/en_AU.js +72 -8
  387. package/es/translations/locales/en_CA.js +72 -8
  388. package/es/translations/locales/en_CY.js +72 -8
  389. package/es/translations/locales/en_GB.js +72 -8
  390. package/es/translations/locales/en_NZ.js +1 -0
  391. package/es/translations/locales/en_SE.js +1 -0
  392. package/es/translations/locales/en_US.js +1 -0
  393. package/es/translations/locales/es.js +72 -8
  394. package/es/translations/locales/es_ES.js +72 -8
  395. package/es/translations/locales/es_GT.js +1 -0
  396. package/es/translations/locales/fa_IR.js +7 -0
  397. package/es/translations/locales/fi.js +72 -8
  398. package/es/translations/locales/fr.js +72 -8
  399. package/es/translations/locales/fr_CA.js +73 -9
  400. package/es/translations/locales/ga.js +5 -13
  401. package/es/translations/locales/he.js +7 -0
  402. package/es/translations/locales/hi.js +72 -8
  403. package/es/translations/locales/ht.js +72 -8
  404. package/es/translations/locales/hu.js +7 -6
  405. package/es/translations/locales/hu_HU.js +1 -0
  406. package/es/translations/locales/hy.js +1 -0
  407. package/es/translations/locales/id.js +72 -8
  408. package/es/translations/locales/id_ID.js +1 -0
  409. package/es/translations/locales/is.js +72 -8
  410. package/es/translations/locales/it.js +72 -8
  411. package/es/translations/locales/ja.js +72 -8
  412. package/es/translations/locales/ko.js +1 -0
  413. package/es/translations/locales/ko_KR.js +1 -0
  414. package/es/translations/locales/lt.js +1 -0
  415. package/es/translations/locales/lt_LT.js +1 -0
  416. package/es/translations/locales/mi.js +72 -8
  417. package/es/translations/locales/mn_MN.js +1 -0
  418. package/es/translations/locales/ms.js +72 -8
  419. package/es/translations/locales/nb-x-k12.js +72 -8
  420. package/es/translations/locales/nb.js +72 -8
  421. package/es/translations/locales/nl.js +72 -8
  422. package/es/translations/locales/nl_NL.js +1 -0
  423. package/es/translations/locales/nn.js +7 -6
  424. package/es/translations/locales/pl.js +72 -8
  425. package/es/translations/locales/pt.js +72 -8
  426. package/es/translations/locales/pt_BR.js +72 -8
  427. package/es/translations/locales/ro.js +1 -0
  428. package/es/translations/locales/ru.js +72 -8
  429. package/es/translations/locales/se.js +1 -0
  430. package/es/translations/locales/sl.js +72 -8
  431. package/es/translations/locales/sv-x-k12.js +72 -8
  432. package/es/translations/locales/sv.js +72 -8
  433. package/es/translations/locales/sv_SE.js +1 -0
  434. package/es/translations/locales/tg.js +1 -0
  435. package/es/translations/locales/th.js +72 -8
  436. package/es/translations/locales/th_TH.js +1 -0
  437. package/es/translations/locales/tl_PH.js +1 -0
  438. package/es/translations/locales/tr.js +7 -0
  439. package/es/translations/locales/uk_UA.js +7 -0
  440. package/es/translations/locales/vi.js +72 -8
  441. package/es/translations/locales/vi_VN.js +1 -0
  442. package/es/translations/locales/zh-Hans.js +72 -8
  443. package/es/translations/locales/zh-Hant.js +72 -8
  444. package/es/translations/locales/zh.js +72 -8
  445. package/es/translations/locales/zh_HK.js +72 -8
  446. package/es/translations/locales/zh_TW.Big5.js +1 -0
  447. package/es/translations/locales/zh_TW.js +1 -0
  448. package/es/translations/tinymce/ar_SA.js +1 -0
  449. package/es/translations/tinymce/fi.js +1 -0
  450. package/es/translations/tinymce/ga.js +1 -0
  451. package/es/translations/tinymce/id.js +1 -0
  452. package/es/translations/tinymce/ru.js +1 -0
  453. package/es/translations/tinymce/ru_RU.js +1 -0
  454. package/es/translations/tinymce/sl.js +1 -0
  455. package/es/translations/tinymce/sr.js +1 -0
  456. package/es/translations/tinymce/th.js +1 -0
  457. package/es/translations/tinymce/uk_UA.js +1 -0
  458. package/es/translations/tinymce/vi_VN.js +1 -0
  459. package/es/util/TypedDict.js +4 -2
  460. package/es/util/elem-util.js +1 -1
  461. package/es/util/encrypted-storage.js +3 -13
  462. package/es/util/file-url-util.js +2 -7
  463. package/es/util/fullscreenHelpers.js +9 -9
  464. package/es/util/instui-icon-helper.js +4 -3
  465. package/es/util/loadingPlaceholder.js +39 -41
  466. package/es/util/simpleCache.js +1 -5
  467. package/es/util/string-util.js +1 -1
  468. package/es/util/textarea-editing-util.js +3 -7
  469. package/es/util/tinymce-plugin-util.js +0 -5
  470. package/es/util/url-util.js +20 -29
  471. package/eslint.config.js +250 -0
  472. package/jest.config.js +1 -1
  473. package/locales/en.json +190 -10
  474. package/package.json +78 -82
  475. package/scripts/build-canvas +2 -1
  476. package/scripts/build.js +4 -4
  477. package/scripts/installTranslations.js +7 -8
  478. package/testcafe/RCEWrapper.test.js +0 -1
  479. package/testcafe/StatusBar.test.js +0 -1
  480. package/testcafe/axe.test.js +3 -4
  481. package/testcafe/enhanceUserContent.test.js +0 -1
  482. package/tsconfig.json +21 -16
  483. package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
  484. package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
  485. package/.eslintrc +0 -45
  486. package/.prettierignore +0 -6
  487. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  488. package/es/rce/__mocks__/tinymceReact.js +0 -55
  489. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -15,9 +15,8 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
-
19
- /* eslint-disable jest/valid-describe */
20
18
  // our own imported describe function confuses eslint
19
+
21
20
  import React from 'react';
22
21
  import { LiveAnnouncer, LiveMessage } from 'react-aria-live';
23
22
  import { Button, CloseButton, IconButton } from '@instructure/ui-buttons';
@@ -45,15 +44,14 @@ import checkNode from '../node-checker';
45
44
  import formatMessage from '../../../../format-message';
46
45
  import { clearIndicators } from '../utils/indicate';
47
46
  import { getTrayHeight } from '../../shared/trayUtils';
48
- import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers'; // safari still doesn't support the standard api
47
+ import { instuiPopupMountNodeFn } from '../../../../util/fullscreenHelpers';
49
48
 
49
+ // safari still doesn't support the standard api
50
50
  const FS_CHANGEEVENT = document.exitFullscreen ? 'fullscreenchange' : 'webkitfullscreenchange';
51
-
52
51
  const noop = () => {};
53
-
54
52
  export default class Checker extends React.Component {
55
- constructor() {
56
- super(...arguments);
53
+ constructor(...args) {
54
+ super(...args);
57
55
  this.state = {
58
56
  open: false,
59
57
  checking: false,
@@ -64,25 +62,21 @@ export default class Checker extends React.Component {
64
62
  config: {},
65
63
  showWhyPopover: false
66
64
  };
67
-
68
65
  this.onFullscreenChange = _event => {
69
66
  this.selectCurrent();
70
67
  };
71
-
72
- this.updateFormState = _ref => {
73
- let {
74
- target
75
- } = _ref;
68
+ this.updateFormState = ({
69
+ target
70
+ }) => {
76
71
  this.setState(prevState => {
77
- const formState = { ...prevState.formState
72
+ const formState = {
73
+ ...prevState.formState
78
74
  };
79
-
80
75
  if (target.type === 'checkbox') {
81
76
  formState[target.name] = target.checked;
82
77
  } else {
83
78
  formState[target.name] = target.value;
84
79
  }
85
-
86
80
  return {
87
81
  formState,
88
82
  formStateValid: this.formStateValid(formState)
@@ -90,7 +84,6 @@ export default class Checker extends React.Component {
90
84
  });
91
85
  };
92
86
  }
93
-
94
87
  componentDidMount() {
95
88
  this.props.editor.on('Remove', _editor => {
96
89
  this.setState({
@@ -100,7 +93,6 @@ export default class Checker extends React.Component {
100
93
  });
101
94
  });
102
95
  }
103
-
104
96
  componentDidUpdate(_prevProps, prevState) {
105
97
  if (prevState.open !== this.state.open) {
106
98
  if (this.state.open) {
@@ -110,13 +102,11 @@ export default class Checker extends React.Component {
110
102
  }
111
103
  }
112
104
  }
113
-
114
105
  setConfig(config) {
115
106
  this.setState({
116
107
  config
117
108
  });
118
109
  }
119
-
120
110
  check(done) {
121
111
  if (typeof done !== 'function') done = noop;
122
112
  this.setState({
@@ -144,10 +134,8 @@ export default class Checker extends React.Component {
144
134
  }
145
135
  });
146
136
  }
147
-
148
137
  _check(done) {
149
138
  const node = this.props.getBody();
150
-
151
139
  const checkDone = errors => {
152
140
  this.setState({
153
141
  errorIndex: 0,
@@ -158,43 +146,34 @@ export default class Checker extends React.Component {
158
146
  done();
159
147
  });
160
148
  };
161
-
162
149
  checkNode(node, checkDone, this.state.config, this.props.additionalRules);
163
150
  }
164
-
165
151
  firstError() {
166
152
  if (this.state.errors.length > 0) {
167
153
  this.setErrorIndex(0);
168
154
  }
169
155
  }
170
-
171
156
  nextError() {
172
157
  const next = (this.state.errorIndex + 1) % this.state.errors.length;
173
158
  this.setErrorIndex(next);
174
159
  }
175
-
176
160
  prevError() {
177
161
  const len = this.state.errors.length;
178
162
  const prev = (len + this.state.errorIndex - 1) % len;
179
163
  this.setErrorIndex(prev);
180
164
  }
181
-
182
165
  setErrorIndex(errorIndex) {
183
166
  this.onLeaveError();
184
-
185
167
  if (errorIndex >= this.state.errors.length) {
186
168
  errorIndex = 0;
187
169
  }
188
-
189
170
  this.setState({
190
171
  errorIndex
191
172
  }, () => this.selectCurrent());
192
173
  }
193
-
194
174
  selectCurrent() {
195
175
  clearIndicators(this.props.editor.dom.doc);
196
176
  const errorNode = this.errorNode();
197
-
198
177
  if (errorNode) {
199
178
  this.getFormState();
200
179
  dom.select(errorNode);
@@ -202,44 +181,35 @@ export default class Checker extends React.Component {
202
181
  this.firstError();
203
182
  }
204
183
  }
205
-
206
184
  error() {
207
185
  return this.state.errors[this.state.errorIndex];
208
186
  }
209
-
210
187
  errorNode() {
211
188
  const error = this.error();
212
189
  return error && error.node;
213
190
  }
214
-
215
191
  errorRootNode() {
216
192
  const rule = this.errorRule();
217
193
  const rootNode = rule && rule.rootNode && rule.rootNode(this.errorNode());
218
194
  return rootNode || this.errorNode();
219
195
  }
220
-
221
196
  updateErrorNode(elem) {
222
197
  const error = this.error();
223
-
224
198
  if (error) {
225
199
  error.node = elem;
226
200
  }
227
201
  }
228
-
229
202
  errorRule() {
230
203
  const error = this.error();
231
204
  return error && error.rule;
232
205
  }
233
-
234
206
  errorMessage() {
235
207
  const rule = this.errorRule();
236
208
  return rule && rule.message();
237
209
  }
238
-
239
210
  getFormState() {
240
211
  const rule = this.errorRule();
241
212
  const node = this.errorNode();
242
-
243
213
  if (rule && node) {
244
214
  this.setState({
245
215
  formState: rule.data(node),
@@ -247,39 +217,30 @@ export default class Checker extends React.Component {
247
217
  });
248
218
  }
249
219
  }
250
-
251
220
  formStateValid(formState) {
252
221
  formState = formState || this.state.formState;
253
222
  let node = this.tempNode(true);
254
223
  const rule = this.errorRule();
255
-
256
224
  if (!node || !rule) {
257
225
  return false;
258
226
  }
259
-
260
227
  node = rule.update(node, formState);
261
-
262
228
  if (this._tempNode === this._tempTestNode) {
263
229
  this._tempNode = node;
264
230
  }
265
-
266
231
  this._tempTestNode = node;
267
232
  return rule.test(node);
268
233
  }
269
-
270
234
  fixIssue() {
271
235
  const rule = this.errorRule();
272
236
  const node = this.errorNode();
273
-
274
237
  if (rule && node) {
275
238
  this.removeTempNode();
276
239
  rule.update(node, this.state.formState);
277
240
  this.updateErrorNode(node);
278
-
279
241
  if (this._closeButtonRef) {
280
242
  this._closeButtonRef.focus();
281
243
  }
282
-
283
244
  const errorIndex = this.state.errorIndex;
284
245
  this.check(() => {
285
246
  this.setErrorIndex(errorIndex);
@@ -287,23 +248,17 @@ export default class Checker extends React.Component {
287
248
  });
288
249
  }
289
250
  }
290
-
291
251
  newTempRootNode(rootNode) {
292
252
  const newTempRootNode = rootNode.cloneNode(true);
293
253
  const path = dom.pathForNode(rootNode, this.errorNode());
294
254
  this._tempTestNode = dom.nodeByPath(newTempRootNode, path);
295
255
  return newTempRootNode;
296
256
  }
297
-
298
- tempNode() {
299
- let refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
300
-
257
+ tempNode(refresh = false) {
301
258
  if (!this._tempNode || refresh) {
302
259
  const rootNode = this.errorRootNode();
303
-
304
260
  if (rootNode) {
305
261
  const newTempRtNode = this.newTempRootNode(rootNode);
306
-
307
262
  if (refresh && this._tempNode) {
308
263
  const parent = this._tempNode.parentNode;
309
264
  parent.insertBefore(newTempRtNode, this._tempNode);
@@ -313,17 +268,13 @@ export default class Checker extends React.Component {
313
268
  parent.insertBefore(newTempRtNode, rootNode);
314
269
  parent.removeChild(rootNode);
315
270
  }
316
-
317
271
  this._tempNode = newTempRtNode;
318
272
  }
319
273
  }
320
-
321
274
  return this._tempTestNode;
322
275
  }
323
-
324
276
  removeTempNode() {
325
277
  const node = this.errorRootNode();
326
-
327
278
  if (this._tempNode && node) {
328
279
  const parent = this._tempNode.parentNode;
329
280
  parent.insertBefore(node, this._tempNode);
@@ -332,11 +283,9 @@ export default class Checker extends React.Component {
332
283
  this._tempTestNode = null;
333
284
  }
334
285
  }
335
-
336
286
  onLeaveError() {
337
287
  this.removeTempNode();
338
288
  }
339
-
340
289
  handleClose() {
341
290
  this.onLeaveError();
342
291
  clearIndicators(this.props.editor.dom.doc);
@@ -346,7 +295,6 @@ export default class Checker extends React.Component {
346
295
  this.props.onClose();
347
296
  });
348
297
  }
349
-
350
298
  render() {
351
299
  const rule = this.errorRule();
352
300
  const issueNumberMessage = formatMessage('Issue { num }/{ total }', {
@@ -482,14 +430,12 @@ export default class Checker extends React.Component {
482
430
  margin: "medium auto"
483
431
  }))))));
484
432
  }
485
-
486
433
  renderField(f) {
487
434
  const disabled = !!f.disabledIf && f.disabledIf(this.state.formState);
488
-
489
435
  switch (true) {
490
436
  case !!f.options:
491
437
  return /*#__PURE__*/React.createElement(SimpleSelect, {
492
- mountNode: instuiPopupMountNode,
438
+ mountNode: instuiPopupMountNodeFn(),
493
439
  disabled: disabled,
494
440
  onChange: (e, option) => {
495
441
  this.updateFormState({
@@ -506,7 +452,6 @@ export default class Checker extends React.Component {
506
452
  id: o[0],
507
453
  value: o[0]
508
454
  }, o[1])));
509
-
510
455
  case f.checkbox:
511
456
  return /*#__PURE__*/React.createElement(Checkbox, {
512
457
  label: f.label,
@@ -515,7 +460,6 @@ export default class Checker extends React.Component {
515
460
  onChange: this.updateFormState,
516
461
  disabled: disabled
517
462
  });
518
-
519
463
  case f.color:
520
464
  return /*#__PURE__*/React.createElement(ColorField, {
521
465
  label: f.label,
@@ -524,7 +468,6 @@ export default class Checker extends React.Component {
524
468
  onChange: this.updateFormState,
525
469
  key: this.state.formState.id
526
470
  });
527
-
528
471
  case f.textarea:
529
472
  return /*#__PURE__*/React.createElement(TextArea, {
530
473
  label: f.label,
@@ -533,13 +476,11 @@ export default class Checker extends React.Component {
533
476
  onChange: this.updateFormState,
534
477
  disabled: disabled
535
478
  });
536
-
537
479
  case f.alert:
538
480
  return this.state.formState.action === 'elem-only' && /*#__PURE__*/React.createElement(Alert, {
539
481
  name: f.dataKey,
540
482
  variant: f.variant
541
483
  }, f.message);
542
-
543
484
  default:
544
485
  return /*#__PURE__*/React.createElement(TextInput, {
545
486
  renderLabel: f.label,
@@ -550,7 +491,6 @@ export default class Checker extends React.Component {
550
491
  });
551
492
  }
552
493
  }
553
-
554
494
  }
555
495
  Checker.defaultProps = {
556
496
  additionalRules: [],
@@ -15,11 +15,11 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import { ColorWrap, Saturation, Hue, Alpha } from 'react-color/lib/components/common';
20
21
  import Pointer from './pointer';
21
22
  import PointerCircle from 'react-color/lib/components/photoshop/PhotoshopPointerCircle';
22
-
23
23
  function ColorPicker(props) {
24
24
  return /*#__PURE__*/React.createElement("div", {
25
25
  "data-testid": props['data-testid']
@@ -55,5 +55,4 @@ function ColorPicker(props) {
55
55
  pointer: Pointer
56
56
  }))));
57
57
  }
58
-
59
58
  export default ColorWrap(ColorPicker);
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  export default function PlaceholderSVG() {
20
21
  return /*#__PURE__*/React.createElement("svg", {
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  export default function Pointer() {
20
21
  const styles = {
@@ -15,22 +15,17 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import * as dom from './utils/dom';
19
20
  import rules from './rules';
20
- export default function checkNode(node, done) {
21
- let config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22
- let additionalRules = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
23
-
21
+ export default function checkNode(node, done, config = {}, additionalRules = []) {
24
22
  if (!node) {
25
23
  return;
26
24
  }
27
-
28
25
  const errors = [];
29
-
30
26
  const childNodeCheck = child => {
31
27
  if (child.hasAttribute('data-ignore-a11y-check')) return;
32
28
  const composedRules = rules.concat(additionalRules);
33
-
34
29
  for (const rule of composedRules) {
35
30
  // eslint-disable-next-line promise/catch-or-return
36
31
  Promise.resolve(rule.test(child, config)).then(result => {
@@ -43,12 +38,10 @@ export default function checkNode(node, done) {
43
38
  });
44
39
  }
45
40
  };
46
-
47
41
  const checkDone = () => {
48
42
  if (typeof done === 'function') {
49
43
  done(errors);
50
44
  }
51
45
  };
52
-
53
46
  dom.walk(node, childNodeCheck, checkDone);
54
47
  }
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import ReactDOM from 'react-dom';
20
21
  import Checker from './components/checker';
@@ -28,30 +29,25 @@ container.className = 'tinymce-a11y-checker-container';
28
29
  document.body.appendChild(container);
29
30
  tinymce.create('tinymce.plugins.AccessibilityChecker', {
30
31
  init(ed) {
31
- ed.addCommand('openAccessibilityChecker', function (ui, _ref) {
32
- let {
33
- done,
34
- config,
35
- additionalRules,
36
- mountNode,
37
- triggerElementId,
38
- onFixError
39
- } = _ref;
40
-
32
+ ed.addCommand('openAccessibilityChecker', function (ui, {
33
+ done,
34
+ config,
35
+ additionalRules,
36
+ mountNode,
37
+ triggerElementId,
38
+ onFixError
39
+ }) {
41
40
  if (!isCheckerOpen) {
42
- ReactDOM.render( /*#__PURE__*/React.createElement(Checker, {
41
+ ReactDOM.render(/*#__PURE__*/React.createElement(Checker, {
43
42
  getBody: ed.getBody.bind(ed),
44
43
  editor: ed,
45
44
  additionalRules: additionalRules,
46
45
  mountNode: mountNode,
47
46
  onClose: () => {
48
47
  isCheckerOpen = false;
49
-
50
48
  if (triggerElementId) {
51
- var _button$;
52
-
53
49
  const button = document.querySelectorAll(`[data-btn-id=${triggerElementId}]`);
54
- (_button$ = button[0]) === null || _button$ === void 0 ? void 0 : _button$.focus();
50
+ button[0]?.focus();
55
51
  }
56
52
  },
57
53
  onFixError: onFixError
@@ -68,12 +64,11 @@ tinymce.create('tinymce.plugins.AccessibilityChecker', {
68
64
  isCheckerOpen = true;
69
65
  }
70
66
  });
71
- ed.addCommand('checkAccessibility', function (ui, _ref2) {
72
- let {
73
- done,
74
- config,
75
- additionalRules
76
- } = _ref2;
67
+ ed.addCommand('checkAccessibility', function (ui, {
68
+ done,
69
+ config,
70
+ additionalRules
71
+ }) {
77
72
  checkNode(ed.getBody(), done, config, additionalRules);
78
73
  });
79
74
  ed.ui.registry.addButton('check_a11y', {
@@ -82,15 +77,14 @@ tinymce.create('tinymce.plugins.AccessibilityChecker', {
82
77
  icon: 'a11y'
83
78
  });
84
79
  }
80
+ });
85
81
 
86
- }); // Register plugin
87
-
82
+ // Register plugin
88
83
  tinymce.PluginManager.add('a11y_checker', tinymce.plugins.AccessibilityChecker);
89
84
  export function getInstance(cb) {
90
85
  if (instance != null) {
91
86
  return cb(instance);
92
87
  }
93
-
94
88
  pendingInstanceCallbacks.push(cb);
95
89
  }
96
90
  export function setLocale(locale) {
@@ -15,59 +15,46 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
- import formatMessage from '../../../../format-message';
19
18
 
19
+ import formatMessage from '../../../../format-message';
20
20
  const shouldMergeAnchors = (elem1, elem2) => {
21
21
  if (!elem1 || !elem2 || elem1.tagName !== 'A' || elem2.tagName !== 'A') {
22
22
  return false;
23
23
  }
24
-
25
24
  return elem1.getAttribute('href') === elem2.getAttribute('href');
26
25
  };
27
-
28
26
  const notWhitespace = node => {
29
27
  return node.nodeType !== Node.TEXT_NODE || node.textContent.match(/\S/);
30
28
  };
31
-
32
29
  const onlyChild = parent => {
33
30
  const child = parent.firstElementChild;
34
-
35
31
  if (!child) {
36
32
  return null;
37
33
  }
38
-
39
34
  if ([...parent.childNodes].filter(notWhitespace).length > 1) {
40
35
  return null;
41
36
  }
42
-
43
37
  return child;
44
38
  };
45
-
46
39
  const solitaryDescendantImage = link => {
47
40
  let parent = link;
48
41
  let child = onlyChild(parent);
49
-
50
42
  while (child) {
51
43
  if (child.tagName === 'IMG') {
52
44
  return child;
53
45
  }
54
-
55
46
  parent = child;
56
47
  child = onlyChild(parent);
57
48
  }
58
-
59
49
  return null;
60
50
  };
61
-
62
51
  const normalizeText = text => {
63
52
  // normalize whitespace and trim leading and trailing whitespace
64
53
  return text.replace(/\s+/g, ' ').trim();
65
54
  };
66
-
67
55
  const descendantImageWithRedundantAltText = (left, right) => {
68
56
  const leftImage = solitaryDescendantImage(left);
69
57
  const rightImage = solitaryDescendantImage(right);
70
-
71
58
  if (leftImage && !rightImage && normalizeText(leftImage.getAttribute('alt')) === normalizeText(right.textContent)) {
72
59
  return leftImage;
73
60
  } else if (rightImage && !leftImage && normalizeText(rightImage.getAttribute('alt')) === normalizeText(left.textContent)) {
@@ -76,18 +63,14 @@ const descendantImageWithRedundantAltText = (left, right) => {
76
63
  return null;
77
64
  }
78
65
  };
79
-
80
66
  export default {
81
67
  id: 'adjacent-links',
82
-
83
68
  test(elem) {
84
69
  if (elem.tagName != 'A') {
85
70
  return true;
86
71
  }
87
-
88
72
  return !shouldMergeAnchors(elem, elem.nextElementSibling);
89
73
  },
90
-
91
74
  data: _elem => {
92
75
  return {
93
76
  combine: false
@@ -98,30 +81,24 @@ export default {
98
81
  checkbox: true,
99
82
  dataKey: 'combine'
100
83
  }],
101
-
102
84
  update(elem, data) {
103
85
  const rootElem = elem.parentNode;
104
-
105
86
  if (data.combine) {
106
- const next = elem.nextElementSibling; // https://www.w3.org/TR/WCAG20-TECHS/H2.html
87
+ const next = elem.nextElementSibling;
107
88
 
89
+ // https://www.w3.org/TR/WCAG20-TECHS/H2.html
108
90
  const image = descendantImageWithRedundantAltText(elem, next);
109
-
110
91
  if (image) {
111
92
  image.setAttribute('alt', '');
112
93
  }
113
-
114
94
  rootElem.removeChild(next);
115
95
  elem.innerHTML += ` ${next.innerHTML}`;
116
96
  }
117
-
118
97
  return elem;
119
98
  },
120
-
121
99
  rootNode(elem) {
122
100
  return elem.parentNode;
123
101
  },
124
-
125
102
  message: () => formatMessage('Adjacent links with the same URL should be a single link.'),
126
103
  why: () => formatMessage('Keyboards navigate to links using the Tab key. Two adjacent links that direct to the same destination can be confusing to keyboard users.'),
127
104
  link: 'https://www.w3.org/TR/WCAG20-TECHS/H2.html',