@instructure/canvas-rce 5.14.0 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/DEVELOPMENT.md +1 -1
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/__tests__/sidebar/reducers/all_files.test.js +28 -0
- package/babel.config.js +3 -1
- package/build.sh +7 -7
- package/es/bridge/Bridge.js +8 -56
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +12 -59
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +7 -28
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +104 -59
- package/es/common/incremental-loading/LoadMoreButton.js +1 -0
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +1 -2
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +15 -8
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +17 -28
- package/es/enhance-user-content/enhance_user_content.js +28 -60
- package/es/enhance-user-content/external_links.js +5 -8
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +25 -38
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +35 -82
- package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
- package/es/format-message.js +3 -4
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.js +3 -1
- package/es/rce/AlertMessageArea.js +1 -1
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +1 -0
- package/es/rce/RCE.js +12 -11
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +27 -10
- package/es/rce/RCEWrapper.js +167 -386
- package/es/rce/RCEWrapperProps.js +8 -3
- package/es/rce/RceHtmlEditor.js +5 -8
- package/es/rce/ResizeHandle.js +3 -8
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +0 -6
- package/es/rce/StatusBar.js +8 -37
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +35 -57
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +7 -12
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +22 -10
- package/es/rce/indicatorRegion.js +6 -5
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +3 -1
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
- package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
- package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +13 -18
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +7 -19
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
- package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
- package/es/rce/plugins/instructure_links/plugin.js +17 -40
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +27 -29
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
- package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
- package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +5 -14
- package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
- package/es/rce/plugins/shared/ContentSelection.js +17 -58
- package/es/rce/plugins/shared/DimensionUtils.js +1 -8
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +1 -3
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +3 -3
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
- package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
- package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
- package/es/rce/plugins/shared/LinkDisplay.js +1 -2
- package/es/rce/plugins/shared/PreviewIcon.js +1 -6
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
- package/es/rce/plugins/shared/StoreContext.js +1 -2
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
- package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
- package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
- package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
- package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
- package/es/rce/plugins/shared/compressionUtils.js +1 -8
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +1 -0
- package/es/rce/plugins/shared/trayUtils.js +4 -3
- package/es/rce/plugins/shared/useDataUrl.js +9 -9
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +9 -8
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +13 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +8 -10
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +61 -116
- package/es/rcs/buildError.js +5 -17
- package/es/rcs/fake.js +4 -13
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +9 -6
- package/es/sidebar/actions/files.js +3 -6
- package/es/sidebar/actions/filter.js +1 -0
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +12 -11
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +12 -10
- package/es/sidebar/actions/session.js +1 -3
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +14 -39
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +3 -1
- package/es/sidebar/dragHtml.js +5 -3
- package/es/sidebar/reducers/all_files.js +4 -3
- package/es/sidebar/reducers/collection.js +12 -13
- package/es/sidebar/reducers/collections.js +5 -5
- package/es/sidebar/reducers/documents.js +6 -13
- package/es/sidebar/reducers/files.js +3 -3
- package/es/sidebar/reducers/filter.js +1 -8
- package/es/sidebar/reducers/flickr.js +9 -9
- package/es/sidebar/reducers/folder.js +15 -15
- package/es/sidebar/reducers/folders.js +3 -3
- package/es/sidebar/reducers/images.js +3 -13
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +6 -13
- package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
- package/es/sidebar/reducers/noop.js +1 -0
- package/es/sidebar/reducers/rootFolderId.js +1 -2
- package/es/sidebar/reducers/session.js +3 -3
- package/es/sidebar/reducers/ui.js +3 -16
- package/es/sidebar/reducers/upload.js +8 -40
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +13 -24
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +67 -9
- package/es/translations/locales/ca.js +67 -9
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +67 -9
- package/es/translations/locales/da-x-k12.js +67 -9
- package/es/translations/locales/da.js +67 -9
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +67 -9
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +67 -9
- package/es/translations/locales/en-GB-x-ukhe.js +67 -9
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +67 -9
- package/es/translations/locales/en_CA.js +67 -9
- package/es/translations/locales/en_CY.js +67 -9
- package/es/translations/locales/en_GB.js +67 -9
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +67 -9
- package/es/translations/locales/es_ES.js +67 -9
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +67 -9
- package/es/translations/locales/fr.js +67 -9
- package/es/translations/locales/fr_CA.js +68 -10
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +67 -9
- package/es/translations/locales/ht.js +67 -9
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +67 -9
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +67 -9
- package/es/translations/locales/it.js +67 -9
- package/es/translations/locales/ja.js +67 -9
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +67 -9
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +67 -9
- package/es/translations/locales/nb-x-k12.js +67 -9
- package/es/translations/locales/nb.js +67 -9
- package/es/translations/locales/nl.js +67 -9
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +67 -9
- package/es/translations/locales/pt.js +67 -9
- package/es/translations/locales/pt_BR.js +67 -9
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +67 -9
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +67 -9
- package/es/translations/locales/sv-x-k12.js +67 -9
- package/es/translations/locales/sv.js +67 -9
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +67 -9
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +67 -9
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +67 -9
- package/es/translations/locales/zh-Hant.js +67 -9
- package/es/translations/locales/zh.js +67 -9
- package/es/translations/locales/zh_HK.js +67 -9
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +1 -6
- package/es/util/fullscreenHelpers.js +4 -1
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +38 -39
- package/es/util/simpleCache.js +0 -3
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +16 -25
- package/eslint.config.js +239 -0
- package/jest.config.js +1 -1
- package/package.json +77 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/publish_to_npm.sh +1 -1
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +20 -15
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/common/components/FileTree/File.js +0 -64
- package/es/common/components/FileTree/Folder.js +0 -110
- package/es/common/components/FileTree/index.js +0 -84
- package/es/common/components/FileTree/styles.js +0 -72
- package/es/common/components/Loading.js +0 -83
package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js
CHANGED
|
@@ -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 formatMessage from '../../../../../../format-message';
|
|
@@ -24,19 +25,21 @@ import { UploadFile } from '../../../../shared/Upload/UploadFile';
|
|
|
24
25
|
import { canCompressImage, compressImage, shouldCompressImage } from '../../../../shared/compressionUtils';
|
|
25
26
|
import { isAnUnsupportedGifPngImage, MAX_GIF_PNG_SIZE_BYTES } from './utils';
|
|
26
27
|
import { PREVIEW_HEIGHT, PREVIEW_WIDTH } from '../../../../shared/ImageCropper/constants';
|
|
27
|
-
|
|
28
28
|
function dispatchCompressedImage(theFile, dispatch, onChange) {
|
|
29
|
-
dispatch({
|
|
29
|
+
dispatch({
|
|
30
|
+
...actions.SET_IMAGE,
|
|
30
31
|
payload: ''
|
|
31
32
|
});
|
|
32
33
|
onChange({
|
|
33
34
|
type: svgActions.SET_EMBED_IMAGE,
|
|
34
35
|
payload: ''
|
|
35
36
|
});
|
|
36
|
-
dispatch({
|
|
37
|
+
dispatch({
|
|
38
|
+
...actions.SET_CROPPER_OPEN,
|
|
37
39
|
payload: true
|
|
38
40
|
});
|
|
39
|
-
dispatch({
|
|
41
|
+
dispatch({
|
|
42
|
+
...actions.SET_IMAGE_COLLECTION_OPEN,
|
|
40
43
|
payload: false
|
|
41
44
|
});
|
|
42
45
|
return compressImage({
|
|
@@ -44,42 +47,46 @@ function dispatchCompressedImage(theFile, dispatch, onChange) {
|
|
|
44
47
|
previewWidth: PREVIEW_WIDTH,
|
|
45
48
|
previewHeight: PREVIEW_HEIGHT
|
|
46
49
|
}).then(blob => {
|
|
47
|
-
dispatch({
|
|
50
|
+
dispatch({
|
|
51
|
+
...actions.SET_COMPRESSION_STATUS,
|
|
48
52
|
payload: true
|
|
49
53
|
});
|
|
50
|
-
dispatch({
|
|
54
|
+
dispatch({
|
|
55
|
+
...actions.SET_IMAGE,
|
|
51
56
|
payload: blob
|
|
52
57
|
});
|
|
53
58
|
onChange({
|
|
54
59
|
type: svgActions.SET_EMBED_IMAGE,
|
|
55
60
|
payload: blob
|
|
56
61
|
});
|
|
57
|
-
dispatch({
|
|
62
|
+
dispatch({
|
|
63
|
+
...actions.SET_IMAGE_NAME,
|
|
58
64
|
payload: theFile.name
|
|
59
65
|
});
|
|
60
66
|
}).catch(() => {
|
|
61
67
|
// If compression fails, use the original one
|
|
62
68
|
// TODO: We can show the user that compression failed in some way
|
|
63
|
-
dispatch({
|
|
69
|
+
dispatch({
|
|
70
|
+
...actions.SET_IMAGE,
|
|
64
71
|
payload: theFile.preview
|
|
65
72
|
});
|
|
66
73
|
onChange({
|
|
67
74
|
type: svgActions.SET_EMBED_IMAGE,
|
|
68
75
|
payload: theFile.preview
|
|
69
76
|
});
|
|
70
|
-
dispatch({
|
|
77
|
+
dispatch({
|
|
78
|
+
...actions.SET_IMAGE_NAME,
|
|
71
79
|
payload: theFile.name
|
|
72
80
|
});
|
|
73
81
|
});
|
|
74
82
|
}
|
|
75
|
-
|
|
76
83
|
export const onSubmit = (dispatch, onChange) => (_editor, _accept, _selectedPanel, uploadData) => {
|
|
77
84
|
const {
|
|
78
85
|
theFile
|
|
79
86
|
} = uploadData;
|
|
80
|
-
|
|
81
87
|
if (isAnUnsupportedGifPngImage(theFile)) {
|
|
82
|
-
dispatch({
|
|
88
|
+
dispatch({
|
|
89
|
+
...actions.SET_IMAGE_COLLECTION_OPEN,
|
|
83
90
|
payload: false
|
|
84
91
|
});
|
|
85
92
|
return onChange({
|
|
@@ -89,29 +96,30 @@ export const onSubmit = (dispatch, onChange) => (_editor, _accept, _selectedPane
|
|
|
89
96
|
})
|
|
90
97
|
});
|
|
91
98
|
}
|
|
92
|
-
|
|
93
99
|
if (canCompressImage() && shouldCompressImage(theFile)) {
|
|
94
100
|
return dispatchCompressedImage(theFile, dispatch, onChange);
|
|
95
101
|
}
|
|
96
|
-
|
|
97
|
-
|
|
102
|
+
dispatch({
|
|
103
|
+
...actions.SET_IMAGE,
|
|
98
104
|
payload: theFile.preview
|
|
99
105
|
});
|
|
100
106
|
onChange({
|
|
101
107
|
type: svgActions.SET_EMBED_IMAGE,
|
|
102
108
|
payload: theFile.preview
|
|
103
109
|
});
|
|
104
|
-
dispatch({
|
|
110
|
+
dispatch({
|
|
111
|
+
...actions.SET_IMAGE_NAME,
|
|
105
112
|
payload: theFile.name
|
|
106
113
|
});
|
|
107
|
-
dispatch({
|
|
114
|
+
dispatch({
|
|
115
|
+
...actions.SET_IMAGE_COLLECTION_OPEN,
|
|
108
116
|
payload: false
|
|
109
117
|
});
|
|
110
|
-
dispatch({
|
|
118
|
+
dispatch({
|
|
119
|
+
...actions.SET_CROPPER_OPEN,
|
|
111
120
|
payload: true
|
|
112
121
|
});
|
|
113
122
|
};
|
|
114
|
-
|
|
115
123
|
const Upload = _ref => {
|
|
116
124
|
let {
|
|
117
125
|
editor,
|
|
@@ -134,7 +142,6 @@ const Upload = _ref => {
|
|
|
134
142
|
canvasOrigin: canvasOrigin
|
|
135
143
|
});
|
|
136
144
|
};
|
|
137
|
-
|
|
138
145
|
Upload.propTypes = {
|
|
139
146
|
editor: PropTypes.object.isRequired,
|
|
140
147
|
dispatch: PropTypes.func,
|
|
@@ -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 PropTypes from 'prop-types';
|
|
19
20
|
import { ImageCropperSettingsPropTypes } from '../../../../shared/ImageCropper/propTypes';
|
|
20
21
|
export const ImageSettingsPropTypes = PropTypes.shape({
|
package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js
CHANGED
|
@@ -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 MAX_GIF_PNG_SIZE_BYTES = 250 * 1024;
|
|
19
20
|
export const isAnUnsupportedGifPngImage = _ref => {
|
|
20
21
|
let {
|
|
@@ -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, useRef } from 'react';
|
|
19
20
|
import { View } from '@instructure/ui-view';
|
|
20
21
|
import { buildSvg } from '../../svg';
|
|
@@ -38,23 +39,22 @@ export const Preview = _ref => {
|
|
|
38
39
|
as: "div"
|
|
39
40
|
}, /*#__PURE__*/React.createElement(ScreenReaderContent, null, previewMessage), /*#__PURE__*/React.createElement("div", {
|
|
40
41
|
"aria-hidden": "true",
|
|
41
|
-
style: {
|
|
42
|
+
style: {
|
|
43
|
+
...checkerboardStyle(SQUARE_SIZE),
|
|
42
44
|
display: 'flex',
|
|
43
45
|
justifyContent: 'center'
|
|
44
46
|
},
|
|
45
47
|
ref: wrapper
|
|
46
48
|
}));
|
|
47
49
|
};
|
|
50
|
+
|
|
48
51
|
/**
|
|
49
52
|
* Remove the node contents and append the svg element.
|
|
50
53
|
*/
|
|
51
|
-
|
|
52
54
|
function appendSvg(svg, node) {
|
|
53
55
|
if (!node) return;
|
|
54
|
-
|
|
55
56
|
while (node.firstChild) {
|
|
56
57
|
node.removeChild(node.lastChild);
|
|
57
58
|
}
|
|
58
|
-
|
|
59
59
|
node.appendChild(svg);
|
|
60
60
|
}
|
package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js
CHANGED
|
@@ -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 { Flex } from '@instructure/ui-flex';
|
|
20
21
|
import { SimpleSelect } from '@instructure/ui-simple-select';
|
|
@@ -23,9 +24,7 @@ import { Shape } from '../../svg/shape';
|
|
|
23
24
|
import { Size } from '../../svg/constants';
|
|
24
25
|
const SIZES = [Size.ExtraSmall, Size.Small, Size.Medium, Size.Large];
|
|
25
26
|
const SHAPE_SECTION_ID = 'icons-tray-shape-section';
|
|
26
|
-
|
|
27
27
|
const getShapeSection = () => document.querySelector(`#${SHAPE_SECTION_ID}`);
|
|
28
|
-
|
|
29
28
|
export const ShapeSection = _ref => {
|
|
30
29
|
let {
|
|
31
30
|
settings,
|
|
@@ -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 { Flex } from '@instructure/ui-flex';
|
|
20
21
|
import { TextInput } from '@instructure/ui-text-input';
|
|
@@ -26,12 +27,9 @@ import { MAX_TOTAL_TEXT_CHARS } from '../../svg/constants';
|
|
|
26
27
|
import useDebouncedValue from '../../utils/useDebouncedValue';
|
|
27
28
|
const TEXT_SIZES = ['small', 'medium', 'large', 'x-large'];
|
|
28
29
|
const TEXT_POSITIONS = ['middle', 'bottom-third', 'below'];
|
|
29
|
-
|
|
30
30
|
const getTextSection = () => document.querySelector('#icons-tray-text-section');
|
|
31
|
-
|
|
32
31
|
const processText = (oldValue, newValue) => {
|
|
33
32
|
let result = newValue;
|
|
34
|
-
|
|
35
33
|
if (newValue.length > MAX_TOTAL_TEXT_CHARS) {
|
|
36
34
|
if (oldValue.length >= MAX_TOTAL_TEXT_CHARS) {
|
|
37
35
|
// When typing chars
|
|
@@ -41,10 +39,8 @@ const processText = (oldValue, newValue) => {
|
|
|
41
39
|
result = result.substring(0, MAX_TOTAL_TEXT_CHARS);
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
|
-
|
|
45
42
|
return result;
|
|
46
43
|
};
|
|
47
|
-
|
|
48
44
|
export const TextSection = _ref => {
|
|
49
45
|
let {
|
|
50
46
|
settings,
|
|
@@ -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, { useCallback, useState, useEffect, useRef, useMemo } from 'react';
|
|
19
20
|
import PropTypes from 'prop-types';
|
|
20
21
|
import { CloseButton } from '@instructure/ui-buttons';
|
|
@@ -40,7 +41,6 @@ import { shouldIgnoreClose } from '../utils/IconMakerClose';
|
|
|
40
41
|
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
41
42
|
const INVALID_MESSAGE = formatMessage('One of the following styles must be added to save an icon: Icon Color, Outline Size, Icon Text, or Image');
|
|
42
43
|
const UNSAVED_CHANGES_MESSAGE = formatMessage('You have unsaved changes in the Icon Maker tray. Do you want to continue without saving these changes?');
|
|
43
|
-
|
|
44
44
|
function renderHeader(title, settings, onKeyDown, onAlertDismissal, onClose) {
|
|
45
45
|
return /*#__PURE__*/React.createElement(View, {
|
|
46
46
|
as: "div",
|
|
@@ -76,7 +76,6 @@ function renderHeader(title, settings, onKeyDown, onAlertDismissal, onClose) {
|
|
|
76
76
|
settings: settings
|
|
77
77
|
}))));
|
|
78
78
|
}
|
|
79
|
-
|
|
80
79
|
function renderBody(settings, dispatch, editor, editing, allowNameChange, nameRef, canvasOrigin, isLoading) {
|
|
81
80
|
return isLoading() ? /*#__PURE__*/React.createElement(Flex, {
|
|
82
81
|
justifyItems: "center"
|
|
@@ -93,7 +92,6 @@ function renderBody(settings, dispatch, editor, editing, allowNameChange, nameRe
|
|
|
93
92
|
canvasOrigin: canvasOrigin
|
|
94
93
|
});
|
|
95
94
|
}
|
|
96
|
-
|
|
97
95
|
function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setReplaceAll, applyRef, isModified) {
|
|
98
96
|
return /*#__PURE__*/React.createElement(View, {
|
|
99
97
|
as: "div",
|
|
@@ -111,7 +109,6 @@ function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setRep
|
|
|
111
109
|
isModified: isModified
|
|
112
110
|
}));
|
|
113
111
|
}
|
|
114
|
-
|
|
115
112
|
export function IconMakerTray(_ref) {
|
|
116
113
|
let {
|
|
117
114
|
editor,
|
|
@@ -126,16 +123,18 @@ export function IconMakerTray(_ref) {
|
|
|
126
123
|
const title = editing ? formatMessage('Edit Icon') : formatMessage('Create Icon');
|
|
127
124
|
const [settings, settingsStatus, dispatch] = useSvgSettings(editor, editing, canvasOrigin);
|
|
128
125
|
const [status, setStatus] = useState(statuses.IDLE);
|
|
129
|
-
const [initialSettings, setInitialSettings] = useState({
|
|
126
|
+
const [initialSettings, setInitialSettings] = useState({
|
|
127
|
+
...defaultState
|
|
130
128
|
});
|
|
131
129
|
const isModified = useRef(false);
|
|
132
130
|
const [mountNode, setMountNode] = useState(instuiPopupMountNode());
|
|
133
131
|
const handleFullscreenChange = useCallback(() => {
|
|
134
132
|
setMountNode(instuiPopupMountNode());
|
|
135
|
-
}, []);
|
|
133
|
+
}, []);
|
|
134
|
+
|
|
135
|
+
// These useRef objects are needed because when the tray is closed using the escape key
|
|
136
136
|
// objects created by useState are not available, causing the comparison between
|
|
137
137
|
// initialSettings and settings to behave unexpectedly
|
|
138
|
-
|
|
139
138
|
const initialSettingsRef = useRef(initialSettings);
|
|
140
139
|
const settingsRef = useRef(settings);
|
|
141
140
|
const statusRef = useRef(status);
|
|
@@ -144,11 +143,9 @@ export function IconMakerTray(_ref) {
|
|
|
144
143
|
initialSettingsRef.current = useMemo(() => initialSettings, [initialSettings]);
|
|
145
144
|
useEffect(() => {
|
|
146
145
|
var _editor$rceWrapper, _editor$rceWrapper$_e, _editor$rceWrapper$_e2;
|
|
147
|
-
|
|
148
146
|
editor === null || editor === void 0 ? void 0 : (_editor$rceWrapper = editor.rceWrapper) === null || _editor$rceWrapper === void 0 ? void 0 : (_editor$rceWrapper$_e = _editor$rceWrapper._elementRef) === null || _editor$rceWrapper$_e === void 0 ? void 0 : (_editor$rceWrapper$_e2 = _editor$rceWrapper$_e.current) === null || _editor$rceWrapper$_e2 === void 0 ? void 0 : _editor$rceWrapper$_e2.addEventListener('fullscreenchange', handleFullscreenChange);
|
|
149
147
|
return () => {
|
|
150
148
|
var _editor$rceWrapper2, _editor$rceWrapper2$_, _editor$rceWrapper2$_2;
|
|
151
|
-
|
|
152
149
|
editor === null || editor === void 0 ? void 0 : (_editor$rceWrapper2 = editor.rceWrapper) === null || _editor$rceWrapper2 === void 0 ? void 0 : (_editor$rceWrapper2$_ = _editor$rceWrapper2._elementRef) === null || _editor$rceWrapper2$_ === void 0 ? void 0 : (_editor$rceWrapper2$_2 = _editor$rceWrapper2$_.current) === null || _editor$rceWrapper2$_2 === void 0 ? void 0 : _editor$rceWrapper2$_2.removeEventListener('fullscreenchange', handleFullscreenChange);
|
|
153
150
|
};
|
|
154
151
|
}, [editor, handleFullscreenChange]);
|
|
@@ -157,34 +154,28 @@ export function IconMakerTray(_ref) {
|
|
|
157
154
|
isModified.current = formHasChanges.hasChanges();
|
|
158
155
|
}, [settings, initialSettings]);
|
|
159
156
|
const storeProps = useStoreProps();
|
|
160
|
-
|
|
161
157
|
const onClose = event => {
|
|
162
158
|
if (shouldIgnoreClose(event === null || event === void 0 ? void 0 : event.target, editor === null || editor === void 0 ? void 0 : editor.id)) return;
|
|
163
|
-
if ((statusRef === null || statusRef === void 0 ? void 0 : statusRef.current) === statuses.LOADING) return;
|
|
164
|
-
|
|
165
|
-
|
|
159
|
+
if ((statusRef === null || statusRef === void 0 ? void 0 : statusRef.current) === statuses.LOADING) return;
|
|
160
|
+
// Uploading an image creates a modal on the page. If that modal is open, we don't want to close the tray
|
|
161
|
+
// eslint-disable-next-line no-extra-boolean-cast
|
|
162
|
+
if (!!hasOpenModal()) return;
|
|
163
|
+
// RCE already uses browser's confirm dialog for unsaved changes
|
|
166
164
|
// Its use here in the Icon Maker tray keeps that consistency
|
|
167
165
|
// eslint-disable-next-line no-restricted-globals, no-alert
|
|
168
|
-
|
|
169
166
|
if (isModified.current && !confirm(UNSAVED_CHANGES_MESSAGE)) {
|
|
170
167
|
return;
|
|
171
168
|
}
|
|
172
|
-
|
|
173
169
|
setIsOpen(false);
|
|
174
170
|
};
|
|
175
|
-
|
|
176
171
|
const hasOpenModal = () => document.querySelector('[data-cid="Modal"]');
|
|
177
|
-
|
|
178
172
|
const isLoading = () => status === statuses.LOADING;
|
|
179
|
-
|
|
180
173
|
const onKeyDown = event => {
|
|
181
174
|
var _applyRef$current, _nameRef$current;
|
|
182
|
-
|
|
183
175
|
if (event.keyCode !== 9) return;
|
|
184
176
|
event.preventDefault();
|
|
185
177
|
event.shiftKey ? (_applyRef$current = applyRef.current) === null || _applyRef$current === void 0 ? void 0 : _applyRef$current.focus() : (_nameRef$current = nameRef.current) === null || _nameRef$current === void 0 ? void 0 : _nameRef$current.focus();
|
|
186
178
|
};
|
|
187
|
-
|
|
188
179
|
useEffect(() => {
|
|
189
180
|
setReplaceAll(false);
|
|
190
181
|
}, [settings.name]);
|
|
@@ -195,16 +186,14 @@ export function IconMakerTray(_ref) {
|
|
|
195
186
|
payload: null
|
|
196
187
|
});
|
|
197
188
|
setStatus(statuses.IDLE);
|
|
198
|
-
}
|
|
199
|
-
|
|
189
|
+
}
|
|
190
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
200
191
|
}, [settings.color, settings.textColor, settings.text, settings.textSize, settings.textBackgroundColor, settings.textPosition, settings.imageSettings, settings.outlineColor, settings.outlineSize, settings.name]);
|
|
201
|
-
|
|
202
192
|
const handleSubmit = _ref2 => {
|
|
203
193
|
let {
|
|
204
194
|
replaceFile = false
|
|
205
195
|
} = _ref2;
|
|
206
196
|
setStatus(statuses.LOADING);
|
|
207
|
-
|
|
208
197
|
if (!validIcon(settings)) {
|
|
209
198
|
dispatch({
|
|
210
199
|
type: actions.SET_ERROR,
|
|
@@ -213,7 +202,6 @@ export function IconMakerTray(_ref) {
|
|
|
213
202
|
setStatus(statuses.ERROR);
|
|
214
203
|
return;
|
|
215
204
|
}
|
|
216
|
-
|
|
217
205
|
const svg = buildSvg(settings, {
|
|
218
206
|
isPreview: false
|
|
219
207
|
});
|
|
@@ -229,7 +217,6 @@ export function IconMakerTray(_ref) {
|
|
|
229
217
|
setStatus(statuses.ERROR);
|
|
230
218
|
});
|
|
231
219
|
};
|
|
232
|
-
|
|
233
220
|
const writeIconToRCE = _ref3 => {
|
|
234
221
|
let {
|
|
235
222
|
url,
|
|
@@ -254,12 +241,12 @@ export function IconMakerTray(_ref) {
|
|
|
254
241
|
STYLE: externalStyle,
|
|
255
242
|
// DON'T CHANGE BEFORE READING COMMENT ABOVE
|
|
256
243
|
width: externalWidth
|
|
257
|
-
};
|
|
244
|
+
};
|
|
258
245
|
|
|
246
|
+
// Mark the image as an icon maker icon.
|
|
259
247
|
addIconMakerAttributes(imageAttributes);
|
|
260
248
|
bridge.embedImage(imageAttributes);
|
|
261
249
|
};
|
|
262
|
-
|
|
263
250
|
const defaultImageSettings = () => {
|
|
264
251
|
return {
|
|
265
252
|
mode: '',
|
|
@@ -270,7 +257,6 @@ export function IconMakerTray(_ref) {
|
|
|
270
257
|
cropperSettings: null
|
|
271
258
|
};
|
|
272
259
|
};
|
|
273
|
-
|
|
274
260
|
const replaceInitialSettings = () => {
|
|
275
261
|
const name = editing ? settings.name : undefined;
|
|
276
262
|
const textPosition = editing ? settings.textPosition : defaultState.textPosition;
|
|
@@ -291,17 +277,16 @@ export function IconMakerTray(_ref) {
|
|
|
291
277
|
imageSettings
|
|
292
278
|
});
|
|
293
279
|
};
|
|
294
|
-
|
|
295
280
|
useEffect(() => {
|
|
296
281
|
setStatus(settingsStatus);
|
|
297
|
-
replaceInitialSettings();
|
|
298
|
-
}, [settingsStatus]);
|
|
282
|
+
replaceInitialSettings();
|
|
299
283
|
|
|
284
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
285
|
+
}, [settingsStatus]);
|
|
300
286
|
const handleAlertDismissal = () => dispatch({
|
|
301
287
|
type: actions.SET_ERROR,
|
|
302
288
|
payload: null
|
|
303
289
|
});
|
|
304
|
-
|
|
305
290
|
return /*#__PURE__*/React.createElement(FixedContentTray, {
|
|
306
291
|
title: title,
|
|
307
292
|
isOpen: isOpen,
|
|
@@ -15,13 +15,13 @@
|
|
|
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 { View } from '@instructure/ui-view';
|
|
21
22
|
import Images from '../../instructure_image/Images';
|
|
22
23
|
import { contentTrayDocumentShape } from '../../shared/fileShape';
|
|
23
24
|
import { ICON_MAKER_ICONS } from '../svg/constants';
|
|
24
|
-
|
|
25
25
|
const SavedIconMakerList = props => {
|
|
26
26
|
const {
|
|
27
27
|
sortBy,
|
|
@@ -31,7 +31,8 @@ const SavedIconMakerList = props => {
|
|
|
31
31
|
fetchInitialImages,
|
|
32
32
|
fetchNextImages,
|
|
33
33
|
contextType
|
|
34
|
-
} = {
|
|
34
|
+
} = {
|
|
35
|
+
...props
|
|
35
36
|
};
|
|
36
37
|
const {
|
|
37
38
|
files,
|
|
@@ -62,9 +63,8 @@ const SavedIconMakerList = props => {
|
|
|
62
63
|
isIconMaker: true
|
|
63
64
|
}));
|
|
64
65
|
};
|
|
65
|
-
/* eslint-disable react/no-unused-prop-types */
|
|
66
|
-
|
|
67
66
|
|
|
67
|
+
/* eslint-disable react/no-unused-prop-types */
|
|
68
68
|
SavedIconMakerList.propTypes = {
|
|
69
69
|
sortBy: PropTypes.shape({
|
|
70
70
|
sort: PropTypes.oneOf(['date_added', 'alphabetical']).isRequired,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2021 - present Instructure, Inc.
|
|
5
3
|
*
|
|
@@ -17,13 +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 bridge from '../../../bridge';
|
|
21
20
|
import formatMessage from '../../../format-message';
|
|
22
21
|
import { isOKToLink } from '../../contentInsertionUtils';
|
|
23
22
|
import clickCallback, { CREATE_ICON_MAKER, EDIT_ICON_MAKER, LIST_ICON_MAKER } from './clickCallback';
|
|
24
23
|
import registerEditToolbar from './registerEditToolbar';
|
|
25
24
|
import tinymce from 'tinymce';
|
|
26
|
-
|
|
27
25
|
function getMenuItems() {
|
|
28
26
|
return [{
|
|
29
27
|
text: formatMessage('Create Icon Maker Icon'),
|
|
@@ -33,27 +31,24 @@ function getMenuItems() {
|
|
|
33
31
|
value: 'instructure_list_icon_maker'
|
|
34
32
|
}];
|
|
35
33
|
}
|
|
36
|
-
|
|
37
34
|
function handleOptionSelected(ed, value) {
|
|
38
35
|
switch (value) {
|
|
39
36
|
case 'instructure_create_icon_maker':
|
|
40
37
|
ed.focus(true);
|
|
41
38
|
ed.execCommand('instructureTrayForIconMakerPlugin', false, CREATE_ICON_MAKER);
|
|
42
39
|
break;
|
|
43
|
-
|
|
44
40
|
case 'instructure_list_icon_maker':
|
|
45
41
|
ed.focus(true);
|
|
46
42
|
ed.execCommand('instructureTrayForIconMakerPlugin', false, LIST_ICON_MAKER);
|
|
47
43
|
break;
|
|
48
|
-
|
|
49
44
|
case 'instructure_edit_icon_maker':
|
|
50
45
|
ed.focus(true);
|
|
51
46
|
ed.execCommand('instructureTrayForIconMakerPlugin', false, EDIT_ICON_MAKER);
|
|
52
47
|
break;
|
|
53
48
|
}
|
|
54
|
-
}
|
|
55
|
-
|
|
49
|
+
}
|
|
56
50
|
|
|
51
|
+
// Register plugin
|
|
57
52
|
tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
|
|
58
53
|
// Register tray control command
|
|
59
54
|
ed.addCommand('instructureTrayForIconMakerPlugin', (_ui, type) => {
|
|
@@ -62,8 +57,9 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
|
|
|
62
57
|
} else {
|
|
63
58
|
clickCallback(ed, document, type);
|
|
64
59
|
}
|
|
65
|
-
});
|
|
60
|
+
});
|
|
66
61
|
|
|
62
|
+
// Register menu items
|
|
67
63
|
ed.ui.registry.addNestedMenuItem('instructure_icon_maker', {
|
|
68
64
|
text: formatMessage('Icon Maker Icons'),
|
|
69
65
|
icon: 'buttons',
|
|
@@ -76,8 +72,9 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
|
|
|
76
72
|
return () => {};
|
|
77
73
|
}
|
|
78
74
|
}))
|
|
79
|
-
});
|
|
75
|
+
});
|
|
80
76
|
|
|
77
|
+
// Register button
|
|
81
78
|
ed.ui.registry.addMenuButton('instructure_icon_maker', {
|
|
82
79
|
tooltip: formatMessage('Icon Maker Icons'),
|
|
83
80
|
icon: 'buttons',
|
|
@@ -87,21 +84,20 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
|
|
|
87
84
|
value: item.value,
|
|
88
85
|
onAction: () => handleOptionSelected(ed, item.value)
|
|
89
86
|
}))),
|
|
90
|
-
|
|
91
87
|
onSetup(api) {
|
|
92
88
|
function handleNodeChange(_e) {
|
|
93
89
|
api.setDisabled(!isOKToLink(ed.selection.getContent()));
|
|
94
90
|
}
|
|
95
|
-
|
|
96
91
|
setTimeout(handleNodeChange);
|
|
97
92
|
ed.on('NodeChange', handleNodeChange);
|
|
98
93
|
return () => {
|
|
99
94
|
ed.off('NodeChange', handleNodeChange);
|
|
100
95
|
};
|
|
101
96
|
}
|
|
97
|
+
});
|
|
102
98
|
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
// Register context toolbar for editing existing icon maker icons
|
|
100
|
+
// @ts-expect-error
|
|
105
101
|
registerEditToolbar(ed, api => {
|
|
106
102
|
if (!api.isDisabled()) {
|
|
107
103
|
handleOptionSelected(ed, 'instructure_edit_icon_maker');
|