@instructure/canvas-rce 5.14.0 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/DEVELOPMENT.md +1 -1
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/__tests__/sidebar/reducers/all_files.test.js +28 -0
- package/babel.config.js +3 -1
- package/build.sh +7 -7
- package/es/bridge/Bridge.js +8 -56
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +12 -59
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +7 -28
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +104 -59
- package/es/common/incremental-loading/LoadMoreButton.js +1 -0
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +1 -2
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +15 -8
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +17 -28
- package/es/enhance-user-content/enhance_user_content.js +28 -60
- package/es/enhance-user-content/external_links.js +5 -8
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +25 -38
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +35 -82
- package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
- package/es/format-message.js +3 -4
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.js +3 -1
- package/es/rce/AlertMessageArea.js +1 -1
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +1 -0
- package/es/rce/RCE.js +12 -11
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +27 -10
- package/es/rce/RCEWrapper.js +167 -386
- package/es/rce/RCEWrapperProps.js +8 -3
- package/es/rce/RceHtmlEditor.js +5 -8
- package/es/rce/ResizeHandle.js +3 -8
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +0 -6
- package/es/rce/StatusBar.js +8 -37
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +35 -57
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +7 -12
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +22 -10
- package/es/rce/indicatorRegion.js +6 -5
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +3 -1
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
- package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
- package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +13 -18
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +7 -19
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
- package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
- package/es/rce/plugins/instructure_links/plugin.js +17 -40
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +27 -29
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
- package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
- package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +5 -14
- package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
- package/es/rce/plugins/shared/ContentSelection.js +17 -58
- package/es/rce/plugins/shared/DimensionUtils.js +1 -8
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +1 -3
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +3 -3
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
- package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
- package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
- package/es/rce/plugins/shared/LinkDisplay.js +1 -2
- package/es/rce/plugins/shared/PreviewIcon.js +1 -6
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
- package/es/rce/plugins/shared/StoreContext.js +1 -2
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
- package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
- package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
- package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
- package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
- package/es/rce/plugins/shared/compressionUtils.js +1 -8
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +1 -0
- package/es/rce/plugins/shared/trayUtils.js +4 -3
- package/es/rce/plugins/shared/useDataUrl.js +9 -9
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +9 -8
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +13 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +8 -10
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +61 -116
- package/es/rcs/buildError.js +5 -17
- package/es/rcs/fake.js +4 -13
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +9 -6
- package/es/sidebar/actions/files.js +3 -6
- package/es/sidebar/actions/filter.js +1 -0
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +12 -11
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +12 -10
- package/es/sidebar/actions/session.js +1 -3
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +14 -39
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +3 -1
- package/es/sidebar/dragHtml.js +5 -3
- package/es/sidebar/reducers/all_files.js +4 -3
- package/es/sidebar/reducers/collection.js +12 -13
- package/es/sidebar/reducers/collections.js +5 -5
- package/es/sidebar/reducers/documents.js +6 -13
- package/es/sidebar/reducers/files.js +3 -3
- package/es/sidebar/reducers/filter.js +1 -8
- package/es/sidebar/reducers/flickr.js +9 -9
- package/es/sidebar/reducers/folder.js +15 -15
- package/es/sidebar/reducers/folders.js +3 -3
- package/es/sidebar/reducers/images.js +3 -13
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +6 -13
- package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
- package/es/sidebar/reducers/noop.js +1 -0
- package/es/sidebar/reducers/rootFolderId.js +1 -2
- package/es/sidebar/reducers/session.js +3 -3
- package/es/sidebar/reducers/ui.js +3 -16
- package/es/sidebar/reducers/upload.js +8 -40
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +13 -24
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +67 -9
- package/es/translations/locales/ca.js +67 -9
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +67 -9
- package/es/translations/locales/da-x-k12.js +67 -9
- package/es/translations/locales/da.js +67 -9
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +67 -9
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +67 -9
- package/es/translations/locales/en-GB-x-ukhe.js +67 -9
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +67 -9
- package/es/translations/locales/en_CA.js +67 -9
- package/es/translations/locales/en_CY.js +67 -9
- package/es/translations/locales/en_GB.js +67 -9
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +67 -9
- package/es/translations/locales/es_ES.js +67 -9
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +67 -9
- package/es/translations/locales/fr.js +67 -9
- package/es/translations/locales/fr_CA.js +68 -10
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +67 -9
- package/es/translations/locales/ht.js +67 -9
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +67 -9
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +67 -9
- package/es/translations/locales/it.js +67 -9
- package/es/translations/locales/ja.js +67 -9
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +67 -9
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +67 -9
- package/es/translations/locales/nb-x-k12.js +67 -9
- package/es/translations/locales/nb.js +67 -9
- package/es/translations/locales/nl.js +67 -9
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +67 -9
- package/es/translations/locales/pt.js +67 -9
- package/es/translations/locales/pt_BR.js +67 -9
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +67 -9
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +67 -9
- package/es/translations/locales/sv-x-k12.js +67 -9
- package/es/translations/locales/sv.js +67 -9
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +67 -9
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +67 -9
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +67 -9
- package/es/translations/locales/zh-Hant.js +67 -9
- package/es/translations/locales/zh.js +67 -9
- package/es/translations/locales/zh_HK.js +67 -9
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +1 -6
- package/es/util/fullscreenHelpers.js +4 -1
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +38 -39
- package/es/util/simpleCache.js +0 -3
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +16 -25
- package/eslint.config.js +239 -0
- package/jest.config.js +1 -1
- package/package.json +77 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/publish_to_npm.sh +1 -1
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +20 -15
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/common/components/FileTree/File.js +0 -64
- package/es/common/components/FileTree/Folder.js +0 -110
- package/es/common/components/FileTree/index.js +0 -84
- package/es/common/components/FileTree/styles.js +0 -72
- package/es/common/components/Loading.js +0 -83
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2022 - 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
|
export const ICON_MAKER_ADD_IMAGE_MENU_ID = 'AddImageMenu';
|
|
21
20
|
export const shouldIgnoreClose = (target, editorId) => {
|
|
22
21
|
try {
|
|
@@ -29,17 +28,14 @@ export const shouldIgnoreClose = (target, editorId) => {
|
|
|
29
28
|
return false;
|
|
30
29
|
}
|
|
31
30
|
};
|
|
32
|
-
|
|
33
31
|
const elementTreeHasAttribute = (target, attribute, value) => {
|
|
34
32
|
while (target) {
|
|
35
33
|
var _target, _target$attributes, _target$attributes$at, _target2;
|
|
36
|
-
|
|
34
|
+
// @ts-expect-error
|
|
37
35
|
if (((_target = target) === null || _target === void 0 ? void 0 : (_target$attributes = _target.attributes) === null || _target$attributes === void 0 ? void 0 : (_target$attributes$at = _target$attributes[attribute]) === null || _target$attributes$at === void 0 ? void 0 : _target$attributes$at.value) === value) {
|
|
38
36
|
return true;
|
|
39
37
|
}
|
|
40
|
-
|
|
41
38
|
target = (_target2 = target) === null || _target2 === void 0 ? void 0 : _target2.parentElement;
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
return false;
|
|
45
41
|
};
|
|
@@ -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 _ from 'lodash';
|
|
19
20
|
export class IconMakerFormHasChanges {
|
|
20
21
|
constructor(initSettings, currSettings) {
|
|
@@ -23,61 +24,46 @@ export class IconMakerFormHasChanges {
|
|
|
23
24
|
this.initialSettings = initSettings;
|
|
24
25
|
this.currentSettings = currSettings;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
27
|
hasNameChange() {
|
|
28
28
|
return 'name' in this.currentSettings && this.initialSettings.name !== this.currentSettings.name;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
30
|
hasAltChange() {
|
|
32
31
|
return 'alt' in this.currentSettings && this.initialSettings.alt !== this.currentSettings.alt;
|
|
33
32
|
}
|
|
34
|
-
|
|
35
33
|
hasShapeNameChange() {
|
|
36
34
|
return 'shape' in this.currentSettings && this.initialSettings.shape !== this.currentSettings.shape;
|
|
37
35
|
}
|
|
38
|
-
|
|
39
36
|
hasShapeSizeChange() {
|
|
40
37
|
return 'size' in this.currentSettings && this.initialSettings.size !== this.currentSettings.size;
|
|
41
38
|
}
|
|
42
|
-
|
|
43
39
|
hasColorNameChange() {
|
|
44
40
|
return 'color' in this.currentSettings && this.initialSettings.color !== this.currentSettings.color;
|
|
45
41
|
}
|
|
46
|
-
|
|
47
42
|
hasOutlineSizeChange() {
|
|
48
43
|
return 'outlineSize' in this.currentSettings && this.initialSettings.outlineSize !== this.currentSettings.outlineSize;
|
|
49
44
|
}
|
|
50
|
-
|
|
51
45
|
hasOutlineColorChange() {
|
|
52
46
|
return 'outlineColor' in this.currentSettings && this.initialSettings.outlineColor !== this.currentSettings.outlineColor;
|
|
53
47
|
}
|
|
54
|
-
|
|
55
48
|
hasTextChange() {
|
|
56
49
|
return 'text' in this.currentSettings && this.initialSettings.text !== this.currentSettings.text;
|
|
57
50
|
}
|
|
58
|
-
|
|
59
51
|
hasTextSizeChange() {
|
|
60
52
|
return 'textSize' in this.currentSettings && this.initialSettings.textSize !== this.currentSettings.textSize;
|
|
61
53
|
}
|
|
62
|
-
|
|
63
54
|
hasTextColorChange() {
|
|
64
55
|
return 'textColor' in this.currentSettings && this.initialSettings.textColor !== this.currentSettings.textColor;
|
|
65
56
|
}
|
|
66
|
-
|
|
67
57
|
hasTextBackgroundColorChange() {
|
|
68
58
|
return 'textBackgroundColor' in this.currentSettings && this.initialSettings.textBackgroundColor !== this.currentSettings.textBackgroundColor;
|
|
69
59
|
}
|
|
70
|
-
|
|
71
60
|
hasTextPositionChange() {
|
|
72
61
|
return 'textPosition' in this.currentSettings && this.initialSettings.textPosition !== this.currentSettings.textPosition;
|
|
73
62
|
}
|
|
74
|
-
|
|
75
63
|
hasImageSettingsChange() {
|
|
76
64
|
return 'imageSettings' in this.currentSettings && !_.isEqual(this.initialSettings.imageSettings, this.currentSettings.imageSettings);
|
|
77
65
|
}
|
|
78
|
-
|
|
79
66
|
hasChanges() {
|
|
80
67
|
return this.hasNameChange() || this.hasAltChange() || this.hasShapeNameChange() || this.hasShapeSizeChange() || this.hasColorNameChange() || this.hasOutlineColorChange() || this.hasOutlineSizeChange() || this.hasTextChange() || this.hasTextSizeChange() || this.hasTextColorChange() || this.hasTextBackgroundColorChange() || this.hasTextPositionChange() || this.hasImageSettingsChange();
|
|
81
68
|
}
|
|
82
|
-
|
|
83
69
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2022 - present Instructure, Inc.
|
|
5
3
|
*
|
|
@@ -17,12 +15,13 @@
|
|
|
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 { ICON_MAKER_ATTRIBUTE, ICON_MAKER_DOWNLOAD_URL_ATTR } from '../svg/constants';
|
|
21
20
|
import buildDownloadUrl from '../../shared/buildDownloadUrl';
|
|
22
|
-
|
|
23
21
|
const addIconMakerAttributes = imageAttributes => {
|
|
22
|
+
// @ts-expect-error
|
|
24
23
|
imageAttributes[ICON_MAKER_ATTRIBUTE] = true;
|
|
24
|
+
// @ts-expect-error
|
|
25
25
|
imageAttributes[ICON_MAKER_DOWNLOAD_URL_ATTR] = buildDownloadUrl(imageAttributes.src);
|
|
26
26
|
};
|
|
27
|
-
|
|
28
27
|
export default addIconMakerAttributes;
|
|
@@ -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
|
export const hasBackgroundColor = settings => {
|
|
19
20
|
return !!settings.color;
|
|
20
21
|
};
|
|
@@ -23,7 +24,6 @@ export const hasText = settings => {
|
|
|
23
24
|
};
|
|
24
25
|
export const hasImage = settings => {
|
|
25
26
|
var _settings$imageSettin;
|
|
26
|
-
|
|
27
27
|
return ((_settings$imageSettin = settings.imageSettings) === null || _settings$imageSettin === void 0 ? void 0 : _settings$imageSettin.image.length) > 0;
|
|
28
28
|
};
|
|
29
29
|
export const hasOutline = settings => {
|
|
@@ -15,45 +15,44 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React, { useState, useCallback, useEffect } from 'react';
|
|
19
20
|
import { debounce } from '@instructure/debounce';
|
|
20
21
|
export default function useDebouncedValue(currentValue, onChange, processValueCallback) {
|
|
21
|
-
const [immediateValue, setImmediateValue] = useState(currentValue);
|
|
22
|
+
const [immediateValue, setImmediateValue] = useState(currentValue);
|
|
22
23
|
|
|
24
|
+
// Only invokes onChange on the trailing edge of the timeout
|
|
23
25
|
const debouncedOnChangeCallback = useCallback(debounce(val => onChange(val), 500, {
|
|
24
26
|
trailing: true
|
|
25
27
|
}), []);
|
|
26
28
|
useEffect(() => {
|
|
27
29
|
let newValue = currentValue;
|
|
28
|
-
|
|
29
30
|
if (processValueCallback) {
|
|
30
31
|
newValue = processValueCallback(immediateValue, newValue);
|
|
31
|
-
}
|
|
32
|
-
// once a truthy value is given
|
|
33
|
-
|
|
32
|
+
}
|
|
34
33
|
|
|
34
|
+
// If so we need to make sure to re-set the immediate value
|
|
35
|
+
// once a truthy value is given
|
|
35
36
|
if (newValue !== immediateValue) {
|
|
36
37
|
setImmediateValue(newValue);
|
|
37
|
-
}
|
|
38
|
-
|
|
38
|
+
}
|
|
39
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
40
|
}, [currentValue]);
|
|
40
41
|
useEffect(() => {
|
|
41
42
|
// Debounce the call to set reducer's state
|
|
42
|
-
debouncedOnChangeCallback(immediateValue);
|
|
43
|
+
debouncedOnChangeCallback(immediateValue);
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
43
45
|
}, [immediateValue]);
|
|
44
|
-
|
|
45
46
|
const handleValueChange = event => {
|
|
46
47
|
let {
|
|
47
48
|
value
|
|
48
49
|
} = event.target;
|
|
49
|
-
|
|
50
50
|
if (processValueCallback) {
|
|
51
51
|
value = processValueCallback(value);
|
|
52
|
-
}
|
|
53
|
-
|
|
52
|
+
}
|
|
54
53
|
|
|
54
|
+
// Immediately set local state for low-latency feedback
|
|
55
55
|
setImmediateValue(value);
|
|
56
56
|
};
|
|
57
|
-
|
|
58
57
|
return [immediateValue, handleValueChange];
|
|
59
58
|
}
|
|
@@ -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 formatMessage from '../../../format-message';
|
|
19
20
|
import { scaleForHeight, scaleForWidth } from '../shared/DimensionUtils';
|
|
20
21
|
import RCEGlobals from '../../RCEGlobals';
|
|
@@ -35,7 +36,6 @@ const sizeByMaximumDimension = {
|
|
|
35
36
|
400: LARGE,
|
|
36
37
|
640: EXTRA_LARGE
|
|
37
38
|
};
|
|
38
|
-
|
|
39
39
|
function parsedOrNull($element, attribute) {
|
|
40
40
|
// when the image is first inserted into the rce, it's size
|
|
41
41
|
// is constrained by a style attribute with max-width, max-height.
|
|
@@ -44,23 +44,19 @@ function parsedOrNull($element, attribute) {
|
|
|
44
44
|
const value = $element.hasAttribute(attribute) ? $element.getAttribute(attribute) : $element[attribute];
|
|
45
45
|
return value ? Math.round(Number.parseInt(value, 10)) : null;
|
|
46
46
|
}
|
|
47
|
-
|
|
48
47
|
function imageSizeFromKnownOptions(imageOptions) {
|
|
49
48
|
const intendedWidth = imageOptions.appliedWidth || imageOptions.naturalWidth;
|
|
50
49
|
const intendedHeight = imageOptions.appliedHeight || imageOptions.naturalHeight;
|
|
51
50
|
const largestDimension = Math.max(intendedWidth, intendedHeight);
|
|
52
51
|
return sizeByMaximumDimension[largestDimension] || CUSTOM;
|
|
53
52
|
}
|
|
54
|
-
|
|
55
53
|
function getPercentageUnitsFromAttributes($element) {
|
|
56
54
|
const getAttribute = attribute => $element.hasAttribute(attribute) ? $element.getAttribute(attribute) : $element[attribute];
|
|
57
|
-
|
|
58
55
|
const widthValue = getAttribute('width');
|
|
59
56
|
const heightValue = getAttribute('height');
|
|
60
57
|
const value = [widthValue, heightValue].find(v => /\d+(?:\.\d+)?%/.test(v));
|
|
61
58
|
return value ? Math.round(Number.parseInt(value, 10)) : null;
|
|
62
59
|
}
|
|
63
|
-
|
|
64
60
|
export function fromImageEmbed($element) {
|
|
65
61
|
const altText = $element.getAttribute('alt');
|
|
66
62
|
const percentageUnits = getPercentageUnitsFromAttributes($element);
|
|
@@ -86,13 +82,10 @@ export function fromVideoEmbed($element) {
|
|
|
86
82
|
let naturalWidth, naturalHeight;
|
|
87
83
|
const $videoIframe = $element.tagName === 'IFRAME' ? $element : $element.firstElementChild;
|
|
88
84
|
const $tinymceIframeShim = $videoIframe.parentElement;
|
|
89
|
-
|
|
90
85
|
if ($videoIframe.tagName === 'IFRAME') {
|
|
91
86
|
$videoDoc = $videoIframe.contentDocument;
|
|
92
|
-
|
|
93
87
|
if ($videoDoc) {
|
|
94
88
|
$videoElem = $videoDoc.querySelector('video');
|
|
95
|
-
|
|
96
89
|
if ($videoElem && ($videoElem.loadedmetadata || $videoElem.readyState >= 1)) {
|
|
97
90
|
naturalWidth = $videoElem.videoWidth;
|
|
98
91
|
naturalHeight = $videoElem.videoHeight;
|
|
@@ -101,10 +94,10 @@ export function fromVideoEmbed($element) {
|
|
|
101
94
|
naturalHeight = $videoIframe.clientHeight;
|
|
102
95
|
naturalWidth = $videoIframe.clientWidth;
|
|
103
96
|
}
|
|
104
|
-
}
|
|
105
|
-
// but maintains it on the span it adds around it.
|
|
106
|
-
|
|
97
|
+
}
|
|
107
98
|
|
|
99
|
+
// because tinymce doesn't put the title attribute on the iframe,
|
|
100
|
+
// but maintains it on the span it adds around it.
|
|
108
101
|
const title = ($videoIframe.getAttribute('title') || $tinymceIframeShim.getAttribute('data-mce-p-title') || '').replace(formatMessage('Video player for '), '');
|
|
109
102
|
const rect = $element.getBoundingClientRect();
|
|
110
103
|
const videoOptions = {
|
|
@@ -115,29 +108,23 @@ export function fromVideoEmbed($element) {
|
|
|
115
108
|
naturalWidth,
|
|
116
109
|
source: $videoElem && $videoElem.querySelector('source')
|
|
117
110
|
};
|
|
118
|
-
|
|
119
111
|
try {
|
|
120
112
|
var _$videoDoc$querySelec;
|
|
121
|
-
|
|
122
113
|
const trackjson = (_$videoDoc$querySelec = $videoDoc.querySelector('[data-tracks]')) === null || _$videoDoc$querySelec === void 0 ? void 0 : _$videoDoc$querySelec.getAttribute('data-tracks');
|
|
123
|
-
|
|
124
114
|
if (trackjson) {
|
|
125
115
|
videoOptions.tracks = JSON.parse(trackjson);
|
|
126
116
|
}
|
|
127
|
-
} catch (_ignore) {
|
|
117
|
+
} catch (_ignore) {
|
|
118
|
+
// bad json?
|
|
128
119
|
}
|
|
129
|
-
|
|
130
120
|
videoOptions.videoSize = imageSizeFromKnownOptions(videoOptions);
|
|
131
|
-
|
|
132
121
|
if (RCEGlobals.getFeatures().media_links_use_attachment_id) {
|
|
133
122
|
const source = $videoIframe.getAttribute('src');
|
|
134
123
|
const matches = source === null || source === void 0 ? void 0 : source.match(/\/media_attachments_iframe\/(\d+)/);
|
|
135
|
-
|
|
136
124
|
if (matches) {
|
|
137
125
|
videoOptions.attachmentId = matches[1];
|
|
138
126
|
}
|
|
139
127
|
}
|
|
140
|
-
|
|
141
128
|
return videoOptions;
|
|
142
129
|
}
|
|
143
130
|
export function scaleImageForHeight(naturalWidth, naturalHeight, targetHeight) {
|
|
@@ -161,7 +148,6 @@ export function scaleToSize(imageSize, naturalWidth, naturalHeight) {
|
|
|
161
148
|
height: naturalHeight
|
|
162
149
|
};
|
|
163
150
|
}
|
|
164
|
-
|
|
165
151
|
const [dimension] = Object.entries(sizeByMaximumDimension).find(_ref => {
|
|
166
152
|
let [, size] = _ref;
|
|
167
153
|
return size === imageSize;
|
|
@@ -178,22 +164,18 @@ export function labelForImageSize(imageSize) {
|
|
|
178
164
|
{
|
|
179
165
|
return formatMessage('Small');
|
|
180
166
|
}
|
|
181
|
-
|
|
182
167
|
case MEDIUM:
|
|
183
168
|
{
|
|
184
169
|
return formatMessage('Medium');
|
|
185
170
|
}
|
|
186
|
-
|
|
187
171
|
case LARGE:
|
|
188
172
|
{
|
|
189
173
|
return formatMessage('Large');
|
|
190
174
|
}
|
|
191
|
-
|
|
192
175
|
case EXTRA_LARGE:
|
|
193
176
|
{
|
|
194
177
|
return formatMessage('Extra Large');
|
|
195
178
|
}
|
|
196
|
-
|
|
197
179
|
default:
|
|
198
180
|
{
|
|
199
181
|
return formatMessage('Custom');
|
|
@@ -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 { func, instanceOf, number, oneOfType, shape, string, bool } from 'prop-types';
|
|
20
21
|
import { Img } from '@instructure/ui-img';
|
|
@@ -36,28 +37,22 @@ export default function Image(_ref) {
|
|
|
36
37
|
const imgTitle = formatMessage('Click to embed {imageName}', {
|
|
37
38
|
imageName: image.display_name
|
|
38
39
|
});
|
|
39
|
-
|
|
40
40
|
function handleDragStart(event) {
|
|
41
41
|
dragHtml(event, renderImage(image, canvasOrigin));
|
|
42
42
|
}
|
|
43
|
-
|
|
44
43
|
function handleDragEnd() {
|
|
45
44
|
document.body.click();
|
|
46
45
|
}
|
|
47
|
-
|
|
48
46
|
function handleImageClick(event) {
|
|
49
47
|
event.preventDefault();
|
|
50
48
|
onClick(image);
|
|
51
49
|
}
|
|
52
|
-
|
|
53
50
|
let elementRef = null;
|
|
54
|
-
|
|
55
51
|
if (focusRef) {
|
|
56
52
|
elementRef = ref => {
|
|
57
53
|
focusRef.current = ref;
|
|
58
54
|
};
|
|
59
55
|
}
|
|
60
|
-
|
|
61
56
|
return /*#__PURE__*/React.createElement(Link, {
|
|
62
57
|
draggable: false,
|
|
63
58
|
elementRef: elementRef,
|
|
@@ -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 { arrayOf, func, instanceOf, shape, bool, string } from 'prop-types';
|
|
20
21
|
import { Flex } from '@instructure/ui-flex';
|
|
@@ -35,11 +36,9 @@ export default function ImageList(_ref) {
|
|
|
35
36
|
wrap: "wrap"
|
|
36
37
|
}, images.map((image, index) => {
|
|
37
38
|
let focusRef = null;
|
|
38
|
-
|
|
39
39
|
if (index === images.length - 1) {
|
|
40
40
|
focusRef = lastItemRef;
|
|
41
41
|
}
|
|
42
|
-
|
|
43
42
|
return /*#__PURE__*/React.createElement(Flex.Item, {
|
|
44
43
|
as: "div",
|
|
45
44
|
key: 'image-' + image.id,
|
|
@@ -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';
|
|
@@ -30,63 +31,51 @@ export default class TrayController {
|
|
|
30
31
|
this._renderId = 0;
|
|
31
32
|
this._isIconMaker = false;
|
|
32
33
|
}
|
|
33
|
-
|
|
34
34
|
get $container() {
|
|
35
35
|
let $container = document.getElementById(CONTAINER_ID);
|
|
36
|
-
|
|
37
36
|
if ($container == null) {
|
|
38
37
|
$container = document.createElement('div');
|
|
39
38
|
$container.id = CONTAINER_ID;
|
|
40
39
|
document.body.appendChild($container);
|
|
41
40
|
}
|
|
42
|
-
|
|
43
41
|
return $container;
|
|
44
42
|
}
|
|
45
|
-
|
|
46
43
|
get isOpen() {
|
|
47
44
|
return this._isOpen;
|
|
48
|
-
}
|
|
49
|
-
|
|
45
|
+
}
|
|
50
46
|
|
|
47
|
+
// Tray may be called to edit an Icon Maker icon alt text
|
|
51
48
|
showTrayForEditor(editor) {
|
|
52
49
|
let isIconMaker = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
53
50
|
this._editor = editor;
|
|
54
51
|
this.$img = editor.selection.getNode();
|
|
55
52
|
this._shouldOpen = true;
|
|
56
53
|
this._isIconMaker = isIconMaker;
|
|
57
|
-
|
|
58
54
|
if (bridge.focusedEditor) {
|
|
59
55
|
// Dismiss any content trays that may already be open
|
|
60
56
|
bridge.hideTrays();
|
|
61
57
|
}
|
|
62
|
-
|
|
63
58
|
this._renderTray();
|
|
64
59
|
}
|
|
65
|
-
|
|
66
60
|
hideTrayForEditor(editor) {
|
|
67
61
|
if (this._editor === editor) {
|
|
68
62
|
this._dismissTray();
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
|
-
|
|
72
65
|
_applyImageOptions(imageOptions) {
|
|
73
66
|
const editor = this._editor;
|
|
74
67
|
const {
|
|
75
68
|
$img
|
|
76
69
|
} = this;
|
|
77
|
-
|
|
78
70
|
if (this._isIconMaker) {
|
|
79
71
|
this._applyIconAltTextChanges($img, editor, imageOptions);
|
|
80
|
-
|
|
81
72
|
this._dismissTray();
|
|
82
|
-
|
|
83
73
|
editor.focus();
|
|
84
74
|
return;
|
|
85
75
|
}
|
|
86
|
-
|
|
87
76
|
if (imageOptions.displayAs === 'embed') {
|
|
88
|
-
updateImage(editor, $img, imageOptions);
|
|
89
|
-
|
|
77
|
+
updateImage(editor, $img, imageOptions);
|
|
78
|
+
// tell tinymce so the context toolbar resets
|
|
90
79
|
editor.fire('ObjectResized', {
|
|
91
80
|
target: $img,
|
|
92
81
|
width: imageOptions.appliedWidth,
|
|
@@ -100,38 +89,31 @@ export default class TrayController {
|
|
|
100
89
|
});
|
|
101
90
|
editor.selection.setContent(link);
|
|
102
91
|
}
|
|
103
|
-
|
|
104
92
|
this._dismissTray();
|
|
105
|
-
|
|
106
93
|
editor.focus();
|
|
107
94
|
}
|
|
108
|
-
|
|
109
95
|
_applyIconAltTextChanges($img, editor, imageOptions) {
|
|
110
96
|
// Workaround: When passing empty string to editor.dom.setAttribs it removes the attribute
|
|
111
97
|
$img.setAttribute('alt', imageOptions.altText);
|
|
112
98
|
editor.dom.setAttribs($img, {
|
|
113
99
|
role: imageOptions.isDecorativeImage ? 'presentation' : null
|
|
114
|
-
});
|
|
100
|
+
});
|
|
115
101
|
|
|
102
|
+
// tell tinymce so the context toolbar resets
|
|
116
103
|
editor.fire('ObjectResized', {
|
|
117
104
|
target: $img,
|
|
118
105
|
width: imageOptions.appliedWidth,
|
|
119
106
|
height: imageOptions.appliedHeight
|
|
120
107
|
});
|
|
121
108
|
}
|
|
122
|
-
|
|
123
109
|
_dismissTray() {
|
|
124
110
|
this._shouldOpen = false;
|
|
125
|
-
|
|
126
111
|
this._renderTray();
|
|
127
|
-
|
|
128
112
|
this.$img = null;
|
|
129
113
|
this._editor = null;
|
|
130
114
|
}
|
|
131
|
-
|
|
132
115
|
_renderTray() {
|
|
133
116
|
var _this$_editor, _this$_editor$selecti;
|
|
134
|
-
|
|
135
117
|
if (this._shouldOpen) {
|
|
136
118
|
/*
|
|
137
119
|
* When the tray is being opened again, it should be rendered fresh
|
|
@@ -140,7 +122,6 @@ export default class TrayController {
|
|
|
140
122
|
*/
|
|
141
123
|
this._renderId++;
|
|
142
124
|
}
|
|
143
|
-
|
|
144
125
|
const io = asImageEmbed(this.$img);
|
|
145
126
|
io.isLinked = ((_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.getSel().anchorNode.tagName) === 'A';
|
|
146
127
|
const element = /*#__PURE__*/React.createElement(ImageOptionsTray, {
|
|
@@ -162,5 +143,4 @@ export default class TrayController {
|
|
|
162
143
|
});
|
|
163
144
|
ReactDOM.render(element, this.$container);
|
|
164
145
|
}
|
|
165
|
-
|
|
166
146
|
}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React, { useState, useEffect } from 'react';
|
|
19
20
|
import { bool, func, number, shape, string } from 'prop-types';
|
|
20
21
|
import { Button, CloseButton } from '@instructure/ui-buttons';
|
|
@@ -59,26 +60,20 @@ export default function ImageOptionsTray(props) {
|
|
|
59
60
|
minWidth: MIN_WIDTH,
|
|
60
61
|
minPercentage: MIN_PERCENTAGE
|
|
61
62
|
});
|
|
62
|
-
|
|
63
63
|
function handleUrlChange(newUrl) {
|
|
64
64
|
setUrl(newUrl);
|
|
65
65
|
}
|
|
66
|
-
|
|
67
66
|
function handleAltTextChange(event) {
|
|
68
67
|
setAltText(event.target.value);
|
|
69
68
|
}
|
|
70
|
-
|
|
71
69
|
function handleIsDecorativeChange(event) {
|
|
72
70
|
setIsDecorativeImage(event.target.checked);
|
|
73
71
|
}
|
|
74
|
-
|
|
75
72
|
function handleDisplayAsChange(event) {
|
|
76
73
|
setDisplayAs(event.target.value);
|
|
77
74
|
}
|
|
78
|
-
|
|
79
75
|
function handleImageSizeChange(event, selectedOption) {
|
|
80
76
|
setImageSize(selectedOption.value);
|
|
81
|
-
|
|
82
77
|
if (selectedOption.value === CUSTOM) {
|
|
83
78
|
setImageHeight(currentHeight);
|
|
84
79
|
setImageWidth(currentWidth);
|
|
@@ -91,13 +86,11 @@ export default function ImageOptionsTray(props) {
|
|
|
91
86
|
setImageWidth(width);
|
|
92
87
|
}
|
|
93
88
|
}
|
|
94
|
-
|
|
95
89
|
function handleSave(event) {
|
|
96
90
|
event.preventDefault();
|
|
97
91
|
const savedAltText = isDecorativeImage ? '' : altText;
|
|
98
92
|
let appliedHeight = imageHeight;
|
|
99
93
|
let appliedWidth = imageWidth;
|
|
100
|
-
|
|
101
94
|
if (imageSize === CUSTOM) {
|
|
102
95
|
if (dimensionsState.usePercentageUnits) {
|
|
103
96
|
appliedHeight = `${dimensionsState.percentage}%`;
|
|
@@ -107,7 +100,6 @@ export default function ImageOptionsTray(props) {
|
|
|
107
100
|
appliedWidth = dimensionsState.width;
|
|
108
101
|
}
|
|
109
102
|
}
|
|
110
|
-
|
|
111
103
|
onSave({
|
|
112
104
|
url,
|
|
113
105
|
altText: savedAltText,
|
|
@@ -117,26 +109,22 @@ export default function ImageOptionsTray(props) {
|
|
|
117
109
|
isDecorativeImage
|
|
118
110
|
});
|
|
119
111
|
}
|
|
120
|
-
|
|
121
112
|
useEffect(() => {
|
|
122
113
|
if (isIconMaker) {
|
|
123
114
|
setShowUrlField(false);
|
|
124
115
|
return;
|
|
125
116
|
}
|
|
126
|
-
|
|
127
117
|
let isValidURL;
|
|
128
|
-
|
|
129
118
|
try {
|
|
130
119
|
isValidURL = validateURL(url);
|
|
131
120
|
} catch (error) {
|
|
132
121
|
isValidURL = false;
|
|
133
122
|
} finally {
|
|
134
123
|
setShowUrlField(isValidURL ? isExternalUrl(url) : true);
|
|
135
|
-
}
|
|
136
|
-
|
|
124
|
+
}
|
|
125
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
137
126
|
}, [url]);
|
|
138
127
|
const messagesForSize = [];
|
|
139
|
-
|
|
140
128
|
if (imageSize !== CUSTOM) {
|
|
141
129
|
messagesForSize.push({
|
|
142
130
|
text: formatMessage('{width} x {height}px', {
|
|
@@ -146,7 +134,6 @@ export default function ImageOptionsTray(props) {
|
|
|
146
134
|
type: 'hint'
|
|
147
135
|
});
|
|
148
136
|
}
|
|
149
|
-
|
|
150
137
|
const disableForIcons = isIconMaker && !isDecorativeImage && altText === '';
|
|
151
138
|
const disableForImages = url === '' || displayAs === 'embed' && (!isDecorativeImage && altText === '' || imageSize === CUSTOM && !(dimensionsState !== null && dimensionsState !== void 0 && dimensionsState.isValid));
|
|
152
139
|
const saveDisabled = isIconMaker ? disableForIcons : disableForImages;
|
|
@@ -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 { bool, func, oneOf, shape, string } from 'prop-types';
|
|
20
21
|
import { contentTrayDocumentShape } from '../../shared/fileShape';
|
|
@@ -24,15 +25,12 @@ import { Text } from '@instructure/ui-text';
|
|
|
24
25
|
import { LoadMoreButton, LoadingIndicator, LoadingStatus, useIncrementalLoading } from '../../../../common/incremental-loading';
|
|
25
26
|
import ImageList from '../ImageList';
|
|
26
27
|
import formatMessage from '../../../../format-message';
|
|
27
|
-
|
|
28
28
|
function hasFiles(images) {
|
|
29
29
|
return images.files.length > 0;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
31
|
function isEmpty(images) {
|
|
33
32
|
return !hasFiles(images) && !images.hasMore && !images.isLoading;
|
|
34
33
|
}
|
|
35
|
-
|
|
36
34
|
export default function Images(props) {
|
|
37
35
|
const {
|
|
38
36
|
fetchInitialImages,
|
|
@@ -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 doFileUpload from '../shared/Upload/doFileUpload';
|
|
19
20
|
export default function (ed, document) {
|
|
20
21
|
return doFileUpload(ed, document, {
|