@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
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
|
|
4
2
|
/*
|
|
5
3
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
6
4
|
*
|
|
@@ -18,6 +16,7 @@ import _pt from "prop-types";
|
|
|
18
16
|
* You should have received a copy of the GNU Affero General Public License along
|
|
19
17
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
18
|
*/
|
|
19
|
+
|
|
21
20
|
import React, { useEffect, useState } from 'react';
|
|
22
21
|
import ReactDOM from 'react-dom';
|
|
23
22
|
import { px } from '@instructure/ui-utils';
|
|
@@ -31,25 +30,27 @@ import RCEWrapper from '../../../RCEWrapper';
|
|
|
31
30
|
import { UploadCanvasPanelIds } from '../canvasContentUtils';
|
|
32
31
|
export const UploadFilePanelIds = ['COMPUTER', 'URL'];
|
|
33
32
|
export const FullPanelIds = [...UploadCanvasPanelIds, ...UploadFilePanelIds];
|
|
34
|
-
|
|
35
33
|
/**
|
|
36
34
|
* Handles uploading data based on what type of data is submitted.
|
|
37
35
|
*/
|
|
38
|
-
export const handleSubmit = function (editor, accept, selectedPanel,
|
|
36
|
+
export const handleSubmit = function (editor, accept, selectedPanel,
|
|
37
|
+
// @ts-expect-error
|
|
38
|
+
uploadData,
|
|
39
|
+
// @ts-expect-error
|
|
40
|
+
storeProps,
|
|
41
|
+
// @ts-expect-error
|
|
42
|
+
_source) {
|
|
39
43
|
let afterInsert = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => undefined;
|
|
40
44
|
Bridge.focusEditor(RCEWrapper.getByEditor(editor)); // necessary since it blurred when the modal opened
|
|
41
|
-
|
|
42
45
|
const {
|
|
43
46
|
altText,
|
|
44
47
|
isDecorativeImage,
|
|
45
48
|
displayAs
|
|
46
49
|
} = (uploadData === null || uploadData === void 0 ? void 0 : uploadData.imageOptions) || {};
|
|
47
|
-
|
|
48
50
|
switch (selectedPanel) {
|
|
49
51
|
case 'COMPUTER':
|
|
50
52
|
{
|
|
51
53
|
var _uploadData$usageRigh;
|
|
52
|
-
|
|
53
54
|
const {
|
|
54
55
|
theFile
|
|
55
56
|
} = uploadData;
|
|
@@ -65,24 +66,20 @@ export const handleSubmit = function (editor, accept, selectedPanel, uploadData,
|
|
|
65
66
|
usageRights: (uploadData === null || uploadData === void 0 ? void 0 : (_uploadData$usageRigh = uploadData.usageRights) === null || _uploadData$usageRigh === void 0 ? void 0 : _uploadData$usageRigh.usageRight) === 'choose' ? undefined : uploadData === null || uploadData === void 0 ? void 0 : uploadData.usageRights
|
|
66
67
|
};
|
|
67
68
|
let tabContext = 'documents';
|
|
68
|
-
|
|
69
69
|
if (isImage(theFile.type)) {
|
|
70
70
|
tabContext = 'images';
|
|
71
71
|
} else if (isAudioOrVideo(theFile.type)) {
|
|
72
72
|
tabContext = 'media';
|
|
73
73
|
}
|
|
74
|
-
|
|
75
74
|
storeProps.startMediaUpload(tabContext, fileMetaData);
|
|
76
75
|
break;
|
|
77
76
|
}
|
|
78
|
-
|
|
79
77
|
case 'URL':
|
|
80
78
|
{
|
|
81
79
|
const {
|
|
82
80
|
fileUrl
|
|
83
81
|
} = uploadData;
|
|
84
82
|
let editorHtml;
|
|
85
|
-
|
|
86
83
|
if (displayAs !== 'link' && /image/.test(accept)) {
|
|
87
84
|
editorHtml = editor.dom.createHTML('img', {
|
|
88
85
|
src: fileUrl,
|
|
@@ -96,16 +93,13 @@ export const handleSubmit = function (editor, accept, selectedPanel, uploadData,
|
|
|
96
93
|
href: fileUrl
|
|
97
94
|
}, altText || fileUrl);
|
|
98
95
|
}
|
|
99
|
-
|
|
100
96
|
editor.insertContent(editorHtml);
|
|
101
97
|
break;
|
|
102
98
|
}
|
|
103
|
-
|
|
104
99
|
default:
|
|
105
100
|
throw new Error('Selected Panel is invalid');
|
|
106
101
|
// Should never get here
|
|
107
102
|
}
|
|
108
|
-
|
|
109
103
|
const element = editor.selection.getEnd();
|
|
110
104
|
element.addEventListener('load', () => indicate(indicatorRegion(editor, element)));
|
|
111
105
|
afterInsert();
|
|
@@ -129,18 +123,20 @@ export function UploadFile(_ref) {
|
|
|
129
123
|
const [modalBodyHeight, setModalBodyHeight] = useState(undefined);
|
|
130
124
|
const [theFile] = useState(preselectedFile);
|
|
131
125
|
const bodyRef = React.useRef();
|
|
132
|
-
|
|
126
|
+
|
|
127
|
+
// @ts-expect-error
|
|
128
|
+
trayProps = trayProps || Bridge.trayProps.get(editor);
|
|
129
|
+
|
|
130
|
+
// the panels get rendered inside tab panels. it's difficult for them to
|
|
133
131
|
// figure out how much space they have to work with, and I'd like the previews
|
|
134
132
|
// not to trigger scrollbars in the modal's body. Get the Modal.Body's size
|
|
135
133
|
// and to the ComputerPanel how much space it has so it can render the file preview
|
|
136
|
-
|
|
137
134
|
useEffect(() => {
|
|
138
135
|
if (bodyRef.current) {
|
|
139
136
|
// eslint-disable-next-line react/no-find-dom-node
|
|
140
137
|
const thebody = ReactDOM.findDOMNode(bodyRef.current);
|
|
141
138
|
const sz = thebody === null || thebody === void 0 ? void 0 : thebody.getBoundingClientRect();
|
|
142
139
|
sz.height -= px('3rem'); // leave room for the tabs
|
|
143
|
-
|
|
144
140
|
setModalBodyWidth(sz.width);
|
|
145
141
|
setModalBodyHeight(sz.height);
|
|
146
142
|
}
|
|
@@ -148,7 +144,8 @@ export function UploadFile(_ref) {
|
|
|
148
144
|
return /*#__PURE__*/React.createElement(StoreProvider, Object.assign({}, trayProps, {
|
|
149
145
|
canvasOrigin: canvasOrigin
|
|
150
146
|
}), contentProps => /*#__PURE__*/React.createElement(UploadFileModal, {
|
|
151
|
-
ref: bodyRef
|
|
147
|
+
ref: bodyRef
|
|
148
|
+
// @ts-expect-error
|
|
152
149
|
,
|
|
153
150
|
preselectedFile: theFile,
|
|
154
151
|
editor: editor,
|
|
@@ -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, { Suspense, useState } from 'react';
|
|
19
20
|
import { arrayOf, bool, func, number, object, oneOf, oneOfType, string } from 'prop-types';
|
|
20
21
|
import { Modal } from '@instructure/ui-modal';
|
|
@@ -33,35 +34,28 @@ import { UploadCanvasPanelIds, CanvasPanelTitles } from '../canvasContentUtils';
|
|
|
33
34
|
const CanvasContentPanel = /*#__PURE__*/React.lazy(() => import('./CanvasContentPanel'));
|
|
34
35
|
const ComputerPanel = /*#__PURE__*/React.lazy(() => import('./ComputerPanel'));
|
|
35
36
|
const UrlPanel = /*#__PURE__*/React.lazy(() => import('./UrlPanel'));
|
|
36
|
-
|
|
37
37
|
function shouldBeDisabled(_ref, selectedPanel, usageRightNotSet) {
|
|
38
38
|
let {
|
|
39
39
|
fileUrl,
|
|
40
40
|
theFile,
|
|
41
41
|
error
|
|
42
42
|
} = _ref;
|
|
43
|
-
|
|
44
43
|
if (error || usageRightNotSet && selectedPanel === 'COMPUTER') {
|
|
45
44
|
return true;
|
|
46
45
|
}
|
|
47
|
-
|
|
48
46
|
switch (selectedPanel) {
|
|
49
47
|
case 'COMPUTER':
|
|
50
48
|
return !theFile || theFile.error;
|
|
51
|
-
|
|
52
49
|
case 'URL':
|
|
53
50
|
return !fileUrl;
|
|
54
|
-
|
|
55
51
|
default:
|
|
56
52
|
if (UploadCanvasPanelIds.includes(selectedPanel)) return !fileUrl;
|
|
57
53
|
return false;
|
|
58
54
|
// When in doubt, don't disable (but we shouldn't get here either)
|
|
59
55
|
}
|
|
60
56
|
}
|
|
61
|
-
|
|
62
57
|
const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
63
58
|
var _contentProps$session;
|
|
64
|
-
|
|
65
59
|
let {
|
|
66
60
|
preselectedFile,
|
|
67
61
|
editor,
|
|
@@ -87,38 +81,35 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
87
81
|
usageRight: 'choose',
|
|
88
82
|
ccLicense: '',
|
|
89
83
|
copyrightHolder: ''
|
|
90
|
-
});
|
|
84
|
+
});
|
|
91
85
|
|
|
86
|
+
// Image options props
|
|
92
87
|
const [altText, setAltText] = useState('');
|
|
93
88
|
const [isDecorativeImage, setIsDecorativeImage] = useState(false);
|
|
94
|
-
const [displayAs, setDisplayAs] = useState('embed');
|
|
89
|
+
const [displayAs, setDisplayAs] = useState('embed');
|
|
90
|
+
// even though usage rights might be required by the course, canvas has no place
|
|
95
91
|
// on the user to store it. Only Group and Course.
|
|
96
|
-
|
|
97
92
|
const requiresUsageRights = (contentProps === null || contentProps === void 0 ? void 0 : (_contentProps$session = contentProps.session) === null || _contentProps$session === void 0 ? void 0 : _contentProps$session.usageRightsRequired) && /(?:course|group)/.test(trayProps.contextType);
|
|
98
|
-
|
|
99
93
|
function handleAltTextChange(event) {
|
|
100
94
|
setAltText(event.target.value);
|
|
101
95
|
}
|
|
102
|
-
|
|
103
96
|
function handleIsDecorativeChange(event) {
|
|
104
97
|
setIsDecorativeImage(event.target.checked);
|
|
105
98
|
}
|
|
106
|
-
|
|
107
99
|
function handleDisplayAsChange(event) {
|
|
108
100
|
setDisplayAs(event.target.value);
|
|
109
101
|
}
|
|
110
|
-
|
|
111
102
|
const handleRequestTabChange = index => {
|
|
112
103
|
setSelectedPanel(panels[index]);
|
|
113
104
|
setFileUrl('');
|
|
114
105
|
};
|
|
115
|
-
|
|
116
106
|
const submitDisabled = shouldBeDisabled({
|
|
117
107
|
fileUrl,
|
|
118
108
|
theFile,
|
|
119
109
|
error
|
|
120
|
-
}, selectedPanel, requiresUsageRights && usageRightsState.usageRight === 'choose');
|
|
110
|
+
}, selectedPanel, requiresUsageRights && usageRightsState.usageRight === 'choose');
|
|
121
111
|
|
|
112
|
+
// Load the necessary session values, if not already loaded
|
|
122
113
|
const loadSession = contentProps.loadSession;
|
|
123
114
|
React.useEffect(() => {
|
|
124
115
|
loadSession();
|
|
@@ -129,11 +120,9 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
129
120
|
host: trayProps.host,
|
|
130
121
|
canvasOrigin
|
|
131
122
|
});
|
|
132
|
-
|
|
133
123
|
if (forBlockEditorUse && !['COMPUTER', 'URL'].includes(selectedPanel)) {
|
|
134
124
|
requireA11yAttributes = false;
|
|
135
125
|
}
|
|
136
|
-
|
|
137
126
|
return /*#__PURE__*/React.createElement(Modal, {
|
|
138
127
|
"data-mce-component": true,
|
|
139
128
|
as: "form",
|
|
@@ -144,11 +133,9 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
144
133
|
onDismiss: onDismiss,
|
|
145
134
|
onSubmit: e => {
|
|
146
135
|
e.preventDefault();
|
|
147
|
-
|
|
148
136
|
if (submitDisabled || uploading) {
|
|
149
137
|
return false;
|
|
150
138
|
}
|
|
151
|
-
|
|
152
139
|
onSubmit(editor, accept, selectedPanel, {
|
|
153
140
|
fileUrl,
|
|
154
141
|
theFile,
|
|
@@ -202,7 +189,6 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
202
189
|
height: modalBodyHeight
|
|
203
190
|
}
|
|
204
191
|
})));
|
|
205
|
-
|
|
206
192
|
case 'URL':
|
|
207
193
|
return /*#__PURE__*/React.createElement(Tabs.Panel, {
|
|
208
194
|
key: panel,
|
|
@@ -219,7 +205,6 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
219
205
|
fileUrl: fileUrl,
|
|
220
206
|
setFileUrl: setFileUrl
|
|
221
207
|
})));
|
|
222
|
-
|
|
223
208
|
default:
|
|
224
209
|
if (UploadCanvasPanelIds.includes(panel)) {
|
|
225
210
|
return /*#__PURE__*/React.createElement(Tabs.Panel, {
|
|
@@ -238,10 +223,10 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
238
223
|
setFileUrl: setFileUrl
|
|
239
224
|
})));
|
|
240
225
|
}
|
|
241
|
-
|
|
242
226
|
return null;
|
|
243
227
|
}
|
|
244
|
-
})),
|
|
228
|
+
})),
|
|
229
|
+
// We shouldn't show the accordions until the session data is loaded.
|
|
245
230
|
Object.keys(contentProps.session || {}).length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, selectedPanel === 'COMPUTER' && requiresUsageRights && /*#__PURE__*/React.createElement(View, {
|
|
246
231
|
as: "div",
|
|
247
232
|
role: "group",
|
|
@@ -304,6 +289,5 @@ UploadFileModal.propTypes = {
|
|
|
304
289
|
forBlockEditorUse: bool,
|
|
305
290
|
uploading: bool,
|
|
306
291
|
preselectedFile: object // JS File
|
|
307
|
-
|
|
308
292
|
};
|
|
309
293
|
export default UploadFileModal;
|
|
@@ -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 { string, func } from 'prop-types';
|
|
20
21
|
import { TextInput } from '@instructure/ui-text-input';
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
import PropTypes from 'prop-types';
|
|
20
21
|
import formatMessage from '../../../../format-message';
|
|
21
22
|
import { SimpleSelect } from '@instructure/ui-simple-select';
|
|
22
23
|
import { View } from '@instructure/ui-view';
|
|
23
24
|
import { TextInput } from '@instructure/ui-text-input';
|
|
24
|
-
|
|
25
25
|
const ShowCreativeCommonsOptions = _ref => {
|
|
26
26
|
let {
|
|
27
27
|
ccLicense,
|
|
@@ -48,7 +48,6 @@ const ShowCreativeCommonsOptions = _ref => {
|
|
|
48
48
|
value: license.id
|
|
49
49
|
}, license.name))));
|
|
50
50
|
};
|
|
51
|
-
|
|
52
51
|
const ShowMessage = () => {
|
|
53
52
|
return /*#__PURE__*/React.createElement("div", {
|
|
54
53
|
className: "alert"
|
|
@@ -60,7 +59,6 @@ const ShowMessage = () => {
|
|
|
60
59
|
}
|
|
61
60
|
}, formatMessage("If you do not select usage rights now, this file will be unpublished after it's uploaded."))));
|
|
62
61
|
};
|
|
63
|
-
|
|
64
62
|
const UsageRightsSelectBox = _ref3 => {
|
|
65
63
|
let {
|
|
66
64
|
contextType,
|
|
@@ -100,23 +98,19 @@ const UsageRightsSelectBox = _ref3 => {
|
|
|
100
98
|
function getUsageRightsOptions() {
|
|
101
99
|
fetch(apiUrl()).then(res => res.text()).then(res => setLicenseOptions(JSON.parse(res))).catch(() => {});
|
|
102
100
|
}
|
|
103
|
-
|
|
104
101
|
function apiUrl() {
|
|
105
102
|
const context = contextType.replace(/([^s])$/, '$1s'); // pluralize
|
|
106
|
-
|
|
107
103
|
return `/api/v1/${context}/${contextId}/content_licenses`;
|
|
108
104
|
}
|
|
109
|
-
|
|
110
105
|
getUsageRightsOptions();
|
|
111
106
|
}, [contextType, contextId]);
|
|
112
|
-
|
|
113
107
|
function handleChange(value) {
|
|
114
|
-
setUsageRightsState(state => ({
|
|
108
|
+
setUsageRightsState(state => ({
|
|
109
|
+
...state,
|
|
115
110
|
usageRight: value
|
|
116
111
|
}));
|
|
117
112
|
setShowMessage(showMessageProp && value === 'choose');
|
|
118
113
|
}
|
|
119
|
-
|
|
120
114
|
return /*#__PURE__*/React.createElement(View, {
|
|
121
115
|
as: "div"
|
|
122
116
|
}, /*#__PURE__*/React.createElement(View, {
|
|
@@ -138,7 +132,8 @@ const UsageRightsSelectBox = _ref3 => {
|
|
|
138
132
|
value: contentOption.value
|
|
139
133
|
}, contentOption.display)))), showCreativeCommonsOptions && /*#__PURE__*/React.createElement(ShowCreativeCommonsOptions, {
|
|
140
134
|
ccLicese: ccLicense,
|
|
141
|
-
setCCLicense: license => setUsageRightsState(state => ({
|
|
135
|
+
setCCLicense: license => setUsageRightsState(state => ({
|
|
136
|
+
...state,
|
|
142
137
|
ccLicense: license
|
|
143
138
|
})),
|
|
144
139
|
licenseOptions: licenseOptions
|
|
@@ -148,7 +143,8 @@ const UsageRightsSelectBox = _ref3 => {
|
|
|
148
143
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
|
149
144
|
renderLabel: formatMessage('Copyright Holder:'),
|
|
150
145
|
value: copyrightHolder,
|
|
151
|
-
onChange: (e, value) => setUsageRightsState(state => ({
|
|
146
|
+
onChange: (e, value) => setUsageRightsState(state => ({
|
|
147
|
+
...state,
|
|
152
148
|
copyrightHolder: value
|
|
153
149
|
})),
|
|
154
150
|
placeholder: formatMessage('(c) 2001 Acme Inc.')
|
|
@@ -157,7 +153,6 @@ const UsageRightsSelectBox = _ref3 => {
|
|
|
157
153
|
margin: "medium 0"
|
|
158
154
|
}, showMessage && /*#__PURE__*/React.createElement(ShowMessage, null)));
|
|
159
155
|
};
|
|
160
|
-
|
|
161
156
|
UsageRightsSelectBox.propTypes = {
|
|
162
157
|
usageRightsState: PropTypes.shape({
|
|
163
158
|
ccLicense: PropTypes.string,
|
|
@@ -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 ReactDOM from 'react-dom';
|
|
19
20
|
import formatMessage from '../../../../format-message';
|
|
20
21
|
import React from 'react';
|
|
@@ -25,7 +26,8 @@ export default function doFileUpload(ed, document, opts) {
|
|
|
25
26
|
accept,
|
|
26
27
|
panels,
|
|
27
28
|
preselectedFile
|
|
28
|
-
} = {
|
|
29
|
+
} = {
|
|
30
|
+
...opts
|
|
29
31
|
};
|
|
30
32
|
const title = accept !== null && accept !== void 0 && accept.startsWith('image/') ? formatMessage('Upload Image') : formatMessage('Upload File');
|
|
31
33
|
let shownResolve;
|
|
@@ -34,21 +36,18 @@ export default function doFileUpload(ed, document, opts) {
|
|
|
34
36
|
let {
|
|
35
37
|
UploadFile
|
|
36
38
|
} = _ref;
|
|
37
|
-
|
|
38
39
|
const container = document.querySelector('.canvas-rce-upload-container') || (() => {
|
|
39
40
|
const elem = document.createElement('div');
|
|
40
41
|
elem.className = 'canvas-rce-upload-container';
|
|
41
42
|
document.body.appendChild(elem);
|
|
42
43
|
return elem;
|
|
43
44
|
})();
|
|
44
|
-
|
|
45
45
|
return new Promise(resolve => {
|
|
46
46
|
const handleDismiss = () => {
|
|
47
47
|
ReactDOM.unmountComponentAtNode(container);
|
|
48
48
|
ed.focus(false);
|
|
49
49
|
resolve('dismissed');
|
|
50
50
|
};
|
|
51
|
-
|
|
52
51
|
const wrappedSubmit = function () {
|
|
53
52
|
try {
|
|
54
53
|
return handleSubmit(...arguments);
|
|
@@ -56,8 +55,7 @@ export default function doFileUpload(ed, document, opts) {
|
|
|
56
55
|
resolve('submitted');
|
|
57
56
|
}
|
|
58
57
|
};
|
|
59
|
-
|
|
60
|
-
ReactDOM.render( /*#__PURE__*/React.createElement(UploadFile, {
|
|
58
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(UploadFile, {
|
|
61
59
|
preselectedFile: preselectedFile,
|
|
62
60
|
accept: accept,
|
|
63
61
|
editor: ed,
|
|
@@ -15,5 +15,6 @@
|
|
|
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 { UploadFilePanelIds, handleSubmit, UploadFile } from './UploadFile';
|
|
19
20
|
export { UploadFilePanelIds, handleSubmit, UploadFile };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2024 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,12 +16,12 @@ 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 formatMessage from '../../../../format-message';
|
|
22
22
|
import { Button, CloseButton } from '@instructure/ui-buttons';
|
|
23
23
|
import { Heading } from '@instructure/ui-heading';
|
|
24
24
|
import { Modal } from '@instructure/ui-modal';
|
|
25
|
-
|
|
26
25
|
const AIResponseModal = _ref => {
|
|
27
26
|
let {
|
|
28
27
|
open,
|
|
@@ -59,7 +58,6 @@ const AIResponseModal = _ref => {
|
|
|
59
58
|
margin: "medium 0 0 medium"
|
|
60
59
|
}, formatMessage('Insert'))));
|
|
61
60
|
};
|
|
62
|
-
|
|
63
61
|
AIResponseModal.propTypes = {
|
|
64
62
|
open: _pt.bool.isRequired,
|
|
65
63
|
html: _pt.string.isRequired,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2024 - 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, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
21
21
|
import formatMessage from '../../../../format-message';
|
|
22
22
|
import { Button, CloseButton, CondensedButton, IconButton } from '@instructure/ui-buttons';
|
|
@@ -35,9 +35,7 @@ import { showFlashAlert } from '../../../../common/FlashAlert';
|
|
|
35
35
|
import doFetchApi from '../do-fetch-api-effect';
|
|
36
36
|
import { AIWandSVG, AIAvatarSVG, InsertSVG, CopySVG, RefreshSVG, DislikeSVG } from './aiicons';
|
|
37
37
|
import { AIResponseModal } from './AIResponseModal';
|
|
38
|
-
|
|
39
38
|
const msgid = () => uid('msg', 3);
|
|
40
|
-
|
|
41
39
|
const modifyAllTaskMessage = formatMessage('Hello. Please describe the modifications you would like to make to your composition.');
|
|
42
40
|
const modifySelectionTaskMessage = formatMessage('Hello. Please describe the modifications you would like to make to your selection.');
|
|
43
41
|
const generateTaskMessage = formatMessage('Please decribe what you would like to compose.');
|
|
@@ -62,7 +60,6 @@ export const AIToolsTray = _ref => {
|
|
|
62
60
|
transition: container.style.transition
|
|
63
61
|
};
|
|
64
62
|
}
|
|
65
|
-
|
|
66
63
|
return {};
|
|
67
64
|
});
|
|
68
65
|
const [isOpen, setIsOpen] = useState(open);
|
|
@@ -95,7 +92,6 @@ export const AIToolsTray = _ref => {
|
|
|
95
92
|
}, [initChatMessages]);
|
|
96
93
|
useLayoutEffect(() => {
|
|
97
94
|
var _chatContainerRef$cur;
|
|
98
|
-
|
|
99
95
|
const lastbox = (_chatContainerRef$cur = chatContainerRef.current) === null || _chatContainerRef$cur === void 0 ? void 0 : _chatContainerRef$cur.querySelector('.ai-chat-box:last-child');
|
|
100
96
|
lastbox === null || lastbox === void 0 ? void 0 : lastbox.scrollIntoView({
|
|
101
97
|
behavior: 'smooth',
|
|
@@ -121,7 +117,6 @@ export const AIToolsTray = _ref => {
|
|
|
121
117
|
const ed_rect = ed.getBoundingClientRect();
|
|
122
118
|
const padding = parseInt(edstyle.paddingRight, 10);
|
|
123
119
|
const tray_left = window.innerWidth - trayRef.offsetWidth;
|
|
124
|
-
|
|
125
120
|
if (ed_rect.right > tray_left) {
|
|
126
121
|
ed.style.boxSizing = 'border-box';
|
|
127
122
|
ed.style.width = `${ed_rect.width - (ed_rect.right - tray_left - padding)}px`;
|
|
@@ -135,9 +130,10 @@ export const AIToolsTray = _ref => {
|
|
|
135
130
|
}
|
|
136
131
|
}, [containerStyle, open, trayRef]);
|
|
137
132
|
const getResponse = useCallback(prompt => {
|
|
138
|
-
setWaitingForResponse(true);
|
|
139
|
-
// eslint-disable-next-line promise/catch-or-return
|
|
133
|
+
setWaitingForResponse(true);
|
|
140
134
|
|
|
135
|
+
// the .finally triggered the error even though there is a .catch
|
|
136
|
+
// eslint-disable-next-line promise/catch-or-return
|
|
141
137
|
doFetchApi({
|
|
142
138
|
path: '/api/v1/rich_content/generate',
|
|
143
139
|
method: 'POST',
|
|
@@ -156,7 +152,6 @@ export const AIToolsTray = _ref => {
|
|
|
156
152
|
const {
|
|
157
153
|
json
|
|
158
154
|
} = result;
|
|
159
|
-
|
|
160
155
|
if (json.error) {
|
|
161
156
|
chatMessagesRef.current.push({
|
|
162
157
|
id: msgid(),
|
|
@@ -217,7 +212,6 @@ export const AIToolsTray = _ref => {
|
|
|
217
212
|
}, [onInsertContent]);
|
|
218
213
|
const handleCopyResponse = useCallback(async responseText => {
|
|
219
214
|
try {
|
|
220
|
-
// @ts-expect-error ClipboardItem.supports really does exist
|
|
221
215
|
if (ClipboardItem.supports('text/html')) {
|
|
222
216
|
const htmlBlob = new Blob([responseText], {
|
|
223
217
|
type: 'text/html'
|
|
@@ -230,7 +224,6 @@ export const AIToolsTray = _ref => {
|
|
|
230
224
|
div.innerHTML = responseText;
|
|
231
225
|
await navigator.clipboard.writeText(div.textContent || '');
|
|
232
226
|
}
|
|
233
|
-
|
|
234
227
|
showFlashAlert({
|
|
235
228
|
message: formatMessage('Response copied to clipboard'),
|
|
236
229
|
type: 'success',
|
|
@@ -254,7 +247,6 @@ export const AIToolsTray = _ref => {
|
|
|
254
247
|
const handleShowWholeResponse = useCallback(event => {
|
|
255
248
|
const msgId = event.target.dataset.messageId;
|
|
256
249
|
const message = chatMessagesRef.current.find(msg => msg.id === msgId);
|
|
257
|
-
|
|
258
250
|
if (message) {
|
|
259
251
|
setResponseHtml(message.message);
|
|
260
252
|
}
|
|
@@ -270,7 +262,6 @@ export const AIToolsTray = _ref => {
|
|
|
270
262
|
onReplaceContent(responseHtml);
|
|
271
263
|
handleCloseResponseModal();
|
|
272
264
|
}, [handleCloseResponseModal, onReplaceContent, responseHtml]);
|
|
273
|
-
|
|
274
265
|
const sharkfin = () => {
|
|
275
266
|
return /*#__PURE__*/React.createElement("svg", {
|
|
276
267
|
width: "14",
|
|
@@ -288,14 +279,11 @@ export const AIToolsTray = _ref => {
|
|
|
288
279
|
strokeWidth: "2"
|
|
289
280
|
}));
|
|
290
281
|
};
|
|
291
|
-
|
|
292
282
|
const renderResponse = msgId => {
|
|
293
283
|
const message = chatMessagesRef.current.find(msg => msg.id === msgId);
|
|
294
|
-
|
|
295
284
|
if (!message) {
|
|
296
285
|
return /*#__PURE__*/React.createElement("span", null, formatMessage("I'm sorry, but I cannot find the AI's answer"));
|
|
297
286
|
}
|
|
298
|
-
|
|
299
287
|
const div = document.createElement('div');
|
|
300
288
|
div.innerHTML = message.message;
|
|
301
289
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -313,9 +301,9 @@ export const AIToolsTray = _ref => {
|
|
|
313
301
|
onClick: handleShowWholeResponse,
|
|
314
302
|
"data-message-id": msgId
|
|
315
303
|
}, formatMessage('Show all'))));
|
|
316
|
-
};
|
|
317
|
-
|
|
304
|
+
};
|
|
318
305
|
|
|
306
|
+
// TODO: should the response box get truncated?
|
|
319
307
|
const renderChatBox = (message, key) => {
|
|
320
308
|
return /*#__PURE__*/React.createElement("div", {
|
|
321
309
|
id: message.id,
|
|
@@ -346,11 +334,9 @@ export const AIToolsTray = _ref => {
|
|
|
346
334
|
top: '-18px',
|
|
347
335
|
// Adjust this value to position the sharkfin
|
|
348
336
|
left: '40px' // Adjust this value to align the sharkfin horizontally
|
|
349
|
-
|
|
350
337
|
}
|
|
351
338
|
}, sharkfin())), message.type === 'response' ?
|
|
352
339
|
/*#__PURE__*/
|
|
353
|
-
|
|
354
340
|
/* TODO: why is it to wide w/o maxWidth? */
|
|
355
341
|
React.createElement("div", {
|
|
356
342
|
style: {
|
|
@@ -394,12 +380,10 @@ export const AIToolsTray = _ref => {
|
|
|
394
380
|
size: "x-small"
|
|
395
381
|
}))) : null);
|
|
396
382
|
};
|
|
397
|
-
|
|
398
383
|
const renderChatMessages = () => {
|
|
399
384
|
const messages = chatMessagesRef.current.map(message => {
|
|
400
385
|
return renderChatBox(message, message.id);
|
|
401
386
|
});
|
|
402
|
-
|
|
403
387
|
if (waitingForResponse) {
|
|
404
388
|
messages.push(renderChatBox({
|
|
405
389
|
id: msgid(),
|
|
@@ -407,10 +391,8 @@ export const AIToolsTray = _ref => {
|
|
|
407
391
|
message: formatMessage('Waiting for response')
|
|
408
392
|
}, 'ai-waiting-message'));
|
|
409
393
|
}
|
|
410
|
-
|
|
411
394
|
return messages;
|
|
412
395
|
};
|
|
413
|
-
|
|
414
396
|
return /*#__PURE__*/React.createElement(Tray, {
|
|
415
397
|
contentRef: el => setTrayRef(el),
|
|
416
398
|
label: "AIToolsTray",
|
|
@@ -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
|
// @ts-expect-error
|
|
19
20
|
import { IconCopyLine, IconRefreshLine } from '@instructure/ui-icons/es/svg';
|
|
20
21
|
const AIWandSVG = `<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
export * from './aiicons';
|
|
19
20
|
export * from './AIToolsTray';
|
|
20
21
|
export * from './AIResponseModal';
|
|
@@ -18,14 +18,12 @@
|
|
|
18
18
|
import { ICON_MAKER_PARAM } from '../instructure_icon_maker/svg/constants';
|
|
19
19
|
export default function buildDownloadUrl(url) {
|
|
20
20
|
let downloadUrl;
|
|
21
|
-
|
|
22
21
|
try {
|
|
23
22
|
downloadUrl = new URL(url);
|
|
24
23
|
} catch (e) {
|
|
25
24
|
// eslint-disable-next-line no-throw-literal
|
|
26
25
|
throw `Error parsing ${url}. 'buildDownloadUrl' only supports absolute URLs.`;
|
|
27
26
|
}
|
|
28
|
-
|
|
29
27
|
downloadUrl.searchParams.append(ICON_MAKER_PARAM, 1);
|
|
30
28
|
return downloadUrl.toString();
|
|
31
29
|
}
|