@instructure/canvas-rce 5.14.1 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React, { useCallback, useState, useEffect, useRef, useMemo } from 'react';
|
|
19
20
|
import PropTypes from 'prop-types';
|
|
20
21
|
import { CloseButton } from '@instructure/ui-buttons';
|
|
@@ -37,10 +38,9 @@ import { validIcon } from '../utils/iconValidation';
|
|
|
37
38
|
import { IconMakerFormHasChanges } from '../utils/IconMakerFormHasChanges';
|
|
38
39
|
import bridge from '../../../../bridge';
|
|
39
40
|
import { shouldIgnoreClose } from '../utils/IconMakerClose';
|
|
40
|
-
import {
|
|
41
|
+
import { instuiPopupMountNodeFn } 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,14 +109,12 @@ function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setRep
|
|
|
111
109
|
isModified: isModified
|
|
112
110
|
}));
|
|
113
111
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
canvasOrigin
|
|
121
|
-
} = _ref;
|
|
112
|
+
export function IconMakerTray({
|
|
113
|
+
editor,
|
|
114
|
+
onUnmount,
|
|
115
|
+
editing,
|
|
116
|
+
canvasOrigin
|
|
117
|
+
}) {
|
|
122
118
|
const nameRef = useRef();
|
|
123
119
|
const applyRef = useRef();
|
|
124
120
|
const [isOpen, setIsOpen] = useState(true);
|
|
@@ -126,16 +122,18 @@ export function IconMakerTray(_ref) {
|
|
|
126
122
|
const title = editing ? formatMessage('Edit Icon') : formatMessage('Create Icon');
|
|
127
123
|
const [settings, settingsStatus, dispatch] = useSvgSettings(editor, editing, canvasOrigin);
|
|
128
124
|
const [status, setStatus] = useState(statuses.IDLE);
|
|
129
|
-
const [initialSettings, setInitialSettings] = useState({
|
|
125
|
+
const [initialSettings, setInitialSettings] = useState({
|
|
126
|
+
...defaultState
|
|
130
127
|
});
|
|
131
128
|
const isModified = useRef(false);
|
|
132
|
-
const [mountNode, setMountNode] = useState(
|
|
129
|
+
const [mountNode, setMountNode] = useState(instuiPopupMountNodeFn());
|
|
133
130
|
const handleFullscreenChange = useCallback(() => {
|
|
134
|
-
setMountNode(
|
|
135
|
-
}, []);
|
|
131
|
+
setMountNode(instuiPopupMountNodeFn());
|
|
132
|
+
}, []);
|
|
133
|
+
|
|
134
|
+
// These useRef objects are needed because when the tray is closed using the escape key
|
|
136
135
|
// objects created by useState are not available, causing the comparison between
|
|
137
136
|
// initialSettings and settings to behave unexpectedly
|
|
138
|
-
|
|
139
137
|
const initialSettingsRef = useRef(initialSettings);
|
|
140
138
|
const settingsRef = useRef(settings);
|
|
141
139
|
const statusRef = useRef(status);
|
|
@@ -143,13 +141,9 @@ export function IconMakerTray(_ref) {
|
|
|
143
141
|
statusRef.current = useMemo(() => status, [status]);
|
|
144
142
|
initialSettingsRef.current = useMemo(() => initialSettings, [initialSettings]);
|
|
145
143
|
useEffect(() => {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
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);
|
|
144
|
+
editor?.rceWrapper?._elementRef?.current?.addEventListener('fullscreenchange', handleFullscreenChange);
|
|
149
145
|
return () => {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
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);
|
|
146
|
+
editor?.rceWrapper?._elementRef?.current?.removeEventListener('fullscreenchange', handleFullscreenChange);
|
|
153
147
|
};
|
|
154
148
|
}, [editor, handleFullscreenChange]);
|
|
155
149
|
useEffect(() => {
|
|
@@ -157,34 +151,27 @@ export function IconMakerTray(_ref) {
|
|
|
157
151
|
isModified.current = formHasChanges.hasChanges();
|
|
158
152
|
}, [settings, initialSettings]);
|
|
159
153
|
const storeProps = useStoreProps();
|
|
160
|
-
|
|
161
154
|
const onClose = event => {
|
|
162
|
-
if (shouldIgnoreClose(event
|
|
163
|
-
if (
|
|
164
|
-
|
|
165
|
-
|
|
155
|
+
if (shouldIgnoreClose(event?.target, editor?.id)) return;
|
|
156
|
+
if (statusRef?.current === statuses.LOADING) return;
|
|
157
|
+
// Uploading an image creates a modal on the page. If that modal is open, we don't want to close the tray
|
|
158
|
+
// eslint-disable-next-line no-extra-boolean-cast
|
|
159
|
+
if (!!hasOpenModal()) return;
|
|
160
|
+
// RCE already uses browser's confirm dialog for unsaved changes
|
|
166
161
|
// Its use here in the Icon Maker tray keeps that consistency
|
|
167
|
-
// eslint-disable-next-line no-restricted-globals, no-alert
|
|
168
162
|
|
|
169
163
|
if (isModified.current && !confirm(UNSAVED_CHANGES_MESSAGE)) {
|
|
170
164
|
return;
|
|
171
165
|
}
|
|
172
|
-
|
|
173
166
|
setIsOpen(false);
|
|
174
167
|
};
|
|
175
|
-
|
|
176
168
|
const hasOpenModal = () => document.querySelector('[data-cid="Modal"]');
|
|
177
|
-
|
|
178
169
|
const isLoading = () => status === statuses.LOADING;
|
|
179
|
-
|
|
180
170
|
const onKeyDown = event => {
|
|
181
|
-
var _applyRef$current, _nameRef$current;
|
|
182
|
-
|
|
183
171
|
if (event.keyCode !== 9) return;
|
|
184
172
|
event.preventDefault();
|
|
185
|
-
event.shiftKey ?
|
|
173
|
+
event.shiftKey ? applyRef.current?.focus() : nameRef.current?.focus();
|
|
186
174
|
};
|
|
187
|
-
|
|
188
175
|
useEffect(() => {
|
|
189
176
|
setReplaceAll(false);
|
|
190
177
|
}, [settings.name]);
|
|
@@ -195,16 +182,13 @@ export function IconMakerTray(_ref) {
|
|
|
195
182
|
payload: null
|
|
196
183
|
});
|
|
197
184
|
setStatus(statuses.IDLE);
|
|
198
|
-
}
|
|
199
|
-
|
|
185
|
+
}
|
|
186
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
200
187
|
}, [settings.color, settings.textColor, settings.text, settings.textSize, settings.textBackgroundColor, settings.textPosition, settings.imageSettings, settings.outlineColor, settings.outlineSize, settings.name]);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
replaceFile = false
|
|
205
|
-
} = _ref2;
|
|
188
|
+
const handleSubmit = ({
|
|
189
|
+
replaceFile = false
|
|
190
|
+
}) => {
|
|
206
191
|
setStatus(statuses.LOADING);
|
|
207
|
-
|
|
208
192
|
if (!validIcon(settings)) {
|
|
209
193
|
dispatch({
|
|
210
194
|
type: actions.SET_ERROR,
|
|
@@ -213,7 +197,6 @@ export function IconMakerTray(_ref) {
|
|
|
213
197
|
setStatus(statuses.ERROR);
|
|
214
198
|
return;
|
|
215
199
|
}
|
|
216
|
-
|
|
217
200
|
const svg = buildSvg(settings, {
|
|
218
201
|
isPreview: false
|
|
219
202
|
});
|
|
@@ -224,17 +207,14 @@ export function IconMakerTray(_ref) {
|
|
|
224
207
|
}, {
|
|
225
208
|
onDuplicate: replaceFile && 'overwrite'
|
|
226
209
|
}).then(writeIconToRCE).then(() => setIsOpen(false)).catch(err => {
|
|
227
|
-
// eslint-disable-next-line no-console
|
|
228
210
|
console.error(err);
|
|
229
211
|
setStatus(statuses.ERROR);
|
|
230
212
|
});
|
|
231
213
|
};
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
display_name
|
|
237
|
-
} = _ref3;
|
|
214
|
+
const writeIconToRCE = ({
|
|
215
|
+
url,
|
|
216
|
+
display_name
|
|
217
|
+
}) => {
|
|
238
218
|
const {
|
|
239
219
|
alt,
|
|
240
220
|
isDecorative,
|
|
@@ -254,12 +234,12 @@ export function IconMakerTray(_ref) {
|
|
|
254
234
|
STYLE: externalStyle,
|
|
255
235
|
// DON'T CHANGE BEFORE READING COMMENT ABOVE
|
|
256
236
|
width: externalWidth
|
|
257
|
-
};
|
|
237
|
+
};
|
|
258
238
|
|
|
239
|
+
// Mark the image as an icon maker icon.
|
|
259
240
|
addIconMakerAttributes(imageAttributes);
|
|
260
241
|
bridge.embedImage(imageAttributes);
|
|
261
242
|
};
|
|
262
|
-
|
|
263
243
|
const defaultImageSettings = () => {
|
|
264
244
|
return {
|
|
265
245
|
mode: '',
|
|
@@ -270,7 +250,6 @@ export function IconMakerTray(_ref) {
|
|
|
270
250
|
cropperSettings: null
|
|
271
251
|
};
|
|
272
252
|
};
|
|
273
|
-
|
|
274
253
|
const replaceInitialSettings = () => {
|
|
275
254
|
const name = editing ? settings.name : undefined;
|
|
276
255
|
const textPosition = editing ? settings.textPosition : defaultState.textPosition;
|
|
@@ -291,17 +270,16 @@ export function IconMakerTray(_ref) {
|
|
|
291
270
|
imageSettings
|
|
292
271
|
});
|
|
293
272
|
};
|
|
294
|
-
|
|
295
273
|
useEffect(() => {
|
|
296
274
|
setStatus(settingsStatus);
|
|
297
|
-
replaceInitialSettings();
|
|
298
|
-
}, [settingsStatus]);
|
|
275
|
+
replaceInitialSettings();
|
|
299
276
|
|
|
277
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
278
|
+
}, [settingsStatus]);
|
|
300
279
|
const handleAlertDismissal = () => dispatch({
|
|
301
280
|
type: actions.SET_ERROR,
|
|
302
281
|
payload: null
|
|
303
282
|
});
|
|
304
|
-
|
|
305
283
|
return /*#__PURE__*/React.createElement(FixedContentTray, {
|
|
306
284
|
title: title,
|
|
307
285
|
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');
|
|
@@ -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
|
export const initialState = {
|
|
20
21
|
mode: '',
|
|
@@ -91,104 +92,102 @@ export const modes = {
|
|
|
91
92
|
label: formatMessage('Multi Color Image')
|
|
92
93
|
}
|
|
93
94
|
};
|
|
94
|
-
|
|
95
95
|
const imageSection = (state, action) => {
|
|
96
96
|
switch (action.type) {
|
|
97
97
|
case actions.START_LOADING.type:
|
|
98
|
-
return {
|
|
98
|
+
return {
|
|
99
|
+
...state,
|
|
99
100
|
loading: true
|
|
100
101
|
};
|
|
101
|
-
|
|
102
102
|
case actions.STOP_LOADING.type:
|
|
103
|
-
return {
|
|
103
|
+
return {
|
|
104
|
+
...state,
|
|
104
105
|
loading: false
|
|
105
106
|
};
|
|
106
|
-
|
|
107
107
|
case actions.SET_IMAGE.type:
|
|
108
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
...state,
|
|
109
110
|
image: action.payload
|
|
110
111
|
};
|
|
111
|
-
|
|
112
112
|
case actions.SET_IMAGE_NAME.type:
|
|
113
|
-
return {
|
|
113
|
+
return {
|
|
114
|
+
...state,
|
|
114
115
|
imageName: action.payload
|
|
115
116
|
};
|
|
116
|
-
|
|
117
117
|
case actions.SET_COMPRESSION_STATUS.type:
|
|
118
|
-
return {
|
|
118
|
+
return {
|
|
119
|
+
...state,
|
|
119
120
|
compressed: action.payload
|
|
120
121
|
};
|
|
121
|
-
|
|
122
122
|
case actions.CLEAR_IMAGE.type:
|
|
123
|
-
return {
|
|
123
|
+
return {
|
|
124
|
+
...state,
|
|
124
125
|
image: '',
|
|
125
126
|
imageName: '',
|
|
126
127
|
compressed: false
|
|
127
128
|
};
|
|
128
|
-
|
|
129
129
|
case actions.SET_ICON.type:
|
|
130
|
-
return {
|
|
130
|
+
return {
|
|
131
|
+
...state,
|
|
131
132
|
icon: action.payload
|
|
132
133
|
};
|
|
133
|
-
|
|
134
134
|
case actions.SET_ICON_FILL_COLOR.type:
|
|
135
|
-
return {
|
|
135
|
+
return {
|
|
136
|
+
...state,
|
|
136
137
|
iconFillColor: action.payload
|
|
137
138
|
};
|
|
138
|
-
|
|
139
139
|
case actions.CLEAR_MODE.type:
|
|
140
|
-
return {
|
|
140
|
+
return {
|
|
141
|
+
...state,
|
|
141
142
|
mode: ''
|
|
142
143
|
};
|
|
143
|
-
|
|
144
144
|
case actions.SET_IMAGE_COLLECTION_OPEN.type:
|
|
145
|
-
return {
|
|
145
|
+
return {
|
|
146
|
+
...state,
|
|
146
147
|
collectionOpen: action.payload
|
|
147
148
|
};
|
|
148
|
-
|
|
149
149
|
case actions.RESET_ALL.type:
|
|
150
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
...state,
|
|
151
152
|
...initialState
|
|
152
153
|
};
|
|
153
|
-
|
|
154
154
|
case modes.uploadImages.type:
|
|
155
|
-
return {
|
|
155
|
+
return {
|
|
156
|
+
...state,
|
|
156
157
|
mode: modes.uploadImages.type
|
|
157
158
|
};
|
|
158
|
-
|
|
159
159
|
case modes.singleColorImages.type:
|
|
160
|
-
return {
|
|
160
|
+
return {
|
|
161
|
+
...state,
|
|
161
162
|
mode: modes.singleColorImages.type
|
|
162
163
|
};
|
|
163
|
-
|
|
164
164
|
case modes.multiColorImages.type:
|
|
165
|
-
return {
|
|
165
|
+
return {
|
|
166
|
+
...state,
|
|
166
167
|
mode: modes.multiColorImages.type
|
|
167
168
|
};
|
|
168
|
-
|
|
169
169
|
case modes.courseImages.type:
|
|
170
|
-
return {
|
|
170
|
+
return {
|
|
171
|
+
...state,
|
|
171
172
|
mode: modes.courseImages.type
|
|
172
173
|
};
|
|
173
|
-
|
|
174
174
|
case actions.UPDATE_SETTINGS.type:
|
|
175
|
-
return {
|
|
175
|
+
return {
|
|
176
|
+
...state,
|
|
176
177
|
...action.payload
|
|
177
178
|
};
|
|
178
|
-
|
|
179
179
|
case actions.SET_CROPPER_OPEN.type:
|
|
180
|
-
return {
|
|
180
|
+
return {
|
|
181
|
+
...state,
|
|
181
182
|
cropperOpen: action.payload
|
|
182
183
|
};
|
|
183
|
-
|
|
184
184
|
case actions.SET_CROPPER_SETTINGS.type:
|
|
185
|
-
return {
|
|
185
|
+
return {
|
|
186
|
+
...state,
|
|
186
187
|
cropperSettings: action.payload
|
|
187
188
|
};
|
|
188
|
-
|
|
189
189
|
default:
|
|
190
190
|
throw Error('Unknown action for image selection reducer');
|
|
191
191
|
}
|
|
192
192
|
};
|
|
193
|
-
|
|
194
193
|
export default imageSection;
|
|
@@ -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 { DEFAULT_SETTINGS } from '../svg/constants';
|
|
19
20
|
export const defaultState = DEFAULT_SETTINGS;
|
|
20
21
|
export const actions = {
|
|
@@ -28,70 +29,69 @@ export const actions = {
|
|
|
28
29
|
SET_HEIGHT: 'SetHeight',
|
|
29
30
|
SET_ERROR: 'SetError'
|
|
30
31
|
};
|
|
31
|
-
|
|
32
32
|
const buildTransformString = state => {
|
|
33
33
|
// All transforms that may be applied to an image
|
|
34
34
|
return [`translate(${state.translateX},${state.translateY})`].join(' ');
|
|
35
35
|
};
|
|
36
|
-
|
|
37
36
|
const nextStateForTransform = (currentState, transformProp, value) => {
|
|
38
37
|
// Set the transform property that actually changed
|
|
39
|
-
let nextState = {
|
|
38
|
+
let nextState = {
|
|
39
|
+
...currentState,
|
|
40
40
|
[transformProp]: value
|
|
41
|
-
};
|
|
42
|
-
// property value that was updated
|
|
41
|
+
};
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
// Regenerate the new "transform" string, taking into account the transform
|
|
44
|
+
// property value that was updated
|
|
45
|
+
nextState = {
|
|
46
|
+
...nextState,
|
|
45
47
|
transform: buildTransformString(nextState)
|
|
46
48
|
};
|
|
47
49
|
return nextState;
|
|
48
50
|
};
|
|
49
|
-
|
|
50
51
|
export const svgSettings = (state, action) => {
|
|
51
52
|
switch (action.type) {
|
|
52
53
|
case actions.SET_IMAGE_SETTINGS:
|
|
53
|
-
return {
|
|
54
|
+
return {
|
|
55
|
+
...state,
|
|
54
56
|
imageSettings: action.payload
|
|
55
57
|
};
|
|
56
|
-
|
|
57
58
|
case actions.SET_EMBED_IMAGE:
|
|
58
|
-
return {
|
|
59
|
+
return {
|
|
60
|
+
...state,
|
|
59
61
|
embedImage: action.payload
|
|
60
62
|
};
|
|
61
|
-
|
|
62
63
|
case actions.SET_X:
|
|
63
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
...state,
|
|
64
66
|
x: action.payload
|
|
65
67
|
};
|
|
66
|
-
|
|
67
68
|
case actions.SET_Y:
|
|
68
|
-
return {
|
|
69
|
+
return {
|
|
70
|
+
...state,
|
|
69
71
|
y: action.payload
|
|
70
72
|
};
|
|
71
|
-
|
|
72
73
|
case actions.SET_WIDTH:
|
|
73
|
-
return {
|
|
74
|
+
return {
|
|
75
|
+
...state,
|
|
74
76
|
width: action.payload
|
|
75
77
|
};
|
|
76
|
-
|
|
77
78
|
case actions.SET_HEIGHT:
|
|
78
|
-
return {
|
|
79
|
+
return {
|
|
80
|
+
...state,
|
|
79
81
|
height: action.payload
|
|
80
82
|
};
|
|
81
|
-
|
|
82
83
|
case actions.SET_ERROR:
|
|
83
|
-
return {
|
|
84
|
+
return {
|
|
85
|
+
...state,
|
|
84
86
|
error: action.payload
|
|
85
87
|
};
|
|
86
|
-
|
|
87
88
|
case actions.SET_TRANSLATE_X:
|
|
88
89
|
return nextStateForTransform(state, 'translateX', action.payload);
|
|
89
|
-
|
|
90
90
|
case actions.SET_TRANSLATE_Y:
|
|
91
91
|
return nextStateForTransform(state, 'translateY', action.payload);
|
|
92
|
-
|
|
93
92
|
default:
|
|
94
|
-
return {
|
|
93
|
+
return {
|
|
94
|
+
...state,
|
|
95
95
|
...action
|
|
96
96
|
};
|
|
97
97
|
}
|
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import formatMessage from '../../../format-message';
|
|
19
20
|
import { BUTTON_ID, TOOLBAR_ID, ICON_MAKER_ATTRIBUTE } from './svg/constants';
|
|
20
21
|
import TrayController from '../instructure_image/ImageOptionsTray/TrayController';
|
|
21
|
-
export const shouldShowEditButton = node => !!
|
|
22
|
+
export const shouldShowEditButton = node => !!node?.getAttribute(ICON_MAKER_ATTRIBUTE);
|
|
22
23
|
export const EDIT_ALT_TEXT_BUTTON_ID = 'inst-icon-maker-edit-alt-text';
|
|
23
24
|
const trayController = new TrayController();
|
|
24
25
|
export default function registerEditToolbar(editor, onAction) {
|
|
@@ -26,7 +27,6 @@ export default function registerEditToolbar(editor, onAction) {
|
|
|
26
27
|
addAltTextButton(editor);
|
|
27
28
|
addContextToolbar(editor);
|
|
28
29
|
}
|
|
29
|
-
|
|
30
30
|
function addButton(editor, onAction) {
|
|
31
31
|
editor.ui.registry.addButton(BUTTON_ID, {
|
|
32
32
|
onAction,
|
|
@@ -34,7 +34,6 @@ function addButton(editor, onAction) {
|
|
|
34
34
|
tooltip: formatMessage('Edit Existing Icon Maker Icon')
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
-
|
|
38
37
|
function addAltTextButton(editor) {
|
|
39
38
|
editor.ui.registry.addButton(EDIT_ALT_TEXT_BUTTON_ID, {
|
|
40
39
|
onAction: () => {
|
|
@@ -45,7 +44,6 @@ function addAltTextButton(editor) {
|
|
|
45
44
|
tooltip: formatMessage('Edit alt text for this icon instance')
|
|
46
45
|
});
|
|
47
46
|
}
|
|
48
|
-
|
|
49
47
|
function addContextToolbar(editor) {
|
|
50
48
|
editor.ui.registry.addContextToolbar(TOOLBAR_ID, {
|
|
51
49
|
items: `${BUTTON_ID} ${EDIT_ALT_TEXT_BUTTON_ID}`,
|
|
@@ -15,15 +15,16 @@
|
|
|
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
|
-
export const TYPE = 'image/svg+xml-icon-maker-icons'; // New constants added to centralize imports
|
|
19
18
|
|
|
19
|
+
export const TYPE = 'image/svg+xml-icon-maker-icons';
|
|
20
|
+
// New constants added to centralize imports
|
|
20
21
|
export const BUTTON_ID = 'inst-icon-maker-edit';
|
|
21
22
|
export const TOOLBAR_ID = 'inst-icon-maker-edit-toolbar';
|
|
22
23
|
export const ICON_MAKER_ATTRIBUTE = 'data-inst-icon-maker-icon';
|
|
23
24
|
export const ICON_MAKER_DOWNLOAD_URL_ATTR = 'data-download-url';
|
|
24
25
|
export const ICON_MAKER_ICONS = 'icon_maker_icons';
|
|
25
|
-
export const ICON_MAKER_PARAM = 'icon_maker_icon';
|
|
26
|
-
|
|
26
|
+
export const ICON_MAKER_PARAM = 'icon_maker_icon';
|
|
27
|
+
// different definitions for filetypes
|
|
27
28
|
export const SVG_XML_TYPE = 'image/svg+xml';
|
|
28
29
|
export const SVG_TYPE = 'image/svg';
|
|
29
30
|
export const Size = {
|