@instructure/canvas-rce 5.14.0 → 5.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/DEVELOPMENT.md +1 -1
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/__tests__/sidebar/reducers/all_files.test.js +28 -0
  17. package/babel.config.js +3 -1
  18. package/build.sh +7 -7
  19. package/es/bridge/Bridge.js +8 -56
  20. package/es/bridge/index.js +1 -0
  21. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  22. package/es/canvasFileBrowser/en-US.js +3 -6
  23. package/es/common/FlashAlert.js +7 -28
  24. package/es/common/browser.js +4 -2
  25. package/es/common/fileUrl.js +104 -59
  26. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  27. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  28. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  29. package/es/common/incremental-loading/index.js +1 -0
  30. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  31. package/es/common/indicate.js +15 -8
  32. package/es/common/mimeClass.js +3 -4
  33. package/es/common/natcompare.js +1 -4
  34. package/es/defaultTinymceConfig.js +5 -3
  35. package/es/elementDenylist.js +1 -0
  36. package/es/enhance-user-content/doc_previews.js +17 -28
  37. package/es/enhance-user-content/enhance_user_content.js +28 -60
  38. package/es/enhance-user-content/external_links.js +5 -8
  39. package/es/enhance-user-content/index.js +1 -0
  40. package/es/enhance-user-content/instructure_helper.js +25 -38
  41. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  42. package/es/enhance-user-content/mathml.js +35 -82
  43. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  44. package/es/format-message.js +3 -4
  45. package/es/getThemeVars.js +8 -6
  46. package/es/getTranslations.js +1 -78
  47. package/es/index.js +3 -1
  48. package/es/rce/AlertMessageArea.js +1 -1
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +1 -0
  51. package/es/rce/RCE.js +12 -11
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +27 -10
  54. package/es/rce/RCEWrapper.js +167 -386
  55. package/es/rce/RCEWrapperProps.js +8 -3
  56. package/es/rce/RceHtmlEditor.js +5 -8
  57. package/es/rce/ResizeHandle.js +3 -8
  58. package/es/rce/RestoreAutoSaveModal.js +1 -2
  59. package/es/rce/ShowOnFocusButton/index.js +0 -6
  60. package/es/rce/StatusBar.js +8 -37
  61. package/es/rce/alertHandler.js +1 -4
  62. package/es/rce/contentInsertion.js +35 -57
  63. package/es/rce/contentInsertionUtils.js +6 -8
  64. package/es/rce/contentRendering.js +7 -12
  65. package/es/rce/customEvents.js +1 -0
  66. package/es/rce/editorLanguage.js +22 -10
  67. package/es/rce/indicatorRegion.js +6 -5
  68. package/es/rce/normalizeLocale.js +5 -3
  69. package/es/rce/normalizeProps.js +3 -1
  70. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  71. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  74. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  75. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  76. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  77. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  83. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  84. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  85. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  86. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  95. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  96. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  97. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  98. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  99. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  100. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  101. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  102. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  103. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  127. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  128. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  129. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  130. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  131. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  132. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  134. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  135. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  136. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  137. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  138. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  139. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  140. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  141. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  144. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  147. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  148. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  149. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  150. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  153. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  154. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  155. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  156. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  159. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  164. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  165. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  166. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  167. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  168. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  169. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  170. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  171. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  172. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  173. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  174. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  175. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  176. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  184. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  185. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  186. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  187. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  188. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  198. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  199. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  201. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  202. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  204. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  205. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  206. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  207. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  208. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  210. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  211. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  212. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  213. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  214. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  215. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  216. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  217. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  218. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  219. package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
  220. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  221. package/es/rce/plugins/shared/ColorInput.js +5 -14
  222. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  223. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  224. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  225. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  226. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  227. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  228. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  229. package/es/rce/plugins/shared/EventUtils.js +1 -3
  230. package/es/rce/plugins/shared/Filter.js +8 -38
  231. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  232. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  233. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  234. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  235. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  236. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  237. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  239. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  240. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  241. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  242. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  244. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  245. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  247. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  248. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  250. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  251. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  252. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  253. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  254. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  255. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  256. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  257. package/es/rce/plugins/shared/Previewable.js +1 -0
  258. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  259. package/es/rce/plugins/shared/StoreContext.js +1 -2
  260. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  261. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  262. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  263. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  264. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  265. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  266. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  267. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  268. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  269. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  270. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  271. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  272. package/es/rce/plugins/shared/Upload/index.js +1 -0
  273. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  274. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  275. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  276. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  277. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  278. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  279. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  280. package/es/rce/plugins/shared/dateUtils.js +1 -1
  281. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  282. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  283. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  284. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  285. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  286. package/es/rce/plugins/shared/fileShape.js +4 -9
  287. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  288. package/es/rce/plugins/shared/fileUtils.js +1 -2
  289. package/es/rce/plugins/shared/linkUtils.js +1 -16
  290. package/es/rce/plugins/shared/round.js +1 -0
  291. package/es/rce/plugins/shared/trayUtils.js +4 -3
  292. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  293. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  294. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  295. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  296. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  297. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  299. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  300. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  321. package/es/rce/root.js +9 -8
  322. package/es/rce/sanitizePlugins.js +1 -3
  323. package/es/rce/style.js +1 -4
  324. package/es/rce/tinyRCE.js +13 -9
  325. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  326. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  327. package/es/rce/transformContent.js +8 -10
  328. package/es/rce/types.js +1 -0
  329. package/es/rce/userOS.js +1 -1
  330. package/es/rce/wrapInitCb.js +50 -43
  331. package/es/rcs/api.js +61 -116
  332. package/es/rcs/buildError.js +5 -17
  333. package/es/rcs/fake.js +4 -13
  334. package/es/sidebar/actions/all_files.js +2 -0
  335. package/es/sidebar/actions/data.js +4 -7
  336. package/es/sidebar/actions/documents.js +9 -6
  337. package/es/sidebar/actions/files.js +3 -6
  338. package/es/sidebar/actions/filter.js +1 -0
  339. package/es/sidebar/actions/flickr.js +1 -1
  340. package/es/sidebar/actions/images.js +12 -11
  341. package/es/sidebar/actions/links.js +1 -0
  342. package/es/sidebar/actions/media.js +12 -10
  343. package/es/sidebar/actions/session.js +1 -3
  344. package/es/sidebar/actions/ui.js +1 -0
  345. package/es/sidebar/actions/upload.js +14 -39
  346. package/es/sidebar/containers/Sidebar.js +1 -2
  347. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  348. package/es/sidebar/dragHtml.js +5 -3
  349. package/es/sidebar/reducers/all_files.js +4 -3
  350. package/es/sidebar/reducers/collection.js +12 -13
  351. package/es/sidebar/reducers/collections.js +5 -5
  352. package/es/sidebar/reducers/documents.js +6 -13
  353. package/es/sidebar/reducers/files.js +3 -3
  354. package/es/sidebar/reducers/filter.js +1 -8
  355. package/es/sidebar/reducers/flickr.js +9 -9
  356. package/es/sidebar/reducers/folder.js +15 -15
  357. package/es/sidebar/reducers/folders.js +3 -3
  358. package/es/sidebar/reducers/images.js +3 -13
  359. package/es/sidebar/reducers/index.js +3 -1
  360. package/es/sidebar/reducers/media.js +6 -13
  361. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  362. package/es/sidebar/reducers/noop.js +1 -0
  363. package/es/sidebar/reducers/rootFolderId.js +1 -2
  364. package/es/sidebar/reducers/session.js +3 -3
  365. package/es/sidebar/reducers/ui.js +3 -16
  366. package/es/sidebar/reducers/upload.js +8 -40
  367. package/es/sidebar/store/configureStore.js +1 -0
  368. package/es/sidebar/store/initialState.js +13 -24
  369. package/es/translations/locales/ab.js +1 -0
  370. package/es/translations/locales/ar.js +67 -9
  371. package/es/translations/locales/ca.js +67 -9
  372. package/es/translations/locales/cs.js +1 -0
  373. package/es/translations/locales/cs_CZ.js +1 -0
  374. package/es/translations/locales/cy.js +67 -9
  375. package/es/translations/locales/da-x-k12.js +67 -9
  376. package/es/translations/locales/da.js +67 -9
  377. package/es/translations/locales/da_DK.js +1 -0
  378. package/es/translations/locales/de.js +67 -9
  379. package/es/translations/locales/el.js +4 -0
  380. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  381. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  382. package/es/translations/locales/en.js +72 -8
  383. package/es/translations/locales/en_AU.js +67 -9
  384. package/es/translations/locales/en_CA.js +67 -9
  385. package/es/translations/locales/en_CY.js +67 -9
  386. package/es/translations/locales/en_GB.js +67 -9
  387. package/es/translations/locales/en_NZ.js +1 -0
  388. package/es/translations/locales/en_SE.js +1 -0
  389. package/es/translations/locales/en_US.js +1 -0
  390. package/es/translations/locales/es.js +67 -9
  391. package/es/translations/locales/es_ES.js +67 -9
  392. package/es/translations/locales/es_GT.js +1 -0
  393. package/es/translations/locales/fa_IR.js +7 -0
  394. package/es/translations/locales/fi.js +67 -9
  395. package/es/translations/locales/fr.js +67 -9
  396. package/es/translations/locales/fr_CA.js +68 -10
  397. package/es/translations/locales/ga.js +5 -13
  398. package/es/translations/locales/he.js +7 -0
  399. package/es/translations/locales/hi.js +67 -9
  400. package/es/translations/locales/ht.js +67 -9
  401. package/es/translations/locales/hu.js +7 -6
  402. package/es/translations/locales/hu_HU.js +1 -0
  403. package/es/translations/locales/hy.js +1 -0
  404. package/es/translations/locales/id.js +67 -9
  405. package/es/translations/locales/id_ID.js +1 -0
  406. package/es/translations/locales/is.js +67 -9
  407. package/es/translations/locales/it.js +67 -9
  408. package/es/translations/locales/ja.js +67 -9
  409. package/es/translations/locales/ko.js +1 -0
  410. package/es/translations/locales/ko_KR.js +1 -0
  411. package/es/translations/locales/lt.js +1 -0
  412. package/es/translations/locales/lt_LT.js +1 -0
  413. package/es/translations/locales/mi.js +67 -9
  414. package/es/translations/locales/mn_MN.js +1 -0
  415. package/es/translations/locales/ms.js +67 -9
  416. package/es/translations/locales/nb-x-k12.js +67 -9
  417. package/es/translations/locales/nb.js +67 -9
  418. package/es/translations/locales/nl.js +67 -9
  419. package/es/translations/locales/nl_NL.js +1 -0
  420. package/es/translations/locales/nn.js +7 -6
  421. package/es/translations/locales/pl.js +67 -9
  422. package/es/translations/locales/pt.js +67 -9
  423. package/es/translations/locales/pt_BR.js +67 -9
  424. package/es/translations/locales/ro.js +1 -0
  425. package/es/translations/locales/ru.js +67 -9
  426. package/es/translations/locales/se.js +1 -0
  427. package/es/translations/locales/sl.js +67 -9
  428. package/es/translations/locales/sv-x-k12.js +67 -9
  429. package/es/translations/locales/sv.js +67 -9
  430. package/es/translations/locales/sv_SE.js +1 -0
  431. package/es/translations/locales/tg.js +1 -0
  432. package/es/translations/locales/th.js +67 -9
  433. package/es/translations/locales/th_TH.js +1 -0
  434. package/es/translations/locales/tl_PH.js +1 -0
  435. package/es/translations/locales/tr.js +7 -0
  436. package/es/translations/locales/uk_UA.js +7 -0
  437. package/es/translations/locales/vi.js +67 -9
  438. package/es/translations/locales/vi_VN.js +1 -0
  439. package/es/translations/locales/zh-Hans.js +67 -9
  440. package/es/translations/locales/zh-Hant.js +67 -9
  441. package/es/translations/locales/zh.js +67 -9
  442. package/es/translations/locales/zh_HK.js +67 -9
  443. package/es/translations/locales/zh_TW.Big5.js +1 -0
  444. package/es/translations/locales/zh_TW.js +1 -0
  445. package/es/translations/tinymce/ar_SA.js +1 -0
  446. package/es/translations/tinymce/fi.js +1 -0
  447. package/es/translations/tinymce/ga.js +1 -0
  448. package/es/translations/tinymce/id.js +1 -0
  449. package/es/translations/tinymce/ru.js +1 -0
  450. package/es/translations/tinymce/ru_RU.js +1 -0
  451. package/es/translations/tinymce/sl.js +1 -0
  452. package/es/translations/tinymce/sr.js +1 -0
  453. package/es/translations/tinymce/th.js +1 -0
  454. package/es/translations/tinymce/uk_UA.js +1 -0
  455. package/es/translations/tinymce/vi_VN.js +1 -0
  456. package/es/util/TypedDict.js +4 -2
  457. package/es/util/encrypted-storage.js +3 -13
  458. package/es/util/file-url-util.js +1 -6
  459. package/es/util/fullscreenHelpers.js +4 -1
  460. package/es/util/instui-icon-helper.js +4 -3
  461. package/es/util/loadingPlaceholder.js +38 -39
  462. package/es/util/simpleCache.js +0 -3
  463. package/es/util/string-util.js +1 -1
  464. package/es/util/textarea-editing-util.js +3 -7
  465. package/es/util/tinymce-plugin-util.js +0 -5
  466. package/es/util/url-util.js +16 -25
  467. package/eslint.config.js +239 -0
  468. package/jest.config.js +1 -1
  469. package/package.json +77 -82
  470. package/scripts/build-canvas +2 -1
  471. package/scripts/build.js +4 -4
  472. package/scripts/publish_to_npm.sh +1 -1
  473. package/testcafe/RCEWrapper.test.js +0 -1
  474. package/testcafe/StatusBar.test.js +0 -1
  475. package/testcafe/axe.test.js +3 -4
  476. package/testcafe/enhanceUserContent.test.js +0 -1
  477. package/tsconfig.json +20 -15
  478. package/.eslintrc +0 -45
  479. package/.prettierignore +0 -6
  480. package/es/common/components/FileTree/File.js +0 -64
  481. package/es/common/components/FileTree/Folder.js +0 -110
  482. package/es/common/components/FileTree/index.js +0 -84
  483. package/es/common/components/FileTree/styles.js +0 -72
  484. package/es/common/components/Loading.js +0 -83
@@ -1,5 +1,4 @@
1
1
  // @ts-nocheck
2
-
3
2
  /*
4
3
  * Copyright (C) 2018 - present Instructure, Inc.
5
4
  *
@@ -17,25 +16,24 @@
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 { isContentItemIframeJson, isContentItemThumbnailJson } from './Lti13ContentItemJson';
21
21
  import { addParentFrameContextToUrl } from '../util/addParentFrameContextToUrl';
22
+
22
23
  /**
23
24
  * Represents an LTI 1.3 Deep Linking Content Item for purposes related to the Rich Content Editor.
24
25
  *
25
26
  * Use rceLti13ContentItemFromJson to create instances of this class.
26
27
  */
27
-
28
28
  export class RceLti13ContentItem {
29
29
  constructor(type, json, context) {
30
30
  this.type = type;
31
31
  this.json = json;
32
32
  this.context = context;
33
33
  }
34
-
35
34
  get untypedJson() {
36
35
  return this.json;
37
36
  }
38
-
39
37
  linkThumbnail() {
40
38
  if (isContentItemThumbnailJson(this.untypedJson.thumbnail)) {
41
39
  const {
@@ -48,51 +46,39 @@ export class RceLti13ContentItem {
48
46
  return this.imageTag(this.untypedJson.thumbnail);
49
47
  }
50
48
  }
51
-
52
49
  iframeTag() {
53
50
  const iframeInfo = this.untypedJson.iframe;
54
-
55
51
  if (isContentItemIframeJson(iframeInfo)) {
56
52
  var _addParentFrameContex, _this$context$ltiIfra;
57
-
58
53
  const iframeTag = document.createElement('iframe');
59
54
  iframeTag.setAttribute('src', (_addParentFrameContex = addParentFrameContextToUrl(iframeInfo.src, this.context.containingCanvasLtiToolId)) !== null && _addParentFrameContex !== void 0 ? _addParentFrameContex : '');
60
55
  iframeTag.setAttribute('title', this.buildTitle() || '');
61
56
  iframeTag.setAttribute('allowfullscreen', 'true');
62
57
  iframeTag.setAttribute('allow', (_this$context$ltiIfra = this.context.ltiIframeAllowPolicy) !== null && _this$context$ltiIfra !== void 0 ? _this$context$ltiIfra : '');
63
-
64
58
  if (iframeInfo.width) {
65
59
  iframeTag.style.width = `${iframeInfo.width}px`;
66
60
  }
67
-
68
61
  if (iframeInfo.height) {
69
62
  iframeTag.style.height = `${iframeInfo.height}px`;
70
63
  }
71
-
72
64
  return iframeTag.outerHTML;
73
65
  }
74
66
  }
75
-
76
67
  imageTag(src, width, height) {
77
68
  const imgTag = document.createElement('img');
78
69
  imgTag.setAttribute('src', src);
79
70
  const text = this.buildText();
80
-
81
71
  if (text != null) {
82
72
  imgTag.setAttribute('alt', text);
83
73
  }
84
-
85
74
  if (width) {
86
75
  imgTag.setAttribute('width', width.toString());
87
76
  }
88
-
89
77
  if (height) {
90
78
  imgTag.setAttribute('height', height.toString());
91
79
  }
92
-
93
80
  return imgTag.outerHTML;
94
81
  }
95
-
96
82
  anchorTag(innerHTML) {
97
83
  const anchorTag = document.createElement('a');
98
84
  anchorTag.setAttribute('href', this.safeUrl);
@@ -101,11 +87,8 @@ export class RceLti13ContentItem {
101
87
  anchorTag.innerHTML = innerHTML || '';
102
88
  return anchorTag.outerHTML;
103
89
  }
104
-
105
90
  get safeUrl() {
106
91
  var _this$buildUrl;
107
-
108
92
  return ((_this$buildUrl = this.buildUrl()) === null || _this$buildUrl === void 0 ? void 0 : _this$buildUrl.replace(/^(data:text\/html|javascript:)/, '#$1')) || '';
109
93
  }
110
-
111
94
  }
@@ -15,65 +15,52 @@
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 { RceLti13ContentItem } from '../RceLti13ContentItem';
19
20
  // Base content item type
20
21
  export default class BaseLinkContentItem extends RceLti13ContentItem {
21
22
  toHtmlString() {
22
23
  var _this$iframe;
23
-
24
24
  if (((_this$iframe = this.iframe) === null || _this$iframe === void 0 ? void 0 : _this$iframe.src) != null) {
25
25
  return this.iframeTag();
26
26
  } else {
27
27
  return this.anchorTag(this.linkBody());
28
28
  }
29
29
  }
30
-
31
30
  linkText() {
32
31
  var _this$buildText$trim, _this$buildText, _this$buildTitle$trim, _this$buildTitle;
33
-
34
32
  const text = (_this$buildText$trim = (_this$buildText = this.buildText()) === null || _this$buildText === void 0 ? void 0 : _this$buildText.trim()) !== null && _this$buildText$trim !== void 0 ? _this$buildText$trim : '';
35
33
  const title = (_this$buildTitle$trim = (_this$buildTitle = this.buildTitle()) === null || _this$buildTitle === void 0 ? void 0 : _this$buildTitle.trim()) !== null && _this$buildTitle$trim !== void 0 ? _this$buildTitle$trim : '';
36
34
  return text.length > 0 ? text : title.length > 0 ? title : undefined;
37
35
  }
38
-
39
36
  linkBody() {
40
37
  if (this.thumbnail) {
41
38
  return this.linkThumbnail();
42
39
  }
43
-
44
40
  return this.linkText();
45
41
  }
46
-
47
42
  buildText() {
48
43
  return this.context.selection || this.json.text;
49
44
  }
50
-
51
45
  buildUrl() {
52
46
  return this.json.url;
53
47
  }
54
-
55
48
  buildTitle() {
56
49
  return this.json.title;
57
50
  }
58
-
59
51
  get icon() {
60
52
  return this.json.icon;
61
53
  }
62
-
63
54
  get thumbnail() {
64
55
  return this.json.thumbnail;
65
56
  }
66
-
67
57
  get iframe() {
68
58
  return this.json.iframe;
69
59
  }
70
-
71
60
  get custom() {
72
61
  return this.json.custom;
73
62
  }
74
-
75
63
  get lookup_uuid() {
76
64
  return this.json.lookup_uuid;
77
65
  }
78
-
79
66
  }
@@ -15,33 +15,28 @@
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 { RceLti13ContentItem } from '../RceLti13ContentItem';
19
20
  export default class HtmlFragmentContentItem extends RceLti13ContentItem {
20
21
  constructor(json, context) {
21
22
  super(HtmlFragmentContentItem.type, json, context);
22
23
  }
23
-
24
24
  get html() {
25
25
  return this.json.html;
26
26
  }
27
-
28
27
  buildTitle() {
29
28
  return this.json.title;
30
29
  }
31
-
32
30
  buildText() {
33
31
  return this.json.text;
34
32
  }
35
-
36
33
  buildUrl() {
37
34
  return undefined;
38
35
  }
39
-
40
36
  toHtmlString() {
41
37
  // TinyMCE takes care of sanitizing this HTML string.
42
38
  // If using a target other than TinyMCE be sure to sanitize.
43
39
  return this.html;
44
40
  }
45
-
46
41
  }
47
42
  HtmlFragmentContentItem.type = 'html';
@@ -15,43 +15,35 @@
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 { RceLti13ContentItem } from '../RceLti13ContentItem';
19
20
  export default class ImageContentItem extends RceLti13ContentItem {
20
21
  constructor(json, context) {
21
22
  super(ImageContentItem.type, json, context);
22
23
  }
23
-
24
24
  buildUrl() {
25
25
  return this.json.url;
26
26
  }
27
-
28
27
  buildTitle() {
29
28
  return this.json.title;
30
29
  }
31
-
32
30
  get thumbnail() {
33
31
  return this.json.thumbnail;
34
32
  }
35
-
36
33
  buildText() {
37
34
  return this.json.text;
38
35
  }
39
-
40
36
  get width() {
41
37
  return this.json.width;
42
38
  }
43
-
44
39
  get height() {
45
40
  return this.json.height;
46
41
  }
47
-
48
42
  toHtmlString() {
49
43
  if (this.thumbnail) {
50
44
  return this.anchorTag(this.linkThumbnail());
51
45
  }
52
-
53
46
  return this.imageTag(this.safeUrl, this.width, this.height);
54
47
  }
55
-
56
48
  }
57
49
  ImageContentItem.type = 'image';
@@ -15,12 +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 BaseLinkContentItem from './BaseLinkContentItem';
19
20
  // Base content item type
20
21
  export default class LinkContentItem extends BaseLinkContentItem {
21
22
  constructor(json, context) {
22
23
  super(LinkContentItem.type, json, context);
23
24
  }
24
-
25
25
  }
26
26
  LinkContentItem.type = 'link';
@@ -15,14 +15,14 @@
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 BaseLinkContentItem from './BaseLinkContentItem';
19
20
  import { addQueryParamsToUrl } from '../../../../../util/url-util';
20
- import { PARENT_FRAME_CONTEXT_PARAM } from '../../ExternalToolsEnv';
21
+ import { parentFrameContextParam } from '../../constants';
21
22
  export default class ResourceLinkContentItem extends BaseLinkContentItem {
22
23
  constructor(json, context) {
23
24
  super(ResourceLinkContentItem.type, json, context);
24
25
  }
25
-
26
26
  toHtmlString() {
27
27
  if (this.iframe != null) {
28
28
  // The iframe src must always be the Canvas launch endpoint
@@ -32,16 +32,14 @@ export default class ResourceLinkContentItem extends BaseLinkContentItem {
32
32
  return this.anchorTag(this.linkBody());
33
33
  }
34
34
  }
35
-
36
35
  buildUrl() {
37
36
  // iframed launches need canvas wrapped around them for postMessages to work
38
37
  const display = this.iframe != null ? 'in_rce' : 'borderless';
39
38
  return addQueryParamsToUrl(this.context.ltiEndpoint, {
40
39
  display,
41
40
  resource_link_lookup_uuid: this.lookup_uuid,
42
- [PARENT_FRAME_CONTEXT_PARAM]: this.context.containingCanvasLtiToolId
41
+ [parentFrameContextParam]: this.context.containingCanvasLtiToolId
43
42
  });
44
43
  }
45
-
46
44
  }
47
45
  ResourceLinkContentItem.type = 'ltiResourceLink';
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /*
4
2
  * Copyright (C) 2018 - present Instructure, Inc.
5
3
  *
@@ -17,18 +15,17 @@
17
15
  * You should have received a copy of the GNU Affero General Public License along
18
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
17
  */
18
+
20
19
  import { rceLti13ContentItemFromJson } from './rceLti13ContentItemFromJson';
21
20
  import { showFlashAlert } from '../../../../common/FlashAlert';
22
21
  import formatMessage from '../../../../format-message';
23
22
  export default function processEditorContentItems(event, env, dialog) {
24
23
  try {
25
- var _event$data, _event$data$content_i, _event$data2, _event$data4;
26
-
24
+ var _event$data, _event$data$content_i, _event$data2, _event$data4, _event$data5, _event$data6;
27
25
  const ltiEndpoint = (_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.ltiEndpoint;
28
26
  const selection = env.editorSelection;
29
27
  const eventContentItems = (_event$data$content_i = (_event$data2 = event.data) === null || _event$data2 === void 0 ? void 0 : _event$data2.content_items) !== null && _event$data$content_i !== void 0 ? _event$data$content_i : [];
30
28
  let unsupportedItemWarningShown = false;
31
-
32
29
  for (const inputItem of eventContentItems) {
33
30
  const parsedItem = rceLti13ContentItemFromJson(inputItem, {
34
31
  ltiEndpoint: ltiEndpoint !== null && ltiEndpoint !== void 0 ? ltiEndpoint : null,
@@ -36,10 +33,8 @@ export default function processEditorContentItems(event, env, dialog) {
36
33
  containingCanvasLtiToolId: env.containingCanvasLtiToolId,
37
34
  ltiIframeAllowPolicy: env.ltiIframeAllowPolicy
38
35
  });
39
-
40
36
  if (parsedItem != null) {
41
37
  var _event$data3;
42
-
43
38
  if ((_event$data3 = event.data) !== null && _event$data3 !== void 0 && _event$data3.replaceEditorContents) {
44
39
  env.replaceCode(parsedItem.toHtmlString());
45
40
  } else {
@@ -47,7 +42,6 @@ export default function processEditorContentItems(event, env, dialog) {
47
42
  }
48
43
  } else if (!unsupportedItemWarningShown) {
49
44
  var _inputItem$type;
50
-
51
45
  showFlashAlert({
52
46
  message: formatMessage('Could not insert content: "{itemType}" items are not currently supported in Canvas.', {
53
47
  itemType: (_inputItem$type = inputItem.type) !== null && _inputItem$type !== void 0 ? _inputItem$type : 'unknown'
@@ -57,12 +51,26 @@ export default function processEditorContentItems(event, env, dialog) {
57
51
  });
58
52
  unsupportedItemWarningShown = true;
59
53
  }
60
- } // Remove "unsaved changes" warnings and close modal
61
-
54
+ }
62
55
 
56
+ // Remove "unsaved changes" warnings and close modal
63
57
  if ((_event$data4 = event.data) !== null && _event$data4 !== void 0 && _event$data4.content_items) {
64
58
  dialog === null || dialog === void 0 ? void 0 : dialog.close();
65
59
  }
60
+ if (((_event$data5 = event.data) === null || _event$data5 === void 0 ? void 0 : _event$data5.msg) !== undefined) {
61
+ // @ts-expect-error
62
+ showFlashAlert({
63
+ message: event.data.msg.toString()
64
+ });
65
+ }
66
+ // @ts-expect-error
67
+ if (((_event$data6 = event.data) === null || _event$data6 === void 0 ? void 0 : _event$data6.errormsg) !== undefined) {
68
+ // @ts-expect-error
69
+ showFlashAlert({
70
+ message: event.data.errormsg.toString(),
71
+ type: 'error'
72
+ });
73
+ }
66
74
  } catch (e) {
67
75
  showFlashAlert({
68
76
  message: formatMessage('Failed to retrieve content from external tool'),
@@ -15,11 +15,11 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import HtmlFragmentContentItem from './models/HtmlFragmentContentItem';
19
20
  import ImageContentItem from './models/ImageContentItem';
20
21
  import LinkContentItem from './models/LinkContentItem';
21
22
  import ResourceLinkContentItem from './models/ResourceLinkContentItem';
22
-
23
23
  /**
24
24
  * Creates an RceLti13ContentItem from the given JSON, or null if the type isn't supported.
25
25
  *
@@ -31,15 +31,15 @@ import ResourceLinkContentItem from './models/ResourceLinkContentItem';
31
31
  */
32
32
  export function rceLti13ContentItemFromJson(itemJson, context) {
33
33
  if (!itemJson.type) return null;
34
- const clazz = typeRegistry[itemJson.type]; // eslint-disable-next-line new-cap
35
-
34
+ const clazz = typeRegistry[itemJson.type];
35
+ // eslint-disable-next-line new-cap
36
36
  return clazz ? new clazz(itemJson, context) : null;
37
37
  }
38
+
38
39
  /*
39
40
  * Type safe registry of implementation of RceLti13ContentItem. Adding additional types to the Lti13ContentItemJson
40
41
  * union will cause a compiler error if the implementations aren't added here as well.
41
42
  */
42
-
43
43
  const typeRegistry = {
44
44
  html: HtmlFragmentContentItem,
45
45
  image: ImageContentItem,
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import tinymce from 'tinymce';
19
20
  import React from 'react';
20
21
  import ReactDOM from 'react-dom';
@@ -22,9 +23,11 @@ import { RceToolWrapper, buildToolMenuItems, externalToolsForToolbar } from './R
22
23
  import formatMessage from '../../../format-message';
23
24
  import { ExternalToolSelectionDialog } from './components/ExternalToolSelectionDialog/ExternalToolSelectionDialog';
24
25
  import { ensureToolDialogContainerElem } from './dialog-helper';
25
- import { externalToolsEnvFor } from './ExternalToolsEnv'; // Register plugin
26
+ import { externalToolsEnvFor } from './ExternalToolsEnv';
26
27
 
28
+ // Register plugin
27
29
  tinymce.PluginManager.add('instructure_rce_external_tools', initExternalToolsLocalPlugin);
30
+
28
31
  /**
29
32
  * This plugin adds the "Apps" toolbar button and the "Apps" menu item. It is a rewrite of 'instructure_external_tools'
30
33
  * to live fully in the canvas-rce package. It supports running in an iframe as part of an LTI tool, such as
@@ -32,20 +35,18 @@ tinymce.PluginManager.add('instructure_rce_external_tools', initExternalToolsLoc
32
35
  *
33
36
  * @param editor
34
37
  */
35
-
36
38
  export function initExternalToolsLocalPlugin(editor) {
37
39
  if (RceToolWrapper.forEditorEnv(externalToolsEnvFor(editor)).length === 0) {
38
40
  return;
39
41
  }
40
-
41
42
  registerFavoriteAppsToolbarButtons(editor);
42
43
  registerAppsToolbarButton(editor);
43
44
  registerAppsMenu(editor);
44
45
  }
46
+
45
47
  /**
46
48
  * Add the "Apps" toolbar button with "View all" and MRU buttons
47
49
  */
48
-
49
50
  function registerAppsMenu(editor) {
50
51
  editor.ui.registry.addNestedMenuItem('lti_tools_menuitem', {
51
52
  text: formatMessage('Apps'),
@@ -57,16 +58,14 @@ function registerAppsMenu(editor) {
57
58
  }
58
59
  });
59
60
  }
61
+
60
62
  /**
61
63
  * Registers toolbar buttons for favorite apps
62
64
  */
63
-
64
-
65
65
  function registerFavoriteAppsToolbarButtons(editor) {
66
66
  const allTools = RceToolWrapper.forEditorEnv(externalToolsEnvFor(editor));
67
67
  externalToolsForToolbar(allTools).forEach(toolInfo => editor.ui.registry.addButton(`instructure_external_button_${toolInfo.id}`, toolInfo.asToolbarButton()));
68
68
  }
69
-
70
69
  function registerAppsToolbarButton(editor) {
71
70
  const tooltip = 'apps-temp';
72
71
  editor.ui.registry.addMenuButton('lti_mru_button', {
@@ -77,40 +76,32 @@ function registerAppsToolbarButton(editor) {
77
76
  const toolMenuItems = buildToolMenuItems(availableTools, makeViewAllItem(editor));
78
77
  callback(toolMenuItems);
79
78
  },
80
-
81
79
  onSetup(_api) {
82
80
  const e = document.querySelector("button[title='apps-temp']");
83
81
  e === null || e === void 0 ? void 0 : e.setAttribute('title', formatMessage('Apps'));
84
82
  e === null || e === void 0 ? void 0 : e.setAttribute('id', 'plug-apps-button');
85
83
  return () => undefined;
86
84
  }
87
-
88
85
  });
89
86
  }
90
-
91
87
  function openToolSelectionDialog(editor) {
92
88
  const availableTools = RceToolWrapper.forEditorEnv(externalToolsEnvFor(editor));
93
89
  const container = ensureToolDialogContainerElem();
94
-
95
90
  const handleDismiss = () => {
96
91
  ReactDOM.unmountComponentAtNode(container);
97
92
  editor.focus();
98
93
  };
99
-
100
- ReactDOM.render( /*#__PURE__*/React.createElement(ExternalToolSelectionDialog, {
94
+ ReactDOM.render(/*#__PURE__*/React.createElement(ExternalToolSelectionDialog, {
101
95
  onDismiss: handleDismiss,
102
96
  ltiButtons: availableTools
103
97
  }), ensureToolDialogContainerElem());
104
98
  }
105
-
106
99
  function makeViewAllItem(editor) {
107
100
  return {
108
101
  type: 'menuitem',
109
102
  text: formatMessage('View All'),
110
-
111
103
  onAction() {
112
104
  openToolSelectionDialog(editor);
113
105
  }
114
-
115
106
  };
116
107
  }
@@ -15,12 +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 { addQueryParamsToUrl } from '../../../../util/url-util';
19
20
  export function addParentFrameContextToUrl(inputUrlStr, containingCanvasLtiToolId) {
20
21
  if (containingCanvasLtiToolId == null || containingCanvasLtiToolId.length === 0) {
21
22
  return inputUrlStr !== null && inputUrlStr !== void 0 ? inputUrlStr : null;
22
23
  }
23
-
24
24
  return addQueryParamsToUrl(inputUrlStr, {
25
25
  parent_frame_context: containingCanvasLtiToolId
26
26
  });
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import ReactDOM from 'react-dom';
20
21
  import bridge from '../../../../bridge';
@@ -29,71 +30,54 @@ export default class TrayController {
29
30
  this._editor = null;
30
31
  this._audioContainer = null;
31
32
  }
32
-
33
33
  get container() {
34
34
  let _container = document.getElementById(CONTAINER_ID);
35
-
36
35
  if (_container == null) {
37
36
  _container = document.createElement('div');
38
37
  _container.id = CONTAINER_ID;
39
38
  document.body.appendChild(_container);
40
39
  }
41
-
42
40
  return _container;
43
41
  }
44
-
45
42
  get isOpen() {
46
43
  return this._isOpen;
47
44
  }
48
-
49
45
  showTrayForEditor(editor) {
50
46
  this._shouldOpen = true;
51
47
  this._editor = editor;
52
48
  this._audioContainer = findMediaPlayerIframe(editor.selection.getNode());
53
-
54
49
  if (bridge.focusedEditor) {
55
50
  // Dismiss any content trays that may already be open
56
51
  bridge.hideTrays();
57
52
  }
58
-
59
53
  const trayProps = bridge.trayProps.get(editor);
60
-
61
54
  this._renderTray(trayProps);
62
55
  }
63
-
64
56
  hideTrayForEditor(editor) {
65
57
  if (this._editor === editor) {
66
58
  this._dismissTray();
67
59
  }
68
60
  }
69
-
70
61
  _dismissTray() {
71
62
  if (this._audioContainer) {
72
63
  this._editor.selection.select(this._audioContainer);
73
64
  }
74
-
75
65
  this._resetController();
76
66
  }
77
-
78
67
  _resetController() {
79
68
  this._shouldOpen = false;
80
69
  const trayProps = bridge.trayProps.get(this._editor);
81
-
82
70
  this._renderTray(trayProps);
83
-
84
71
  this._editor = null;
85
72
  this._audioContainer = null;
86
73
  const elem = document.getElementById(CONTAINER_ID);
87
74
  return elem.parentNode.removeChild(elem);
88
75
  }
89
-
90
76
  _applyAudioOptions(audioOptions) {
91
77
  const hasAttachmentId = RCEGlobals.getFeatures().media_links_use_attachment_id && audioOptions.attachment_id;
92
-
93
78
  if (!hasAttachmentId && (!audioOptions.media_object_id || audioOptions.media_object_id === 'undefined')) {
94
79
  return;
95
80
  }
96
-
97
81
  const container = this._audioContainer;
98
82
  return audioOptions.updateMediaObject({
99
83
  media_object_id: audioOptions.media_object_id,
@@ -104,18 +88,14 @@ export default class TrayController {
104
88
  console.error('Failed updating audio captions', ex);
105
89
  });
106
90
  }
107
-
108
91
  requestSubtitlesFromIframe(cb) {
109
92
  var _this$_audioContainer, _this$_audioContainer2;
110
-
111
93
  if (!bridge.canvasOrigin) return;
112
94
  this._subtitleListener = new AbortController();
113
95
  window.addEventListener('message', event => {
114
96
  var _event$data;
115
-
116
97
  if ((event === null || event === void 0 ? void 0 : (_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.subject) === 'media_tracks_response') {
117
98
  var _event$data2;
118
-
119
99
  cb(event === null || event === void 0 ? void 0 : (_event$data2 = event.data) === null || _event$data2 === void 0 ? void 0 : _event$data2.payload);
120
100
  }
121
101
  }, {
@@ -125,7 +105,6 @@ export default class TrayController {
125
105
  subject: 'media_tracks_request'
126
106
  }, bridge.canvasOrigin);
127
107
  }
128
-
129
108
  _renderTray(trayProps) {
130
109
  const audioOptions = asAudioElement(this._audioContainer) || {};
131
110
  const element = /*#__PURE__*/React.createElement(AudioOptionsTray, {
@@ -135,14 +114,12 @@ export default class TrayController {
135
114
  },
136
115
  onExited: () => {
137
116
  var _this$_subtitleListen;
138
-
139
117
  bridge.focusActiveEditor(false);
140
118
  this._isOpen = false;
141
119
  (_this$_subtitleListen = this._subtitleListener) === null || _this$_subtitleListen === void 0 ? void 0 : _this$_subtitleListen.abort();
142
120
  },
143
121
  onSave: options => {
144
122
  this._applyAudioOptions(options);
145
-
146
123
  this._dismissTray();
147
124
  },
148
125
  onDismiss: () => this._dismissTray(),
@@ -152,5 +129,4 @@ export default class TrayController {
152
129
  });
153
130
  ReactDOM.render(element, this.container);
154
131
  }
155
-
156
132
  }
@@ -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, { useState, useEffect } from 'react';
19
20
  import { arrayOf, bool, func, shape, string } from 'prop-types';
20
21
  import { Flex } from '@instructure/ui-flex';
@@ -28,9 +29,7 @@ import formatMessage from '../../../../format-message';
28
29
  import { getTrayHeight } from '../../shared/trayUtils';
29
30
  import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
30
31
  import { Heading } from '@instructure/ui-heading';
31
-
32
32
  const getLiveRegion = () => document.getElementById('flash_screenreader_holder');
33
-
34
33
  export default function AudioOptionsTray(_ref) {
35
34
  let {
36
35
  open,
@@ -46,7 +45,6 @@ export default function AudioOptionsTray(_ref) {
46
45
  useEffect(() => {
47
46
  if (subtitles.length === 0) requestSubtitlesFromIframe(setSubtitles);
48
47
  }, []);
49
-
50
48
  const handleSave = (e, contentProps) => {
51
49
  onSave({
52
50
  media_object_id: audioOptions.id,
@@ -55,7 +53,6 @@ export default function AudioOptionsTray(_ref) {
55
53
  updateMediaObject: contentProps.updateMediaObject
56
54
  });
57
55
  };
58
-
59
56
  return /*#__PURE__*/React.createElement(StoreProvider, trayProps, contentProps => /*#__PURE__*/React.createElement(Tray, {
60
57
  key: "audio-options-tray",
61
58
  "data-mce-component": true,