@instructure/canvas-rce 5.14.0 → 5.14.2

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