@instructure/canvas-rce 5.14.0 → 5.14.2

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 (484) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/DEVELOPMENT.md +1 -1
  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/__tests__/sidebar/reducers/all_files.test.js +28 -0
  17. package/babel.config.js +3 -1
  18. package/build.sh +7 -7
  19. package/es/bridge/Bridge.js +8 -56
  20. package/es/bridge/index.js +1 -0
  21. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  22. package/es/canvasFileBrowser/en-US.js +3 -6
  23. package/es/common/FlashAlert.js +7 -28
  24. package/es/common/browser.js +4 -2
  25. package/es/common/fileUrl.js +104 -59
  26. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  27. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  28. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  29. package/es/common/incremental-loading/index.js +1 -0
  30. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  31. package/es/common/indicate.js +15 -8
  32. package/es/common/mimeClass.js +3 -4
  33. package/es/common/natcompare.js +1 -4
  34. package/es/defaultTinymceConfig.js +5 -3
  35. package/es/elementDenylist.js +1 -0
  36. package/es/enhance-user-content/doc_previews.js +17 -28
  37. package/es/enhance-user-content/enhance_user_content.js +28 -60
  38. package/es/enhance-user-content/external_links.js +5 -8
  39. package/es/enhance-user-content/index.js +1 -0
  40. package/es/enhance-user-content/instructure_helper.js +25 -38
  41. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  42. package/es/enhance-user-content/mathml.js +35 -82
  43. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  44. package/es/format-message.js +3 -4
  45. package/es/getThemeVars.js +8 -6
  46. package/es/getTranslations.js +1 -78
  47. package/es/index.js +3 -1
  48. package/es/rce/AlertMessageArea.js +1 -1
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +1 -0
  51. package/es/rce/RCE.js +12 -11
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +27 -10
  54. package/es/rce/RCEWrapper.js +167 -386
  55. package/es/rce/RCEWrapperProps.js +8 -3
  56. package/es/rce/RceHtmlEditor.js +5 -8
  57. package/es/rce/ResizeHandle.js +3 -8
  58. package/es/rce/RestoreAutoSaveModal.js +1 -2
  59. package/es/rce/ShowOnFocusButton/index.js +0 -6
  60. package/es/rce/StatusBar.js +8 -37
  61. package/es/rce/alertHandler.js +1 -4
  62. package/es/rce/contentInsertion.js +35 -57
  63. package/es/rce/contentInsertionUtils.js +6 -8
  64. package/es/rce/contentRendering.js +7 -12
  65. package/es/rce/customEvents.js +1 -0
  66. package/es/rce/editorLanguage.js +22 -10
  67. package/es/rce/indicatorRegion.js +6 -5
  68. package/es/rce/normalizeLocale.js +5 -3
  69. package/es/rce/normalizeProps.js +3 -1
  70. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  71. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  74. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  75. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  76. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  77. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  83. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  84. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  85. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  86. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  95. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  96. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  97. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  98. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  99. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  100. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  101. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  102. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  103. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  127. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  128. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  129. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  130. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  131. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  132. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  134. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  135. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  136. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  137. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  138. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  139. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  140. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  141. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  144. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  147. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  148. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  149. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  150. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  153. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  154. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  155. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  156. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  159. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  164. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  165. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  166. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  167. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  168. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  169. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  170. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  171. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  172. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  173. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  174. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  175. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  176. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  184. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  185. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  186. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  187. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  188. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  198. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  199. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  201. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  202. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  204. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  205. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  206. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  207. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  208. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  210. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  211. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  212. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  213. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  214. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  215. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  216. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  217. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  218. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  219. package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
  220. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  221. package/es/rce/plugins/shared/ColorInput.js +5 -14
  222. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  223. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  224. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  225. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  226. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  227. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  228. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  229. package/es/rce/plugins/shared/EventUtils.js +1 -3
  230. package/es/rce/plugins/shared/Filter.js +8 -38
  231. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  232. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  233. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  234. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  235. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  236. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  237. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  239. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  240. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  241. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  242. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  244. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  245. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  247. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  248. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  250. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  251. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  252. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  253. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  254. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  255. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  256. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  257. package/es/rce/plugins/shared/Previewable.js +1 -0
  258. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  259. package/es/rce/plugins/shared/StoreContext.js +1 -2
  260. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  261. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  262. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  263. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  264. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  265. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  266. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  267. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  268. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  269. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  270. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  271. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  272. package/es/rce/plugins/shared/Upload/index.js +1 -0
  273. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  274. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  275. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  276. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  277. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  278. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  279. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  280. package/es/rce/plugins/shared/dateUtils.js +1 -1
  281. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  282. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  283. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  284. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  285. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  286. package/es/rce/plugins/shared/fileShape.js +4 -9
  287. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  288. package/es/rce/plugins/shared/fileUtils.js +1 -2
  289. package/es/rce/plugins/shared/linkUtils.js +1 -16
  290. package/es/rce/plugins/shared/round.js +1 -0
  291. package/es/rce/plugins/shared/trayUtils.js +4 -3
  292. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  293. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  294. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  295. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  296. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  297. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  299. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  300. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  321. package/es/rce/root.js +9 -8
  322. package/es/rce/sanitizePlugins.js +1 -3
  323. package/es/rce/style.js +1 -4
  324. package/es/rce/tinyRCE.js +13 -9
  325. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  326. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  327. package/es/rce/transformContent.js +8 -10
  328. package/es/rce/types.js +1 -0
  329. package/es/rce/userOS.js +1 -1
  330. package/es/rce/wrapInitCb.js +50 -43
  331. package/es/rcs/api.js +61 -116
  332. package/es/rcs/buildError.js +5 -17
  333. package/es/rcs/fake.js +4 -13
  334. package/es/sidebar/actions/all_files.js +2 -0
  335. package/es/sidebar/actions/data.js +4 -7
  336. package/es/sidebar/actions/documents.js +9 -6
  337. package/es/sidebar/actions/files.js +3 -6
  338. package/es/sidebar/actions/filter.js +1 -0
  339. package/es/sidebar/actions/flickr.js +1 -1
  340. package/es/sidebar/actions/images.js +12 -11
  341. package/es/sidebar/actions/links.js +1 -0
  342. package/es/sidebar/actions/media.js +12 -10
  343. package/es/sidebar/actions/session.js +1 -3
  344. package/es/sidebar/actions/ui.js +1 -0
  345. package/es/sidebar/actions/upload.js +14 -39
  346. package/es/sidebar/containers/Sidebar.js +1 -2
  347. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  348. package/es/sidebar/dragHtml.js +5 -3
  349. package/es/sidebar/reducers/all_files.js +4 -3
  350. package/es/sidebar/reducers/collection.js +12 -13
  351. package/es/sidebar/reducers/collections.js +5 -5
  352. package/es/sidebar/reducers/documents.js +6 -13
  353. package/es/sidebar/reducers/files.js +3 -3
  354. package/es/sidebar/reducers/filter.js +1 -8
  355. package/es/sidebar/reducers/flickr.js +9 -9
  356. package/es/sidebar/reducers/folder.js +15 -15
  357. package/es/sidebar/reducers/folders.js +3 -3
  358. package/es/sidebar/reducers/images.js +3 -13
  359. package/es/sidebar/reducers/index.js +3 -1
  360. package/es/sidebar/reducers/media.js +6 -13
  361. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  362. package/es/sidebar/reducers/noop.js +1 -0
  363. package/es/sidebar/reducers/rootFolderId.js +1 -2
  364. package/es/sidebar/reducers/session.js +3 -3
  365. package/es/sidebar/reducers/ui.js +3 -16
  366. package/es/sidebar/reducers/upload.js +8 -40
  367. package/es/sidebar/store/configureStore.js +1 -0
  368. package/es/sidebar/store/initialState.js +13 -24
  369. package/es/translations/locales/ab.js +1 -0
  370. package/es/translations/locales/ar.js +67 -9
  371. package/es/translations/locales/ca.js +67 -9
  372. package/es/translations/locales/cs.js +1 -0
  373. package/es/translations/locales/cs_CZ.js +1 -0
  374. package/es/translations/locales/cy.js +67 -9
  375. package/es/translations/locales/da-x-k12.js +67 -9
  376. package/es/translations/locales/da.js +67 -9
  377. package/es/translations/locales/da_DK.js +1 -0
  378. package/es/translations/locales/de.js +67 -9
  379. package/es/translations/locales/el.js +4 -0
  380. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  381. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  382. package/es/translations/locales/en.js +72 -8
  383. package/es/translations/locales/en_AU.js +67 -9
  384. package/es/translations/locales/en_CA.js +67 -9
  385. package/es/translations/locales/en_CY.js +67 -9
  386. package/es/translations/locales/en_GB.js +67 -9
  387. package/es/translations/locales/en_NZ.js +1 -0
  388. package/es/translations/locales/en_SE.js +1 -0
  389. package/es/translations/locales/en_US.js +1 -0
  390. package/es/translations/locales/es.js +67 -9
  391. package/es/translations/locales/es_ES.js +67 -9
  392. package/es/translations/locales/es_GT.js +1 -0
  393. package/es/translations/locales/fa_IR.js +7 -0
  394. package/es/translations/locales/fi.js +67 -9
  395. package/es/translations/locales/fr.js +67 -9
  396. package/es/translations/locales/fr_CA.js +68 -10
  397. package/es/translations/locales/ga.js +5 -13
  398. package/es/translations/locales/he.js +7 -0
  399. package/es/translations/locales/hi.js +67 -9
  400. package/es/translations/locales/ht.js +67 -9
  401. package/es/translations/locales/hu.js +7 -6
  402. package/es/translations/locales/hu_HU.js +1 -0
  403. package/es/translations/locales/hy.js +1 -0
  404. package/es/translations/locales/id.js +67 -9
  405. package/es/translations/locales/id_ID.js +1 -0
  406. package/es/translations/locales/is.js +67 -9
  407. package/es/translations/locales/it.js +67 -9
  408. package/es/translations/locales/ja.js +67 -9
  409. package/es/translations/locales/ko.js +1 -0
  410. package/es/translations/locales/ko_KR.js +1 -0
  411. package/es/translations/locales/lt.js +1 -0
  412. package/es/translations/locales/lt_LT.js +1 -0
  413. package/es/translations/locales/mi.js +67 -9
  414. package/es/translations/locales/mn_MN.js +1 -0
  415. package/es/translations/locales/ms.js +67 -9
  416. package/es/translations/locales/nb-x-k12.js +67 -9
  417. package/es/translations/locales/nb.js +67 -9
  418. package/es/translations/locales/nl.js +67 -9
  419. package/es/translations/locales/nl_NL.js +1 -0
  420. package/es/translations/locales/nn.js +7 -6
  421. package/es/translations/locales/pl.js +67 -9
  422. package/es/translations/locales/pt.js +67 -9
  423. package/es/translations/locales/pt_BR.js +67 -9
  424. package/es/translations/locales/ro.js +1 -0
  425. package/es/translations/locales/ru.js +67 -9
  426. package/es/translations/locales/se.js +1 -0
  427. package/es/translations/locales/sl.js +67 -9
  428. package/es/translations/locales/sv-x-k12.js +67 -9
  429. package/es/translations/locales/sv.js +67 -9
  430. package/es/translations/locales/sv_SE.js +1 -0
  431. package/es/translations/locales/tg.js +1 -0
  432. package/es/translations/locales/th.js +67 -9
  433. package/es/translations/locales/th_TH.js +1 -0
  434. package/es/translations/locales/tl_PH.js +1 -0
  435. package/es/translations/locales/tr.js +7 -0
  436. package/es/translations/locales/uk_UA.js +7 -0
  437. package/es/translations/locales/vi.js +67 -9
  438. package/es/translations/locales/vi_VN.js +1 -0
  439. package/es/translations/locales/zh-Hans.js +67 -9
  440. package/es/translations/locales/zh-Hant.js +67 -9
  441. package/es/translations/locales/zh.js +67 -9
  442. package/es/translations/locales/zh_HK.js +67 -9
  443. package/es/translations/locales/zh_TW.Big5.js +1 -0
  444. package/es/translations/locales/zh_TW.js +1 -0
  445. package/es/translations/tinymce/ar_SA.js +1 -0
  446. package/es/translations/tinymce/fi.js +1 -0
  447. package/es/translations/tinymce/ga.js +1 -0
  448. package/es/translations/tinymce/id.js +1 -0
  449. package/es/translations/tinymce/ru.js +1 -0
  450. package/es/translations/tinymce/ru_RU.js +1 -0
  451. package/es/translations/tinymce/sl.js +1 -0
  452. package/es/translations/tinymce/sr.js +1 -0
  453. package/es/translations/tinymce/th.js +1 -0
  454. package/es/translations/tinymce/uk_UA.js +1 -0
  455. package/es/translations/tinymce/vi_VN.js +1 -0
  456. package/es/util/TypedDict.js +4 -2
  457. package/es/util/encrypted-storage.js +3 -13
  458. package/es/util/file-url-util.js +1 -6
  459. package/es/util/fullscreenHelpers.js +4 -1
  460. package/es/util/instui-icon-helper.js +4 -3
  461. package/es/util/loadingPlaceholder.js +38 -39
  462. package/es/util/simpleCache.js +0 -3
  463. package/es/util/string-util.js +1 -1
  464. package/es/util/textarea-editing-util.js +3 -7
  465. package/es/util/tinymce-plugin-util.js +0 -5
  466. package/es/util/url-util.js +16 -25
  467. package/eslint.config.js +239 -0
  468. package/jest.config.js +1 -1
  469. package/package.json +77 -82
  470. package/scripts/build-canvas +2 -1
  471. package/scripts/build.js +4 -4
  472. package/scripts/publish_to_npm.sh +1 -1
  473. package/testcafe/RCEWrapper.test.js +0 -1
  474. package/testcafe/StatusBar.test.js +0 -1
  475. package/testcafe/axe.test.js +3 -4
  476. package/testcafe/enhanceUserContent.test.js +0 -1
  477. package/tsconfig.json +20 -15
  478. package/.eslintrc +0 -45
  479. package/.prettierignore +0 -6
  480. package/es/common/components/FileTree/File.js +0 -64
  481. package/es/common/components/FileTree/Folder.js +0 -110
  482. package/es/common/components/FileTree/index.js +0 -84
  483. package/es/common/components/FileTree/styles.js +0 -72
  484. package/es/common/components/Loading.js +0 -83
@@ -1,5 +1,4 @@
1
1
  import _pt from "prop-types";
2
-
3
2
  /*
4
3
  * Copyright (C) 2019 - present Instructure, Inc.
5
4
  *
@@ -17,10 +16,12 @@ import _pt from "prop-types";
17
16
  * You should have received a copy of the GNU Affero General Public License along
18
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
18
  */
19
+
20
20
  import React, { useEffect, useRef, useState } from 'react';
21
21
  import { Button, CloseButton } from '@instructure/ui-buttons';
22
22
  import { Flex } from '@instructure/ui-flex';
23
23
  import { Heading } from '@instructure/ui-heading';
24
+ import { IconWarningSolid } from '@instructure/ui-icons';
24
25
  import { getTrayHeight } from '../../shared/trayUtils';
25
26
  import { View } from '@instructure/ui-view';
26
27
  import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
@@ -50,23 +51,20 @@ export default function FindReplaceTray(_ref) {
50
51
  const [alertReplaceText, setAlertReplaceText] = useState('');
51
52
  const trayRef = useRef(null);
52
53
  const liveRegionKey = useRef(0);
53
- const srDupKey = useRef(0); // moves RCE when tray opens/closes, copied from CanvasContentTray
54
-
54
+ const srDupKey = useRef(0);
55
+ // moves RCE when tray opens/closes, copied from CanvasContentTray
55
56
  useEffect(() => {
56
57
  var _trayRef$current;
57
-
58
58
  if (!hasOpened) return;
59
59
  let c = document.querySelector('[role="main"]');
60
60
  let target_w = 0;
61
61
  if (!c) return;
62
62
  const margin = window.getComputedStyle(c).direction === 'ltr' ? document.body.getBoundingClientRect().right - c.getBoundingClientRect().right : c.getBoundingClientRect().left;
63
63
  target_w = c.offsetWidth - ((_trayRef$current = trayRef.current) === null || _trayRef$current === void 0 ? void 0 : _trayRef$current.offsetWidth) + margin;
64
-
65
64
  if (target_w >= 320 && target_w < c.offsetWidth) {
66
65
  c.style.boxSizing = 'border-box';
67
66
  c.style.width = `${target_w}px`;
68
67
  }
69
-
70
68
  return () => {
71
69
  c = document.querySelector('[role="main"]');
72
70
  if (!c) return;
@@ -76,10 +74,9 @@ export default function FindReplaceTray(_ref) {
76
74
  useEffect(() => {
77
75
  if (initialText) {
78
76
  onFind(initialText);
79
- } // eslint-disable-next-line react-hooks/exhaustive-deps
80
-
77
+ }
78
+ // eslint-disable-next-line react-hooks/exhaustive-deps
81
79
  }, []);
82
-
83
80
  function usePrevious(value) {
84
81
  const ref = useRef();
85
82
  useEffect(() => {
@@ -87,7 +84,6 @@ export default function FindReplaceTray(_ref) {
87
84
  }, [value]);
88
85
  return ref.current;
89
86
  }
90
-
91
87
  const prepend = selectionContext[0];
92
88
  const append = selectionContext[1];
93
89
  const srContextMsg = formatMessage('{prepend}{findText}{append}', {
@@ -97,15 +93,12 @@ export default function FindReplaceTray(_ref) {
97
93
  });
98
94
  const previousSrMsg = usePrevious(srContextMsg);
99
95
  const previousFindText = usePrevious(findText);
100
-
101
96
  const handleTextChange = e => {
102
97
  setFindText(e.target.value);
103
98
  onFind(e.target.value);
104
99
  };
105
-
106
100
  const handleFindKeyDown = e => {
107
101
  if (e.key !== 'Enter') return;
108
-
109
102
  if (e.shiftKey) {
110
103
  if (isButtonDisabled('previous')) return;
111
104
  onPrevious();
@@ -115,33 +108,27 @@ export default function FindReplaceTray(_ref) {
115
108
  onFind(findText);
116
109
  return;
117
110
  }
118
-
119
111
  if (isButtonDisabled('next')) return;
120
112
  onNext();
121
113
  }
122
114
  };
123
-
124
115
  const handleReplaceKeyDown = e => {
125
116
  if (e.key !== 'Enter') return;
126
117
  if (isButtonDisabled('replace')) return;
127
118
  const forward = !e.shiftKey;
128
119
  replace(replaceText, forward, false);
129
120
  };
130
-
131
121
  const replace = (newText, forward, all) => {
132
122
  onReplace(newText, forward, all);
133
-
134
123
  if (all) {
135
124
  setShowReplaceAlert('replaceAll');
136
125
  } else {
137
126
  setShowReplaceAlert('replace');
138
127
  }
139
-
140
128
  setAlertFindText(findText);
141
129
  setAlertReplaceText(newText);
142
130
  liveRegionKey.current++;
143
131
  };
144
-
145
132
  const alertText = showReplaceAlert === '' ? '' : showReplaceAlert === 'replace' ? formatMessage('Replaced {alertFindText} with {alertReplaceText}', {
146
133
  alertFindText,
147
134
  alertReplaceText
@@ -149,13 +136,11 @@ export default function FindReplaceTray(_ref) {
149
136
  alertFindText,
150
137
  alertReplaceText
151
138
  });
152
-
153
139
  const renderReplaceAlert = () => {
154
140
  if (!showReplaceAlert) {
155
141
  liveRegionKey.current = 0;
156
142
  return /*#__PURE__*/React.createElement(React.Fragment, null);
157
143
  }
158
-
159
144
  return /*#__PURE__*/React.createElement(Alert, {
160
145
  variant: "success",
161
146
  renderCloseButtonLabel: "Close Alert",
@@ -165,26 +150,31 @@ export default function FindReplaceTray(_ref) {
165
150
  timeout: 3000
166
151
  }, alertText);
167
152
  };
168
-
169
153
  const renderScreenReaderAlert = () => {
170
154
  return /*#__PURE__*/React.createElement(ScreenReaderContent, null, alertText);
171
155
  };
172
-
173
- const errMsg = formatMessage('No results found');
156
+ const errMsg = /*#__PURE__*/React.createElement(Flex, {
157
+ gap: "xx-small",
158
+ alignItems: "center"
159
+ }, /*#__PURE__*/React.createElement(IconWarningSolid, {
160
+ color: "error",
161
+ "data-testid": "error-icon"
162
+ }), /*#__PURE__*/React.createElement(Text, {
163
+ color: "danger",
164
+ size: "small"
165
+ }, formatMessage('No results found')));
174
166
  const messages = findText && max === 0 ? [{
175
167
  text: errMsg,
176
168
  type: 'error'
177
169
  }] : [];
178
-
179
170
  const resultText = () => {
180
- const srErrMsg = messages.length === 0 ? '' : errMsg; // resolves issue where focus is lost when this (dis)appears
181
-
171
+ const srErrMsg = messages.length === 0 ? '' : errMsg;
172
+ // resolves issue where focus is lost when this (dis)appears
182
173
  if (max === 0) {
183
174
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScreenReaderContent, {
184
175
  "aria-live": "polite"
185
176
  }, srErrMsg), /*#__PURE__*/React.createElement(Text, null));
186
177
  }
187
-
188
178
  const msg = formatMessage('{index} of {max}', {
189
179
  index,
190
180
  max
@@ -192,12 +182,12 @@ export default function FindReplaceTray(_ref) {
192
182
  const srResultMsg = formatMessage('Result {index} of {max}.', {
193
183
  index,
194
184
  max
195
- }); // necessary to force screen reader to read the same message while typing
185
+ });
196
186
 
187
+ // necessary to force screen reader to read the same message while typing
197
188
  if (srContextMsg === previousSrMsg && previousFindText != findText) {
198
189
  srDupKey.current++;
199
190
  } else srDupKey.current = 0;
200
-
201
191
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(View, {
202
192
  as: "span",
203
193
  key: srDupKey.current,
@@ -208,24 +198,19 @@ export default function FindReplaceTray(_ref) {
208
198
  "aria-hidden": "true"
209
199
  }, msg));
210
200
  };
211
-
212
201
  const isButtonDisabled = button => {
213
202
  switch (button) {
214
203
  case 'next':
215
204
  case 'previous':
216
205
  return max < 2;
217
-
218
206
  case 'replace':
219
207
  return !replaceText || index === 0;
220
-
221
208
  case 'replaceAll':
222
209
  return !replaceText || max < 2 || index === 0;
223
-
224
210
  default:
225
211
  return false;
226
212
  }
227
213
  };
228
-
229
214
  return /*#__PURE__*/React.createElement(Tray, {
230
215
  "data-mce-component": true,
231
216
  label: formatMessage('Find and Replace'),
@@ -1,5 +1,4 @@
1
1
  import _pt from "prop-types";
2
-
3
2
  /*
4
3
  * Copyright (C) 2019 - present Instructure, Inc.
5
4
  *
@@ -17,6 +16,7 @@ import _pt from "prop-types";
17
16
  * You should have received a copy of the GNU Affero General Public License along
18
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
18
  */
19
+
20
20
  import React, { useState } from 'react';
21
21
  import FindReplaceTray from './FindReplaceTray';
22
22
  export default function FindReplaceTrayController(_ref) {
@@ -31,15 +31,12 @@ export default function FindReplaceTrayController(_ref) {
31
31
  const [findIndex, setFindIndex] = useState(0);
32
32
  const [findCount, setFindCount] = useState(0);
33
33
  const [selectionContext, setSelectionContext] = useState(['', '']);
34
-
35
34
  const updateSelectionContext = () => {
36
35
  const srText = getSelectionContext();
37
36
  setSelectionContext(srText);
38
37
  };
39
-
40
38
  const newFindIndex = direction => {
41
39
  let newIndex = 0;
42
-
43
40
  if (findCount === 0) {
44
41
  newIndex = 0;
45
42
  } else if (direction === 1) {
@@ -53,34 +50,28 @@ export default function FindReplaceTrayController(_ref) {
53
50
  newIndex = findCount;
54
51
  } else newIndex = findIndex - 1;
55
52
  }
56
-
57
53
  return newIndex;
58
54
  };
59
-
60
55
  const done = () => {
61
56
  plugin.done(false);
62
57
  setFindCount(0);
63
58
  setFindIndex(0);
64
59
  setSelectionContext([]);
65
60
  };
66
-
67
61
  const handleDismiss = () => {
68
62
  done();
69
63
  onDismiss();
70
64
  };
71
-
72
65
  const handleNext = () => {
73
66
  plugin.next();
74
67
  setFindIndex(newFindIndex(1));
75
68
  updateSelectionContext();
76
69
  };
77
-
78
70
  const handlePrevious = () => {
79
71
  plugin.prev();
80
72
  setFindIndex(newFindIndex(-1));
81
73
  updateSelectionContext();
82
74
  };
83
-
84
75
  const handleFind = text => {
85
76
  if (!text) {
86
77
  done();
@@ -92,34 +83,28 @@ export default function FindReplaceTrayController(_ref) {
92
83
  updateSelectionContext();
93
84
  }
94
85
  };
95
-
96
86
  const handleReplace = function (text) {
97
87
  let forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
98
88
  let all = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
99
89
  if (!text) return;
100
90
  undoManager === null || undoManager === void 0 ? void 0 : undoManager.add();
101
91
  plugin.replace(text, forward, all);
102
-
103
92
  if (findCount === 1 || all) {
104
93
  done();
105
94
  return;
106
- } // we can't just find again, because that will reset index to 1
107
-
108
-
95
+ }
96
+ // we can't just find again, because that will reset index to 1
109
97
  let newIndex;
110
98
  const newFindCount = findCount - 1;
111
-
112
99
  if (forward) {
113
100
  newIndex = findIndex === findCount ? 1 : findIndex;
114
101
  } else {
115
102
  newIndex = findIndex === 1 ? newFindCount : findIndex - 1;
116
103
  }
117
-
118
104
  setFindCount(newFindCount);
119
105
  setFindIndex(newIndex);
120
106
  updateSelectionContext();
121
107
  };
122
-
123
108
  return /*#__PURE__*/React.createElement(FindReplaceTray, {
124
109
  onRequestClose: handleDismiss,
125
110
  onNext: handleNext,
@@ -15,49 +15,42 @@
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
- const NUMBER_OF_WORDS = 10;
19
18
 
19
+ const NUMBER_OF_WORDS = 10;
20
20
  const countWords = text => {
21
21
  // ignore text before the first whitespace because it is part of the selected text
22
22
  const countText = text.split(/\s+/).slice(1).join(' ');
23
23
  const count = countText.trim().split(/\s+/).length;
24
24
  return count;
25
25
  };
26
-
27
26
  const getAfterText = startingElement => {
28
27
  let text = '';
29
28
  let element = startingElement.nextSibling;
30
-
31
29
  while (element) {
32
30
  text += element.textContent;
33
31
  element = element.nextSibling;
34
32
  }
35
-
36
33
  if (text.includes('.')) {
37
34
  const index = text.indexOf('.');
38
35
  text = text.substring(0, index + 1);
39
36
  }
40
-
41
37
  if (countWords(text) > NUMBER_OF_WORDS) {
42
38
  text = text.split(/\s+/).slice(0, NUMBER_OF_WORDS + 1).join(' ');
43
39
  }
44
-
45
40
  return text;
46
41
  };
47
-
48
42
  const getBeforeText = (startingElement, wordCount) => {
49
43
  let text = '';
50
44
  let element = startingElement.previousSibling;
51
-
52
45
  while (element) {
53
46
  text = element.textContent + text;
54
47
  element = element.previousSibling;
55
48
  }
56
-
57
49
  text = text.split(/\s+/).slice(-wordCount - 1).join(' ');
58
50
  return text;
59
51
  };
60
52
 
53
+ // eslint-disable-next-line no-undef
61
54
  export const getSelectionContext = elements => {
62
55
  const firstSelected = elements[0];
63
56
  const lastSelected = elements[elements.length - 1];
@@ -15,19 +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 tinymce from 'tinymce';
19
20
  import formatMessage from '../../../format-message';
20
21
  import clickCallback from './clickCallback';
21
22
  tinymce.PluginManager.add('instructure_search_and_replace', function (editor) {
22
23
  var _editor$plugins;
23
-
24
24
  // We use the searchreplace plugins API
25
25
  if (!((_editor$plugins = editor.plugins) !== null && _editor$plugins !== void 0 && _editor$plugins.searchreplace)) return;
26
-
27
26
  const launchFindModal = ed => () => {
28
27
  clickCallback(ed, document);
29
28
  };
30
-
31
29
  editor.addCommand('launch_instructure_search_and_replace', launchFindModal(editor));
32
30
  editor.ui.registry.addMenuItem('instructure_search_and_replace', {
33
31
  text: formatMessage('Find and Replace'),
@@ -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 tinymce from 'tinymce';
19
20
  import { isStudioEmbeddedMedia, handleBeforeObjectSelected } from '../shared/StudioLtiSupportUtils';
20
21
  import VideoTrayController from '../instructure_record/VideoOptionsTray/TrayController';
@@ -25,7 +26,6 @@ tinymce.PluginManager.add('instructure_studio_media_options', function (ed) {
25
26
  onAction() {
26
27
  studioTrayController.showTrayForEditor(ed);
27
28
  },
28
-
29
29
  text: formatMessage('Studio Media Options'),
30
30
  tooltip: formatMessage('Show Studio media options')
31
31
  });
@@ -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 { generateRows, HEADERS } from './utils/tableContent';
@@ -25,22 +26,18 @@ export default function (ed, document, options) {
25
26
  WordCountModal
26
27
  } = _ref;
27
28
  let container = document.querySelector(`#${MODAL_ID}`);
28
-
29
29
  if (!container) {
30
30
  container = document.createElement('div');
31
31
  container.id = MODAL_ID;
32
32
  document.body.appendChild(container);
33
33
  }
34
-
35
34
  const handleDismiss = () => {
36
35
  if (container) {
37
36
  ReactDOM.unmountComponentAtNode(container);
38
37
  }
39
-
40
38
  ed.focus(options.skipEditorFocus);
41
39
  };
42
-
43
- ReactDOM.render( /*#__PURE__*/React.createElement(WordCountModal, {
40
+ ReactDOM.render(/*#__PURE__*/React.createElement(WordCountModal, {
44
41
  headers: HEADERS,
45
42
  rows: generateRows(ed),
46
43
  onDismiss: handleDismiss
@@ -1,6 +1,4 @@
1
1
  import _pt from "prop-types";
2
- // @ts-nocheck
3
-
4
2
  /*
5
3
  * Copyright (C) 2022 - present Instructure, Inc.
6
4
  *
@@ -18,6 +16,7 @@ import _pt from "prop-types";
18
16
  * You should have received a copy of the GNU Affero General Public License along
19
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
20
18
  */
19
+
21
20
  import React from 'react';
22
21
  import { Modal } from '@instructure/ui-modal';
23
22
  import { BaseButton, CloseButton } from '@instructure/ui-buttons';
@@ -25,7 +24,6 @@ import { Heading } from '@instructure/ui-heading';
25
24
  import { Table } from '@instructure/ui-table';
26
25
  import formatMessage from '../../../../format-message';
27
26
  import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
28
-
29
27
  const renderBody = (headers, rows) => {
30
28
  return /*#__PURE__*/React.createElement(Table, {
31
29
  caption: formatMessage('Word Count')
@@ -55,7 +53,6 @@ const renderBody = (headers, rows) => {
55
53
  }, selectionCount));
56
54
  })));
57
55
  };
58
-
59
56
  export const WordCountModal = _ref3 => {
60
57
  let {
61
58
  headers,
@@ -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 tinymce from 'tinymce';
19
20
  import formatMessage from '../../../format-message';
20
21
  import clickCallback from './clickCallback';
@@ -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
  export const IGNORE_WORDCOUNT_ATTRIBUTE = 'data-ignore-wordcount';
19
20
  export const countWords = node => {
20
21
  if (node.getAttribute(IGNORE_WORDCOUNT_ATTRIBUTE) === 'chars-only') return 0;
@@ -26,7 +27,6 @@ export const countWords = node => {
26
27
  export const countCharsNoSpaces = node => {
27
28
  const textContent = (node === null || node === void 0 ? void 0 : node.innerText) || '';
28
29
  const matches = textContent.match(/ /g); // a single space
29
-
30
30
  const spaces = matches ? matches.length : 0;
31
31
  return countChars(node) - spaces;
32
32
  };
@@ -34,21 +34,17 @@ export const countChars = node => {
34
34
  const textContent = (node === null || node === void 0 ? void 0 : node.innerText) || '';
35
35
  const iterator = textContent[Symbol.iterator]();
36
36
  let count = 0;
37
-
38
37
  while (!iterator.next().done) {
39
38
  count++;
40
39
  }
41
-
42
40
  return count;
43
41
  };
44
42
  export const callbackForCategory = category => {
45
43
  switch (category) {
46
44
  case 'words':
47
45
  return countWords;
48
-
49
46
  case 'chars-no-spaces':
50
47
  return countCharsNoSpaces;
51
-
52
48
  case 'chars':
53
49
  return countChars;
54
50
  }
@@ -61,14 +57,11 @@ export const countShouldIgnore = (ed, scope, category) => {
61
57
  };
62
58
  export const getTinymceCount = (ed, scope, category) => {
63
59
  const wc = ed.plugins.wordcount[scope];
64
-
65
60
  switch (category) {
66
61
  case 'words':
67
62
  return wc.getWordCount();
68
-
69
63
  case 'chars-no-spaces':
70
64
  return wc.getCharacterCountWithoutSpaces();
71
-
72
65
  case 'chars':
73
66
  return wc.getCharacterCount();
74
67
  }
@@ -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 { countContent } from './countContent';
19
20
  import formatMessage from '../../../../format-message';
20
21
  export const HEADERS = [{