@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
|
@@ -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, { useRef } from 'react';
|
|
19
20
|
import { func, oneOf, shape, string } from 'prop-types';
|
|
20
21
|
import { contentTrayDocumentShape } from '../../shared/fileShape';
|
|
@@ -24,23 +25,18 @@ import { View } from '@instructure/ui-view';
|
|
|
24
25
|
import Link from '../../instructure_documents/components/Link';
|
|
25
26
|
import { LoadMoreButton, LoadingIndicator, LoadingStatus, useIncrementalLoading } from '../../../../common/incremental-loading';
|
|
26
27
|
const PENDING_MEDIA_ENTRY_ID = 'maybe';
|
|
27
|
-
|
|
28
28
|
function hasFiles(media) {
|
|
29
29
|
return media.files.length > 0;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
31
|
function isEmpty(media) {
|
|
33
32
|
return !hasFiles(media) && !media.hasMore && !media.isLoading;
|
|
34
33
|
}
|
|
35
|
-
|
|
36
34
|
function renderLinks(files, handleClick, lastItemRef) {
|
|
37
35
|
return files.map((f, index) => {
|
|
38
36
|
let focusRef = null;
|
|
39
|
-
|
|
40
37
|
if (index === files.length - 1) {
|
|
41
38
|
focusRef = lastItemRef;
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
return /*#__PURE__*/React.createElement(Link, Object.assign({
|
|
45
41
|
key: f.id
|
|
46
42
|
}, f, {
|
|
@@ -51,7 +47,6 @@ function renderLinks(files, handleClick, lastItemRef) {
|
|
|
51
47
|
}));
|
|
52
48
|
});
|
|
53
49
|
}
|
|
54
|
-
|
|
55
50
|
function renderLoadingError(_error) {
|
|
56
51
|
return /*#__PURE__*/React.createElement(View, {
|
|
57
52
|
as: "div",
|
|
@@ -61,7 +56,6 @@ function renderLoadingError(_error) {
|
|
|
61
56
|
color: "danger"
|
|
62
57
|
}, formatMessage('Loading failed.')));
|
|
63
58
|
}
|
|
64
|
-
|
|
65
59
|
export default function MediaPanel(props) {
|
|
66
60
|
const {
|
|
67
61
|
fetchInitialMedia,
|
|
@@ -89,11 +83,9 @@ export default function MediaPanel(props) {
|
|
|
89
83
|
sortBy,
|
|
90
84
|
searchString
|
|
91
85
|
});
|
|
92
|
-
|
|
93
86
|
const handleFileClick = file => {
|
|
94
87
|
props.onMediaEmbed(file);
|
|
95
88
|
};
|
|
96
|
-
|
|
97
89
|
return /*#__PURE__*/React.createElement(View, {
|
|
98
90
|
as: "div",
|
|
99
91
|
"data-testid": "instructure_links-MediaPanel"
|
|
@@ -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';
|
|
@@ -27,7 +28,6 @@ export const VIDEO_SIZE_DEFAULT = {
|
|
|
27
28
|
height: '225px',
|
|
28
29
|
width: '400px'
|
|
29
30
|
}; // AKA "LARGE"
|
|
30
|
-
|
|
31
31
|
export const AUDIO_PLAYER_SIZE = {
|
|
32
32
|
width: '320px',
|
|
33
33
|
height: '14.25rem'
|
|
@@ -39,77 +39,57 @@ export default class TrayController {
|
|
|
39
39
|
this._shouldOpen = false;
|
|
40
40
|
this._renderId = 0;
|
|
41
41
|
}
|
|
42
|
-
|
|
43
42
|
get $container() {
|
|
44
43
|
let $container = document.getElementById(CONTAINER_ID);
|
|
45
|
-
|
|
46
44
|
if ($container == null) {
|
|
47
45
|
$container = document.createElement('div');
|
|
48
46
|
$container.id = CONTAINER_ID;
|
|
49
47
|
document.body.appendChild($container);
|
|
50
48
|
}
|
|
51
|
-
|
|
52
49
|
return $container;
|
|
53
50
|
}
|
|
54
|
-
|
|
55
51
|
get isOpen() {
|
|
56
52
|
return this._isOpen;
|
|
57
53
|
}
|
|
58
|
-
|
|
59
54
|
showTrayForEditor(editor) {
|
|
60
55
|
this._editor = editor;
|
|
61
56
|
this.$videoContainer = findMediaPlayerIframe(editor.selection.getNode());
|
|
62
57
|
this._shouldOpen = true;
|
|
63
|
-
|
|
64
58
|
if (bridge.focusedEditor) {
|
|
65
59
|
// Dismiss any content trays that may already be open
|
|
66
60
|
bridge.hideTrays();
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
const trayProps = bridge.trayProps.get(editor);
|
|
70
|
-
|
|
71
63
|
this._renderTray(trayProps);
|
|
72
64
|
}
|
|
73
|
-
|
|
74
65
|
hideTrayForEditor(editor) {
|
|
75
66
|
if (this._editor === editor) {
|
|
76
67
|
this._dismissTray();
|
|
77
68
|
}
|
|
78
69
|
}
|
|
79
|
-
|
|
80
70
|
_applyVideoOptions(videoOptions) {
|
|
81
71
|
var _this$$videoContainer;
|
|
82
|
-
|
|
83
72
|
if (((_this$$videoContainer = this.$videoContainer) === null || _this$$videoContainer === void 0 ? void 0 : _this$$videoContainer.tagName) === 'IFRAME') {
|
|
84
73
|
const $tinymceIframeShim = this.$videoContainer.parentElement;
|
|
85
|
-
|
|
86
74
|
if (videoOptions.displayAs === 'embed') {
|
|
87
75
|
var _videoOptions$subtitl;
|
|
88
|
-
|
|
89
|
-
|
|
76
|
+
const isVertical = videoOptions.appliedHeight > videoOptions.appliedWidth;
|
|
77
|
+
// player v5 requires more space for the CC button
|
|
90
78
|
// TODO: remove when using v7
|
|
91
|
-
|
|
92
79
|
const minWidth = (_videoOptions$subtitl = videoOptions.subtitles) !== null && _videoOptions$subtitl !== void 0 && _videoOptions$subtitl.length ? 400 : 320;
|
|
93
80
|
const styl = {
|
|
94
81
|
height: `${videoOptions.appliedHeight}px`,
|
|
95
82
|
width: `${Math.max(minWidth, isVertical ? videoOptions.appliedHeight : videoOptions.appliedWidth)}px`
|
|
96
83
|
};
|
|
97
|
-
|
|
98
84
|
this._editor.dom.setStyles($tinymceIframeShim, styl);
|
|
99
|
-
|
|
100
85
|
this._editor.dom.setStyles(this.$videoContainer, styl);
|
|
101
|
-
|
|
102
86
|
const title = videoOptions.titleText;
|
|
103
|
-
|
|
104
87
|
this._editor.dom.setAttrib($tinymceIframeShim, 'data-mce-p-title', title);
|
|
105
|
-
|
|
106
88
|
this._editor.dom.setAttrib($tinymceIframeShim, 'data-mce-p-data-titleText', videoOptions.titleText);
|
|
107
|
-
|
|
108
89
|
this._editor.dom.setAttrib(this.$videoContainer, 'title', title);
|
|
90
|
+
this._editor.dom.setAttrib(this.$videoContainer, 'data-titleText', videoOptions.titleText);
|
|
109
91
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
92
|
+
// tell tinymce so the context toolbar resets
|
|
113
93
|
this._editor.fire('ObjectResized', {
|
|
114
94
|
target: this.$videoContainer,
|
|
115
95
|
width: videoOptions.appliedWidth,
|
|
@@ -117,37 +97,29 @@ export default class TrayController {
|
|
|
117
97
|
});
|
|
118
98
|
} else {
|
|
119
99
|
const href = this._editor.dom.getAttrib($tinymceIframeShim, 'data-mce-p-src');
|
|
120
|
-
|
|
121
100
|
const title = videoOptions.titleText || this._editor.dom.getAttrib(this.$videoContainer, 'title');
|
|
122
|
-
|
|
123
101
|
const link = document.createElement('a');
|
|
124
102
|
link.setAttribute('href', href);
|
|
125
103
|
link.setAttribute('target', '_blank');
|
|
126
104
|
link.setAttribute('rel', 'noreferrer noopener');
|
|
127
105
|
link.textContent = title;
|
|
128
|
-
|
|
129
106
|
this._editor.dom.replace(link, $tinymceIframeShim);
|
|
130
|
-
|
|
131
107
|
this._editor.selection.select(link);
|
|
132
|
-
|
|
133
108
|
this.$videoContainer = null;
|
|
134
109
|
}
|
|
135
|
-
|
|
136
110
|
const data = {
|
|
137
111
|
media_object_id: videoOptions.media_object_id,
|
|
138
112
|
title: videoOptions.titleText,
|
|
139
113
|
subtitles: videoOptions.subtitles
|
|
140
114
|
};
|
|
141
|
-
|
|
142
115
|
if (RCEGlobals.getFeatures().media_links_use_attachment_id) {
|
|
143
116
|
data.attachment_id = videoOptions.attachment_id;
|
|
144
|
-
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// If the video just edited came from a file uploaded to canvas
|
|
145
120
|
// and not notorious, we probably don't have a media_object_id.
|
|
146
121
|
// If not, we can't update the MediaObject in the canvas db.
|
|
147
|
-
|
|
148
|
-
|
|
149
122
|
const hasMediaId = videoOptions.media_object_id && videoOptions.media_object_id !== 'undefined' || data.attachment_id && data.attachment_id !== 'undefined';
|
|
150
|
-
|
|
151
123
|
if (hasMediaId && !videoOptions.editLocked) {
|
|
152
124
|
videoOptions.updateMediaObject(data).then(_r => {
|
|
153
125
|
if (this.$videoContainer && videoOptions.displayAs === 'embed') {
|
|
@@ -162,35 +134,25 @@ export default class TrayController {
|
|
|
162
134
|
});
|
|
163
135
|
}
|
|
164
136
|
}
|
|
165
|
-
|
|
166
137
|
this._dismissTray();
|
|
167
138
|
}
|
|
168
|
-
|
|
169
139
|
_dismissTray() {
|
|
170
140
|
if (this.$videoContainer) {
|
|
171
141
|
var _this$_editor, _this$_editor$selecti;
|
|
172
|
-
|
|
173
142
|
(_this$_editor = this._editor) === null || _this$_editor === void 0 ? void 0 : (_this$_editor$selecti = _this$_editor.selection) === null || _this$_editor$selecti === void 0 ? void 0 : _this$_editor$selecti.select(this.$videoContainer);
|
|
174
143
|
}
|
|
175
|
-
|
|
176
144
|
this._shouldOpen = false;
|
|
177
|
-
|
|
178
145
|
this._renderTray();
|
|
179
|
-
|
|
180
146
|
this._editor = null;
|
|
181
147
|
}
|
|
182
|
-
|
|
183
148
|
requestSubtitlesFromIframe(cb) {
|
|
184
149
|
var _this$$videoContainer2, _this$$videoContainer3;
|
|
185
|
-
|
|
186
150
|
if (!bridge.canvasOrigin) return;
|
|
187
151
|
this._subtitleListener = new AbortController();
|
|
188
152
|
window.addEventListener('message', event => {
|
|
189
153
|
var _event$data;
|
|
190
|
-
|
|
191
154
|
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') {
|
|
192
155
|
var _event$data2;
|
|
193
|
-
|
|
194
156
|
cb(event === null || event === void 0 ? void 0 : (_event$data2 = event.data) === null || _event$data2 === void 0 ? void 0 : _event$data2.payload);
|
|
195
157
|
}
|
|
196
158
|
}, {
|
|
@@ -200,10 +162,8 @@ export default class TrayController {
|
|
|
200
162
|
subject: 'media_tracks_request'
|
|
201
163
|
}, bridge.canvasOrigin);
|
|
202
164
|
}
|
|
203
|
-
|
|
204
165
|
_renderTray(trayProps) {
|
|
205
166
|
let vo = {};
|
|
206
|
-
|
|
207
167
|
if (this._shouldOpen) {
|
|
208
168
|
/*
|
|
209
169
|
* When the tray is being opened again, it should be rendered fresh
|
|
@@ -213,7 +173,6 @@ export default class TrayController {
|
|
|
213
173
|
this._renderId++;
|
|
214
174
|
vo = asVideoElement(this.$videoContainer) || {};
|
|
215
175
|
}
|
|
216
|
-
|
|
217
176
|
const element = /*#__PURE__*/React.createElement(VideoOptionsTray, {
|
|
218
177
|
id: "video-options-tray",
|
|
219
178
|
key: this._renderId,
|
|
@@ -223,7 +182,6 @@ export default class TrayController {
|
|
|
223
182
|
},
|
|
224
183
|
onExited: () => {
|
|
225
184
|
var _this$_subtitleListen;
|
|
226
|
-
|
|
227
185
|
bridge.focusActiveEditor(false);
|
|
228
186
|
this._isOpen = false;
|
|
229
187
|
(_this$_subtitleListen = this._subtitleListener) === null || _this$_subtitleListen === void 0 ? void 0 : _this$_subtitleListen.abort();
|
|
@@ -239,5 +197,4 @@ export default class TrayController {
|
|
|
239
197
|
});
|
|
240
198
|
ReactDOM.render(element, this.$container);
|
|
241
199
|
}
|
|
242
|
-
|
|
243
200
|
}
|
|
@@ -40,9 +40,7 @@ import DimensionsInput, { useDimensionsState } from '../../shared/DimensionsInpu
|
|
|
40
40
|
import { getTrayHeight } from '../../shared/trayUtils';
|
|
41
41
|
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
42
42
|
import { parsedStudioOptionsPropType } from '../../shared/StudioLtiSupportUtils';
|
|
43
|
-
|
|
44
43
|
const getLiveRegion = () => document.getElementById('flash_screenreader_holder');
|
|
45
|
-
|
|
46
44
|
export default function VideoOptionsTray(_ref) {
|
|
47
45
|
let {
|
|
48
46
|
videoOptions,
|
|
@@ -54,7 +52,8 @@ export default function VideoOptionsTray(_ref) {
|
|
|
54
52
|
onEntered = null,
|
|
55
53
|
onExited = null,
|
|
56
54
|
id = 'video-options-tray',
|
|
57
|
-
studioOptions = null
|
|
55
|
+
studioOptions = null,
|
|
56
|
+
forBlockEditorUse = false
|
|
58
57
|
} = _ref;
|
|
59
58
|
const {
|
|
60
59
|
naturalHeight,
|
|
@@ -74,8 +73,8 @@ export default function VideoOptionsTray(_ref) {
|
|
|
74
73
|
const [editLocked, setEditLocked] = useState(null);
|
|
75
74
|
const [loading, setLoading] = useState(true);
|
|
76
75
|
const isStudio = !!studioOptions;
|
|
77
|
-
const showDisplayOptions = !isStudio || studioOptions.convertibleToLink;
|
|
78
|
-
const showSizeControls = !isStudio || studioOptions.resizable;
|
|
76
|
+
const showDisplayOptions = (!isStudio || studioOptions.convertibleToLink) && !forBlockEditorUse;
|
|
77
|
+
const showSizeControls = (!isStudio || studioOptions.resizable) && !forBlockEditorUse;
|
|
79
78
|
const dimensionsState = useDimensionsState(videoOptions, {
|
|
80
79
|
minHeight,
|
|
81
80
|
minWidth,
|
|
@@ -97,19 +96,15 @@ export default function VideoOptionsTray(_ref) {
|
|
|
97
96
|
useEffect(() => {
|
|
98
97
|
if (subtitles.length === 0) requestSubtitlesFromIframe(setSubtitles);
|
|
99
98
|
}, []);
|
|
100
|
-
|
|
101
99
|
function handleTitleTextChange(event) {
|
|
102
100
|
setTitleText(event.target.value);
|
|
103
101
|
}
|
|
104
|
-
|
|
105
102
|
function handleDisplayAsChange(event) {
|
|
106
103
|
event.target.focus();
|
|
107
104
|
setDisplayAs(event.target.value);
|
|
108
105
|
}
|
|
109
|
-
|
|
110
106
|
function handleVideoSizeChange(event, selectedOption) {
|
|
111
107
|
setVideoSize(selectedOption.value);
|
|
112
|
-
|
|
113
108
|
if (selectedOption.value === CUSTOM) {
|
|
114
109
|
setVideoHeight(currentHeight);
|
|
115
110
|
setVideoWidth(currentWidth);
|
|
@@ -122,21 +117,17 @@ export default function VideoOptionsTray(_ref) {
|
|
|
122
117
|
setVideoWidth(width);
|
|
123
118
|
}
|
|
124
119
|
}
|
|
125
|
-
|
|
126
120
|
function handleUpdateSubtitles(new_subtitles) {
|
|
127
121
|
setSubtitles(new_subtitles);
|
|
128
122
|
}
|
|
129
|
-
|
|
130
123
|
function handleSave(event, updateMediaObject) {
|
|
131
124
|
event.preventDefault();
|
|
132
125
|
let appliedHeight = videoHeight;
|
|
133
126
|
let appliedWidth = videoWidth;
|
|
134
|
-
|
|
135
127
|
if (videoSize === CUSTOM) {
|
|
136
128
|
appliedHeight = dimensionsState.height;
|
|
137
129
|
appliedWidth = dimensionsState.width;
|
|
138
130
|
}
|
|
139
|
-
|
|
140
131
|
onSave({
|
|
141
132
|
media_object_id: videoOptions.id,
|
|
142
133
|
attachment_id: videoOptions.attachmentId,
|
|
@@ -149,7 +140,6 @@ export default function VideoOptionsTray(_ref) {
|
|
|
149
140
|
editLocked
|
|
150
141
|
});
|
|
151
142
|
}
|
|
152
|
-
|
|
153
143
|
const tooltipText = formatMessage('Used by screen readers to describe the video');
|
|
154
144
|
const textAreaLabel = /*#__PURE__*/React.createElement(Flex, {
|
|
155
145
|
alignItems: "center"
|
|
@@ -171,7 +161,6 @@ export default function VideoOptionsTray(_ref) {
|
|
|
171
161
|
withBorder: false
|
|
172
162
|
}))));
|
|
173
163
|
const messagesForSize = [];
|
|
174
|
-
|
|
175
164
|
if (videoSize !== CUSTOM) {
|
|
176
165
|
messagesForSize.push({
|
|
177
166
|
text: formatMessage('{width} x {height}px', {
|
|
@@ -181,7 +170,6 @@ export default function VideoOptionsTray(_ref) {
|
|
|
181
170
|
type: 'hint'
|
|
182
171
|
});
|
|
183
172
|
}
|
|
184
|
-
|
|
185
173
|
const saveDisabled = displayAs === 'embed' && (titleText === '' || videoSize === CUSTOM && !dimensionsState.isValid);
|
|
186
174
|
return /*#__PURE__*/React.createElement(StoreProvider, trayProps, contentProps => /*#__PURE__*/React.createElement(Tray, {
|
|
187
175
|
key: "video-options-tray",
|
|
@@ -305,7 +293,6 @@ export default function VideoOptionsTray(_ref) {
|
|
|
305
293
|
file: {
|
|
306
294
|
name: st.language || st.locale
|
|
307
295
|
} // this is an artifact of ClosedCaptionCreatorRow's inards
|
|
308
|
-
|
|
309
296
|
})),
|
|
310
297
|
uploadMediaTranslations: Bridge.uploadMediaTranslations,
|
|
311
298
|
userLocale: Bridge.userLocale,
|
|
@@ -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';
|
|
@@ -25,23 +26,18 @@ import { instuiPopupMountNode } from '../../../util/fullscreenHelpers';
|
|
|
25
26
|
import RCEGlobals from '../../RCEGlobals';
|
|
26
27
|
export const handleUpload = (error, uploadData, onUploadComplete, uploadBookmark) => {
|
|
27
28
|
let err_msg = error && Bridge.uploadMediaTranslations.UploadMediaStrings.UPLOADING_ERROR;
|
|
28
|
-
|
|
29
29
|
if ((error === null || error === void 0 ? void 0 : error.name) === 'FileSizeError') {
|
|
30
30
|
err_msg = formatMessage('Size of caption file is greater than the maximum {max} kb allowed file size.', {
|
|
31
31
|
max: error.maxBytes / 1000
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
-
|
|
35
34
|
const editorComponent = Bridge.activeEditor();
|
|
36
35
|
let newBookmark;
|
|
37
|
-
|
|
38
36
|
if (uploadBookmark) {
|
|
39
37
|
newBookmark = editorComponent.editor.selection.getBookmark(2, true);
|
|
40
38
|
editorComponent.editor.selection.moveToBookmark(uploadBookmark);
|
|
41
39
|
}
|
|
42
|
-
|
|
43
40
|
onUploadComplete(err_msg, uploadData);
|
|
44
|
-
|
|
45
41
|
if (newBookmark) {
|
|
46
42
|
editorComponent.editor.selection.moveToBookmark(newBookmark);
|
|
47
43
|
}
|
|
@@ -50,38 +46,34 @@ export default function (ed, document) {
|
|
|
50
46
|
return import('@instructure/canvas-media').then(CanvasMedia => {
|
|
51
47
|
const UploadMedia = CanvasMedia.default;
|
|
52
48
|
let container = document.querySelector('.canvas-rce-media-upload');
|
|
53
|
-
|
|
54
49
|
if (!container) {
|
|
55
50
|
container = document.createElement('div');
|
|
56
51
|
container.className = 'canvas-rce-media-upload';
|
|
57
52
|
document.body.appendChild(container);
|
|
58
53
|
}
|
|
59
|
-
|
|
60
54
|
const handleDismiss = () => {
|
|
61
55
|
ReactDOM.unmountComponentAtNode(container);
|
|
62
56
|
ed.focus(false);
|
|
63
|
-
};
|
|
64
|
-
// while the upload happens.
|
|
57
|
+
};
|
|
65
58
|
|
|
59
|
+
// We need to have a place to store the bookmark location
|
|
60
|
+
// while the upload happens.
|
|
61
|
+
let uploadBookmark = null;
|
|
66
62
|
|
|
67
|
-
|
|
63
|
+
// redux's activateMediaUpload action does the image placeholder,
|
|
68
64
|
// but it also does the upload. We need to separate them if we
|
|
69
65
|
// want to stay within the redux approach
|
|
70
|
-
|
|
71
66
|
const handleStartUpload = fileProps => {
|
|
72
67
|
var _editorComponent$edit;
|
|
73
|
-
|
|
74
68
|
Bridge.focusEditor(ed.rceWrapper);
|
|
75
69
|
const editorComponent = Bridge.activeEditor();
|
|
76
70
|
uploadBookmark = editorComponent === null || editorComponent === void 0 ? void 0 : (_editorComponent$edit = editorComponent.editor) === null || _editorComponent$edit === void 0 ? void 0 : _editorComponent$edit.selection.getBookmark(2, true);
|
|
77
71
|
Bridge.insertImagePlaceholder(fileProps);
|
|
78
72
|
handleDismiss();
|
|
79
73
|
};
|
|
80
|
-
|
|
81
74
|
const trayProps = Bridge.trayProps.get(ed);
|
|
82
|
-
ReactDOM.render(
|
|
75
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(StoreProvider, trayProps, contentProps => {
|
|
83
76
|
var _RCEGlobals$getFeatur;
|
|
84
|
-
|
|
85
77
|
return /*#__PURE__*/React.createElement(UploadMedia, {
|
|
86
78
|
"data-mce-component": true,
|
|
87
79
|
rcsConfig: {
|
|
@@ -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
|
// IMPORTANT!
|
|
19
20
|
// Do not import this file directly, but get it via Bridge.uploadMediaTranslations
|
|
20
21
|
// This is because the locale, which is lazy imported, has to be loaded and
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2018 - present Instructure, Inc.
|
|
5
3
|
*
|
|
@@ -17,6 +15,7 @@
|
|
|
17
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
17
|
*/
|
|
18
|
+
|
|
20
19
|
import clickCallback from './clickCallback';
|
|
21
20
|
import bridge from '../../../bridge';
|
|
22
21
|
import formatMessage from '../../../format-message';
|
|
@@ -31,10 +30,10 @@ const COURSE_PLUGIN_KEY = 'course_media';
|
|
|
31
30
|
const USER_PLUGIN_KEY = 'user_media';
|
|
32
31
|
const GROUP_PLUGIN_KEY = 'group_media';
|
|
33
32
|
|
|
33
|
+
// @ts-expect-error
|
|
34
34
|
function getMenuItems(ed) {
|
|
35
35
|
const contextType = ed.settings.canvas_rce_user_context.type;
|
|
36
36
|
const items = [];
|
|
37
|
-
|
|
38
37
|
if (ed.getParam('show_media_upload')) {
|
|
39
38
|
// test if it's ok
|
|
40
39
|
items.push({
|
|
@@ -42,7 +41,6 @@ function getMenuItems(ed) {
|
|
|
42
41
|
value: 'instructure_upload_media'
|
|
43
42
|
});
|
|
44
43
|
}
|
|
45
|
-
|
|
46
44
|
if (contextType === 'course') {
|
|
47
45
|
items.push({
|
|
48
46
|
text: formatMessage('Course Media'),
|
|
@@ -54,7 +52,6 @@ function getMenuItems(ed) {
|
|
|
54
52
|
value: 'instructure_group_media'
|
|
55
53
|
});
|
|
56
54
|
}
|
|
57
|
-
|
|
58
55
|
items.push({
|
|
59
56
|
text: formatMessage('User Media'),
|
|
60
57
|
value: 'instructure_user_media'
|
|
@@ -62,36 +59,35 @@ function getMenuItems(ed) {
|
|
|
62
59
|
return items;
|
|
63
60
|
}
|
|
64
61
|
|
|
62
|
+
// @ts-expect-error
|
|
65
63
|
function doMenuItem(ed, value) {
|
|
66
64
|
switch (value) {
|
|
67
65
|
case 'instructure_upload_media':
|
|
68
66
|
ed.execCommand('instructureRecord');
|
|
69
67
|
break;
|
|
70
|
-
|
|
71
68
|
case 'instructure_course_media':
|
|
72
69
|
ed.focus(true);
|
|
73
70
|
ed.execCommand('instructureTrayForMedia', false, COURSE_PLUGIN_KEY);
|
|
74
71
|
break;
|
|
75
|
-
|
|
76
72
|
case 'instructure_group_media':
|
|
77
73
|
ed.focus(true);
|
|
78
74
|
ed.execCommand('instructureTrayForMedia', false, GROUP_PLUGIN_KEY);
|
|
79
75
|
break;
|
|
80
|
-
|
|
81
76
|
case 'instructure_user_media':
|
|
82
77
|
ed.focus(true);
|
|
83
78
|
ed.execCommand('instructureTrayForMedia', false, USER_PLUGIN_KEY);
|
|
84
79
|
break;
|
|
85
80
|
}
|
|
86
|
-
}
|
|
87
|
-
|
|
81
|
+
}
|
|
88
82
|
|
|
83
|
+
// Register plugin
|
|
89
84
|
tinymce.PluginManager.add('instructure_record', function (ed) {
|
|
90
85
|
ed.addCommand('instructureRecord', () => clickCallback(ed, document));
|
|
91
86
|
ed.addCommand('instructureTrayForMedia', (ui, plugin_key) => {
|
|
92
87
|
bridge.showTrayForPlugin(plugin_key, ed.id);
|
|
93
|
-
});
|
|
88
|
+
});
|
|
94
89
|
|
|
90
|
+
// Register menu items
|
|
95
91
|
ed.ui.registry.addNestedMenuItem('instructure_media', {
|
|
96
92
|
text: formatMessage('Media'),
|
|
97
93
|
icon: 'video',
|
|
@@ -106,8 +102,9 @@ tinymce.PluginManager.add('instructure_record', function (ed) {
|
|
|
106
102
|
}
|
|
107
103
|
};
|
|
108
104
|
})
|
|
109
|
-
});
|
|
105
|
+
});
|
|
110
106
|
|
|
107
|
+
// Register buttons
|
|
111
108
|
ed.ui.registry.addMenuButton('instructure_record', {
|
|
112
109
|
tooltip: formatMessage('Record/Upload Media'),
|
|
113
110
|
icon: 'video',
|
|
@@ -117,32 +114,29 @@ tinymce.PluginManager.add('instructure_record', function (ed) {
|
|
|
117
114
|
value: item.value,
|
|
118
115
|
onAction: () => doMenuItem(ed, item.value)
|
|
119
116
|
}))),
|
|
120
|
-
|
|
121
117
|
onSetup(api) {
|
|
118
|
+
// @ts-expect-error
|
|
122
119
|
function handleNodeChange(_e) {
|
|
123
120
|
api.setDisabled(!isOKToLink(ed.selection.getContent()));
|
|
124
121
|
}
|
|
125
|
-
|
|
126
122
|
setTimeout(handleNodeChange);
|
|
127
123
|
ed.on('NodeChange', handleNodeChange);
|
|
128
124
|
return () => {
|
|
129
125
|
ed.off('NodeChange', handleNodeChange);
|
|
130
126
|
};
|
|
131
127
|
}
|
|
132
|
-
|
|
133
128
|
});
|
|
129
|
+
|
|
134
130
|
/*
|
|
135
131
|
* Register the Video "Options" button that will open the Video Options
|
|
136
132
|
* tray.
|
|
137
133
|
*/
|
|
138
|
-
|
|
139
134
|
const buttonAriaLabel = formatMessage('Show video options');
|
|
140
135
|
ed.ui.registry.addButton('instructure-video-options', {
|
|
141
136
|
onAction() {
|
|
142
137
|
// show the tray
|
|
143
138
|
videoTrayController.showTrayForEditor(ed);
|
|
144
139
|
},
|
|
145
|
-
|
|
146
140
|
text: formatMessage('Video Options'),
|
|
147
141
|
tooltip: buttonAriaLabel
|
|
148
142
|
});
|
|
@@ -156,7 +150,6 @@ tinymce.PluginManager.add('instructure_record', function (ed) {
|
|
|
156
150
|
onAction() {
|
|
157
151
|
audioTrayController.showTrayForEditor(ed);
|
|
158
152
|
},
|
|
159
|
-
|
|
160
153
|
text: formatMessage('Audio Options'),
|
|
161
154
|
tooltip: formatMessage('Show audio options')
|
|
162
155
|
});
|
|
@@ -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 FindReplaceController from './components/FindReplaceTrayController';
|
|
@@ -22,26 +23,22 @@ import { getSelectionContext } from './getSelectionContext';
|
|
|
22
23
|
const CONTAINER_ID = 'instructure-find-replace-tray-container';
|
|
23
24
|
export default function (editor, document) {
|
|
24
25
|
var _editor$selection, _editor$selection2;
|
|
25
|
-
|
|
26
26
|
const plugin = editor.plugins.searchreplace;
|
|
27
27
|
const initalSelection = (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.getContent({
|
|
28
28
|
format: 'text'
|
|
29
29
|
});
|
|
30
30
|
if (initalSelection) (_editor$selection2 = editor.selection) === null || _editor$selection2 === void 0 ? void 0 : _editor$selection2.collapse(true);
|
|
31
31
|
let container = document.getElementById(CONTAINER_ID);
|
|
32
|
-
|
|
33
32
|
if (container == null) {
|
|
34
33
|
container = document.createElement('div');
|
|
35
34
|
container.id = CONTAINER_ID;
|
|
36
35
|
document.body.appendChild(container);
|
|
37
36
|
}
|
|
38
|
-
|
|
39
37
|
const handleDismiss = () => {
|
|
40
38
|
if (container) ReactDOM.unmountComponentAtNode(container);
|
|
41
39
|
editor.focus(false);
|
|
42
40
|
};
|
|
43
|
-
|
|
44
|
-
ReactDOM.render( /*#__PURE__*/React.createElement(FindReplaceController, {
|
|
41
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(FindReplaceController, {
|
|
45
42
|
plugin: plugin,
|
|
46
43
|
onDismiss: handleDismiss,
|
|
47
44
|
initialText: initalSelection,
|