@instructure/canvas-rce 5.14.1 → 5.15.0
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.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
package/es/rcs/buildError.js
CHANGED
|
@@ -15,7 +15,9 @@
|
|
|
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';
|
|
20
|
+
|
|
19
21
|
/*
|
|
20
22
|
* builds an a displayable error based on errorContext and error
|
|
21
23
|
*
|
|
@@ -25,74 +27,60 @@ import formatMessage from '../format-message';
|
|
|
25
27
|
*
|
|
26
28
|
* @returns { Object } Displayable error - An object with "text" and "variant" keys
|
|
27
29
|
*/
|
|
28
|
-
|
|
29
30
|
export default function buildError(errorContext, error) {
|
|
30
31
|
return getErrorClass(errorContext, error).build(error);
|
|
31
32
|
}
|
|
32
|
-
|
|
33
33
|
function getErrorClass(errorContext, error) {
|
|
34
|
-
const errors = [QuotaError, CaptionSizeError, CaptionCreationError, DefaultError];
|
|
35
|
-
// Defaults to DefaultError
|
|
34
|
+
const errors = [QuotaError, CaptionSizeError, CaptionCreationError, DefaultError];
|
|
36
35
|
|
|
36
|
+
// Find the first error class that matches the given context and error.
|
|
37
|
+
// Defaults to DefaultError
|
|
37
38
|
return errors.find(ErrorClass => ErrorClass.isMatch(errorContext, error));
|
|
38
39
|
}
|
|
39
|
-
|
|
40
40
|
class QuotaError {
|
|
41
41
|
static isMatch(errorContext) {
|
|
42
|
-
return
|
|
42
|
+
return errorContext?.message === 'file size exceeds quota';
|
|
43
43
|
}
|
|
44
|
-
|
|
45
44
|
static build(_error) {
|
|
46
45
|
return {
|
|
47
46
|
text: formatMessage('File storage quota exceeded'),
|
|
48
47
|
variant: 'error'
|
|
49
48
|
};
|
|
50
49
|
}
|
|
51
|
-
|
|
52
50
|
}
|
|
53
|
-
|
|
54
51
|
class CaptionSizeError {
|
|
55
52
|
static isMatch(_errorContext, error) {
|
|
56
|
-
return
|
|
53
|
+
return error?.name === 'FileSizeError';
|
|
57
54
|
}
|
|
58
|
-
|
|
59
55
|
static build(error) {
|
|
60
56
|
return {
|
|
61
57
|
text: formatMessage('Closed caption file must be less than {maxKb} kb', {
|
|
62
58
|
maxKb: error.maxBytes / 1000 // bytes to kb
|
|
63
|
-
|
|
64
59
|
}),
|
|
65
60
|
variant: 'error'
|
|
66
61
|
};
|
|
67
62
|
}
|
|
68
|
-
|
|
69
63
|
}
|
|
70
|
-
|
|
71
64
|
class CaptionCreationError {
|
|
72
65
|
static isMatch(errorContext) {
|
|
73
|
-
return
|
|
66
|
+
return errorContext?.message === 'failed to save captions';
|
|
74
67
|
}
|
|
75
|
-
|
|
76
68
|
static build(_error) {
|
|
77
69
|
return {
|
|
78
70
|
text: formatMessage('loading closed captions/subtitles failed.'),
|
|
79
71
|
variant: 'error'
|
|
80
72
|
};
|
|
81
73
|
}
|
|
82
|
-
|
|
83
74
|
}
|
|
84
|
-
|
|
85
75
|
class DefaultError {
|
|
86
76
|
static isMatch() {
|
|
87
77
|
// DefaultError comes last in the list an always matches
|
|
88
78
|
return true;
|
|
89
79
|
}
|
|
90
|
-
|
|
91
80
|
static build(_error) {
|
|
92
81
|
return {
|
|
93
82
|
text: formatMessage('Something went wrong. Check your connection, reload the page, and try again.'),
|
|
94
83
|
variant: 'error'
|
|
95
84
|
};
|
|
96
85
|
}
|
|
97
|
-
|
|
98
86
|
}
|
package/es/rcs/fake.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
const FAKE_TIMEOUT = process.env.NODE_ENV === 'test' ? 0 : 500;
|
|
19
20
|
const PAGES = {
|
|
20
21
|
// page of announcements
|
|
@@ -283,21 +284,19 @@ export function buildImage(index, name, height, width) {
|
|
|
283
284
|
}
|
|
284
285
|
const imageNames = ['bill_murray', 'bill_is_the_best', 'bill_who?', 'love_this_guy!!11!'];
|
|
285
286
|
const images = [];
|
|
286
|
-
|
|
287
287
|
for (let i = 0; i < 30; i++) {
|
|
288
288
|
const name = imageNames[i % imageNames.length] + i + '.jpeg';
|
|
289
|
+
|
|
289
290
|
/*
|
|
290
291
|
* This is just to get some variety to the example images.
|
|
291
292
|
* We get some Bills, each with unique dimensions following this pattern:
|
|
292
293
|
* 100x200, 201x101, 302x202, 203x303, 304x404, 405x305,
|
|
293
294
|
* 100x206, 201x107, 302x208, 203x309, 304x410, 405x311, etc.
|
|
294
295
|
*/
|
|
295
|
-
|
|
296
296
|
const height = [100, 200, 200, 300, 300, 400][i % 6] + i;
|
|
297
297
|
const width = [200, 100, 300, 200, 400, 300][i % 6] + Math.round(i / 6);
|
|
298
298
|
images.push(buildImage(i, name, height, width));
|
|
299
299
|
}
|
|
300
|
-
|
|
301
300
|
const brokenImage = {
|
|
302
301
|
id: 123000000,
|
|
303
302
|
display_name: 'broken_image.jpeg',
|
|
@@ -346,7 +345,6 @@ const FLICKR_RESULTS = {
|
|
|
346
345
|
title: 'champion chess'
|
|
347
346
|
}]
|
|
348
347
|
};
|
|
349
|
-
|
|
350
348
|
function makeFiles(bookmark_base, extension, content_type) {
|
|
351
349
|
return {
|
|
352
350
|
[`${bookmark_base}1`]: {
|
|
@@ -379,7 +377,6 @@ function makeFiles(bookmark_base, extension, content_type) {
|
|
|
379
377
|
}
|
|
380
378
|
};
|
|
381
379
|
}
|
|
382
|
-
|
|
383
380
|
const DOCUMENTS = makeFiles('documents', 'txt', 'text/plain');
|
|
384
381
|
const MEDIA = makeFiles('media', 'mp3', 'audio/mp3');
|
|
385
382
|
export function getSession() {
|
|
@@ -465,8 +462,7 @@ export function fetchFolders() {
|
|
|
465
462
|
}, 1000);
|
|
466
463
|
});
|
|
467
464
|
}
|
|
468
|
-
export function fetchFiles() {
|
|
469
|
-
let uri = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'files';
|
|
465
|
+
export function fetchFiles(uri = 'files') {
|
|
470
466
|
return Promise.resolve(PAGES[uri]);
|
|
471
467
|
}
|
|
472
468
|
export function fetchImages(props) {
|
|
@@ -474,13 +470,11 @@ export function fetchImages(props) {
|
|
|
474
470
|
setTimeout(() => {
|
|
475
471
|
let response;
|
|
476
472
|
const bookmark = props.images[props.contextType] && props.images[props.contextType].bookmark;
|
|
477
|
-
|
|
478
473
|
if (bookmark) {
|
|
479
474
|
response = IMAGE_RESPONSES.find(response => response.bookmarkForThis === props.bookmark);
|
|
480
475
|
} else {
|
|
481
476
|
response = IMAGE_RESPONSES[0];
|
|
482
477
|
}
|
|
483
|
-
|
|
484
478
|
if (response) {
|
|
485
479
|
resolve(response);
|
|
486
480
|
} else {
|
|
@@ -558,7 +552,6 @@ export function fetchDocs(state) {
|
|
|
558
552
|
setTimeout(() => {
|
|
559
553
|
const bookmark = state.documents[state.contextType] && state.documents[state.contextType].bookmark || 'documents1';
|
|
560
554
|
const response = DOCUMENTS[bookmark];
|
|
561
|
-
|
|
562
555
|
if (response) {
|
|
563
556
|
resolve(response);
|
|
564
557
|
} else {
|
|
@@ -572,11 +565,9 @@ export function fetchMedia(state) {
|
|
|
572
565
|
setTimeout(() => {
|
|
573
566
|
let response;
|
|
574
567
|
const bookmark = state.media[state.contextType] && state.media[state.contextType].bookmark || 'media1';
|
|
575
|
-
|
|
576
568
|
if (bookmark) {
|
|
577
569
|
response = MEDIA[bookmark];
|
|
578
570
|
}
|
|
579
|
-
|
|
580
571
|
if (response) {
|
|
581
572
|
resolve(response);
|
|
582
573
|
} else {
|
|
@@ -585,11 +576,10 @@ export function fetchMedia(state) {
|
|
|
585
576
|
}, FAKE_TIMEOUT);
|
|
586
577
|
});
|
|
587
578
|
}
|
|
588
|
-
export function updateMediaObject(state,
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
} = _ref;
|
|
579
|
+
export function updateMediaObject(state, {
|
|
580
|
+
media_object_id,
|
|
581
|
+
title
|
|
582
|
+
}) {
|
|
593
583
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
594
584
|
return new Promise((resolve, reject) => {
|
|
595
585
|
setTimeout(() => {
|
|
@@ -610,9 +600,8 @@ export function updateMediaObjectFailure() {
|
|
|
610
600
|
}, FAKE_TIMEOUT);
|
|
611
601
|
});
|
|
612
602
|
}
|
|
613
|
-
export function
|
|
614
|
-
|
|
615
|
-
updateClosedCaptions() {
|
|
603
|
+
export function updateClosedCaptions(/* apiProps, {media_object_id, subtitles} */
|
|
604
|
+
) {
|
|
616
605
|
return new Promise(resolve => {
|
|
617
606
|
setTimeout(() => {
|
|
618
607
|
resolve([]);
|
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
// 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
|
export const ALL_FILES_LOADING = 'ALL_FILES_LOADING';
|
|
24
26
|
export function allFilesLoading(isLoading) {
|
|
25
27
|
return {
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
export const REQUEST_INITIAL_PAGE = 'REQUEST_INITIAL_PAGE';
|
|
19
20
|
export const REQUEST_PAGE = 'REQUEST_PAGE';
|
|
20
21
|
export const RECEIVE_PAGE = 'RECEIVE_PAGE';
|
|
@@ -52,22 +53,20 @@ export function failPage(key, error) {
|
|
|
52
53
|
key,
|
|
53
54
|
error
|
|
54
55
|
};
|
|
55
|
-
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// dispatches the start of the load, requests a page for the collection from
|
|
56
59
|
// the source, then dispatches the loaded page to the store on success or
|
|
57
60
|
// clears the load on failure
|
|
58
|
-
|
|
59
61
|
export function fetchPage(key, isInitial, searchString) {
|
|
60
62
|
return (dispatch, getState) => {
|
|
61
63
|
let isCancelled = false;
|
|
62
|
-
|
|
63
64
|
const cancel = () => isCancelled = true;
|
|
64
|
-
|
|
65
65
|
if (isInitial) {
|
|
66
66
|
dispatch(requestInitialPage(key, cancel, searchString));
|
|
67
67
|
} else {
|
|
68
68
|
dispatch(requestPage(key, cancel));
|
|
69
69
|
}
|
|
70
|
-
|
|
71
70
|
const state = getState();
|
|
72
71
|
const {
|
|
73
72
|
source
|
|
@@ -85,7 +84,6 @@ export function fetchNextPage(key) {
|
|
|
85
84
|
return (dispatch, getState) => {
|
|
86
85
|
const state = getState();
|
|
87
86
|
const collection = state.collections[key];
|
|
88
|
-
|
|
89
87
|
if (collection) {
|
|
90
88
|
if (collection.cancel) collection.cancel();
|
|
91
89
|
return dispatch(fetchPage(key, false));
|
|
@@ -96,7 +94,6 @@ export function fetchInitialPage(key) {
|
|
|
96
94
|
return (dispatch, getState) => {
|
|
97
95
|
const state = getState();
|
|
98
96
|
const collection = state.collections[key];
|
|
99
|
-
|
|
100
97
|
if (collection && (collection.links.length === 0 || collection.searchString !== state.searchString)) {
|
|
101
98
|
if (collection.cancel) collection.cancel();
|
|
102
99
|
return dispatch(fetchPage(key, true, state.searchString));
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
export const REQUEST_INITIAL_DOCS = 'REQUEST_INITIAL_DOCS';
|
|
19
20
|
export const REQUEST_DOCS = 'REQUEST_NEXT_DOCS';
|
|
20
21
|
export const RECEIVE_DOCS = 'RECEIVE_DOCS';
|
|
@@ -35,12 +36,11 @@ export function requestDocs(contextType) {
|
|
|
35
36
|
}
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
|
-
export function receiveDocs(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} = _ref;
|
|
39
|
+
export function receiveDocs({
|
|
40
|
+
response,
|
|
41
|
+
contextType,
|
|
42
|
+
contextId
|
|
43
|
+
}) {
|
|
44
44
|
const {
|
|
45
45
|
files,
|
|
46
46
|
bookmark
|
|
@@ -55,11 +55,10 @@ export function receiveDocs(_ref) {
|
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
|
-
export function failDocs(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
} = _ref2;
|
|
58
|
+
export function failDocs({
|
|
59
|
+
error,
|
|
60
|
+
contextType
|
|
61
|
+
}) {
|
|
63
62
|
return {
|
|
64
63
|
type: FAIL_DOCS,
|
|
65
64
|
payload: {
|
|
@@ -67,10 +66,11 @@ export function failDocs(_ref2) {
|
|
|
67
66
|
contextType
|
|
68
67
|
}
|
|
69
68
|
};
|
|
70
|
-
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// dispatches the start of the load, requests a page for the collection from
|
|
71
72
|
// the source, then dispatches the loaded page to the store on success or
|
|
72
73
|
// clears the load on failure
|
|
73
|
-
|
|
74
74
|
export function fetchDocs() {
|
|
75
75
|
return (dispatch, getState) => {
|
|
76
76
|
const state = getState();
|
|
@@ -83,21 +83,22 @@ export function fetchDocs() {
|
|
|
83
83
|
contextType: state.contextType
|
|
84
84
|
})));
|
|
85
85
|
};
|
|
86
|
-
}
|
|
87
|
-
// collection is not yet completely loaded
|
|
86
|
+
}
|
|
88
87
|
|
|
88
|
+
// fetches a page only if a page is not already being loaded and the
|
|
89
|
+
// collection is not yet completely loaded
|
|
89
90
|
export function fetchNextDocs() {
|
|
90
91
|
return (dispatch, getState) => {
|
|
91
92
|
const state = getState();
|
|
92
93
|
const documents = state.documents[state.contextType];
|
|
93
|
-
|
|
94
|
-
if (!(documents !== null && documents !== void 0 && documents.isLoading) && documents !== null && documents !== void 0 && documents.hasMore) {
|
|
94
|
+
if (!documents?.isLoading && documents?.hasMore) {
|
|
95
95
|
dispatch(requestDocs(state.contextType));
|
|
96
96
|
return dispatch(fetchDocs());
|
|
97
97
|
}
|
|
98
98
|
};
|
|
99
|
-
}
|
|
99
|
+
}
|
|
100
100
|
|
|
101
|
+
// fetches the first page
|
|
101
102
|
export function fetchInitialDocs() {
|
|
102
103
|
return (dispatch, getState) => {
|
|
103
104
|
const state = getState();
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
export const ADD_FILE = 'action.files.add_file';
|
|
19
20
|
export const ADD_FOLDER = 'action.files.add_folder';
|
|
20
21
|
export const RECEIVE_FILES = 'action.files.receive_files';
|
|
@@ -30,14 +31,13 @@ export function createToggle(id) {
|
|
|
30
31
|
id
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
|
-
export function createAddFile(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
} = _ref;
|
|
34
|
+
export function createAddFile({
|
|
35
|
+
id,
|
|
36
|
+
name,
|
|
37
|
+
url,
|
|
38
|
+
type,
|
|
39
|
+
embed
|
|
40
|
+
}) {
|
|
41
41
|
return {
|
|
42
42
|
type: ADD_FILE,
|
|
43
43
|
id,
|
|
@@ -74,16 +74,14 @@ export function requestFiles(id, bookmark) {
|
|
|
74
74
|
folders
|
|
75
75
|
} = getState();
|
|
76
76
|
dispatch(createRequestFiles(id));
|
|
77
|
-
return source.fetchFiles(bookmark || folders[id].filesUrl).then(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
} = _ref2;
|
|
77
|
+
return source.fetchFiles(bookmark || folders[id].filesUrl).then(({
|
|
78
|
+
files,
|
|
79
|
+
bookmark
|
|
80
|
+
}) => {
|
|
82
81
|
dispatch(files.map(createAddFile).concat(createReceiveFiles(id, files)));
|
|
83
|
-
|
|
84
82
|
if (bookmark) {
|
|
85
|
-
// Page through all in folder, pagination links
|
|
86
|
-
// weird,
|
|
83
|
+
// Page through all in folder, pagination links of a tree may be
|
|
84
|
+
// weird, especially since files and folders are independent.
|
|
87
85
|
dispatch(requestFiles(id, bookmark));
|
|
88
86
|
}
|
|
89
87
|
});
|
|
@@ -119,13 +117,11 @@ export function requestSubfolders(id, bookmark) {
|
|
|
119
117
|
folders
|
|
120
118
|
} = getState();
|
|
121
119
|
dispatch(createRequestSubfolders(id));
|
|
122
|
-
return source.fetchPage(bookmark || folders[id].foldersUrl).then(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
} = _ref3;
|
|
120
|
+
return source.fetchPage(bookmark || folders[id].foldersUrl).then(({
|
|
121
|
+
folders,
|
|
122
|
+
bookmark
|
|
123
|
+
}) => {
|
|
127
124
|
dispatch(folders.map(createAddFolder).concat(createReceiveSubfolders(id, folders, bookmark)));
|
|
128
|
-
|
|
129
125
|
if (bookmark) {
|
|
130
126
|
// Page through all in folder, pagination links if a tree may be
|
|
131
127
|
// weird, epecially since files and folders are independent.
|
|
@@ -138,7 +134,6 @@ export function toggle(id) {
|
|
|
138
134
|
return (dispatch, getState) => {
|
|
139
135
|
dispatch(createToggle(id));
|
|
140
136
|
const folder = getState().folders[id];
|
|
141
|
-
|
|
142
137
|
if (!folder.requested && folder.expanded) {
|
|
143
138
|
dispatch(requestSubfolders(folder.id));
|
|
144
139
|
dispatch(requestFiles(folder.id));
|
|
@@ -153,12 +148,10 @@ export function createSetRoot(id) {
|
|
|
153
148
|
}
|
|
154
149
|
export function init(dispatch, getState) {
|
|
155
150
|
const props = getState();
|
|
156
|
-
return props.source.fetchRootFolder(props).then(
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
} = _ref4;
|
|
151
|
+
return props.source.fetchRootFolder(props).then(({
|
|
152
|
+
folders
|
|
153
|
+
}) => {
|
|
160
154
|
const root = folders[0];
|
|
161
|
-
|
|
162
155
|
if (root) {
|
|
163
156
|
dispatch([createAddFolder(root), createSetRoot(root.id)]);
|
|
164
157
|
dispatch(toggle(root.id));
|
|
@@ -15,16 +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
|
export const CHANGE_CONTEXT = 'CHANGE_CONTEXT';
|
|
19
20
|
export const CHANGE_CONTEXT_TYPE = 'CHANGE_CONTEXT_TYPE';
|
|
20
21
|
export const CHANGE_CONTEXT_ID = 'CHANGE_CONTEXT_ID';
|
|
21
22
|
export const CHANGE_SEARCH_STRING = 'CHANGE_SEARCH_STRING';
|
|
22
23
|
export const CHANGE_SORT_BY = 'CHANGE_SORT_BY';
|
|
23
|
-
export function changeContext(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} = _ref;
|
|
24
|
+
export function changeContext({
|
|
25
|
+
contextType,
|
|
26
|
+
contextId
|
|
27
|
+
}) {
|
|
28
28
|
return dispatch => {
|
|
29
29
|
dispatch(changeContextType(contextType));
|
|
30
30
|
dispatch(changeContextId(contextId));
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
export const START_FLICKR_SEARCH = 'START_FLICKR_SEARCH';
|
|
19
20
|
export const RECEIVE_FLICKR_RESULTS = 'RECEIVE_FLICKR_RESULTS';
|
|
20
21
|
export const FAIL_FLICKR_SEARCH = 'FAIL_FLICKR_SEARCH';
|
|
@@ -49,7 +50,6 @@ export function searchFlickr(term) {
|
|
|
49
50
|
host,
|
|
50
51
|
flickr
|
|
51
52
|
} = getState();
|
|
52
|
-
|
|
53
53
|
if (flickr && !flickr.searching) {
|
|
54
54
|
dispatch(startFlickrSearch(term));
|
|
55
55
|
return source.searchFlickr(term, {
|
|
@@ -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 { ICON_MAKER_ICONS, ICON_MAKER_ATTRIBUTE, ICON_MAKER_DOWNLOAD_URL_ATTR } from '../../rce/plugins/instructure_icon_maker/svg/constants';
|
|
19
20
|
import buildDownloadUrl from '../../rce/plugins/shared/buildDownloadUrl';
|
|
20
21
|
export const ADD_IMAGE = 'action.images.add_image';
|
|
@@ -22,14 +23,13 @@ export const REQUEST_INITIAL_IMAGES = 'action.images.request_initial_images';
|
|
|
22
23
|
export const REQUEST_IMAGES = 'action.images.request_images';
|
|
23
24
|
export const RECEIVE_IMAGES = 'action.images.receive_images';
|
|
24
25
|
export const FAIL_IMAGES_LOAD = 'action.images.fail_images_load';
|
|
25
|
-
export function createAddImage(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
} = _ref;
|
|
26
|
+
export function createAddImage({
|
|
27
|
+
id,
|
|
28
|
+
filename,
|
|
29
|
+
display_name,
|
|
30
|
+
url,
|
|
31
|
+
thumbnail_url
|
|
32
|
+
}, contextType) {
|
|
33
33
|
return {
|
|
34
34
|
type: ADD_IMAGE,
|
|
35
35
|
payload: {
|
|
@@ -60,12 +60,11 @@ export function requestImages(contextType) {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
-
export function receiveImages(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
} = _ref2;
|
|
63
|
+
export function receiveImages({
|
|
64
|
+
response,
|
|
65
|
+
contextType,
|
|
66
|
+
opts = {}
|
|
67
|
+
}) {
|
|
69
68
|
const {
|
|
70
69
|
files,
|
|
71
70
|
bookmark,
|
|
@@ -81,11 +80,10 @@ export function receiveImages(_ref2) {
|
|
|
81
80
|
}
|
|
82
81
|
};
|
|
83
82
|
}
|
|
84
|
-
export function failImagesLoad(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
} = _ref3;
|
|
83
|
+
export function failImagesLoad({
|
|
84
|
+
error,
|
|
85
|
+
contextType
|
|
86
|
+
}) {
|
|
89
87
|
return {
|
|
90
88
|
type: FAIL_IMAGES_LOAD,
|
|
91
89
|
payload: {
|
|
@@ -95,27 +93,27 @@ export function failImagesLoad(_ref3) {
|
|
|
95
93
|
};
|
|
96
94
|
}
|
|
97
95
|
export const applyAttributes = (file, opts) => {
|
|
98
|
-
const augmentedFile = {
|
|
96
|
+
const augmentedFile = {
|
|
97
|
+
...file
|
|
99
98
|
};
|
|
100
|
-
|
|
101
99
|
if (opts.category === ICON_MAKER_ICONS) {
|
|
102
100
|
augmentedFile[ICON_MAKER_ATTRIBUTE] = true;
|
|
103
101
|
augmentedFile[ICON_MAKER_DOWNLOAD_URL_ATTR] = buildDownloadUrl(file.download_url);
|
|
104
102
|
}
|
|
105
|
-
|
|
106
103
|
return augmentedFile;
|
|
107
|
-
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// dispatches the start of the load, requests a page for the collection from
|
|
108
107
|
// the source, then dispatches the loaded page to the store on success or
|
|
109
108
|
// clears the load on failure
|
|
110
|
-
|
|
111
|
-
export function fetchImages() {
|
|
112
|
-
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
109
|
+
export function fetchImages(opts = {}) {
|
|
113
110
|
const {
|
|
114
111
|
category
|
|
115
112
|
} = opts;
|
|
116
113
|
return (dispatch, getState) => {
|
|
117
114
|
const state = getState();
|
|
118
|
-
return state.source.fetchImages({
|
|
115
|
+
return state.source.fetchImages({
|
|
116
|
+
...state,
|
|
119
117
|
category
|
|
120
118
|
}).then(response => dispatch(receiveImages({
|
|
121
119
|
response,
|
|
@@ -126,25 +124,22 @@ export function fetchImages() {
|
|
|
126
124
|
contextType: state.contextType
|
|
127
125
|
})));
|
|
128
126
|
};
|
|
129
|
-
}
|
|
127
|
+
}
|
|
128
|
+
// fetches a page only if a page is not already being loaded and the
|
|
130
129
|
// collection is not yet completely loaded
|
|
131
|
-
|
|
132
|
-
export function fetchNextImages() {
|
|
133
|
-
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
130
|
+
export function fetchNextImages(opts = {}) {
|
|
134
131
|
return (dispatch, getState) => {
|
|
135
132
|
const state = getState();
|
|
136
133
|
const images = state.images[state.contextType];
|
|
137
|
-
|
|
138
|
-
if (!(images !== null && images !== void 0 && images.isLoading) && images !== null && images !== void 0 && images.hasMore) {
|
|
134
|
+
if (!images?.isLoading && images?.hasMore) {
|
|
139
135
|
dispatch(requestImages(state.contextType));
|
|
140
136
|
return dispatch(fetchImages(opts));
|
|
141
137
|
}
|
|
142
138
|
};
|
|
143
|
-
}
|
|
139
|
+
}
|
|
140
|
+
// fetches the next page (subject to conditions on fetchNextImages) only if the
|
|
144
141
|
// collection is currently empty
|
|
145
|
-
|
|
146
|
-
export function fetchInitialImages() {
|
|
147
|
-
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
142
|
+
export function fetchInitialImages(opts = {}) {
|
|
148
143
|
return (dispatch, getState) => {
|
|
149
144
|
const state = getState();
|
|
150
145
|
dispatch(requestInitialImages(state.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 const TOGGLE_NEWPAGE_FORM = 'TOGGLE_NEWPAGE_FORM';
|
|
19
20
|
export function openOrCloseNewPageForm() {
|
|
20
21
|
return {
|