@instructure/canvas-rce 5.14.1 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/DEVELOPMENT.md +1 -1
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → __tests__/sidebar/reducers/all_files.test.js} +10 -6
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +8 -56
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +12 -59
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +7 -28
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +104 -59
- package/es/common/incremental-loading/LoadMoreButton.js +1 -0
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +1 -2
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +15 -8
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +17 -28
- package/es/enhance-user-content/enhance_user_content.js +28 -60
- package/es/enhance-user-content/external_links.js +5 -8
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +12 -34
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +35 -82
- package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
- package/es/format-message.js +3 -4
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.js +3 -1
- package/es/rce/AlertMessageArea.js +1 -1
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +1 -0
- package/es/rce/RCE.js +12 -11
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +27 -10
- package/es/rce/RCEWrapper.js +167 -386
- package/es/rce/RCEWrapperProps.js +8 -3
- package/es/rce/RceHtmlEditor.js +5 -8
- package/es/rce/ResizeHandle.js +3 -8
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +0 -6
- package/es/rce/StatusBar.js +8 -37
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +35 -57
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +7 -12
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +22 -10
- package/es/rce/indicatorRegion.js +6 -5
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +3 -1
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
- package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
- package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +13 -18
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +7 -19
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
- package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
- package/es/rce/plugins/instructure_links/plugin.js +17 -40
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +27 -29
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/{__mocks__/_mockStudioPlayer.js → plugins/instructure_rce_external_tools/constants.js} +11 -3
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
- package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
- package/es/rce/plugins/shared/CanvasContentTray.js +22 -49
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +5 -14
- package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
- package/es/rce/plugins/shared/ContentSelection.js +17 -58
- package/es/rce/plugins/shared/DimensionUtils.js +1 -8
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +1 -3
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +3 -3
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
- package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
- package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
- package/es/rce/plugins/shared/LinkDisplay.js +1 -2
- package/es/rce/plugins/shared/PreviewIcon.js +1 -6
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
- package/es/rce/plugins/shared/StoreContext.js +1 -2
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
- package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
- package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
- package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
- package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
- package/es/rce/plugins/shared/compressionUtils.js +1 -8
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +1 -0
- package/es/rce/plugins/shared/trayUtils.js +4 -3
- package/es/rce/plugins/shared/useDataUrl.js +9 -9
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +9 -8
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +13 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +8 -10
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +61 -116
- package/es/rcs/buildError.js +5 -17
- package/es/rcs/fake.js +4 -13
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +9 -6
- package/es/sidebar/actions/files.js +3 -6
- package/es/sidebar/actions/filter.js +1 -0
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +12 -11
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +12 -10
- package/es/sidebar/actions/session.js +1 -3
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +14 -39
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +3 -1
- package/es/sidebar/dragHtml.js +5 -3
- package/es/sidebar/reducers/all_files.js +4 -3
- package/es/sidebar/reducers/collection.js +12 -13
- package/es/sidebar/reducers/collections.js +5 -5
- package/es/sidebar/reducers/documents.js +6 -13
- package/es/sidebar/reducers/files.js +3 -3
- package/es/sidebar/reducers/filter.js +1 -8
- package/es/sidebar/reducers/flickr.js +9 -9
- package/es/sidebar/reducers/folder.js +15 -15
- package/es/sidebar/reducers/folders.js +3 -3
- package/es/sidebar/reducers/images.js +3 -13
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +6 -13
- package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
- package/es/sidebar/reducers/noop.js +1 -0
- package/es/sidebar/reducers/rootFolderId.js +1 -2
- package/es/sidebar/reducers/session.js +3 -3
- package/es/sidebar/reducers/ui.js +3 -16
- package/es/sidebar/reducers/upload.js +8 -40
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +13 -24
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +67 -9
- package/es/translations/locales/ca.js +67 -9
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +67 -9
- package/es/translations/locales/da-x-k12.js +67 -9
- package/es/translations/locales/da.js +67 -9
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +67 -9
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +67 -9
- package/es/translations/locales/en-GB-x-ukhe.js +67 -9
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +67 -9
- package/es/translations/locales/en_CA.js +67 -9
- package/es/translations/locales/en_CY.js +67 -9
- package/es/translations/locales/en_GB.js +67 -9
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +67 -9
- package/es/translations/locales/es_ES.js +67 -9
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +67 -9
- package/es/translations/locales/fr.js +67 -9
- package/es/translations/locales/fr_CA.js +68 -10
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +67 -9
- package/es/translations/locales/ht.js +67 -9
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +67 -9
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +67 -9
- package/es/translations/locales/it.js +67 -9
- package/es/translations/locales/ja.js +67 -9
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +67 -9
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +67 -9
- package/es/translations/locales/nb-x-k12.js +67 -9
- package/es/translations/locales/nb.js +67 -9
- package/es/translations/locales/nl.js +67 -9
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +67 -9
- package/es/translations/locales/pt.js +67 -9
- package/es/translations/locales/pt_BR.js +67 -9
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +67 -9
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +67 -9
- package/es/translations/locales/sv-x-k12.js +67 -9
- package/es/translations/locales/sv.js +67 -9
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +67 -9
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +67 -9
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +67 -9
- package/es/translations/locales/zh-Hant.js +67 -9
- package/es/translations/locales/zh.js +67 -9
- package/es/translations/locales/zh_HK.js +67 -9
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +1 -6
- package/es/util/fullscreenHelpers.js +4 -1
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +38 -39
- package/es/util/simpleCache.js +0 -3
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +16 -25
- package/eslint.config.js +239 -0
- package/jest.config.js +1 -1
- package/package.json +76 -81
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +20 -15
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/styleMock.js +0 -18
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
|
@@ -15,12 +15,12 @@
|
|
|
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
24
|
const calculateImageHeight = _ref => {
|
|
25
25
|
let {
|
|
26
26
|
size,
|
|
@@ -28,19 +28,17 @@ const calculateImageHeight = _ref => {
|
|
|
28
28
|
} = _ref;
|
|
29
29
|
// Subtract the padding at the top and the bottom
|
|
30
30
|
// 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
|
|
31
|
+
const iconHeightLessPadding = BASE_SIZE[size] - 2 * ICON_PADDING;
|
|
33
32
|
|
|
33
|
+
// Shrink it by the size of the stroke width so the
|
|
34
|
+
// border doesn't cover parts of the cropped image
|
|
34
35
|
return iconHeightLessPadding - STROKE_WIDTH[outlineSize];
|
|
35
36
|
};
|
|
36
|
-
|
|
37
37
|
export function buildImage(settings) {
|
|
38
38
|
var _settings$imageSettin;
|
|
39
|
-
|
|
40
39
|
// Don't attempt to embed an image if none exist
|
|
41
40
|
if (!((_settings$imageSettin = settings.imageSettings) !== null && _settings$imageSettin !== void 0 && _settings$imageSettin.image)) return;
|
|
42
41
|
let imageAttributes;
|
|
43
|
-
|
|
44
42
|
if (STOCK_IMAGE_TYPES.includes(settings.imageSettings.mode)) {
|
|
45
43
|
imageAttributes = {
|
|
46
44
|
x: settings.x,
|
|
@@ -63,7 +61,6 @@ export function buildImage(settings) {
|
|
|
63
61
|
href: settings.embedImage
|
|
64
62
|
};
|
|
65
63
|
}
|
|
66
|
-
|
|
67
64
|
const group = createSvgElement('g', {
|
|
68
65
|
'clip-path': `url(#${CLIP_PATH_ID})`
|
|
69
66
|
});
|
|
@@ -71,6 +68,7 @@ export function buildImage(settings) {
|
|
|
71
68
|
group.appendChild(image);
|
|
72
69
|
return group;
|
|
73
70
|
}
|
|
71
|
+
|
|
74
72
|
/**
|
|
75
73
|
* Calculates the transformation props for a given
|
|
76
74
|
* shape and size.
|
|
@@ -90,242 +88,232 @@ export function buildImage(settings) {
|
|
|
90
88
|
*
|
|
91
89
|
* @returns Transform
|
|
92
90
|
*/
|
|
93
|
-
|
|
94
91
|
export function transformForShape(shape, size) {
|
|
95
92
|
switch (shape) {
|
|
96
93
|
case Shape.Pentagon:
|
|
97
94
|
return transformForPentagon(size);
|
|
98
|
-
|
|
99
95
|
case Shape.Triangle:
|
|
100
96
|
return transformForTriangle(size);
|
|
101
|
-
|
|
102
97
|
case Shape.Star:
|
|
103
98
|
return transformForStar(size);
|
|
104
|
-
|
|
105
99
|
case Shape.Square:
|
|
106
100
|
return transformForSquare(size);
|
|
107
|
-
|
|
108
101
|
case Shape.Circle:
|
|
109
102
|
return transformForCircle(size);
|
|
110
|
-
|
|
111
103
|
case Shape.Hexagon:
|
|
112
104
|
return transformForHexagon(size);
|
|
113
|
-
|
|
114
105
|
case Shape.Octagon:
|
|
115
106
|
return transformForOctagon(size);
|
|
116
|
-
|
|
117
107
|
case Shape.Diamond:
|
|
118
108
|
return transformForDiamond(size);
|
|
119
|
-
|
|
120
109
|
default:
|
|
121
110
|
return transformForDefault(size);
|
|
122
111
|
}
|
|
123
112
|
}
|
|
124
|
-
|
|
125
113
|
function transformForPentagon(size) {
|
|
126
114
|
switch (size) {
|
|
127
115
|
case Size.ExtraSmall:
|
|
128
|
-
return {
|
|
116
|
+
return {
|
|
117
|
+
...transformForDefault(size),
|
|
129
118
|
...dimensionAttrsFor(40),
|
|
130
119
|
y: '55%'
|
|
131
120
|
};
|
|
132
|
-
|
|
133
121
|
case Size.Small:
|
|
134
|
-
return {
|
|
122
|
+
return {
|
|
123
|
+
...transformForDefault(size),
|
|
135
124
|
...dimensionAttrsFor(80),
|
|
136
125
|
y: '55%'
|
|
137
126
|
};
|
|
138
|
-
|
|
139
127
|
case Size.Medium:
|
|
140
|
-
return {
|
|
128
|
+
return {
|
|
129
|
+
...transformForDefault(size),
|
|
141
130
|
...dimensionAttrsFor(110),
|
|
142
131
|
y: '55%'
|
|
143
132
|
};
|
|
144
|
-
|
|
145
133
|
case Size.Large:
|
|
146
|
-
return {
|
|
134
|
+
return {
|
|
135
|
+
...transformForDefault(size),
|
|
147
136
|
...dimensionAttrsFor(140),
|
|
148
137
|
y: '55%'
|
|
149
138
|
};
|
|
150
139
|
}
|
|
151
140
|
}
|
|
152
|
-
|
|
153
141
|
function transformForTriangle(size) {
|
|
154
142
|
switch (size) {
|
|
155
143
|
case Size.ExtraSmall:
|
|
156
|
-
return {
|
|
144
|
+
return {
|
|
145
|
+
...transformForDefault(size),
|
|
157
146
|
...dimensionAttrsFor(24),
|
|
158
147
|
y: '65%'
|
|
159
148
|
};
|
|
160
|
-
|
|
161
149
|
case Size.Small:
|
|
162
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
...transformForDefault(size),
|
|
163
152
|
...dimensionAttrsFor(50),
|
|
164
153
|
y: '65%'
|
|
165
154
|
};
|
|
166
|
-
|
|
167
155
|
case Size.Medium:
|
|
168
|
-
return {
|
|
156
|
+
return {
|
|
157
|
+
...transformForDefault(size),
|
|
169
158
|
...dimensionAttrsFor(80),
|
|
170
159
|
y: '65%'
|
|
171
160
|
};
|
|
172
|
-
|
|
173
161
|
case Size.Large:
|
|
174
|
-
return {
|
|
162
|
+
return {
|
|
163
|
+
...transformForDefault(size),
|
|
175
164
|
...dimensionAttrsFor(112),
|
|
176
165
|
y: '65%'
|
|
177
166
|
};
|
|
178
167
|
}
|
|
179
168
|
}
|
|
180
|
-
|
|
181
169
|
function transformForStar(size) {
|
|
182
170
|
switch (size) {
|
|
183
171
|
case Size.ExtraSmall:
|
|
184
|
-
return {
|
|
172
|
+
return {
|
|
173
|
+
...transformForDefault(size),
|
|
185
174
|
...dimensionAttrsFor(8),
|
|
186
175
|
y: '55%'
|
|
187
176
|
};
|
|
188
|
-
|
|
189
177
|
case Size.Small:
|
|
190
|
-
return {
|
|
178
|
+
return {
|
|
179
|
+
...transformForDefault(size),
|
|
191
180
|
...dimensionAttrsFor(24),
|
|
192
181
|
y: '55%'
|
|
193
182
|
};
|
|
194
|
-
|
|
195
183
|
case Size.Medium:
|
|
196
|
-
return {
|
|
184
|
+
return {
|
|
185
|
+
...transformForDefault(size),
|
|
197
186
|
...dimensionAttrsFor(44),
|
|
198
187
|
y: '55%'
|
|
199
188
|
};
|
|
200
|
-
|
|
201
189
|
case Size.Large:
|
|
202
|
-
return {
|
|
190
|
+
return {
|
|
191
|
+
...transformForDefault(size),
|
|
203
192
|
...dimensionAttrsFor(72),
|
|
204
193
|
y: '55%'
|
|
205
194
|
};
|
|
206
195
|
}
|
|
207
196
|
}
|
|
208
|
-
|
|
209
197
|
function transformForSquare(size) {
|
|
210
198
|
switch (size) {
|
|
211
199
|
case Size.ExtraSmall:
|
|
212
|
-
return {
|
|
200
|
+
return {
|
|
201
|
+
...transformForDefault(size),
|
|
213
202
|
...dimensionAttrsFor(60)
|
|
214
203
|
};
|
|
215
|
-
|
|
216
204
|
case Size.Small:
|
|
217
|
-
return {
|
|
205
|
+
return {
|
|
206
|
+
...transformForDefault(size),
|
|
218
207
|
...dimensionAttrsFor(108)
|
|
219
208
|
};
|
|
220
|
-
|
|
221
209
|
case Size.Medium:
|
|
222
|
-
return {
|
|
210
|
+
return {
|
|
211
|
+
...transformForDefault(size),
|
|
223
212
|
...dimensionAttrsFor(142)
|
|
224
213
|
};
|
|
225
|
-
|
|
226
214
|
case Size.Large:
|
|
227
|
-
return {
|
|
215
|
+
return {
|
|
216
|
+
...transformForDefault(size),
|
|
228
217
|
...dimensionAttrsFor(200)
|
|
229
218
|
};
|
|
230
219
|
}
|
|
231
220
|
}
|
|
232
|
-
|
|
233
221
|
function transformForCircle(size) {
|
|
234
222
|
switch (size) {
|
|
235
223
|
case Size.ExtraSmall:
|
|
236
|
-
return {
|
|
224
|
+
return {
|
|
225
|
+
...transformForDefault(size),
|
|
237
226
|
...dimensionAttrsFor(54)
|
|
238
227
|
};
|
|
239
|
-
|
|
240
228
|
case Size.Small:
|
|
241
|
-
return {
|
|
229
|
+
return {
|
|
230
|
+
...transformForDefault(size),
|
|
242
231
|
...dimensionAttrsFor(100)
|
|
243
232
|
};
|
|
244
|
-
|
|
245
233
|
case Size.Medium:
|
|
246
|
-
return {
|
|
234
|
+
return {
|
|
235
|
+
...transformForDefault(size),
|
|
247
236
|
...dimensionAttrsFor(132)
|
|
248
237
|
};
|
|
249
|
-
|
|
250
238
|
case Size.Large:
|
|
251
|
-
return {
|
|
239
|
+
return {
|
|
240
|
+
...transformForDefault(size),
|
|
252
241
|
...dimensionAttrsFor(180)
|
|
253
242
|
};
|
|
254
243
|
}
|
|
255
244
|
}
|
|
256
|
-
|
|
257
245
|
function transformForHexagon(size) {
|
|
258
246
|
switch (size) {
|
|
259
247
|
case Size.ExtraSmall:
|
|
260
|
-
return {
|
|
248
|
+
return {
|
|
249
|
+
...transformForDefault(size),
|
|
261
250
|
...dimensionAttrsFor(28)
|
|
262
251
|
};
|
|
263
|
-
|
|
264
252
|
case Size.Small:
|
|
265
|
-
return {
|
|
253
|
+
return {
|
|
254
|
+
...transformForDefault(size),
|
|
266
255
|
...dimensionAttrsFor(68)
|
|
267
256
|
};
|
|
268
|
-
|
|
269
257
|
case Size.Medium:
|
|
270
|
-
return {
|
|
258
|
+
return {
|
|
259
|
+
...transformForDefault(size),
|
|
271
260
|
...dimensionAttrsFor(100)
|
|
272
261
|
};
|
|
273
|
-
|
|
274
262
|
case Size.Large:
|
|
275
|
-
return {
|
|
263
|
+
return {
|
|
264
|
+
...transformForDefault(size),
|
|
276
265
|
...dimensionAttrsFor(160)
|
|
277
266
|
};
|
|
278
267
|
}
|
|
279
268
|
}
|
|
280
|
-
|
|
281
269
|
function transformForOctagon(size) {
|
|
282
270
|
switch (size) {
|
|
283
271
|
case Size.ExtraSmall:
|
|
284
|
-
return {
|
|
272
|
+
return {
|
|
273
|
+
...transformForDefault(size),
|
|
285
274
|
...dimensionAttrsFor(36)
|
|
286
275
|
};
|
|
287
|
-
|
|
288
276
|
case Size.Small:
|
|
289
|
-
return {
|
|
277
|
+
return {
|
|
278
|
+
...transformForDefault(size),
|
|
290
279
|
...dimensionAttrsFor(80)
|
|
291
280
|
};
|
|
292
|
-
|
|
293
281
|
case Size.Medium:
|
|
294
|
-
return {
|
|
282
|
+
return {
|
|
283
|
+
...transformForDefault(size),
|
|
295
284
|
...dimensionAttrsFor(110)
|
|
296
285
|
};
|
|
297
|
-
|
|
298
286
|
case Size.Large:
|
|
299
|
-
return {
|
|
287
|
+
return {
|
|
288
|
+
...transformForDefault(size),
|
|
300
289
|
...dimensionAttrsFor(180)
|
|
301
290
|
};
|
|
302
291
|
}
|
|
303
292
|
}
|
|
304
|
-
|
|
305
293
|
function transformForDiamond(size) {
|
|
306
294
|
switch (size) {
|
|
307
295
|
case Size.ExtraSmall:
|
|
308
|
-
return {
|
|
296
|
+
return {
|
|
297
|
+
...transformForDefault(size),
|
|
309
298
|
...dimensionAttrsFor(30)
|
|
310
299
|
};
|
|
311
|
-
|
|
312
300
|
case Size.Small:
|
|
313
|
-
return {
|
|
301
|
+
return {
|
|
302
|
+
...transformForDefault(size),
|
|
314
303
|
...dimensionAttrsFor(60)
|
|
315
304
|
};
|
|
316
|
-
|
|
317
305
|
case Size.Medium:
|
|
318
|
-
return {
|
|
306
|
+
return {
|
|
307
|
+
...transformForDefault(size),
|
|
319
308
|
...dimensionAttrsFor(80)
|
|
320
309
|
};
|
|
321
|
-
|
|
322
310
|
case Size.Large:
|
|
323
|
-
return {
|
|
311
|
+
return {
|
|
312
|
+
...transformForDefault(size),
|
|
324
313
|
...dimensionAttrsFor(120)
|
|
325
314
|
};
|
|
326
315
|
}
|
|
327
316
|
}
|
|
328
|
-
|
|
329
317
|
function transformForDefault(size) {
|
|
330
318
|
const dimensions = {
|
|
331
319
|
[Size.ExtraSmall]: 60,
|
|
@@ -339,11 +327,9 @@ function transformForDefault(size) {
|
|
|
339
327
|
...dimensionAttrsFor(dimensions[size])
|
|
340
328
|
};
|
|
341
329
|
}
|
|
342
|
-
|
|
343
330
|
function translationFor(width) {
|
|
344
331
|
return width / 2 * -1;
|
|
345
332
|
}
|
|
346
|
-
|
|
347
333
|
function dimensionAttrsFor(width) {
|
|
348
334
|
return {
|
|
349
335
|
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';
|
|
@@ -25,44 +26,41 @@ import { buildText, buildTextBackground, getContainerWidth, getContainerHeight }
|
|
|
25
26
|
import base64EncodedFont from './font';
|
|
26
27
|
export function buildSvg(settings) {
|
|
27
28
|
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
28
|
-
settings = {
|
|
29
|
+
settings = {
|
|
30
|
+
...DEFAULT_SETTINGS,
|
|
29
31
|
...settings
|
|
30
32
|
};
|
|
31
33
|
const mainContainer = buildSvgContainer(settings, options);
|
|
32
34
|
const shapeWrapper = buildSvgWrapper(settings);
|
|
33
|
-
|
|
34
35
|
if (!options.isPreview) {
|
|
35
36
|
const metadata = buildMetadata(settings);
|
|
36
37
|
mainContainer.appendChild(metadata);
|
|
37
38
|
}
|
|
38
|
-
|
|
39
39
|
const fillGroup = buildGroup(settings, {
|
|
40
40
|
fill: true
|
|
41
41
|
}); // The shape with the fill color
|
|
42
|
-
|
|
43
42
|
const borderGroup = buildGroup(settings); // The shape with the outline and image
|
|
44
|
-
|
|
45
43
|
const clipPath = buildClipPath(settings); // A clip path used to crop the image
|
|
46
|
-
|
|
47
44
|
const shape = buildShape(settings); // The actual path of the shape being built
|
|
48
|
-
|
|
49
45
|
const image = buildImage(settings); // The embedded image. Cropped by clipPath
|
|
46
|
+
|
|
50
47
|
// Don't append an image if none has been selected
|
|
51
48
|
// Also add image here so it sits beneath the outline,
|
|
52
49
|
// which is added below to the borderGroup
|
|
53
|
-
|
|
54
50
|
if (image) {
|
|
55
51
|
borderGroup.appendChild(image);
|
|
56
52
|
}
|
|
53
|
+
clipPath.appendChild(shape);
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
fillGroup.appendChild(shape.cloneNode(true)); // These are required to make the group have the right shape
|
|
55
|
+
// These are required to make the group have the right shape
|
|
56
|
+
fillGroup.appendChild(shape.cloneNode(true));
|
|
61
57
|
|
|
58
|
+
// These are required to make the group have the right shape
|
|
62
59
|
borderGroup.appendChild(clipPath.cloneNode(true));
|
|
63
|
-
borderGroup.appendChild(shape.cloneNode(true));
|
|
64
|
-
// sits behind the image and outline
|
|
60
|
+
borderGroup.appendChild(shape.cloneNode(true));
|
|
65
61
|
|
|
62
|
+
// Add fill group before the main group so the fill
|
|
63
|
+
// sits behind the image and outline
|
|
66
64
|
shapeWrapper.appendChild(fillGroup);
|
|
67
65
|
shapeWrapper.appendChild(borderGroup);
|
|
68
66
|
mainContainer.appendChild(shapeWrapper);
|
|
@@ -110,13 +108,11 @@ export function buildGroup(_ref) {
|
|
|
110
108
|
} = _ref;
|
|
111
109
|
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
112
110
|
const g = createSvgElement('g');
|
|
113
|
-
|
|
114
111
|
if (options.fill) {
|
|
115
112
|
g.setAttribute('fill', color || 'none');
|
|
116
113
|
} else if (outlineColor) {
|
|
117
114
|
g.setAttribute('stroke', outlineColor);
|
|
118
115
|
g.setAttribute('stroke-width', STROKE_WIDTH[outlineSize]);
|
|
119
116
|
}
|
|
120
|
-
|
|
121
117
|
return g;
|
|
122
118
|
}
|
|
@@ -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,36 +28,38 @@ export const statuses = {
|
|
|
27
28
|
LOADING: 'loading',
|
|
28
29
|
IDLE: 'idle'
|
|
29
30
|
};
|
|
30
|
-
|
|
31
31
|
const getImageNode = (editor, editing) => {
|
|
32
32
|
var _editor$selection;
|
|
33
|
-
|
|
34
33
|
// If the user is creating an icon rather then editing, no sense trying
|
|
35
34
|
// to get an existing SVG URL
|
|
36
35
|
if (!editing) return;
|
|
37
|
-
const selectedNode = editor === null || editor === void 0 ? void 0 : (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.getNode();
|
|
36
|
+
const selectedNode = editor === null || editor === void 0 ? void 0 : (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.getNode();
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
// No selection made, return
|
|
39
|
+
if (!selectedNode) return;
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
// The icon maker image is selected. return it
|
|
42
|
+
if (selectedNode.getAttribute(ICON_MAKER_ATTRIBUTE)) return selectedNode;
|
|
43
|
+
|
|
44
|
+
// The icon maker image element is not selected, but it's possible
|
|
42
45
|
// an element wrapping it is. Look for a icon maker image in the
|
|
43
46
|
// selection's children
|
|
47
|
+
const iconMaker = selectedNode.querySelector(`img[${ICON_MAKER_ATTRIBUTE}="true"]`);
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
// Icon maker still not found in the selection's children. Return
|
|
50
|
+
if (!iconMaker) return;
|
|
46
51
|
|
|
47
|
-
|
|
52
|
+
// Icon maker found in the selections children. Return it and set the
|
|
48
53
|
// editor's selection to it as well
|
|
49
|
-
|
|
50
54
|
editor.selection.select(iconMaker);
|
|
51
55
|
return iconMaker;
|
|
52
56
|
};
|
|
53
|
-
|
|
54
57
|
const buildMetadataUrl = (fileId, canvasOrigin) => {
|
|
55
58
|
// http://canvas.docker/api/v1/files/2169/icon_metadata
|
|
59
|
+
|
|
56
60
|
const downloadURL = new URL(`${canvasOrigin}/api/v1/files/${fileId}/icon_metadata`);
|
|
57
61
|
return downloadURL.toString();
|
|
58
62
|
};
|
|
59
|
-
|
|
60
63
|
export function useSvgSettings(editor, editing, canvasOrigin) {
|
|
61
64
|
const [settings, dispatch] = useReducer(svgSettingsReducer, defaultState);
|
|
62
65
|
const [status, setStatus] = useState(statuses.IDLE);
|
|
@@ -69,16 +72,16 @@ export function useSvgSettings(editor, editing, canvasOrigin) {
|
|
|
69
72
|
useEffect(() => {
|
|
70
73
|
const fetchSvgSettings = async () => {
|
|
71
74
|
if (!urlFromNode) return;
|
|
72
|
-
|
|
73
75
|
try {
|
|
74
76
|
var _urlFromNode$split$;
|
|
77
|
+
setStatus(statuses.LOADING);
|
|
75
78
|
|
|
76
|
-
|
|
79
|
+
// Parse out the file ID from something like
|
|
77
80
|
// /courses/1/files/3/preview?...
|
|
78
|
-
|
|
79
81
|
const fileId = (_urlFromNode$split$ = urlFromNode.split('files/')[1]) === null || _urlFromNode$split$ === void 0 ? void 0 : _urlFromNode$split$.split('/')[0];
|
|
80
|
-
const downloadUrl = buildMetadataUrl(fileId, canvasOrigin);
|
|
82
|
+
const downloadUrl = buildMetadataUrl(fileId, canvasOrigin);
|
|
81
83
|
|
|
84
|
+
// Download icon metadata. If no metadata found, return defaults
|
|
82
85
|
const response = await fetch(downloadUrl);
|
|
83
86
|
const metadata = await response.text();
|
|
84
87
|
if (!metadata) return;
|
|
@@ -86,28 +89,24 @@ export function useSvgSettings(editor, editing, canvasOrigin) {
|
|
|
86
89
|
const fileName = metadataJson.name.replace(/\.[^\.]+$/, '');
|
|
87
90
|
metadataJson.name = fileName;
|
|
88
91
|
metadataJson.originalName = fileName;
|
|
89
|
-
|
|
90
92
|
if (altText === '') {
|
|
91
93
|
metadataJson.isDecorative = true;
|
|
92
94
|
} else if (altText) {
|
|
93
95
|
metadataJson.alt = altText;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
+
}
|
|
96
97
|
|
|
98
|
+
// Include external details on metadata
|
|
97
99
|
if (customWidth && customHeight) {
|
|
98
100
|
metadataJson.externalWidth = customWidth;
|
|
99
101
|
metadataJson.externalHeight = customHeight;
|
|
100
102
|
}
|
|
101
|
-
|
|
102
103
|
if (customStyle) {
|
|
103
104
|
metadataJson.externalStyle = customStyle;
|
|
104
105
|
}
|
|
105
|
-
|
|
106
106
|
processMetadataForBackwardCompatibility(metadataJson);
|
|
107
107
|
const {
|
|
108
108
|
imageSettings
|
|
109
109
|
} = metadataJson;
|
|
110
|
-
|
|
111
110
|
if (imageSettings !== null && imageSettings !== void 0 && imageSettings.cropperSettings) {
|
|
112
111
|
const generatedSvg = await createCroppedImageSvg(imageSettings.cropperSettings, imageSettings.image);
|
|
113
112
|
metadataJson.embedImage = await convertFileToBase64(new Blob([generatedSvg.outerHTML], {
|
|
@@ -115,64 +114,58 @@ export function useSvgSettings(editor, editing, canvasOrigin) {
|
|
|
115
114
|
}));
|
|
116
115
|
} else {
|
|
117
116
|
metadataJson.embedImage = (imageSettings === null || imageSettings === void 0 ? void 0 : imageSettings.image) || defaultState.embedImage;
|
|
118
|
-
}
|
|
119
|
-
|
|
117
|
+
}
|
|
120
118
|
|
|
119
|
+
// settings found, return parsed results
|
|
121
120
|
dispatch(metadataJson);
|
|
122
121
|
setStatus(statuses.IDLE);
|
|
123
122
|
} catch (e) {
|
|
124
123
|
setStatus(statuses.ERROR);
|
|
125
124
|
}
|
|
126
|
-
};
|
|
127
|
-
|
|
125
|
+
};
|
|
128
126
|
|
|
127
|
+
// If we are editing rather than creating, fetch existing settings
|
|
129
128
|
if (editing) fetchSvgSettings();
|
|
130
129
|
}, [editor, editing, urlFromNode, canvasOrigin, altText, customWidth, customHeight, customStyle]);
|
|
131
130
|
return [settings, status, dispatch];
|
|
132
131
|
}
|
|
133
|
-
|
|
134
132
|
function processMetadataForBackwardCompatibility(metadataJson) {
|
|
135
133
|
var _metadataJson$imageSe, _metadataJson$imageSe2, _metadataJson$imageSe3, _metadataJson$imageSe4, _metadataJson$imageSe5, _metadataJson$imageSe6, _metadataJson$imageSe7, _metadataJson$imageSe8;
|
|
136
|
-
|
|
137
134
|
const icon = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe = metadataJson.imageSettings) === null || _metadataJson$imageSe === void 0 ? void 0 : _metadataJson$imageSe.icon;
|
|
138
135
|
const mode = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe2 = metadataJson.imageSettings) === null || _metadataJson$imageSe2 === void 0 ? void 0 : _metadataJson$imageSe2.mode;
|
|
139
|
-
|
|
140
136
|
if (mode === modes.singleColorImages.type && typeof icon === 'object') {
|
|
141
137
|
const foundIconId = iconsLabels[icon.label];
|
|
142
|
-
|
|
143
138
|
if (foundIconId) {
|
|
144
139
|
metadataJson.imageSettings.icon = foundIconId;
|
|
145
140
|
} else {
|
|
146
141
|
metadataJson.imageSettings = null;
|
|
147
142
|
}
|
|
148
|
-
}
|
|
149
|
-
// If that's the case we are copying it to the correct place
|
|
150
|
-
|
|
143
|
+
}
|
|
151
144
|
|
|
145
|
+
// On old icons we stored the original image inside cropper settings
|
|
146
|
+
// If that's the case we are copying it to the correct place
|
|
152
147
|
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
148
|
const imageSettingsImage = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe5 = metadataJson.imageSettings) === null || _metadataJson$imageSe5 === void 0 ? void 0 : _metadataJson$imageSe5.image;
|
|
154
149
|
const encodedImage = metadataJson === null || metadataJson === void 0 ? void 0 : metadataJson.encodedImage;
|
|
155
|
-
|
|
156
150
|
if (imageSettingsImage && cropperSettingsImage && imageSettingsImage !== cropperSettingsImage) {
|
|
157
151
|
metadataJson.imageSettings.image = cropperSettingsImage || imageSettingsImage || encodedImage || '';
|
|
158
152
|
delete metadataJson.imageSettings.cropperSettings.image;
|
|
159
|
-
}
|
|
160
|
-
|
|
153
|
+
}
|
|
161
154
|
|
|
155
|
+
// Removes old and unused encoded image fields from metadata
|
|
162
156
|
delete metadataJson.encodedImage;
|
|
163
157
|
delete metadataJson.encodedImageType;
|
|
164
|
-
delete metadataJson.encodedImageName;
|
|
158
|
+
delete metadataJson.encodedImageName;
|
|
165
159
|
|
|
160
|
+
// Cleans image settings if there is no image or icon
|
|
166
161
|
const imageSettingsIcon = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe6 = metadataJson.imageSettings) === null || _metadataJson$imageSe6 === void 0 ? void 0 : _metadataJson$imageSe6.icon;
|
|
167
|
-
|
|
168
162
|
if (!imageSettingsImage && !imageSettingsIcon) {
|
|
169
163
|
metadataJson.imageSettings = null;
|
|
170
|
-
}
|
|
171
|
-
|
|
164
|
+
}
|
|
172
165
|
|
|
166
|
+
// Replaces cropper settings' shape using icon's shape
|
|
173
167
|
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
168
|
const shape = metadataJson === null || metadataJson === void 0 ? void 0 : metadataJson.shape;
|
|
175
|
-
|
|
176
169
|
if (shape && cropperSettingsShape && shape !== cropperSettingsShape) {
|
|
177
170
|
metadataJson.imageSettings.cropperSettings.shape = shape;
|
|
178
171
|
}
|