@instructure/canvas-rce 5.14.0 → 5.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/DEVELOPMENT.md +1 -1
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/__tests__/sidebar/reducers/all_files.test.js +28 -0
  17. package/babel.config.js +3 -1
  18. package/build.sh +7 -7
  19. package/es/bridge/Bridge.js +8 -56
  20. package/es/bridge/index.js +1 -0
  21. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  22. package/es/canvasFileBrowser/en-US.js +3 -6
  23. package/es/common/FlashAlert.js +7 -28
  24. package/es/common/browser.js +4 -2
  25. package/es/common/fileUrl.js +104 -59
  26. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  27. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  28. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  29. package/es/common/incremental-loading/index.js +1 -0
  30. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  31. package/es/common/indicate.js +15 -8
  32. package/es/common/mimeClass.js +3 -4
  33. package/es/common/natcompare.js +1 -4
  34. package/es/defaultTinymceConfig.js +5 -3
  35. package/es/elementDenylist.js +1 -0
  36. package/es/enhance-user-content/doc_previews.js +17 -28
  37. package/es/enhance-user-content/enhance_user_content.js +28 -60
  38. package/es/enhance-user-content/external_links.js +5 -8
  39. package/es/enhance-user-content/index.js +1 -0
  40. package/es/enhance-user-content/instructure_helper.js +25 -38
  41. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  42. package/es/enhance-user-content/mathml.js +35 -82
  43. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  44. package/es/format-message.js +3 -4
  45. package/es/getThemeVars.js +8 -6
  46. package/es/getTranslations.js +1 -78
  47. package/es/index.js +3 -1
  48. package/es/rce/AlertMessageArea.js +1 -1
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +1 -0
  51. package/es/rce/RCE.js +12 -11
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +27 -10
  54. package/es/rce/RCEWrapper.js +167 -386
  55. package/es/rce/RCEWrapperProps.js +8 -3
  56. package/es/rce/RceHtmlEditor.js +5 -8
  57. package/es/rce/ResizeHandle.js +3 -8
  58. package/es/rce/RestoreAutoSaveModal.js +1 -2
  59. package/es/rce/ShowOnFocusButton/index.js +0 -6
  60. package/es/rce/StatusBar.js +8 -37
  61. package/es/rce/alertHandler.js +1 -4
  62. package/es/rce/contentInsertion.js +35 -57
  63. package/es/rce/contentInsertionUtils.js +6 -8
  64. package/es/rce/contentRendering.js +7 -12
  65. package/es/rce/customEvents.js +1 -0
  66. package/es/rce/editorLanguage.js +22 -10
  67. package/es/rce/indicatorRegion.js +6 -5
  68. package/es/rce/normalizeLocale.js +5 -3
  69. package/es/rce/normalizeProps.js +3 -1
  70. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  71. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  74. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  75. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  76. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  77. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  83. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  84. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  85. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  86. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  95. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  96. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  97. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  98. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  99. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  100. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  101. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  102. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  103. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  127. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  128. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  129. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  130. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  131. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  132. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  134. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  135. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  136. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  137. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  138. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  139. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  140. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  141. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  144. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  147. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  148. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  149. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  150. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  153. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  154. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  155. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  156. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  159. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  164. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  165. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  166. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  167. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  168. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  169. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  170. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  171. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  172. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  173. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  174. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  175. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  176. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  184. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  185. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  186. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  187. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  188. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  198. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  199. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  201. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  202. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  204. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  205. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  206. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  207. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  208. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  210. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  211. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  212. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  213. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  214. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  215. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  216. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  217. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  218. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  219. package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
  220. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  221. package/es/rce/plugins/shared/ColorInput.js +5 -14
  222. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  223. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  224. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  225. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  226. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  227. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  228. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  229. package/es/rce/plugins/shared/EventUtils.js +1 -3
  230. package/es/rce/plugins/shared/Filter.js +8 -38
  231. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  232. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  233. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  234. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  235. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  236. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  237. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  239. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  240. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  241. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  242. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  244. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  245. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  247. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  248. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  250. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  251. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  252. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  253. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  254. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  255. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  256. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  257. package/es/rce/plugins/shared/Previewable.js +1 -0
  258. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  259. package/es/rce/plugins/shared/StoreContext.js +1 -2
  260. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  261. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  262. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  263. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  264. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  265. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  266. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  267. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  268. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  269. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  270. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  271. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  272. package/es/rce/plugins/shared/Upload/index.js +1 -0
  273. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  274. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  275. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  276. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  277. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  278. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  279. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  280. package/es/rce/plugins/shared/dateUtils.js +1 -1
  281. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  282. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  283. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  284. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  285. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  286. package/es/rce/plugins/shared/fileShape.js +4 -9
  287. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  288. package/es/rce/plugins/shared/fileUtils.js +1 -2
  289. package/es/rce/plugins/shared/linkUtils.js +1 -16
  290. package/es/rce/plugins/shared/round.js +1 -0
  291. package/es/rce/plugins/shared/trayUtils.js +4 -3
  292. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  293. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  294. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  295. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  296. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  297. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  299. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  300. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  321. package/es/rce/root.js +9 -8
  322. package/es/rce/sanitizePlugins.js +1 -3
  323. package/es/rce/style.js +1 -4
  324. package/es/rce/tinyRCE.js +13 -9
  325. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  326. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  327. package/es/rce/transformContent.js +8 -10
  328. package/es/rce/types.js +1 -0
  329. package/es/rce/userOS.js +1 -1
  330. package/es/rce/wrapInitCb.js +50 -43
  331. package/es/rcs/api.js +61 -116
  332. package/es/rcs/buildError.js +5 -17
  333. package/es/rcs/fake.js +4 -13
  334. package/es/sidebar/actions/all_files.js +2 -0
  335. package/es/sidebar/actions/data.js +4 -7
  336. package/es/sidebar/actions/documents.js +9 -6
  337. package/es/sidebar/actions/files.js +3 -6
  338. package/es/sidebar/actions/filter.js +1 -0
  339. package/es/sidebar/actions/flickr.js +1 -1
  340. package/es/sidebar/actions/images.js +12 -11
  341. package/es/sidebar/actions/links.js +1 -0
  342. package/es/sidebar/actions/media.js +12 -10
  343. package/es/sidebar/actions/session.js +1 -3
  344. package/es/sidebar/actions/ui.js +1 -0
  345. package/es/sidebar/actions/upload.js +14 -39
  346. package/es/sidebar/containers/Sidebar.js +1 -2
  347. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  348. package/es/sidebar/dragHtml.js +5 -3
  349. package/es/sidebar/reducers/all_files.js +4 -3
  350. package/es/sidebar/reducers/collection.js +12 -13
  351. package/es/sidebar/reducers/collections.js +5 -5
  352. package/es/sidebar/reducers/documents.js +6 -13
  353. package/es/sidebar/reducers/files.js +3 -3
  354. package/es/sidebar/reducers/filter.js +1 -8
  355. package/es/sidebar/reducers/flickr.js +9 -9
  356. package/es/sidebar/reducers/folder.js +15 -15
  357. package/es/sidebar/reducers/folders.js +3 -3
  358. package/es/sidebar/reducers/images.js +3 -13
  359. package/es/sidebar/reducers/index.js +3 -1
  360. package/es/sidebar/reducers/media.js +6 -13
  361. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  362. package/es/sidebar/reducers/noop.js +1 -0
  363. package/es/sidebar/reducers/rootFolderId.js +1 -2
  364. package/es/sidebar/reducers/session.js +3 -3
  365. package/es/sidebar/reducers/ui.js +3 -16
  366. package/es/sidebar/reducers/upload.js +8 -40
  367. package/es/sidebar/store/configureStore.js +1 -0
  368. package/es/sidebar/store/initialState.js +13 -24
  369. package/es/translations/locales/ab.js +1 -0
  370. package/es/translations/locales/ar.js +67 -9
  371. package/es/translations/locales/ca.js +67 -9
  372. package/es/translations/locales/cs.js +1 -0
  373. package/es/translations/locales/cs_CZ.js +1 -0
  374. package/es/translations/locales/cy.js +67 -9
  375. package/es/translations/locales/da-x-k12.js +67 -9
  376. package/es/translations/locales/da.js +67 -9
  377. package/es/translations/locales/da_DK.js +1 -0
  378. package/es/translations/locales/de.js +67 -9
  379. package/es/translations/locales/el.js +4 -0
  380. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  381. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  382. package/es/translations/locales/en.js +72 -8
  383. package/es/translations/locales/en_AU.js +67 -9
  384. package/es/translations/locales/en_CA.js +67 -9
  385. package/es/translations/locales/en_CY.js +67 -9
  386. package/es/translations/locales/en_GB.js +67 -9
  387. package/es/translations/locales/en_NZ.js +1 -0
  388. package/es/translations/locales/en_SE.js +1 -0
  389. package/es/translations/locales/en_US.js +1 -0
  390. package/es/translations/locales/es.js +67 -9
  391. package/es/translations/locales/es_ES.js +67 -9
  392. package/es/translations/locales/es_GT.js +1 -0
  393. package/es/translations/locales/fa_IR.js +7 -0
  394. package/es/translations/locales/fi.js +67 -9
  395. package/es/translations/locales/fr.js +67 -9
  396. package/es/translations/locales/fr_CA.js +68 -10
  397. package/es/translations/locales/ga.js +5 -13
  398. package/es/translations/locales/he.js +7 -0
  399. package/es/translations/locales/hi.js +67 -9
  400. package/es/translations/locales/ht.js +67 -9
  401. package/es/translations/locales/hu.js +7 -6
  402. package/es/translations/locales/hu_HU.js +1 -0
  403. package/es/translations/locales/hy.js +1 -0
  404. package/es/translations/locales/id.js +67 -9
  405. package/es/translations/locales/id_ID.js +1 -0
  406. package/es/translations/locales/is.js +67 -9
  407. package/es/translations/locales/it.js +67 -9
  408. package/es/translations/locales/ja.js +67 -9
  409. package/es/translations/locales/ko.js +1 -0
  410. package/es/translations/locales/ko_KR.js +1 -0
  411. package/es/translations/locales/lt.js +1 -0
  412. package/es/translations/locales/lt_LT.js +1 -0
  413. package/es/translations/locales/mi.js +67 -9
  414. package/es/translations/locales/mn_MN.js +1 -0
  415. package/es/translations/locales/ms.js +67 -9
  416. package/es/translations/locales/nb-x-k12.js +67 -9
  417. package/es/translations/locales/nb.js +67 -9
  418. package/es/translations/locales/nl.js +67 -9
  419. package/es/translations/locales/nl_NL.js +1 -0
  420. package/es/translations/locales/nn.js +7 -6
  421. package/es/translations/locales/pl.js +67 -9
  422. package/es/translations/locales/pt.js +67 -9
  423. package/es/translations/locales/pt_BR.js +67 -9
  424. package/es/translations/locales/ro.js +1 -0
  425. package/es/translations/locales/ru.js +67 -9
  426. package/es/translations/locales/se.js +1 -0
  427. package/es/translations/locales/sl.js +67 -9
  428. package/es/translations/locales/sv-x-k12.js +67 -9
  429. package/es/translations/locales/sv.js +67 -9
  430. package/es/translations/locales/sv_SE.js +1 -0
  431. package/es/translations/locales/tg.js +1 -0
  432. package/es/translations/locales/th.js +67 -9
  433. package/es/translations/locales/th_TH.js +1 -0
  434. package/es/translations/locales/tl_PH.js +1 -0
  435. package/es/translations/locales/tr.js +7 -0
  436. package/es/translations/locales/uk_UA.js +7 -0
  437. package/es/translations/locales/vi.js +67 -9
  438. package/es/translations/locales/vi_VN.js +1 -0
  439. package/es/translations/locales/zh-Hans.js +67 -9
  440. package/es/translations/locales/zh-Hant.js +67 -9
  441. package/es/translations/locales/zh.js +67 -9
  442. package/es/translations/locales/zh_HK.js +67 -9
  443. package/es/translations/locales/zh_TW.Big5.js +1 -0
  444. package/es/translations/locales/zh_TW.js +1 -0
  445. package/es/translations/tinymce/ar_SA.js +1 -0
  446. package/es/translations/tinymce/fi.js +1 -0
  447. package/es/translations/tinymce/ga.js +1 -0
  448. package/es/translations/tinymce/id.js +1 -0
  449. package/es/translations/tinymce/ru.js +1 -0
  450. package/es/translations/tinymce/ru_RU.js +1 -0
  451. package/es/translations/tinymce/sl.js +1 -0
  452. package/es/translations/tinymce/sr.js +1 -0
  453. package/es/translations/tinymce/th.js +1 -0
  454. package/es/translations/tinymce/uk_UA.js +1 -0
  455. package/es/translations/tinymce/vi_VN.js +1 -0
  456. package/es/util/TypedDict.js +4 -2
  457. package/es/util/encrypted-storage.js +3 -13
  458. package/es/util/file-url-util.js +1 -6
  459. package/es/util/fullscreenHelpers.js +4 -1
  460. package/es/util/instui-icon-helper.js +4 -3
  461. package/es/util/loadingPlaceholder.js +38 -39
  462. package/es/util/simpleCache.js +0 -3
  463. package/es/util/string-util.js +1 -1
  464. package/es/util/textarea-editing-util.js +3 -7
  465. package/es/util/tinymce-plugin-util.js +0 -5
  466. package/es/util/url-util.js +16 -25
  467. package/eslint.config.js +239 -0
  468. package/jest.config.js +1 -1
  469. package/package.json +77 -82
  470. package/scripts/build-canvas +2 -1
  471. package/scripts/build.js +4 -4
  472. package/scripts/publish_to_npm.sh +1 -1
  473. package/testcafe/RCEWrapper.test.js +0 -1
  474. package/testcafe/StatusBar.test.js +0 -1
  475. package/testcafe/axe.test.js +3 -4
  476. package/testcafe/enhanceUserContent.test.js +0 -1
  477. package/tsconfig.json +20 -15
  478. package/.eslintrc +0 -45
  479. package/.prettierignore +0 -6
  480. package/es/common/components/FileTree/File.js +0 -64
  481. package/es/common/components/FileTree/Folder.js +0 -110
  482. package/es/common/components/FileTree/index.js +0 -84
  483. package/es/common/components/FileTree/styles.js +0 -72
  484. package/es/common/components/Loading.js +0 -83
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React, { useEffect } from 'react';
19
20
  import { View } from '@instructure/ui-view';
20
21
  import { Text } from '@instructure/ui-text';
@@ -24,9 +25,7 @@ import formatMessage from '../../../format-message';
24
25
  import { showFlashAlert } from '../../../common/FlashAlert';
25
26
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
26
27
  import { getIcon, getFriendlyLinkType } from './linkUtils';
27
-
28
28
  const getEditMessage = () => formatMessage('If left empty, link text will display as course link name');
29
-
30
29
  export const LinkDisplay = _ref => {
31
30
  let {
32
31
  linkText,
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { Spinner } from '@instructure/ui-spinner';
@@ -22,7 +23,6 @@ import { Flex } from '@instructure/ui-flex';
22
23
  import formatMessage from '../../../format-message';
23
24
  import checkerboardStyle from './CheckerboardStyling';
24
25
  const SQUARE_SIZE = 4;
25
-
26
26
  const PreviewIcon = _ref => {
27
27
  let {
28
28
  color,
@@ -33,10 +33,8 @@ const PreviewIcon = _ref => {
33
33
  checkered
34
34
  } = _ref;
35
35
  const variantSettings = PreviewIcon.variants[variant];
36
-
37
36
  const background = () => {
38
37
  if (loading) return {};
39
-
40
38
  if (image) {
41
39
  return {
42
40
  backgroundImage: `url(${image})`,
@@ -45,7 +43,6 @@ const PreviewIcon = _ref => {
45
43
  backgroundPosition: 'center'
46
44
  };
47
45
  }
48
-
49
46
  return {
50
47
  border: '1px solid #73818C',
51
48
  borderRadius: '3px',
@@ -58,7 +55,6 @@ const PreviewIcon = _ref => {
58
55
  `
59
56
  };
60
57
  };
61
-
62
58
  return /*#__PURE__*/React.createElement("div", {
63
59
  id: "preview-background-wrapper",
64
60
  style: checkered ? checkerboardStyle(SQUARE_SIZE) : {}
@@ -80,7 +76,6 @@ const PreviewIcon = _ref => {
80
76
  size: "small"
81
77
  })))));
82
78
  };
83
-
84
79
  PreviewIcon.variants = {
85
80
  small: {
86
81
  width: '25px',
@@ -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
  // copied from canvas-lms/ui/shared/features/doc-previews/jquery/index.js
19
20
  export const previewableMimeTypes = ['application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.sun.xml.writer', 'application/excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/rtf', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'application/vnd.sun.xml.impress', 'application/vnd.sun.xml.calc', 'application/vnd.ms-excel', 'application/msword', 'application/mspowerpoint', 'application/rtf', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'text/plain', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/postscript', 'application/pdf', 'application/vnd.ms-powerpoint'];
20
21
  export function isPreviewable(type) {
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React, { useMemo } from 'react';
19
20
  import { func, object, string } from 'prop-types';
20
21
  import classnames from 'classnames';
@@ -22,8 +23,9 @@ import { View } from '@instructure/ui-view';
22
23
  import { downloadToWrap } from '../../../common/fileUrl';
23
24
  import { mediaPlayerURLFromFile } from './fileTypeUtils';
24
25
  import RceApiSource from '../../../rcs/api';
25
- import addIconMakerAttributes from '../instructure_icon_maker/utils/addIconMakerAttributes'; // TODO: should find a better way to share this code
26
+ import addIconMakerAttributes from '../instructure_icon_maker/utils/addIconMakerAttributes';
26
27
 
28
+ // TODO: should find a better way to share this code
27
29
  import FileBrowser from '../../../canvasFileBrowser/FileBrowser';
28
30
  import { isPreviewable } from './Previewable';
29
31
  RceFileBrowser.propTypes = {
@@ -56,10 +58,8 @@ export default function RceFileBrowser(props) {
56
58
  canvasOrigin
57
59
  });
58
60
  }, [host, jwt, refreshToken, source, canvasOrigin]);
59
-
60
61
  function handleFileSelect(fileInfo) {
61
62
  var _fileInfo$api$embed, _fileInfo$api;
62
-
63
63
  const content_type = fileInfo.api.type;
64
64
  const canPreview = isPreviewable(content_type);
65
65
  const url = downloadToWrap(fileInfo.src);
@@ -73,7 +73,6 @@ export default function RceFileBrowser(props) {
73
73
  target: '_blank',
74
74
  content_type
75
75
  };
76
-
77
76
  if (((_fileInfo$api = fileInfo.api) === null || _fileInfo$api === void 0 ? void 0 : _fileInfo$api.category) === 'icon_maker_icons') {
78
77
  onFileSelectParams.src = fileInfo.api.url;
79
78
  addIconMakerAttributes(onFileSelectParams);
@@ -83,14 +82,13 @@ export default function RceFileBrowser(props) {
83
82
  instructure_scribd_file: canPreview,
84
83
  inline_disabled: true
85
84
  });
86
- onFileSelectParams = { ...onFileSelectParams,
85
+ onFileSelectParams = {
86
+ ...onFileSelectParams,
87
87
  class: clazz
88
88
  };
89
89
  }
90
-
91
90
  onFileSelect(onFileSelectParams);
92
91
  }
93
-
94
92
  return /*#__PURE__*/React.createElement(View, {
95
93
  as: "div",
96
94
  margin: "medium",
@@ -15,13 +15,13 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React, { createContext, useContext, useState } from 'react';
19
20
  import { connect, Provider as ReduxProvider } from 'react-redux';
20
21
  import bridge from '../../../bridge';
21
22
  import sidebarHandlers from '../../../sidebar/containers/sidebarHandlers';
22
23
  import { propsFromState } from '../../../sidebar/containers/Sidebar';
23
24
  import configureStore from '../../../sidebar/store/configureStore';
24
-
25
25
  function Consumer(_ref) {
26
26
  let {
27
27
  children,
@@ -35,7 +35,6 @@ function Consumer(_ref) {
35
35
  ...props
36
36
  });
37
37
  }
38
-
39
38
  export const StoreConsumer = connect(propsFromState, sidebarHandlers)(Consumer);
40
39
  const StoreContext = /*#__PURE__*/createContext();
41
40
  export function StoreProvider(_ref2) {
@@ -15,7 +15,16 @@
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 PropTypes, { bool, shape } from 'prop-types';
20
+
21
+ /**
22
+ * Interface for content item's 'custom' field, specifically for what is expected to come from Studio
23
+ *
24
+ * Used to determine whether or not Studio embedded media should be resizable, and whether or not we
25
+ * present controls for the user to modify the embedded media.
26
+ */
27
+
19
28
  export const parsedStudioOptionsPropType = shape({
20
29
  resizable: bool.isRequired,
21
30
  convertibleToLink: bool.isRequired
@@ -25,7 +34,6 @@ export function isStudioContentItemCustomJson(input) {
25
34
  }
26
35
  export function studioAttributesFrom(customJson) {
27
36
  var _customJson$resizable, _customJson$enableMed;
28
-
29
37
  return {
30
38
  'data-studio-resizable': (_customJson$resizable = customJson.resizable) !== null && _customJson$resizable !== void 0 ? _customJson$resizable : false,
31
39
  'data-studio-tray-enabled': (_customJson$enableMed = customJson.enableMediaOptions) !== null && _customJson$enableMed !== void 0 ? _customJson$enableMed : false,
@@ -38,14 +46,11 @@ export function displayStyleFrom(studioAttributes) {
38
46
  }
39
47
  export function isStudioEmbeddedMedia(element) {
40
48
  var _tinymceIframeShim$fi;
41
-
42
49
  // Borrowing this structure from isMediaElement in ContentSelection.js
43
50
  const tinymceIframeShim = (element === null || element === void 0 ? void 0 : element.tagName) === 'IFRAME' ? element === null || element === void 0 ? void 0 : element.parentElement : element;
44
-
45
51
  if ((tinymceIframeShim === null || tinymceIframeShim === void 0 ? void 0 : (_tinymceIframeShim$fi = tinymceIframeShim.firstElementChild) === null || _tinymceIframeShim$fi === void 0 ? void 0 : _tinymceIframeShim$fi.tagName) !== 'IFRAME') {
46
52
  return false;
47
53
  }
48
-
49
54
  return tinymceIframeShim.getAttribute('data-mce-p-data-studio-tray-enabled') === 'true';
50
55
  }
51
56
  export function parseStudioOptions(element) {
@@ -55,16 +60,15 @@ export function parseStudioOptions(element) {
55
60
  convertibleToLink: (tinymceIframeShim === null || tinymceIframeShim === void 0 ? void 0 : tinymceIframeShim.getAttribute('data-mce-p-data-studio-convertible-to-link')) === 'true'
56
61
  };
57
62
  }
63
+
58
64
  /**
59
65
  * Tinymce adds an overlay when you click on an iframe inside the editor. It will by default
60
66
  * add resize handles to the corners of the overlay. The code that adds these handles won't
61
67
  * if the overlay has `data-mce-resize='false'` on it. Here, we force that behavior when the
62
68
  * underlying iframe has a `data-studio-resizable='false'`
63
69
  */
64
-
65
70
  export function handleBeforeObjectSelected(e) {
66
71
  const targetElement = e.target;
67
-
68
72
  if (targetElement.getAttribute('data-mce-p-data-studio-resizable') === 'false') {
69
73
  targetElement.setAttribute('data-mce-resize', 'false');
70
74
  }
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import { View } from '@instructure/ui-view';
20
21
  import { Text } from '@instructure/ui-text';
@@ -1,5 +1,4 @@
1
1
  import _pt from "prop-types";
2
-
3
2
  /*
4
3
  * Copyright (C) 2024 - present Instructure, Inc.
5
4
  *
@@ -17,6 +16,7 @@ import _pt from "prop-types";
17
16
  * You should have received a copy of the GNU Affero General Public License along
18
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
18
  */
19
+
20
20
  import React, { useState } from 'react';
21
21
  import { Flex } from '@instructure/ui-flex';
22
22
  import ErrorBoundary from '../ErrorBoundary';
@@ -34,18 +34,19 @@ export default function CanvasContentPanel(_ref) {
34
34
  } = _ref;
35
35
  const [filterSettings, setFilterSettings] = useFilterSettings(FILTER_SETTINGS_BY_PLUGIN[plugin]);
36
36
  const [link, setLink] = useState(null);
37
- const [hasLoaded, setHasLoaded] = useState(false); // storeProps has functions that collide with what we want to do in a block editor setting
37
+ const [hasLoaded, setHasLoaded] = useState(false);
38
38
 
39
+ // storeProps has functions that collide with what we want to do in a block editor setting
39
40
  const baseStoreProps = useStoreProps();
40
41
  const {
41
42
  onImageEmbed: _,
43
+ onMediaEmbed: _m,
42
44
  ...storeProps
43
45
  } = baseStoreProps;
44
-
45
46
  function handleFilterChange(newFilter, onChangeContext, onChangeSearchString, onChangeSortBy) {
46
- const newFilterSettings = { ...newFilter
47
+ const newFilterSettings = {
48
+ ...newFilter
47
49
  };
48
-
49
50
  if (newFilterSettings.sortValue) {
50
51
  newFilterSettings.sortDir = newFilterSettings.sortValue === 'alphabetical' ? 'asc' : 'desc';
51
52
  onChangeSortBy({
@@ -53,50 +54,43 @@ export default function CanvasContentPanel(_ref) {
53
54
  dir: newFilterSettings.sortDir
54
55
  });
55
56
  }
56
-
57
57
  if ('searchString' in newFilterSettings && filterSettings.searchString !== newFilterSettings.searchString) {
58
58
  onChangeSearchString(newFilterSettings.searchString);
59
59
  }
60
-
61
60
  setFilterSettings(newFilterSettings);
62
-
63
61
  if (newFilterSettings.contentType) {
64
62
  let contextType, contextId;
65
-
66
63
  switch (newFilterSettings.contentType) {
67
64
  case 'user_files':
68
65
  contextType = 'user';
69
66
  contextId = trayProps.containingContext.userId;
70
67
  break;
71
-
72
68
  case 'group_files':
73
69
  contextType = 'group';
74
70
  contextId = trayProps.containingContext.contextId;
75
71
  break;
76
-
77
72
  case 'course_files':
78
73
  contextType = trayProps.contextType;
79
74
  contextId = trayProps.containingContext.contextId;
80
75
  break;
81
-
82
76
  case 'links':
83
77
  contextType = trayProps.containingContext.contextType;
84
78
  contextId = trayProps.containingContext.contextId;
85
79
  }
86
-
87
80
  onChangeContext({
88
81
  contextType,
89
82
  contextId
90
- }); // context is only changed on load
91
-
83
+ });
84
+ // context is only changed on load
92
85
  setHasLoaded(true);
93
86
  }
94
87
  }
95
-
96
88
  const handleImageClick = image => {
97
89
  setFileUrl(image.href);
98
90
  };
99
-
91
+ const handleMediaClick = media => {
92
+ setFileUrl(`/media_attachments_iframe/${media.id}`);
93
+ };
100
94
  return /*#__PURE__*/React.createElement(Flex, {
101
95
  as: "div",
102
96
  direction: "column",
@@ -134,7 +128,8 @@ export default function CanvasContentPanel(_ref) {
134
128
  editing: false,
135
129
  onEditClick: setLink,
136
130
  selectedLink: link,
137
- onImageEmbed: handleImageClick
131
+ onImageEmbed: handleImageClick,
132
+ onMediaEmbed: handleMediaClick
138
133
  }, storeProps)))))));
139
134
  }
140
135
  CanvasContentPanel.propTypes = {
@@ -15,10 +15,10 @@
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 SvgProcessor from './SvgCategoryProcessor';
19
20
  export async function process(file) {
20
21
  var _file$type;
21
-
22
22
  // Determine which processor to use based on file type.
23
23
  // If no matching processor is found for the given file type, return undefined
24
24
  if (file !== null && file !== void 0 && (_file$type = file.type) !== null && _file$type !== void 0 && _file$type.includes(SvgProcessor.typeTest)) {
@@ -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
  // NOTE: if you're looking in here for the ComputerPanel that's used for
19
20
  // the RCE's Media > Upload/Record Media function, it's not this one
20
21
  // (though this panel can handle video with the right "accept" prop).
21
22
  // See @instructure/canvas-media/src/ComputerPanel.js
23
+
22
24
  import React, { useCallback, useEffect, useRef, useState } from 'react';
23
25
  import { arrayOf, func, number, object, oneOfType, shape, string } from 'prop-types';
24
26
  import { StyleSheet, css } from 'aphrodite';
@@ -38,34 +40,26 @@ import { MediaPlayer } from '@instructure/ui-media-player';
38
40
  import { RocketSVG, useComputerPanelFocus, isAudio, isPreviewable, sizeMediaPlayer } from '@instructure/canvas-media';
39
41
  import formatMessage from '../../../../format-message';
40
42
  import { getIconFromType, isAudioOrVideo, isImage, isText, isIWork, getIWorkType } from '../fileTypeUtils';
41
-
42
43
  function isPreviewableAudioOrVideo(type) {
43
44
  return isPreviewable(type) && isAudioOrVideo(type);
44
45
  }
45
-
46
46
  function readFile(theFile) {
47
47
  const p = new Promise((resolve, reject) => {
48
48
  const reader = new FileReader();
49
-
50
49
  reader.onload = () => {
51
50
  let result = reader.result;
52
-
53
51
  if (isText(theFile.type) && result.length > 1000) {
54
52
  result = `${result.substr(0, 1000)}...`;
55
53
  }
56
-
57
54
  resolve(result);
58
55
  };
59
-
60
56
  reader.onerror = () => {
61
57
  reject(new Error(formatMessage('An error occured reading the file')));
62
58
  };
63
-
64
59
  if (theFile.size === 0) {
65
60
  // canvas will reject uploading an empty file
66
61
  reject(new Error(formatMessage('You may not upload an empty file.')));
67
62
  }
68
-
69
63
  if (isImage(theFile.type)) {
70
64
  reader.readAsDataURL(theFile);
71
65
  } else if (isText(theFile.type)) {
@@ -78,19 +72,17 @@ function readFile(theFile) {
78
72
  }];
79
73
  resolve(sources);
80
74
  } else {
81
- let type = theFile.type; // Native JS File API returns empty string if it can't determine the type
82
-
75
+ let type = theFile.type;
76
+ // Native JS File API returns empty string if it can't determine the type
83
77
  if (type === '' && isIWork(theFile.name)) {
84
78
  type = getIWorkType(theFile.name);
85
79
  }
86
-
87
80
  const icon = getIconFromType(type);
88
81
  resolve(icon);
89
82
  }
90
83
  });
91
84
  return p;
92
85
  }
93
-
94
86
  export default function ComputerPanel(_ref) {
95
87
  let {
96
88
  theFile,
@@ -104,31 +96,28 @@ export default function ComputerPanel(_ref) {
104
96
  const [preview, setPreview] = useState({
105
97
  preview: null,
106
98
  isLoading: false
107
- }); // the trashcan is 38px tall and the 1.5rem margin-bottom
99
+ });
100
+ // the trashcan is 38px tall and the 1.5rem margin-bottom
108
101
  // the 350 is to guarantee the video doesn't oveflow into the copyright UI,
109
102
  // which should probably be rendered here and not up in the modal because
110
103
  // dealing with Tabs and size is nearly impossible
111
-
112
104
  const height = Math.min(350, 0.8 * (bounds.height - 38 - px('1.5rem')));
113
105
  const width = 0.8 * bounds.width;
114
106
  useEffect(() => {
115
107
  return () => {
116
108
  if (Array.isArray(preview === null || preview === void 0 ? void 0 : preview.preview)) {
117
109
  var _URL, _URL$revokeObjectURL;
118
-
119
110
  (_URL = URL) === null || _URL === void 0 ? void 0 : (_URL$revokeObjectURL = _URL.revokeObjectURL) === null || _URL$revokeObjectURL === void 0 ? void 0 : _URL$revokeObjectURL.call(_URL, preview.preview[0].src);
120
111
  }
121
112
  };
122
113
  }, [preview]);
123
114
  useEffect(() => {
124
115
  if (!theFile || preview.isLoading || preview.preview || preview.error) return;
125
-
126
116
  async function getPreview() {
127
117
  setPreview({
128
118
  preview: null,
129
119
  isLoading: true
130
120
  });
131
-
132
121
  try {
133
122
  const previewer = await readFile(theFile);
134
123
  setPreview({
@@ -136,7 +125,6 @@ export default function ComputerPanel(_ref) {
136
125
  isLoading: false
137
126
  });
138
127
  setError(null);
139
-
140
128
  if (isImage(theFile.type)) {
141
129
  // we need the preview to know the image size to show the placeholder
142
130
  theFile.preview = previewer;
@@ -151,7 +139,6 @@ export default function ComputerPanel(_ref) {
151
139
  });
152
140
  }
153
141
  }
154
-
155
142
  getPreview();
156
143
  });
157
144
  const handleLoadedMetadata = useCallback(event => {
@@ -162,16 +149,15 @@ export default function ComputerPanel(_ref) {
162
149
  });
163
150
  player.style.width = sz.width;
164
151
  player.style.height = sz.height;
165
- player.style.margin = '0 auto'; // from this sub-package, I don't have a URL to use as the
152
+ player.style.margin = '0 auto';
153
+ // from this sub-package, I don't have a URL to use as the
166
154
  // audio player's poster image. We can give it a background image though
167
-
168
155
  player.classList.add(isAudio(theFile.type) ? 'audio-player' : 'video-player');
169
156
  }, [theFile, width, height]);
170
157
  const previewPanelRef = useRef(null);
171
158
  const clearButtonRef = useRef(null);
172
159
  const panelRef = useRef(null);
173
160
  useComputerPanelFocus(theFile, panelRef, clearButtonRef);
174
-
175
161
  function renderPreview() {
176
162
  if (preview.isLoading) {
177
163
  return /*#__PURE__*/React.createElement("div", {
@@ -231,7 +217,6 @@ export default function ComputerPanel(_ref) {
231
217
  }
232
218
  }
233
219
  }
234
-
235
220
  if (theFile) {
236
221
  const filename = theFile.name;
237
222
  return /*#__PURE__*/React.createElement("div", {
@@ -269,7 +254,6 @@ export default function ComputerPanel(_ref) {
269
254
  margin: "0 auto"
270
255
  }, renderPreview()));
271
256
  }
272
-
273
257
  return /*#__PURE__*/React.createElement("div", {
274
258
  ref: panelRef
275
259
  }, /*#__PURE__*/React.createElement(FileDrop, {
@@ -277,11 +261,9 @@ export default function ComputerPanel(_ref) {
277
261
  accept: accept,
278
262
  onDropAccepted: _ref2 => {
279
263
  let [file] = _ref2;
280
-
281
264
  if (messages.length) {
282
265
  setMessages([]);
283
266
  }
284
-
285
267
  setFile(file);
286
268
  },
287
269
  onDropRejected: () => {
@@ -1,5 +1,4 @@
1
1
  import _pt from "prop-types";
2
-
3
2
  /*
4
3
  * Copyright (C) 2024 - present Instructure, Inc.
5
4
  *
@@ -17,6 +16,7 @@ import _pt from "prop-types";
17
16
  * You should have received a copy of the GNU Affero General Public License along
18
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
18
  */
19
+
20
20
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
21
21
  import { IconButton } from '@instructure/ui-buttons';
22
22
  import { Flex } from '@instructure/ui-flex';
@@ -25,11 +25,9 @@ import { SimpleSelect } from '@instructure/ui-simple-select';
25
25
  import { TextInput } from '@instructure/ui-text-input';
26
26
  import formatMessage from 'format-message';
27
27
  import React, { useEffect, useState } from 'react';
28
-
29
28
  function shouldSearch(searchString) {
30
29
  return searchString.length === 0 || searchString.length >= 3;
31
30
  }
32
-
33
31
  export default function PanelFilter(_ref) {
34
32
  let {
35
33
  mountNode,
@@ -39,8 +37,9 @@ export default function PanelFilter(_ref) {
39
37
  contentType
40
38
  } = _ref;
41
39
  const [pendingSearchString, setPendingSearchString] = useState(searchString);
42
- const [searchInputTimer, setSearchInputTimer] = useState(0); // only run on mounting to trigger change to correct contextType
40
+ const [searchInputTimer, setSearchInputTimer] = useState(0);
43
41
 
42
+ // only run on mounting to trigger change to correct contextType
44
43
  useEffect(() => {
45
44
  onChange({
46
45
  contentType
@@ -53,28 +52,22 @@ export default function PanelFilter(_ref) {
53
52
  window.clearTimeout(searchInputTimer);
54
53
  setSearchInputTimer(0);
55
54
  }
56
-
57
55
  onChange({
58
56
  searchString: value
59
57
  });
60
58
  }
61
59
  }
62
-
63
60
  function handleChangeSearch(value) {
64
61
  setPendingSearchString(value);
65
-
66
62
  if (searchInputTimer) {
67
63
  window.clearTimeout(searchInputTimer);
68
64
  }
69
-
70
65
  const tid = window.setTimeout(() => doSearch(value), 250);
71
66
  setSearchInputTimer(tid);
72
67
  }
73
-
74
68
  function handleClear() {
75
69
  handleChangeSearch('');
76
70
  }
77
-
78
71
  function renderClearButton() {
79
72
  if (pendingSearchString) {
80
73
  return /*#__PURE__*/React.createElement(IconButton, {
@@ -85,10 +78,8 @@ export default function PanelFilter(_ref) {
85
78
  size: "small"
86
79
  }, /*#__PURE__*/React.createElement(IconXLine, null));
87
80
  }
88
-
89
81
  return undefined;
90
82
  }
91
-
92
83
  return /*#__PURE__*/React.createElement(Flex, {
93
84
  margin: "none xx-large none none",
94
85
  gap: "small",
@@ -15,21 +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 { ICON_MAKER_ICONS, TYPE, SVG_TYPE } from '../../instructure_icon_maker/svg/constants';
19
20
  export const typeTest = SVG_TYPE;
20
21
  const sliceSize = 400; // bytes
21
-
22
22
  const iconMakerType = TYPE;
23
23
  export async function process(file) {
24
24
  try {
25
25
  // The first slice of 400 bytes is sufficient to grab
26
26
  // the "type" metadata for icon maker SVGs
27
27
  const slice = await file.slice(0, sliceSize).text();
28
-
29
28
  if (slice.includes(iconMakerType)) {
30
29
  return {
31
30
  category: ICON_MAKER_ICONS
32
31
  };
33
32
  }
34
- } catch {}
33
+ } catch {
34
+ // intentionally empty
35
+ }
35
36
  }