@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
package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2018 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,25 +16,24 @@
|
|
|
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 { isContentItemIframeJson, isContentItemThumbnailJson } from './Lti13ContentItemJson';
|
|
21
21
|
import { addParentFrameContextToUrl } from '../util/addParentFrameContextToUrl';
|
|
22
|
+
|
|
22
23
|
/**
|
|
23
24
|
* Represents an LTI 1.3 Deep Linking Content Item for purposes related to the Rich Content Editor.
|
|
24
25
|
*
|
|
25
26
|
* Use rceLti13ContentItemFromJson to create instances of this class.
|
|
26
27
|
*/
|
|
27
|
-
|
|
28
28
|
export class RceLti13ContentItem {
|
|
29
29
|
constructor(type, json, context) {
|
|
30
30
|
this.type = type;
|
|
31
31
|
this.json = json;
|
|
32
32
|
this.context = context;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
34
|
get untypedJson() {
|
|
36
35
|
return this.json;
|
|
37
36
|
}
|
|
38
|
-
|
|
39
37
|
linkThumbnail() {
|
|
40
38
|
if (isContentItemThumbnailJson(this.untypedJson.thumbnail)) {
|
|
41
39
|
const {
|
|
@@ -48,51 +46,39 @@ export class RceLti13ContentItem {
|
|
|
48
46
|
return this.imageTag(this.untypedJson.thumbnail);
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
|
-
|
|
52
49
|
iframeTag() {
|
|
53
50
|
const iframeInfo = this.untypedJson.iframe;
|
|
54
|
-
|
|
55
51
|
if (isContentItemIframeJson(iframeInfo)) {
|
|
56
52
|
var _addParentFrameContex, _this$context$ltiIfra;
|
|
57
|
-
|
|
58
53
|
const iframeTag = document.createElement('iframe');
|
|
59
54
|
iframeTag.setAttribute('src', (_addParentFrameContex = addParentFrameContextToUrl(iframeInfo.src, this.context.containingCanvasLtiToolId)) !== null && _addParentFrameContex !== void 0 ? _addParentFrameContex : '');
|
|
60
55
|
iframeTag.setAttribute('title', this.buildTitle() || '');
|
|
61
56
|
iframeTag.setAttribute('allowfullscreen', 'true');
|
|
62
57
|
iframeTag.setAttribute('allow', (_this$context$ltiIfra = this.context.ltiIframeAllowPolicy) !== null && _this$context$ltiIfra !== void 0 ? _this$context$ltiIfra : '');
|
|
63
|
-
|
|
64
58
|
if (iframeInfo.width) {
|
|
65
59
|
iframeTag.style.width = `${iframeInfo.width}px`;
|
|
66
60
|
}
|
|
67
|
-
|
|
68
61
|
if (iframeInfo.height) {
|
|
69
62
|
iframeTag.style.height = `${iframeInfo.height}px`;
|
|
70
63
|
}
|
|
71
|
-
|
|
72
64
|
return iframeTag.outerHTML;
|
|
73
65
|
}
|
|
74
66
|
}
|
|
75
|
-
|
|
76
67
|
imageTag(src, width, height) {
|
|
77
68
|
const imgTag = document.createElement('img');
|
|
78
69
|
imgTag.setAttribute('src', src);
|
|
79
70
|
const text = this.buildText();
|
|
80
|
-
|
|
81
71
|
if (text != null) {
|
|
82
72
|
imgTag.setAttribute('alt', text);
|
|
83
73
|
}
|
|
84
|
-
|
|
85
74
|
if (width) {
|
|
86
75
|
imgTag.setAttribute('width', width.toString());
|
|
87
76
|
}
|
|
88
|
-
|
|
89
77
|
if (height) {
|
|
90
78
|
imgTag.setAttribute('height', height.toString());
|
|
91
79
|
}
|
|
92
|
-
|
|
93
80
|
return imgTag.outerHTML;
|
|
94
81
|
}
|
|
95
|
-
|
|
96
82
|
anchorTag(innerHTML) {
|
|
97
83
|
const anchorTag = document.createElement('a');
|
|
98
84
|
anchorTag.setAttribute('href', this.safeUrl);
|
|
@@ -101,11 +87,8 @@ export class RceLti13ContentItem {
|
|
|
101
87
|
anchorTag.innerHTML = innerHTML || '';
|
|
102
88
|
return anchorTag.outerHTML;
|
|
103
89
|
}
|
|
104
|
-
|
|
105
90
|
get safeUrl() {
|
|
106
91
|
var _this$buildUrl;
|
|
107
|
-
|
|
108
92
|
return ((_this$buildUrl = this.buildUrl()) === null || _this$buildUrl === void 0 ? void 0 : _this$buildUrl.replace(/^(data:text\/html|javascript:)/, '#$1')) || '';
|
|
109
93
|
}
|
|
110
|
-
|
|
111
94
|
}
|
|
@@ -15,65 +15,52 @@
|
|
|
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
|
var _this$iframe;
|
|
23
|
-
|
|
24
24
|
if (((_this$iframe = this.iframe) === null || _this$iframe === void 0 ? void 0 : _this$iframe.src) != null) {
|
|
25
25
|
return this.iframeTag();
|
|
26
26
|
} else {
|
|
27
27
|
return this.anchorTag(this.linkBody());
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
|
|
31
30
|
linkText() {
|
|
32
31
|
var _this$buildText$trim, _this$buildText, _this$buildTitle$trim, _this$buildTitle;
|
|
33
|
-
|
|
34
32
|
const text = (_this$buildText$trim = (_this$buildText = this.buildText()) === null || _this$buildText === void 0 ? void 0 : _this$buildText.trim()) !== null && _this$buildText$trim !== void 0 ? _this$buildText$trim : '';
|
|
35
33
|
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 : '';
|
|
36
34
|
return text.length > 0 ? text : title.length > 0 ? title : undefined;
|
|
37
35
|
}
|
|
38
|
-
|
|
39
36
|
linkBody() {
|
|
40
37
|
if (this.thumbnail) {
|
|
41
38
|
return this.linkThumbnail();
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
return this.linkText();
|
|
45
41
|
}
|
|
46
|
-
|
|
47
42
|
buildText() {
|
|
48
43
|
return this.context.selection || this.json.text;
|
|
49
44
|
}
|
|
50
|
-
|
|
51
45
|
buildUrl() {
|
|
52
46
|
return this.json.url;
|
|
53
47
|
}
|
|
54
|
-
|
|
55
48
|
buildTitle() {
|
|
56
49
|
return this.json.title;
|
|
57
50
|
}
|
|
58
|
-
|
|
59
51
|
get icon() {
|
|
60
52
|
return this.json.icon;
|
|
61
53
|
}
|
|
62
|
-
|
|
63
54
|
get thumbnail() {
|
|
64
55
|
return this.json.thumbnail;
|
|
65
56
|
}
|
|
66
|
-
|
|
67
57
|
get iframe() {
|
|
68
58
|
return this.json.iframe;
|
|
69
59
|
}
|
|
70
|
-
|
|
71
60
|
get custom() {
|
|
72
61
|
return this.json.custom;
|
|
73
62
|
}
|
|
74
|
-
|
|
75
63
|
get lookup_uuid() {
|
|
76
64
|
return this.json.lookup_uuid;
|
|
77
65
|
}
|
|
78
|
-
|
|
79
66
|
}
|
|
@@ -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, _event$data$content_i, _event$data2, _event$data4;
|
|
26
|
-
|
|
24
|
+
var _event$data, _event$data$content_i, _event$data2, _event$data4, _event$data5, _event$data6;
|
|
27
25
|
const ltiEndpoint = (_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.ltiEndpoint;
|
|
28
26
|
const selection = env.editorSelection;
|
|
29
27
|
const eventContentItems = (_event$data$content_i = (_event$data2 = event.data) === null || _event$data2 === void 0 ? void 0 : _event$data2.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,10 +33,8 @@ 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
37
|
var _event$data3;
|
|
42
|
-
|
|
43
38
|
if ((_event$data3 = event.data) !== null && _event$data3 !== void 0 && _event$data3.replaceEditorContents) {
|
|
44
39
|
env.replaceCode(parsedItem.toHtmlString());
|
|
45
40
|
} else {
|
|
@@ -47,7 +42,6 @@ export default function processEditorContentItems(event, env, dialog) {
|
|
|
47
42
|
}
|
|
48
43
|
} else if (!unsupportedItemWarningShown) {
|
|
49
44
|
var _inputItem$type;
|
|
50
|
-
|
|
51
45
|
showFlashAlert({
|
|
52
46
|
message: formatMessage('Could not insert content: "{itemType}" items are not currently supported in Canvas.', {
|
|
53
47
|
itemType: (_inputItem$type = inputItem.type) !== null && _inputItem$type !== void 0 ? _inputItem$type : 'unknown'
|
|
@@ -57,12 +51,26 @@ export default function processEditorContentItems(event, env, dialog) {
|
|
|
57
51
|
});
|
|
58
52
|
unsupportedItemWarningShown = true;
|
|
59
53
|
}
|
|
60
|
-
}
|
|
61
|
-
|
|
54
|
+
}
|
|
62
55
|
|
|
56
|
+
// Remove "unsaved changes" warnings and close modal
|
|
63
57
|
if ((_event$data4 = event.data) !== null && _event$data4 !== void 0 && _event$data4.content_items) {
|
|
64
58
|
dialog === null || dialog === void 0 ? void 0 : dialog.close();
|
|
65
59
|
}
|
|
60
|
+
if (((_event$data5 = event.data) === null || _event$data5 === void 0 ? void 0 : _event$data5.msg) !== undefined) {
|
|
61
|
+
// @ts-expect-error
|
|
62
|
+
showFlashAlert({
|
|
63
|
+
message: event.data.msg.toString()
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// @ts-expect-error
|
|
67
|
+
if (((_event$data6 = event.data) === null || _event$data6 === void 0 ? void 0 : _event$data6.errormsg) !== undefined) {
|
|
68
|
+
// @ts-expect-error
|
|
69
|
+
showFlashAlert({
|
|
70
|
+
message: event.data.errormsg.toString(),
|
|
71
|
+
type: 'error'
|
|
72
|
+
});
|
|
73
|
+
}
|
|
66
74
|
} catch (e) {
|
|
67
75
|
showFlashAlert({
|
|
68
76
|
message: formatMessage('Failed to retrieve content from external tool'),
|
|
@@ -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,15 @@ 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];
|
|
35
|
+
// eslint-disable-next-line new-cap
|
|
36
36
|
return clazz ? new clazz(itemJson, context) : null;
|
|
37
37
|
}
|
|
38
|
+
|
|
38
39
|
/*
|
|
39
40
|
* Type safe registry of implementation of RceLti13ContentItem. Adding additional types to the Lti13ContentItemJson
|
|
40
41
|
* union will cause a compiler error if the implementations aren't added here as well.
|
|
41
42
|
*/
|
|
42
|
-
|
|
43
43
|
const typeRegistry = {
|
|
44
44
|
html: HtmlFragmentContentItem,
|
|
45
45
|
image: ImageContentItem,
|
|
@@ -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 tinymce from 'tinymce';
|
|
19
20
|
import React from 'react';
|
|
20
21
|
import ReactDOM from 'react-dom';
|
|
@@ -22,9 +23,11 @@ import { RceToolWrapper, buildToolMenuItems, externalToolsForToolbar } from './R
|
|
|
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
|
+
import { externalToolsEnvFor } from './ExternalToolsEnv';
|
|
26
27
|
|
|
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
81
|
e === null || e === void 0 ? void 0 : e.setAttribute('title', formatMessage('Apps'));
|
|
84
82
|
e === null || e === void 0 ? void 0 : 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
|
});
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
import ReactDOM from 'react-dom';
|
|
20
21
|
import bridge from '../../../../bridge';
|
|
@@ -29,71 +30,54 @@ export default class TrayController {
|
|
|
29
30
|
this._editor = null;
|
|
30
31
|
this._audioContainer = null;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
33
|
get container() {
|
|
34
34
|
let _container = document.getElementById(CONTAINER_ID);
|
|
35
|
-
|
|
36
35
|
if (_container == null) {
|
|
37
36
|
_container = document.createElement('div');
|
|
38
37
|
_container.id = CONTAINER_ID;
|
|
39
38
|
document.body.appendChild(_container);
|
|
40
39
|
}
|
|
41
|
-
|
|
42
40
|
return _container;
|
|
43
41
|
}
|
|
44
|
-
|
|
45
42
|
get isOpen() {
|
|
46
43
|
return this._isOpen;
|
|
47
44
|
}
|
|
48
|
-
|
|
49
45
|
showTrayForEditor(editor) {
|
|
50
46
|
this._shouldOpen = true;
|
|
51
47
|
this._editor = editor;
|
|
52
48
|
this._audioContainer = findMediaPlayerIframe(editor.selection.getNode());
|
|
53
|
-
|
|
54
49
|
if (bridge.focusedEditor) {
|
|
55
50
|
// Dismiss any content trays that may already be open
|
|
56
51
|
bridge.hideTrays();
|
|
57
52
|
}
|
|
58
|
-
|
|
59
53
|
const trayProps = bridge.trayProps.get(editor);
|
|
60
|
-
|
|
61
54
|
this._renderTray(trayProps);
|
|
62
55
|
}
|
|
63
|
-
|
|
64
56
|
hideTrayForEditor(editor) {
|
|
65
57
|
if (this._editor === editor) {
|
|
66
58
|
this._dismissTray();
|
|
67
59
|
}
|
|
68
60
|
}
|
|
69
|
-
|
|
70
61
|
_dismissTray() {
|
|
71
62
|
if (this._audioContainer) {
|
|
72
63
|
this._editor.selection.select(this._audioContainer);
|
|
73
64
|
}
|
|
74
|
-
|
|
75
65
|
this._resetController();
|
|
76
66
|
}
|
|
77
|
-
|
|
78
67
|
_resetController() {
|
|
79
68
|
this._shouldOpen = false;
|
|
80
69
|
const trayProps = bridge.trayProps.get(this._editor);
|
|
81
|
-
|
|
82
70
|
this._renderTray(trayProps);
|
|
83
|
-
|
|
84
71
|
this._editor = null;
|
|
85
72
|
this._audioContainer = null;
|
|
86
73
|
const elem = document.getElementById(CONTAINER_ID);
|
|
87
74
|
return elem.parentNode.removeChild(elem);
|
|
88
75
|
}
|
|
89
|
-
|
|
90
76
|
_applyAudioOptions(audioOptions) {
|
|
91
77
|
const hasAttachmentId = RCEGlobals.getFeatures().media_links_use_attachment_id && audioOptions.attachment_id;
|
|
92
|
-
|
|
93
78
|
if (!hasAttachmentId && (!audioOptions.media_object_id || audioOptions.media_object_id === 'undefined')) {
|
|
94
79
|
return;
|
|
95
80
|
}
|
|
96
|
-
|
|
97
81
|
const container = this._audioContainer;
|
|
98
82
|
return audioOptions.updateMediaObject({
|
|
99
83
|
media_object_id: audioOptions.media_object_id,
|
|
@@ -104,18 +88,14 @@ export default class TrayController {
|
|
|
104
88
|
console.error('Failed updating audio captions', ex);
|
|
105
89
|
});
|
|
106
90
|
}
|
|
107
|
-
|
|
108
91
|
requestSubtitlesFromIframe(cb) {
|
|
109
92
|
var _this$_audioContainer, _this$_audioContainer2;
|
|
110
|
-
|
|
111
93
|
if (!bridge.canvasOrigin) return;
|
|
112
94
|
this._subtitleListener = new AbortController();
|
|
113
95
|
window.addEventListener('message', event => {
|
|
114
96
|
var _event$data;
|
|
115
|
-
|
|
116
97
|
if ((event === null || event === void 0 ? void 0 : (_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.subject) === 'media_tracks_response') {
|
|
117
98
|
var _event$data2;
|
|
118
|
-
|
|
119
99
|
cb(event === null || event === void 0 ? void 0 : (_event$data2 = event.data) === null || _event$data2 === void 0 ? void 0 : _event$data2.payload);
|
|
120
100
|
}
|
|
121
101
|
}, {
|
|
@@ -125,7 +105,6 @@ export default class TrayController {
|
|
|
125
105
|
subject: 'media_tracks_request'
|
|
126
106
|
}, bridge.canvasOrigin);
|
|
127
107
|
}
|
|
128
|
-
|
|
129
108
|
_renderTray(trayProps) {
|
|
130
109
|
const audioOptions = asAudioElement(this._audioContainer) || {};
|
|
131
110
|
const element = /*#__PURE__*/React.createElement(AudioOptionsTray, {
|
|
@@ -135,14 +114,12 @@ export default class TrayController {
|
|
|
135
114
|
},
|
|
136
115
|
onExited: () => {
|
|
137
116
|
var _this$_subtitleListen;
|
|
138
|
-
|
|
139
117
|
bridge.focusActiveEditor(false);
|
|
140
118
|
this._isOpen = false;
|
|
141
119
|
(_this$_subtitleListen = this._subtitleListener) === null || _this$_subtitleListen === void 0 ? void 0 : _this$_subtitleListen.abort();
|
|
142
120
|
},
|
|
143
121
|
onSave: options => {
|
|
144
122
|
this._applyAudioOptions(options);
|
|
145
|
-
|
|
146
123
|
this._dismissTray();
|
|
147
124
|
},
|
|
148
125
|
onDismiss: () => this._dismissTray(),
|
|
@@ -152,5 +129,4 @@ export default class TrayController {
|
|
|
152
129
|
});
|
|
153
130
|
ReactDOM.render(element, this.container);
|
|
154
131
|
}
|
|
155
|
-
|
|
156
132
|
}
|
|
@@ -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, useEffect } from 'react';
|
|
19
20
|
import { arrayOf, bool, func, shape, string } from 'prop-types';
|
|
20
21
|
import { Flex } from '@instructure/ui-flex';
|
|
@@ -28,9 +29,7 @@ import formatMessage from '../../../../format-message';
|
|
|
28
29
|
import { getTrayHeight } from '../../shared/trayUtils';
|
|
29
30
|
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
30
31
|
import { Heading } from '@instructure/ui-heading';
|
|
31
|
-
|
|
32
32
|
const getLiveRegion = () => document.getElementById('flash_screenreader_holder');
|
|
33
|
-
|
|
34
33
|
export default function AudioOptionsTray(_ref) {
|
|
35
34
|
let {
|
|
36
35
|
open,
|
|
@@ -46,7 +45,6 @@ export default function AudioOptionsTray(_ref) {
|
|
|
46
45
|
useEffect(() => {
|
|
47
46
|
if (subtitles.length === 0) requestSubtitlesFromIframe(setSubtitles);
|
|
48
47
|
}, []);
|
|
49
|
-
|
|
50
48
|
const handleSave = (e, contentProps) => {
|
|
51
49
|
onSave({
|
|
52
50
|
media_object_id: audioOptions.id,
|
|
@@ -55,7 +53,6 @@ export default function AudioOptionsTray(_ref) {
|
|
|
55
53
|
updateMediaObject: contentProps.updateMediaObject
|
|
56
54
|
});
|
|
57
55
|
};
|
|
58
|
-
|
|
59
56
|
return /*#__PURE__*/React.createElement(StoreProvider, trayProps, contentProps => /*#__PURE__*/React.createElement(Tray, {
|
|
60
57
|
key: "audio-options-tray",
|
|
61
58
|
"data-mce-component": true,
|