@instructure/canvas-rce 5.14.1 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
|
@@ -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 { createSvgElement } from './utils';
|
|
19
20
|
import { PREVIEW_HEIGHT, SHAPE_CONTAINER_LENGTH, GLUE_WIDTH, PREVIEW_WIDTH, PREVIEW_BACKGROUND_COLOR } from '../constants';
|
|
20
21
|
import { buildShapeMask } from './shape';
|
|
@@ -57,7 +58,6 @@ export function buildSvg(shape) {
|
|
|
57
58
|
mainContainer.appendChild(bgElement);
|
|
58
59
|
return mainContainer;
|
|
59
60
|
}
|
|
60
|
-
|
|
61
61
|
function createSvgContainer() {
|
|
62
62
|
return createSvgElement('svg', {
|
|
63
63
|
xmlns: 'http://www.w3.org/2000/svg',
|
|
@@ -65,7 +65,6 @@ function createSvgContainer() {
|
|
|
65
65
|
height: PREVIEW_HEIGHT
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
-
|
|
69
68
|
function createMask(settings) {
|
|
70
69
|
const maskElement = createSvgElement('mask', {
|
|
71
70
|
id: 'imageCropperMask'
|
|
@@ -15,47 +15,37 @@
|
|
|
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 round from '../../round';
|
|
19
20
|
import { SHAPE_CONTAINER_LENGTH } from '../constants';
|
|
20
21
|
import { createSvgElement } from './utils';
|
|
21
22
|
import { Shape } from '../shape';
|
|
22
|
-
export function buildShapeMask(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
} = _ref;
|
|
23
|
+
export function buildShapeMask({
|
|
24
|
+
shape,
|
|
25
|
+
size
|
|
26
|
+
}) {
|
|
27
27
|
const dimensionSize = size || SHAPE_CONTAINER_LENGTH;
|
|
28
|
-
|
|
29
28
|
switch (shape) {
|
|
30
29
|
case Shape.Square:
|
|
31
30
|
return buildSquare(dimensionSize);
|
|
32
|
-
|
|
33
31
|
case Shape.Circle:
|
|
34
32
|
return buildCircle(dimensionSize);
|
|
35
|
-
|
|
36
33
|
case Shape.Triangle:
|
|
37
34
|
return buildTriangle(dimensionSize);
|
|
38
|
-
|
|
39
35
|
case Shape.Diamond:
|
|
40
36
|
return buildDiamond(dimensionSize);
|
|
41
|
-
|
|
42
37
|
case Shape.Pentagon:
|
|
43
38
|
return buildPentagon(dimensionSize);
|
|
44
|
-
|
|
45
39
|
case Shape.Hexagon:
|
|
46
40
|
return buildHexagon(dimensionSize);
|
|
47
|
-
|
|
48
41
|
case Shape.Octagon:
|
|
49
42
|
return buildOctagon(dimensionSize);
|
|
50
|
-
|
|
51
43
|
case Shape.Star:
|
|
52
44
|
return buildStar(dimensionSize);
|
|
53
|
-
|
|
54
45
|
default:
|
|
55
46
|
throw new Error(`Invalid shape: ${shape}`);
|
|
56
47
|
}
|
|
57
48
|
}
|
|
58
|
-
|
|
59
49
|
function buildSquare(dimensionSize) {
|
|
60
50
|
return createSvgElement('rect', {
|
|
61
51
|
x: 0,
|
|
@@ -65,7 +55,6 @@ function buildSquare(dimensionSize) {
|
|
|
65
55
|
fill: 'black'
|
|
66
56
|
});
|
|
67
57
|
}
|
|
68
|
-
|
|
69
58
|
function buildCircle(dimensionSize) {
|
|
70
59
|
return createSvgElement('circle', {
|
|
71
60
|
cx: dimensionSize / 2,
|
|
@@ -74,19 +63,16 @@ function buildCircle(dimensionSize) {
|
|
|
74
63
|
fill: 'black'
|
|
75
64
|
});
|
|
76
65
|
}
|
|
77
|
-
|
|
78
66
|
function buildTriangle(dimensionSize) {
|
|
79
67
|
return createSvgElement('path', {
|
|
80
68
|
d: `M${dimensionSize / 2} 0L${dimensionSize} ${dimensionSize}H0L${dimensionSize / 2} 0Z`
|
|
81
69
|
});
|
|
82
70
|
}
|
|
83
|
-
|
|
84
71
|
function buildDiamond(dimensionSize) {
|
|
85
72
|
return createSvgElement('path', {
|
|
86
73
|
d: `M${dimensionSize / 2} 0L${dimensionSize} ${dimensionSize / 2}L${dimensionSize / 2} ${dimensionSize}L0 ${dimensionSize / 2}L${dimensionSize / 2} 0Z`
|
|
87
74
|
});
|
|
88
75
|
}
|
|
89
|
-
|
|
90
76
|
function buildPentagon(dimensionSize) {
|
|
91
77
|
const half = round(dimensionSize / 2, 2);
|
|
92
78
|
const alpha = round(0.3906 * dimensionSize, 2);
|
|
@@ -95,14 +81,12 @@ function buildPentagon(dimensionSize) {
|
|
|
95
81
|
d: `M${half} 0L${dimensionSize} ${alpha}L${half + beta} ${dimensionSize}H${half - beta}L0 ${alpha}L${half} 0L${half} 0Z`
|
|
96
82
|
});
|
|
97
83
|
}
|
|
98
|
-
|
|
99
84
|
function buildHexagon(dimensionSize) {
|
|
100
85
|
const leg = round(0.2895 * dimensionSize, 2);
|
|
101
86
|
return createSvgElement('path', {
|
|
102
87
|
d: `M${dimensionSize - leg} 0L${dimensionSize} ${dimensionSize / 2}L${dimensionSize - leg} ${dimensionSize}H${leg}L0 ${dimensionSize / 2}L${leg} 0H${dimensionSize - leg}Z`
|
|
103
88
|
});
|
|
104
89
|
}
|
|
105
|
-
|
|
106
90
|
function buildOctagon(dimensionSize) {
|
|
107
91
|
const leg = round(0.2895 * dimensionSize, 2);
|
|
108
92
|
const side = round(dimensionSize - 2 * leg, 2);
|
|
@@ -110,7 +94,6 @@ function buildOctagon(dimensionSize) {
|
|
|
110
94
|
d: `M0 ${leg}L${leg} 0H${leg + side}L${dimensionSize} ${leg}V${leg + side}L${leg + side} ${dimensionSize}H${leg}L0 ${leg + side}V${leg}Z`
|
|
111
95
|
});
|
|
112
96
|
}
|
|
113
|
-
|
|
114
97
|
function buildStar(dimensionSize) {
|
|
115
98
|
const half = round(dimensionSize / 2, 2);
|
|
116
99
|
const alpha = round(0.1143 * dimensionSize, 2);
|
|
@@ -15,11 +15,10 @@
|
|
|
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
|
-
|
|
19
|
-
|
|
18
|
+
|
|
19
|
+
export function createSvgElement(tag, attributes = {}) {
|
|
20
20
|
const element = document.createElementNS('http://www.w3.org/2000/svg', tag);
|
|
21
|
-
Object.entries(attributes).forEach(
|
|
22
|
-
let [attr, value] = _ref;
|
|
21
|
+
Object.entries(attributes).forEach(([attr, value]) => {
|
|
23
22
|
element.setAttribute(attr, value);
|
|
24
23
|
});
|
|
25
24
|
return element;
|
|
@@ -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 { useEffect, useState, useRef, useCallback } from 'react';
|
|
19
20
|
import { debounce } from '@instructure/debounce';
|
|
20
21
|
import { KEY_EVENT_DELAY, KEY_EVENT_ACCELERATION } from './constants';
|
|
@@ -22,25 +23,20 @@ import { actions } from './reducers/imageCropper';
|
|
|
22
23
|
const EVENT_EXCEPTION_ELEMENT_IDS = ['imageCropperHeader', 'imageCropperFooter', 'imageCropperControls'];
|
|
23
24
|
const TOUCH_EVENTS = ['ontouchmove', 'ontouchend', 'ontouchcancel'];
|
|
24
25
|
const MOUSE_EVENTS = ['onmousemove', 'onmouseup', 'onmouseout'];
|
|
25
|
-
|
|
26
26
|
function useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, isMoving, setIsMoving, dispatch) {
|
|
27
27
|
// Refs that manage the keydown acceleration
|
|
28
28
|
const direction = useRef(0);
|
|
29
29
|
const initialTime = useRef(null);
|
|
30
|
-
|
|
31
30
|
const onKeyDown = event => {
|
|
32
31
|
// 37 = Left, 38 = Up, 39 = Right, 40 = Down
|
|
33
32
|
const {
|
|
34
33
|
keyCode
|
|
35
34
|
} = event;
|
|
36
|
-
|
|
37
35
|
if (![37, 38, 39, 40].includes(keyCode)) {
|
|
38
36
|
return;
|
|
39
37
|
}
|
|
40
|
-
|
|
41
38
|
event.preventDefault();
|
|
42
39
|
let elapsedTime;
|
|
43
|
-
|
|
44
40
|
if (keyCode !== direction.current) {
|
|
45
41
|
elapsedTime = 0;
|
|
46
42
|
initialTime.current = new Date();
|
|
@@ -55,22 +51,18 @@ function useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tem
|
|
|
55
51
|
const currentTime = new Date();
|
|
56
52
|
elapsedTime = (currentTime - initialTime.current) / 1000;
|
|
57
53
|
}
|
|
58
|
-
|
|
59
54
|
const translationDiff = Math.floor(KEY_EVENT_ACCELERATION * elapsedTime ** 2) || 1;
|
|
60
|
-
|
|
61
55
|
if ([37, 39].includes(keyCode)) {
|
|
62
56
|
const sign = keyCode === 37 ? -1 : 1;
|
|
63
57
|
const newTranslateX = tempTranslateXRef.current + sign * translationDiff;
|
|
64
58
|
setTempTranslateX(newTranslateX);
|
|
65
59
|
}
|
|
66
|
-
|
|
67
60
|
if ([38, 40].includes(keyCode)) {
|
|
68
61
|
const sign = keyCode === 38 ? -1 : 1;
|
|
69
62
|
const newTranslateY = tempTranslateYRef.current + sign * translationDiff;
|
|
70
63
|
setTempTranslateY(newTranslateY);
|
|
71
64
|
}
|
|
72
65
|
};
|
|
73
|
-
|
|
74
66
|
const stopMovement = useCallback(debounce(() => {
|
|
75
67
|
direction.current = 0;
|
|
76
68
|
initialTime.current = null;
|
|
@@ -81,43 +73,35 @@ function useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tem
|
|
|
81
73
|
useEffect(() => {
|
|
82
74
|
const onKeyDownWrapper = event => {
|
|
83
75
|
// If the active element is in the modal header, footer or controls.
|
|
84
|
-
if (EVENT_EXCEPTION_ELEMENT_IDS.some(id => {
|
|
85
|
-
var _document$getElementB;
|
|
86
|
-
|
|
87
|
-
return (_document$getElementB = document.getElementById(id)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.contains(document.activeElement);
|
|
88
|
-
})) {
|
|
76
|
+
if (EVENT_EXCEPTION_ELEMENT_IDS.some(id => document.getElementById(id)?.contains(document.activeElement))) {
|
|
89
77
|
return;
|
|
90
78
|
}
|
|
91
|
-
|
|
92
79
|
onKeyDown(event);
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
|
|
80
|
+
};
|
|
81
|
+
// Adds the event listener when component did mount
|
|
96
82
|
document.addEventListener('keydown', onKeyDownWrapper);
|
|
97
83
|
return () => {
|
|
98
84
|
// Removes the event listener when component will unmount
|
|
99
85
|
document.removeEventListener('keydown', onKeyDownWrapper);
|
|
100
|
-
};
|
|
86
|
+
};
|
|
87
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
88
|
}, []);
|
|
102
89
|
useEffect(() => {
|
|
103
90
|
if (isMoving && direction.current !== 0) {
|
|
104
91
|
stopMovement();
|
|
105
|
-
}
|
|
106
|
-
|
|
92
|
+
}
|
|
93
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
107
94
|
}, [tempTranslateX, tempTranslateY]);
|
|
108
95
|
}
|
|
109
|
-
|
|
110
96
|
function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, setIsMoving) {
|
|
111
97
|
const initialPageX = useRef(0);
|
|
112
98
|
const initialPageY = useRef(0);
|
|
113
99
|
const isDragging = useRef(false);
|
|
114
100
|
const imgElement = useRef(null);
|
|
115
|
-
|
|
116
101
|
const onStopMove = isMouseEvent => () => {
|
|
117
102
|
isDragging.current = false;
|
|
118
103
|
initialPageX.current = 0;
|
|
119
104
|
initialPageY.current = 0;
|
|
120
|
-
|
|
121
105
|
if (imgElement.current) {
|
|
122
106
|
const [move, end, cancel] = isMouseEvent ? MOUSE_EVENTS : TOUCH_EVENTS;
|
|
123
107
|
imgElement.current[move] = null;
|
|
@@ -125,15 +109,12 @@ function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslate
|
|
|
125
109
|
imgElement.current[cancel] = null;
|
|
126
110
|
imgElement.current = null;
|
|
127
111
|
}
|
|
128
|
-
|
|
129
112
|
setIsMoving(false);
|
|
130
113
|
};
|
|
131
|
-
|
|
132
114
|
const onMove = isMouseEvent => e => {
|
|
133
115
|
if (!isDragging.current) {
|
|
134
116
|
return onStopMove();
|
|
135
117
|
}
|
|
136
|
-
|
|
137
118
|
const {
|
|
138
119
|
clientX,
|
|
139
120
|
clientY
|
|
@@ -141,7 +122,6 @@ function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslate
|
|
|
141
122
|
setTempTranslateX(tempTranslateX + clientX - initialPageX.current);
|
|
142
123
|
setTempTranslateY(tempTranslateY + clientY - initialPageY.current);
|
|
143
124
|
};
|
|
144
|
-
|
|
145
125
|
const onStartMove = (e, isMouseEvent) => {
|
|
146
126
|
isDragging.current = true;
|
|
147
127
|
const {
|
|
@@ -155,79 +135,69 @@ function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslate
|
|
|
155
135
|
initialPageY.current = clientY;
|
|
156
136
|
const [move, end, cancel] = isMouseEvent ? MOUSE_EVENTS : TOUCH_EVENTS;
|
|
157
137
|
target[move] = onMove(isMouseEvent);
|
|
158
|
-
target[end] = onStopMove(isMouseEvent);
|
|
159
|
-
|
|
138
|
+
target[end] = onStopMove(isMouseEvent);
|
|
139
|
+
// Should stop the movement when touch/mouse leaves the preview
|
|
160
140
|
target[cancel] = onStopMove(isMouseEvent);
|
|
161
141
|
imgElement.current = target;
|
|
162
142
|
setIsMoving(true);
|
|
163
143
|
};
|
|
164
|
-
|
|
165
144
|
return [e => onStartMove(e, true), e => onStartMove(e, false)];
|
|
166
145
|
}
|
|
167
|
-
|
|
168
146
|
export function useKeyMouseTouchEvents(translateX, translateY, dispatch) {
|
|
169
147
|
const [tempTranslateX, _setTempTranslateX] = useState(translateX);
|
|
170
148
|
const [tempTranslateY, _setTempTranslateY] = useState(translateY);
|
|
171
|
-
const [isMoving, setIsMoving] = useState(false);
|
|
149
|
+
const [isMoving, setIsMoving] = useState(false);
|
|
172
150
|
|
|
151
|
+
// These are used to get the current values when the callback is called from outside.
|
|
173
152
|
const tempTranslateXRef = useRef(tempTranslateX);
|
|
174
153
|
const tempTranslateYRef = useRef(tempTranslateY);
|
|
175
|
-
|
|
176
154
|
const setTempTranslateX = data => {
|
|
177
155
|
setIsMoving(true);
|
|
178
156
|
tempTranslateXRef.current = data;
|
|
179
|
-
|
|
180
157
|
_setTempTranslateX(data);
|
|
181
158
|
};
|
|
182
|
-
|
|
183
159
|
const setTempTranslateY = data => {
|
|
184
160
|
setIsMoving(true);
|
|
185
161
|
tempTranslateYRef.current = data;
|
|
186
|
-
|
|
187
162
|
_setTempTranslateY(data);
|
|
188
163
|
};
|
|
189
|
-
|
|
190
164
|
useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, isMoving, setIsMoving, dispatch);
|
|
191
|
-
const [onMouseDown, onTouchStart] = useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, setIsMoving);
|
|
165
|
+
const [onMouseDown, onTouchStart] = useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, setIsMoving);
|
|
192
166
|
|
|
167
|
+
// Updates the reducer state when user stops moving.
|
|
193
168
|
useEffect(() => {
|
|
194
169
|
if (isMoving) {
|
|
195
170
|
return;
|
|
196
171
|
}
|
|
197
|
-
|
|
198
172
|
if (tempTranslateX !== translateX) {
|
|
199
173
|
dispatch({
|
|
200
174
|
type: actions.SET_TRANSLATE_X,
|
|
201
175
|
payload: tempTranslateX
|
|
202
176
|
});
|
|
203
177
|
}
|
|
204
|
-
|
|
205
178
|
if (tempTranslateY !== translateY) {
|
|
206
179
|
dispatch({
|
|
207
180
|
type: actions.SET_TRANSLATE_Y,
|
|
208
181
|
payload: tempTranslateY
|
|
209
182
|
});
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
}, [isMoving]);
|
|
183
|
+
}
|
|
184
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
185
|
+
}, [isMoving]);
|
|
213
186
|
|
|
187
|
+
// Updates the component state when props changed.
|
|
214
188
|
useEffect(() => {
|
|
215
189
|
if (isMoving) {
|
|
216
190
|
return;
|
|
217
191
|
}
|
|
218
|
-
|
|
219
192
|
if (translateX !== tempTranslateX) {
|
|
220
193
|
tempTranslateXRef.current = translateX;
|
|
221
|
-
|
|
222
194
|
_setTempTranslateX(translateX);
|
|
223
195
|
}
|
|
224
|
-
|
|
225
196
|
if (translateY !== tempTranslateY) {
|
|
226
197
|
tempTranslateYRef.current = translateY;
|
|
227
|
-
|
|
228
198
|
_setTempTranslateY(translateY);
|
|
229
|
-
}
|
|
230
|
-
|
|
199
|
+
}
|
|
200
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
231
201
|
}, [translateX, translateY]);
|
|
232
202
|
return [tempTranslateX, tempTranslateY, onMouseDown, onTouchStart];
|
|
233
203
|
}
|
|
@@ -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 { useEffect, useState } from 'react';
|
|
19
20
|
import { debounce } from '@instructure/debounce';
|
|
20
21
|
import { calculateScaleRatio } from './controls/utils';
|
|
@@ -23,35 +24,32 @@ import { actions } from './reducers/imageCropper';
|
|
|
23
24
|
export function useMouseWheel(scaleRatio, dispatch) {
|
|
24
25
|
const [tempScaleRatio, setTempScaleRatio] = useState(scaleRatio);
|
|
25
26
|
const [isScaling, setIsScaling] = useState(false);
|
|
26
|
-
|
|
27
27
|
const onWheelCallback = event => {
|
|
28
28
|
// Couldn't prevent modal body scroll when zoom, when using {passive:false}
|
|
29
29
|
// the zoom event listener makes zoom look like a bouncing effect.
|
|
30
30
|
// https://chromestatus.com/feature/6662647093133312
|
|
31
31
|
// event.preventDefault()
|
|
32
|
-
const newScaleRatio = calculateScaleRatio(tempScaleRatio - event.deltaY * WHEEL_SCALE_STEP);
|
|
33
32
|
|
|
33
|
+
const newScaleRatio = calculateScaleRatio(tempScaleRatio - event.deltaY * WHEEL_SCALE_STEP);
|
|
34
34
|
if (newScaleRatio !== tempScaleRatio) {
|
|
35
35
|
setIsScaling(true);
|
|
36
36
|
setTempScaleRatio(newScaleRatio);
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
-
|
|
40
39
|
const setScalingRatio = () => {
|
|
41
40
|
setIsScaling(false);
|
|
42
41
|
};
|
|
43
|
-
|
|
44
42
|
useEffect(() => {
|
|
45
43
|
if (!isScaling) {
|
|
46
44
|
setTempScaleRatio(scaleRatio);
|
|
47
|
-
}
|
|
48
|
-
|
|
45
|
+
}
|
|
46
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
49
47
|
}, [scaleRatio]);
|
|
50
48
|
useEffect(() => {
|
|
51
49
|
if (isScaling) {
|
|
52
50
|
debounce(setScalingRatio, WHEEL_EVENT_DELAY)();
|
|
53
|
-
}
|
|
54
|
-
|
|
51
|
+
}
|
|
52
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
55
53
|
}, [tempScaleRatio]);
|
|
56
54
|
useEffect(() => {
|
|
57
55
|
if (!isScaling) {
|
|
@@ -59,8 +57,8 @@ export function useMouseWheel(scaleRatio, dispatch) {
|
|
|
59
57
|
type: actions.SET_SCALE_RATIO,
|
|
60
58
|
payload: tempScaleRatio
|
|
61
59
|
});
|
|
62
|
-
}
|
|
63
|
-
|
|
60
|
+
}
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
64
62
|
}, [isScaling]);
|
|
65
63
|
return [tempScaleRatio, onWheelCallback];
|
|
66
64
|
}
|
|
@@ -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 { IconButton } from '@instructure/ui-buttons';
|
|
20
21
|
import { SimpleSelect } from '@instructure/ui-simple-select';
|
|
@@ -28,25 +29,23 @@ import { Tooltip } from '@instructure/ui-tooltip';
|
|
|
28
29
|
import { CUSTOM, MIN_HEIGHT, MIN_WIDTH, MIN_PERCENTAGE, imageSizes, labelForImageSize } from '../instructure_image/ImageEmbedOptions';
|
|
29
30
|
import formatMessage from '../../../format-message';
|
|
30
31
|
import DimensionsInput from './DimensionsInput';
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
forBlockEditorUse = false
|
|
49
|
-
} = _ref;
|
|
32
|
+
const ImageOptionsForm = ({
|
|
33
|
+
imageSize,
|
|
34
|
+
displayAs,
|
|
35
|
+
isDecorativeImage,
|
|
36
|
+
altText,
|
|
37
|
+
isLinked,
|
|
38
|
+
dimensionsState,
|
|
39
|
+
handleAltTextChange,
|
|
40
|
+
handleIsDecorativeChange,
|
|
41
|
+
handleDisplayAsChange,
|
|
42
|
+
handleImageSizeChange,
|
|
43
|
+
messagesForSize,
|
|
44
|
+
hideDimensions,
|
|
45
|
+
id = 'image-options-form',
|
|
46
|
+
isIconMaker = false,
|
|
47
|
+
forBlockEditorUse = false
|
|
48
|
+
}) => {
|
|
50
49
|
const TYPE = isIconMaker ? formatMessage('icon') : formatMessage('image');
|
|
51
50
|
const tooltipText = formatMessage('Used by screen readers to describe the content of an {TYPE}', {
|
|
52
51
|
TYPE
|
|
@@ -137,5 +136,4 @@ const ImageOptionsForm = _ref => {
|
|
|
137
136
|
minPercentage: MIN_PERCENTAGE
|
|
138
137
|
})))));
|
|
139
138
|
};
|
|
140
|
-
|
|
141
139
|
export default ImageOptionsForm;
|
|
@@ -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, { useEffect } from 'react';
|
|
19
20
|
import { View } from '@instructure/ui-view';
|
|
20
21
|
import { Text } from '@instructure/ui-text';
|
|
@@ -24,18 +25,15 @@ import formatMessage from '../../../format-message';
|
|
|
24
25
|
import { showFlashAlert } from '../../../common/FlashAlert';
|
|
25
26
|
import { ScreenReaderContent } from '@instructure/ui-a11y-content';
|
|
26
27
|
import { getIcon, getFriendlyLinkType } from './linkUtils';
|
|
27
|
-
|
|
28
28
|
const getEditMessage = () => formatMessage('If left empty, link text will display as course link name');
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
linkType
|
|
38
|
-
} = _ref;
|
|
29
|
+
export const LinkDisplay = ({
|
|
30
|
+
linkText,
|
|
31
|
+
placeholderText,
|
|
32
|
+
linkFileName,
|
|
33
|
+
published,
|
|
34
|
+
handleTextChange,
|
|
35
|
+
linkType
|
|
36
|
+
}) => {
|
|
39
37
|
useEffect(() => {
|
|
40
38
|
showFlashAlert({
|
|
41
39
|
message: formatMessage('Selected {linkFileName}', {
|
|
@@ -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 PropTypes from 'prop-types';
|
|
20
21
|
import { Spinner } from '@instructure/ui-spinner';
|
|
@@ -22,21 +23,17 @@ import { Flex } from '@instructure/ui-flex';
|
|
|
22
23
|
import formatMessage from '../../../format-message';
|
|
23
24
|
import checkerboardStyle from './CheckerboardStyling';
|
|
24
25
|
const SQUARE_SIZE = 4;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
checkered
|
|
34
|
-
} = _ref;
|
|
26
|
+
const PreviewIcon = ({
|
|
27
|
+
color,
|
|
28
|
+
testId,
|
|
29
|
+
variant,
|
|
30
|
+
image,
|
|
31
|
+
loading,
|
|
32
|
+
checkered
|
|
33
|
+
}) => {
|
|
35
34
|
const variantSettings = PreviewIcon.variants[variant];
|
|
36
|
-
|
|
37
35
|
const background = () => {
|
|
38
36
|
if (loading) return {};
|
|
39
|
-
|
|
40
37
|
if (image) {
|
|
41
38
|
return {
|
|
42
39
|
backgroundImage: `url(${image})`,
|
|
@@ -45,7 +42,6 @@ const PreviewIcon = _ref => {
|
|
|
45
42
|
backgroundPosition: 'center'
|
|
46
43
|
};
|
|
47
44
|
}
|
|
48
|
-
|
|
49
45
|
return {
|
|
50
46
|
border: '1px solid #73818C',
|
|
51
47
|
borderRadius: '3px',
|
|
@@ -58,7 +54,6 @@ const PreviewIcon = _ref => {
|
|
|
58
54
|
`
|
|
59
55
|
};
|
|
60
56
|
};
|
|
61
|
-
|
|
62
57
|
return /*#__PURE__*/React.createElement("div", {
|
|
63
58
|
id: "preview-background-wrapper",
|
|
64
59
|
style: checkered ? checkerboardStyle(SQUARE_SIZE) : {}
|
|
@@ -80,7 +75,6 @@ const PreviewIcon = _ref => {
|
|
|
80
75
|
size: "small"
|
|
81
76
|
})))));
|
|
82
77
|
};
|
|
83
|
-
|
|
84
78
|
PreviewIcon.variants = {
|
|
85
79
|
small: {
|
|
86
80
|
width: '25px',
|
|
@@ -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
|
// copied from canvas-lms/ui/shared/features/doc-previews/jquery/index.js
|
|
19
20
|
export const previewableMimeTypes = ['application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.sun.xml.writer', 'application/excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/rtf', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'application/vnd.sun.xml.impress', 'application/vnd.sun.xml.calc', 'application/vnd.ms-excel', 'application/msword', 'application/mspowerpoint', 'application/rtf', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'text/plain', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/postscript', 'application/pdf', 'application/vnd.ms-powerpoint'];
|
|
20
21
|
export function isPreviewable(type) {
|
|
@@ -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, { useMemo } from 'react';
|
|
19
20
|
import { func, object, string } from 'prop-types';
|
|
20
21
|
import classnames from 'classnames';
|
|
@@ -22,8 +23,9 @@ import { View } from '@instructure/ui-view';
|
|
|
22
23
|
import { downloadToWrap } from '../../../common/fileUrl';
|
|
23
24
|
import { mediaPlayerURLFromFile } from './fileTypeUtils';
|
|
24
25
|
import RceApiSource from '../../../rcs/api';
|
|
25
|
-
import addIconMakerAttributes from '../instructure_icon_maker/utils/addIconMakerAttributes';
|
|
26
|
+
import addIconMakerAttributes from '../instructure_icon_maker/utils/addIconMakerAttributes';
|
|
26
27
|
|
|
28
|
+
// TODO: should find a better way to share this code
|
|
27
29
|
import FileBrowser from '../../../canvasFileBrowser/FileBrowser';
|
|
28
30
|
import { isPreviewable } from './Previewable';
|
|
29
31
|
RceFileBrowser.propTypes = {
|
|
@@ -56,10 +58,7 @@ export default function RceFileBrowser(props) {
|
|
|
56
58
|
canvasOrigin
|
|
57
59
|
});
|
|
58
60
|
}, [host, jwt, refreshToken, source, canvasOrigin]);
|
|
59
|
-
|
|
60
61
|
function handleFileSelect(fileInfo) {
|
|
61
|
-
var _fileInfo$api$embed, _fileInfo$api;
|
|
62
|
-
|
|
63
62
|
const content_type = fileInfo.api.type;
|
|
64
63
|
const canPreview = isPreviewable(content_type);
|
|
65
64
|
const url = downloadToWrap(fileInfo.src);
|
|
@@ -69,12 +68,11 @@ export default function RceFileBrowser(props) {
|
|
|
69
68
|
title: fileInfo.name,
|
|
70
69
|
href: url,
|
|
71
70
|
embedded_iframe_url,
|
|
72
|
-
media_id:
|
|
71
|
+
media_id: fileInfo.api.embed?.id || fileInfo.api.mediaEntryId,
|
|
73
72
|
target: '_blank',
|
|
74
73
|
content_type
|
|
75
74
|
};
|
|
76
|
-
|
|
77
|
-
if (((_fileInfo$api = fileInfo.api) === null || _fileInfo$api === void 0 ? void 0 : _fileInfo$api.category) === 'icon_maker_icons') {
|
|
75
|
+
if (fileInfo.api?.category === 'icon_maker_icons') {
|
|
78
76
|
onFileSelectParams.src = fileInfo.api.url;
|
|
79
77
|
addIconMakerAttributes(onFileSelectParams);
|
|
80
78
|
} else {
|
|
@@ -83,14 +81,13 @@ export default function RceFileBrowser(props) {
|
|
|
83
81
|
instructure_scribd_file: canPreview,
|
|
84
82
|
inline_disabled: true
|
|
85
83
|
});
|
|
86
|
-
onFileSelectParams = {
|
|
84
|
+
onFileSelectParams = {
|
|
85
|
+
...onFileSelectParams,
|
|
87
86
|
class: clazz
|
|
88
87
|
};
|
|
89
88
|
}
|
|
90
|
-
|
|
91
89
|
onFileSelect(onFileSelectParams);
|
|
92
90
|
}
|
|
93
|
-
|
|
94
91
|
return /*#__PURE__*/React.createElement(View, {
|
|
95
92
|
as: "div",
|
|
96
93
|
margin: "medium",
|