@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
@@ -13,6 +13,7 @@
13
13
  //
14
14
  // You should have received a copy of the GNU Affero General Public License along
15
15
  // with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
16
17
  import React from 'react';
17
18
  import formatMessage from '../format-message';
18
19
  import _ from 'lodash';
@@ -26,13 +27,9 @@ import { getIconFromType, isImage } from '../rce/plugins/shared/fileTypeUtils';
26
27
  import { showFlashError } from '../common/FlashAlert';
27
28
  import natcompare from '../common/natcompare';
28
29
  export const PENDING_MEDIA_ENTRY_ID = 'maybe';
29
-
30
30
  class FileBrowser extends React.Component {
31
31
  constructor(_props2) {
32
- var _this;
33
-
34
32
  super(_props2);
35
- _this = this;
36
33
  this.fetchSubFolders = _.memoize(id => {
37
34
  this.source.fetchBookmarkedData(this.source.fetchSubFolders.bind(this.source), {
38
35
  folderId: id,
@@ -41,31 +38,24 @@ class FileBrowser extends React.Component {
41
38
  this.populateCollectionsList(result.folders);
42
39
  }, error => {
43
40
  this.props.onLoading(false);
44
- /* eslint-disable no-console */
45
-
46
41
  console.error('Error fetching data from API');
47
42
  console.error(error);
48
43
  });
49
44
  });
50
-
51
- this.populateCollectionsList = function (folderList) {
52
- let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
53
-
54
- _this.setState((state, props) => {
45
+ this.populateCollectionsList = (folderList, opts = {}) => {
46
+ this.setState((state, props) => {
55
47
  const newCollections = _.cloneDeep(state.collections);
56
-
57
48
  folderList.forEach(folder => {
58
- const collection = _this.formatFolderInfo(folder, { ...opts,
49
+ const collection = this.formatFolderInfo(folder, {
50
+ ...opts,
59
51
  searchString: props.searchString
60
52
  });
61
-
62
53
  newCollections[collection.id] = collection;
63
54
  const parentId = folder.parentId || 0;
64
55
  const collectionCollections = newCollections[parentId].collections;
65
-
66
56
  if (!collectionCollections.includes(collection.id)) {
67
57
  collectionCollections.push(collection.id);
68
- newCollections[parentId].collections = _this.orderedIdsFromList(newCollections, collectionCollections);
58
+ newCollections[parentId].collections = this.orderedIdsFromList(newCollections, collectionCollections);
69
59
  }
70
60
  });
71
61
  return {
@@ -73,20 +63,16 @@ class FileBrowser extends React.Component {
73
63
  };
74
64
  });
75
65
  };
76
-
77
66
  this.populateItemsList = fileList => {
78
67
  this.setState((state, _props) => {
79
68
  const newItems = _.cloneDeep(state.items);
80
-
81
69
  const newCollections = _.cloneDeep(state.collections);
82
-
83
70
  fileList.forEach(file => {
84
71
  if (this.contentTypeIsAllowed(file.type)) {
85
72
  const item = this.formatFileInfo(file);
86
73
  newItems[item.id] = item;
87
74
  const folder_id = file.folderId;
88
75
  const collectionItems = newCollections[folder_id].items;
89
-
90
76
  if (!collectionItems.includes(item.id)) {
91
77
  collectionItems.push(item.id);
92
78
  newCollections[folder_id].items = this.orderedIdsFromList(newItems, collectionItems);
@@ -99,7 +85,6 @@ class FileBrowser extends React.Component {
99
85
  };
100
86
  });
101
87
  };
102
-
103
88
  this.onFolderToggle = folder => {
104
89
  const folderId = folder.id;
105
90
  this.setState((state, _props) => {
@@ -109,7 +94,6 @@ class FileBrowser extends React.Component {
109
94
  const {
110
95
  openFolders
111
96
  } = state;
112
-
113
97
  if (!collection.locked && openFolders.includes(folderId)) {
114
98
  newFolders = newFolders.concat(openFolders.filter(id => id !== folderId));
115
99
  } else if (!collection.locked) {
@@ -118,7 +102,6 @@ class FileBrowser extends React.Component {
118
102
  newCollections = _.cloneDeep(state.collections);
119
103
  newCollections[folderId] = collection;
120
104
  }
121
-
122
105
  return {
123
106
  openFolders: newFolders,
124
107
  uploadFolder: folderId,
@@ -127,24 +110,20 @@ class FileBrowser extends React.Component {
127
110
  }, () => {
128
111
  if (this.state.openFolders.includes(folderId)) {
129
112
  const collection = this.state.collections[folderId];
130
-
131
113
  if (!collection.locked) {
132
114
  this.getFolderData(folderId);
133
115
  }
134
116
  }
135
117
  });
136
118
  };
137
-
138
119
  this.onFileClick = file => {
139
120
  const selectedItem = this.state.items[file.id];
140
121
  if (selectedItem.isDisabled) return;
141
122
  this.props.selectFile(selectedItem);
142
123
  };
143
-
144
124
  this.setFailureMessage = message => {
145
125
  showFlashError(message)();
146
126
  };
147
-
148
127
  this.state = {
149
128
  collections: {
150
129
  0: {
@@ -159,11 +138,9 @@ class FileBrowser extends React.Component {
159
138
  this.source = _props2.source;
160
139
  this.updatePropsWithThumbnailOrIcon = this.updatePropsWithThumbnailOrIcon.bind(this);
161
140
  }
162
-
163
141
  componentDidMount() {
164
142
  this.getRootFolders();
165
143
  }
166
-
167
144
  componentDidUpdate() {
168
145
  this.state.openFolders.forEach(fid => {
169
146
  if (this.props.searchString !== this.state.collections[fid].searchString) {
@@ -171,7 +148,6 @@ class FileBrowser extends React.Component {
171
148
  }
172
149
  });
173
150
  }
174
-
175
151
  getContextName(contextType) {
176
152
  if (contextType === 'course') {
177
153
  return formatMessage('Course files');
@@ -179,34 +155,28 @@ class FileBrowser extends React.Component {
179
155
  return formatMessage('Group files');
180
156
  }
181
157
  }
182
-
183
158
  getRootFolders() {
184
159
  if (this.props.useContextAssets) {
185
160
  this.getContextFolders();
186
161
  }
187
-
188
162
  this.getUserFolders();
189
163
  }
190
-
191
164
  getUserFolders() {
192
165
  this.getRootFolderData('user', 'self', {
193
166
  name: formatMessage('My files')
194
167
  });
195
168
  }
196
-
197
169
  getContextFolders() {
198
170
  const {
199
171
  type,
200
172
  id
201
173
  } = this.props.context;
202
-
203
174
  if (type && id) {
204
175
  this.getRootFolderData(type, id, {
205
176
  name: this.getContextName(type)
206
177
  });
207
178
  }
208
179
  }
209
-
210
180
  increaseLoadingCount() {
211
181
  let {
212
182
  loadingCount
@@ -216,7 +186,6 @@ class FileBrowser extends React.Component {
216
186
  loadingCount
217
187
  });
218
188
  }
219
-
220
189
  decreaseLoadingCount() {
221
190
  let {
222
191
  loadingCount
@@ -226,9 +195,7 @@ class FileBrowser extends React.Component {
226
195
  loadingCount
227
196
  });
228
197
  }
229
-
230
- getRootFolderData(context, contextId) {
231
- let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
198
+ getRootFolderData(context, contextId, opts = {}) {
232
199
  this.increaseLoadingCount();
233
200
  this.source.fetchRootFolder({
234
201
  contextType: context,
@@ -237,29 +204,25 @@ class FileBrowser extends React.Component {
237
204
  this.populateRootFolder(result.folders[0], opts);
238
205
  }).catch(error => {
239
206
  this.decreaseLoadingCount();
240
-
241
207
  if (error.response && error.response.status !== 401) {
242
208
  this.setFailureMessage(formatMessage('Something went wrong'));
243
209
  }
244
210
  });
245
211
  }
246
-
247
- populateRootFolder(data) {
248
- let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
212
+ populateRootFolder(data, opts = {}) {
249
213
  this.decreaseLoadingCount();
250
214
  this.populateCollectionsList([data], opts);
251
215
  this.getFolderData(data.id);
252
- } // Memoized function to fetch all subfolders
253
- // of the given folder ID, handing pagination
216
+ }
254
217
 
218
+ // Memoized function to fetch all subfolders
219
+ // of the given folder ID, handing pagination
255
220
 
256
221
  fetchFiles(id) {
257
- var _this$state$collectio, _this$state$collectio2;
258
-
259
222
  this.source.fetchBookmarkedData(this.source.fetchFilesForFolder.bind(this.source), {
260
223
  searchString: this.props.searchString,
261
224
  perPage: 50,
262
- filesUrl: (_this$state$collectio = this.state.collections[id]) === null || _this$state$collectio === void 0 ? void 0 : (_this$state$collectio2 = _this$state$collectio.api) === null || _this$state$collectio2 === void 0 ? void 0 : _this$state$collectio2.filesUrl
225
+ filesUrl: this.state.collections[id]?.api?.filesUrl
263
226
  }, result => {
264
227
  this.populateItemsList(result.files);
265
228
  }, error => {
@@ -267,13 +230,14 @@ class FileBrowser extends React.Component {
267
230
  console.error(error);
268
231
  });
269
232
  }
270
-
271
233
  getFolderData(id) {
272
234
  if (!this.state.collections[id].locked) {
273
235
  this.setState((state, _props) => {
274
- const collections = { ...state.collections
236
+ const collections = {
237
+ ...state.collections
275
238
  };
276
- const collection = { ...collections[id]
239
+ const collection = {
240
+ ...collections[id]
277
241
  };
278
242
  collection.items = [];
279
243
  collection.searchString = this.props.searchString;
@@ -287,21 +251,15 @@ class FileBrowser extends React.Component {
287
251
  });
288
252
  }
289
253
  }
290
-
291
254
  contentTypeIsAllowed(contentType) {
292
255
  for (const pattern of this.props.contentTypes) {
293
256
  if (minimatch(contentType, pattern)) {
294
257
  return true;
295
258
  }
296
259
  }
297
-
298
260
  return false;
299
261
  }
300
-
301
- formatFolderInfo(apiFolder) {
302
- var _apiFolder$contextTyp;
303
-
304
- let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
262
+ formatFolderInfo(apiFolder, opts = {}) {
305
263
  const descriptor = apiFolder.lockedForUser ? formatMessage('Locked') : null;
306
264
  const folder = {
307
265
  api: apiFolder,
@@ -309,7 +267,7 @@ class FileBrowser extends React.Component {
309
267
  collections: [],
310
268
  items: [],
311
269
  name: apiFolder.name,
312
- context: `/${(_apiFolder$contextTyp = apiFolder.contextType) === null || _apiFolder$contextTyp === void 0 ? void 0 : _apiFolder$contextTyp.toLowerCase()}s/${apiFolder.contextId}`,
270
+ context: `/${apiFolder.contextType?.toLowerCase()}s/${apiFolder.contextId}`,
313
271
  canUpload: apiFolder.canUpload,
314
272
  locked: apiFolder.lockedForUser,
315
273
  descriptor,
@@ -322,14 +280,12 @@ class FileBrowser extends React.Component {
322
280
  });
323
281
  return folder;
324
282
  }
325
-
326
283
  updatePropsWithThumbnailOrIcon(props) {
327
284
  const {
328
285
  id
329
286
  } = props;
330
287
  const file = this.state.items[id].api;
331
288
  let thumbnail, itemIcon;
332
-
333
289
  if (isImage(file.type)) {
334
290
  if (file.thumbnailUrl) {
335
291
  thumbnail = file.thumbnailUrl;
@@ -339,20 +295,17 @@ class FileBrowser extends React.Component {
339
295
  } else {
340
296
  itemIcon = getIconFromType(file.type);
341
297
  }
342
-
343
298
  const containerRef = node => {
344
299
  if (node && !node.title && props.name) node.title = props.name;
345
300
  };
346
-
347
- return { ...props,
301
+ return {
302
+ ...props,
348
303
  thumbnail,
349
304
  itemIcon,
350
305
  containerRef
351
306
  };
352
307
  }
353
-
354
- formatFileInfo(apiFile) {
355
- let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
308
+ formatFileInfo(apiFile, opts = {}) {
356
309
  const {
357
310
  collections
358
311
  } = this.state;
@@ -367,19 +320,15 @@ class FileBrowser extends React.Component {
367
320
  alt: apiFile.name,
368
321
  ...opts
369
322
  };
370
-
371
323
  if (apiFile.iframeUrl) {
372
324
  // it's a media_object
373
325
  file.src = apiFile.iframeUrl;
374
326
  }
375
-
376
327
  if (isMediaPending) {
377
328
  file.descriptor = formatMessage('Media file is processing. Please try again later.');
378
329
  }
379
-
380
330
  return file;
381
331
  }
382
-
383
332
  orderedIdsFromList(list, ids) {
384
333
  try {
385
334
  const sortedIds = ids.sort((a, b) => natcompare.strings(list[a].name, list[b].name));
@@ -389,7 +338,6 @@ class FileBrowser extends React.Component {
389
338
  return ids;
390
339
  }
391
340
  }
392
-
393
341
  findFolderForFile(file) {
394
342
  const {
395
343
  collections
@@ -400,7 +348,6 @@ class FileBrowser extends React.Component {
400
348
  });
401
349
  return collections[folderKey];
402
350
  }
403
-
404
351
  renderLoading() {
405
352
  if (this.state.loadingCount > 0) {
406
353
  return /*#__PURE__*/React.createElement(Spinner, {
@@ -411,7 +358,6 @@ class FileBrowser extends React.Component {
411
358
  return null;
412
359
  }
413
360
  }
414
-
415
361
  render() {
416
362
  const element = /*#__PURE__*/React.createElement("div", {
417
363
  className: "file-browser__container"
@@ -434,9 +380,7 @@ class FileBrowser extends React.Component {
434
380
  }), this.renderLoading()));
435
381
  return element;
436
382
  }
437
-
438
383
  }
439
-
440
384
  FileBrowser.propTypes = {
441
385
  allowUpload: PropTypes.bool,
442
386
  selectFile: PropTypes.func.isRequired,
@@ -15,28 +15,25 @@
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
  Date.CultureInfo = {
19
20
  /* Culture Name */
20
21
  name: 'en-US',
21
22
  englishName: 'English (United States)',
22
23
  nativeName: 'English (United States)',
23
-
24
24
  /* Day Name Strings */
25
25
  dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
26
26
  abbreviatedDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
27
27
  shortestDayNames: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
28
28
  firstLetterDayNames: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
29
-
30
29
  /* Month Name Strings */
31
30
  monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
32
31
  abbreviatedMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
33
-
34
32
  /* AM/PM Designators */
35
33
  amDesignator: 'AM',
36
34
  pmDesignator: 'PM',
37
35
  firstDayOfWeek: 0,
38
36
  twoDigitYearMax: 2029,
39
-
40
37
  /**
41
38
  * The dateElementOrder is based on the order of the
42
39
  * format specifiers in the formatPatterns.DatePattern.
@@ -55,7 +52,6 @@ Date.CultureInfo = {
55
52
  * string being parsed.
56
53
  */
57
54
  dateElementOrder: 'mdy',
58
-
59
55
  /* Standard date and time format patterns */
60
56
  formatPatterns: {
61
57
  shortDate: 'M/d/yyyy',
@@ -69,7 +65,6 @@ Date.CultureInfo = {
69
65
  monthDay: 'MMMM dd',
70
66
  yearMonth: 'MMMM, yyyy'
71
67
  },
72
-
73
68
  /**
74
69
  * NOTE: If a string format is not parsing correctly, but
75
70
  * you would expect it parse, the problem likely lies below.
@@ -97,6 +92,7 @@ Date.CultureInfo = {
97
92
  *
98
93
  * As well, please review the list of "Future Strings" section below.
99
94
  */
95
+
100
96
  regexPatterns: {
101
97
  jan: /^jan(uary)?/i,
102
98
  feb: /^feb(ruary)?/i,
@@ -171,6 +167,7 @@ Date.CultureInfo = {
171
167
  offset: '-0700'
172
168
  }]
173
169
  };
170
+
174
171
  /** ******************
175
172
  ** Future Strings **
176
173
  ********************
@@ -40,6 +40,7 @@
40
40
  * type: one of ['info', 'success', 'warning', 'error']
41
41
  * default is 'info' unless an error object is passed in, else is 'error'
42
42
  */
43
+
43
44
  import React from 'react';
44
45
  import PropTypes from 'prop-types';
45
46
  import ReactDOM from 'react-dom';
@@ -51,32 +52,27 @@ import { PresentationContent, ScreenReaderContent } from '@instructure/ui-a11y-c
51
52
  import { Transition } from '@instructure/ui-motion';
52
53
  import RCEGlobals from '../rce/RCEGlobals';
53
54
  const messageHolderId = 'flashalert_message_holder'; // specs fail if I reuse jquery's elements
54
-
55
55
  const screenreaderMessageHolderId = 'flash_screenreader_holder';
56
56
  const TIMEOUT = 10000;
57
-
58
57
  function getLiveRegion() {
59
58
  // return element where flash screenreader messages go.
60
59
  // create if necessary
61
60
  let liveRegion = document.getElementById(screenreaderMessageHolderId);
62
-
63
61
  if (!liveRegion) {
64
62
  liveRegion = document.createElement('div');
65
63
  liveRegion.id = screenreaderMessageHolderId;
66
64
  liveRegion.setAttribute('role', 'alert');
67
65
  document.body.appendChild(liveRegion);
68
66
  }
69
-
70
67
  return liveRegion;
71
- } // An Alert with a message and "Details" button which surfaces
68
+ }
69
+
70
+ // An Alert with a message and "Details" button which surfaces
72
71
  // more info about the error when pressed.
73
72
  // Is displayed at the top of the document, and will close itself after a while
74
-
75
-
76
73
  export default class FlashAlert extends React.Component {
77
74
  constructor(props) {
78
75
  super(props);
79
-
80
76
  this.showDetails = () => {
81
77
  this.setState({
82
78
  showDetails: true
@@ -84,7 +80,6 @@ export default class FlashAlert extends React.Component {
84
80
  clearTimeout(this.timerId);
85
81
  this.timerId = setTimeout(() => this.closeAlert(), this.props.timeout);
86
82
  };
87
-
88
83
  this.closeAlert = () => {
89
84
  this.setState({
90
85
  isOpen: false
@@ -95,19 +90,16 @@ export default class FlashAlert extends React.Component {
95
90
  }, 500);
96
91
  });
97
92
  };
98
-
99
93
  this.state = {
100
94
  showDetails: false,
101
95
  isOpen: true
102
96
  };
103
97
  this.timerId = 0;
104
98
  }
105
-
106
99
  findDetailMessage() {
107
100
  const err = this.props.error;
108
101
  let a = err.message;
109
102
  let b;
110
-
111
103
  if (err.response) {
112
104
  if (err.response.data) {
113
105
  try {
@@ -125,13 +117,11 @@ export default class FlashAlert extends React.Component {
125
117
  }
126
118
  }
127
119
  }
128
-
129
120
  return {
130
121
  a,
131
122
  b
132
123
  };
133
124
  }
134
-
135
125
  renderDetailMessage() {
136
126
  const {
137
127
  a,
@@ -142,10 +132,8 @@ export default class FlashAlert extends React.Component {
142
132
  fontStyle: "italic"
143
133
  }, /*#__PURE__*/React.createElement(Text, null, a), b ? /*#__PURE__*/React.createElement("br", null) : null, b ? /*#__PURE__*/React.createElement(Text, null, b) : null);
144
134
  }
145
-
146
135
  render() {
147
136
  let details = null;
148
-
149
137
  if (this.props.error) {
150
138
  if (this.state.showDetails) {
151
139
  details = this.renderDetailMessage();
@@ -156,7 +144,6 @@ export default class FlashAlert extends React.Component {
156
144
  }, formatMessage('Details'))), /*#__PURE__*/React.createElement(ScreenReaderContent, null, this.renderDetailMessage()));
157
145
  }
158
146
  }
159
-
160
147
  return /*#__PURE__*/React.createElement(Transition, {
161
148
  transitionOnMount: true,
162
149
  in: this.state.isOpen,
@@ -176,7 +163,6 @@ export default class FlashAlert extends React.Component {
176
163
  }
177
164
  }, this.props.message), details)));
178
165
  }
179
-
180
166
  }
181
167
  FlashAlert.propTypes = {
182
168
  onClose: PropTypes.func.isRequired,
@@ -192,22 +178,18 @@ FlashAlert.defaultProps = {
192
178
  timeout: TIMEOUT,
193
179
  screenReaderOnly: false
194
180
  };
195
- export function showFlashAlert(_ref) {
196
- let {
197
- message,
198
- err,
199
- type = err ? 'error' : 'info',
200
- srOnly = false
201
- } = _ref;
202
-
181
+ export function showFlashAlert({
182
+ message,
183
+ err,
184
+ type = err ? 'error' : 'info',
185
+ srOnly = false
186
+ }) {
203
187
  function closeAlert(atNode) {
204
188
  ReactDOM.unmountComponentAtNode(atNode);
205
189
  atNode.remove();
206
190
  }
207
-
208
191
  function getAlertContainer() {
209
192
  let alertContainer = document.getElementById(messageHolderId);
210
-
211
193
  if (!alertContainer) {
212
194
  alertContainer = document.createElement('div');
213
195
  alertContainer.classList.add('clickthrough-container');
@@ -215,15 +197,11 @@ export function showFlashAlert(_ref) {
215
197
  alertContainer.setAttribute('style', 'position: fixed; top: 0; left: 0; width: 100%; z-index: 100000;');
216
198
  document.body.appendChild(alertContainer);
217
199
  }
218
-
219
200
  return alertContainer;
220
201
  }
221
-
222
202
  function renderAlert(parent) {
223
- var _RCEGlobals$getConfig;
224
-
225
- const configuredTimeout = (_RCEGlobals$getConfig = RCEGlobals.getConfig()) === null || _RCEGlobals$getConfig === void 0 ? void 0 : _RCEGlobals$getConfig.flashAlertTimeout;
226
- ReactDOM.render( /*#__PURE__*/React.createElement(FlashAlert, {
203
+ const configuredTimeout = RCEGlobals.getConfig()?.flashAlertTimeout;
204
+ ReactDOM.render(/*#__PURE__*/React.createElement(FlashAlert, {
227
205
  message: message,
228
206
  timeout: Number.isNaN(parseInt(configuredTimeout, 10)) ? TIMEOUT : configuredTimeout,
229
207
  error: err,
@@ -233,9 +211,8 @@ export function showFlashAlert(_ref) {
233
211
  screenReaderOnly: srOnly
234
212
  }), parent);
235
213
  }
236
-
237
- const div = document.createElement('div'); // div.setAttribute('class', styles.flashMessage)
238
-
214
+ const div = document.createElement('div');
215
+ // div.setAttribute('class', styles.flashMessage)
239
216
  div.setAttribute('style', 'max-width:50em;margin:1rem auto;');
240
217
  div.setAttribute('class', 'flashalert-message');
241
218
  getAlertContainer().appendChild(div);
@@ -247,8 +224,7 @@ export function destroyContainer() {
247
224
  if (container) container.remove();
248
225
  if (liveRegion) liveRegion.remove();
249
226
  }
250
- export function showFlashError() {
251
- let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : formatMessage('An error occurred making a network request');
227
+ export function showFlashError(message = formatMessage('An error occurred making a network request')) {
252
228
  return err => showFlashAlert({
253
229
  message,
254
230
  err,
@@ -15,10 +15,12 @@
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
  let isIE = false;
19
- let isEdge = false; // expected to be called as setFromTinymce(window.tinymce) at some point where
20
- // window.tinymce is available
20
+ let isEdge = false;
21
21
 
22
+ // expected to be called as setFromTinymce(window.tinymce) at some point where
23
+ // window.tinymce is available
22
24
  export function setFromTinymce(tinymce) {
23
25
  set(tinymce.Env);
24
26
  }