@instructure/canvas-rce 5.14.1 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
1
2
|
// @ts-nocheck
|
|
2
|
-
|
|
3
3
|
/*
|
|
4
4
|
* Copyright (C) 2018 - present Instructure, Inc.
|
|
5
5
|
*
|
|
@@ -17,25 +17,24 @@
|
|
|
17
17
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
18
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
19
|
*/
|
|
20
|
+
|
|
20
21
|
import { isContentItemIframeJson, isContentItemThumbnailJson } from './Lti13ContentItemJson';
|
|
21
22
|
import { addParentFrameContextToUrl } from '../util/addParentFrameContextToUrl';
|
|
23
|
+
|
|
22
24
|
/**
|
|
23
25
|
* Represents an LTI 1.3 Deep Linking Content Item for purposes related to the Rich Content Editor.
|
|
24
26
|
*
|
|
25
27
|
* Use rceLti13ContentItemFromJson to create instances of this class.
|
|
26
28
|
*/
|
|
27
|
-
|
|
28
29
|
export class RceLti13ContentItem {
|
|
29
30
|
constructor(type, json, context) {
|
|
30
31
|
this.type = type;
|
|
31
32
|
this.json = json;
|
|
32
33
|
this.context = context;
|
|
33
34
|
}
|
|
34
|
-
|
|
35
35
|
get untypedJson() {
|
|
36
36
|
return this.json;
|
|
37
37
|
}
|
|
38
|
-
|
|
39
38
|
linkThumbnail() {
|
|
40
39
|
if (isContentItemThumbnailJson(this.untypedJson.thumbnail)) {
|
|
41
40
|
const {
|
|
@@ -48,51 +47,39 @@ export class RceLti13ContentItem {
|
|
|
48
47
|
return this.imageTag(this.untypedJson.thumbnail);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
|
-
|
|
52
50
|
iframeTag() {
|
|
53
51
|
const iframeInfo = this.untypedJson.iframe;
|
|
54
|
-
|
|
55
52
|
if (isContentItemIframeJson(iframeInfo)) {
|
|
56
53
|
var _addParentFrameContex, _this$context$ltiIfra;
|
|
57
|
-
|
|
58
54
|
const iframeTag = document.createElement('iframe');
|
|
59
55
|
iframeTag.setAttribute('src', (_addParentFrameContex = addParentFrameContextToUrl(iframeInfo.src, this.context.containingCanvasLtiToolId)) !== null && _addParentFrameContex !== void 0 ? _addParentFrameContex : '');
|
|
60
56
|
iframeTag.setAttribute('title', this.buildTitle() || '');
|
|
61
57
|
iframeTag.setAttribute('allowfullscreen', 'true');
|
|
62
58
|
iframeTag.setAttribute('allow', (_this$context$ltiIfra = this.context.ltiIframeAllowPolicy) !== null && _this$context$ltiIfra !== void 0 ? _this$context$ltiIfra : '');
|
|
63
|
-
|
|
64
59
|
if (iframeInfo.width) {
|
|
65
60
|
iframeTag.style.width = `${iframeInfo.width}px`;
|
|
66
61
|
}
|
|
67
|
-
|
|
68
62
|
if (iframeInfo.height) {
|
|
69
63
|
iframeTag.style.height = `${iframeInfo.height}px`;
|
|
70
64
|
}
|
|
71
|
-
|
|
72
65
|
return iframeTag.outerHTML;
|
|
73
66
|
}
|
|
74
67
|
}
|
|
75
|
-
|
|
76
68
|
imageTag(src, width, height) {
|
|
77
69
|
const imgTag = document.createElement('img');
|
|
78
70
|
imgTag.setAttribute('src', src);
|
|
79
71
|
const text = this.buildText();
|
|
80
|
-
|
|
81
72
|
if (text != null) {
|
|
82
73
|
imgTag.setAttribute('alt', text);
|
|
83
74
|
}
|
|
84
|
-
|
|
85
75
|
if (width) {
|
|
86
76
|
imgTag.setAttribute('width', width.toString());
|
|
87
77
|
}
|
|
88
|
-
|
|
89
78
|
if (height) {
|
|
90
79
|
imgTag.setAttribute('height', height.toString());
|
|
91
80
|
}
|
|
92
|
-
|
|
93
81
|
return imgTag.outerHTML;
|
|
94
82
|
}
|
|
95
|
-
|
|
96
83
|
anchorTag(innerHTML) {
|
|
97
84
|
const anchorTag = document.createElement('a');
|
|
98
85
|
anchorTag.setAttribute('href', this.safeUrl);
|
|
@@ -101,11 +88,7 @@ export class RceLti13ContentItem {
|
|
|
101
88
|
anchorTag.innerHTML = innerHTML || '';
|
|
102
89
|
return anchorTag.outerHTML;
|
|
103
90
|
}
|
|
104
|
-
|
|
105
91
|
get safeUrl() {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return ((_this$buildUrl = this.buildUrl()) === null || _this$buildUrl === void 0 ? void 0 : _this$buildUrl.replace(/^(data:text\/html|javascript:)/, '#$1')) || '';
|
|
92
|
+
return this.buildUrl()?.replace(/^(data:text\/html|javascript:)/, '#$1') || '';
|
|
109
93
|
}
|
|
110
|
-
|
|
111
94
|
}
|
|
@@ -15,65 +15,51 @@
|
|
|
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 { RceLti13ContentItem } from '../RceLti13ContentItem';
|
|
19
20
|
// Base content item type
|
|
20
21
|
export default class BaseLinkContentItem extends RceLti13ContentItem {
|
|
21
22
|
toHtmlString() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (((_this$iframe = this.iframe) === null || _this$iframe === void 0 ? void 0 : _this$iframe.src) != null) {
|
|
23
|
+
if (this.iframe?.src != null) {
|
|
25
24
|
return this.iframeTag();
|
|
26
25
|
} else {
|
|
27
26
|
return this.anchorTag(this.linkBody());
|
|
28
27
|
}
|
|
29
28
|
}
|
|
30
|
-
|
|
31
29
|
linkText() {
|
|
32
|
-
var _this$buildText$trim, _this$
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
const title = (_this$buildTitle$trim = (_this$buildTitle = this.buildTitle()) === null || _this$buildTitle === void 0 ? void 0 : _this$buildTitle.trim()) !== null && _this$buildTitle$trim !== void 0 ? _this$buildTitle$trim : '';
|
|
30
|
+
var _this$buildText$trim, _this$buildTitle$trim;
|
|
31
|
+
const text = (_this$buildText$trim = this.buildText()?.trim()) !== null && _this$buildText$trim !== void 0 ? _this$buildText$trim : '';
|
|
32
|
+
const title = (_this$buildTitle$trim = this.buildTitle()?.trim()) !== null && _this$buildTitle$trim !== void 0 ? _this$buildTitle$trim : '';
|
|
36
33
|
return text.length > 0 ? text : title.length > 0 ? title : undefined;
|
|
37
34
|
}
|
|
38
|
-
|
|
39
35
|
linkBody() {
|
|
40
36
|
if (this.thumbnail) {
|
|
41
37
|
return this.linkThumbnail();
|
|
42
38
|
}
|
|
43
|
-
|
|
44
39
|
return this.linkText();
|
|
45
40
|
}
|
|
46
|
-
|
|
47
41
|
buildText() {
|
|
48
42
|
return this.context.selection || this.json.text;
|
|
49
43
|
}
|
|
50
|
-
|
|
51
44
|
buildUrl() {
|
|
52
45
|
return this.json.url;
|
|
53
46
|
}
|
|
54
|
-
|
|
55
47
|
buildTitle() {
|
|
56
48
|
return this.json.title;
|
|
57
49
|
}
|
|
58
|
-
|
|
59
50
|
get icon() {
|
|
60
51
|
return this.json.icon;
|
|
61
52
|
}
|
|
62
|
-
|
|
63
53
|
get thumbnail() {
|
|
64
54
|
return this.json.thumbnail;
|
|
65
55
|
}
|
|
66
|
-
|
|
67
56
|
get iframe() {
|
|
68
57
|
return this.json.iframe;
|
|
69
58
|
}
|
|
70
|
-
|
|
71
59
|
get custom() {
|
|
72
60
|
return this.json.custom;
|
|
73
61
|
}
|
|
74
|
-
|
|
75
62
|
get lookup_uuid() {
|
|
76
63
|
return this.json.lookup_uuid;
|
|
77
64
|
}
|
|
78
|
-
|
|
79
65
|
}
|
|
@@ -15,33 +15,28 @@
|
|
|
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 { RceLti13ContentItem } from '../RceLti13ContentItem';
|
|
19
20
|
export default class HtmlFragmentContentItem extends RceLti13ContentItem {
|
|
20
21
|
constructor(json, context) {
|
|
21
22
|
super(HtmlFragmentContentItem.type, json, context);
|
|
22
23
|
}
|
|
23
|
-
|
|
24
24
|
get html() {
|
|
25
25
|
return this.json.html;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
27
|
buildTitle() {
|
|
29
28
|
return this.json.title;
|
|
30
29
|
}
|
|
31
|
-
|
|
32
30
|
buildText() {
|
|
33
31
|
return this.json.text;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
33
|
buildUrl() {
|
|
37
34
|
return undefined;
|
|
38
35
|
}
|
|
39
|
-
|
|
40
36
|
toHtmlString() {
|
|
41
37
|
// TinyMCE takes care of sanitizing this HTML string.
|
|
42
38
|
// If using a target other than TinyMCE be sure to sanitize.
|
|
43
39
|
return this.html;
|
|
44
40
|
}
|
|
45
|
-
|
|
46
41
|
}
|
|
47
42
|
HtmlFragmentContentItem.type = 'html';
|
package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js
CHANGED
|
@@ -15,43 +15,35 @@
|
|
|
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 { RceLti13ContentItem } from '../RceLti13ContentItem';
|
|
19
20
|
export default class ImageContentItem extends RceLti13ContentItem {
|
|
20
21
|
constructor(json, context) {
|
|
21
22
|
super(ImageContentItem.type, json, context);
|
|
22
23
|
}
|
|
23
|
-
|
|
24
24
|
buildUrl() {
|
|
25
25
|
return this.json.url;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
27
|
buildTitle() {
|
|
29
28
|
return this.json.title;
|
|
30
29
|
}
|
|
31
|
-
|
|
32
30
|
get thumbnail() {
|
|
33
31
|
return this.json.thumbnail;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
33
|
buildText() {
|
|
37
34
|
return this.json.text;
|
|
38
35
|
}
|
|
39
|
-
|
|
40
36
|
get width() {
|
|
41
37
|
return this.json.width;
|
|
42
38
|
}
|
|
43
|
-
|
|
44
39
|
get height() {
|
|
45
40
|
return this.json.height;
|
|
46
41
|
}
|
|
47
|
-
|
|
48
42
|
toHtmlString() {
|
|
49
43
|
if (this.thumbnail) {
|
|
50
44
|
return this.anchorTag(this.linkThumbnail());
|
|
51
45
|
}
|
|
52
|
-
|
|
53
46
|
return this.imageTag(this.safeUrl, this.width, this.height);
|
|
54
47
|
}
|
|
55
|
-
|
|
56
48
|
}
|
|
57
49
|
ImageContentItem.type = 'image';
|
package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js
CHANGED
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import BaseLinkContentItem from './BaseLinkContentItem';
|
|
19
20
|
// Base content item type
|
|
20
21
|
export default class LinkContentItem extends BaseLinkContentItem {
|
|
21
22
|
constructor(json, context) {
|
|
22
23
|
super(LinkContentItem.type, json, context);
|
|
23
24
|
}
|
|
24
|
-
|
|
25
25
|
}
|
|
26
26
|
LinkContentItem.type = 'link';
|
|
@@ -15,14 +15,14 @@
|
|
|
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 BaseLinkContentItem from './BaseLinkContentItem';
|
|
19
20
|
import { addQueryParamsToUrl } from '../../../../../util/url-util';
|
|
20
|
-
import {
|
|
21
|
+
import { parentFrameContextParam } from '../../constants';
|
|
21
22
|
export default class ResourceLinkContentItem extends BaseLinkContentItem {
|
|
22
23
|
constructor(json, context) {
|
|
23
24
|
super(ResourceLinkContentItem.type, json, context);
|
|
24
25
|
}
|
|
25
|
-
|
|
26
26
|
toHtmlString() {
|
|
27
27
|
if (this.iframe != null) {
|
|
28
28
|
// The iframe src must always be the Canvas launch endpoint
|
|
@@ -32,16 +32,14 @@ export default class ResourceLinkContentItem extends BaseLinkContentItem {
|
|
|
32
32
|
return this.anchorTag(this.linkBody());
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
|
|
36
35
|
buildUrl() {
|
|
37
36
|
// iframed launches need canvas wrapped around them for postMessages to work
|
|
38
37
|
const display = this.iframe != null ? 'in_rce' : 'borderless';
|
|
39
38
|
return addQueryParamsToUrl(this.context.ltiEndpoint, {
|
|
40
39
|
display,
|
|
41
40
|
resource_link_lookup_uuid: this.lookup_uuid,
|
|
42
|
-
[
|
|
41
|
+
[parentFrameContextParam]: this.context.containingCanvasLtiToolId
|
|
43
42
|
});
|
|
44
43
|
}
|
|
45
|
-
|
|
46
44
|
}
|
|
47
45
|
ResourceLinkContentItem.type = 'ltiResourceLink';
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2018 - present Instructure, Inc.
|
|
5
3
|
*
|
|
@@ -17,18 +15,17 @@
|
|
|
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 { rceLti13ContentItemFromJson } from './rceLti13ContentItemFromJson';
|
|
21
20
|
import { showFlashAlert } from '../../../../common/FlashAlert';
|
|
22
21
|
import formatMessage from '../../../../format-message';
|
|
23
22
|
export default function processEditorContentItems(event, env, dialog) {
|
|
24
23
|
try {
|
|
25
|
-
var _event$data
|
|
26
|
-
|
|
27
|
-
const ltiEndpoint = (_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.ltiEndpoint;
|
|
24
|
+
var _event$data$content_i;
|
|
25
|
+
const ltiEndpoint = event.data?.ltiEndpoint;
|
|
28
26
|
const selection = env.editorSelection;
|
|
29
|
-
const eventContentItems = (_event$data$content_i =
|
|
27
|
+
const eventContentItems = (_event$data$content_i = event.data?.content_items) !== null && _event$data$content_i !== void 0 ? _event$data$content_i : [];
|
|
30
28
|
let unsupportedItemWarningShown = false;
|
|
31
|
-
|
|
32
29
|
for (const inputItem of eventContentItems) {
|
|
33
30
|
const parsedItem = rceLti13ContentItemFromJson(inputItem, {
|
|
34
31
|
ltiEndpoint: ltiEndpoint !== null && ltiEndpoint !== void 0 ? ltiEndpoint : null,
|
|
@@ -36,18 +33,14 @@ export default function processEditorContentItems(event, env, dialog) {
|
|
|
36
33
|
containingCanvasLtiToolId: env.containingCanvasLtiToolId,
|
|
37
34
|
ltiIframeAllowPolicy: env.ltiIframeAllowPolicy
|
|
38
35
|
});
|
|
39
|
-
|
|
40
36
|
if (parsedItem != null) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if ((_event$data3 = event.data) !== null && _event$data3 !== void 0 && _event$data3.replaceEditorContents) {
|
|
37
|
+
if (event.data?.replaceEditorContents) {
|
|
44
38
|
env.replaceCode(parsedItem.toHtmlString());
|
|
45
39
|
} else {
|
|
46
40
|
env.insertCode(parsedItem.toHtmlString());
|
|
47
41
|
}
|
|
48
42
|
} else if (!unsupportedItemWarningShown) {
|
|
49
43
|
var _inputItem$type;
|
|
50
|
-
|
|
51
44
|
showFlashAlert({
|
|
52
45
|
message: formatMessage('Could not insert content: "{itemType}" items are not currently supported in Canvas.', {
|
|
53
46
|
itemType: (_inputItem$type = inputItem.type) !== null && _inputItem$type !== void 0 ? _inputItem$type : 'unknown'
|
|
@@ -57,11 +50,25 @@ export default function processEditorContentItems(event, env, dialog) {
|
|
|
57
50
|
});
|
|
58
51
|
unsupportedItemWarningShown = true;
|
|
59
52
|
}
|
|
60
|
-
}
|
|
61
|
-
|
|
53
|
+
}
|
|
62
54
|
|
|
63
|
-
|
|
64
|
-
|
|
55
|
+
// Remove "unsaved changes" warnings and close modal
|
|
56
|
+
if (event.data?.content_items) {
|
|
57
|
+
dialog?.close();
|
|
58
|
+
}
|
|
59
|
+
if (event.data?.msg !== undefined) {
|
|
60
|
+
// @ts-expect-error
|
|
61
|
+
showFlashAlert({
|
|
62
|
+
message: event.data.msg.toString()
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// @ts-expect-error
|
|
66
|
+
if (event.data?.errormsg !== undefined) {
|
|
67
|
+
// @ts-expect-error
|
|
68
|
+
showFlashAlert({
|
|
69
|
+
message: event.data.errormsg.toString(),
|
|
70
|
+
type: 'error'
|
|
71
|
+
});
|
|
65
72
|
}
|
|
66
73
|
} catch (e) {
|
|
67
74
|
showFlashAlert({
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import HtmlFragmentContentItem from './models/HtmlFragmentContentItem';
|
|
19
20
|
import ImageContentItem from './models/ImageContentItem';
|
|
20
21
|
import LinkContentItem from './models/LinkContentItem';
|
|
21
22
|
import ResourceLinkContentItem from './models/ResourceLinkContentItem';
|
|
22
|
-
|
|
23
23
|
/**
|
|
24
24
|
* Creates an RceLti13ContentItem from the given JSON, or null if the type isn't supported.
|
|
25
25
|
*
|
|
@@ -31,15 +31,14 @@ import ResourceLinkContentItem from './models/ResourceLinkContentItem';
|
|
|
31
31
|
*/
|
|
32
32
|
export function rceLti13ContentItemFromJson(itemJson, context) {
|
|
33
33
|
if (!itemJson.type) return null;
|
|
34
|
-
const clazz = typeRegistry[itemJson.type];
|
|
35
|
-
|
|
34
|
+
const clazz = typeRegistry[itemJson.type];
|
|
36
35
|
return clazz ? new clazz(itemJson, context) : null;
|
|
37
36
|
}
|
|
37
|
+
|
|
38
38
|
/*
|
|
39
39
|
* Type safe registry of implementation of RceLti13ContentItem. Adding additional types to the Lti13ContentItemJson
|
|
40
40
|
* union will cause a compiler error if the implementations aren't added here as well.
|
|
41
41
|
*/
|
|
42
|
-
|
|
43
42
|
const typeRegistry = {
|
|
44
43
|
html: HtmlFragmentContentItem,
|
|
45
44
|
image: ImageContentItem,
|
|
@@ -15,16 +15,19 @@
|
|
|
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 tinymce from 'tinymce';
|
|
19
20
|
import React from 'react';
|
|
20
21
|
import ReactDOM from 'react-dom';
|
|
21
|
-
import { RceToolWrapper, buildToolMenuItems
|
|
22
|
+
import { RceToolWrapper, buildToolMenuItems } from './RceToolWrapper';
|
|
22
23
|
import formatMessage from '../../../format-message';
|
|
23
24
|
import { ExternalToolSelectionDialog } from './components/ExternalToolSelectionDialog/ExternalToolSelectionDialog';
|
|
24
25
|
import { ensureToolDialogContainerElem } from './dialog-helper';
|
|
25
|
-
import { externalToolsEnvFor } from './ExternalToolsEnv';
|
|
26
|
-
|
|
26
|
+
import { externalToolsEnvFor } from './ExternalToolsEnv';
|
|
27
|
+
import { externalToolsForToolbar } from './util/externalToolsForToolbar';
|
|
28
|
+
// Register plugin
|
|
27
29
|
tinymce.PluginManager.add('instructure_rce_external_tools', initExternalToolsLocalPlugin);
|
|
30
|
+
|
|
28
31
|
/**
|
|
29
32
|
* This plugin adds the "Apps" toolbar button and the "Apps" menu item. It is a rewrite of 'instructure_external_tools'
|
|
30
33
|
* to live fully in the canvas-rce package. It supports running in an iframe as part of an LTI tool, such as
|
|
@@ -32,20 +35,18 @@ tinymce.PluginManager.add('instructure_rce_external_tools', initExternalToolsLoc
|
|
|
32
35
|
*
|
|
33
36
|
* @param editor
|
|
34
37
|
*/
|
|
35
|
-
|
|
36
38
|
export function initExternalToolsLocalPlugin(editor) {
|
|
37
39
|
if (RceToolWrapper.forEditorEnv(externalToolsEnvFor(editor)).length === 0) {
|
|
38
40
|
return;
|
|
39
41
|
}
|
|
40
|
-
|
|
41
42
|
registerFavoriteAppsToolbarButtons(editor);
|
|
42
43
|
registerAppsToolbarButton(editor);
|
|
43
44
|
registerAppsMenu(editor);
|
|
44
45
|
}
|
|
46
|
+
|
|
45
47
|
/**
|
|
46
48
|
* Add the "Apps" toolbar button with "View all" and MRU buttons
|
|
47
49
|
*/
|
|
48
|
-
|
|
49
50
|
function registerAppsMenu(editor) {
|
|
50
51
|
editor.ui.registry.addNestedMenuItem('lti_tools_menuitem', {
|
|
51
52
|
text: formatMessage('Apps'),
|
|
@@ -57,16 +58,14 @@ function registerAppsMenu(editor) {
|
|
|
57
58
|
}
|
|
58
59
|
});
|
|
59
60
|
}
|
|
61
|
+
|
|
60
62
|
/**
|
|
61
63
|
* Registers toolbar buttons for favorite apps
|
|
62
64
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
65
|
function registerFavoriteAppsToolbarButtons(editor) {
|
|
66
66
|
const allTools = RceToolWrapper.forEditorEnv(externalToolsEnvFor(editor));
|
|
67
67
|
externalToolsForToolbar(allTools).forEach(toolInfo => editor.ui.registry.addButton(`instructure_external_button_${toolInfo.id}`, toolInfo.asToolbarButton()));
|
|
68
68
|
}
|
|
69
|
-
|
|
70
69
|
function registerAppsToolbarButton(editor) {
|
|
71
70
|
const tooltip = 'apps-temp';
|
|
72
71
|
editor.ui.registry.addMenuButton('lti_mru_button', {
|
|
@@ -77,40 +76,32 @@ function registerAppsToolbarButton(editor) {
|
|
|
77
76
|
const toolMenuItems = buildToolMenuItems(availableTools, makeViewAllItem(editor));
|
|
78
77
|
callback(toolMenuItems);
|
|
79
78
|
},
|
|
80
|
-
|
|
81
79
|
onSetup(_api) {
|
|
82
80
|
const e = document.querySelector("button[title='apps-temp']");
|
|
83
|
-
e
|
|
84
|
-
e
|
|
81
|
+
e?.setAttribute('title', formatMessage('Apps'));
|
|
82
|
+
e?.setAttribute('id', 'plug-apps-button');
|
|
85
83
|
return () => undefined;
|
|
86
84
|
}
|
|
87
|
-
|
|
88
85
|
});
|
|
89
86
|
}
|
|
90
|
-
|
|
91
87
|
function openToolSelectionDialog(editor) {
|
|
92
88
|
const availableTools = RceToolWrapper.forEditorEnv(externalToolsEnvFor(editor));
|
|
93
89
|
const container = ensureToolDialogContainerElem();
|
|
94
|
-
|
|
95
90
|
const handleDismiss = () => {
|
|
96
91
|
ReactDOM.unmountComponentAtNode(container);
|
|
97
92
|
editor.focus();
|
|
98
93
|
};
|
|
99
|
-
|
|
100
|
-
ReactDOM.render( /*#__PURE__*/React.createElement(ExternalToolSelectionDialog, {
|
|
94
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(ExternalToolSelectionDialog, {
|
|
101
95
|
onDismiss: handleDismiss,
|
|
102
96
|
ltiButtons: availableTools
|
|
103
97
|
}), ensureToolDialogContainerElem());
|
|
104
98
|
}
|
|
105
|
-
|
|
106
99
|
function makeViewAllItem(editor) {
|
|
107
100
|
return {
|
|
108
101
|
type: 'menuitem',
|
|
109
102
|
text: formatMessage('View All'),
|
|
110
|
-
|
|
111
103
|
onAction() {
|
|
112
104
|
openToolSelectionDialog(editor);
|
|
113
105
|
}
|
|
114
|
-
|
|
115
106
|
};
|
|
116
107
|
}
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import { addQueryParamsToUrl } from '../../../../util/url-util';
|
|
19
20
|
export function addParentFrameContextToUrl(inputUrlStr, containingCanvasLtiToolId) {
|
|
20
21
|
if (containingCanvasLtiToolId == null || containingCanvasLtiToolId.length === 0) {
|
|
21
22
|
return inputUrlStr !== null && inputUrlStr !== void 0 ? inputUrlStr : null;
|
|
22
23
|
}
|
|
23
|
-
|
|
24
24
|
return addQueryParamsToUrl(inputUrlStr, {
|
|
25
25
|
parent_frame_context: containingCanvasLtiToolId
|
|
26
26
|
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2025 - 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
|
+
export function externalToolsForToolbar(tools) {
|
|
20
|
+
// Limit of not on_by_default but favorited tools is 2
|
|
21
|
+
const favorited = tools.filter(it => it.favorite && !it.on_by_default).slice(0, 2) || [];
|
|
22
|
+
const onByDefault = tools.filter(it => it.on_by_default && it.favorite) || [];
|
|
23
|
+
const set = new Map();
|
|
24
|
+
// Remove possible overlaps between favorited and onByDefault, otherwise
|
|
25
|
+
// we'd have duplicate buttons in the toolbar.
|
|
26
|
+
for (const toolInfo of favorited.concat(onByDefault)) {
|
|
27
|
+
set.set(toolInfo.id, toolInfo);
|
|
28
|
+
}
|
|
29
|
+
return Array.from(set.values()).sort((a, b) => {
|
|
30
|
+
if (a.on_by_default && !b.on_by_default) {
|
|
31
|
+
return -1;
|
|
32
|
+
} else if (!a.on_by_default && b.on_by_default) {
|
|
33
|
+
return 1;
|
|
34
|
+
} else {
|
|
35
|
+
// This *should* always be a string, but there might be cases where it isn't,
|
|
36
|
+
// especially when this method is used outside of TypeScript files.
|
|
37
|
+
return a.id.toString().localeCompare(b.id.toString(), undefined, {
|
|
38
|
+
numeric: true
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|