@instructure/canvas-rce 5.14.1 → 5.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/DEVELOPMENT.md +2 -2
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +18 -73
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +21 -77
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +15 -39
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +105 -64
  25. package/es/common/incremental-loading/LoadMoreButton.js +4 -4
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +5 -13
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +16 -10
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +24 -35
  36. package/es/enhance-user-content/enhance_user_content.js +32 -67
  37. package/es/enhance-user-content/external_links.js +6 -9
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +22 -50
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +48 -107
  42. package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
  43. package/es/format-message.js +4 -5
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.d.ts +59 -0
  47. package/es/index.js +6 -6
  48. package/es/rce/AlertMessageArea.js +15 -16
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +3 -2
  51. package/es/rce/RCE.js +16 -17
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +29 -14
  54. package/es/rce/RCEWrapper.js +530 -641
  55. package/es/rce/RCEWrapper.utils.js +131 -0
  56. package/es/rce/RCEWrapperProps.js +9 -5
  57. package/es/rce/RceHtmlEditor.js +17 -19
  58. package/es/rce/ResizeHandle.js +4 -10
  59. package/es/rce/RestoreAutoSaveModal.js +1 -2
  60. package/es/rce/ShowOnFocusButton/index.js +2 -8
  61. package/es/rce/StatusBar.js +10 -44
  62. package/es/rce/alertHandler.js +1 -4
  63. package/es/rce/contentInsertion.js +36 -59
  64. package/es/rce/contentInsertionUtils.js +6 -8
  65. package/es/rce/contentRendering.js +13 -17
  66. package/es/rce/customEvents.js +1 -0
  67. package/es/rce/editorLanguage.js +23 -11
  68. package/es/rce/indicatorRegion.js +7 -7
  69. package/es/rce/normalizeLocale.js +5 -3
  70. package/es/rce/normalizeProps.js +7 -5
  71. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  72. package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
  74. package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
  75. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  76. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  78. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
  83. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
  84. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  85. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  86. package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
  87. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
  93. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
  95. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
  96. package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
  97. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  98. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  99. package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
  100. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  101. package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
  102. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  103. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  104. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
  127. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  128. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
  129. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  130. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  131. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  132. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  133. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
  134. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  135. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  136. package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
  137. package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
  138. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  139. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
  140. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
  141. package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
  142. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
  144. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  145. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
  147. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  148. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  149. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
  150. package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
  151. package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
  153. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
  154. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  155. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_image/plugin.js +14 -20
  157. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
  159. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  160. package/es/rce/plugins/instructure_links/components/Link.js +68 -84
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  164. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
  165. package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
  166. package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
  167. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  168. package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
  169. package/es/rce/plugins/instructure_links/plugin.js +23 -49
  170. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  171. package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
  172. package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
  173. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  174. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  175. package/es/rce/plugins/instructure_paste/plugin.js +29 -33
  176. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
  177. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
  182. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  184. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  185. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  186. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
  187. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  188. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
  189. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
  199. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
  200. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  201. package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
  202. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
  203. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
  204. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  205. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
  206. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
  207. package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
  208. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  209. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  210. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
  211. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
  212. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
  213. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  214. package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
  215. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  216. package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
  217. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
  218. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  219. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
  220. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
  221. package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
  222. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  223. package/es/rce/plugins/shared/ColorInput.js +27 -39
  224. package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
  225. package/es/rce/plugins/shared/ContentSelection.js +29 -78
  226. package/es/rce/plugins/shared/DimensionUtils.js +3 -12
  227. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  228. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  229. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  230. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  231. package/es/rce/plugins/shared/EventUtils.js +2 -4
  232. package/es/rce/plugins/shared/Filter.js +8 -38
  233. package/es/rce/plugins/shared/FixedContentTray.js +16 -17
  234. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
  235. package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
  236. package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
  237. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
  239. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
  240. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
  241. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
  242. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
  244. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
  245. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  246. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
  247. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  250. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  252. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
  253. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
  254. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
  255. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  256. package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
  257. package/es/rce/plugins/shared/LinkDisplay.js +9 -11
  258. package/es/rce/plugins/shared/PreviewIcon.js +9 -15
  259. package/es/rce/plugins/shared/Previewable.js +1 -0
  260. package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
  261. package/es/rce/plugins/shared/StoreContext.js +9 -12
  262. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
  263. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  264. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
  265. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
  266. package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
  267. package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
  268. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  269. package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
  270. package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
  271. package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
  272. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
  273. package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
  274. package/es/rce/plugins/shared/Upload/index.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
  276. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
  277. package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
  278. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  279. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  280. package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
  281. package/es/rce/plugins/shared/compressionUtils.js +18 -28
  282. package/es/rce/plugins/shared/dateUtils.js +1 -1
  283. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  284. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
  285. package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
  286. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  287. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  288. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  289. package/es/rce/plugins/shared/fileShape.js +4 -9
  290. package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
  291. package/es/rce/plugins/shared/fileUtils.js +1 -2
  292. package/es/rce/plugins/shared/linkUtils.js +1 -16
  293. package/es/rce/plugins/shared/round.js +2 -2
  294. package/es/rce/plugins/shared/trayUtils.js +7 -3
  295. package/es/rce/plugins/shared/useDataUrl.js +13 -14
  296. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  297. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
  298. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
  299. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  300. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  301. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  302. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
  303. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
  315. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  316. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  317. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
  321. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
  322. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
  323. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  324. package/es/rce/root.js +17 -16
  325. package/es/rce/sanitizePlugins.js +1 -3
  326. package/es/rce/style.js +1 -4
  327. package/es/rce/tinyRCE.js +14 -9
  328. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  329. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  330. package/es/rce/transformContent.js +9 -11
  331. package/es/rce/types.js +1 -0
  332. package/es/rce/userOS.js +1 -1
  333. package/es/rce/wrapInitCb.js +50 -43
  334. package/es/rcs/api.js +100 -171
  335. package/es/rcs/buildError.js +8 -20
  336. package/es/rcs/fake.js +9 -20
  337. package/es/sidebar/actions/all_files.js +2 -0
  338. package/es/sidebar/actions/data.js +4 -7
  339. package/es/sidebar/actions/documents.js +19 -18
  340. package/es/sidebar/actions/files.js +21 -28
  341. package/es/sidebar/actions/filter.js +5 -5
  342. package/es/sidebar/actions/flickr.js +1 -1
  343. package/es/sidebar/actions/images.js +32 -37
  344. package/es/sidebar/actions/links.js +1 -0
  345. package/es/sidebar/actions/media.js +27 -28
  346. package/es/sidebar/actions/session.js +2 -5
  347. package/es/sidebar/actions/ui.js +1 -0
  348. package/es/sidebar/actions/upload.js +38 -74
  349. package/es/sidebar/containers/Sidebar.js +1 -2
  350. package/es/sidebar/containers/sidebarHandlers.js +9 -13
  351. package/es/sidebar/dragHtml.js +11 -5
  352. package/es/sidebar/reducers/all_files.js +5 -6
  353. package/es/sidebar/reducers/collection.js +12 -15
  354. package/es/sidebar/reducers/collections.js +6 -8
  355. package/es/sidebar/reducers/documents.js +7 -16
  356. package/es/sidebar/reducers/files.js +4 -6
  357. package/es/sidebar/reducers/filter.js +8 -23
  358. package/es/sidebar/reducers/flickr.js +10 -12
  359. package/es/sidebar/reducers/folder.js +16 -18
  360. package/es/sidebar/reducers/folders.js +4 -6
  361. package/es/sidebar/reducers/images.js +4 -16
  362. package/es/sidebar/reducers/index.js +3 -1
  363. package/es/sidebar/reducers/media.js +7 -16
  364. package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
  365. package/es/sidebar/reducers/noop.js +2 -2
  366. package/es/sidebar/reducers/rootFolderId.js +2 -5
  367. package/es/sidebar/reducers/session.js +4 -6
  368. package/es/sidebar/reducers/ui.js +6 -25
  369. package/es/sidebar/reducers/upload.js +16 -64
  370. package/es/sidebar/store/configureStore.js +1 -0
  371. package/es/sidebar/store/initialState.js +14 -26
  372. package/es/translations/locales/ab.js +1 -0
  373. package/es/translations/locales/ar.js +72 -8
  374. package/es/translations/locales/ca.js +72 -8
  375. package/es/translations/locales/cs.js +1 -0
  376. package/es/translations/locales/cs_CZ.js +1 -0
  377. package/es/translations/locales/cy.js +72 -8
  378. package/es/translations/locales/da-x-k12.js +72 -8
  379. package/es/translations/locales/da.js +72 -8
  380. package/es/translations/locales/da_DK.js +1 -0
  381. package/es/translations/locales/de.js +72 -8
  382. package/es/translations/locales/el.js +4 -0
  383. package/es/translations/locales/en-AU-x-unimelb.js +72 -8
  384. package/es/translations/locales/en-GB-x-ukhe.js +72 -8
  385. package/es/translations/locales/en.js +72 -8
  386. package/es/translations/locales/en_AU.js +72 -8
  387. package/es/translations/locales/en_CA.js +72 -8
  388. package/es/translations/locales/en_CY.js +72 -8
  389. package/es/translations/locales/en_GB.js +72 -8
  390. package/es/translations/locales/en_NZ.js +1 -0
  391. package/es/translations/locales/en_SE.js +1 -0
  392. package/es/translations/locales/en_US.js +1 -0
  393. package/es/translations/locales/es.js +72 -8
  394. package/es/translations/locales/es_ES.js +72 -8
  395. package/es/translations/locales/es_GT.js +1 -0
  396. package/es/translations/locales/fa_IR.js +7 -0
  397. package/es/translations/locales/fi.js +72 -8
  398. package/es/translations/locales/fr.js +72 -8
  399. package/es/translations/locales/fr_CA.js +73 -9
  400. package/es/translations/locales/ga.js +5 -13
  401. package/es/translations/locales/he.js +7 -0
  402. package/es/translations/locales/hi.js +72 -8
  403. package/es/translations/locales/ht.js +72 -8
  404. package/es/translations/locales/hu.js +7 -6
  405. package/es/translations/locales/hu_HU.js +1 -0
  406. package/es/translations/locales/hy.js +1 -0
  407. package/es/translations/locales/id.js +72 -8
  408. package/es/translations/locales/id_ID.js +1 -0
  409. package/es/translations/locales/is.js +72 -8
  410. package/es/translations/locales/it.js +72 -8
  411. package/es/translations/locales/ja.js +72 -8
  412. package/es/translations/locales/ko.js +1 -0
  413. package/es/translations/locales/ko_KR.js +1 -0
  414. package/es/translations/locales/lt.js +1 -0
  415. package/es/translations/locales/lt_LT.js +1 -0
  416. package/es/translations/locales/mi.js +72 -8
  417. package/es/translations/locales/mn_MN.js +1 -0
  418. package/es/translations/locales/ms.js +72 -8
  419. package/es/translations/locales/nb-x-k12.js +72 -8
  420. package/es/translations/locales/nb.js +72 -8
  421. package/es/translations/locales/nl.js +72 -8
  422. package/es/translations/locales/nl_NL.js +1 -0
  423. package/es/translations/locales/nn.js +7 -6
  424. package/es/translations/locales/pl.js +72 -8
  425. package/es/translations/locales/pt.js +72 -8
  426. package/es/translations/locales/pt_BR.js +72 -8
  427. package/es/translations/locales/ro.js +1 -0
  428. package/es/translations/locales/ru.js +72 -8
  429. package/es/translations/locales/se.js +1 -0
  430. package/es/translations/locales/sl.js +72 -8
  431. package/es/translations/locales/sv-x-k12.js +72 -8
  432. package/es/translations/locales/sv.js +72 -8
  433. package/es/translations/locales/sv_SE.js +1 -0
  434. package/es/translations/locales/tg.js +1 -0
  435. package/es/translations/locales/th.js +72 -8
  436. package/es/translations/locales/th_TH.js +1 -0
  437. package/es/translations/locales/tl_PH.js +1 -0
  438. package/es/translations/locales/tr.js +7 -0
  439. package/es/translations/locales/uk_UA.js +7 -0
  440. package/es/translations/locales/vi.js +72 -8
  441. package/es/translations/locales/vi_VN.js +1 -0
  442. package/es/translations/locales/zh-Hans.js +72 -8
  443. package/es/translations/locales/zh-Hant.js +72 -8
  444. package/es/translations/locales/zh.js +72 -8
  445. package/es/translations/locales/zh_HK.js +72 -8
  446. package/es/translations/locales/zh_TW.Big5.js +1 -0
  447. package/es/translations/locales/zh_TW.js +1 -0
  448. package/es/translations/tinymce/ar_SA.js +1 -0
  449. package/es/translations/tinymce/fi.js +1 -0
  450. package/es/translations/tinymce/ga.js +1 -0
  451. package/es/translations/tinymce/id.js +1 -0
  452. package/es/translations/tinymce/ru.js +1 -0
  453. package/es/translations/tinymce/ru_RU.js +1 -0
  454. package/es/translations/tinymce/sl.js +1 -0
  455. package/es/translations/tinymce/sr.js +1 -0
  456. package/es/translations/tinymce/th.js +1 -0
  457. package/es/translations/tinymce/uk_UA.js +1 -0
  458. package/es/translations/tinymce/vi_VN.js +1 -0
  459. package/es/util/TypedDict.js +4 -2
  460. package/es/util/elem-util.js +1 -1
  461. package/es/util/encrypted-storage.js +3 -13
  462. package/es/util/file-url-util.js +2 -7
  463. package/es/util/fullscreenHelpers.js +9 -9
  464. package/es/util/instui-icon-helper.js +4 -3
  465. package/es/util/loadingPlaceholder.js +39 -41
  466. package/es/util/simpleCache.js +1 -5
  467. package/es/util/string-util.js +1 -1
  468. package/es/util/textarea-editing-util.js +3 -7
  469. package/es/util/tinymce-plugin-util.js +0 -5
  470. package/es/util/url-util.js +20 -29
  471. package/eslint.config.js +250 -0
  472. package/jest.config.js +1 -1
  473. package/locales/en.json +190 -10
  474. package/package.json +78 -82
  475. package/scripts/build-canvas +2 -1
  476. package/scripts/build.js +4 -4
  477. package/scripts/installTranslations.js +7 -8
  478. package/testcafe/RCEWrapper.test.js +0 -1
  479. package/testcafe/StatusBar.test.js +0 -1
  480. package/testcafe/axe.test.js +3 -4
  481. package/testcafe/enhanceUserContent.test.js +0 -1
  482. package/tsconfig.json +21 -16
  483. package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
  484. package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
  485. package/.eslintrc +0 -45
  486. package/.prettierignore +0 -6
  487. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  488. package/es/rce/__mocks__/tinymceReact.js +0 -55
  489. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -15,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 alertHandler from '../../rce/alertHandler';
19
20
  import formatMessage from '../../format-message';
20
21
  export const REQUEST_INITIAL_MEDIA = 'REQUEST_INITIAL_MEDIA';
@@ -37,11 +38,10 @@ export function requestMedia(contextType) {
37
38
  }
38
39
  };
39
40
  }
40
- export function receiveMedia(_ref) {
41
- let {
42
- response,
43
- contextType
44
- } = _ref;
41
+ export function receiveMedia({
42
+ response,
43
+ contextType
44
+ }) {
45
45
  const {
46
46
  files,
47
47
  bookmark
@@ -55,11 +55,10 @@ export function receiveMedia(_ref) {
55
55
  }
56
56
  };
57
57
  }
58
- export function failMedia(_ref2) {
59
- let {
60
- error,
61
- contextType
62
- } = _ref2;
58
+ export function failMedia({
59
+ error,
60
+ contextType
61
+ }) {
63
62
  return {
64
63
  type: FAIL_MEDIA,
65
64
  payload: {
@@ -67,10 +66,11 @@ export function failMedia(_ref2) {
67
66
  contextType
68
67
  }
69
68
  };
70
- } // dispatches the start of the load, requests a page for the collection from
69
+ }
70
+
71
+ // dispatches the start of the load, requests a page for the collection from
71
72
  // the source, then dispatches the loaded page to the store on success or
72
73
  // clears the load on failure
73
-
74
74
  export function fetchMedia() {
75
75
  return (dispatch, getState) => {
76
76
  const state = getState();
@@ -83,37 +83,38 @@ export function fetchMedia() {
83
83
  contextType: state.contextType
84
84
  })));
85
85
  };
86
- } // fetches a page only if a page is not already being loaded and the
87
- // collection is not yet completely loaded
86
+ }
88
87
 
88
+ // fetches a page only if a page is not already being loaded and the
89
+ // collection is not yet completely loaded
89
90
  export function fetchNextMedia() {
90
91
  return (dispatch, getState) => {
91
92
  const state = getState();
92
93
  const media = state.media[state.contextType];
93
-
94
- if (!(media !== null && media !== void 0 && media.isLoading) && media !== null && media !== void 0 && media.hasMore) {
94
+ if (!media?.isLoading && media?.hasMore) {
95
95
  dispatch(requestMedia(state.contextType));
96
96
  return dispatch(fetchMedia());
97
97
  }
98
98
  };
99
- } // fetches the next page (subject to conditions on fetchNextMedia) only if the
100
- // collection is currently empty
99
+ }
101
100
 
101
+ // fetches the next page (subject to conditions on fetchNextMedia) only if the
102
+ // collection is currently empty
102
103
  export function fetchInitialMedia() {
103
104
  return (dispatch, getState) => {
104
105
  const state = getState();
105
106
  dispatch(requestInitialMedia(state.contextType));
106
107
  return dispatch(fetchMedia());
107
108
  };
108
- } // update the media object.
109
+ }
109
110
 
110
- export function updateMediaObject(_ref3) {
111
- let {
112
- media_object_id,
113
- attachment_id,
114
- title,
115
- subtitles
116
- } = _ref3;
111
+ // update the media object.
112
+ export function updateMediaObject({
113
+ media_object_id,
114
+ attachment_id,
115
+ title,
116
+ subtitles
117
+ }) {
117
118
  return (dispatch, getState) => {
118
119
  const state = getState();
119
120
  const moUpdate = state.source.updateMediaObject(state, {
@@ -131,11 +132,9 @@ export function updateMediaObject(_ref3) {
131
132
  media_object_id,
132
133
  subtitles
133
134
  };
134
-
135
135
  if (attachment_id) {
136
136
  ccData.attachment_id = attachment_id;
137
137
  }
138
-
139
138
  const ccUpdate = state.source.updateClosedCaptions(state, ccData);
140
139
  return Promise.all([moUpdate, ccUpdate]);
141
140
  };
@@ -15,20 +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
- export const RECEIVE_SESSION = 'action.session.receive_session';
19
18
 
19
+ export const RECEIVE_SESSION = 'action.session.receive_session';
20
20
  function receiveSession(data) {
21
21
  return {
22
22
  type: RECEIVE_SESSION,
23
23
  data
24
24
  };
25
25
  }
26
-
27
26
  export function get(dispatch, getState) {
28
- var _source$getSession;
29
-
30
27
  const {
31
28
  source
32
29
  } = getState();
33
- return (_source$getSession = source.getSession) === null || _source$getSession === void 0 ? void 0 : _source$getSession.call(source).then(data => dispatch(receiveSession(data)));
30
+ return source.getSession?.().then(data => dispatch(receiveSession(data)));
34
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
  export const CHANGE_TAB = 'CHANGE_TAB';
19
20
  export const CHANGE_ACCORDION = 'CHANGE_ACCORDION';
20
21
  export const RESET_UI = 'RESET_UI';
@@ -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 { saveMediaRecording } from '@instructure/canvas-media';
19
20
  import { headerFor, originFromHost } from '../../rcs/api';
20
21
  import * as files from './files';
@@ -50,12 +51,11 @@ export function stopLoading() {
50
51
  type: STOP_LOADING
51
52
  };
52
53
  }
53
- export function receiveFolder(_ref) {
54
- let {
55
- id,
56
- name,
57
- parentId
58
- } = _ref;
54
+ export function receiveFolder({
55
+ id,
56
+ name,
57
+ parentId
58
+ }) {
59
59
  return {
60
60
  type: RECEIVE_FOLDER,
61
61
  id,
@@ -110,10 +110,9 @@ export function openOrCloseUploadForm() {
110
110
  type: TOGGLE_UPLOAD_FORM
111
111
  };
112
112
  }
113
- export function processedFolderBatch(_ref2) {
114
- let {
115
- folders
116
- } = _ref2;
113
+ export function processedFolderBatch({
114
+ folders
115
+ }) {
117
116
  return {
118
117
  type: PROCESSED_FOLDER_BATCH,
119
118
  folders
@@ -154,21 +153,16 @@ export function allUploadCompleteActions(results, fileMetaProps, contextType) {
154
153
  };
155
154
  actions.push(files.createAddFile(fileProps));
156
155
  actions.push(files.createInsertFile(fileMetaProps.parentFolderId, results.id));
157
-
158
156
  if (/^image\//.test(results['content-type'])) {
159
157
  actions.push(images.createAddImage(results, contextType));
160
158
  }
161
-
162
159
  return actions;
163
160
  }
164
161
  export function embedUploadResult(results, selectedTabType) {
165
162
  const embedData = fileEmbed(results);
166
-
167
163
  if (selectedTabType === 'images' && isImage(embedData.type) && results.displayAs !== 'link') {
168
- var _bridge$activeEditor, _bridge$activeEditor$;
169
-
170
164
  // embed the image after any current selection rather than link to it or replace it
171
- (_bridge$activeEditor = bridge.activeEditor()) === null || _bridge$activeEditor === void 0 ? void 0 : (_bridge$activeEditor$ = _bridge$activeEditor.mceInstance()) === null || _bridge$activeEditor$ === void 0 ? void 0 : _bridge$activeEditor$.selection.collapse();
165
+ bridge.activeEditor()?.mceInstance()?.selection.collapse();
172
166
  const file_props = {
173
167
  href: results.href || results.url,
174
168
  title: results.title,
@@ -182,12 +176,11 @@ export function embedUploadResult(results, selectedTabType) {
182
176
  };
183
177
  return bridge.insertImage(file_props);
184
178
  } else if (selectedTabType === 'media' && isAudioOrVideo(embedData.type)) {
185
- var _bridge$activeEditor2, _bridge$activeEditor3;
186
-
187
179
  // embed media after any current selection rather than link to it or replace it
188
- (_bridge$activeEditor2 = bridge.activeEditor()) === null || _bridge$activeEditor2 === void 0 ? void 0 : (_bridge$activeEditor3 = _bridge$activeEditor2.mceInstance()) === null || _bridge$activeEditor3 === void 0 ? void 0 : _bridge$activeEditor3.selection.collapse(); // when we record audio, notorious thinks it's a video. use the content type we got
189
- // from the recorded file, not the returned media object.
180
+ bridge.activeEditor()?.mceInstance()?.selection.collapse();
190
181
 
182
+ // when we record audio, notorious thinks it's a video. use the content type we got
183
+ // from the recorded file, not the returned media object.
191
184
  return bridge.embedMedia({
192
185
  id: results.id,
193
186
  embedded_iframe_url: results.embedded_iframe_url,
@@ -205,7 +198,8 @@ export function embedUploadResult(results, selectedTabType) {
205
198
  href: results.href || results.url,
206
199
  title: results.alt_text || results.display_name || results.name || results.title || results.filename,
207
200
  content_type: results['content-type'],
208
- embed: { ...embedData,
201
+ embed: {
202
+ ...embedData,
209
203
  disableInlinePreview: true
210
204
  },
211
205
  target: '_blank',
@@ -214,8 +208,9 @@ export function embedUploadResult(results, selectedTabType) {
214
208
  uuid: results.uuid
215
209
  }, false);
216
210
  }
217
- } // fetches the list of folders to select from when uploading a file
211
+ }
218
212
 
213
+ // fetches the list of folders to select from when uploading a file
219
214
  export function fetchFolders(bookmark) {
220
215
  return (dispatch, getState) => {
221
216
  dispatch(startLoading());
@@ -227,24 +222,21 @@ export function fetchFolders(bookmark) {
227
222
  contextId,
228
223
  contextType
229
224
  } = getState();
230
-
231
225
  if (bookmark || upload.folders && Object.keys(upload.folders).length === 0) {
232
226
  return source.fetchFolders({
233
227
  jwt,
234
228
  host,
235
229
  contextId,
236
230
  contextType
237
- }, bookmark).then(_ref3 => {
238
- let {
239
- folders,
240
- bookmark
241
- } = _ref3;
231
+ }, bookmark).then(({
232
+ folders,
233
+ bookmark
234
+ }) => {
242
235
  dispatch(folders.map(receiveFolder));
243
236
  const {
244
237
  upload
245
238
  } = getState();
246
239
  dispatch(processedFolderBatch(upload));
247
-
248
240
  if (bookmark) {
249
241
  dispatch(fetchFolders(bookmark));
250
242
  } else {
@@ -255,8 +247,9 @@ export function fetchFolders(bookmark) {
255
247
  });
256
248
  }
257
249
  };
258
- } // uploads handled via canvas-media
250
+ }
259
251
 
252
+ // uploads handled via canvas-media
260
253
  export function mediaUploadComplete(error, uploadData) {
261
254
  const {
262
255
  mediaObject,
@@ -265,7 +258,7 @@ export function mediaUploadComplete(error, uploadData) {
265
258
  return (dispatch, _getState) => {
266
259
  if (error) {
267
260
  dispatch(failMediaUpload(error));
268
- dispatch(removePlaceholdersFor(uploadedFile === null || uploadedFile === void 0 ? void 0 : uploadedFile.name));
261
+ dispatch(removePlaceholdersFor(uploadedFile?.name));
269
262
  } else {
270
263
  const embedData = {
271
264
  embedded_iframe_url: mediaObject.embedded_iframe_url,
@@ -287,7 +280,6 @@ export function createMediaServerSession() {
287
280
  const {
288
281
  source
289
282
  } = getState();
290
-
291
283
  if (!bridge.mediaServerSession) {
292
284
  return source.mediaServerSession().then(data => {
293
285
  bridge.setMediaServerSession(data);
@@ -295,8 +287,7 @@ export function createMediaServerSession() {
295
287
  }
296
288
  };
297
289
  }
298
- export function uploadToIconMakerFolder(svg) {
299
- let uploadSettings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
290
+ export function uploadToIconMakerFolder(svg, uploadSettings = {}) {
300
291
  return (_dispatch, getState) => {
301
292
  const {
302
293
  source,
@@ -323,10 +314,9 @@ export function uploadToIconMakerFolder(svg) {
323
314
  host,
324
315
  contextId,
325
316
  contextType
326
- }).then(_ref4 => {
327
- let {
328
- folders
329
- } = _ref4;
317
+ }).then(({
318
+ folders
319
+ }) => {
330
320
  fileMetaProps.parentFolderId = folders[0].id;
331
321
  return source.preflightUpload(fileMetaProps, {
332
322
  host,
@@ -342,10 +332,8 @@ export function uploadToIconMakerFolder(svg) {
342
332
  }
343
333
  export function uploadToMediaFolder(tabContext, fileMetaProps) {
344
334
  return (dispatch, getState) => {
345
- var _editorComponent$edit;
346
-
347
335
  const editorComponent = bridge.activeEditor();
348
- const bookmark = editorComponent === null || editorComponent === void 0 ? void 0 : (_editorComponent$edit = editorComponent.editor) === null || _editorComponent$edit === void 0 ? void 0 : _editorComponent$edit.selection.getBookmark(undefined, true);
336
+ const bookmark = editorComponent?.editor?.selection.getBookmark(undefined, true);
349
337
  dispatch(activateMediaUpload(fileMetaProps));
350
338
  const {
351
339
  source,
@@ -354,7 +342,6 @@ export function uploadToMediaFolder(tabContext, fileMetaProps) {
354
342
  contextId,
355
343
  contextType
356
344
  } = getState();
357
-
358
345
  if (tabContext === 'media' && fileMetaProps.domObject) {
359
346
  return saveMediaRecording(fileMetaProps.domObject, {
360
347
  contextId,
@@ -365,31 +352,27 @@ export function uploadToMediaFolder(tabContext, fileMetaProps) {
365
352
  dispatch(mediaUploadComplete(err, uploadData));
366
353
  });
367
354
  }
368
-
369
355
  return source.fetchMediaFolder({
370
356
  jwt,
371
357
  host,
372
358
  contextId,
373
359
  contextType
374
- }).then(_ref5 => {
375
- let {
376
- folders
377
- } = _ref5;
360
+ }).then(({
361
+ folders
362
+ }) => {
378
363
  fileMetaProps.parentFolderId = folders[0].id;
379
-
380
364
  if (fileMetaProps.domObject) {
381
365
  delete fileMetaProps.domObject.preview; // don't need this anymore
382
366
  }
383
-
384
- return dispatch(uploadPreflight(tabContext, { ...fileMetaProps,
367
+ return dispatch(uploadPreflight(tabContext, {
368
+ ...fileMetaProps,
385
369
  bookmark
386
370
  })).then(results => {
387
371
  return results;
388
372
  });
389
373
  }).catch(e => {
390
374
  // Get rid of any placeholder that might be there.
391
- dispatch(removePlaceholdersFor(fileMetaProps.name)); // eslint-disable-next-line no-console
392
-
375
+ dispatch(removePlaceholdersFor(fileMetaProps.name));
393
376
  console.error('Fetching the media folder failed.', e);
394
377
  });
395
378
  };
@@ -398,40 +381,32 @@ export function setUsageRights(source, fileMetaProps, results) {
398
381
  const {
399
382
  usageRights
400
383
  } = fileMetaProps;
401
-
402
384
  if (usageRights) {
403
385
  source.setUsageRights(results.id, usageRights);
404
386
  }
405
-
406
387
  return results;
407
388
  }
408
389
  export function getFileUrlIfMissing(source, results) {
409
390
  if (results.href || results.url) {
410
391
  return Promise.resolve(results);
411
392
  }
412
-
413
393
  return source.getFile(results.id).then(file => {
414
394
  results.url = file.url;
415
395
  return results;
416
396
  });
417
397
  }
418
-
419
- function readUploadedFileAsDataURL(file) {
420
- let reader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new FileReader();
398
+ function readUploadedFileAsDataURL(file, reader = new FileReader()) {
421
399
  return new Promise((resolve, reject) => {
422
400
  reader.onerror = () => {
423
401
  reader.abort();
424
402
  reject(new DOMException('Unable to parse file'));
425
403
  };
426
-
427
404
  reader.onload = () => {
428
405
  resolve(reader.result);
429
406
  };
430
-
431
407
  reader.readAsDataURL(file);
432
408
  });
433
409
  }
434
-
435
410
  export function generateThumbnailUrl(results, fileDOMObject, reader) {
436
411
  if (/^image\//.test(results['content-type'])) {
437
412
  return readUploadedFileAsDataURL(fileDOMObject, reader).then(result => {
@@ -446,7 +421,6 @@ export function setAltText(altText, results) {
446
421
  if (altText) {
447
422
  results.alt_text = altText;
448
423
  }
449
-
450
424
  return results;
451
425
  }
452
426
  export function handleFailures(error, dispatch) {
@@ -459,7 +433,6 @@ export function handleFailures(error, dispatch) {
459
433
  }
460
434
  }).catch(error => dispatch(failUpload(error)));
461
435
  }
462
-
463
436
  if (error) {
464
437
  return Promise.resolve().then(() => dispatch(failUpload(error)));
465
438
  }
@@ -476,12 +449,10 @@ export function uploadPreflight(tabContext, fileMetaProps) {
476
449
  const {
477
450
  fileReader
478
451
  } = fileMetaProps;
479
-
480
452
  const getCategory = async fileProps => {
481
453
  const categoryObject = await CategoryProcessor.process(fileProps.domObject);
482
- return categoryObject === null || categoryObject === void 0 ? void 0 : categoryObject.category;
454
+ return categoryObject?.category;
483
455
  };
484
-
485
456
  dispatch(startUpload(fileMetaProps));
486
457
  return getCategory(fileMetaProps).then(category => {
487
458
  return source.preflightUpload(fileMetaProps, {
@@ -506,39 +477,32 @@ export function uploadPreflight(tabContext, fileMetaProps) {
506
477
  if (fileMetaProps.isDecorativeImage) {
507
478
  results.isDecorativeImage = fileMetaProps.isDecorativeImage;
508
479
  }
509
-
510
480
  if (fileMetaProps.displayAs) {
511
481
  results.displayAs = fileMetaProps.displayAs;
512
482
  }
513
-
514
483
  return results;
515
484
  }).then(async results => {
516
485
  let newBookmark;
517
486
  const editorComponent = bridge.activeEditor();
518
-
519
487
  if (fileMetaProps.bookmark) {
520
488
  newBookmark = editorComponent.editor.selection.getBookmark(undefined, true);
521
489
  editorComponent.editor.selection.moveToBookmark(fileMetaProps.bookmark);
522
490
  }
523
-
524
491
  const uploadResult = {
525
492
  contextType,
526
493
  contextId,
527
494
  ...results
528
495
  };
529
496
  const embedResult = embedUploadResult(uploadResult, tabContext);
530
-
531
497
  if (fileMetaProps.bookmark) {
532
498
  editorComponent.editor.selection.moveToBookmark(newBookmark);
533
499
  }
534
-
535
- if (embedResult !== null && embedResult !== void 0 && embedResult.loadingPromise) {
500
+ if (embedResult?.loadingPromise) {
536
501
  // Wait until the image loads to remove the placeholder
537
502
  await embedResult.loadingPromise.finally(() => dispatch(removePlaceholdersFor(fileMetaProps.name)));
538
503
  } else {
539
504
  dispatch(removePlaceholdersFor(fileMetaProps.name));
540
505
  }
541
-
542
506
  return uploadResult;
543
507
  }).then(results => {
544
508
  dispatch(allUploadCompleteActions(results, fileMetaProps, contextType));
@@ -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 function propsFromState(state) {
19
20
  const {
20
21
  ui,
@@ -37,12 +38,10 @@ export function propsFromState(state) {
37
38
  source
38
39
  } = state;
39
40
  const collections = {};
40
-
41
41
  for (const key in state.collections) {
42
42
  const collection = state.collections[key];
43
43
  collections[key] = collection;
44
44
  }
45
-
46
45
  return {
47
46
  containingContext,
48
47
  contextType,
@@ -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
  import { changeTab, changeAccordion } from '../actions/ui';
19
20
  import { fetchInitialPage, fetchNextPage } from '../actions/data';
20
21
  import { fetchInitialImages, fetchNextImages } from '../actions/images';
21
- import { createMediaServerSession, fetchFolders, openOrCloseUploadForm, // saveMediaRecording,
22
+ import { createMediaServerSession, fetchFolders, openOrCloseUploadForm,
23
+ // saveMediaRecording,
22
24
  mediaUploadComplete, uploadPreflight, uploadToIconMakerFolder, uploadToMediaFolder } from '../actions/upload';
23
25
  import { searchFlickr, openOrCloseFlickrForm } from '../actions/flickr';
24
26
  import { toggle as toggleFolder } from '../actions/files';
@@ -38,18 +40,12 @@ export default function propsFromDispatch(dispatch) {
38
40
  fetchNextPage: key => dispatch(fetchNextPage(key)),
39
41
  toggleFolder: id => dispatch(toggleFolder(id)),
40
42
  fetchFolders: () => dispatch(fetchFolders()),
41
- fetchInitialImages: function () {
42
- let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
43
- category: DEFAULT_FILE_CATEGORY
44
- };
45
- return dispatch(fetchInitialImages(opts));
46
- },
47
- fetchNextImages: function () {
48
- let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
49
- category: DEFAULT_FILE_CATEGORY
50
- };
51
- return dispatch(fetchNextImages(opts));
52
- },
43
+ fetchInitialImages: (opts = {
44
+ category: DEFAULT_FILE_CATEGORY
45
+ }) => dispatch(fetchInitialImages(opts)),
46
+ fetchNextImages: (opts = {
47
+ category: DEFAULT_FILE_CATEGORY
48
+ }) => dispatch(fetchNextImages(opts)),
53
49
  startUpload: (tabContext, fileMetaProps) => dispatch(uploadPreflight(tabContext, fileMetaProps)),
54
50
  flickrSearch: term => dispatch(searchFlickr(term)),
55
51
  toggleFlickrForm: () => dispatch(openOrCloseFlickrForm()),
@@ -15,18 +15,22 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import * as browser from '../common/browser';
19
20
  export default function (ev, html) {
20
21
  // default data to store
21
22
  let format = 'text/html';
22
- let data = html; // special handling for IE and Edge
23
+ let data = html;
23
24
 
25
+ // special handling for IE and Edge
24
26
  if (browser.edge()) {
25
27
  // MS Edge can do text/html, but may have stuff in ev.dataTransfer.files
26
28
  // (e.g. when dragging an image) that confuses tinymce's onDrop handler
27
29
  // into suppressing the drop event. fortunately, calling clear() on the
28
30
  // items will also clear the ev.dataTransfer.files.
29
- ev.dataTransfer.items.clear();
31
+ if (ev.dataTransfer) {
32
+ ev.dataTransfer.items.clear();
33
+ }
30
34
  } else if (browser.ie()) {
31
35
  // pre-Edge Internet Explorer doesn't like setData with a type other than
32
36
  // 'Text' or 'URL'. fortunately tinymce already provides a workaround
@@ -42,8 +46,10 @@ export default function (ev, html) {
42
46
  //
43
47
  format = 'Text';
44
48
  data = `data:text/mce-internal,rcs-sidebar,${escape(html)}`;
45
- } // place the data into the dataTransfer so it's available for the drop event
46
-
49
+ }
47
50
 
48
- ev.dataTransfer.setData(format, data);
51
+ // place the data into the dataTransfer so it's available for the drop event
52
+ if (ev.dataTransfer) {
53
+ ev.dataTransfer.setData(format, data);
54
+ }
49
55
  }
@@ -15,21 +15,20 @@
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
  // This is a temporary patch until the All Files panel
19
20
  // is rewritten to use the files actions that query
20
21
  // data from the RCS, but still the CanvasContentTray
21
22
  // know when the FileBrowser is actively querying
22
23
  // so we can disable the search box in the Filter
23
- import { ALL_FILES_LOADING } from '../actions/all_files';
24
- export function allFilesLoading() {
25
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
26
- let action = arguments.length > 1 ? arguments[1] : undefined;
27
24
 
25
+ import { ALL_FILES_LOADING } from '../actions/all_files';
26
+ export function allFilesLoading(state = {}, action) {
28
27
  if (action.type === ALL_FILES_LOADING) {
29
- return { ...state,
28
+ return {
29
+ ...state,
30
30
  isLoading: action.payload
31
31
  };
32
32
  }
33
-
34
33
  return state;
35
34
  }