@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,32 +15,28 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import { createSvgElement } from './utils';
|
|
19
20
|
import { CLIP_PATH_ID } from './clipPath';
|
|
20
21
|
import { Shape } from './shape';
|
|
21
22
|
import { Size, STROKE_WIDTH, BASE_SIZE, ICON_PADDING } from './constants';
|
|
22
23
|
const STOCK_IMAGE_TYPES = ['SingleColor', 'MultiColor'];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
outlineSize
|
|
28
|
-
} = _ref;
|
|
24
|
+
const calculateImageHeight = ({
|
|
25
|
+
size,
|
|
26
|
+
outlineSize
|
|
27
|
+
}) => {
|
|
29
28
|
// Subtract the padding at the top and the bottom
|
|
30
29
|
// to get the true height of the shape in the icon
|
|
31
|
-
const iconHeightLessPadding = BASE_SIZE[size] - 2 * ICON_PADDING;
|
|
32
|
-
// border doesn't cover parts of the cropped image
|
|
30
|
+
const iconHeightLessPadding = BASE_SIZE[size] - 2 * ICON_PADDING;
|
|
33
31
|
|
|
32
|
+
// Shrink it by the size of the stroke width so the
|
|
33
|
+
// border doesn't cover parts of the cropped image
|
|
34
34
|
return iconHeightLessPadding - STROKE_WIDTH[outlineSize];
|
|
35
35
|
};
|
|
36
|
-
|
|
37
36
|
export function buildImage(settings) {
|
|
38
|
-
var _settings$imageSettin;
|
|
39
|
-
|
|
40
37
|
// Don't attempt to embed an image if none exist
|
|
41
|
-
if (!
|
|
38
|
+
if (!settings.imageSettings?.image) return;
|
|
42
39
|
let imageAttributes;
|
|
43
|
-
|
|
44
40
|
if (STOCK_IMAGE_TYPES.includes(settings.imageSettings.mode)) {
|
|
45
41
|
imageAttributes = {
|
|
46
42
|
x: settings.x,
|
|
@@ -63,7 +59,6 @@ export function buildImage(settings) {
|
|
|
63
59
|
href: settings.embedImage
|
|
64
60
|
};
|
|
65
61
|
}
|
|
66
|
-
|
|
67
62
|
const group = createSvgElement('g', {
|
|
68
63
|
'clip-path': `url(#${CLIP_PATH_ID})`
|
|
69
64
|
});
|
|
@@ -71,6 +66,7 @@ export function buildImage(settings) {
|
|
|
71
66
|
group.appendChild(image);
|
|
72
67
|
return group;
|
|
73
68
|
}
|
|
69
|
+
|
|
74
70
|
/**
|
|
75
71
|
* Calculates the transformation props for a given
|
|
76
72
|
* shape and size.
|
|
@@ -90,242 +86,232 @@ export function buildImage(settings) {
|
|
|
90
86
|
*
|
|
91
87
|
* @returns Transform
|
|
92
88
|
*/
|
|
93
|
-
|
|
94
89
|
export function transformForShape(shape, size) {
|
|
95
90
|
switch (shape) {
|
|
96
91
|
case Shape.Pentagon:
|
|
97
92
|
return transformForPentagon(size);
|
|
98
|
-
|
|
99
93
|
case Shape.Triangle:
|
|
100
94
|
return transformForTriangle(size);
|
|
101
|
-
|
|
102
95
|
case Shape.Star:
|
|
103
96
|
return transformForStar(size);
|
|
104
|
-
|
|
105
97
|
case Shape.Square:
|
|
106
98
|
return transformForSquare(size);
|
|
107
|
-
|
|
108
99
|
case Shape.Circle:
|
|
109
100
|
return transformForCircle(size);
|
|
110
|
-
|
|
111
101
|
case Shape.Hexagon:
|
|
112
102
|
return transformForHexagon(size);
|
|
113
|
-
|
|
114
103
|
case Shape.Octagon:
|
|
115
104
|
return transformForOctagon(size);
|
|
116
|
-
|
|
117
105
|
case Shape.Diamond:
|
|
118
106
|
return transformForDiamond(size);
|
|
119
|
-
|
|
120
107
|
default:
|
|
121
108
|
return transformForDefault(size);
|
|
122
109
|
}
|
|
123
110
|
}
|
|
124
|
-
|
|
125
111
|
function transformForPentagon(size) {
|
|
126
112
|
switch (size) {
|
|
127
113
|
case Size.ExtraSmall:
|
|
128
|
-
return {
|
|
114
|
+
return {
|
|
115
|
+
...transformForDefault(size),
|
|
129
116
|
...dimensionAttrsFor(40),
|
|
130
117
|
y: '55%'
|
|
131
118
|
};
|
|
132
|
-
|
|
133
119
|
case Size.Small:
|
|
134
|
-
return {
|
|
120
|
+
return {
|
|
121
|
+
...transformForDefault(size),
|
|
135
122
|
...dimensionAttrsFor(80),
|
|
136
123
|
y: '55%'
|
|
137
124
|
};
|
|
138
|
-
|
|
139
125
|
case Size.Medium:
|
|
140
|
-
return {
|
|
126
|
+
return {
|
|
127
|
+
...transformForDefault(size),
|
|
141
128
|
...dimensionAttrsFor(110),
|
|
142
129
|
y: '55%'
|
|
143
130
|
};
|
|
144
|
-
|
|
145
131
|
case Size.Large:
|
|
146
|
-
return {
|
|
132
|
+
return {
|
|
133
|
+
...transformForDefault(size),
|
|
147
134
|
...dimensionAttrsFor(140),
|
|
148
135
|
y: '55%'
|
|
149
136
|
};
|
|
150
137
|
}
|
|
151
138
|
}
|
|
152
|
-
|
|
153
139
|
function transformForTriangle(size) {
|
|
154
140
|
switch (size) {
|
|
155
141
|
case Size.ExtraSmall:
|
|
156
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
...transformForDefault(size),
|
|
157
144
|
...dimensionAttrsFor(24),
|
|
158
145
|
y: '65%'
|
|
159
146
|
};
|
|
160
|
-
|
|
161
147
|
case Size.Small:
|
|
162
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
...transformForDefault(size),
|
|
163
150
|
...dimensionAttrsFor(50),
|
|
164
151
|
y: '65%'
|
|
165
152
|
};
|
|
166
|
-
|
|
167
153
|
case Size.Medium:
|
|
168
|
-
return {
|
|
154
|
+
return {
|
|
155
|
+
...transformForDefault(size),
|
|
169
156
|
...dimensionAttrsFor(80),
|
|
170
157
|
y: '65%'
|
|
171
158
|
};
|
|
172
|
-
|
|
173
159
|
case Size.Large:
|
|
174
|
-
return {
|
|
160
|
+
return {
|
|
161
|
+
...transformForDefault(size),
|
|
175
162
|
...dimensionAttrsFor(112),
|
|
176
163
|
y: '65%'
|
|
177
164
|
};
|
|
178
165
|
}
|
|
179
166
|
}
|
|
180
|
-
|
|
181
167
|
function transformForStar(size) {
|
|
182
168
|
switch (size) {
|
|
183
169
|
case Size.ExtraSmall:
|
|
184
|
-
return {
|
|
170
|
+
return {
|
|
171
|
+
...transformForDefault(size),
|
|
185
172
|
...dimensionAttrsFor(8),
|
|
186
173
|
y: '55%'
|
|
187
174
|
};
|
|
188
|
-
|
|
189
175
|
case Size.Small:
|
|
190
|
-
return {
|
|
176
|
+
return {
|
|
177
|
+
...transformForDefault(size),
|
|
191
178
|
...dimensionAttrsFor(24),
|
|
192
179
|
y: '55%'
|
|
193
180
|
};
|
|
194
|
-
|
|
195
181
|
case Size.Medium:
|
|
196
|
-
return {
|
|
182
|
+
return {
|
|
183
|
+
...transformForDefault(size),
|
|
197
184
|
...dimensionAttrsFor(44),
|
|
198
185
|
y: '55%'
|
|
199
186
|
};
|
|
200
|
-
|
|
201
187
|
case Size.Large:
|
|
202
|
-
return {
|
|
188
|
+
return {
|
|
189
|
+
...transformForDefault(size),
|
|
203
190
|
...dimensionAttrsFor(72),
|
|
204
191
|
y: '55%'
|
|
205
192
|
};
|
|
206
193
|
}
|
|
207
194
|
}
|
|
208
|
-
|
|
209
195
|
function transformForSquare(size) {
|
|
210
196
|
switch (size) {
|
|
211
197
|
case Size.ExtraSmall:
|
|
212
|
-
return {
|
|
198
|
+
return {
|
|
199
|
+
...transformForDefault(size),
|
|
213
200
|
...dimensionAttrsFor(60)
|
|
214
201
|
};
|
|
215
|
-
|
|
216
202
|
case Size.Small:
|
|
217
|
-
return {
|
|
203
|
+
return {
|
|
204
|
+
...transformForDefault(size),
|
|
218
205
|
...dimensionAttrsFor(108)
|
|
219
206
|
};
|
|
220
|
-
|
|
221
207
|
case Size.Medium:
|
|
222
|
-
return {
|
|
208
|
+
return {
|
|
209
|
+
...transformForDefault(size),
|
|
223
210
|
...dimensionAttrsFor(142)
|
|
224
211
|
};
|
|
225
|
-
|
|
226
212
|
case Size.Large:
|
|
227
|
-
return {
|
|
213
|
+
return {
|
|
214
|
+
...transformForDefault(size),
|
|
228
215
|
...dimensionAttrsFor(200)
|
|
229
216
|
};
|
|
230
217
|
}
|
|
231
218
|
}
|
|
232
|
-
|
|
233
219
|
function transformForCircle(size) {
|
|
234
220
|
switch (size) {
|
|
235
221
|
case Size.ExtraSmall:
|
|
236
|
-
return {
|
|
222
|
+
return {
|
|
223
|
+
...transformForDefault(size),
|
|
237
224
|
...dimensionAttrsFor(54)
|
|
238
225
|
};
|
|
239
|
-
|
|
240
226
|
case Size.Small:
|
|
241
|
-
return {
|
|
227
|
+
return {
|
|
228
|
+
...transformForDefault(size),
|
|
242
229
|
...dimensionAttrsFor(100)
|
|
243
230
|
};
|
|
244
|
-
|
|
245
231
|
case Size.Medium:
|
|
246
|
-
return {
|
|
232
|
+
return {
|
|
233
|
+
...transformForDefault(size),
|
|
247
234
|
...dimensionAttrsFor(132)
|
|
248
235
|
};
|
|
249
|
-
|
|
250
236
|
case Size.Large:
|
|
251
|
-
return {
|
|
237
|
+
return {
|
|
238
|
+
...transformForDefault(size),
|
|
252
239
|
...dimensionAttrsFor(180)
|
|
253
240
|
};
|
|
254
241
|
}
|
|
255
242
|
}
|
|
256
|
-
|
|
257
243
|
function transformForHexagon(size) {
|
|
258
244
|
switch (size) {
|
|
259
245
|
case Size.ExtraSmall:
|
|
260
|
-
return {
|
|
246
|
+
return {
|
|
247
|
+
...transformForDefault(size),
|
|
261
248
|
...dimensionAttrsFor(28)
|
|
262
249
|
};
|
|
263
|
-
|
|
264
250
|
case Size.Small:
|
|
265
|
-
return {
|
|
251
|
+
return {
|
|
252
|
+
...transformForDefault(size),
|
|
266
253
|
...dimensionAttrsFor(68)
|
|
267
254
|
};
|
|
268
|
-
|
|
269
255
|
case Size.Medium:
|
|
270
|
-
return {
|
|
256
|
+
return {
|
|
257
|
+
...transformForDefault(size),
|
|
271
258
|
...dimensionAttrsFor(100)
|
|
272
259
|
};
|
|
273
|
-
|
|
274
260
|
case Size.Large:
|
|
275
|
-
return {
|
|
261
|
+
return {
|
|
262
|
+
...transformForDefault(size),
|
|
276
263
|
...dimensionAttrsFor(160)
|
|
277
264
|
};
|
|
278
265
|
}
|
|
279
266
|
}
|
|
280
|
-
|
|
281
267
|
function transformForOctagon(size) {
|
|
282
268
|
switch (size) {
|
|
283
269
|
case Size.ExtraSmall:
|
|
284
|
-
return {
|
|
270
|
+
return {
|
|
271
|
+
...transformForDefault(size),
|
|
285
272
|
...dimensionAttrsFor(36)
|
|
286
273
|
};
|
|
287
|
-
|
|
288
274
|
case Size.Small:
|
|
289
|
-
return {
|
|
275
|
+
return {
|
|
276
|
+
...transformForDefault(size),
|
|
290
277
|
...dimensionAttrsFor(80)
|
|
291
278
|
};
|
|
292
|
-
|
|
293
279
|
case Size.Medium:
|
|
294
|
-
return {
|
|
280
|
+
return {
|
|
281
|
+
...transformForDefault(size),
|
|
295
282
|
...dimensionAttrsFor(110)
|
|
296
283
|
};
|
|
297
|
-
|
|
298
284
|
case Size.Large:
|
|
299
|
-
return {
|
|
285
|
+
return {
|
|
286
|
+
...transformForDefault(size),
|
|
300
287
|
...dimensionAttrsFor(180)
|
|
301
288
|
};
|
|
302
289
|
}
|
|
303
290
|
}
|
|
304
|
-
|
|
305
291
|
function transformForDiamond(size) {
|
|
306
292
|
switch (size) {
|
|
307
293
|
case Size.ExtraSmall:
|
|
308
|
-
return {
|
|
294
|
+
return {
|
|
295
|
+
...transformForDefault(size),
|
|
309
296
|
...dimensionAttrsFor(30)
|
|
310
297
|
};
|
|
311
|
-
|
|
312
298
|
case Size.Small:
|
|
313
|
-
return {
|
|
299
|
+
return {
|
|
300
|
+
...transformForDefault(size),
|
|
314
301
|
...dimensionAttrsFor(60)
|
|
315
302
|
};
|
|
316
|
-
|
|
317
303
|
case Size.Medium:
|
|
318
|
-
return {
|
|
304
|
+
return {
|
|
305
|
+
...transformForDefault(size),
|
|
319
306
|
...dimensionAttrsFor(80)
|
|
320
307
|
};
|
|
321
|
-
|
|
322
308
|
case Size.Large:
|
|
323
|
-
return {
|
|
309
|
+
return {
|
|
310
|
+
...transformForDefault(size),
|
|
324
311
|
...dimensionAttrsFor(120)
|
|
325
312
|
};
|
|
326
313
|
}
|
|
327
314
|
}
|
|
328
|
-
|
|
329
315
|
function transformForDefault(size) {
|
|
330
316
|
const dimensions = {
|
|
331
317
|
[Size.ExtraSmall]: 60,
|
|
@@ -339,11 +325,9 @@ function transformForDefault(size) {
|
|
|
339
325
|
...dimensionAttrsFor(dimensions[size])
|
|
340
326
|
};
|
|
341
327
|
}
|
|
342
|
-
|
|
343
328
|
function translationFor(width) {
|
|
344
329
|
return width / 2 * -1;
|
|
345
330
|
}
|
|
346
|
-
|
|
347
331
|
function dimensionAttrsFor(width) {
|
|
348
332
|
return {
|
|
349
333
|
width,
|
|
@@ -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 { BASE_SIZE, DEFAULT_SETTINGS, STROKE_WIDTH } from './constants';
|
|
19
20
|
import { createSvgElement } from './utils';
|
|
20
21
|
import { buildMetadata } from './metadata';
|
|
@@ -23,46 +24,42 @@ import { buildImage } from './image';
|
|
|
23
24
|
import { buildClipPath } from './clipPath';
|
|
24
25
|
import { buildText, buildTextBackground, getContainerWidth, getContainerHeight } from './text';
|
|
25
26
|
import base64EncodedFont from './font';
|
|
26
|
-
export function buildSvg(settings) {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
export function buildSvg(settings, options = {}) {
|
|
28
|
+
settings = {
|
|
29
|
+
...DEFAULT_SETTINGS,
|
|
29
30
|
...settings
|
|
30
31
|
};
|
|
31
32
|
const mainContainer = buildSvgContainer(settings, options);
|
|
32
33
|
const shapeWrapper = buildSvgWrapper(settings);
|
|
33
|
-
|
|
34
34
|
if (!options.isPreview) {
|
|
35
35
|
const metadata = buildMetadata(settings);
|
|
36
36
|
mainContainer.appendChild(metadata);
|
|
37
37
|
}
|
|
38
|
-
|
|
39
38
|
const fillGroup = buildGroup(settings, {
|
|
40
39
|
fill: true
|
|
41
40
|
}); // The shape with the fill color
|
|
42
|
-
|
|
43
41
|
const borderGroup = buildGroup(settings); // The shape with the outline and image
|
|
44
|
-
|
|
45
42
|
const clipPath = buildClipPath(settings); // A clip path used to crop the image
|
|
46
|
-
|
|
47
43
|
const shape = buildShape(settings); // The actual path of the shape being built
|
|
48
|
-
|
|
49
44
|
const image = buildImage(settings); // The embedded image. Cropped by clipPath
|
|
45
|
+
|
|
50
46
|
// Don't append an image if none has been selected
|
|
51
47
|
// Also add image here so it sits beneath the outline,
|
|
52
48
|
// which is added below to the borderGroup
|
|
53
|
-
|
|
54
49
|
if (image) {
|
|
55
50
|
borderGroup.appendChild(image);
|
|
56
51
|
}
|
|
52
|
+
clipPath.appendChild(shape);
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
fillGroup.appendChild(shape.cloneNode(true)); // These are required to make the group have the right shape
|
|
54
|
+
// These are required to make the group have the right shape
|
|
55
|
+
fillGroup.appendChild(shape.cloneNode(true));
|
|
61
56
|
|
|
57
|
+
// These are required to make the group have the right shape
|
|
62
58
|
borderGroup.appendChild(clipPath.cloneNode(true));
|
|
63
|
-
borderGroup.appendChild(shape.cloneNode(true));
|
|
64
|
-
// sits behind the image and outline
|
|
59
|
+
borderGroup.appendChild(shape.cloneNode(true));
|
|
65
60
|
|
|
61
|
+
// Add fill group before the main group so the fill
|
|
62
|
+
// sits behind the image and outline
|
|
66
63
|
shapeWrapper.appendChild(fillGroup);
|
|
67
64
|
shapeWrapper.appendChild(borderGroup);
|
|
68
65
|
mainContainer.appendChild(shapeWrapper);
|
|
@@ -102,21 +99,17 @@ export function buildSvgContainer(settings, options) {
|
|
|
102
99
|
if (options.isPreview) attributes.style = 'padding: 16px';
|
|
103
100
|
return createSvgElement('svg', attributes);
|
|
104
101
|
}
|
|
105
|
-
export function buildGroup(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
} = _ref;
|
|
111
|
-
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
102
|
+
export function buildGroup({
|
|
103
|
+
color,
|
|
104
|
+
outlineColor,
|
|
105
|
+
outlineSize
|
|
106
|
+
}, options = {}) {
|
|
112
107
|
const g = createSvgElement('g');
|
|
113
|
-
|
|
114
108
|
if (options.fill) {
|
|
115
109
|
g.setAttribute('fill', color || 'none');
|
|
116
110
|
} else if (outlineColor) {
|
|
117
111
|
g.setAttribute('stroke', outlineColor);
|
|
118
112
|
g.setAttribute('stroke-width', STROKE_WIDTH[outlineSize]);
|
|
119
113
|
}
|
|
120
|
-
|
|
121
114
|
return g;
|
|
122
115
|
}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import { createSvgElement } from './utils';
|
|
19
20
|
export function buildMetadata(settings) {
|
|
20
21
|
// Pull off any instance specific 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 { useState, useEffect, useReducer } from 'react';
|
|
19
20
|
import { svgSettings as svgSettingsReducer, defaultState } from '../reducers/svgSettings';
|
|
20
21
|
import { ICON_MAKER_ATTRIBUTE, ICON_MAKER_DOWNLOAD_URL_ATTR } from './constants';
|
|
@@ -27,58 +28,58 @@ export const statuses = {
|
|
|
27
28
|
LOADING: 'loading',
|
|
28
29
|
IDLE: 'idle'
|
|
29
30
|
};
|
|
30
|
-
|
|
31
31
|
const getImageNode = (editor, editing) => {
|
|
32
|
-
var _editor$selection;
|
|
33
|
-
|
|
34
32
|
// If the user is creating an icon rather then editing, no sense trying
|
|
35
33
|
// to get an existing SVG URL
|
|
36
34
|
if (!editing) return;
|
|
37
|
-
const selectedNode = editor
|
|
35
|
+
const selectedNode = editor?.selection?.getNode();
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
// No selection made, return
|
|
38
|
+
if (!selectedNode) return;
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
// The icon maker image is selected. return it
|
|
41
|
+
if (selectedNode.getAttribute(ICON_MAKER_ATTRIBUTE)) return selectedNode;
|
|
42
|
+
|
|
43
|
+
// The icon maker image element is not selected, but it's possible
|
|
42
44
|
// an element wrapping it is. Look for a icon maker image in the
|
|
43
45
|
// selection's children
|
|
46
|
+
const iconMaker = selectedNode.querySelector(`img[${ICON_MAKER_ATTRIBUTE}="true"]`);
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
// Icon maker still not found in the selection's children. Return
|
|
49
|
+
if (!iconMaker) return;
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
// Icon maker found in the selections children. Return it and set the
|
|
48
52
|
// editor's selection to it as well
|
|
49
|
-
|
|
50
53
|
editor.selection.select(iconMaker);
|
|
51
54
|
return iconMaker;
|
|
52
55
|
};
|
|
53
|
-
|
|
54
56
|
const buildMetadataUrl = (fileId, canvasOrigin) => {
|
|
55
57
|
// http://canvas.docker/api/v1/files/2169/icon_metadata
|
|
58
|
+
|
|
56
59
|
const downloadURL = new URL(`${canvasOrigin}/api/v1/files/${fileId}/icon_metadata`);
|
|
57
60
|
return downloadURL.toString();
|
|
58
61
|
};
|
|
59
|
-
|
|
60
62
|
export function useSvgSettings(editor, editing, canvasOrigin) {
|
|
61
63
|
const [settings, dispatch] = useReducer(svgSettingsReducer, defaultState);
|
|
62
64
|
const [status, setStatus] = useState(statuses.IDLE);
|
|
63
65
|
const imgNode = getImageNode(editor, editing);
|
|
64
|
-
const urlFromNode = imgNode
|
|
65
|
-
const altText = imgNode
|
|
66
|
-
const customStyle = imgNode
|
|
67
|
-
const customWidth = imgNode
|
|
68
|
-
const customHeight = imgNode
|
|
66
|
+
const urlFromNode = imgNode?.getAttribute(ICON_MAKER_DOWNLOAD_URL_ATTR);
|
|
67
|
+
const altText = imgNode?.getAttribute('alt');
|
|
68
|
+
const customStyle = imgNode?.getAttribute('style');
|
|
69
|
+
const customWidth = imgNode?.getAttribute('width');
|
|
70
|
+
const customHeight = imgNode?.getAttribute('height');
|
|
69
71
|
useEffect(() => {
|
|
70
72
|
const fetchSvgSettings = async () => {
|
|
71
73
|
if (!urlFromNode) return;
|
|
72
|
-
|
|
73
74
|
try {
|
|
74
|
-
|
|
75
|
+
setStatus(statuses.LOADING);
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
// Parse out the file ID from something like
|
|
77
78
|
// /courses/1/files/3/preview?...
|
|
79
|
+
const fileId = urlFromNode.split('files/')[1]?.split('/')[0];
|
|
80
|
+
const downloadUrl = buildMetadataUrl(fileId, canvasOrigin);
|
|
78
81
|
|
|
79
|
-
|
|
80
|
-
const downloadUrl = buildMetadataUrl(fileId, canvasOrigin); // Download icon metadata. If no metadata found, return defaults
|
|
81
|
-
|
|
82
|
+
// Download icon metadata. If no metadata found, return defaults
|
|
82
83
|
const response = await fetch(downloadUrl);
|
|
83
84
|
const metadata = await response.text();
|
|
84
85
|
if (!metadata) return;
|
|
@@ -86,93 +87,82 @@ export function useSvgSettings(editor, editing, canvasOrigin) {
|
|
|
86
87
|
const fileName = metadataJson.name.replace(/\.[^\.]+$/, '');
|
|
87
88
|
metadataJson.name = fileName;
|
|
88
89
|
metadataJson.originalName = fileName;
|
|
89
|
-
|
|
90
90
|
if (altText === '') {
|
|
91
91
|
metadataJson.isDecorative = true;
|
|
92
92
|
} else if (altText) {
|
|
93
93
|
metadataJson.alt = altText;
|
|
94
|
-
}
|
|
95
|
-
|
|
94
|
+
}
|
|
96
95
|
|
|
96
|
+
// Include external details on metadata
|
|
97
97
|
if (customWidth && customHeight) {
|
|
98
98
|
metadataJson.externalWidth = customWidth;
|
|
99
99
|
metadataJson.externalHeight = customHeight;
|
|
100
100
|
}
|
|
101
|
-
|
|
102
101
|
if (customStyle) {
|
|
103
102
|
metadataJson.externalStyle = customStyle;
|
|
104
103
|
}
|
|
105
|
-
|
|
106
104
|
processMetadataForBackwardCompatibility(metadataJson);
|
|
107
105
|
const {
|
|
108
106
|
imageSettings
|
|
109
107
|
} = metadataJson;
|
|
110
|
-
|
|
111
|
-
if (imageSettings !== null && imageSettings !== void 0 && imageSettings.cropperSettings) {
|
|
108
|
+
if (imageSettings?.cropperSettings) {
|
|
112
109
|
const generatedSvg = await createCroppedImageSvg(imageSettings.cropperSettings, imageSettings.image);
|
|
113
110
|
metadataJson.embedImage = await convertFileToBase64(new Blob([generatedSvg.outerHTML], {
|
|
114
111
|
type: 'image/svg+xml'
|
|
115
112
|
}));
|
|
116
113
|
} else {
|
|
117
|
-
metadataJson.embedImage =
|
|
118
|
-
}
|
|
119
|
-
|
|
114
|
+
metadataJson.embedImage = imageSettings?.image || defaultState.embedImage;
|
|
115
|
+
}
|
|
120
116
|
|
|
117
|
+
// settings found, return parsed results
|
|
121
118
|
dispatch(metadataJson);
|
|
122
119
|
setStatus(statuses.IDLE);
|
|
123
120
|
} catch (e) {
|
|
124
121
|
setStatus(statuses.ERROR);
|
|
125
122
|
}
|
|
126
|
-
};
|
|
127
|
-
|
|
123
|
+
};
|
|
128
124
|
|
|
125
|
+
// If we are editing rather than creating, fetch existing settings
|
|
129
126
|
if (editing) fetchSvgSettings();
|
|
130
127
|
}, [editor, editing, urlFromNode, canvasOrigin, altText, customWidth, customHeight, customStyle]);
|
|
131
128
|
return [settings, status, dispatch];
|
|
132
129
|
}
|
|
133
|
-
|
|
134
130
|
function processMetadataForBackwardCompatibility(metadataJson) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const icon = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe = metadataJson.imageSettings) === null || _metadataJson$imageSe === void 0 ? void 0 : _metadataJson$imageSe.icon;
|
|
138
|
-
const mode = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe2 = metadataJson.imageSettings) === null || _metadataJson$imageSe2 === void 0 ? void 0 : _metadataJson$imageSe2.mode;
|
|
139
|
-
|
|
131
|
+
const icon = metadataJson?.imageSettings?.icon;
|
|
132
|
+
const mode = metadataJson?.imageSettings?.mode;
|
|
140
133
|
if (mode === modes.singleColorImages.type && typeof icon === 'object') {
|
|
141
134
|
const foundIconId = iconsLabels[icon.label];
|
|
142
|
-
|
|
143
135
|
if (foundIconId) {
|
|
144
136
|
metadataJson.imageSettings.icon = foundIconId;
|
|
145
137
|
} else {
|
|
146
138
|
metadataJson.imageSettings = null;
|
|
147
139
|
}
|
|
148
|
-
}
|
|
149
|
-
// If that's the case we are copying it to the correct place
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const cropperSettingsImage = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe3 = metadataJson.imageSettings) === null || _metadataJson$imageSe3 === void 0 ? void 0 : (_metadataJson$imageSe4 = _metadataJson$imageSe3.cropperSettings) === null || _metadataJson$imageSe4 === void 0 ? void 0 : _metadataJson$imageSe4.image;
|
|
153
|
-
const imageSettingsImage = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe5 = metadataJson.imageSettings) === null || _metadataJson$imageSe5 === void 0 ? void 0 : _metadataJson$imageSe5.image;
|
|
154
|
-
const encodedImage = metadataJson === null || metadataJson === void 0 ? void 0 : metadataJson.encodedImage;
|
|
140
|
+
}
|
|
155
141
|
|
|
142
|
+
// On old icons we stored the original image inside cropper settings
|
|
143
|
+
// If that's the case we are copying it to the correct place
|
|
144
|
+
const cropperSettingsImage = metadataJson?.imageSettings?.cropperSettings?.image;
|
|
145
|
+
const imageSettingsImage = metadataJson?.imageSettings?.image;
|
|
146
|
+
const encodedImage = metadataJson?.encodedImage;
|
|
156
147
|
if (imageSettingsImage && cropperSettingsImage && imageSettingsImage !== cropperSettingsImage) {
|
|
157
148
|
metadataJson.imageSettings.image = cropperSettingsImage || imageSettingsImage || encodedImage || '';
|
|
158
149
|
delete metadataJson.imageSettings.cropperSettings.image;
|
|
159
|
-
}
|
|
160
|
-
|
|
150
|
+
}
|
|
161
151
|
|
|
152
|
+
// Removes old and unused encoded image fields from metadata
|
|
162
153
|
delete metadataJson.encodedImage;
|
|
163
154
|
delete metadataJson.encodedImageType;
|
|
164
|
-
delete metadataJson.encodedImageName;
|
|
165
|
-
|
|
166
|
-
const imageSettingsIcon = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe6 = metadataJson.imageSettings) === null || _metadataJson$imageSe6 === void 0 ? void 0 : _metadataJson$imageSe6.icon;
|
|
155
|
+
delete metadataJson.encodedImageName;
|
|
167
156
|
|
|
157
|
+
// Cleans image settings if there is no image or icon
|
|
158
|
+
const imageSettingsIcon = metadataJson?.imageSettings?.icon;
|
|
168
159
|
if (!imageSettingsImage && !imageSettingsIcon) {
|
|
169
160
|
metadataJson.imageSettings = null;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
const cropperSettingsShape = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe7 = metadataJson.imageSettings) === null || _metadataJson$imageSe7 === void 0 ? void 0 : (_metadataJson$imageSe8 = _metadataJson$imageSe7.cropperSettings) === null || _metadataJson$imageSe8 === void 0 ? void 0 : _metadataJson$imageSe8.shape;
|
|
174
|
-
const shape = metadataJson === null || metadataJson === void 0 ? void 0 : metadataJson.shape;
|
|
161
|
+
}
|
|
175
162
|
|
|
163
|
+
// Replaces cropper settings' shape using icon's shape
|
|
164
|
+
const cropperSettingsShape = metadataJson?.imageSettings?.cropperSettings?.shape;
|
|
165
|
+
const shape = metadataJson?.shape;
|
|
176
166
|
if (shape && cropperSettingsShape && shape !== cropperSettingsShape) {
|
|
177
167
|
metadataJson.imageSettings.cropperSettings.shape = shape;
|
|
178
168
|
}
|