@instructure/canvas-rce 5.14.1 → 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 (481) hide show
  1. package/CHANGELOG.md +5 -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/{es/rce/plugins/shared/__mocks__/screenfull.js → __tests__/sidebar/reducers/all_files.test.js} +10 -6
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +8 -56
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +7 -28
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +104 -59
  25. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +15 -8
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +17 -28
  36. package/es/enhance-user-content/enhance_user_content.js +28 -60
  37. package/es/enhance-user-content/external_links.js +5 -8
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +12 -34
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +35 -82
  42. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  43. package/es/format-message.js +3 -4
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.js +3 -1
  47. package/es/rce/AlertMessageArea.js +1 -1
  48. package/es/rce/DraggingBlocker.js +4 -2
  49. package/es/rce/KeyboardShortcutModal.js +1 -0
  50. package/es/rce/RCE.js +12 -11
  51. package/es/rce/RCEGlobals.js +12 -10
  52. package/es/rce/RCEVariants.js +27 -10
  53. package/es/rce/RCEWrapper.js +167 -386
  54. package/es/rce/RCEWrapperProps.js +8 -3
  55. package/es/rce/RceHtmlEditor.js +5 -8
  56. package/es/rce/ResizeHandle.js +3 -8
  57. package/es/rce/RestoreAutoSaveModal.js +1 -2
  58. package/es/rce/ShowOnFocusButton/index.js +0 -6
  59. package/es/rce/StatusBar.js +8 -37
  60. package/es/rce/alertHandler.js +1 -4
  61. package/es/rce/contentInsertion.js +35 -57
  62. package/es/rce/contentInsertionUtils.js +6 -8
  63. package/es/rce/contentRendering.js +7 -12
  64. package/es/rce/customEvents.js +1 -0
  65. package/es/rce/editorLanguage.js +22 -10
  66. package/es/rce/indicatorRegion.js +6 -5
  67. package/es/rce/normalizeLocale.js +5 -3
  68. package/es/rce/normalizeProps.js +3 -1
  69. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  70. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  71. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  73. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  74. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  75. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  76. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  82. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  83. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  84. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  85. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  86. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  92. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  94. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  95. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  96. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  97. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  98. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  99. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  100. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  101. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  102. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  103. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  126. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  127. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  128. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  129. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  130. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  131. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  132. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  134. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  135. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  136. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  137. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  138. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  139. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  140. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  141. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  143. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  144. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  146. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  147. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  148. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  149. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  150. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  152. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  153. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  154. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  155. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  158. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  159. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  163. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  164. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  165. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  166. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  167. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  168. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  169. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  170. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  171. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  172. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  173. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  174. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  175. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  176. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  181. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  183. package/es/rce/{__mocks__/_mockStudioPlayer.js → plugins/instructure_rce_external_tools/constants.js} +11 -3
  184. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  185. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  186. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  187. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  188. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  197. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  199. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  201. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  202. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  204. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  205. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  206. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  207. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  208. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  210. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  211. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  212. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  213. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  214. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  215. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  216. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  217. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  218. package/es/rce/plugins/shared/CanvasContentTray.js +22 -49
  219. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  220. package/es/rce/plugins/shared/ColorInput.js +5 -14
  221. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  222. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  223. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  224. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  225. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  226. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  227. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  228. package/es/rce/plugins/shared/EventUtils.js +1 -3
  229. package/es/rce/plugins/shared/Filter.js +8 -38
  230. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  231. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  232. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  233. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  234. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  235. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  236. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  237. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  238. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  239. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  240. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  241. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  242. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  243. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  244. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  245. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  247. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  249. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  250. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  252. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  253. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  254. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  255. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  256. package/es/rce/plugins/shared/Previewable.js +1 -0
  257. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  258. package/es/rce/plugins/shared/StoreContext.js +1 -2
  259. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  260. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  261. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  262. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  263. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  264. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  265. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  266. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  267. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  268. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  269. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  270. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  271. package/es/rce/plugins/shared/Upload/index.js +1 -0
  272. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  273. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  274. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  276. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  277. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  278. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  279. package/es/rce/plugins/shared/dateUtils.js +1 -1
  280. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  281. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  282. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  283. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  284. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  285. package/es/rce/plugins/shared/fileShape.js +4 -9
  286. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  287. package/es/rce/plugins/shared/fileUtils.js +1 -2
  288. package/es/rce/plugins/shared/linkUtils.js +1 -16
  289. package/es/rce/plugins/shared/round.js +1 -0
  290. package/es/rce/plugins/shared/trayUtils.js +4 -3
  291. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  292. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  293. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  294. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  295. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  296. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  297. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  299. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  300. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  314. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  320. package/es/rce/root.js +9 -8
  321. package/es/rce/sanitizePlugins.js +1 -3
  322. package/es/rce/style.js +1 -4
  323. package/es/rce/tinyRCE.js +13 -9
  324. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  325. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  326. package/es/rce/transformContent.js +8 -10
  327. package/es/rce/types.js +1 -0
  328. package/es/rce/userOS.js +1 -1
  329. package/es/rce/wrapInitCb.js +50 -43
  330. package/es/rcs/api.js +61 -116
  331. package/es/rcs/buildError.js +5 -17
  332. package/es/rcs/fake.js +4 -13
  333. package/es/sidebar/actions/all_files.js +2 -0
  334. package/es/sidebar/actions/data.js +4 -7
  335. package/es/sidebar/actions/documents.js +9 -6
  336. package/es/sidebar/actions/files.js +3 -6
  337. package/es/sidebar/actions/filter.js +1 -0
  338. package/es/sidebar/actions/flickr.js +1 -1
  339. package/es/sidebar/actions/images.js +12 -11
  340. package/es/sidebar/actions/links.js +1 -0
  341. package/es/sidebar/actions/media.js +12 -10
  342. package/es/sidebar/actions/session.js +1 -3
  343. package/es/sidebar/actions/ui.js +1 -0
  344. package/es/sidebar/actions/upload.js +14 -39
  345. package/es/sidebar/containers/Sidebar.js +1 -2
  346. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  347. package/es/sidebar/dragHtml.js +5 -3
  348. package/es/sidebar/reducers/all_files.js +4 -3
  349. package/es/sidebar/reducers/collection.js +12 -13
  350. package/es/sidebar/reducers/collections.js +5 -5
  351. package/es/sidebar/reducers/documents.js +6 -13
  352. package/es/sidebar/reducers/files.js +3 -3
  353. package/es/sidebar/reducers/filter.js +1 -8
  354. package/es/sidebar/reducers/flickr.js +9 -9
  355. package/es/sidebar/reducers/folder.js +15 -15
  356. package/es/sidebar/reducers/folders.js +3 -3
  357. package/es/sidebar/reducers/images.js +3 -13
  358. package/es/sidebar/reducers/index.js +3 -1
  359. package/es/sidebar/reducers/media.js +6 -13
  360. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  361. package/es/sidebar/reducers/noop.js +1 -0
  362. package/es/sidebar/reducers/rootFolderId.js +1 -2
  363. package/es/sidebar/reducers/session.js +3 -3
  364. package/es/sidebar/reducers/ui.js +3 -16
  365. package/es/sidebar/reducers/upload.js +8 -40
  366. package/es/sidebar/store/configureStore.js +1 -0
  367. package/es/sidebar/store/initialState.js +13 -24
  368. package/es/translations/locales/ab.js +1 -0
  369. package/es/translations/locales/ar.js +67 -9
  370. package/es/translations/locales/ca.js +67 -9
  371. package/es/translations/locales/cs.js +1 -0
  372. package/es/translations/locales/cs_CZ.js +1 -0
  373. package/es/translations/locales/cy.js +67 -9
  374. package/es/translations/locales/da-x-k12.js +67 -9
  375. package/es/translations/locales/da.js +67 -9
  376. package/es/translations/locales/da_DK.js +1 -0
  377. package/es/translations/locales/de.js +67 -9
  378. package/es/translations/locales/el.js +4 -0
  379. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  380. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  381. package/es/translations/locales/en.js +72 -8
  382. package/es/translations/locales/en_AU.js +67 -9
  383. package/es/translations/locales/en_CA.js +67 -9
  384. package/es/translations/locales/en_CY.js +67 -9
  385. package/es/translations/locales/en_GB.js +67 -9
  386. package/es/translations/locales/en_NZ.js +1 -0
  387. package/es/translations/locales/en_SE.js +1 -0
  388. package/es/translations/locales/en_US.js +1 -0
  389. package/es/translations/locales/es.js +67 -9
  390. package/es/translations/locales/es_ES.js +67 -9
  391. package/es/translations/locales/es_GT.js +1 -0
  392. package/es/translations/locales/fa_IR.js +7 -0
  393. package/es/translations/locales/fi.js +67 -9
  394. package/es/translations/locales/fr.js +67 -9
  395. package/es/translations/locales/fr_CA.js +68 -10
  396. package/es/translations/locales/ga.js +5 -13
  397. package/es/translations/locales/he.js +7 -0
  398. package/es/translations/locales/hi.js +67 -9
  399. package/es/translations/locales/ht.js +67 -9
  400. package/es/translations/locales/hu.js +7 -6
  401. package/es/translations/locales/hu_HU.js +1 -0
  402. package/es/translations/locales/hy.js +1 -0
  403. package/es/translations/locales/id.js +67 -9
  404. package/es/translations/locales/id_ID.js +1 -0
  405. package/es/translations/locales/is.js +67 -9
  406. package/es/translations/locales/it.js +67 -9
  407. package/es/translations/locales/ja.js +67 -9
  408. package/es/translations/locales/ko.js +1 -0
  409. package/es/translations/locales/ko_KR.js +1 -0
  410. package/es/translations/locales/lt.js +1 -0
  411. package/es/translations/locales/lt_LT.js +1 -0
  412. package/es/translations/locales/mi.js +67 -9
  413. package/es/translations/locales/mn_MN.js +1 -0
  414. package/es/translations/locales/ms.js +67 -9
  415. package/es/translations/locales/nb-x-k12.js +67 -9
  416. package/es/translations/locales/nb.js +67 -9
  417. package/es/translations/locales/nl.js +67 -9
  418. package/es/translations/locales/nl_NL.js +1 -0
  419. package/es/translations/locales/nn.js +7 -6
  420. package/es/translations/locales/pl.js +67 -9
  421. package/es/translations/locales/pt.js +67 -9
  422. package/es/translations/locales/pt_BR.js +67 -9
  423. package/es/translations/locales/ro.js +1 -0
  424. package/es/translations/locales/ru.js +67 -9
  425. package/es/translations/locales/se.js +1 -0
  426. package/es/translations/locales/sl.js +67 -9
  427. package/es/translations/locales/sv-x-k12.js +67 -9
  428. package/es/translations/locales/sv.js +67 -9
  429. package/es/translations/locales/sv_SE.js +1 -0
  430. package/es/translations/locales/tg.js +1 -0
  431. package/es/translations/locales/th.js +67 -9
  432. package/es/translations/locales/th_TH.js +1 -0
  433. package/es/translations/locales/tl_PH.js +1 -0
  434. package/es/translations/locales/tr.js +7 -0
  435. package/es/translations/locales/uk_UA.js +7 -0
  436. package/es/translations/locales/vi.js +67 -9
  437. package/es/translations/locales/vi_VN.js +1 -0
  438. package/es/translations/locales/zh-Hans.js +67 -9
  439. package/es/translations/locales/zh-Hant.js +67 -9
  440. package/es/translations/locales/zh.js +67 -9
  441. package/es/translations/locales/zh_HK.js +67 -9
  442. package/es/translations/locales/zh_TW.Big5.js +1 -0
  443. package/es/translations/locales/zh_TW.js +1 -0
  444. package/es/translations/tinymce/ar_SA.js +1 -0
  445. package/es/translations/tinymce/fi.js +1 -0
  446. package/es/translations/tinymce/ga.js +1 -0
  447. package/es/translations/tinymce/id.js +1 -0
  448. package/es/translations/tinymce/ru.js +1 -0
  449. package/es/translations/tinymce/ru_RU.js +1 -0
  450. package/es/translations/tinymce/sl.js +1 -0
  451. package/es/translations/tinymce/sr.js +1 -0
  452. package/es/translations/tinymce/th.js +1 -0
  453. package/es/translations/tinymce/uk_UA.js +1 -0
  454. package/es/translations/tinymce/vi_VN.js +1 -0
  455. package/es/util/TypedDict.js +4 -2
  456. package/es/util/encrypted-storage.js +3 -13
  457. package/es/util/file-url-util.js +1 -6
  458. package/es/util/fullscreenHelpers.js +4 -1
  459. package/es/util/instui-icon-helper.js +4 -3
  460. package/es/util/loadingPlaceholder.js +38 -39
  461. package/es/util/simpleCache.js +0 -3
  462. package/es/util/string-util.js +1 -1
  463. package/es/util/textarea-editing-util.js +3 -7
  464. package/es/util/tinymce-plugin-util.js +0 -5
  465. package/es/util/url-util.js +16 -25
  466. package/eslint.config.js +239 -0
  467. package/jest.config.js +1 -1
  468. package/package.json +76 -81
  469. package/scripts/build-canvas +2 -1
  470. package/scripts/build.js +4 -4
  471. package/testcafe/RCEWrapper.test.js +0 -1
  472. package/testcafe/StatusBar.test.js +0 -1
  473. package/testcafe/axe.test.js +3 -4
  474. package/testcafe/enhanceUserContent.test.js +0 -1
  475. package/tsconfig.json +20 -15
  476. package/.eslintrc +0 -45
  477. package/.prettierignore +0 -6
  478. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  479. package/es/rce/__mocks__/styleMock.js +0 -18
  480. package/es/rce/__mocks__/tinymceReact.js +0 -55
  481. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /*
4
2
  * Copyright (C) 2019 - present Instructure, Inc.
5
3
  *
@@ -17,10 +15,19 @@
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 formatMessage from '../../../../format-message';
21
20
  import { typedKeyDict } from '../../../../util/TypedDict';
22
21
  import { listStyleForSelectionOfEditor } from '../core/ListUtils';
23
22
 
23
+ /**
24
+ * Supported list style types by the RCE
25
+ */
26
+
27
+ /**
28
+ * RCE-specific information about a list style type
29
+ */
30
+
24
31
  /**
25
32
  * List of list styles supported by the RCE. These will ultimately appear in the toolbar as buttons under the main
26
33
  * list button.
@@ -57,39 +64,39 @@ const listStyleInfos = typedKeyDict({
57
64
  getTooltipText: () => formatMessage('uppercase Roman numeral ordered list')
58
65
  }
59
66
  }, 'listStyleType');
67
+
60
68
  /**
61
69
  * Defines the default `list-style-type` infos for the different list element types.
62
70
  */
63
-
64
71
  const defaultStyleInfoForListType = {
65
72
  UL: listStyleInfos.byKey.disc,
66
73
  OL: listStyleInfos.byKey.decimal
67
74
  };
75
+
68
76
  /**
69
77
  * Determines the inner-most list type for the selection in the given Editor.
70
78
  */
71
-
72
79
  function listStyleInfoForSelectionOfEditor(editor) {
73
80
  const selectedStyleType = listStyleForSelectionOfEditor(editor);
74
- if (!selectedStyleType) return null; // Prefer to use `list-style-type`-based type infos.
81
+ if (!selectedStyleType) return null;
75
82
 
83
+ // Prefer to use `list-style-type`-based type infos.
76
84
  if (selectedStyleType.listStyleType) {
85
+ // @ts-expect-error
77
86
  const fromStyleType = listStyleInfos.byKey[selectedStyleType.listStyleType];
78
87
  if (fromStyleType) return fromStyleType;
79
- } // Default to style based on the list element type
80
-
88
+ }
81
89
 
90
+ // Default to style based on the list element type
82
91
  return defaultStyleInfoForListType[selectedStyleType.listType];
83
92
  }
93
+
84
94
  /**
85
95
  * Get the button label.
86
96
  *
87
97
  * Note: Needs to be a function because translation files aren't loaded when top-level code runs.
88
98
  */
89
-
90
-
91
99
  const getButtonLabel = () => formatMessage('Ordered and Unordered Lists');
92
-
93
100
  export default function register(editor) {
94
101
  editor.ui.registry.addSplitButton('bullist', {
95
102
  tooltip: getButtonLabel(),
@@ -104,12 +111,14 @@ export default function register(editor) {
104
111
  }))),
105
112
  onAction: () => {
106
113
  var _listStyleInfoForSele;
107
-
108
114
  return editor.execCommand(((_listStyleInfoForSele = listStyleInfoForSelectionOfEditor(editor)) === null || _listStyleInfoForSele === void 0 ? void 0 : _listStyleInfoForSele.listType) === 'OL' ? 'InsertOrderedList' : 'InsertUnorderedList');
109
115
  },
110
116
  onItemAction: (splitButtonApi, value) => {
117
+ // @ts-expect-error
111
118
  const desiredListStyleInfo = listStyleInfos.byKey[value] || defaultStyleInfoForListType.UL;
112
- const currentListStyleInfo = listStyleInfoForSelectionOfEditor(editor); // When the user clicks the list button that matches the current list style in the selection,
119
+ const currentListStyleInfo = listStyleInfoForSelectionOfEditor(editor);
120
+
121
+ // When the user clicks the list button that matches the current list style in the selection,
113
122
  // we want to interpret that as un-list-ifying the selection
114
123
 
115
124
  if ((currentListStyleInfo === null || currentListStyleInfo === void 0 ? void 0 : currentListStyleInfo.listStyleType) !== desiredListStyleInfo.listStyleType) {
@@ -122,21 +131,19 @@ export default function register(editor) {
122
131
  },
123
132
  select: value => {
124
133
  var _listStyleInfoForSele2;
125
-
126
134
  return ((_listStyleInfoForSele2 = listStyleInfoForSelectionOfEditor(editor)) === null || _listStyleInfoForSele2 === void 0 ? void 0 : _listStyleInfoForSele2.listStyleType) === value;
127
135
  },
128
136
  onSetup: api => {
129
137
  // Handle updating the icon on the toolbar based on
130
138
  // the type of list the user's selection is currently within
139
+
131
140
  const $iconSvgContainer = editor.$(`.tox-split-button[aria-label="${getButtonLabel()}"] .tox-icon`, document);
132
141
  const allIcons = editor.ui.registry.getAll().icons;
133
-
134
142
  const nodeChangeHandler = () => {
135
143
  const activeListType = listStyleInfoForSelectionOfEditor(editor);
136
144
  api.setActive(!!activeListType);
137
145
  $iconSvgContainer.html(allIcons[(activeListType === null || activeListType === void 0 ? void 0 : activeListType.icon) || 'list-bull-default']);
138
146
  };
139
-
140
147
  nodeChangeHandler();
141
148
  editor.on('NodeChange', nodeChangeHandler);
142
149
  return () => editor.off('NodeChange', nodeChangeHandler);
@@ -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 { toolbarIconHelperFor } from '../../../../util/tinymce-plugin-util';
20
21
  export default function register(editor) {
@@ -41,13 +42,11 @@ export default function register(editor) {
41
42
  }))),
42
43
  onSetup: api => {
43
44
  const iconHelper = toolbarIconHelperFor(editor, buttonLabel);
44
-
45
45
  function nodeChangeHandler() {
46
46
  const activeStyleInfo = styleInfos.find(b => editor.formatter.match(b.icon));
47
47
  api.setActive(!!activeStyleInfo);
48
48
  iconHelper.updateIcon((activeStyleInfo === null || activeStyleInfo === void 0 ? void 0 : activeStyleInfo.icon) || defaultIcon);
49
49
  }
50
-
51
50
  nodeChangeHandler();
52
51
  editor.on('NodeChange', nodeChangeHandler);
53
52
  return () => editor.off('NodeChange', nodeChangeHandler);
@@ -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, {
@@ -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 { func, shape, string, oneOf } from 'prop-types';
20
21
  import { contentTrayDocumentShape } from '../../shared/fileShape';
@@ -23,23 +24,18 @@ import { Text } from '@instructure/ui-text';
23
24
  import { View } from '@instructure/ui-view';
24
25
  import Link from './Link';
25
26
  import { LoadMoreButton, LoadingIndicator, LoadingStatus, useIncrementalLoading } from '../../../../common/incremental-loading';
26
-
27
27
  function hasFiles(documents) {
28
28
  return documents.files.length > 0;
29
29
  }
30
-
31
30
  function isEmpty(documents) {
32
31
  return !hasFiles(documents) && !documents.hasMore && !documents.isLoading;
33
32
  }
34
-
35
33
  function renderLinks(files, handleClick, lastItemRef) {
36
34
  return files.map((f, index) => {
37
35
  let focusRef = null;
38
-
39
36
  if (index === files.length - 1) {
40
37
  focusRef = lastItemRef;
41
38
  }
42
-
43
39
  return /*#__PURE__*/React.createElement(Link, Object.assign({
44
40
  key: f.id
45
41
  }, f, {
@@ -48,7 +44,6 @@ function renderLinks(files, handleClick, lastItemRef) {
48
44
  }));
49
45
  });
50
46
  }
51
-
52
47
  function renderLoadingError(_error) {
53
48
  return /*#__PURE__*/React.createElement(View, {
54
49
  as: "div",
@@ -58,7 +53,6 @@ function renderLoadingError(_error) {
58
53
  color: "danger"
59
54
  }, formatMessage('Loading failed.')));
60
55
  }
61
-
62
56
  export default function DocumentsPanel(props) {
63
57
  const {
64
58
  fetchInitialDocs,
@@ -86,11 +80,9 @@ export default function DocumentsPanel(props) {
86
80
  sortBy,
87
81
  searchString
88
82
  });
89
-
90
83
  const handleDocClick = file => {
91
84
  props.onLinkClick(file);
92
85
  };
93
-
94
86
  return /*#__PURE__*/React.createElement(View, {
95
87
  as: "div",
96
88
  "data-testid": "instructure_links-DocumentsPanel"
@@ -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 } from 'react';
19
20
  import { func, instanceOf, shape } from 'prop-types';
20
21
  import { fileOrMediaObjectShape } from '../../shared/fileShape';
@@ -33,7 +34,6 @@ import { applyTimezoneOffsetToDate } from '../../shared/dateUtils';
33
34
  import RCEGlobals from '../../../RCEGlobals';
34
35
  export default function Link(props) {
35
36
  var _RCEGlobals$getConfig;
36
-
37
37
  const [isHovering, setIsHovering] = useState(false);
38
38
  const {
39
39
  filename,
@@ -46,12 +46,11 @@ export default function Link(props) {
46
46
  disabledMessage
47
47
  } = props;
48
48
  const Icon = getIconFromType(content_type);
49
- const color = published ? 'success' : 'primary'; // Uses user locale and timezone
50
-
49
+ const color = published ? 'success' : 'primary';
50
+ // Uses user locale and timezone
51
51
  const configuredTimezone = (_RCEGlobals$getConfig = RCEGlobals.getConfig()) === null || _RCEGlobals$getConfig === void 0 ? void 0 : _RCEGlobals$getConfig.timezone;
52
52
  const dateString = formatMessage.date(applyTimezoneOffsetToDate(date, configuredTimezone), 'long');
53
53
  const publishedMsg = published ? formatMessage('published') : formatMessage('unpublished');
54
-
55
54
  function linkAttrsFromDoc() {
56
55
  const canPreview = isPreviewable(props.content_type);
57
56
  const clazz = classnames('instructure_file_link', {
@@ -73,44 +72,35 @@ export default function Link(props) {
73
72
  embedded_iframe_url: props.embedded_iframe_url,
74
73
  media_entry_id: props.media_entry_id
75
74
  };
76
-
77
75
  if (canPreview) {
78
76
  attrs['data-canvas-previewable'] = true;
79
77
  }
80
-
81
78
  return attrs;
82
79
  }
83
-
84
80
  function handleLinkClick(e) {
85
81
  e.preventDefault();
86
82
  props.onClick(linkAttrsFromDoc());
87
83
  }
88
-
89
84
  function handleLinkKey(e) {
90
85
  // press the button on enter or space
91
86
  if (e.keyCode === 13 || e.keyCode === 32) {
92
87
  handleLinkClick(e);
93
88
  }
94
89
  }
95
-
96
90
  function handleDragStart(e) {
97
91
  const linkAttrs = linkAttrsFromDoc();
98
92
  dragHtml(e, renderLinkHtml(linkAttrs, linkAttrs.text));
99
93
  }
100
-
101
94
  function handleDragEnd(_e) {
102
95
  document.body.click();
103
96
  }
104
-
105
97
  function handleHover(e) {
106
98
  setIsHovering(e.type === 'mouseenter');
107
99
  }
108
-
109
100
  function buildCallback(callback) {
110
101
  if (disabled) return;
111
102
  return callback;
112
103
  }
113
-
114
104
  function dateOrMessage(str) {
115
105
  if (disabled && disabledMessage) {
116
106
  return /*#__PURE__*/React.createElement(View, {
@@ -121,27 +111,22 @@ export default function Link(props) {
121
111
  fontStyle: "italic"
122
112
  }, disabledMessage)));
123
113
  }
124
-
125
114
  if (str) {
126
115
  return /*#__PURE__*/React.createElement(View, {
127
116
  as: "div"
128
117
  }, str);
129
118
  }
130
119
  }
131
-
132
120
  function textStyles() {
133
121
  if (disabled) return {
134
122
  color: 'gray'
135
123
  };
136
124
  return {};
137
125
  }
138
-
139
126
  let elementRef = null;
140
-
141
127
  if (props.focusRef) {
142
128
  elementRef = ref => props.focusRef.current = ref;
143
129
  }
144
-
145
130
  return /*#__PURE__*/React.createElement("div", {
146
131
  "data-testid": "instructure_links-Link",
147
132
  draggable: true,
@@ -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 clickCallback from './clickCallback';
20
21
  import bridge from '../../../bridge';
@@ -23,14 +24,12 @@ import tinymce from 'tinymce';
23
24
  const COURSE_PLUGIN_KEY = 'course_documents';
24
25
  const USER_PLUGIN_KEY = 'user_documents';
25
26
  const GROUP_PLUGIN_KEY = 'group_documents';
26
-
27
27
  function getMenuItems(ed) {
28
28
  const contextType = ed.settings.canvas_rce_user_context.type;
29
29
  const items = [{
30
30
  text: formatMessage('Upload Document'),
31
31
  value: 'instructure_upload_document'
32
32
  }];
33
-
34
33
  if (contextType === 'course') {
35
34
  items.push({
36
35
  text: formatMessage('Course Documents'),
@@ -42,45 +41,41 @@ function getMenuItems(ed) {
42
41
  value: 'instructure_group_document'
43
42
  });
44
43
  }
45
-
46
44
  items.push({
47
45
  text: formatMessage('User Documents'),
48
46
  value: 'instructure_user_document'
49
47
  });
50
48
  return items;
51
49
  }
52
-
53
50
  function doMenuItem(ed, value) {
54
51
  switch (value) {
55
52
  case 'instructure_upload_document':
56
53
  ed.execCommand('mceInstructureDocuments');
57
54
  break;
58
-
59
55
  case 'instructure_course_document':
60
56
  ed.focus(true);
61
57
  ed.execCommand('instructureTrayForDocuments', false, COURSE_PLUGIN_KEY);
62
58
  break;
63
-
64
59
  case 'instructure_user_document':
65
60
  ed.focus(true);
66
61
  ed.execCommand('instructureTrayForDocuments', false, USER_PLUGIN_KEY);
67
62
  break;
68
-
69
63
  case 'instructure_group_document':
70
64
  ed.focus(true);
71
65
  ed.execCommand('instructureTrayForDocuments', false, GROUP_PLUGIN_KEY);
72
66
  break;
73
67
  }
74
- } // Register plugin
75
-
68
+ }
76
69
 
70
+ // Register plugin
77
71
  tinymce.PluginManager.add('instructure_documents', function (ed) {
78
72
  // Register commands
79
73
  ed.addCommand('mceInstructureDocuments', () => clickCallback(ed, document));
80
74
  ed.addCommand('instructureTrayForDocuments', (ui, plugin_key) => {
81
75
  bridge.showTrayForPlugin(plugin_key, ed.id);
82
- }); // Register menu items
76
+ });
83
77
 
78
+ // Register menu items
84
79
  ed.ui.registry.addNestedMenuItem('instructure_document', {
85
80
  text: formatMessage('Document'),
86
81
  icon: 'document',
@@ -95,8 +90,9 @@ tinymce.PluginManager.add('instructure_documents', function (ed) {
95
90
  }
96
91
  };
97
92
  })
98
- }); // Register toolbar button
93
+ });
99
94
 
95
+ // Register toolbar button
100
96
  ed.ui.registry.addMenuButton('instructure_documents', {
101
97
  tooltip: formatMessage('Documents'),
102
98
  icon: 'document',
@@ -106,18 +102,15 @@ tinymce.PluginManager.add('instructure_documents', function (ed) {
106
102
  value: item.value,
107
103
  onAction: () => doMenuItem(ed, item.value)
108
104
  }))),
109
-
110
105
  onSetup(api) {
111
106
  function handleNodeChange() {
112
107
  api.setDisabled(!isOKToLink(ed.selection.getContent()));
113
108
  }
114
-
115
109
  setTimeout(handleNodeChange);
116
110
  ed.on('NodeChange', handleNodeChange);
117
111
  return () => {
118
112
  ed.off('NodeChange', handleNodeChange);
119
113
  };
120
114
  }
121
-
122
115
  });
123
116
  });
@@ -15,10 +15,12 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
- import { memoize } from 'lodash'; // These commands all work fine with MathJax but either don't work, don't work well
18
+
19
+ import { memoize } from 'lodash';
20
+
21
+ // These commands all work fine with MathJax but either don't work, don't work well
19
22
  // (bad UX for editing), or look strange when rendered by Mathlive. Add new ones
20
23
  // here if you discover anything else or customers report unexpected experiences.
21
-
22
24
  const advancedOnlyCommands = ['begin', 'end', 'cases', 'cr', 'rm', 'text', 'hbox', 'mbox', 'unicode', 'cal', 'frak', 'it', 'scr', 'sf', '#', 'def', 'newcommand', 'operatorname', 'DeclareMathOperator', 'displaystyle', 'textstyle', 'scriptstyle', 'scriptscriptstyle', 'displaylines', 'abovewithdelims', 'array', 'bmatrix', 'buildrel', 'ddddot', 'dddot', 'eqalign', 'eqalignno', 'gcd', 'genfrac', 'hdashline', 'hfil', 'hfill', 'hfilll', 'hline', 'idotsint', 'iiiint', 'injlim', 'kern', 'label', 'LaTeX', 'leftroot', 'lgroup', 'lower', 'mathchoice', 'mathfrak', 'matrix', 'mit', 'mkern', 'mspace', 'negmedspace', 'negthickspace', 'negthinspace', 'newline', 'nobreakspace', 'oldstyle', 'overset', 'pmatrix', 'raise', 'rgroup', 'rule', 'Rule', 'skew', 'space', 'tag', 'TeX', 'underbrace', 'uproot', 'varinjlim', 'varliminf', 'varlimsup', 'varprojlim', 'vcenter', 'vmatrix'];
23
25
  const advancedOnlyRegex = new RegExp(advancedOnlyCommands.join('|'), 'm');
24
26
  const containsAdvancedSyntax = memoize(latex => advancedOnlyRegex.test(latex));
@@ -15,8 +15,8 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
- export const STORAGE_KEY = 'NEE_should_reopen_advanced';
19
18
 
19
+ export const STORAGE_KEY = 'NEE_should_reopen_advanced';
20
20
  function wrapInErrorHandling(func) {
21
21
  try {
22
22
  return {
@@ -31,7 +31,6 @@ function wrapInErrorHandling(func) {
31
31
  };
32
32
  }
33
33
  }
34
-
35
34
  export const isSet = () => {
36
35
  const result = wrapInErrorHandling(() => {
37
36
  const value = window.sessionStorage.getItem(STORAGE_KEY) || 'null';
@@ -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, { Component } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { TextArea } from '@instructure/ui-text-area';
@@ -33,9 +34,10 @@ import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
33
34
  import { css } from 'aphrodite';
34
35
  import { MathJaxDirective, Mathml } from '../../../../enhance-user-content/mathml';
35
36
  import styles from './styles';
36
- import RCEGlobals from '../../../RCEGlobals'; // Import the <math-field> container and all
37
- // the relevant math fonts from mathlive
37
+ import RCEGlobals from '../../../RCEGlobals';
38
38
 
39
+ // Import the <math-field> container and all
40
+ // the relevant math fonts from mathlive
39
41
  import '../mathlive';
40
42
  import { insertTextIntoLatexTextarea } from './latexTextareaUtil';
41
43
  export default class EquationEditorModal extends Component {
@@ -47,14 +49,11 @@ export default class EquationEditorModal extends Component {
47
49
  };
48
50
  this.previewElement = /*#__PURE__*/React.createRef();
49
51
  this.advancedEditor = /*#__PURE__*/React.createRef();
50
-
51
52
  this.executeCommand = (cmd, advancedCmd) => {
52
53
  if (this.state.advanced) {
53
54
  var _this$advancedEditor$;
54
-
55
55
  const insertionText = advancedCmd || cmd;
56
56
  const textarea = (_this$advancedEditor$ = this.advancedEditor.current) === null || _this$advancedEditor$ === void 0 ? void 0 : _this$advancedEditor$._textarea;
57
-
58
57
  if (textarea) {
59
58
  insertTextIntoLatexTextarea(textarea, insertionText);
60
59
  this.setState({
@@ -67,25 +66,20 @@ export default class EquationEditorModal extends Component {
67
66
  });
68
67
  }
69
68
  };
70
-
71
69
  this.handleModalCancel = () => {
72
70
  this.props.onModalDismiss();
73
71
  };
74
-
75
72
  this.handleModalDone = () => {
76
73
  const {
77
74
  onModalDismiss,
78
75
  onEquationSubmit
79
76
  } = this.props;
80
77
  const output = this.state.advanced ? this.state.workingFormula : this.getMathFiled();
81
-
82
78
  if (output) {
83
79
  onEquationSubmit(output);
84
80
  }
85
-
86
81
  onModalDismiss();
87
82
  };
88
-
89
83
  this.renderMathInAdvancedPreview = debounce(() => {
90
84
  if (this.previewElement.current) {
91
85
  this.previewElement.current.innerHTML = String.raw`\(${this.state.workingFormula}\)`;
@@ -95,7 +89,6 @@ export default class EquationEditorModal extends Component {
95
89
  leading: false,
96
90
  trailing: true
97
91
  });
98
-
99
92
  this.toggleAdvanced = () => {
100
93
  this.setState(state => {
101
94
  if (state.advanced) {
@@ -113,12 +106,10 @@ export default class EquationEditorModal extends Component {
113
106
  });
114
107
  this.setPreviewElementContent();
115
108
  };
116
-
117
109
  this.toggleAndUpdatePreference = () => {
118
110
  this.toggleAdvanced();
119
111
  advancedPreference.isSet() ? advancedPreference.remove() : advancedPreference.set();
120
112
  };
121
-
122
113
  this.registerBasicEditorListener = () => {
123
114
  const basicEditor = document.querySelector('math-field');
124
115
  basicEditor.addEventListener('input', e => {
@@ -130,11 +121,9 @@ export default class EquationEditorModal extends Component {
130
121
  }
131
122
  });
132
123
  };
133
-
134
124
  this.handleFieldRef = node => {
135
125
  this.mathField = node;
136
126
  };
137
-
138
127
  this.renderFooter = () => {
139
128
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
140
129
  "data-testid": "equation-editor-modal-cancel",
@@ -146,7 +135,6 @@ export default class EquationEditorModal extends Component {
146
135
  color: "primary"
147
136
  }, formatMessage('Done')));
148
137
  };
149
-
150
138
  this.renderToggle = () => {
151
139
  const lockToggle = this.state.advanced && this.advancedModeOnly(this.state.workingFormula);
152
140
  return /*#__PURE__*/React.createElement(ConditionalTooltip, {
@@ -162,10 +150,8 @@ export default class EquationEditorModal extends Component {
162
150
  "data-testid": "advanced-toggle"
163
151
  }));
164
152
  };
165
-
166
153
  this.render = () => {
167
154
  var _RCEGlobals$getFeatur;
168
-
169
155
  const {
170
156
  onModalClose
171
157
  } = this.props;
@@ -237,13 +223,12 @@ export default class EquationEditorModal extends Component {
237
223
  className: (_RCEGlobals$getFeatur = RCEGlobals.getFeatures()) !== null && _RCEGlobals$getFeatur !== void 0 && _RCEGlobals$getFeatur.explicit_latex_typesetting ? MathJaxDirective.Process : null
238
224
  })))), /*#__PURE__*/React.createElement(Modal.Footer, null, this.renderFooter()));
239
225
  };
240
-
241
226
  this.mathml = new Mathml(RCEGlobals.getFeatures(), RCEGlobals.getConfig());
242
227
  }
243
-
244
228
  // **************** //
245
229
  // Helper functions //
246
230
  // **************** //
231
+
247
232
  insertNewRange() {
248
233
  const {
249
234
  editor,
@@ -260,15 +245,15 @@ export default class EquationEditorModal extends Component {
260
245
  range.setEnd(startContainer, rightIndex);
261
246
  editor.selection.setRng(range);
262
247
  }
263
-
264
248
  advancedModeOnly(latex) {
265
249
  const normalizedLatex = latex.replace(/\s+/, '');
266
250
  return containsAdvancedSyntax(normalizedLatex);
267
- } // ********* //
251
+ }
252
+
253
+ // ********* //
268
254
  // Callbacks //
269
255
  // ********* //
270
256
 
271
-
272
257
  setPreviewElementContent() {
273
258
  if (this.state.workingFormula) {
274
259
  this.renderMathInAdvancedPreview();
@@ -277,6 +262,10 @@ export default class EquationEditorModal extends Component {
277
262
  }
278
263
  }
279
264
 
265
+ // ******************* //
266
+ // Rendering functions //
267
+ // ******************* //
268
+
280
269
  componentDidMount() {
281
270
  this.registerBasicEditorListener();
282
271
  this.setPreviewElementContent();
@@ -284,16 +273,13 @@ export default class EquationEditorModal extends Component {
284
273
  if (!this.state.advanced) this.setMathField(this.state.workingFormula);
285
274
  this.insertNewRange();
286
275
  }
287
-
288
276
  componentDidUpdate(prevProps, prevState) {
289
277
  if (this.state.workingFormula !== prevState.workingFormula) {
290
278
  this.setPreviewElementContent();
291
279
  }
292
280
  }
293
-
294
281
  stubMacros() {
295
282
  var _this$mathField;
296
-
297
283
  // Mathlive's macros exist for a different use case;
298
284
  // we don't intend for our users to utilize them.
299
285
  // This effectively disables all of them to prevent
@@ -302,15 +288,12 @@ export default class EquationEditorModal extends Component {
302
288
  macros: {}
303
289
  });
304
290
  }
305
-
306
291
  setMathField(formula) {
307
292
  this.mathField.setValue(formula);
308
293
  }
309
-
310
294
  getMathFiled() {
311
295
  return this.mathField.getValue();
312
296
  }
313
-
314
297
  }
315
298
  EquationEditorModal.debounceRate = 1000;
316
299
  EquationEditorModal.propTypes = {