@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
|
@@ -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, { useCallback, useEffect, useRef, useState } from 'react';
|
|
19
20
|
import { bool, element, func, instanceOf, oneOfType, shape, string } from 'prop-types';
|
|
20
21
|
import { Tray } from '@instructure/ui-tray';
|
|
@@ -33,6 +34,7 @@ import { getLinkContentFromEditor } from './ContentSelection';
|
|
|
33
34
|
import { LinkDisplay } from './LinkDisplay';
|
|
34
35
|
import { showFlashAlert } from '../../../common/FlashAlert';
|
|
35
36
|
import { FILTER_SETTINGS_BY_PLUGIN, DynamicPanel, isLoading } from './canvasContentUtils';
|
|
37
|
+
|
|
36
38
|
/**
|
|
37
39
|
* Returns the translated tray label
|
|
38
40
|
* @param {string} contentType - The type of content showing on tray
|
|
@@ -40,55 +42,48 @@ import { FILTER_SETTINGS_BY_PLUGIN, DynamicPanel, isLoading } from './canvasCont
|
|
|
40
42
|
* @param {string} contextType - The user's context
|
|
41
43
|
* @returns {string}
|
|
42
44
|
*/
|
|
43
|
-
|
|
44
45
|
function getTrayLabel(contentType, contentSubtype, contextType) {
|
|
45
46
|
if (contentType === 'links' && contextType === 'course') {
|
|
46
47
|
return formatMessage('Course Links');
|
|
47
48
|
} else if (contentType === 'links' && contextType === 'group') {
|
|
48
49
|
return formatMessage('Group Links');
|
|
49
50
|
}
|
|
50
|
-
|
|
51
51
|
switch (contentSubtype) {
|
|
52
52
|
case ICON_MAKER_ICONS:
|
|
53
53
|
return formatMessage('Icon Maker Icons');
|
|
54
|
-
|
|
55
54
|
case 'images':
|
|
56
55
|
if (contentType === 'course_files') return formatMessage('Course Images');
|
|
57
56
|
if (contentType === 'group_files') return formatMessage('Group Images');
|
|
58
57
|
return formatMessage('User Images');
|
|
59
|
-
|
|
60
58
|
case 'media':
|
|
61
59
|
if (contentType === 'course_files') return formatMessage('Course Media');
|
|
62
60
|
if (contentType === 'group_files') return formatMessage('Group Media');
|
|
63
61
|
return formatMessage('User Media');
|
|
64
|
-
|
|
65
62
|
case 'documents':
|
|
66
63
|
if (contentType === 'course_files') return formatMessage('Course Documents');
|
|
67
64
|
if (contentType === 'group_files') return formatMessage('Group Documents');
|
|
68
65
|
return formatMessage('User Documents');
|
|
69
|
-
|
|
70
66
|
default:
|
|
71
67
|
return formatMessage('Tray');
|
|
72
68
|
// Shouldn't ever get here
|
|
73
69
|
}
|
|
74
70
|
}
|
|
71
|
+
|
|
75
72
|
/**
|
|
76
73
|
* This component is used within various plugins to handle loading in content
|
|
77
74
|
* from Canvas. It is essentially the main component.
|
|
78
75
|
*/
|
|
79
|
-
|
|
80
|
-
|
|
81
76
|
export default function CanvasContentTray(props) {
|
|
82
77
|
// should the tray be rendered open?
|
|
83
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
78
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
79
|
+
// has the tray fully opened. we use this to defer rendering the content
|
|
84
80
|
// until the tray is open.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
const [hasOpened, setHasOpened] = useState(false);
|
|
82
|
+
// should we close the tray after the user clicks on something in it?
|
|
88
83
|
const [hidingTrayOnAction, setHidingTrayOnAction] = useState(true);
|
|
89
84
|
const trayRef = useRef(null);
|
|
90
85
|
const scrollingAreaRef = useRef(null);
|
|
91
|
-
const closeButtonRef =
|
|
86
|
+
const [closeButtonRef, setCloseButtonRef] = useState(null);
|
|
92
87
|
const [filterSettings, setFilterSettings] = useFilterSettings();
|
|
93
88
|
const [isEditTray, setIsEditTray] = useState(false);
|
|
94
89
|
const [link, setLink] = useState(null);
|
|
@@ -100,30 +95,34 @@ export default function CanvasContentTray(props) {
|
|
|
100
95
|
mountNode,
|
|
101
96
|
onTrayClosing,
|
|
102
97
|
storeProps
|
|
103
|
-
} = {
|
|
98
|
+
} = {
|
|
99
|
+
...props
|
|
104
100
|
};
|
|
105
101
|
const handleDismissTray = useCallback(() => {
|
|
106
102
|
// return focus to the RCE if focus was on this tray
|
|
107
103
|
if (trayRef.current && trayRef.current.contains(document.activeElement)) {
|
|
108
104
|
bridge.focusActiveEditor(false);
|
|
109
105
|
}
|
|
110
|
-
|
|
111
106
|
onTrayClosing && onTrayClosing(CanvasContentTray.globalOpenCount); // tell RCEWrapper we're closing if we're open
|
|
112
|
-
|
|
113
107
|
setIsOpen(false);
|
|
114
108
|
}, [bridge, onTrayClosing]);
|
|
109
|
+
|
|
110
|
+
// this shouldn't be necessary, but INSTUI isn't focusing the close button
|
|
111
|
+
// like it should.
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (isOpen && closeButtonRef) {
|
|
114
|
+
closeButtonRef.focus();
|
|
115
|
+
}
|
|
116
|
+
}, [closeButtonRef, isOpen]);
|
|
115
117
|
useEffect(() => {
|
|
116
118
|
const controller = {
|
|
117
119
|
showTrayForPlugin(plugin) {
|
|
118
|
-
var _closeButtonRef$curre;
|
|
119
|
-
|
|
120
120
|
// increment a counter that's used as the key when rendering
|
|
121
121
|
// this gets us a new instance everytime, which is necessary
|
|
122
122
|
// to get the queries run so we have up to date data.
|
|
123
123
|
++CanvasContentTray.globalOpenCount;
|
|
124
124
|
setFilterSettings(FILTER_SETTINGS_BY_PLUGIN[plugin]);
|
|
125
125
|
setIsOpen(true);
|
|
126
|
-
|
|
127
126
|
if (plugin === 'course_link_edit') {
|
|
128
127
|
setIsEditTray(true);
|
|
129
128
|
const {
|
|
@@ -144,21 +143,18 @@ export default function CanvasContentTray(props) {
|
|
|
144
143
|
} else {
|
|
145
144
|
setIsEditTray(false);
|
|
146
145
|
}
|
|
147
|
-
|
|
148
|
-
(_closeButtonRef$curre = closeButtonRef.current) === null || _closeButtonRef$curre === void 0 ? void 0 : _closeButtonRef$curre.focus();
|
|
149
146
|
},
|
|
150
|
-
|
|
151
147
|
hideTray(forceClose) {
|
|
152
148
|
if (forceClose || hidingTrayOnAction) {
|
|
153
149
|
handleDismissTray();
|
|
154
150
|
}
|
|
155
151
|
}
|
|
156
|
-
|
|
157
152
|
};
|
|
158
153
|
bridge.attachController(controller, editor.id);
|
|
159
154
|
return () => {
|
|
160
155
|
bridge.detachController(editor.id);
|
|
161
|
-
};
|
|
156
|
+
};
|
|
157
|
+
// it's OK the setFilterSettings is not a dependency
|
|
162
158
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
163
159
|
}, [editor.id, bridge, handleDismissTray, hidingTrayOnAction]);
|
|
164
160
|
useEffect(() => {
|
|
@@ -168,19 +164,16 @@ export default function CanvasContentTray(props) {
|
|
|
168
164
|
}, [hasOpened]);
|
|
169
165
|
useEffect(() => {
|
|
170
166
|
var _trayRef$current;
|
|
171
|
-
|
|
172
167
|
if (!hasOpened) return;
|
|
173
168
|
let c = document.querySelector('[role="main"]');
|
|
174
169
|
let target_w = 0;
|
|
175
170
|
if (!c) return;
|
|
176
171
|
const margin = window.getComputedStyle(c).direction === 'ltr' ? document.body.getBoundingClientRect().right - c.getBoundingClientRect().right : c.getBoundingClientRect().left;
|
|
177
172
|
target_w = c.offsetWidth - ((_trayRef$current = trayRef.current) === null || _trayRef$current === void 0 ? void 0 : _trayRef$current.offsetWidth) + margin;
|
|
178
|
-
|
|
179
173
|
if (target_w >= 320 && target_w < c.offsetWidth) {
|
|
180
174
|
c.style.boxSizing = 'border-box';
|
|
181
175
|
c.style.width = `${target_w}px`;
|
|
182
176
|
}
|
|
183
|
-
|
|
184
177
|
setHidingTrayOnAction(target_w < 320);
|
|
185
178
|
return () => {
|
|
186
179
|
c = document.querySelector('[role="main"]');
|
|
@@ -188,16 +181,13 @@ export default function CanvasContentTray(props) {
|
|
|
188
181
|
c.style.width = '';
|
|
189
182
|
};
|
|
190
183
|
}, [hasOpened]);
|
|
191
|
-
|
|
192
184
|
function handleOpenTray() {
|
|
193
185
|
bridge.focusEditor(editor);
|
|
194
186
|
setHasOpened(true);
|
|
195
187
|
}
|
|
196
|
-
|
|
197
188
|
function handleExitTray() {
|
|
198
189
|
onTrayClosing && onTrayClosing(true); // tell RCEWrapper we're closing
|
|
199
190
|
}
|
|
200
|
-
|
|
201
191
|
function handleCloseTray() {
|
|
202
192
|
// clear the store's saved search string so the tray doesn't
|
|
203
193
|
// reopen with a previous tray instance's search results
|
|
@@ -205,10 +195,10 @@ export default function CanvasContentTray(props) {
|
|
|
205
195
|
setHasOpened(false);
|
|
206
196
|
onTrayClosing && onTrayClosing(false); // tell RCEWrapper we're closed
|
|
207
197
|
}
|
|
208
|
-
|
|
209
198
|
function handleReplaceButton() {
|
|
210
199
|
handleDismissTray();
|
|
211
|
-
const newLink = {
|
|
200
|
+
const newLink = {
|
|
201
|
+
...link,
|
|
212
202
|
forceRename: true,
|
|
213
203
|
text: linkText
|
|
214
204
|
};
|
|
@@ -219,7 +209,6 @@ export default function CanvasContentTray(props) {
|
|
|
219
209
|
srOnly: true
|
|
220
210
|
});
|
|
221
211
|
}
|
|
222
|
-
|
|
223
212
|
function renderFooter() {
|
|
224
213
|
return /*#__PURE__*/React.createElement(Flex.Item, {
|
|
225
214
|
background: "secondary",
|
|
@@ -236,11 +225,10 @@ export default function CanvasContentTray(props) {
|
|
|
236
225
|
"data-testid": "replace-link-button"
|
|
237
226
|
}, formatMessage('Replace')));
|
|
238
227
|
}
|
|
239
|
-
|
|
240
228
|
function handleFilterChange(newFilter, onChangeContext, onChangeSearchString, onChangeSortBy) {
|
|
241
|
-
const newFilterSettings = {
|
|
229
|
+
const newFilterSettings = {
|
|
230
|
+
...newFilter
|
|
242
231
|
};
|
|
243
|
-
|
|
244
232
|
if (newFilterSettings.sortValue) {
|
|
245
233
|
newFilterSettings.sortDir = newFilterSettings.sortValue === 'alphabetical' ? 'asc' : 'desc';
|
|
246
234
|
onChangeSortBy({
|
|
@@ -248,48 +236,48 @@ export default function CanvasContentTray(props) {
|
|
|
248
236
|
dir: newFilterSettings.sortDir
|
|
249
237
|
});
|
|
250
238
|
}
|
|
251
|
-
|
|
252
239
|
if ('searchString' in newFilterSettings && filterSettings.searchString !== newFilterSettings.searchString) {
|
|
253
240
|
onChangeSearchString(newFilterSettings.searchString);
|
|
254
241
|
}
|
|
255
|
-
|
|
256
242
|
setFilterSettings(newFilterSettings);
|
|
257
|
-
|
|
258
243
|
if (newFilterSettings.contentType) {
|
|
259
244
|
let contextType, contextId;
|
|
260
|
-
|
|
261
245
|
switch (newFilterSettings.contentType) {
|
|
262
246
|
case 'user_files':
|
|
263
247
|
contextType = 'user';
|
|
264
248
|
contextId = props.containingContext.userId;
|
|
265
249
|
break;
|
|
266
|
-
|
|
267
250
|
case 'group_files':
|
|
268
251
|
contextType = 'group';
|
|
269
252
|
contextId = props.containingContext.contextId;
|
|
270
253
|
break;
|
|
271
|
-
|
|
272
254
|
case 'course_files':
|
|
273
255
|
contextType = props.contextType;
|
|
274
256
|
contextId = props.containingContext.contextId;
|
|
275
257
|
break;
|
|
276
|
-
|
|
277
258
|
case 'links':
|
|
278
259
|
contextType = props.containingContext.contextType;
|
|
279
260
|
contextId = props.containingContext.contextId;
|
|
280
261
|
}
|
|
281
|
-
|
|
282
262
|
onChangeContext({
|
|
283
263
|
contextType,
|
|
284
264
|
contextId
|
|
285
265
|
});
|
|
286
266
|
}
|
|
287
267
|
}
|
|
288
|
-
|
|
289
268
|
function getHeader() {
|
|
290
269
|
return isEditTray ? formatMessage('Edit Course Link') : formatMessage('Add');
|
|
291
270
|
}
|
|
292
|
-
|
|
271
|
+
function renderLinkDisplay() {
|
|
272
|
+
return isEditTray && /*#__PURE__*/React.createElement(LinkDisplay, {
|
|
273
|
+
linkText: linkText,
|
|
274
|
+
placeholderText: (link === null || link === void 0 ? void 0 : link.title) || placeholderText,
|
|
275
|
+
linkFileName: (link === null || link === void 0 ? void 0 : link.title) || '',
|
|
276
|
+
published: (link === null || link === void 0 ? void 0 : link.published) || false,
|
|
277
|
+
handleTextChange: setLinkText,
|
|
278
|
+
linkType: link === null || link === void 0 ? void 0 : link.type
|
|
279
|
+
});
|
|
280
|
+
}
|
|
293
281
|
return /*#__PURE__*/React.createElement(Tray, {
|
|
294
282
|
"data-mce-component": true,
|
|
295
283
|
"data-testid": "CanvasContentTray",
|
|
@@ -306,7 +294,7 @@ export default function CanvasContentTray(props) {
|
|
|
306
294
|
onExit: handleExitTray,
|
|
307
295
|
onOpen: handleOpenTray,
|
|
308
296
|
contentRef: el => trayRef.current = el
|
|
309
|
-
},
|
|
297
|
+
}, /*#__PURE__*/React.createElement(Flex, {
|
|
310
298
|
direction: "column",
|
|
311
299
|
as: "div",
|
|
312
300
|
height: getTrayHeight(),
|
|
@@ -327,15 +315,8 @@ export default function CanvasContentTray(props) {
|
|
|
327
315
|
onClick: handleDismissTray,
|
|
328
316
|
"data-testid": "CloseButton_ContentTray",
|
|
329
317
|
screenReaderLabel: formatMessage('Close'),
|
|
330
|
-
elementRef: el =>
|
|
331
|
-
})),
|
|
332
|
-
linkText: linkText,
|
|
333
|
-
placeholderText: (link === null || link === void 0 ? void 0 : link.title) || placeholderText,
|
|
334
|
-
linkFileName: (link === null || link === void 0 ? void 0 : link.title) || '',
|
|
335
|
-
published: (link === null || link === void 0 ? void 0 : link.published) || false,
|
|
336
|
-
handleTextChange: setLinkText,
|
|
337
|
-
linkType: link === null || link === void 0 ? void 0 : link.type
|
|
338
|
-
}), /*#__PURE__*/React.createElement(Filter, Object.assign({}, filterSettings, {
|
|
318
|
+
elementRef: el => setCloseButtonRef(el)
|
|
319
|
+
})), renderLinkDisplay(), /*#__PURE__*/React.createElement(Filter, Object.assign({}, filterSettings, {
|
|
339
320
|
mountNode: props.mountNode,
|
|
340
321
|
userContextType: props.contextType,
|
|
341
322
|
containingContextType: props.containingContext.contextType,
|
|
@@ -344,7 +325,7 @@ export default function CanvasContentTray(props) {
|
|
|
344
325
|
},
|
|
345
326
|
isContentLoading: isLoading(storeProps),
|
|
346
327
|
use_rce_icon_maker: props.use_rce_icon_maker
|
|
347
|
-
}))), /*#__PURE__*/React.createElement(Flex.Item, {
|
|
328
|
+
}))), isOpen && hasOpened ? /*#__PURE__*/React.createElement(Flex.Item, {
|
|
348
329
|
shouldGrow: true,
|
|
349
330
|
shouldShrink: true,
|
|
350
331
|
margin: "xx-small xxx-small 0",
|
|
@@ -372,17 +353,16 @@ export default function CanvasContentTray(props) {
|
|
|
372
353
|
editing: isEditTray,
|
|
373
354
|
onEditClick: setLink,
|
|
374
355
|
selectedLink: link
|
|
375
|
-
}, storeProps)))), isEditTray && renderFooter()))
|
|
356
|
+
}, storeProps)))), isEditTray && renderFooter())) : null));
|
|
376
357
|
}
|
|
377
358
|
CanvasContentTray.globalOpenCount = 0;
|
|
378
|
-
|
|
379
359
|
function requiredWithoutSource(props, propName, componentName) {
|
|
380
360
|
if (props.source == null && props[propName] == null) {
|
|
381
361
|
throw new Error(`The prop \`${propName}\` is marked as required in \`${componentName}\`, but its value is \`${props[propName]}\`.`);
|
|
382
362
|
}
|
|
383
|
-
}
|
|
384
|
-
|
|
363
|
+
}
|
|
385
364
|
|
|
365
|
+
// Changes made here may need to be reflected in the trayProps type in CanvasContentPanel
|
|
386
366
|
const trayPropsMap = {
|
|
387
367
|
canUploadFiles: bool.isRequired,
|
|
388
368
|
contextId: string.isRequired,
|
|
@@ -414,10 +394,10 @@ CanvasContentTray.propTypes = {
|
|
|
414
394
|
// called with true when the tray starts closing, false once closed
|
|
415
395
|
onEditClick: func,
|
|
416
396
|
...trayPropsMap
|
|
417
|
-
};
|
|
397
|
+
};
|
|
418
398
|
|
|
399
|
+
// the way we define trayProps, eslint doesn't recognize the following as props
|
|
419
400
|
/* eslint-disable react/default-props-match-prop-types */
|
|
420
|
-
|
|
421
401
|
CanvasContentTray.defaultProps = {
|
|
422
402
|
canUploadFiles: false,
|
|
423
403
|
filesTabDisabled: false,
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
const checkerboardStyle = squareSize => {
|
|
19
20
|
return {
|
|
20
21
|
backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" fill-opacity=".15"><rect x="200" width="200" height="200"/><rect y="200" width="200" height="200"/></svg>')`,
|
|
21
22
|
backgroundSize: `${squareSize}px ${squareSize}px`
|
|
22
23
|
};
|
|
23
24
|
};
|
|
24
|
-
|
|
25
25
|
export default checkerboardStyle;
|
|
@@ -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, { useEffect, useState } from 'react';
|
|
19
20
|
import { View } from '@instructure/ui-view';
|
|
20
21
|
import { Flex } from '@instructure/ui-flex';
|
|
@@ -85,7 +86,6 @@ const NAMED_COLORS = [{
|
|
|
85
86
|
}, null];
|
|
86
87
|
export const ColorInput = _ref => {
|
|
87
88
|
var _NAMED_COLORS$find;
|
|
88
|
-
|
|
89
89
|
let {
|
|
90
90
|
color,
|
|
91
91
|
label,
|
|
@@ -101,27 +101,25 @@ export const ColorInput = _ref => {
|
|
|
101
101
|
const colorName = (_NAMED_COLORS$find = NAMED_COLORS.find(c => (c === null || c === void 0 ? void 0 : c.color) === color)) === null || _NAMED_COLORS$find === void 0 ? void 0 : _NAMED_COLORS$find.name;
|
|
102
102
|
useEffect(() => {
|
|
103
103
|
setInputValue(color);
|
|
104
|
-
}, [color]);
|
|
104
|
+
}, [color]);
|
|
105
105
|
|
|
106
|
+
// fire onChange in case value is valid
|
|
106
107
|
const handleColorChange = hex => {
|
|
107
108
|
if (isValidHex(hex)) {
|
|
108
109
|
onChange(hex);
|
|
109
110
|
}
|
|
110
|
-
|
|
111
111
|
if (!hex || !hex.length) {
|
|
112
112
|
onChange(null);
|
|
113
113
|
}
|
|
114
|
-
|
|
115
114
|
setInputValue(hex);
|
|
116
|
-
};
|
|
117
|
-
|
|
115
|
+
};
|
|
118
116
|
|
|
117
|
+
// reset the input value on blur if invalid
|
|
119
118
|
const handleInputBlur = () => {
|
|
120
119
|
if (!inputValue || inputValue.length > 0 && !isValidHex(inputValue)) {
|
|
121
120
|
setInputValue(color);
|
|
122
121
|
}
|
|
123
122
|
};
|
|
124
|
-
|
|
125
123
|
const colorPreviews = NAMED_COLORS.map(c => /*#__PURE__*/React.createElement(ColorPreview, {
|
|
126
124
|
key: `${name}-${c === null || c === void 0 ? void 0 : c.color}`,
|
|
127
125
|
color: c === null || c === void 0 ? void 0 : c.color,
|
|
@@ -132,7 +130,6 @@ export const ColorInput = _ref => {
|
|
|
132
130
|
setIsOpen(false);
|
|
133
131
|
}
|
|
134
132
|
}));
|
|
135
|
-
|
|
136
133
|
function renderPopover() {
|
|
137
134
|
const pickerLabel = colorName ? formatMessage('Color Picker ({colorName} selected)', {
|
|
138
135
|
colorName
|
|
@@ -167,7 +164,6 @@ export const ColorInput = _ref => {
|
|
|
167
164
|
"data-testid": `${name}-popover`
|
|
168
165
|
}, requireColor ? colorPreviews.slice(0, -1) : colorPreviews));
|
|
169
166
|
}
|
|
170
|
-
|
|
171
167
|
return /*#__PURE__*/React.createElement(View, {
|
|
172
168
|
as: "div"
|
|
173
169
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
|
@@ -190,7 +186,6 @@ export const ColorInput = _ref => {
|
|
|
190
186
|
interaction: readonly ? 'readonly' : undefined
|
|
191
187
|
}));
|
|
192
188
|
};
|
|
193
|
-
|
|
194
189
|
function ColorPreview(_ref2) {
|
|
195
190
|
let {
|
|
196
191
|
color,
|
|
@@ -216,17 +211,13 @@ function ColorPreview(_ref2) {
|
|
|
216
211
|
testId: `colorPreview-${color || 'none'}`
|
|
217
212
|
}));
|
|
218
213
|
}
|
|
219
|
-
|
|
220
214
|
function isValidHex(color) {
|
|
221
215
|
if (!color) return false;
|
|
222
|
-
|
|
223
216
|
switch (color.length) {
|
|
224
217
|
case 4:
|
|
225
218
|
return /^#[0-9A-F]{3}$/i.test(color);
|
|
226
|
-
|
|
227
219
|
case 7:
|
|
228
220
|
return /^#[0-9A-F]{6}$/i.test(color);
|
|
229
|
-
|
|
230
221
|
default:
|
|
231
222
|
return false;
|
|
232
223
|
}
|
|
@@ -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, element, oneOfType, arrayOf } from 'prop-types';
|
|
20
21
|
import { Tooltip } from '@instructure/ui-tooltip';
|