@instructure/canvas-rce 5.14.1 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
|
-
/* eslint-disable */
|
|
4
|
-
// @ts-nocheck
|
|
5
2
|
// TODO: we get complaints about <Overlay> because it can be either a Modal or a Tray
|
|
6
3
|
// and they have different props. I don't have time to fix this the right way now.
|
|
7
|
-
|
|
8
4
|
/*
|
|
9
5
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
10
6
|
*
|
|
@@ -22,6 +18,7 @@ import _pt from "prop-types";
|
|
|
22
18
|
* You should have received a copy of the GNU Affero General Public License along
|
|
23
19
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
24
20
|
*/
|
|
21
|
+
|
|
25
22
|
import { replaceTags } from '../../helpers/tags';
|
|
26
23
|
import React, { createRef } from 'react';
|
|
27
24
|
import { Alert } from '@instructure/ui-alerts';
|
|
@@ -31,14 +28,14 @@ import ToolLaunchIframe from '../util/ToolLaunchIframe';
|
|
|
31
28
|
import processEditorContentItems from '../../lti13-content-items/processEditorContentItems';
|
|
32
29
|
import { RceLti11ContentItem } from '../../lti11-content-items/RceLti11ContentItem';
|
|
33
30
|
import formatMessage from '../../../../../format-message';
|
|
34
|
-
import {
|
|
31
|
+
import { instuiPopupMountNodeFn } from '../../../../../util/fullscreenHelpers';
|
|
35
32
|
import { ExternalToolDialogTray } from './ExternalToolDialogTray';
|
|
36
33
|
import { ExternalToolDialogModal } from './ExternalToolDialogModal';
|
|
37
34
|
import { showFlashAlert } from '../../../../../common/FlashAlert';
|
|
38
35
|
import { parseUrlOrNull } from '../../../../../util/url-util';
|
|
39
36
|
export default class ExternalToolDialog extends React.Component {
|
|
40
|
-
constructor() {
|
|
41
|
-
super(...
|
|
37
|
+
constructor(...args) {
|
|
38
|
+
super(...args);
|
|
42
39
|
this.state = {
|
|
43
40
|
open: false,
|
|
44
41
|
button: null,
|
|
@@ -50,47 +47,42 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
50
47
|
this.beforeInfoAlertRef = /*#__PURE__*/createRef();
|
|
51
48
|
this.afterInfoAlertRef = /*#__PURE__*/createRef();
|
|
52
49
|
this.iframeRef = /*#__PURE__*/createRef();
|
|
53
|
-
|
|
54
50
|
this.handleBeforeUnload = ev => ev.returnValue = formatMessage('Changes you made may not be saved.');
|
|
55
|
-
|
|
56
51
|
this.handleExternalContentReady = data => {
|
|
57
|
-
const env = this.props.env;
|
|
52
|
+
const env = this.props.env;
|
|
53
|
+
|
|
54
|
+
// a2DataReady listener will insert the data to the editor,
|
|
58
55
|
// So only close the modal is needed, only if assignments_2_student flag is enabled,
|
|
59
56
|
// is readable by current user and it is a student assignment view.
|
|
60
|
-
|
|
61
57
|
if (env.isA2StudentView) {
|
|
62
58
|
this.close();
|
|
63
59
|
return;
|
|
64
60
|
}
|
|
65
|
-
|
|
66
61
|
const contentItems = data.contentItems;
|
|
67
|
-
|
|
68
62
|
if (contentItems.length === 1 && contentItems[0]['@type'] === 'lti_replace') {
|
|
69
|
-
var _env$rceWrapper;
|
|
70
|
-
|
|
71
63
|
const code = contentItems[0].text;
|
|
72
|
-
|
|
64
|
+
|
|
65
|
+
// @ts-expect-error
|
|
66
|
+
env.rceWrapper?.setCode(code);
|
|
73
67
|
} else {
|
|
74
68
|
contentItems.forEach(contentData => {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const code = RceLti11ContentItem.fromJSON({ ...contentData,
|
|
69
|
+
const code = RceLti11ContentItem.fromJSON({
|
|
70
|
+
...contentData,
|
|
78
71
|
class: 'lti-embed'
|
|
79
72
|
}, env).codePayload;
|
|
80
|
-
|
|
73
|
+
|
|
74
|
+
// @ts-expect-error
|
|
75
|
+
env.rceWrapper?.insertCode(code);
|
|
81
76
|
});
|
|
82
77
|
}
|
|
83
|
-
|
|
84
78
|
this.close();
|
|
85
79
|
};
|
|
86
|
-
|
|
87
80
|
this.handlePostedMessage = ev => {
|
|
88
81
|
if (ev.origin === this.resourceSelectionOrigin) {
|
|
89
82
|
const data = ev.data;
|
|
90
|
-
|
|
91
|
-
if ((data === null || data === void 0 ? void 0 : data.subject) === 'LtiDeepLinkingResponse') {
|
|
83
|
+
if (data?.subject === 'LtiDeepLinkingResponse') {
|
|
92
84
|
processEditorContentItems(ev, this.props.env, this);
|
|
93
|
-
} else if (
|
|
85
|
+
} else if (data?.subject === 'externalContentReady') {
|
|
94
86
|
// 'externalContentReady' is EXTERNAL_CONTENT_READY in
|
|
95
87
|
// ui/shared/external-tools/externalContentEvents.ts
|
|
96
88
|
// where events are also described/used
|
|
@@ -98,53 +90,39 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
98
90
|
}
|
|
99
91
|
}
|
|
100
92
|
};
|
|
101
|
-
|
|
102
93
|
this.handleClose = () => {
|
|
103
|
-
const msg = formatMessage('Are you sure you want to cancel? Changes you made may not be saved.');
|
|
104
|
-
|
|
94
|
+
const msg = formatMessage('Are you sure you want to cancel? Changes you made may not be saved.');
|
|
105
95
|
if (window.confirm(msg)) {
|
|
106
96
|
this.close();
|
|
107
97
|
}
|
|
108
98
|
};
|
|
109
|
-
|
|
110
99
|
this.handleOpen = () => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (this.state.open) (_this$formRef$current = this.formRef.current) === null || _this$formRef$current === void 0 ? void 0 : _this$formRef$current.submit();
|
|
100
|
+
if (this.state.open) this.formRef.current?.submit();
|
|
114
101
|
};
|
|
115
|
-
|
|
116
102
|
this.handleRemove = () => {
|
|
117
|
-
var _this$props$env$edito;
|
|
118
|
-
|
|
119
103
|
this.setState({
|
|
120
104
|
button: null
|
|
121
105
|
});
|
|
122
|
-
|
|
106
|
+
this.props.env.editor?.focus();
|
|
123
107
|
|
|
108
|
+
// force tinyMCE to redraw sticky toolbar otherwise it never goes away
|
|
124
109
|
window.dispatchEvent(new Event('resize'));
|
|
125
110
|
};
|
|
126
|
-
|
|
127
111
|
this.handleInfoAlertFocus = ev => this.setState({
|
|
128
112
|
infoAlert: ev.target
|
|
129
113
|
});
|
|
130
|
-
|
|
131
114
|
this.handleInfoAlertBlur = () => this.setState({
|
|
132
115
|
infoAlert: null
|
|
133
116
|
});
|
|
134
|
-
|
|
135
117
|
this.calcIFrameHeight = () => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if ((_this$state$button = this.state.button) !== null && _this$state$button !== void 0 && _this$state$button.use_tray) {
|
|
118
|
+
if (this.state.button?.use_tray) {
|
|
139
119
|
return '100%';
|
|
140
120
|
}
|
|
141
|
-
|
|
142
|
-
const toolDefinedHeight = (_this$state$button2 = this.state.button) === null || _this$state$button2 === void 0 ? void 0 : _this$state$button2.height;
|
|
121
|
+
const toolDefinedHeight = this.state.button?.height;
|
|
143
122
|
const iFrameHeight = toolDefinedHeight !== null && toolDefinedHeight !== void 0 ? toolDefinedHeight : Math.max(Math.min(window.innerHeight - 100, 550), 100);
|
|
144
123
|
const modalMaxHeight = '95';
|
|
145
124
|
const modalHeaderHeightWithPadding = '5.5rem';
|
|
146
125
|
const complexHeightWithDVH = `min(${iFrameHeight}px, calc(${modalMaxHeight}dvh - ${modalHeaderHeightWithPadding}))`;
|
|
147
|
-
|
|
148
126
|
if (CSS.supports('height', complexHeightWithDVH)) {
|
|
149
127
|
return complexHeightWithDVH;
|
|
150
128
|
} else {
|
|
@@ -152,23 +130,20 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
152
130
|
}
|
|
153
131
|
};
|
|
154
132
|
}
|
|
155
|
-
|
|
156
133
|
open(button) {
|
|
157
134
|
var _env$editorSelection, _env$editorContent;
|
|
158
|
-
|
|
159
135
|
const {
|
|
160
136
|
env,
|
|
161
137
|
resourceSelectionUrlOverride
|
|
162
138
|
} = this.props;
|
|
163
139
|
let urlStr = replaceTags(resourceSelectionUrlOverride, 'id', button.id);
|
|
164
|
-
const selection = (_env$editorSelection = env
|
|
165
|
-
const contents = (_env$editorContent = env
|
|
166
|
-
|
|
140
|
+
const selection = (_env$editorSelection = env?.editorSelection) !== null && _env$editorSelection !== void 0 ? _env$editorSelection : '';
|
|
141
|
+
const contents = (_env$editorContent = env?.editorContent) !== null && _env$editorContent !== void 0 ? _env$editorContent : '';
|
|
167
142
|
if (urlStr == null) {
|
|
168
143
|
// if we don't have a url on the page, build one using the current context.
|
|
169
144
|
// url should look like: /courses/2/external_tools/15/resource_selection?editor=1
|
|
170
|
-
const contextAssetInfo = env.contextAssetInfo;
|
|
171
145
|
|
|
146
|
+
const contextAssetInfo = env.contextAssetInfo;
|
|
172
147
|
if (contextAssetInfo == null) {
|
|
173
148
|
showFlashAlert({
|
|
174
149
|
message: formatMessage('Unable to determine resource selection url'),
|
|
@@ -177,7 +152,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
177
152
|
});
|
|
178
153
|
return;
|
|
179
154
|
}
|
|
180
|
-
|
|
181
155
|
const {
|
|
182
156
|
contextType,
|
|
183
157
|
contextId
|
|
@@ -185,7 +159,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
185
159
|
const canvasOrigin = env.canvasOrigin;
|
|
186
160
|
urlStr = `${canvasOrigin}/${contextType}s/${contextId}/external_tools/${encodeURIComponent(button.id)}/resource_selection`;
|
|
187
161
|
}
|
|
188
|
-
|
|
189
162
|
this.setState({
|
|
190
163
|
open: true,
|
|
191
164
|
button,
|
|
@@ -199,7 +172,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
199
172
|
window.addEventListener('beforeunload', this.handleBeforeUnload);
|
|
200
173
|
window.addEventListener('message', this.handlePostedMessage);
|
|
201
174
|
}
|
|
202
|
-
|
|
203
175
|
close() {
|
|
204
176
|
window.removeEventListener('beforeunload', this.handleBeforeUnload);
|
|
205
177
|
window.removeEventListener('message', this.handlePostedMessage);
|
|
@@ -208,26 +180,21 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
208
180
|
form: EMPTY_FORM
|
|
209
181
|
});
|
|
210
182
|
}
|
|
211
|
-
|
|
212
183
|
get resourceSelectionOrigin() {
|
|
213
184
|
if (this.props.resourceSelectionUrlOverride) {
|
|
214
185
|
const resourceSelectionUrl = parseUrlOrNull(this.props.resourceSelectionUrlOverride);
|
|
215
|
-
|
|
216
186
|
if (resourceSelectionUrl != null) {
|
|
217
187
|
return resourceSelectionUrl.origin;
|
|
218
188
|
}
|
|
219
189
|
}
|
|
220
|
-
|
|
221
190
|
return this.props.env.canvasOrigin;
|
|
222
191
|
}
|
|
223
|
-
|
|
224
192
|
render() {
|
|
225
|
-
var _state$button
|
|
226
|
-
|
|
193
|
+
var _state$button$title, _state$button$width;
|
|
227
194
|
const state = this.state;
|
|
228
195
|
const props = this.props;
|
|
229
196
|
const label = formatMessage('Embed content from External Tool');
|
|
230
|
-
const Overlay =
|
|
197
|
+
const Overlay = state.button?.use_tray ? ExternalToolDialogTray : ExternalToolDialogModal;
|
|
231
198
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("form", {
|
|
232
199
|
ref: this.formRef,
|
|
233
200
|
method: "POST",
|
|
@@ -250,24 +217,28 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
250
217
|
value: state.form.contents
|
|
251
218
|
}), /*#__PURE__*/React.createElement("input", {
|
|
252
219
|
type: "hidden",
|
|
253
|
-
name: "com_instructure_course_canvas_resource_type"
|
|
254
|
-
|
|
220
|
+
name: "com_instructure_course_canvas_resource_type"
|
|
221
|
+
// @ts-expect-error
|
|
222
|
+
,
|
|
223
|
+
value: props.env.rceWrapper?.getResourceIdentifiers().resourceType
|
|
255
224
|
}), /*#__PURE__*/React.createElement("input", {
|
|
256
225
|
type: "hidden",
|
|
257
|
-
name: "com_instructure_course_canvas_resource_id"
|
|
258
|
-
|
|
226
|
+
name: "com_instructure_course_canvas_resource_id"
|
|
227
|
+
// @ts-expect-error
|
|
228
|
+
,
|
|
229
|
+
value: props.env.rceWrapper?.getResourceIdentifiers().resourceId
|
|
259
230
|
}), state.form.parent_frame_context != null && /*#__PURE__*/React.createElement("input", {
|
|
260
231
|
type: "hidden",
|
|
261
232
|
name: "parent_frame_context",
|
|
262
233
|
value: state.form.parent_frame_context
|
|
263
234
|
})), /*#__PURE__*/React.createElement(Overlay, {
|
|
264
235
|
open: state.open,
|
|
265
|
-
mountNode:
|
|
236
|
+
mountNode: instuiPopupMountNodeFn(),
|
|
266
237
|
label: label,
|
|
267
238
|
onOpen: this.handleOpen,
|
|
268
239
|
onClose: this.handleRemove,
|
|
269
240
|
onCloseButton: this.handleClose,
|
|
270
|
-
name: (_state$button$title =
|
|
241
|
+
name: (_state$button$title = state.button?.title) !== null && _state$button$title !== void 0 ? _state$button$title : ' '
|
|
271
242
|
}, /*#__PURE__*/React.createElement("div", {
|
|
272
243
|
ref: this.beforeInfoAlertRef,
|
|
273
244
|
tabIndex: 0 // eslint-disable-line jsx-a11y/no-noninteractive-tabindex
|
|
@@ -292,7 +263,7 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
292
263
|
id: "external_tool_button_frame",
|
|
293
264
|
style: {
|
|
294
265
|
height: this.calcIFrameHeight(),
|
|
295
|
-
width:
|
|
266
|
+
width: state.button?.use_tray ? '100%' : (_state$button$width = state.button?.width) !== null && _state$button$width !== void 0 ? _state$button$width : 800,
|
|
296
267
|
border: '0',
|
|
297
268
|
display: 'block',
|
|
298
269
|
visibility: state.iframeLoaded ? 'visible' : 'hidden'
|
|
@@ -315,7 +286,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
315
286
|
margin: "small"
|
|
316
287
|
}, formatMessage('The preceding content is partner provided')))));
|
|
317
288
|
}
|
|
318
|
-
|
|
319
289
|
}
|
|
320
290
|
ExternalToolDialog.propTypes = {
|
|
321
291
|
iframeAllowances: _pt.string.isRequired,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
5
3
|
*
|
|
@@ -17,6 +15,7 @@
|
|
|
17
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
17
|
*/
|
|
18
|
+
|
|
20
19
|
import React from 'react';
|
|
21
20
|
import { Heading } from '@instructure/ui-heading';
|
|
22
21
|
import { CloseButton } from '@instructure/ui-buttons';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,6 +16,7 @@ import _pt from "prop-types";
|
|
|
17
16
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
17
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
18
|
*/
|
|
19
|
+
|
|
20
20
|
import React from 'react';
|
|
21
21
|
import { Tray } from '@instructure/ui-tray';
|
|
22
22
|
import { View } from '@instructure/ui-view';
|
|
@@ -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, { useState } from 'react';
|
|
22
21
|
import { Modal } from '@instructure/ui-modal';
|
|
23
22
|
import { Button, CloseButton } from '@instructure/ui-buttons';
|
|
@@ -31,10 +30,10 @@ import { IconSearchLine } from '@instructure/ui-icons';
|
|
|
31
30
|
import { Alert } from '@instructure/ui-alerts';
|
|
32
31
|
import formatMessage from '../../../../../format-message';
|
|
33
32
|
import ExternalToolSelectionItem from './ExternalToolSelectionItem';
|
|
34
|
-
import {
|
|
35
|
-
|
|
33
|
+
import { instuiPopupMountNodeFn } from '../../../../../util/fullscreenHelpers';
|
|
36
34
|
// TODO: we really need a way for the client to pass this to the RCE
|
|
37
35
|
const getLiveRegion = () => document.getElementById('flash_screenreader_holder');
|
|
36
|
+
|
|
38
37
|
/**
|
|
39
38
|
* Returns a filtered list of items based on the term.
|
|
40
39
|
*
|
|
@@ -44,27 +43,20 @@ const getLiveRegion = () => document.getElementById('flash_screenreader_holder')
|
|
|
44
43
|
* @param items objects to filter
|
|
45
44
|
* @return matching items if a non-blank search term is provided, otherwise a copy of the original list
|
|
46
45
|
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
46
|
export function filterItemsByTitleSubstring(searchString, items) {
|
|
50
47
|
if (searchString == null || searchString.length === 0) {
|
|
51
48
|
return items;
|
|
52
49
|
}
|
|
53
|
-
|
|
54
50
|
const lowerTerm = searchString.toLocaleLowerCase();
|
|
55
51
|
return items.filter(item => item.title.toLocaleLowerCase().includes(lowerTerm));
|
|
56
52
|
}
|
|
57
53
|
export function ExternalToolSelectionDialog(props) {
|
|
58
54
|
const [filterTerm, setFilterTerm] = useState('');
|
|
59
55
|
const [filteredResults, setFilteredResults] = useState(props.ltiButtons);
|
|
60
|
-
|
|
61
56
|
const handleFilterChange = e => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
setFilterTerm((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.value);
|
|
57
|
+
setFilterTerm(e.target?.value);
|
|
65
58
|
setFilteredResults(filterItemsByTitleSubstring(e.target.value, props.ltiButtons));
|
|
66
59
|
};
|
|
67
|
-
|
|
68
60
|
const filterEmpty = filteredResults.length <= 0;
|
|
69
61
|
return /*#__PURE__*/React.createElement(Modal, {
|
|
70
62
|
"data-mce-component": true,
|
|
@@ -74,7 +66,7 @@ export function ExternalToolSelectionDialog(props) {
|
|
|
74
66
|
mediumMaxWidth: '42rem'
|
|
75
67
|
},
|
|
76
68
|
label: formatMessage('Apps'),
|
|
77
|
-
mountNode:
|
|
69
|
+
mountNode: instuiPopupMountNodeFn(),
|
|
78
70
|
onDismiss: props.onDismiss,
|
|
79
71
|
open: true,
|
|
80
72
|
shouldCloseOnDocumentClick: false
|
|
@@ -125,7 +117,6 @@ export function ExternalToolSelectionDialog(props) {
|
|
|
125
117
|
onClick: props.onDismiss,
|
|
126
118
|
color: "primary"
|
|
127
119
|
}, formatMessage('Done'))));
|
|
128
|
-
|
|
129
120
|
function renderTools(ltiButtons) {
|
|
130
121
|
return /*#__PURE__*/React.createElement(List, {
|
|
131
122
|
isUnstyled: true
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2019 - 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, { useState } from 'react';
|
|
21
21
|
import { Text } from '@instructure/ui-text';
|
|
22
22
|
import { View } from '@instructure/ui-view';
|
|
@@ -65,7 +65,6 @@ export default function ExternalToolSelectionItem(props) {
|
|
|
65
65
|
}),
|
|
66
66
|
weight: "bold"
|
|
67
67
|
}, title))), renderDescription(description));
|
|
68
|
-
|
|
69
68
|
function renderDescription(desc) {
|
|
70
69
|
if (desc == null || desc === '') return null;
|
|
71
70
|
return /*#__PURE__*/React.createElement(View, {
|
|
@@ -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, { useState } from 'react';
|
|
19
20
|
import { css, StyleSheet } from 'aphrodite';
|
|
20
21
|
import { Text } from '@instructure/ui-text';
|
|
@@ -15,14 +15,15 @@
|
|
|
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 formatMessage from '../../../../../format-message';
|
|
21
|
+
|
|
20
22
|
/**
|
|
21
23
|
* Provide an iframe for launching an LTI tool directly from the frontend.
|
|
22
24
|
* Works just like all existing usages of the LTI <iframe> element, including
|
|
23
25
|
* extracting a ref of the <iframe> directly and setting things on it later.
|
|
24
26
|
*/
|
|
25
|
-
|
|
26
27
|
const ToolLaunchIframe = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
27
28
|
return /*#__PURE__*/React.createElement("iframe", Object.assign({
|
|
28
29
|
title: formatMessage('External tool frame'),
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2024 - present Instructure, Inc.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of Canvas.
|
|
5
|
+
*
|
|
6
|
+
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
+
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
+
* Software Foundation, version 3 of the License.
|
|
9
|
+
*
|
|
10
|
+
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
+
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
+
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
+
* details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
+
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Name of the parameter used to indicate to Canvas that it is being loaded in an iframe inside of an
|
|
21
|
+
* LTI tool. It should be set to the global id of the containing tool.
|
|
22
|
+
*/
|
|
23
|
+
export const parentFrameContextParam = 'parent_frame_context';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Fallback iframe allowances used when they aren't provided to the editor.
|
|
27
|
+
*/
|
|
28
|
+
export const fallbackIframeAllowances = ['geolocation *', 'microphone *', 'camera *', 'midi *', 'encrypted-media *', 'autoplay *', 'clipboard-write *', 'display-capture *'];
|
|
@@ -1,29 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2023 - present Instructure, Inc.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of Canvas.
|
|
5
|
+
*
|
|
6
|
+
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
+
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
+
* Software Foundation, version 3 of the License.
|
|
9
|
+
*
|
|
10
|
+
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
+
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
+
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
+
* details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
+
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
|
|
1
19
|
import ReactDOM from 'react-dom';
|
|
2
20
|
import ExternalToolDialog from './components/ExternalToolDialog/ExternalToolDialog';
|
|
3
21
|
import React, { createRef } from 'react';
|
|
4
22
|
const ensureToolDialogContainerId = 'external-tool-dialog-container';
|
|
5
23
|
export function ensureToolDialogContainerElem() {
|
|
6
24
|
let dialogContainer = document.getElementById(ensureToolDialogContainerId);
|
|
7
|
-
|
|
8
25
|
if (dialogContainer === null) {
|
|
9
26
|
dialogContainer = document.createElement('div');
|
|
10
27
|
dialogContainer.id = ensureToolDialogContainerId;
|
|
11
28
|
document.body.appendChild(dialogContainer);
|
|
12
29
|
}
|
|
13
|
-
|
|
14
30
|
return dialogContainer;
|
|
15
31
|
}
|
|
16
32
|
export function openToolDialogFor(toolHelper) {
|
|
17
33
|
const dialogRef = /*#__PURE__*/createRef();
|
|
18
34
|
const env = toolHelper.env;
|
|
19
|
-
ReactDOM.render(
|
|
35
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(ExternalToolDialog, {
|
|
20
36
|
ref: dialogRef,
|
|
21
37
|
env: env,
|
|
22
38
|
iframeAllowances: env.ltiIframeAllowPolicy,
|
|
23
39
|
resourceSelectionUrlOverride: env.resourceSelectionUrlOverride
|
|
24
40
|
}), ensureToolDialogContainerElem(), () => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(_dialogRef$current = dialogRef.current) === null || _dialogRef$current === void 0 ? void 0 : _dialogRef$current.open(toolHelper);
|
|
41
|
+
dialogRef.current?.open(toolHelper);
|
|
28
42
|
});
|
|
29
43
|
}
|
|
@@ -27,7 +27,6 @@ export function replaceOneTag(text, name, value) {
|
|
|
27
27
|
if (!text) {
|
|
28
28
|
return text;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
30
|
const strName = name !== null && name !== void 0 ? name : '';
|
|
32
31
|
const strValue = (value !== null && value !== void 0 ? value : '').replace(/\s/g, '+');
|
|
33
32
|
const itemExpression = new RegExp(`(%7B|{){2}[\\s|%20|\+]*${strName}[\\s|%20|\+]*(%7D|}){2}`, 'g');
|
|
@@ -42,7 +41,6 @@ export function replaceOneTag(text, name, value) {
|
|
|
42
41
|
* @param mappingOrName The mapping record or tag name
|
|
43
42
|
* @param maybeValue The value to replace with, if a single tag name was provided
|
|
44
43
|
*/
|
|
45
|
-
|
|
46
44
|
export function replaceTags(text, mappingOrName, maybeValue) {
|
|
47
45
|
if (typeof mappingOrName === 'object') {
|
|
48
46
|
Object.keys(mappingOrName).forEach(name => {
|