@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,10 +1,7 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
|
-
/* eslint-disable */
|
|
4
2
|
// @ts-nocheck
|
|
5
3
|
// TODO: we get complaints about <Overlay> because it can be either a Modal or a Tray
|
|
6
4
|
// and they have different props. I don't have time to fix this the right way now.
|
|
7
|
-
|
|
8
5
|
/*
|
|
9
6
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
10
7
|
*
|
|
@@ -22,6 +19,7 @@ import _pt from "prop-types";
|
|
|
22
19
|
* You should have received a copy of the GNU Affero General Public License along
|
|
23
20
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
24
21
|
*/
|
|
22
|
+
|
|
25
23
|
import { replaceTags } from '../../helpers/tags';
|
|
26
24
|
import React, { createRef } from 'react';
|
|
27
25
|
import { Alert } from '@instructure/ui-alerts';
|
|
@@ -50,44 +48,37 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
50
48
|
this.beforeInfoAlertRef = /*#__PURE__*/createRef();
|
|
51
49
|
this.afterInfoAlertRef = /*#__PURE__*/createRef();
|
|
52
50
|
this.iframeRef = /*#__PURE__*/createRef();
|
|
53
|
-
|
|
54
51
|
this.handleBeforeUnload = ev => ev.returnValue = formatMessage('Changes you made may not be saved.');
|
|
55
|
-
|
|
56
52
|
this.handleExternalContentReady = data => {
|
|
57
|
-
const env = this.props.env;
|
|
53
|
+
const env = this.props.env;
|
|
54
|
+
|
|
55
|
+
// a2DataReady listener will insert the data to the editor,
|
|
58
56
|
// So only close the modal is needed, only if assignments_2_student flag is enabled,
|
|
59
57
|
// is readable by current user and it is a student assignment view.
|
|
60
|
-
|
|
61
58
|
if (env.isA2StudentView) {
|
|
62
59
|
this.close();
|
|
63
60
|
return;
|
|
64
61
|
}
|
|
65
|
-
|
|
66
62
|
const contentItems = data.contentItems;
|
|
67
|
-
|
|
68
63
|
if (contentItems.length === 1 && contentItems[0]['@type'] === 'lti_replace') {
|
|
69
64
|
var _env$rceWrapper;
|
|
70
|
-
|
|
71
65
|
const code = contentItems[0].text;
|
|
72
66
|
(_env$rceWrapper = env.rceWrapper) === null || _env$rceWrapper === void 0 ? void 0 : _env$rceWrapper.setCode(code);
|
|
73
67
|
} else {
|
|
74
68
|
contentItems.forEach(contentData => {
|
|
75
69
|
var _env$rceWrapper2;
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
const code = RceLti11ContentItem.fromJSON({
|
|
71
|
+
...contentData,
|
|
78
72
|
class: 'lti-embed'
|
|
79
73
|
}, env).codePayload;
|
|
80
74
|
(_env$rceWrapper2 = env.rceWrapper) === null || _env$rceWrapper2 === void 0 ? void 0 : _env$rceWrapper2.insertCode(code);
|
|
81
75
|
});
|
|
82
76
|
}
|
|
83
|
-
|
|
84
77
|
this.close();
|
|
85
78
|
};
|
|
86
|
-
|
|
87
79
|
this.handlePostedMessage = ev => {
|
|
88
80
|
if (ev.origin === this.resourceSelectionOrigin) {
|
|
89
81
|
const data = ev.data;
|
|
90
|
-
|
|
91
82
|
if ((data === null || data === void 0 ? void 0 : data.subject) === 'LtiDeepLinkingResponse') {
|
|
92
83
|
processEditorContentItems(ev, this.props.env, this);
|
|
93
84
|
} else if ((data === null || data === void 0 ? void 0 : data.subject) === 'externalContentReady') {
|
|
@@ -98,53 +89,43 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
98
89
|
}
|
|
99
90
|
}
|
|
100
91
|
};
|
|
101
|
-
|
|
102
92
|
this.handleClose = () => {
|
|
103
|
-
const msg = formatMessage('Are you sure you want to cancel? Changes you made may not be saved.');
|
|
104
|
-
|
|
93
|
+
const msg = formatMessage('Are you sure you want to cancel? Changes you made may not be saved.');
|
|
94
|
+
// eslint-disable-next-line no-alert
|
|
105
95
|
if (window.confirm(msg)) {
|
|
106
96
|
this.close();
|
|
107
97
|
}
|
|
108
98
|
};
|
|
109
|
-
|
|
110
99
|
this.handleOpen = () => {
|
|
111
100
|
var _this$formRef$current;
|
|
112
|
-
|
|
113
101
|
if (this.state.open) (_this$formRef$current = this.formRef.current) === null || _this$formRef$current === void 0 ? void 0 : _this$formRef$current.submit();
|
|
114
102
|
};
|
|
115
|
-
|
|
116
103
|
this.handleRemove = () => {
|
|
117
104
|
var _this$props$env$edito;
|
|
118
|
-
|
|
119
105
|
this.setState({
|
|
120
106
|
button: null
|
|
121
107
|
});
|
|
122
|
-
(_this$props$env$edito = this.props.env.editor) === null || _this$props$env$edito === void 0 ? void 0 : _this$props$env$edito.focus();
|
|
108
|
+
(_this$props$env$edito = this.props.env.editor) === null || _this$props$env$edito === void 0 ? void 0 : _this$props$env$edito.focus();
|
|
123
109
|
|
|
110
|
+
// force tinyMCE to redraw sticky toolbar otherwise it never goes away
|
|
124
111
|
window.dispatchEvent(new Event('resize'));
|
|
125
112
|
};
|
|
126
|
-
|
|
127
113
|
this.handleInfoAlertFocus = ev => this.setState({
|
|
128
114
|
infoAlert: ev.target
|
|
129
115
|
});
|
|
130
|
-
|
|
131
116
|
this.handleInfoAlertBlur = () => this.setState({
|
|
132
117
|
infoAlert: null
|
|
133
118
|
});
|
|
134
|
-
|
|
135
119
|
this.calcIFrameHeight = () => {
|
|
136
120
|
var _this$state$button, _this$state$button2;
|
|
137
|
-
|
|
138
121
|
if ((_this$state$button = this.state.button) !== null && _this$state$button !== void 0 && _this$state$button.use_tray) {
|
|
139
122
|
return '100%';
|
|
140
123
|
}
|
|
141
|
-
|
|
142
124
|
const toolDefinedHeight = (_this$state$button2 = this.state.button) === null || _this$state$button2 === void 0 ? void 0 : _this$state$button2.height;
|
|
143
125
|
const iFrameHeight = toolDefinedHeight !== null && toolDefinedHeight !== void 0 ? toolDefinedHeight : Math.max(Math.min(window.innerHeight - 100, 550), 100);
|
|
144
126
|
const modalMaxHeight = '95';
|
|
145
127
|
const modalHeaderHeightWithPadding = '5.5rem';
|
|
146
128
|
const complexHeightWithDVH = `min(${iFrameHeight}px, calc(${modalMaxHeight}dvh - ${modalHeaderHeightWithPadding}))`;
|
|
147
|
-
|
|
148
129
|
if (CSS.supports('height', complexHeightWithDVH)) {
|
|
149
130
|
return complexHeightWithDVH;
|
|
150
131
|
} else {
|
|
@@ -152,10 +133,8 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
152
133
|
}
|
|
153
134
|
};
|
|
154
135
|
}
|
|
155
|
-
|
|
156
136
|
open(button) {
|
|
157
137
|
var _env$editorSelection, _env$editorContent;
|
|
158
|
-
|
|
159
138
|
const {
|
|
160
139
|
env,
|
|
161
140
|
resourceSelectionUrlOverride
|
|
@@ -163,12 +142,11 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
163
142
|
let urlStr = replaceTags(resourceSelectionUrlOverride, 'id', button.id);
|
|
164
143
|
const selection = (_env$editorSelection = env === null || env === void 0 ? void 0 : env.editorSelection) !== null && _env$editorSelection !== void 0 ? _env$editorSelection : '';
|
|
165
144
|
const contents = (_env$editorContent = env === null || env === void 0 ? void 0 : env.editorContent) !== null && _env$editorContent !== void 0 ? _env$editorContent : '';
|
|
166
|
-
|
|
167
145
|
if (urlStr == null) {
|
|
168
146
|
// if we don't have a url on the page, build one using the current context.
|
|
169
147
|
// url should look like: /courses/2/external_tools/15/resource_selection?editor=1
|
|
170
|
-
const contextAssetInfo = env.contextAssetInfo;
|
|
171
148
|
|
|
149
|
+
const contextAssetInfo = env.contextAssetInfo;
|
|
172
150
|
if (contextAssetInfo == null) {
|
|
173
151
|
showFlashAlert({
|
|
174
152
|
message: formatMessage('Unable to determine resource selection url'),
|
|
@@ -177,7 +155,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
177
155
|
});
|
|
178
156
|
return;
|
|
179
157
|
}
|
|
180
|
-
|
|
181
158
|
const {
|
|
182
159
|
contextType,
|
|
183
160
|
contextId
|
|
@@ -185,7 +162,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
185
162
|
const canvasOrigin = env.canvasOrigin;
|
|
186
163
|
urlStr = `${canvasOrigin}/${contextType}s/${contextId}/external_tools/${encodeURIComponent(button.id)}/resource_selection`;
|
|
187
164
|
}
|
|
188
|
-
|
|
189
165
|
this.setState({
|
|
190
166
|
open: true,
|
|
191
167
|
button,
|
|
@@ -199,7 +175,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
199
175
|
window.addEventListener('beforeunload', this.handleBeforeUnload);
|
|
200
176
|
window.addEventListener('message', this.handlePostedMessage);
|
|
201
177
|
}
|
|
202
|
-
|
|
203
178
|
close() {
|
|
204
179
|
window.removeEventListener('beforeunload', this.handleBeforeUnload);
|
|
205
180
|
window.removeEventListener('message', this.handlePostedMessage);
|
|
@@ -208,22 +183,17 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
208
183
|
form: EMPTY_FORM
|
|
209
184
|
});
|
|
210
185
|
}
|
|
211
|
-
|
|
212
186
|
get resourceSelectionOrigin() {
|
|
213
187
|
if (this.props.resourceSelectionUrlOverride) {
|
|
214
188
|
const resourceSelectionUrl = parseUrlOrNull(this.props.resourceSelectionUrlOverride);
|
|
215
|
-
|
|
216
189
|
if (resourceSelectionUrl != null) {
|
|
217
190
|
return resourceSelectionUrl.origin;
|
|
218
191
|
}
|
|
219
192
|
}
|
|
220
|
-
|
|
221
193
|
return this.props.env.canvasOrigin;
|
|
222
194
|
}
|
|
223
|
-
|
|
224
195
|
render() {
|
|
225
196
|
var _state$button, _props$env$rceWrapper, _props$env$rceWrapper2, _state$button$title, _state$button2, _state$button3, _state$button$width, _state$button4;
|
|
226
|
-
|
|
227
197
|
const state = this.state;
|
|
228
198
|
const props = this.props;
|
|
229
199
|
const label = formatMessage('Embed content from External Tool');
|
|
@@ -315,7 +285,6 @@ export default class ExternalToolDialog extends React.Component {
|
|
|
315
285
|
margin: "small"
|
|
316
286
|
}, formatMessage('The preceding content is partner provided')))));
|
|
317
287
|
}
|
|
318
|
-
|
|
319
288
|
}
|
|
320
289
|
ExternalToolDialog.propTypes = {
|
|
321
290
|
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';
|
|
@@ -32,9 +31,9 @@ import { Alert } from '@instructure/ui-alerts';
|
|
|
32
31
|
import formatMessage from '../../../../../format-message';
|
|
33
32
|
import ExternalToolSelectionItem from './ExternalToolSelectionItem';
|
|
34
33
|
import { instuiPopupMountNode } from '../../../../../util/fullscreenHelpers';
|
|
35
|
-
|
|
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,21 @@ 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
57
|
var _e$target;
|
|
63
|
-
|
|
64
58
|
setFilterTerm((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.value);
|
|
65
59
|
setFilteredResults(filterItemsByTitleSubstring(e.target.value, props.ltiButtons));
|
|
66
60
|
};
|
|
67
|
-
|
|
68
61
|
const filterEmpty = filteredResults.length <= 0;
|
|
69
62
|
return /*#__PURE__*/React.createElement(Modal, {
|
|
70
63
|
"data-mce-component": true,
|
|
@@ -125,7 +118,6 @@ export function ExternalToolSelectionDialog(props) {
|
|
|
125
118
|
onClick: props.onDismiss,
|
|
126
119
|
color: "primary"
|
|
127
120
|
}, formatMessage('Done'))));
|
|
128
|
-
|
|
129
121
|
function renderTools(ltiButtons) {
|
|
130
122
|
return /*#__PURE__*/React.createElement(List, {
|
|
131
123
|
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,44 @@
|
|
|
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
41
|
var _dialogRef$current;
|
|
26
|
-
|
|
27
42
|
(_dialogRef$current = dialogRef.current) === null || _dialogRef$current === void 0 ? void 0 : _dialogRef$current.open(toolHelper);
|
|
28
43
|
});
|
|
29
44
|
}
|
|
@@ -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 => {
|