@instructure/canvas-rce 5.14.1 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
import ReactDOM from 'react-dom';
|
|
20
21
|
import bridge from '../../../../../bridge';
|
|
@@ -29,28 +30,22 @@ export default class LinkOptionsTrayController {
|
|
|
29
30
|
this._shouldOpen = false;
|
|
30
31
|
this._renderId = 0;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
33
|
get $container() {
|
|
34
34
|
let $container = document.getElementById(CONTAINER_ID);
|
|
35
|
-
|
|
36
35
|
if ($container == null) {
|
|
37
36
|
$container = document.createElement('div');
|
|
38
37
|
$container.id = CONTAINER_ID;
|
|
39
38
|
document.body.appendChild($container);
|
|
40
39
|
}
|
|
41
|
-
|
|
42
40
|
return $container;
|
|
43
41
|
}
|
|
44
|
-
|
|
45
42
|
get isOpen() {
|
|
46
43
|
return this._isOpen;
|
|
47
44
|
}
|
|
48
|
-
|
|
49
45
|
showTrayForEditor(editor) {
|
|
50
46
|
this._editor = editor;
|
|
51
47
|
this._shouldOpen = true;
|
|
52
48
|
const selectedElm = editor.selection.getNode();
|
|
53
|
-
|
|
54
49
|
if (editor.selection.isCollapsed() && selectedElm.nodeName === 'A') {
|
|
55
50
|
// expand the selection to include the whole <a>
|
|
56
51
|
editor.selection.select(editor.selection.getNode());
|
|
@@ -58,40 +53,31 @@ export default class LinkOptionsTrayController {
|
|
|
58
53
|
const anchorElm = getAnchorElement(editor, selectedElm);
|
|
59
54
|
editor.selection.select(anchorElm);
|
|
60
55
|
}
|
|
61
|
-
|
|
62
56
|
if (bridge.focusedEditor) {
|
|
63
57
|
// Dismiss any content trays that may already be open
|
|
64
58
|
bridge.hideTrays();
|
|
65
59
|
}
|
|
66
|
-
|
|
67
60
|
this._renderTray();
|
|
68
61
|
}
|
|
69
|
-
|
|
70
62
|
hideTrayForEditor(editor) {
|
|
71
63
|
if (this._editor === editor) {
|
|
72
64
|
this._dismissTray();
|
|
73
65
|
}
|
|
74
66
|
}
|
|
75
|
-
|
|
76
67
|
_applyLinkOptions(linkOptions) {
|
|
77
68
|
this._dismissTray();
|
|
78
|
-
|
|
79
|
-
|
|
69
|
+
bridge.insertLink({
|
|
70
|
+
...linkOptions,
|
|
80
71
|
userText: true
|
|
81
72
|
});
|
|
82
73
|
}
|
|
83
|
-
|
|
84
74
|
_dismissTray() {
|
|
85
75
|
this._shouldOpen = false;
|
|
86
|
-
|
|
87
76
|
this._renderTray();
|
|
88
|
-
|
|
89
77
|
this._editor = null;
|
|
90
78
|
}
|
|
91
|
-
|
|
92
79
|
_renderTray() {
|
|
93
80
|
let content = {};
|
|
94
|
-
|
|
95
81
|
if (this._shouldOpen) {
|
|
96
82
|
content = getLinkContentFromEditor(this._editor);
|
|
97
83
|
/*
|
|
@@ -99,10 +85,8 @@ export default class LinkOptionsTrayController {
|
|
|
99
85
|
* (clearing the internal state) so that the currently-selected content
|
|
100
86
|
* can be used for initial options.
|
|
101
87
|
*/
|
|
102
|
-
|
|
103
88
|
this._renderId++;
|
|
104
89
|
}
|
|
105
|
-
|
|
106
90
|
const element = /*#__PURE__*/React.createElement(LinkOptionsTray, {
|
|
107
91
|
content: content,
|
|
108
92
|
key: this._renderId,
|
|
@@ -121,5 +105,4 @@ export default class LinkOptionsTrayController {
|
|
|
121
105
|
});
|
|
122
106
|
ReactDOM.render(element, this.$container);
|
|
123
107
|
}
|
|
124
|
-
|
|
125
108
|
}
|
|
@@ -31,7 +31,7 @@ import validateURL from '../../validateURL';
|
|
|
31
31
|
import formatMessage from '../../../../../format-message';
|
|
32
32
|
import { DISPLAY_AS_LINK, DISPLAY_AS_EMBED, DISPLAY_AS_EMBED_DISABLED, DISPLAY_AS_DOWNLOAD_LINK } from '../../../shared/ContentSelection';
|
|
33
33
|
import { getTrayHeight } from '../../../shared/trayUtils';
|
|
34
|
-
import {
|
|
34
|
+
import { instuiPopupMountNodeFn } from '../../../../../util/fullscreenHelpers';
|
|
35
35
|
export default function LinkOptionsTray(props) {
|
|
36
36
|
const content = props.content || {};
|
|
37
37
|
const textToLink = content.text || '';
|
|
@@ -53,7 +53,6 @@ export default function LinkOptionsTray(props) {
|
|
|
53
53
|
setErr(ex.message);
|
|
54
54
|
}
|
|
55
55
|
}, [url]);
|
|
56
|
-
|
|
57
56
|
function handleSave(event) {
|
|
58
57
|
event.preventDefault();
|
|
59
58
|
const embedType = content.isPreviewable ? 'scribd' : null;
|
|
@@ -68,11 +67,9 @@ export default function LinkOptionsTray(props) {
|
|
|
68
67
|
href: url,
|
|
69
68
|
id: content.id || null,
|
|
70
69
|
forceRename: true // A change to "text" should always update the link's text
|
|
71
|
-
|
|
72
70
|
};
|
|
73
71
|
props.onSave(linkAttrs);
|
|
74
72
|
}
|
|
75
|
-
|
|
76
73
|
function initialPreviewSelection(previewContent) {
|
|
77
74
|
if (previewContent.displayAs === DISPLAY_AS_DOWNLOAD_LINK) {
|
|
78
75
|
return 'disable';
|
|
@@ -82,33 +79,26 @@ export default function LinkOptionsTray(props) {
|
|
|
82
79
|
return 'overlay';
|
|
83
80
|
}
|
|
84
81
|
}
|
|
85
|
-
|
|
86
82
|
function handleTextChange(event) {
|
|
87
83
|
setText(event.target.value);
|
|
88
84
|
}
|
|
89
|
-
|
|
90
85
|
function handleLinkChange(event) {
|
|
91
86
|
setUrl(event.target.value);
|
|
92
87
|
}
|
|
93
|
-
|
|
94
88
|
function handlePreviewChange(event) {
|
|
95
89
|
setAutoOpenPreview(event.target.checked);
|
|
96
90
|
}
|
|
97
|
-
|
|
98
91
|
function handlePreviewOptionChange(_event, value) {
|
|
99
92
|
setDisableInlinePreview(value === 'overlay' || value === 'disable');
|
|
100
93
|
setDisplayOptionSelection(value);
|
|
101
94
|
}
|
|
102
|
-
|
|
103
95
|
function renderDisplayOptions() {
|
|
104
96
|
return /*#__PURE__*/React.createElement(FormFieldGroup, {
|
|
105
97
|
description: formatMessage('Display Options'),
|
|
106
98
|
layout: "stacked",
|
|
107
99
|
rowSpacing: "small"
|
|
108
100
|
}, /*#__PURE__*/React.createElement(RadioInputGroup, {
|
|
109
|
-
description: " "
|
|
110
|
-
/* the FormFieldGroup is providing the label */
|
|
111
|
-
,
|
|
101
|
+
description: " " /* the FormFieldGroup is providing the label */,
|
|
112
102
|
name: "preview_option",
|
|
113
103
|
onChange: handlePreviewOptionChange,
|
|
114
104
|
value: displayOptionSelection
|
|
@@ -134,12 +124,11 @@ export default function LinkOptionsTray(props) {
|
|
|
134
124
|
checked: autoOpenPreview
|
|
135
125
|
})));
|
|
136
126
|
}
|
|
137
|
-
|
|
138
127
|
return /*#__PURE__*/React.createElement(Tray, {
|
|
139
128
|
"data-testid": "RCELinkOptionsTray",
|
|
140
129
|
"data-mce-component": true,
|
|
141
130
|
label: formatMessage('Link Options'),
|
|
142
|
-
mountNode:
|
|
131
|
+
mountNode: instuiPopupMountNodeFn,
|
|
143
132
|
onDismiss: props.onRequestClose,
|
|
144
133
|
onEntered: props.onEntered,
|
|
145
134
|
onExited: props.onExited,
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React, { Component, useRef } from 'react';
|
|
19
20
|
import { bool, func, string } from 'prop-types';
|
|
20
21
|
import { linkShape, linksShape, linkType } from './propTypes';
|
|
@@ -27,10 +28,10 @@ import { LoadMoreButton, LoadingIndicator, LoadingStatus, useIncrementalLoading
|
|
|
27
28
|
import Link from './Link';
|
|
28
29
|
import RCEGlobals from '../../../RCEGlobals';
|
|
29
30
|
import { NoResults } from './NoResults';
|
|
31
|
+
|
|
30
32
|
/*
|
|
31
33
|
* This is needed only as long as `LinkSet` is a class component.
|
|
32
34
|
*/
|
|
33
|
-
|
|
34
35
|
function IncrementalLoader(props) {
|
|
35
36
|
const {
|
|
36
37
|
children,
|
|
@@ -57,17 +58,14 @@ function IncrementalLoader(props) {
|
|
|
57
58
|
},
|
|
58
59
|
// not actually used in the query, but a required param
|
|
59
60
|
searchString,
|
|
60
|
-
|
|
61
61
|
onLoadInitial() {
|
|
62
62
|
if (fetchInitialPage) {
|
|
63
63
|
fetchInitialPage();
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
|
-
|
|
67
66
|
onLoadMore() {
|
|
68
67
|
fetchNextPage();
|
|
69
68
|
},
|
|
70
|
-
|
|
71
69
|
records: links
|
|
72
70
|
});
|
|
73
71
|
return children({
|
|
@@ -75,78 +73,62 @@ function IncrementalLoader(props) {
|
|
|
75
73
|
lastItemRef
|
|
76
74
|
});
|
|
77
75
|
}
|
|
78
|
-
|
|
79
76
|
class LinkSet extends Component {
|
|
80
77
|
constructor(props) {
|
|
81
78
|
super(props);
|
|
82
79
|
this.describedByID = `rce-LinkSet-describedBy-${uid()}`;
|
|
83
80
|
this.loadMoreButtonRef = null;
|
|
84
81
|
}
|
|
85
|
-
|
|
86
82
|
hasLinks(props) {
|
|
87
83
|
return props.collection.links.length > 0;
|
|
88
84
|
}
|
|
89
|
-
|
|
90
85
|
isEmpty(props) {
|
|
91
86
|
return !this.hasLinks(props) && !props.collection.hasMore && !props.collection.isLoading;
|
|
92
87
|
}
|
|
93
|
-
|
|
94
|
-
compareURLs() {
|
|
95
|
-
let url1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
96
|
-
let url2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
88
|
+
compareURLs(url1 = '', url2 = '') {
|
|
97
89
|
if (url1 === '' || url2 === '') return false;
|
|
98
90
|
return url1.split('?')[0] === url2.split('?')[0];
|
|
99
91
|
}
|
|
100
|
-
|
|
101
92
|
renderLinks(lastItemRef) {
|
|
102
93
|
function refFor(index, array) {
|
|
103
94
|
if (!lastItemRef || index !== array.length - 1) {
|
|
104
95
|
return null;
|
|
105
|
-
}
|
|
106
|
-
|
|
96
|
+
}
|
|
107
97
|
|
|
98
|
+
// Return a compatible callback ref for InstUI
|
|
108
99
|
return ref => {
|
|
109
100
|
lastItemRef.current = ref;
|
|
110
101
|
};
|
|
111
102
|
}
|
|
112
|
-
|
|
113
103
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScreenReaderContent, {
|
|
114
104
|
id: this.describedByID
|
|
115
105
|
}, formatMessage('Click to insert a link into the editor.')), /*#__PURE__*/React.createElement(List, {
|
|
116
106
|
isUnstyled: true,
|
|
117
107
|
as: "ul",
|
|
118
108
|
margin: "0"
|
|
119
|
-
}, this.props.collection.links.map((link, index, array) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
onEditClick: this.props.onEditClick,
|
|
134
|
-
isSelected: this.compareURLs((_this$props$selectedL = this.props.selectedLink) === null || _this$props$selectedL === void 0 ? void 0 : _this$props$selectedL.href, link.href)
|
|
135
|
-
}));
|
|
136
|
-
})));
|
|
109
|
+
}, this.props.collection.links.map((link, index, array) => /*#__PURE__*/React.createElement(List.Item, {
|
|
110
|
+
key: link.href,
|
|
111
|
+
spacing: "none",
|
|
112
|
+
padding: "0"
|
|
113
|
+
}, /*#__PURE__*/React.createElement(Link, {
|
|
114
|
+
link: link,
|
|
115
|
+
type: this.props.type,
|
|
116
|
+
onClick: this.props.onLinkClick,
|
|
117
|
+
describedByID: this.describedByID,
|
|
118
|
+
elementRef: refFor(index, array),
|
|
119
|
+
editing: this.props.editing,
|
|
120
|
+
onEditClick: this.props.onEditClick,
|
|
121
|
+
isSelected: this.compareURLs(this.props.selectedLink?.href, link.href)
|
|
122
|
+
})))));
|
|
137
123
|
}
|
|
138
|
-
|
|
139
124
|
renderEmptyIndicator() {
|
|
140
|
-
var _this$props$searchStr;
|
|
141
|
-
|
|
142
125
|
return /*#__PURE__*/React.createElement(NoResults, {
|
|
143
126
|
contextType: this.props.contextType,
|
|
144
127
|
contextId: this.props.contextId,
|
|
145
128
|
collectionType: this.props.type,
|
|
146
|
-
isSearchResult:
|
|
129
|
+
isSearchResult: this.props.searchString?.length >= 3
|
|
147
130
|
});
|
|
148
131
|
}
|
|
149
|
-
|
|
150
132
|
renderLoadingError() {
|
|
151
133
|
if (this.props.collection.lastError) {
|
|
152
134
|
return /*#__PURE__*/React.createElement("span", {
|
|
@@ -154,30 +136,23 @@ class LinkSet extends Component {
|
|
|
154
136
|
role: "alert"
|
|
155
137
|
}, formatMessage('Loading failed...'));
|
|
156
138
|
}
|
|
157
|
-
|
|
158
139
|
return null;
|
|
159
140
|
}
|
|
160
|
-
|
|
161
141
|
render() {
|
|
162
|
-
return /*#__PURE__*/React.createElement(IncrementalLoader, this.props,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
loader: loader
|
|
175
|
-
}));
|
|
176
|
-
});
|
|
142
|
+
return /*#__PURE__*/React.createElement(IncrementalLoader, this.props, ({
|
|
143
|
+
loader,
|
|
144
|
+
lastItemRef
|
|
145
|
+
}) => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
146
|
+
"data-testid": "instructure_links-LinkSet"
|
|
147
|
+
}, this.hasLinks(this.props) && this.renderLinks(lastItemRef), this.renderLoadingError(), loader.isLoading && /*#__PURE__*/React.createElement(LoadingIndicator, {
|
|
148
|
+
loader: loader
|
|
149
|
+
}), !loader.isLoading && loader.hasMore && /*#__PURE__*/React.createElement(LoadMoreButton, {
|
|
150
|
+
loader: loader
|
|
151
|
+
}), this.isEmpty(this.props) && !this.props.suppressRenderEmpty && this.renderEmptyIndicator()), /*#__PURE__*/React.createElement(LoadingStatus, {
|
|
152
|
+
loader: loader
|
|
153
|
+
})));
|
|
177
154
|
}
|
|
178
|
-
|
|
179
155
|
}
|
|
180
|
-
|
|
181
156
|
LinkSet.propTypes = {
|
|
182
157
|
type: linkType.isRequired,
|
|
183
158
|
collection: linksShape.isRequired,
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
import { bool, func, string } from 'prop-types';
|
|
20
21
|
import formatMessage from '../../../../format-message';
|
|
@@ -22,46 +23,58 @@ import { collectionsShape, linkShape } from './propTypes';
|
|
|
22
23
|
import NavigationPanel from './NavigationPanel';
|
|
23
24
|
import CollectionPanel from './CollectionPanel';
|
|
24
25
|
import { View } from '@instructure/ui-view';
|
|
25
|
-
import { pickProps } from '@instructure/ui-react-utils';
|
|
26
|
-
|
|
27
26
|
function LinksPanel(props) {
|
|
28
27
|
const isCourse = props.contextType === 'course';
|
|
29
28
|
const isGroup = props.contextType === 'group';
|
|
30
|
-
const
|
|
29
|
+
const commonCollectionProps = {
|
|
30
|
+
collections: props.collections,
|
|
31
|
+
contextId: props.contextId,
|
|
32
|
+
contextType: props.contextType,
|
|
33
|
+
fetchInitialPage: props.fetchInitialPage,
|
|
34
|
+
fetchNextPage: props.fetchNextPage,
|
|
35
|
+
newPageLinkExpanded: props.newPageLinkExpanded,
|
|
36
|
+
onChangeAccordion: props.onChangeAccordion,
|
|
37
|
+
onLinkClick: props.onLinkClick,
|
|
38
|
+
renderNewPageLink: props.renderNewPageLink,
|
|
39
|
+
searchString: props.searchString,
|
|
40
|
+
selectedAccordionIndex: props.selectedAccordionIndex,
|
|
41
|
+
suppressRenderEmpty: props.suppressRenderEmpty,
|
|
42
|
+
toggleNewPageForm: props.toggleNewPageForm
|
|
43
|
+
};
|
|
31
44
|
return /*#__PURE__*/React.createElement(View, {
|
|
32
45
|
as: "div",
|
|
33
46
|
"data-testid": "instructure_links-LinksPanel"
|
|
34
|
-
}, (isCourse || isGroup) && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({},
|
|
47
|
+
}, (isCourse || isGroup) && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({}, commonCollectionProps, {
|
|
35
48
|
editing: props.editing,
|
|
36
49
|
onEditClick: props.onEditClick,
|
|
37
50
|
selectedLink: props.selectedLink,
|
|
38
51
|
collection: "wikiPages",
|
|
39
52
|
label: formatMessage('Pages')
|
|
40
|
-
})), isCourse && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({},
|
|
53
|
+
})), isCourse && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({}, commonCollectionProps, {
|
|
41
54
|
editing: props.editing,
|
|
42
55
|
onEditClick: props.onEditClick,
|
|
43
56
|
selectedLink: props.selectedLink,
|
|
44
57
|
collection: "assignments",
|
|
45
58
|
label: formatMessage('Assignments')
|
|
46
|
-
})), isCourse && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({},
|
|
59
|
+
})), isCourse && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({}, commonCollectionProps, {
|
|
47
60
|
editing: props.editing,
|
|
48
61
|
onEditClick: props.onEditClick,
|
|
49
62
|
selectedLink: props.selectedLink,
|
|
50
63
|
collection: "quizzes",
|
|
51
64
|
label: formatMessage('Quizzes')
|
|
52
|
-
})), (isCourse || isGroup) && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({},
|
|
65
|
+
})), (isCourse || isGroup) && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({}, commonCollectionProps, {
|
|
53
66
|
editing: props.editing,
|
|
54
67
|
onEditClick: props.onEditClick,
|
|
55
68
|
selectedLink: props.selectedLink,
|
|
56
69
|
collection: "announcements",
|
|
57
70
|
label: formatMessage('Announcements')
|
|
58
|
-
})), (isCourse || isGroup) && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({},
|
|
71
|
+
})), (isCourse || isGroup) && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({}, commonCollectionProps, {
|
|
59
72
|
editing: props.editing,
|
|
60
73
|
onEditClick: props.onEditClick,
|
|
61
74
|
selectedLink: props.selectedLink,
|
|
62
75
|
collection: "discussions",
|
|
63
76
|
label: formatMessage('Discussions')
|
|
64
|
-
})), isCourse && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({},
|
|
77
|
+
})), isCourse && /*#__PURE__*/React.createElement(CollectionPanel, Object.assign({}, commonCollectionProps, {
|
|
65
78
|
editing: props.editing,
|
|
66
79
|
onEditClick: props.onEditClick,
|
|
67
80
|
selectedLink: props.selectedLink,
|
|
@@ -77,7 +90,6 @@ function LinksPanel(props) {
|
|
|
77
90
|
onEditClick: props.onEditClick
|
|
78
91
|
}));
|
|
79
92
|
}
|
|
80
|
-
|
|
81
93
|
LinksPanel.propTypes = {
|
|
82
94
|
selectedAccordionIndex: string,
|
|
83
95
|
onChangeAccordion: func,
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import { bool, func, string } from 'prop-types';
|
|
19
20
|
import React from 'react';
|
|
20
21
|
import LinkSet from './LinkSet';
|
|
21
22
|
import formatMessage from '../../../../format-message';
|
|
22
23
|
import AccordionSection from './AccordionSection';
|
|
23
|
-
|
|
24
24
|
function typeCollection(contextId, contextType) {
|
|
25
25
|
switch (contextType) {
|
|
26
26
|
case 'course':
|
|
@@ -52,21 +52,23 @@ function typeCollection(contextId, contextType) {
|
|
|
52
52
|
}, {
|
|
53
53
|
href: `/courses/${contextId}/assignments/syllabus`,
|
|
54
54
|
title: formatMessage('Syllabus')
|
|
55
|
-
},
|
|
55
|
+
},
|
|
56
|
+
// outcomes
|
|
56
57
|
{
|
|
57
58
|
href: `/courses/${contextId}/quizzes`,
|
|
58
59
|
title: formatMessage('Quizzes')
|
|
59
60
|
}, {
|
|
60
61
|
href: `/courses/${contextId}/modules`,
|
|
61
62
|
title: formatMessage('Modules')
|
|
62
|
-
},
|
|
63
|
+
},
|
|
64
|
+
// conferences
|
|
63
65
|
{
|
|
64
66
|
href: `/courses/${contextId}/collaborations`,
|
|
65
67
|
title: formatMessage('Collaborations')
|
|
66
|
-
}
|
|
68
|
+
}
|
|
69
|
+
// settings
|
|
67
70
|
]
|
|
68
71
|
};
|
|
69
|
-
|
|
70
72
|
case 'group':
|
|
71
73
|
return {
|
|
72
74
|
links: [{
|
|
@@ -89,7 +91,6 @@ function typeCollection(contextId, contextType) {
|
|
|
89
91
|
title: formatMessage('People')
|
|
90
92
|
}]
|
|
91
93
|
};
|
|
92
|
-
|
|
93
94
|
default:
|
|
94
95
|
// user, TODO
|
|
95
96
|
return {
|
|
@@ -100,11 +101,9 @@ function typeCollection(contextId, contextType) {
|
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
|
|
104
104
|
export default function NavigationPanel(props) {
|
|
105
105
|
const collection = typeCollection(props.contextId, props.contextType);
|
|
106
106
|
let navigationSummary = '';
|
|
107
|
-
|
|
108
107
|
if (props.contextType === 'course') {
|
|
109
108
|
navigationSummary = formatMessage('Course Navigation');
|
|
110
109
|
} else if (props.contextType === 'group') {
|
|
@@ -112,7 +111,6 @@ export default function NavigationPanel(props) {
|
|
|
112
111
|
} else {
|
|
113
112
|
return null;
|
|
114
113
|
}
|
|
115
|
-
|
|
116
114
|
return /*#__PURE__*/React.createElement("div", {
|
|
117
115
|
"data-testid": "instructure_links-NavigationPanel"
|
|
118
116
|
}, /*#__PURE__*/React.createElement(AccordionSection, {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2023 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,6 +16,7 @@ import _pt from "prop-types";
|
|
|
17
16
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
17
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
18
|
*/
|
|
19
|
+
|
|
20
20
|
import React from 'react';
|
|
21
21
|
import { View } from '@instructure/ui-view';
|
|
22
22
|
import { Flex } from '@instructure/ui-flex';
|
|
@@ -26,7 +26,6 @@ import formatMessage from '../../../../format-message';
|
|
|
26
26
|
import { getIcon } from '../../shared/linkUtils';
|
|
27
27
|
export function buildUrl(contextType, contextId, collectionType) {
|
|
28
28
|
var _typeMap$collectionTy;
|
|
29
|
-
|
|
30
29
|
const typeMap = {
|
|
31
30
|
wikiPages: 'pages',
|
|
32
31
|
discussions: 'discussion_topics'
|
|
@@ -37,30 +36,24 @@ export function getMessage(collectionType, isSearchResult) {
|
|
|
37
36
|
switch (collectionType) {
|
|
38
37
|
case 'wikiPages':
|
|
39
38
|
return isSearchResult ? formatMessage('No pages found.') : formatMessage('No pages created yet.');
|
|
40
|
-
|
|
41
39
|
case 'assignments':
|
|
42
40
|
return isSearchResult ? formatMessage('No assignments found.') : formatMessage('No assignments created yet.');
|
|
43
|
-
|
|
44
41
|
case 'quizzes':
|
|
45
42
|
return isSearchResult ? formatMessage('No quizzes found.') : formatMessage('No quizzes created yet.');
|
|
46
|
-
|
|
47
43
|
case 'announcements':
|
|
48
44
|
return isSearchResult ? formatMessage('No announcements found.') : formatMessage('No announcements created yet.');
|
|
49
|
-
|
|
50
45
|
case 'discussions':
|
|
51
46
|
return isSearchResult ? formatMessage('No discussions found.') : formatMessage('No discussions created yet.');
|
|
52
|
-
|
|
53
47
|
case 'modules':
|
|
54
48
|
return isSearchResult ? formatMessage('No modules found.') : formatMessage('No modules created yet.');
|
|
55
49
|
}
|
|
56
50
|
}
|
|
57
|
-
export const NoResults =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
} = _ref;
|
|
51
|
+
export const NoResults = ({
|
|
52
|
+
contextType,
|
|
53
|
+
contextId,
|
|
54
|
+
collectionType,
|
|
55
|
+
isSearchResult
|
|
56
|
+
}) => {
|
|
64
57
|
const Icon = getIcon(collectionType);
|
|
65
58
|
return /*#__PURE__*/React.createElement(View, {
|
|
66
59
|
padding: "xx-large"
|