@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,3 @@
1
- // @ts-nocheck
2
-
3
1
  /*
4
2
  * Copyright (C) 2022 - present Instructure, Inc.
5
3
  *
@@ -17,6 +15,7 @@
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
  export const ICON_MAKER_ADD_IMAGE_MENU_ID = 'AddImageMenu';
21
20
  export const shouldIgnoreClose = (target, editorId) => {
22
21
  try {
@@ -29,17 +28,14 @@ export const shouldIgnoreClose = (target, editorId) => {
29
28
  return false;
30
29
  }
31
30
  };
32
-
33
31
  const elementTreeHasAttribute = (target, attribute, value) => {
34
32
  while (target) {
35
33
  var _target, _target$attributes, _target$attributes$at, _target2;
36
-
34
+ // @ts-expect-error
37
35
  if (((_target = target) === null || _target === void 0 ? void 0 : (_target$attributes = _target.attributes) === null || _target$attributes === void 0 ? void 0 : (_target$attributes$at = _target$attributes[attribute]) === null || _target$attributes$at === void 0 ? void 0 : _target$attributes$at.value) === value) {
38
36
  return true;
39
37
  }
40
-
41
38
  target = (_target2 = target) === null || _target2 === void 0 ? void 0 : _target2.parentElement;
42
39
  }
43
-
44
40
  return false;
45
41
  };
@@ -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 _ from 'lodash';
19
20
  export class IconMakerFormHasChanges {
20
21
  constructor(initSettings, currSettings) {
@@ -23,61 +24,46 @@ export class IconMakerFormHasChanges {
23
24
  this.initialSettings = initSettings;
24
25
  this.currentSettings = currSettings;
25
26
  }
26
-
27
27
  hasNameChange() {
28
28
  return 'name' in this.currentSettings && this.initialSettings.name !== this.currentSettings.name;
29
29
  }
30
-
31
30
  hasAltChange() {
32
31
  return 'alt' in this.currentSettings && this.initialSettings.alt !== this.currentSettings.alt;
33
32
  }
34
-
35
33
  hasShapeNameChange() {
36
34
  return 'shape' in this.currentSettings && this.initialSettings.shape !== this.currentSettings.shape;
37
35
  }
38
-
39
36
  hasShapeSizeChange() {
40
37
  return 'size' in this.currentSettings && this.initialSettings.size !== this.currentSettings.size;
41
38
  }
42
-
43
39
  hasColorNameChange() {
44
40
  return 'color' in this.currentSettings && this.initialSettings.color !== this.currentSettings.color;
45
41
  }
46
-
47
42
  hasOutlineSizeChange() {
48
43
  return 'outlineSize' in this.currentSettings && this.initialSettings.outlineSize !== this.currentSettings.outlineSize;
49
44
  }
50
-
51
45
  hasOutlineColorChange() {
52
46
  return 'outlineColor' in this.currentSettings && this.initialSettings.outlineColor !== this.currentSettings.outlineColor;
53
47
  }
54
-
55
48
  hasTextChange() {
56
49
  return 'text' in this.currentSettings && this.initialSettings.text !== this.currentSettings.text;
57
50
  }
58
-
59
51
  hasTextSizeChange() {
60
52
  return 'textSize' in this.currentSettings && this.initialSettings.textSize !== this.currentSettings.textSize;
61
53
  }
62
-
63
54
  hasTextColorChange() {
64
55
  return 'textColor' in this.currentSettings && this.initialSettings.textColor !== this.currentSettings.textColor;
65
56
  }
66
-
67
57
  hasTextBackgroundColorChange() {
68
58
  return 'textBackgroundColor' in this.currentSettings && this.initialSettings.textBackgroundColor !== this.currentSettings.textBackgroundColor;
69
59
  }
70
-
71
60
  hasTextPositionChange() {
72
61
  return 'textPosition' in this.currentSettings && this.initialSettings.textPosition !== this.currentSettings.textPosition;
73
62
  }
74
-
75
63
  hasImageSettingsChange() {
76
64
  return 'imageSettings' in this.currentSettings && !_.isEqual(this.initialSettings.imageSettings, this.currentSettings.imageSettings);
77
65
  }
78
-
79
66
  hasChanges() {
80
67
  return this.hasNameChange() || this.hasAltChange() || this.hasShapeNameChange() || this.hasShapeSizeChange() || this.hasColorNameChange() || this.hasOutlineColorChange() || this.hasOutlineSizeChange() || this.hasTextChange() || this.hasTextSizeChange() || this.hasTextColorChange() || this.hasTextBackgroundColorChange() || this.hasTextPositionChange() || this.hasImageSettingsChange();
81
68
  }
82
-
83
69
  }
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /*
4
2
  * Copyright (C) 2022 - present Instructure, Inc.
5
3
  *
@@ -17,12 +15,13 @@
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 { ICON_MAKER_ATTRIBUTE, ICON_MAKER_DOWNLOAD_URL_ATTR } from '../svg/constants';
21
20
  import buildDownloadUrl from '../../shared/buildDownloadUrl';
22
-
23
21
  const addIconMakerAttributes = imageAttributes => {
22
+ // @ts-expect-error
24
23
  imageAttributes[ICON_MAKER_ATTRIBUTE] = true;
24
+ // @ts-expect-error
25
25
  imageAttributes[ICON_MAKER_DOWNLOAD_URL_ATTR] = buildDownloadUrl(imageAttributes.src);
26
26
  };
27
-
28
27
  export default addIconMakerAttributes;
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  export const hasBackgroundColor = settings => {
19
20
  return !!settings.color;
20
21
  };
@@ -23,7 +24,6 @@ export const hasText = settings => {
23
24
  };
24
25
  export const hasImage = settings => {
25
26
  var _settings$imageSettin;
26
-
27
27
  return ((_settings$imageSettin = settings.imageSettings) === null || _settings$imageSettin === void 0 ? void 0 : _settings$imageSettin.image.length) > 0;
28
28
  };
29
29
  export const hasOutline = settings => {
@@ -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
  const iconLabels = {
19
20
  'أيقونة الفنون': 'art',
20
21
  'أيقونة الهندسة': 'engineering',
@@ -15,45 +15,44 @@
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, useCallback, useEffect } from 'react';
19
20
  import { debounce } from '@instructure/debounce';
20
21
  export default function useDebouncedValue(currentValue, onChange, processValueCallback) {
21
- const [immediateValue, setImmediateValue] = useState(currentValue); // Only invokes onChange on the trailing edge of the timeout
22
+ const [immediateValue, setImmediateValue] = useState(currentValue);
22
23
 
24
+ // Only invokes onChange on the trailing edge of the timeout
23
25
  const debouncedOnChangeCallback = useCallback(debounce(val => onChange(val), 500, {
24
26
  trailing: true
25
27
  }), []);
26
28
  useEffect(() => {
27
29
  let newValue = currentValue;
28
-
29
30
  if (processValueCallback) {
30
31
  newValue = processValueCallback(immediateValue, newValue);
31
- } // If so we need to make sure to re-set the immediate value
32
- // once a truthy value is given
33
-
32
+ }
34
33
 
34
+ // If so we need to make sure to re-set the immediate value
35
+ // once a truthy value is given
35
36
  if (newValue !== immediateValue) {
36
37
  setImmediateValue(newValue);
37
- } // eslint-disable-next-line react-hooks/exhaustive-deps
38
-
38
+ }
39
+ // eslint-disable-next-line react-hooks/exhaustive-deps
39
40
  }, [currentValue]);
40
41
  useEffect(() => {
41
42
  // Debounce the call to set reducer's state
42
- debouncedOnChangeCallback(immediateValue); // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ debouncedOnChangeCallback(immediateValue);
44
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
45
  }, [immediateValue]);
44
-
45
46
  const handleValueChange = event => {
46
47
  let {
47
48
  value
48
49
  } = event.target;
49
-
50
50
  if (processValueCallback) {
51
51
  value = processValueCallback(value);
52
- } // Immediately set local state for low-latency feedback
53
-
52
+ }
54
53
 
54
+ // Immediately set local state for low-latency feedback
55
55
  setImmediateValue(value);
56
56
  };
57
-
58
57
  return [immediateValue, handleValueChange];
59
58
  }
@@ -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 formatMessage from '../../../format-message';
19
20
  import { scaleForHeight, scaleForWidth } from '../shared/DimensionUtils';
20
21
  import RCEGlobals from '../../RCEGlobals';
@@ -35,7 +36,6 @@ const sizeByMaximumDimension = {
35
36
  400: LARGE,
36
37
  640: EXTRA_LARGE
37
38
  };
38
-
39
39
  function parsedOrNull($element, attribute) {
40
40
  // when the image is first inserted into the rce, it's size
41
41
  // is constrained by a style attribute with max-width, max-height.
@@ -44,23 +44,19 @@ function parsedOrNull($element, attribute) {
44
44
  const value = $element.hasAttribute(attribute) ? $element.getAttribute(attribute) : $element[attribute];
45
45
  return value ? Math.round(Number.parseInt(value, 10)) : null;
46
46
  }
47
-
48
47
  function imageSizeFromKnownOptions(imageOptions) {
49
48
  const intendedWidth = imageOptions.appliedWidth || imageOptions.naturalWidth;
50
49
  const intendedHeight = imageOptions.appliedHeight || imageOptions.naturalHeight;
51
50
  const largestDimension = Math.max(intendedWidth, intendedHeight);
52
51
  return sizeByMaximumDimension[largestDimension] || CUSTOM;
53
52
  }
54
-
55
53
  function getPercentageUnitsFromAttributes($element) {
56
54
  const getAttribute = attribute => $element.hasAttribute(attribute) ? $element.getAttribute(attribute) : $element[attribute];
57
-
58
55
  const widthValue = getAttribute('width');
59
56
  const heightValue = getAttribute('height');
60
57
  const value = [widthValue, heightValue].find(v => /\d+(?:\.\d+)?%/.test(v));
61
58
  return value ? Math.round(Number.parseInt(value, 10)) : null;
62
59
  }
63
-
64
60
  export function fromImageEmbed($element) {
65
61
  const altText = $element.getAttribute('alt');
66
62
  const percentageUnits = getPercentageUnitsFromAttributes($element);
@@ -86,13 +82,10 @@ export function fromVideoEmbed($element) {
86
82
  let naturalWidth, naturalHeight;
87
83
  const $videoIframe = $element.tagName === 'IFRAME' ? $element : $element.firstElementChild;
88
84
  const $tinymceIframeShim = $videoIframe.parentElement;
89
-
90
85
  if ($videoIframe.tagName === 'IFRAME') {
91
86
  $videoDoc = $videoIframe.contentDocument;
92
-
93
87
  if ($videoDoc) {
94
88
  $videoElem = $videoDoc.querySelector('video');
95
-
96
89
  if ($videoElem && ($videoElem.loadedmetadata || $videoElem.readyState >= 1)) {
97
90
  naturalWidth = $videoElem.videoWidth;
98
91
  naturalHeight = $videoElem.videoHeight;
@@ -101,10 +94,10 @@ export function fromVideoEmbed($element) {
101
94
  naturalHeight = $videoIframe.clientHeight;
102
95
  naturalWidth = $videoIframe.clientWidth;
103
96
  }
104
- } // because tinymce doesn't put the title attribute on the iframe,
105
- // but maintains it on the span it adds around it.
106
-
97
+ }
107
98
 
99
+ // because tinymce doesn't put the title attribute on the iframe,
100
+ // but maintains it on the span it adds around it.
108
101
  const title = ($videoIframe.getAttribute('title') || $tinymceIframeShim.getAttribute('data-mce-p-title') || '').replace(formatMessage('Video player for '), '');
109
102
  const rect = $element.getBoundingClientRect();
110
103
  const videoOptions = {
@@ -115,29 +108,23 @@ export function fromVideoEmbed($element) {
115
108
  naturalWidth,
116
109
  source: $videoElem && $videoElem.querySelector('source')
117
110
  };
118
-
119
111
  try {
120
112
  var _$videoDoc$querySelec;
121
-
122
113
  const trackjson = (_$videoDoc$querySelec = $videoDoc.querySelector('[data-tracks]')) === null || _$videoDoc$querySelec === void 0 ? void 0 : _$videoDoc$querySelec.getAttribute('data-tracks');
123
-
124
114
  if (trackjson) {
125
115
  videoOptions.tracks = JSON.parse(trackjson);
126
116
  }
127
- } catch (_ignore) {// bad json?
117
+ } catch (_ignore) {
118
+ // bad json?
128
119
  }
129
-
130
120
  videoOptions.videoSize = imageSizeFromKnownOptions(videoOptions);
131
-
132
121
  if (RCEGlobals.getFeatures().media_links_use_attachment_id) {
133
122
  const source = $videoIframe.getAttribute('src');
134
123
  const matches = source === null || source === void 0 ? void 0 : source.match(/\/media_attachments_iframe\/(\d+)/);
135
-
136
124
  if (matches) {
137
125
  videoOptions.attachmentId = matches[1];
138
126
  }
139
127
  }
140
-
141
128
  return videoOptions;
142
129
  }
143
130
  export function scaleImageForHeight(naturalWidth, naturalHeight, targetHeight) {
@@ -161,7 +148,6 @@ export function scaleToSize(imageSize, naturalWidth, naturalHeight) {
161
148
  height: naturalHeight
162
149
  };
163
150
  }
164
-
165
151
  const [dimension] = Object.entries(sizeByMaximumDimension).find(_ref => {
166
152
  let [, size] = _ref;
167
153
  return size === imageSize;
@@ -178,22 +164,18 @@ export function labelForImageSize(imageSize) {
178
164
  {
179
165
  return formatMessage('Small');
180
166
  }
181
-
182
167
  case MEDIUM:
183
168
  {
184
169
  return formatMessage('Medium');
185
170
  }
186
-
187
171
  case LARGE:
188
172
  {
189
173
  return formatMessage('Large');
190
174
  }
191
-
192
175
  case EXTRA_LARGE:
193
176
  {
194
177
  return formatMessage('Extra Large');
195
178
  }
196
-
197
179
  default:
198
180
  {
199
181
  return formatMessage('Custom');
@@ -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 { func, instanceOf, number, oneOfType, shape, string, bool } from 'prop-types';
20
21
  import { Img } from '@instructure/ui-img';
@@ -36,28 +37,22 @@ export default function Image(_ref) {
36
37
  const imgTitle = formatMessage('Click to embed {imageName}', {
37
38
  imageName: image.display_name
38
39
  });
39
-
40
40
  function handleDragStart(event) {
41
41
  dragHtml(event, renderImage(image, canvasOrigin));
42
42
  }
43
-
44
43
  function handleDragEnd() {
45
44
  document.body.click();
46
45
  }
47
-
48
46
  function handleImageClick(event) {
49
47
  event.preventDefault();
50
48
  onClick(image);
51
49
  }
52
-
53
50
  let elementRef = null;
54
-
55
51
  if (focusRef) {
56
52
  elementRef = ref => {
57
53
  focusRef.current = ref;
58
54
  };
59
55
  }
60
-
61
56
  return /*#__PURE__*/React.createElement(Link, {
62
57
  draggable: false,
63
58
  elementRef: elementRef,
@@ -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 { arrayOf, func, instanceOf, shape, bool, string } from 'prop-types';
20
21
  import { Flex } from '@instructure/ui-flex';
@@ -35,11 +36,9 @@ export default function ImageList(_ref) {
35
36
  wrap: "wrap"
36
37
  }, images.map((image, index) => {
37
38
  let focusRef = null;
38
-
39
39
  if (index === images.length - 1) {
40
40
  focusRef = lastItemRef;
41
41
  }
42
-
43
42
  return /*#__PURE__*/React.createElement(Flex.Item, {
44
43
  as: "div",
45
44
  key: 'image-' + image.id,
@@ -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';
@@ -30,63 +31,51 @@ export default class TrayController {
30
31
  this._renderId = 0;
31
32
  this._isIconMaker = false;
32
33
  }
33
-
34
34
  get $container() {
35
35
  let $container = document.getElementById(CONTAINER_ID);
36
-
37
36
  if ($container == null) {
38
37
  $container = document.createElement('div');
39
38
  $container.id = CONTAINER_ID;
40
39
  document.body.appendChild($container);
41
40
  }
42
-
43
41
  return $container;
44
42
  }
45
-
46
43
  get isOpen() {
47
44
  return this._isOpen;
48
- } // Tray may be called to edit an Icon Maker icon alt text
49
-
45
+ }
50
46
 
47
+ // Tray may be called to edit an Icon Maker icon alt text
51
48
  showTrayForEditor(editor) {
52
49
  let isIconMaker = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
53
50
  this._editor = editor;
54
51
  this.$img = editor.selection.getNode();
55
52
  this._shouldOpen = true;
56
53
  this._isIconMaker = isIconMaker;
57
-
58
54
  if (bridge.focusedEditor) {
59
55
  // Dismiss any content trays that may already be open
60
56
  bridge.hideTrays();
61
57
  }
62
-
63
58
  this._renderTray();
64
59
  }
65
-
66
60
  hideTrayForEditor(editor) {
67
61
  if (this._editor === editor) {
68
62
  this._dismissTray();
69
63
  }
70
64
  }
71
-
72
65
  _applyImageOptions(imageOptions) {
73
66
  const editor = this._editor;
74
67
  const {
75
68
  $img
76
69
  } = this;
77
-
78
70
  if (this._isIconMaker) {
79
71
  this._applyIconAltTextChanges($img, editor, imageOptions);
80
-
81
72
  this._dismissTray();
82
-
83
73
  editor.focus();
84
74
  return;
85
75
  }
86
-
87
76
  if (imageOptions.displayAs === 'embed') {
88
- updateImage(editor, $img, imageOptions); // tell tinymce so the context toolbar resets
89
-
77
+ updateImage(editor, $img, imageOptions);
78
+ // tell tinymce so the context toolbar resets
90
79
  editor.fire('ObjectResized', {
91
80
  target: $img,
92
81
  width: imageOptions.appliedWidth,
@@ -100,38 +89,31 @@ export default class TrayController {
100
89
  });
101
90
  editor.selection.setContent(link);
102
91
  }
103
-
104
92
  this._dismissTray();
105
-
106
93
  editor.focus();
107
94
  }
108
-
109
95
  _applyIconAltTextChanges($img, editor, imageOptions) {
110
96
  // Workaround: When passing empty string to editor.dom.setAttribs it removes the attribute
111
97
  $img.setAttribute('alt', imageOptions.altText);
112
98
  editor.dom.setAttribs($img, {
113
99
  role: imageOptions.isDecorativeImage ? 'presentation' : null
114
- }); // tell tinymce so the context toolbar resets
100
+ });
115
101
 
102
+ // tell tinymce so the context toolbar resets
116
103
  editor.fire('ObjectResized', {
117
104
  target: $img,
118
105
  width: imageOptions.appliedWidth,
119
106
  height: imageOptions.appliedHeight
120
107
  });
121
108
  }
122
-
123
109
  _dismissTray() {
124
110
  this._shouldOpen = false;
125
-
126
111
  this._renderTray();
127
-
128
112
  this.$img = null;
129
113
  this._editor = null;
130
114
  }
131
-
132
115
  _renderTray() {
133
116
  var _this$_editor, _this$_editor$selecti;
134
-
135
117
  if (this._shouldOpen) {
136
118
  /*
137
119
  * When the tray is being opened again, it should be rendered fresh
@@ -140,7 +122,6 @@ export default class TrayController {
140
122
  */
141
123
  this._renderId++;
142
124
  }
143
-
144
125
  const io = asImageEmbed(this.$img);
145
126
  io.isLinked = ((_this$_editor = this._editor) === null || _this$_editor === void 0 ? void 0 : (_this$_editor$selecti = _this$_editor.selection) === null || _this$_editor$selecti === void 0 ? void 0 : _this$_editor$selecti.getSel().anchorNode.tagName) === 'A';
146
127
  const element = /*#__PURE__*/React.createElement(ImageOptionsTray, {
@@ -162,5 +143,4 @@ export default class TrayController {
162
143
  });
163
144
  ReactDOM.render(element, this.$container);
164
145
  }
165
-
166
146
  }
@@ -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 { bool, func, number, shape, string } from 'prop-types';
20
21
  import { Button, CloseButton } from '@instructure/ui-buttons';
@@ -59,26 +60,20 @@ export default function ImageOptionsTray(props) {
59
60
  minWidth: MIN_WIDTH,
60
61
  minPercentage: MIN_PERCENTAGE
61
62
  });
62
-
63
63
  function handleUrlChange(newUrl) {
64
64
  setUrl(newUrl);
65
65
  }
66
-
67
66
  function handleAltTextChange(event) {
68
67
  setAltText(event.target.value);
69
68
  }
70
-
71
69
  function handleIsDecorativeChange(event) {
72
70
  setIsDecorativeImage(event.target.checked);
73
71
  }
74
-
75
72
  function handleDisplayAsChange(event) {
76
73
  setDisplayAs(event.target.value);
77
74
  }
78
-
79
75
  function handleImageSizeChange(event, selectedOption) {
80
76
  setImageSize(selectedOption.value);
81
-
82
77
  if (selectedOption.value === CUSTOM) {
83
78
  setImageHeight(currentHeight);
84
79
  setImageWidth(currentWidth);
@@ -91,13 +86,11 @@ export default function ImageOptionsTray(props) {
91
86
  setImageWidth(width);
92
87
  }
93
88
  }
94
-
95
89
  function handleSave(event) {
96
90
  event.preventDefault();
97
91
  const savedAltText = isDecorativeImage ? '' : altText;
98
92
  let appliedHeight = imageHeight;
99
93
  let appliedWidth = imageWidth;
100
-
101
94
  if (imageSize === CUSTOM) {
102
95
  if (dimensionsState.usePercentageUnits) {
103
96
  appliedHeight = `${dimensionsState.percentage}%`;
@@ -107,7 +100,6 @@ export default function ImageOptionsTray(props) {
107
100
  appliedWidth = dimensionsState.width;
108
101
  }
109
102
  }
110
-
111
103
  onSave({
112
104
  url,
113
105
  altText: savedAltText,
@@ -117,26 +109,22 @@ export default function ImageOptionsTray(props) {
117
109
  isDecorativeImage
118
110
  });
119
111
  }
120
-
121
112
  useEffect(() => {
122
113
  if (isIconMaker) {
123
114
  setShowUrlField(false);
124
115
  return;
125
116
  }
126
-
127
117
  let isValidURL;
128
-
129
118
  try {
130
119
  isValidURL = validateURL(url);
131
120
  } catch (error) {
132
121
  isValidURL = false;
133
122
  } finally {
134
123
  setShowUrlField(isValidURL ? isExternalUrl(url) : true);
135
- } // eslint-disable-next-line react-hooks/exhaustive-deps
136
-
124
+ }
125
+ // eslint-disable-next-line react-hooks/exhaustive-deps
137
126
  }, [url]);
138
127
  const messagesForSize = [];
139
-
140
128
  if (imageSize !== CUSTOM) {
141
129
  messagesForSize.push({
142
130
  text: formatMessage('{width} x {height}px', {
@@ -146,7 +134,6 @@ export default function ImageOptionsTray(props) {
146
134
  type: 'hint'
147
135
  });
148
136
  }
149
-
150
137
  const disableForIcons = isIconMaker && !isDecorativeImage && altText === '';
151
138
  const disableForImages = url === '' || displayAs === 'embed' && (!isDecorativeImage && altText === '' || imageSize === CUSTOM && !(dimensionsState !== null && dimensionsState !== void 0 && dimensionsState.isValid));
152
139
  const saveDisabled = isIconMaker ? disableForIcons : disableForImages;
@@ -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, { useRef } from 'react';
19
20
  import { bool, func, oneOf, shape, string } from 'prop-types';
20
21
  import { contentTrayDocumentShape } from '../../shared/fileShape';
@@ -24,15 +25,12 @@ import { Text } from '@instructure/ui-text';
24
25
  import { LoadMoreButton, LoadingIndicator, LoadingStatus, useIncrementalLoading } from '../../../../common/incremental-loading';
25
26
  import ImageList from '../ImageList';
26
27
  import formatMessage from '../../../../format-message';
27
-
28
28
  function hasFiles(images) {
29
29
  return images.files.length > 0;
30
30
  }
31
-
32
31
  function isEmpty(images) {
33
32
  return !hasFiles(images) && !images.hasMore && !images.isLoading;
34
33
  }
35
-
36
34
  export default function Images(props) {
37
35
  const {
38
36
  fetchInitialImages,
@@ -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 doFileUpload from '../shared/Upload/doFileUpload';
19
20
  export default function (ed, document) {
20
21
  return doFileUpload(ed, document, {