@instructure/canvas-rce 5.14.0 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/DEVELOPMENT.md +1 -1
- 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/__tests__/sidebar/reducers/all_files.test.js +28 -0
- package/babel.config.js +3 -1
- package/build.sh +7 -7
- package/es/bridge/Bridge.js +8 -56
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +12 -59
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +7 -28
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +104 -59
- package/es/common/incremental-loading/LoadMoreButton.js +1 -0
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +1 -2
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +15 -8
- 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 +17 -28
- package/es/enhance-user-content/enhance_user_content.js +28 -60
- package/es/enhance-user-content/external_links.js +5 -8
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +25 -38
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +35 -82
- package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
- package/es/format-message.js +3 -4
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.js +3 -1
- package/es/rce/AlertMessageArea.js +1 -1
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +1 -0
- package/es/rce/RCE.js +12 -11
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +27 -10
- package/es/rce/RCEWrapper.js +167 -386
- package/es/rce/RCEWrapperProps.js +8 -3
- package/es/rce/RceHtmlEditor.js +5 -8
- package/es/rce/ResizeHandle.js +3 -8
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +0 -6
- package/es/rce/StatusBar.js +8 -37
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +35 -57
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +7 -12
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +22 -10
- package/es/rce/indicatorRegion.js +6 -5
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +3 -1
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -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 +22 -15
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
- 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 +3 -18
- 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 +12 -29
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
- 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 +1 -1
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -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 +2 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
- 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 +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
- 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 +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
- 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 +1 -3
- 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 +69 -83
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
- 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 +1 -1
- 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 +6 -24
- package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
- package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
- 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 +13 -18
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +7 -19
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
- package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
- package/es/rce/plugins/instructure_links/plugin.js +17 -40
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
- 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 +27 -29
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
- 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 +2 -10
- 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 +19 -4
- 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 +130 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
- 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 +2 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
- 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 +18 -10
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
- package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
- 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 +2 -5
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
- package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +5 -14
- package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
- package/es/rce/plugins/shared/ContentSelection.js +17 -58
- package/es/rce/plugins/shared/DimensionUtils.js +1 -8
- 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 +1 -3
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +3 -3
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
- package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
- package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
- 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 +1 -17
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
- package/es/rce/plugins/shared/LinkDisplay.js +1 -2
- package/es/rce/plugins/shared/PreviewIcon.js +1 -6
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
- package/es/rce/plugins/shared/StoreContext.js +1 -2
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
- package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
- package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
- package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
- package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
- 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 +6 -9
- package/es/rce/plugins/shared/compressionUtils.js +1 -8
- 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 +7 -10
- 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 +32 -42
- 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 +1 -0
- package/es/rce/plugins/shared/trayUtils.js +4 -3
- package/es/rce/plugins/shared/useDataUrl.js +9 -9
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
- 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 +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
- 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 +1 -5
- 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 +1 -4
- 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 +1 -6
- 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 +1 -26
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +9 -8
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +13 -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 +8 -10
- 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 +61 -116
- package/es/rcs/buildError.js +5 -17
- package/es/rcs/fake.js +4 -13
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +9 -6
- package/es/sidebar/actions/files.js +3 -6
- package/es/sidebar/actions/filter.js +1 -0
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +12 -11
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +12 -10
- package/es/sidebar/actions/session.js +1 -3
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +14 -39
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +3 -1
- package/es/sidebar/dragHtml.js +5 -3
- package/es/sidebar/reducers/all_files.js +4 -3
- package/es/sidebar/reducers/collection.js +12 -13
- package/es/sidebar/reducers/collections.js +5 -5
- package/es/sidebar/reducers/documents.js +6 -13
- package/es/sidebar/reducers/files.js +3 -3
- package/es/sidebar/reducers/filter.js +1 -8
- package/es/sidebar/reducers/flickr.js +9 -9
- package/es/sidebar/reducers/folder.js +15 -15
- package/es/sidebar/reducers/folders.js +3 -3
- package/es/sidebar/reducers/images.js +3 -13
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +6 -13
- package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
- package/es/sidebar/reducers/noop.js +1 -0
- package/es/sidebar/reducers/rootFolderId.js +1 -2
- package/es/sidebar/reducers/session.js +3 -3
- package/es/sidebar/reducers/ui.js +3 -16
- package/es/sidebar/reducers/upload.js +8 -40
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +13 -24
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +67 -9
- package/es/translations/locales/ca.js +67 -9
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +67 -9
- package/es/translations/locales/da-x-k12.js +67 -9
- package/es/translations/locales/da.js +67 -9
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +67 -9
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +67 -9
- package/es/translations/locales/en-GB-x-ukhe.js +67 -9
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +67 -9
- package/es/translations/locales/en_CA.js +67 -9
- package/es/translations/locales/en_CY.js +67 -9
- package/es/translations/locales/en_GB.js +67 -9
- 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 +67 -9
- package/es/translations/locales/es_ES.js +67 -9
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +67 -9
- package/es/translations/locales/fr.js +67 -9
- package/es/translations/locales/fr_CA.js +68 -10
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +67 -9
- package/es/translations/locales/ht.js +67 -9
- 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 +67 -9
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +67 -9
- package/es/translations/locales/it.js +67 -9
- package/es/translations/locales/ja.js +67 -9
- 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 +67 -9
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +67 -9
- package/es/translations/locales/nb-x-k12.js +67 -9
- package/es/translations/locales/nb.js +67 -9
- package/es/translations/locales/nl.js +67 -9
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +67 -9
- package/es/translations/locales/pt.js +67 -9
- package/es/translations/locales/pt_BR.js +67 -9
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +67 -9
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +67 -9
- package/es/translations/locales/sv-x-k12.js +67 -9
- package/es/translations/locales/sv.js +67 -9
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +67 -9
- 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 +67 -9
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +67 -9
- package/es/translations/locales/zh-Hant.js +67 -9
- package/es/translations/locales/zh.js +67 -9
- package/es/translations/locales/zh_HK.js +67 -9
- 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/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +1 -6
- package/es/util/fullscreenHelpers.js +4 -1
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +38 -39
- package/es/util/simpleCache.js +0 -3
- 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 +16 -25
- package/eslint.config.js +239 -0
- package/jest.config.js +1 -1
- package/package.json +77 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/publish_to_npm.sh +1 -1
- 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 +20 -15
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/common/components/FileTree/File.js +0 -64
- package/es/common/components/FileTree/Folder.js +0 -110
- package/es/common/components/FileTree/index.js +0 -84
- package/es/common/components/FileTree/styles.js +0 -72
- package/es/common/components/Loading.js +0 -83
|
@@ -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,11 +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
32
|
var _this;
|
|
33
|
-
|
|
34
33
|
super(_props2);
|
|
35
34
|
_this = this;
|
|
36
35
|
this.fetchSubFolders = _.memoize(id => {
|
|
@@ -41,28 +40,22 @@ class FileBrowser extends React.Component {
|
|
|
41
40
|
this.populateCollectionsList(result.folders);
|
|
42
41
|
}, error => {
|
|
43
42
|
this.props.onLoading(false);
|
|
44
|
-
/* eslint-disable no-console */
|
|
45
|
-
|
|
46
43
|
console.error('Error fetching data from API');
|
|
47
44
|
console.error(error);
|
|
48
45
|
});
|
|
49
46
|
});
|
|
50
|
-
|
|
51
47
|
this.populateCollectionsList = function (folderList) {
|
|
52
48
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
53
|
-
|
|
54
49
|
_this.setState((state, props) => {
|
|
55
50
|
const newCollections = _.cloneDeep(state.collections);
|
|
56
|
-
|
|
57
51
|
folderList.forEach(folder => {
|
|
58
|
-
const collection = _this.formatFolderInfo(folder, {
|
|
52
|
+
const collection = _this.formatFolderInfo(folder, {
|
|
53
|
+
...opts,
|
|
59
54
|
searchString: props.searchString
|
|
60
55
|
});
|
|
61
|
-
|
|
62
56
|
newCollections[collection.id] = collection;
|
|
63
57
|
const parentId = folder.parentId || 0;
|
|
64
58
|
const collectionCollections = newCollections[parentId].collections;
|
|
65
|
-
|
|
66
59
|
if (!collectionCollections.includes(collection.id)) {
|
|
67
60
|
collectionCollections.push(collection.id);
|
|
68
61
|
newCollections[parentId].collections = _this.orderedIdsFromList(newCollections, collectionCollections);
|
|
@@ -73,20 +66,16 @@ class FileBrowser extends React.Component {
|
|
|
73
66
|
};
|
|
74
67
|
});
|
|
75
68
|
};
|
|
76
|
-
|
|
77
69
|
this.populateItemsList = fileList => {
|
|
78
70
|
this.setState((state, _props) => {
|
|
79
71
|
const newItems = _.cloneDeep(state.items);
|
|
80
|
-
|
|
81
72
|
const newCollections = _.cloneDeep(state.collections);
|
|
82
|
-
|
|
83
73
|
fileList.forEach(file => {
|
|
84
74
|
if (this.contentTypeIsAllowed(file.type)) {
|
|
85
75
|
const item = this.formatFileInfo(file);
|
|
86
76
|
newItems[item.id] = item;
|
|
87
77
|
const folder_id = file.folderId;
|
|
88
78
|
const collectionItems = newCollections[folder_id].items;
|
|
89
|
-
|
|
90
79
|
if (!collectionItems.includes(item.id)) {
|
|
91
80
|
collectionItems.push(item.id);
|
|
92
81
|
newCollections[folder_id].items = this.orderedIdsFromList(newItems, collectionItems);
|
|
@@ -99,7 +88,6 @@ class FileBrowser extends React.Component {
|
|
|
99
88
|
};
|
|
100
89
|
});
|
|
101
90
|
};
|
|
102
|
-
|
|
103
91
|
this.onFolderToggle = folder => {
|
|
104
92
|
const folderId = folder.id;
|
|
105
93
|
this.setState((state, _props) => {
|
|
@@ -109,7 +97,6 @@ class FileBrowser extends React.Component {
|
|
|
109
97
|
const {
|
|
110
98
|
openFolders
|
|
111
99
|
} = state;
|
|
112
|
-
|
|
113
100
|
if (!collection.locked && openFolders.includes(folderId)) {
|
|
114
101
|
newFolders = newFolders.concat(openFolders.filter(id => id !== folderId));
|
|
115
102
|
} else if (!collection.locked) {
|
|
@@ -118,7 +105,6 @@ class FileBrowser extends React.Component {
|
|
|
118
105
|
newCollections = _.cloneDeep(state.collections);
|
|
119
106
|
newCollections[folderId] = collection;
|
|
120
107
|
}
|
|
121
|
-
|
|
122
108
|
return {
|
|
123
109
|
openFolders: newFolders,
|
|
124
110
|
uploadFolder: folderId,
|
|
@@ -127,24 +113,20 @@ class FileBrowser extends React.Component {
|
|
|
127
113
|
}, () => {
|
|
128
114
|
if (this.state.openFolders.includes(folderId)) {
|
|
129
115
|
const collection = this.state.collections[folderId];
|
|
130
|
-
|
|
131
116
|
if (!collection.locked) {
|
|
132
117
|
this.getFolderData(folderId);
|
|
133
118
|
}
|
|
134
119
|
}
|
|
135
120
|
});
|
|
136
121
|
};
|
|
137
|
-
|
|
138
122
|
this.onFileClick = file => {
|
|
139
123
|
const selectedItem = this.state.items[file.id];
|
|
140
124
|
if (selectedItem.isDisabled) return;
|
|
141
125
|
this.props.selectFile(selectedItem);
|
|
142
126
|
};
|
|
143
|
-
|
|
144
127
|
this.setFailureMessage = message => {
|
|
145
128
|
showFlashError(message)();
|
|
146
129
|
};
|
|
147
|
-
|
|
148
130
|
this.state = {
|
|
149
131
|
collections: {
|
|
150
132
|
0: {
|
|
@@ -159,11 +141,9 @@ class FileBrowser extends React.Component {
|
|
|
159
141
|
this.source = _props2.source;
|
|
160
142
|
this.updatePropsWithThumbnailOrIcon = this.updatePropsWithThumbnailOrIcon.bind(this);
|
|
161
143
|
}
|
|
162
|
-
|
|
163
144
|
componentDidMount() {
|
|
164
145
|
this.getRootFolders();
|
|
165
146
|
}
|
|
166
|
-
|
|
167
147
|
componentDidUpdate() {
|
|
168
148
|
this.state.openFolders.forEach(fid => {
|
|
169
149
|
if (this.props.searchString !== this.state.collections[fid].searchString) {
|
|
@@ -171,7 +151,6 @@ class FileBrowser extends React.Component {
|
|
|
171
151
|
}
|
|
172
152
|
});
|
|
173
153
|
}
|
|
174
|
-
|
|
175
154
|
getContextName(contextType) {
|
|
176
155
|
if (contextType === 'course') {
|
|
177
156
|
return formatMessage('Course files');
|
|
@@ -179,34 +158,28 @@ class FileBrowser extends React.Component {
|
|
|
179
158
|
return formatMessage('Group files');
|
|
180
159
|
}
|
|
181
160
|
}
|
|
182
|
-
|
|
183
161
|
getRootFolders() {
|
|
184
162
|
if (this.props.useContextAssets) {
|
|
185
163
|
this.getContextFolders();
|
|
186
164
|
}
|
|
187
|
-
|
|
188
165
|
this.getUserFolders();
|
|
189
166
|
}
|
|
190
|
-
|
|
191
167
|
getUserFolders() {
|
|
192
168
|
this.getRootFolderData('user', 'self', {
|
|
193
169
|
name: formatMessage('My files')
|
|
194
170
|
});
|
|
195
171
|
}
|
|
196
|
-
|
|
197
172
|
getContextFolders() {
|
|
198
173
|
const {
|
|
199
174
|
type,
|
|
200
175
|
id
|
|
201
176
|
} = this.props.context;
|
|
202
|
-
|
|
203
177
|
if (type && id) {
|
|
204
178
|
this.getRootFolderData(type, id, {
|
|
205
179
|
name: this.getContextName(type)
|
|
206
180
|
});
|
|
207
181
|
}
|
|
208
182
|
}
|
|
209
|
-
|
|
210
183
|
increaseLoadingCount() {
|
|
211
184
|
let {
|
|
212
185
|
loadingCount
|
|
@@ -216,7 +189,6 @@ class FileBrowser extends React.Component {
|
|
|
216
189
|
loadingCount
|
|
217
190
|
});
|
|
218
191
|
}
|
|
219
|
-
|
|
220
192
|
decreaseLoadingCount() {
|
|
221
193
|
let {
|
|
222
194
|
loadingCount
|
|
@@ -226,7 +198,6 @@ class FileBrowser extends React.Component {
|
|
|
226
198
|
loadingCount
|
|
227
199
|
});
|
|
228
200
|
}
|
|
229
|
-
|
|
230
201
|
getRootFolderData(context, contextId) {
|
|
231
202
|
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
232
203
|
this.increaseLoadingCount();
|
|
@@ -237,25 +208,23 @@ class FileBrowser extends React.Component {
|
|
|
237
208
|
this.populateRootFolder(result.folders[0], opts);
|
|
238
209
|
}).catch(error => {
|
|
239
210
|
this.decreaseLoadingCount();
|
|
240
|
-
|
|
241
211
|
if (error.response && error.response.status !== 401) {
|
|
242
212
|
this.setFailureMessage(formatMessage('Something went wrong'));
|
|
243
213
|
}
|
|
244
214
|
});
|
|
245
215
|
}
|
|
246
|
-
|
|
247
216
|
populateRootFolder(data) {
|
|
248
217
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
249
218
|
this.decreaseLoadingCount();
|
|
250
219
|
this.populateCollectionsList([data], opts);
|
|
251
220
|
this.getFolderData(data.id);
|
|
252
|
-
}
|
|
253
|
-
// of the given folder ID, handing pagination
|
|
221
|
+
}
|
|
254
222
|
|
|
223
|
+
// Memoized function to fetch all subfolders
|
|
224
|
+
// of the given folder ID, handing pagination
|
|
255
225
|
|
|
256
226
|
fetchFiles(id) {
|
|
257
227
|
var _this$state$collectio, _this$state$collectio2;
|
|
258
|
-
|
|
259
228
|
this.source.fetchBookmarkedData(this.source.fetchFilesForFolder.bind(this.source), {
|
|
260
229
|
searchString: this.props.searchString,
|
|
261
230
|
perPage: 50,
|
|
@@ -267,13 +236,14 @@ class FileBrowser extends React.Component {
|
|
|
267
236
|
console.error(error);
|
|
268
237
|
});
|
|
269
238
|
}
|
|
270
|
-
|
|
271
239
|
getFolderData(id) {
|
|
272
240
|
if (!this.state.collections[id].locked) {
|
|
273
241
|
this.setState((state, _props) => {
|
|
274
|
-
const collections = {
|
|
242
|
+
const collections = {
|
|
243
|
+
...state.collections
|
|
275
244
|
};
|
|
276
|
-
const collection = {
|
|
245
|
+
const collection = {
|
|
246
|
+
...collections[id]
|
|
277
247
|
};
|
|
278
248
|
collection.items = [];
|
|
279
249
|
collection.searchString = this.props.searchString;
|
|
@@ -287,20 +257,16 @@ class FileBrowser extends React.Component {
|
|
|
287
257
|
});
|
|
288
258
|
}
|
|
289
259
|
}
|
|
290
|
-
|
|
291
260
|
contentTypeIsAllowed(contentType) {
|
|
292
261
|
for (const pattern of this.props.contentTypes) {
|
|
293
262
|
if (minimatch(contentType, pattern)) {
|
|
294
263
|
return true;
|
|
295
264
|
}
|
|
296
265
|
}
|
|
297
|
-
|
|
298
266
|
return false;
|
|
299
267
|
}
|
|
300
|
-
|
|
301
268
|
formatFolderInfo(apiFolder) {
|
|
302
269
|
var _apiFolder$contextTyp;
|
|
303
|
-
|
|
304
270
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
305
271
|
const descriptor = apiFolder.lockedForUser ? formatMessage('Locked') : null;
|
|
306
272
|
const folder = {
|
|
@@ -322,14 +288,12 @@ class FileBrowser extends React.Component {
|
|
|
322
288
|
});
|
|
323
289
|
return folder;
|
|
324
290
|
}
|
|
325
|
-
|
|
326
291
|
updatePropsWithThumbnailOrIcon(props) {
|
|
327
292
|
const {
|
|
328
293
|
id
|
|
329
294
|
} = props;
|
|
330
295
|
const file = this.state.items[id].api;
|
|
331
296
|
let thumbnail, itemIcon;
|
|
332
|
-
|
|
333
297
|
if (isImage(file.type)) {
|
|
334
298
|
if (file.thumbnailUrl) {
|
|
335
299
|
thumbnail = file.thumbnailUrl;
|
|
@@ -339,18 +303,16 @@ class FileBrowser extends React.Component {
|
|
|
339
303
|
} else {
|
|
340
304
|
itemIcon = getIconFromType(file.type);
|
|
341
305
|
}
|
|
342
|
-
|
|
343
306
|
const containerRef = node => {
|
|
344
307
|
if (node && !node.title && props.name) node.title = props.name;
|
|
345
308
|
};
|
|
346
|
-
|
|
347
|
-
|
|
309
|
+
return {
|
|
310
|
+
...props,
|
|
348
311
|
thumbnail,
|
|
349
312
|
itemIcon,
|
|
350
313
|
containerRef
|
|
351
314
|
};
|
|
352
315
|
}
|
|
353
|
-
|
|
354
316
|
formatFileInfo(apiFile) {
|
|
355
317
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
356
318
|
const {
|
|
@@ -367,19 +329,15 @@ class FileBrowser extends React.Component {
|
|
|
367
329
|
alt: apiFile.name,
|
|
368
330
|
...opts
|
|
369
331
|
};
|
|
370
|
-
|
|
371
332
|
if (apiFile.iframeUrl) {
|
|
372
333
|
// it's a media_object
|
|
373
334
|
file.src = apiFile.iframeUrl;
|
|
374
335
|
}
|
|
375
|
-
|
|
376
336
|
if (isMediaPending) {
|
|
377
337
|
file.descriptor = formatMessage('Media file is processing. Please try again later.');
|
|
378
338
|
}
|
|
379
|
-
|
|
380
339
|
return file;
|
|
381
340
|
}
|
|
382
|
-
|
|
383
341
|
orderedIdsFromList(list, ids) {
|
|
384
342
|
try {
|
|
385
343
|
const sortedIds = ids.sort((a, b) => natcompare.strings(list[a].name, list[b].name));
|
|
@@ -389,7 +347,6 @@ class FileBrowser extends React.Component {
|
|
|
389
347
|
return ids;
|
|
390
348
|
}
|
|
391
349
|
}
|
|
392
|
-
|
|
393
350
|
findFolderForFile(file) {
|
|
394
351
|
const {
|
|
395
352
|
collections
|
|
@@ -400,7 +357,6 @@ class FileBrowser extends React.Component {
|
|
|
400
357
|
});
|
|
401
358
|
return collections[folderKey];
|
|
402
359
|
}
|
|
403
|
-
|
|
404
360
|
renderLoading() {
|
|
405
361
|
if (this.state.loadingCount > 0) {
|
|
406
362
|
return /*#__PURE__*/React.createElement(Spinner, {
|
|
@@ -411,7 +367,6 @@ class FileBrowser extends React.Component {
|
|
|
411
367
|
return null;
|
|
412
368
|
}
|
|
413
369
|
}
|
|
414
|
-
|
|
415
370
|
render() {
|
|
416
371
|
const element = /*#__PURE__*/React.createElement("div", {
|
|
417
372
|
className: "file-browser__container"
|
|
@@ -434,9 +389,7 @@ class FileBrowser extends React.Component {
|
|
|
434
389
|
}), this.renderLoading()));
|
|
435
390
|
return element;
|
|
436
391
|
}
|
|
437
|
-
|
|
438
392
|
}
|
|
439
|
-
|
|
440
393
|
FileBrowser.propTypes = {
|
|
441
394
|
allowUpload: PropTypes.bool,
|
|
442
395
|
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,
|
|
@@ -199,15 +185,12 @@ export function showFlashAlert(_ref) {
|
|
|
199
185
|
type = err ? 'error' : 'info',
|
|
200
186
|
srOnly = false
|
|
201
187
|
} = _ref;
|
|
202
|
-
|
|
203
188
|
function closeAlert(atNode) {
|
|
204
189
|
ReactDOM.unmountComponentAtNode(atNode);
|
|
205
190
|
atNode.remove();
|
|
206
191
|
}
|
|
207
|
-
|
|
208
192
|
function getAlertContainer() {
|
|
209
193
|
let alertContainer = document.getElementById(messageHolderId);
|
|
210
|
-
|
|
211
194
|
if (!alertContainer) {
|
|
212
195
|
alertContainer = document.createElement('div');
|
|
213
196
|
alertContainer.classList.add('clickthrough-container');
|
|
@@ -215,15 +198,12 @@ export function showFlashAlert(_ref) {
|
|
|
215
198
|
alertContainer.setAttribute('style', 'position: fixed; top: 0; left: 0; width: 100%; z-index: 100000;');
|
|
216
199
|
document.body.appendChild(alertContainer);
|
|
217
200
|
}
|
|
218
|
-
|
|
219
201
|
return alertContainer;
|
|
220
202
|
}
|
|
221
|
-
|
|
222
203
|
function renderAlert(parent) {
|
|
223
204
|
var _RCEGlobals$getConfig;
|
|
224
|
-
|
|
225
205
|
const configuredTimeout = (_RCEGlobals$getConfig = RCEGlobals.getConfig()) === null || _RCEGlobals$getConfig === void 0 ? void 0 : _RCEGlobals$getConfig.flashAlertTimeout;
|
|
226
|
-
ReactDOM.render(
|
|
206
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(FlashAlert, {
|
|
227
207
|
message: message,
|
|
228
208
|
timeout: Number.isNaN(parseInt(configuredTimeout, 10)) ? TIMEOUT : configuredTimeout,
|
|
229
209
|
error: err,
|
|
@@ -233,9 +213,8 @@ export function showFlashAlert(_ref) {
|
|
|
233
213
|
screenReaderOnly: srOnly
|
|
234
214
|
}), parent);
|
|
235
215
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
216
|
+
const div = document.createElement('div');
|
|
217
|
+
// div.setAttribute('class', styles.flashMessage)
|
|
239
218
|
div.setAttribute('style', 'max-width:50em;margin:1rem auto;');
|
|
240
219
|
div.setAttribute('class', 'flashalert-message');
|
|
241
220
|
getAlertContainer().appendChild(div);
|
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
|
}
|