@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
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
//
|
|
14
14
|
// You should have received a copy of the GNU Affero General Public License along
|
|
15
15
|
// with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
16
17
|
import React from 'react';
|
|
17
18
|
import formatMessage from '../format-message';
|
|
18
19
|
import _ from 'lodash';
|
|
@@ -26,13 +27,9 @@ import { getIconFromType, isImage } from '../rce/plugins/shared/fileTypeUtils';
|
|
|
26
27
|
import { showFlashError } from '../common/FlashAlert';
|
|
27
28
|
import natcompare from '../common/natcompare';
|
|
28
29
|
export const PENDING_MEDIA_ENTRY_ID = 'maybe';
|
|
29
|
-
|
|
30
30
|
class FileBrowser extends React.Component {
|
|
31
31
|
constructor(_props2) {
|
|
32
|
-
var _this;
|
|
33
|
-
|
|
34
32
|
super(_props2);
|
|
35
|
-
_this = this;
|
|
36
33
|
this.fetchSubFolders = _.memoize(id => {
|
|
37
34
|
this.source.fetchBookmarkedData(this.source.fetchSubFolders.bind(this.source), {
|
|
38
35
|
folderId: id,
|
|
@@ -41,31 +38,24 @@ class FileBrowser extends React.Component {
|
|
|
41
38
|
this.populateCollectionsList(result.folders);
|
|
42
39
|
}, error => {
|
|
43
40
|
this.props.onLoading(false);
|
|
44
|
-
/* eslint-disable no-console */
|
|
45
|
-
|
|
46
41
|
console.error('Error fetching data from API');
|
|
47
42
|
console.error(error);
|
|
48
43
|
});
|
|
49
44
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
53
|
-
|
|
54
|
-
_this.setState((state, props) => {
|
|
45
|
+
this.populateCollectionsList = (folderList, opts = {}) => {
|
|
46
|
+
this.setState((state, props) => {
|
|
55
47
|
const newCollections = _.cloneDeep(state.collections);
|
|
56
|
-
|
|
57
48
|
folderList.forEach(folder => {
|
|
58
|
-
const collection =
|
|
49
|
+
const collection = this.formatFolderInfo(folder, {
|
|
50
|
+
...opts,
|
|
59
51
|
searchString: props.searchString
|
|
60
52
|
});
|
|
61
|
-
|
|
62
53
|
newCollections[collection.id] = collection;
|
|
63
54
|
const parentId = folder.parentId || 0;
|
|
64
55
|
const collectionCollections = newCollections[parentId].collections;
|
|
65
|
-
|
|
66
56
|
if (!collectionCollections.includes(collection.id)) {
|
|
67
57
|
collectionCollections.push(collection.id);
|
|
68
|
-
newCollections[parentId].collections =
|
|
58
|
+
newCollections[parentId].collections = this.orderedIdsFromList(newCollections, collectionCollections);
|
|
69
59
|
}
|
|
70
60
|
});
|
|
71
61
|
return {
|
|
@@ -73,20 +63,16 @@ class FileBrowser extends React.Component {
|
|
|
73
63
|
};
|
|
74
64
|
});
|
|
75
65
|
};
|
|
76
|
-
|
|
77
66
|
this.populateItemsList = fileList => {
|
|
78
67
|
this.setState((state, _props) => {
|
|
79
68
|
const newItems = _.cloneDeep(state.items);
|
|
80
|
-
|
|
81
69
|
const newCollections = _.cloneDeep(state.collections);
|
|
82
|
-
|
|
83
70
|
fileList.forEach(file => {
|
|
84
71
|
if (this.contentTypeIsAllowed(file.type)) {
|
|
85
72
|
const item = this.formatFileInfo(file);
|
|
86
73
|
newItems[item.id] = item;
|
|
87
74
|
const folder_id = file.folderId;
|
|
88
75
|
const collectionItems = newCollections[folder_id].items;
|
|
89
|
-
|
|
90
76
|
if (!collectionItems.includes(item.id)) {
|
|
91
77
|
collectionItems.push(item.id);
|
|
92
78
|
newCollections[folder_id].items = this.orderedIdsFromList(newItems, collectionItems);
|
|
@@ -99,7 +85,6 @@ class FileBrowser extends React.Component {
|
|
|
99
85
|
};
|
|
100
86
|
});
|
|
101
87
|
};
|
|
102
|
-
|
|
103
88
|
this.onFolderToggle = folder => {
|
|
104
89
|
const folderId = folder.id;
|
|
105
90
|
this.setState((state, _props) => {
|
|
@@ -109,7 +94,6 @@ class FileBrowser extends React.Component {
|
|
|
109
94
|
const {
|
|
110
95
|
openFolders
|
|
111
96
|
} = state;
|
|
112
|
-
|
|
113
97
|
if (!collection.locked && openFolders.includes(folderId)) {
|
|
114
98
|
newFolders = newFolders.concat(openFolders.filter(id => id !== folderId));
|
|
115
99
|
} else if (!collection.locked) {
|
|
@@ -118,7 +102,6 @@ class FileBrowser extends React.Component {
|
|
|
118
102
|
newCollections = _.cloneDeep(state.collections);
|
|
119
103
|
newCollections[folderId] = collection;
|
|
120
104
|
}
|
|
121
|
-
|
|
122
105
|
return {
|
|
123
106
|
openFolders: newFolders,
|
|
124
107
|
uploadFolder: folderId,
|
|
@@ -127,24 +110,20 @@ class FileBrowser extends React.Component {
|
|
|
127
110
|
}, () => {
|
|
128
111
|
if (this.state.openFolders.includes(folderId)) {
|
|
129
112
|
const collection = this.state.collections[folderId];
|
|
130
|
-
|
|
131
113
|
if (!collection.locked) {
|
|
132
114
|
this.getFolderData(folderId);
|
|
133
115
|
}
|
|
134
116
|
}
|
|
135
117
|
});
|
|
136
118
|
};
|
|
137
|
-
|
|
138
119
|
this.onFileClick = file => {
|
|
139
120
|
const selectedItem = this.state.items[file.id];
|
|
140
121
|
if (selectedItem.isDisabled) return;
|
|
141
122
|
this.props.selectFile(selectedItem);
|
|
142
123
|
};
|
|
143
|
-
|
|
144
124
|
this.setFailureMessage = message => {
|
|
145
125
|
showFlashError(message)();
|
|
146
126
|
};
|
|
147
|
-
|
|
148
127
|
this.state = {
|
|
149
128
|
collections: {
|
|
150
129
|
0: {
|
|
@@ -159,11 +138,9 @@ class FileBrowser extends React.Component {
|
|
|
159
138
|
this.source = _props2.source;
|
|
160
139
|
this.updatePropsWithThumbnailOrIcon = this.updatePropsWithThumbnailOrIcon.bind(this);
|
|
161
140
|
}
|
|
162
|
-
|
|
163
141
|
componentDidMount() {
|
|
164
142
|
this.getRootFolders();
|
|
165
143
|
}
|
|
166
|
-
|
|
167
144
|
componentDidUpdate() {
|
|
168
145
|
this.state.openFolders.forEach(fid => {
|
|
169
146
|
if (this.props.searchString !== this.state.collections[fid].searchString) {
|
|
@@ -171,7 +148,6 @@ class FileBrowser extends React.Component {
|
|
|
171
148
|
}
|
|
172
149
|
});
|
|
173
150
|
}
|
|
174
|
-
|
|
175
151
|
getContextName(contextType) {
|
|
176
152
|
if (contextType === 'course') {
|
|
177
153
|
return formatMessage('Course files');
|
|
@@ -179,34 +155,28 @@ class FileBrowser extends React.Component {
|
|
|
179
155
|
return formatMessage('Group files');
|
|
180
156
|
}
|
|
181
157
|
}
|
|
182
|
-
|
|
183
158
|
getRootFolders() {
|
|
184
159
|
if (this.props.useContextAssets) {
|
|
185
160
|
this.getContextFolders();
|
|
186
161
|
}
|
|
187
|
-
|
|
188
162
|
this.getUserFolders();
|
|
189
163
|
}
|
|
190
|
-
|
|
191
164
|
getUserFolders() {
|
|
192
165
|
this.getRootFolderData('user', 'self', {
|
|
193
166
|
name: formatMessage('My files')
|
|
194
167
|
});
|
|
195
168
|
}
|
|
196
|
-
|
|
197
169
|
getContextFolders() {
|
|
198
170
|
const {
|
|
199
171
|
type,
|
|
200
172
|
id
|
|
201
173
|
} = this.props.context;
|
|
202
|
-
|
|
203
174
|
if (type && id) {
|
|
204
175
|
this.getRootFolderData(type, id, {
|
|
205
176
|
name: this.getContextName(type)
|
|
206
177
|
});
|
|
207
178
|
}
|
|
208
179
|
}
|
|
209
|
-
|
|
210
180
|
increaseLoadingCount() {
|
|
211
181
|
let {
|
|
212
182
|
loadingCount
|
|
@@ -216,7 +186,6 @@ class FileBrowser extends React.Component {
|
|
|
216
186
|
loadingCount
|
|
217
187
|
});
|
|
218
188
|
}
|
|
219
|
-
|
|
220
189
|
decreaseLoadingCount() {
|
|
221
190
|
let {
|
|
222
191
|
loadingCount
|
|
@@ -226,9 +195,7 @@ class FileBrowser extends React.Component {
|
|
|
226
195
|
loadingCount
|
|
227
196
|
});
|
|
228
197
|
}
|
|
229
|
-
|
|
230
|
-
getRootFolderData(context, contextId) {
|
|
231
|
-
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
198
|
+
getRootFolderData(context, contextId, opts = {}) {
|
|
232
199
|
this.increaseLoadingCount();
|
|
233
200
|
this.source.fetchRootFolder({
|
|
234
201
|
contextType: context,
|
|
@@ -237,29 +204,25 @@ class FileBrowser extends React.Component {
|
|
|
237
204
|
this.populateRootFolder(result.folders[0], opts);
|
|
238
205
|
}).catch(error => {
|
|
239
206
|
this.decreaseLoadingCount();
|
|
240
|
-
|
|
241
207
|
if (error.response && error.response.status !== 401) {
|
|
242
208
|
this.setFailureMessage(formatMessage('Something went wrong'));
|
|
243
209
|
}
|
|
244
210
|
});
|
|
245
211
|
}
|
|
246
|
-
|
|
247
|
-
populateRootFolder(data) {
|
|
248
|
-
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
212
|
+
populateRootFolder(data, opts = {}) {
|
|
249
213
|
this.decreaseLoadingCount();
|
|
250
214
|
this.populateCollectionsList([data], opts);
|
|
251
215
|
this.getFolderData(data.id);
|
|
252
|
-
}
|
|
253
|
-
// of the given folder ID, handing pagination
|
|
216
|
+
}
|
|
254
217
|
|
|
218
|
+
// Memoized function to fetch all subfolders
|
|
219
|
+
// of the given folder ID, handing pagination
|
|
255
220
|
|
|
256
221
|
fetchFiles(id) {
|
|
257
|
-
var _this$state$collectio, _this$state$collectio2;
|
|
258
|
-
|
|
259
222
|
this.source.fetchBookmarkedData(this.source.fetchFilesForFolder.bind(this.source), {
|
|
260
223
|
searchString: this.props.searchString,
|
|
261
224
|
perPage: 50,
|
|
262
|
-
filesUrl:
|
|
225
|
+
filesUrl: this.state.collections[id]?.api?.filesUrl
|
|
263
226
|
}, result => {
|
|
264
227
|
this.populateItemsList(result.files);
|
|
265
228
|
}, error => {
|
|
@@ -267,13 +230,14 @@ class FileBrowser extends React.Component {
|
|
|
267
230
|
console.error(error);
|
|
268
231
|
});
|
|
269
232
|
}
|
|
270
|
-
|
|
271
233
|
getFolderData(id) {
|
|
272
234
|
if (!this.state.collections[id].locked) {
|
|
273
235
|
this.setState((state, _props) => {
|
|
274
|
-
const collections = {
|
|
236
|
+
const collections = {
|
|
237
|
+
...state.collections
|
|
275
238
|
};
|
|
276
|
-
const collection = {
|
|
239
|
+
const collection = {
|
|
240
|
+
...collections[id]
|
|
277
241
|
};
|
|
278
242
|
collection.items = [];
|
|
279
243
|
collection.searchString = this.props.searchString;
|
|
@@ -287,21 +251,15 @@ class FileBrowser extends React.Component {
|
|
|
287
251
|
});
|
|
288
252
|
}
|
|
289
253
|
}
|
|
290
|
-
|
|
291
254
|
contentTypeIsAllowed(contentType) {
|
|
292
255
|
for (const pattern of this.props.contentTypes) {
|
|
293
256
|
if (minimatch(contentType, pattern)) {
|
|
294
257
|
return true;
|
|
295
258
|
}
|
|
296
259
|
}
|
|
297
|
-
|
|
298
260
|
return false;
|
|
299
261
|
}
|
|
300
|
-
|
|
301
|
-
formatFolderInfo(apiFolder) {
|
|
302
|
-
var _apiFolder$contextTyp;
|
|
303
|
-
|
|
304
|
-
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
262
|
+
formatFolderInfo(apiFolder, opts = {}) {
|
|
305
263
|
const descriptor = apiFolder.lockedForUser ? formatMessage('Locked') : null;
|
|
306
264
|
const folder = {
|
|
307
265
|
api: apiFolder,
|
|
@@ -309,7 +267,7 @@ class FileBrowser extends React.Component {
|
|
|
309
267
|
collections: [],
|
|
310
268
|
items: [],
|
|
311
269
|
name: apiFolder.name,
|
|
312
|
-
context: `/${
|
|
270
|
+
context: `/${apiFolder.contextType?.toLowerCase()}s/${apiFolder.contextId}`,
|
|
313
271
|
canUpload: apiFolder.canUpload,
|
|
314
272
|
locked: apiFolder.lockedForUser,
|
|
315
273
|
descriptor,
|
|
@@ -322,14 +280,12 @@ class FileBrowser extends React.Component {
|
|
|
322
280
|
});
|
|
323
281
|
return folder;
|
|
324
282
|
}
|
|
325
|
-
|
|
326
283
|
updatePropsWithThumbnailOrIcon(props) {
|
|
327
284
|
const {
|
|
328
285
|
id
|
|
329
286
|
} = props;
|
|
330
287
|
const file = this.state.items[id].api;
|
|
331
288
|
let thumbnail, itemIcon;
|
|
332
|
-
|
|
333
289
|
if (isImage(file.type)) {
|
|
334
290
|
if (file.thumbnailUrl) {
|
|
335
291
|
thumbnail = file.thumbnailUrl;
|
|
@@ -339,20 +295,17 @@ class FileBrowser extends React.Component {
|
|
|
339
295
|
} else {
|
|
340
296
|
itemIcon = getIconFromType(file.type);
|
|
341
297
|
}
|
|
342
|
-
|
|
343
298
|
const containerRef = node => {
|
|
344
299
|
if (node && !node.title && props.name) node.title = props.name;
|
|
345
300
|
};
|
|
346
|
-
|
|
347
|
-
|
|
301
|
+
return {
|
|
302
|
+
...props,
|
|
348
303
|
thumbnail,
|
|
349
304
|
itemIcon,
|
|
350
305
|
containerRef
|
|
351
306
|
};
|
|
352
307
|
}
|
|
353
|
-
|
|
354
|
-
formatFileInfo(apiFile) {
|
|
355
|
-
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
308
|
+
formatFileInfo(apiFile, opts = {}) {
|
|
356
309
|
const {
|
|
357
310
|
collections
|
|
358
311
|
} = this.state;
|
|
@@ -367,19 +320,15 @@ class FileBrowser extends React.Component {
|
|
|
367
320
|
alt: apiFile.name,
|
|
368
321
|
...opts
|
|
369
322
|
};
|
|
370
|
-
|
|
371
323
|
if (apiFile.iframeUrl) {
|
|
372
324
|
// it's a media_object
|
|
373
325
|
file.src = apiFile.iframeUrl;
|
|
374
326
|
}
|
|
375
|
-
|
|
376
327
|
if (isMediaPending) {
|
|
377
328
|
file.descriptor = formatMessage('Media file is processing. Please try again later.');
|
|
378
329
|
}
|
|
379
|
-
|
|
380
330
|
return file;
|
|
381
331
|
}
|
|
382
|
-
|
|
383
332
|
orderedIdsFromList(list, ids) {
|
|
384
333
|
try {
|
|
385
334
|
const sortedIds = ids.sort((a, b) => natcompare.strings(list[a].name, list[b].name));
|
|
@@ -389,7 +338,6 @@ class FileBrowser extends React.Component {
|
|
|
389
338
|
return ids;
|
|
390
339
|
}
|
|
391
340
|
}
|
|
392
|
-
|
|
393
341
|
findFolderForFile(file) {
|
|
394
342
|
const {
|
|
395
343
|
collections
|
|
@@ -400,7 +348,6 @@ class FileBrowser extends React.Component {
|
|
|
400
348
|
});
|
|
401
349
|
return collections[folderKey];
|
|
402
350
|
}
|
|
403
|
-
|
|
404
351
|
renderLoading() {
|
|
405
352
|
if (this.state.loadingCount > 0) {
|
|
406
353
|
return /*#__PURE__*/React.createElement(Spinner, {
|
|
@@ -411,7 +358,6 @@ class FileBrowser extends React.Component {
|
|
|
411
358
|
return null;
|
|
412
359
|
}
|
|
413
360
|
}
|
|
414
|
-
|
|
415
361
|
render() {
|
|
416
362
|
const element = /*#__PURE__*/React.createElement("div", {
|
|
417
363
|
className: "file-browser__container"
|
|
@@ -434,9 +380,7 @@ class FileBrowser extends React.Component {
|
|
|
434
380
|
}), this.renderLoading()));
|
|
435
381
|
return element;
|
|
436
382
|
}
|
|
437
|
-
|
|
438
383
|
}
|
|
439
|
-
|
|
440
384
|
FileBrowser.propTypes = {
|
|
441
385
|
allowUpload: PropTypes.bool,
|
|
442
386
|
selectFile: PropTypes.func.isRequired,
|
|
@@ -15,28 +15,25 @@
|
|
|
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
|
Date.CultureInfo = {
|
|
19
20
|
/* Culture Name */
|
|
20
21
|
name: 'en-US',
|
|
21
22
|
englishName: 'English (United States)',
|
|
22
23
|
nativeName: 'English (United States)',
|
|
23
|
-
|
|
24
24
|
/* Day Name Strings */
|
|
25
25
|
dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
|
26
26
|
abbreviatedDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
27
27
|
shortestDayNames: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
|
28
28
|
firstLetterDayNames: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
|
|
29
|
-
|
|
30
29
|
/* Month Name Strings */
|
|
31
30
|
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
|
32
31
|
abbreviatedMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
|
33
|
-
|
|
34
32
|
/* AM/PM Designators */
|
|
35
33
|
amDesignator: 'AM',
|
|
36
34
|
pmDesignator: 'PM',
|
|
37
35
|
firstDayOfWeek: 0,
|
|
38
36
|
twoDigitYearMax: 2029,
|
|
39
|
-
|
|
40
37
|
/**
|
|
41
38
|
* The dateElementOrder is based on the order of the
|
|
42
39
|
* format specifiers in the formatPatterns.DatePattern.
|
|
@@ -55,7 +52,6 @@ Date.CultureInfo = {
|
|
|
55
52
|
* string being parsed.
|
|
56
53
|
*/
|
|
57
54
|
dateElementOrder: 'mdy',
|
|
58
|
-
|
|
59
55
|
/* Standard date and time format patterns */
|
|
60
56
|
formatPatterns: {
|
|
61
57
|
shortDate: 'M/d/yyyy',
|
|
@@ -69,7 +65,6 @@ Date.CultureInfo = {
|
|
|
69
65
|
monthDay: 'MMMM dd',
|
|
70
66
|
yearMonth: 'MMMM, yyyy'
|
|
71
67
|
},
|
|
72
|
-
|
|
73
68
|
/**
|
|
74
69
|
* NOTE: If a string format is not parsing correctly, but
|
|
75
70
|
* you would expect it parse, the problem likely lies below.
|
|
@@ -97,6 +92,7 @@ Date.CultureInfo = {
|
|
|
97
92
|
*
|
|
98
93
|
* As well, please review the list of "Future Strings" section below.
|
|
99
94
|
*/
|
|
95
|
+
|
|
100
96
|
regexPatterns: {
|
|
101
97
|
jan: /^jan(uary)?/i,
|
|
102
98
|
feb: /^feb(ruary)?/i,
|
|
@@ -171,6 +167,7 @@ Date.CultureInfo = {
|
|
|
171
167
|
offset: '-0700'
|
|
172
168
|
}]
|
|
173
169
|
};
|
|
170
|
+
|
|
174
171
|
/** ******************
|
|
175
172
|
** Future Strings **
|
|
176
173
|
********************
|
package/es/common/FlashAlert.js
CHANGED
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
* type: one of ['info', 'success', 'warning', 'error']
|
|
41
41
|
* default is 'info' unless an error object is passed in, else is 'error'
|
|
42
42
|
*/
|
|
43
|
+
|
|
43
44
|
import React from 'react';
|
|
44
45
|
import PropTypes from 'prop-types';
|
|
45
46
|
import ReactDOM from 'react-dom';
|
|
@@ -51,32 +52,27 @@ import { PresentationContent, ScreenReaderContent } from '@instructure/ui-a11y-c
|
|
|
51
52
|
import { Transition } from '@instructure/ui-motion';
|
|
52
53
|
import RCEGlobals from '../rce/RCEGlobals';
|
|
53
54
|
const messageHolderId = 'flashalert_message_holder'; // specs fail if I reuse jquery's elements
|
|
54
|
-
|
|
55
55
|
const screenreaderMessageHolderId = 'flash_screenreader_holder';
|
|
56
56
|
const TIMEOUT = 10000;
|
|
57
|
-
|
|
58
57
|
function getLiveRegion() {
|
|
59
58
|
// return element where flash screenreader messages go.
|
|
60
59
|
// create if necessary
|
|
61
60
|
let liveRegion = document.getElementById(screenreaderMessageHolderId);
|
|
62
|
-
|
|
63
61
|
if (!liveRegion) {
|
|
64
62
|
liveRegion = document.createElement('div');
|
|
65
63
|
liveRegion.id = screenreaderMessageHolderId;
|
|
66
64
|
liveRegion.setAttribute('role', 'alert');
|
|
67
65
|
document.body.appendChild(liveRegion);
|
|
68
66
|
}
|
|
69
|
-
|
|
70
67
|
return liveRegion;
|
|
71
|
-
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// An Alert with a message and "Details" button which surfaces
|
|
72
71
|
// more info about the error when pressed.
|
|
73
72
|
// Is displayed at the top of the document, and will close itself after a while
|
|
74
|
-
|
|
75
|
-
|
|
76
73
|
export default class FlashAlert extends React.Component {
|
|
77
74
|
constructor(props) {
|
|
78
75
|
super(props);
|
|
79
|
-
|
|
80
76
|
this.showDetails = () => {
|
|
81
77
|
this.setState({
|
|
82
78
|
showDetails: true
|
|
@@ -84,7 +80,6 @@ export default class FlashAlert extends React.Component {
|
|
|
84
80
|
clearTimeout(this.timerId);
|
|
85
81
|
this.timerId = setTimeout(() => this.closeAlert(), this.props.timeout);
|
|
86
82
|
};
|
|
87
|
-
|
|
88
83
|
this.closeAlert = () => {
|
|
89
84
|
this.setState({
|
|
90
85
|
isOpen: false
|
|
@@ -95,19 +90,16 @@ export default class FlashAlert extends React.Component {
|
|
|
95
90
|
}, 500);
|
|
96
91
|
});
|
|
97
92
|
};
|
|
98
|
-
|
|
99
93
|
this.state = {
|
|
100
94
|
showDetails: false,
|
|
101
95
|
isOpen: true
|
|
102
96
|
};
|
|
103
97
|
this.timerId = 0;
|
|
104
98
|
}
|
|
105
|
-
|
|
106
99
|
findDetailMessage() {
|
|
107
100
|
const err = this.props.error;
|
|
108
101
|
let a = err.message;
|
|
109
102
|
let b;
|
|
110
|
-
|
|
111
103
|
if (err.response) {
|
|
112
104
|
if (err.response.data) {
|
|
113
105
|
try {
|
|
@@ -125,13 +117,11 @@ export default class FlashAlert extends React.Component {
|
|
|
125
117
|
}
|
|
126
118
|
}
|
|
127
119
|
}
|
|
128
|
-
|
|
129
120
|
return {
|
|
130
121
|
a,
|
|
131
122
|
b
|
|
132
123
|
};
|
|
133
124
|
}
|
|
134
|
-
|
|
135
125
|
renderDetailMessage() {
|
|
136
126
|
const {
|
|
137
127
|
a,
|
|
@@ -142,10 +132,8 @@ export default class FlashAlert extends React.Component {
|
|
|
142
132
|
fontStyle: "italic"
|
|
143
133
|
}, /*#__PURE__*/React.createElement(Text, null, a), b ? /*#__PURE__*/React.createElement("br", null) : null, b ? /*#__PURE__*/React.createElement(Text, null, b) : null);
|
|
144
134
|
}
|
|
145
|
-
|
|
146
135
|
render() {
|
|
147
136
|
let details = null;
|
|
148
|
-
|
|
149
137
|
if (this.props.error) {
|
|
150
138
|
if (this.state.showDetails) {
|
|
151
139
|
details = this.renderDetailMessage();
|
|
@@ -156,7 +144,6 @@ export default class FlashAlert extends React.Component {
|
|
|
156
144
|
}, formatMessage('Details'))), /*#__PURE__*/React.createElement(ScreenReaderContent, null, this.renderDetailMessage()));
|
|
157
145
|
}
|
|
158
146
|
}
|
|
159
|
-
|
|
160
147
|
return /*#__PURE__*/React.createElement(Transition, {
|
|
161
148
|
transitionOnMount: true,
|
|
162
149
|
in: this.state.isOpen,
|
|
@@ -176,7 +163,6 @@ export default class FlashAlert extends React.Component {
|
|
|
176
163
|
}
|
|
177
164
|
}, this.props.message), details)));
|
|
178
165
|
}
|
|
179
|
-
|
|
180
166
|
}
|
|
181
167
|
FlashAlert.propTypes = {
|
|
182
168
|
onClose: PropTypes.func.isRequired,
|
|
@@ -192,22 +178,18 @@ FlashAlert.defaultProps = {
|
|
|
192
178
|
timeout: TIMEOUT,
|
|
193
179
|
screenReaderOnly: false
|
|
194
180
|
};
|
|
195
|
-
export function showFlashAlert(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
} = _ref;
|
|
202
|
-
|
|
181
|
+
export function showFlashAlert({
|
|
182
|
+
message,
|
|
183
|
+
err,
|
|
184
|
+
type = err ? 'error' : 'info',
|
|
185
|
+
srOnly = false
|
|
186
|
+
}) {
|
|
203
187
|
function closeAlert(atNode) {
|
|
204
188
|
ReactDOM.unmountComponentAtNode(atNode);
|
|
205
189
|
atNode.remove();
|
|
206
190
|
}
|
|
207
|
-
|
|
208
191
|
function getAlertContainer() {
|
|
209
192
|
let alertContainer = document.getElementById(messageHolderId);
|
|
210
|
-
|
|
211
193
|
if (!alertContainer) {
|
|
212
194
|
alertContainer = document.createElement('div');
|
|
213
195
|
alertContainer.classList.add('clickthrough-container');
|
|
@@ -215,15 +197,11 @@ export function showFlashAlert(_ref) {
|
|
|
215
197
|
alertContainer.setAttribute('style', 'position: fixed; top: 0; left: 0; width: 100%; z-index: 100000;');
|
|
216
198
|
document.body.appendChild(alertContainer);
|
|
217
199
|
}
|
|
218
|
-
|
|
219
200
|
return alertContainer;
|
|
220
201
|
}
|
|
221
|
-
|
|
222
202
|
function renderAlert(parent) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const configuredTimeout = (_RCEGlobals$getConfig = RCEGlobals.getConfig()) === null || _RCEGlobals$getConfig === void 0 ? void 0 : _RCEGlobals$getConfig.flashAlertTimeout;
|
|
226
|
-
ReactDOM.render( /*#__PURE__*/React.createElement(FlashAlert, {
|
|
203
|
+
const configuredTimeout = RCEGlobals.getConfig()?.flashAlertTimeout;
|
|
204
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(FlashAlert, {
|
|
227
205
|
message: message,
|
|
228
206
|
timeout: Number.isNaN(parseInt(configuredTimeout, 10)) ? TIMEOUT : configuredTimeout,
|
|
229
207
|
error: err,
|
|
@@ -233,9 +211,8 @@ export function showFlashAlert(_ref) {
|
|
|
233
211
|
screenReaderOnly: srOnly
|
|
234
212
|
}), parent);
|
|
235
213
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
214
|
+
const div = document.createElement('div');
|
|
215
|
+
// div.setAttribute('class', styles.flashMessage)
|
|
239
216
|
div.setAttribute('style', 'max-width:50em;margin:1rem auto;');
|
|
240
217
|
div.setAttribute('class', 'flashalert-message');
|
|
241
218
|
getAlertContainer().appendChild(div);
|
|
@@ -247,8 +224,7 @@ export function destroyContainer() {
|
|
|
247
224
|
if (container) container.remove();
|
|
248
225
|
if (liveRegion) liveRegion.remove();
|
|
249
226
|
}
|
|
250
|
-
export function showFlashError() {
|
|
251
|
-
let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : formatMessage('An error occurred making a network request');
|
|
227
|
+
export function showFlashError(message = formatMessage('An error occurred making a network request')) {
|
|
252
228
|
return err => showFlashAlert({
|
|
253
229
|
message,
|
|
254
230
|
err,
|
package/es/common/browser.js
CHANGED
|
@@ -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
|
let isIE = false;
|
|
19
|
-
let isEdge = false;
|
|
20
|
-
// window.tinymce is available
|
|
20
|
+
let isEdge = false;
|
|
21
21
|
|
|
22
|
+
// expected to be called as setFromTinymce(window.tinymce) at some point where
|
|
23
|
+
// window.tinymce is available
|
|
22
24
|
export function setFromTinymce(tinymce) {
|
|
23
25
|
set(tinymce.Env);
|
|
24
26
|
}
|