@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,9 +15,8 @@
|
|
|
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
|
-
|
|
19
|
-
/* eslint-disable jest/valid-describe */
|
|
20
18
|
// our own imported describe function confuses eslint
|
|
19
|
+
|
|
21
20
|
import React from 'react';
|
|
22
21
|
import { LiveAnnouncer, LiveMessage } from 'react-aria-live';
|
|
23
22
|
import { Button, CloseButton, IconButton } from '@instructure/ui-buttons';
|
|
@@ -45,12 +44,11 @@ import checkNode from '../node-checker';
|
|
|
45
44
|
import formatMessage from '../../../../format-message';
|
|
46
45
|
import { clearIndicators } from '../utils/indicate';
|
|
47
46
|
import { getTrayHeight } from '../../shared/trayUtils';
|
|
48
|
-
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
47
|
+
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
49
48
|
|
|
49
|
+
// safari still doesn't support the standard api
|
|
50
50
|
const FS_CHANGEEVENT = document.exitFullscreen ? 'fullscreenchange' : 'webkitfullscreenchange';
|
|
51
|
-
|
|
52
51
|
const noop = () => {};
|
|
53
|
-
|
|
54
52
|
export default class Checker extends React.Component {
|
|
55
53
|
constructor() {
|
|
56
54
|
super(...arguments);
|
|
@@ -64,25 +62,22 @@ export default class Checker extends React.Component {
|
|
|
64
62
|
config: {},
|
|
65
63
|
showWhyPopover: false
|
|
66
64
|
};
|
|
67
|
-
|
|
68
65
|
this.onFullscreenChange = _event => {
|
|
69
66
|
this.selectCurrent();
|
|
70
67
|
};
|
|
71
|
-
|
|
72
68
|
this.updateFormState = _ref => {
|
|
73
69
|
let {
|
|
74
70
|
target
|
|
75
71
|
} = _ref;
|
|
76
72
|
this.setState(prevState => {
|
|
77
|
-
const formState = {
|
|
73
|
+
const formState = {
|
|
74
|
+
...prevState.formState
|
|
78
75
|
};
|
|
79
|
-
|
|
80
76
|
if (target.type === 'checkbox') {
|
|
81
77
|
formState[target.name] = target.checked;
|
|
82
78
|
} else {
|
|
83
79
|
formState[target.name] = target.value;
|
|
84
80
|
}
|
|
85
|
-
|
|
86
81
|
return {
|
|
87
82
|
formState,
|
|
88
83
|
formStateValid: this.formStateValid(formState)
|
|
@@ -90,7 +85,6 @@ export default class Checker extends React.Component {
|
|
|
90
85
|
});
|
|
91
86
|
};
|
|
92
87
|
}
|
|
93
|
-
|
|
94
88
|
componentDidMount() {
|
|
95
89
|
this.props.editor.on('Remove', _editor => {
|
|
96
90
|
this.setState({
|
|
@@ -100,7 +94,6 @@ export default class Checker extends React.Component {
|
|
|
100
94
|
});
|
|
101
95
|
});
|
|
102
96
|
}
|
|
103
|
-
|
|
104
97
|
componentDidUpdate(_prevProps, prevState) {
|
|
105
98
|
if (prevState.open !== this.state.open) {
|
|
106
99
|
if (this.state.open) {
|
|
@@ -110,13 +103,11 @@ export default class Checker extends React.Component {
|
|
|
110
103
|
}
|
|
111
104
|
}
|
|
112
105
|
}
|
|
113
|
-
|
|
114
106
|
setConfig(config) {
|
|
115
107
|
this.setState({
|
|
116
108
|
config
|
|
117
109
|
});
|
|
118
110
|
}
|
|
119
|
-
|
|
120
111
|
check(done) {
|
|
121
112
|
if (typeof done !== 'function') done = noop;
|
|
122
113
|
this.setState({
|
|
@@ -144,10 +135,8 @@ export default class Checker extends React.Component {
|
|
|
144
135
|
}
|
|
145
136
|
});
|
|
146
137
|
}
|
|
147
|
-
|
|
148
138
|
_check(done) {
|
|
149
139
|
const node = this.props.getBody();
|
|
150
|
-
|
|
151
140
|
const checkDone = errors => {
|
|
152
141
|
this.setState({
|
|
153
142
|
errorIndex: 0,
|
|
@@ -158,43 +147,34 @@ export default class Checker extends React.Component {
|
|
|
158
147
|
done();
|
|
159
148
|
});
|
|
160
149
|
};
|
|
161
|
-
|
|
162
150
|
checkNode(node, checkDone, this.state.config, this.props.additionalRules);
|
|
163
151
|
}
|
|
164
|
-
|
|
165
152
|
firstError() {
|
|
166
153
|
if (this.state.errors.length > 0) {
|
|
167
154
|
this.setErrorIndex(0);
|
|
168
155
|
}
|
|
169
156
|
}
|
|
170
|
-
|
|
171
157
|
nextError() {
|
|
172
158
|
const next = (this.state.errorIndex + 1) % this.state.errors.length;
|
|
173
159
|
this.setErrorIndex(next);
|
|
174
160
|
}
|
|
175
|
-
|
|
176
161
|
prevError() {
|
|
177
162
|
const len = this.state.errors.length;
|
|
178
163
|
const prev = (len + this.state.errorIndex - 1) % len;
|
|
179
164
|
this.setErrorIndex(prev);
|
|
180
165
|
}
|
|
181
|
-
|
|
182
166
|
setErrorIndex(errorIndex) {
|
|
183
167
|
this.onLeaveError();
|
|
184
|
-
|
|
185
168
|
if (errorIndex >= this.state.errors.length) {
|
|
186
169
|
errorIndex = 0;
|
|
187
170
|
}
|
|
188
|
-
|
|
189
171
|
this.setState({
|
|
190
172
|
errorIndex
|
|
191
173
|
}, () => this.selectCurrent());
|
|
192
174
|
}
|
|
193
|
-
|
|
194
175
|
selectCurrent() {
|
|
195
176
|
clearIndicators(this.props.editor.dom.doc);
|
|
196
177
|
const errorNode = this.errorNode();
|
|
197
|
-
|
|
198
178
|
if (errorNode) {
|
|
199
179
|
this.getFormState();
|
|
200
180
|
dom.select(errorNode);
|
|
@@ -202,44 +182,35 @@ export default class Checker extends React.Component {
|
|
|
202
182
|
this.firstError();
|
|
203
183
|
}
|
|
204
184
|
}
|
|
205
|
-
|
|
206
185
|
error() {
|
|
207
186
|
return this.state.errors[this.state.errorIndex];
|
|
208
187
|
}
|
|
209
|
-
|
|
210
188
|
errorNode() {
|
|
211
189
|
const error = this.error();
|
|
212
190
|
return error && error.node;
|
|
213
191
|
}
|
|
214
|
-
|
|
215
192
|
errorRootNode() {
|
|
216
193
|
const rule = this.errorRule();
|
|
217
194
|
const rootNode = rule && rule.rootNode && rule.rootNode(this.errorNode());
|
|
218
195
|
return rootNode || this.errorNode();
|
|
219
196
|
}
|
|
220
|
-
|
|
221
197
|
updateErrorNode(elem) {
|
|
222
198
|
const error = this.error();
|
|
223
|
-
|
|
224
199
|
if (error) {
|
|
225
200
|
error.node = elem;
|
|
226
201
|
}
|
|
227
202
|
}
|
|
228
|
-
|
|
229
203
|
errorRule() {
|
|
230
204
|
const error = this.error();
|
|
231
205
|
return error && error.rule;
|
|
232
206
|
}
|
|
233
|
-
|
|
234
207
|
errorMessage() {
|
|
235
208
|
const rule = this.errorRule();
|
|
236
209
|
return rule && rule.message();
|
|
237
210
|
}
|
|
238
|
-
|
|
239
211
|
getFormState() {
|
|
240
212
|
const rule = this.errorRule();
|
|
241
213
|
const node = this.errorNode();
|
|
242
|
-
|
|
243
214
|
if (rule && node) {
|
|
244
215
|
this.setState({
|
|
245
216
|
formState: rule.data(node),
|
|
@@ -247,39 +218,30 @@ export default class Checker extends React.Component {
|
|
|
247
218
|
});
|
|
248
219
|
}
|
|
249
220
|
}
|
|
250
|
-
|
|
251
221
|
formStateValid(formState) {
|
|
252
222
|
formState = formState || this.state.formState;
|
|
253
223
|
let node = this.tempNode(true);
|
|
254
224
|
const rule = this.errorRule();
|
|
255
|
-
|
|
256
225
|
if (!node || !rule) {
|
|
257
226
|
return false;
|
|
258
227
|
}
|
|
259
|
-
|
|
260
228
|
node = rule.update(node, formState);
|
|
261
|
-
|
|
262
229
|
if (this._tempNode === this._tempTestNode) {
|
|
263
230
|
this._tempNode = node;
|
|
264
231
|
}
|
|
265
|
-
|
|
266
232
|
this._tempTestNode = node;
|
|
267
233
|
return rule.test(node);
|
|
268
234
|
}
|
|
269
|
-
|
|
270
235
|
fixIssue() {
|
|
271
236
|
const rule = this.errorRule();
|
|
272
237
|
const node = this.errorNode();
|
|
273
|
-
|
|
274
238
|
if (rule && node) {
|
|
275
239
|
this.removeTempNode();
|
|
276
240
|
rule.update(node, this.state.formState);
|
|
277
241
|
this.updateErrorNode(node);
|
|
278
|
-
|
|
279
242
|
if (this._closeButtonRef) {
|
|
280
243
|
this._closeButtonRef.focus();
|
|
281
244
|
}
|
|
282
|
-
|
|
283
245
|
const errorIndex = this.state.errorIndex;
|
|
284
246
|
this.check(() => {
|
|
285
247
|
this.setErrorIndex(errorIndex);
|
|
@@ -287,23 +249,18 @@ export default class Checker extends React.Component {
|
|
|
287
249
|
});
|
|
288
250
|
}
|
|
289
251
|
}
|
|
290
|
-
|
|
291
252
|
newTempRootNode(rootNode) {
|
|
292
253
|
const newTempRootNode = rootNode.cloneNode(true);
|
|
293
254
|
const path = dom.pathForNode(rootNode, this.errorNode());
|
|
294
255
|
this._tempTestNode = dom.nodeByPath(newTempRootNode, path);
|
|
295
256
|
return newTempRootNode;
|
|
296
257
|
}
|
|
297
|
-
|
|
298
258
|
tempNode() {
|
|
299
259
|
let refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
300
|
-
|
|
301
260
|
if (!this._tempNode || refresh) {
|
|
302
261
|
const rootNode = this.errorRootNode();
|
|
303
|
-
|
|
304
262
|
if (rootNode) {
|
|
305
263
|
const newTempRtNode = this.newTempRootNode(rootNode);
|
|
306
|
-
|
|
307
264
|
if (refresh && this._tempNode) {
|
|
308
265
|
const parent = this._tempNode.parentNode;
|
|
309
266
|
parent.insertBefore(newTempRtNode, this._tempNode);
|
|
@@ -313,17 +270,13 @@ export default class Checker extends React.Component {
|
|
|
313
270
|
parent.insertBefore(newTempRtNode, rootNode);
|
|
314
271
|
parent.removeChild(rootNode);
|
|
315
272
|
}
|
|
316
|
-
|
|
317
273
|
this._tempNode = newTempRtNode;
|
|
318
274
|
}
|
|
319
275
|
}
|
|
320
|
-
|
|
321
276
|
return this._tempTestNode;
|
|
322
277
|
}
|
|
323
|
-
|
|
324
278
|
removeTempNode() {
|
|
325
279
|
const node = this.errorRootNode();
|
|
326
|
-
|
|
327
280
|
if (this._tempNode && node) {
|
|
328
281
|
const parent = this._tempNode.parentNode;
|
|
329
282
|
parent.insertBefore(node, this._tempNode);
|
|
@@ -332,11 +285,9 @@ export default class Checker extends React.Component {
|
|
|
332
285
|
this._tempTestNode = null;
|
|
333
286
|
}
|
|
334
287
|
}
|
|
335
|
-
|
|
336
288
|
onLeaveError() {
|
|
337
289
|
this.removeTempNode();
|
|
338
290
|
}
|
|
339
|
-
|
|
340
291
|
handleClose() {
|
|
341
292
|
this.onLeaveError();
|
|
342
293
|
clearIndicators(this.props.editor.dom.doc);
|
|
@@ -346,7 +297,6 @@ export default class Checker extends React.Component {
|
|
|
346
297
|
this.props.onClose();
|
|
347
298
|
});
|
|
348
299
|
}
|
|
349
|
-
|
|
350
300
|
render() {
|
|
351
301
|
const rule = this.errorRule();
|
|
352
302
|
const issueNumberMessage = formatMessage('Issue { num }/{ total }', {
|
|
@@ -482,10 +432,8 @@ export default class Checker extends React.Component {
|
|
|
482
432
|
margin: "medium auto"
|
|
483
433
|
}))))));
|
|
484
434
|
}
|
|
485
|
-
|
|
486
435
|
renderField(f) {
|
|
487
436
|
const disabled = !!f.disabledIf && f.disabledIf(this.state.formState);
|
|
488
|
-
|
|
489
437
|
switch (true) {
|
|
490
438
|
case !!f.options:
|
|
491
439
|
return /*#__PURE__*/React.createElement(SimpleSelect, {
|
|
@@ -506,7 +454,6 @@ export default class Checker extends React.Component {
|
|
|
506
454
|
id: o[0],
|
|
507
455
|
value: o[0]
|
|
508
456
|
}, o[1])));
|
|
509
|
-
|
|
510
457
|
case f.checkbox:
|
|
511
458
|
return /*#__PURE__*/React.createElement(Checkbox, {
|
|
512
459
|
label: f.label,
|
|
@@ -515,7 +462,6 @@ export default class Checker extends React.Component {
|
|
|
515
462
|
onChange: this.updateFormState,
|
|
516
463
|
disabled: disabled
|
|
517
464
|
});
|
|
518
|
-
|
|
519
465
|
case f.color:
|
|
520
466
|
return /*#__PURE__*/React.createElement(ColorField, {
|
|
521
467
|
label: f.label,
|
|
@@ -524,7 +470,6 @@ export default class Checker extends React.Component {
|
|
|
524
470
|
onChange: this.updateFormState,
|
|
525
471
|
key: this.state.formState.id
|
|
526
472
|
});
|
|
527
|
-
|
|
528
473
|
case f.textarea:
|
|
529
474
|
return /*#__PURE__*/React.createElement(TextArea, {
|
|
530
475
|
label: f.label,
|
|
@@ -533,13 +478,11 @@ export default class Checker extends React.Component {
|
|
|
533
478
|
onChange: this.updateFormState,
|
|
534
479
|
disabled: disabled
|
|
535
480
|
});
|
|
536
|
-
|
|
537
481
|
case f.alert:
|
|
538
482
|
return this.state.formState.action === 'elem-only' && /*#__PURE__*/React.createElement(Alert, {
|
|
539
483
|
name: f.dataKey,
|
|
540
484
|
variant: f.variant
|
|
541
485
|
}, f.message);
|
|
542
|
-
|
|
543
486
|
default:
|
|
544
487
|
return /*#__PURE__*/React.createElement(TextInput, {
|
|
545
488
|
renderLabel: f.label,
|
|
@@ -550,7 +493,6 @@ export default class Checker extends React.Component {
|
|
|
550
493
|
});
|
|
551
494
|
}
|
|
552
495
|
}
|
|
553
|
-
|
|
554
496
|
}
|
|
555
497
|
Checker.defaultProps = {
|
|
556
498
|
additionalRules: [],
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
import { ColorWrap, Saturation, Hue, Alpha } from 'react-color/lib/components/common';
|
|
20
21
|
import Pointer from './pointer';
|
|
21
22
|
import PointerCircle from 'react-color/lib/components/photoshop/PhotoshopPointerCircle';
|
|
22
|
-
|
|
23
23
|
function ColorPicker(props) {
|
|
24
24
|
return /*#__PURE__*/React.createElement("div", {
|
|
25
25
|
"data-testid": props['data-testid']
|
|
@@ -55,5 +55,4 @@ function ColorPicker(props) {
|
|
|
55
55
|
pointer: Pointer
|
|
56
56
|
}))));
|
|
57
57
|
}
|
|
58
|
-
|
|
59
58
|
export default ColorWrap(ColorPicker);
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
export default function PlaceholderSVG() {
|
|
20
21
|
return /*#__PURE__*/React.createElement("svg", {
|
|
@@ -15,22 +15,19 @@
|
|
|
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 * as dom from './utils/dom';
|
|
19
20
|
import rules from './rules';
|
|
20
21
|
export default function checkNode(node, done) {
|
|
21
22
|
let config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
22
23
|
let additionalRules = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
23
|
-
|
|
24
24
|
if (!node) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
27
|
const errors = [];
|
|
29
|
-
|
|
30
28
|
const childNodeCheck = child => {
|
|
31
29
|
if (child.hasAttribute('data-ignore-a11y-check')) return;
|
|
32
30
|
const composedRules = rules.concat(additionalRules);
|
|
33
|
-
|
|
34
31
|
for (const rule of composedRules) {
|
|
35
32
|
// eslint-disable-next-line promise/catch-or-return
|
|
36
33
|
Promise.resolve(rule.test(child, config)).then(result => {
|
|
@@ -43,12 +40,10 @@ export default function checkNode(node, done) {
|
|
|
43
40
|
});
|
|
44
41
|
}
|
|
45
42
|
};
|
|
46
|
-
|
|
47
43
|
const checkDone = () => {
|
|
48
44
|
if (typeof done === 'function') {
|
|
49
45
|
done(errors);
|
|
50
46
|
}
|
|
51
47
|
};
|
|
52
|
-
|
|
53
48
|
dom.walk(node, childNodeCheck, checkDone);
|
|
54
49
|
}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React from 'react';
|
|
19
20
|
import ReactDOM from 'react-dom';
|
|
20
21
|
import Checker from './components/checker';
|
|
@@ -37,19 +38,16 @@ tinymce.create('tinymce.plugins.AccessibilityChecker', {
|
|
|
37
38
|
triggerElementId,
|
|
38
39
|
onFixError
|
|
39
40
|
} = _ref;
|
|
40
|
-
|
|
41
41
|
if (!isCheckerOpen) {
|
|
42
|
-
ReactDOM.render(
|
|
42
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(Checker, {
|
|
43
43
|
getBody: ed.getBody.bind(ed),
|
|
44
44
|
editor: ed,
|
|
45
45
|
additionalRules: additionalRules,
|
|
46
46
|
mountNode: mountNode,
|
|
47
47
|
onClose: () => {
|
|
48
48
|
isCheckerOpen = false;
|
|
49
|
-
|
|
50
49
|
if (triggerElementId) {
|
|
51
50
|
var _button$;
|
|
52
|
-
|
|
53
51
|
const button = document.querySelectorAll(`[data-btn-id=${triggerElementId}]`);
|
|
54
52
|
(_button$ = button[0]) === null || _button$ === void 0 ? void 0 : _button$.focus();
|
|
55
53
|
}
|
|
@@ -82,15 +80,14 @@ tinymce.create('tinymce.plugins.AccessibilityChecker', {
|
|
|
82
80
|
icon: 'a11y'
|
|
83
81
|
});
|
|
84
82
|
}
|
|
83
|
+
});
|
|
85
84
|
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
// Register plugin
|
|
88
86
|
tinymce.PluginManager.add('a11y_checker', tinymce.plugins.AccessibilityChecker);
|
|
89
87
|
export function getInstance(cb) {
|
|
90
88
|
if (instance != null) {
|
|
91
89
|
return cb(instance);
|
|
92
90
|
}
|
|
93
|
-
|
|
94
91
|
pendingInstanceCallbacks.push(cb);
|
|
95
92
|
}
|
|
96
93
|
export function setLocale(locale) {
|
|
@@ -15,59 +15,46 @@
|
|
|
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
|
-
import formatMessage from '../../../../format-message';
|
|
19
18
|
|
|
19
|
+
import formatMessage from '../../../../format-message';
|
|
20
20
|
const shouldMergeAnchors = (elem1, elem2) => {
|
|
21
21
|
if (!elem1 || !elem2 || elem1.tagName !== 'A' || elem2.tagName !== 'A') {
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
24
|
return elem1.getAttribute('href') === elem2.getAttribute('href');
|
|
26
25
|
};
|
|
27
|
-
|
|
28
26
|
const notWhitespace = node => {
|
|
29
27
|
return node.nodeType !== Node.TEXT_NODE || node.textContent.match(/\S/);
|
|
30
28
|
};
|
|
31
|
-
|
|
32
29
|
const onlyChild = parent => {
|
|
33
30
|
const child = parent.firstElementChild;
|
|
34
|
-
|
|
35
31
|
if (!child) {
|
|
36
32
|
return null;
|
|
37
33
|
}
|
|
38
|
-
|
|
39
34
|
if ([...parent.childNodes].filter(notWhitespace).length > 1) {
|
|
40
35
|
return null;
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
return child;
|
|
44
38
|
};
|
|
45
|
-
|
|
46
39
|
const solitaryDescendantImage = link => {
|
|
47
40
|
let parent = link;
|
|
48
41
|
let child = onlyChild(parent);
|
|
49
|
-
|
|
50
42
|
while (child) {
|
|
51
43
|
if (child.tagName === 'IMG') {
|
|
52
44
|
return child;
|
|
53
45
|
}
|
|
54
|
-
|
|
55
46
|
parent = child;
|
|
56
47
|
child = onlyChild(parent);
|
|
57
48
|
}
|
|
58
|
-
|
|
59
49
|
return null;
|
|
60
50
|
};
|
|
61
|
-
|
|
62
51
|
const normalizeText = text => {
|
|
63
52
|
// normalize whitespace and trim leading and trailing whitespace
|
|
64
53
|
return text.replace(/\s+/g, ' ').trim();
|
|
65
54
|
};
|
|
66
|
-
|
|
67
55
|
const descendantImageWithRedundantAltText = (left, right) => {
|
|
68
56
|
const leftImage = solitaryDescendantImage(left);
|
|
69
57
|
const rightImage = solitaryDescendantImage(right);
|
|
70
|
-
|
|
71
58
|
if (leftImage && !rightImage && normalizeText(leftImage.getAttribute('alt')) === normalizeText(right.textContent)) {
|
|
72
59
|
return leftImage;
|
|
73
60
|
} else if (rightImage && !leftImage && normalizeText(rightImage.getAttribute('alt')) === normalizeText(left.textContent)) {
|
|
@@ -76,18 +63,14 @@ const descendantImageWithRedundantAltText = (left, right) => {
|
|
|
76
63
|
return null;
|
|
77
64
|
}
|
|
78
65
|
};
|
|
79
|
-
|
|
80
66
|
export default {
|
|
81
67
|
id: 'adjacent-links',
|
|
82
|
-
|
|
83
68
|
test(elem) {
|
|
84
69
|
if (elem.tagName != 'A') {
|
|
85
70
|
return true;
|
|
86
71
|
}
|
|
87
|
-
|
|
88
72
|
return !shouldMergeAnchors(elem, elem.nextElementSibling);
|
|
89
73
|
},
|
|
90
|
-
|
|
91
74
|
data: _elem => {
|
|
92
75
|
return {
|
|
93
76
|
combine: false
|
|
@@ -98,30 +81,24 @@ export default {
|
|
|
98
81
|
checkbox: true,
|
|
99
82
|
dataKey: 'combine'
|
|
100
83
|
}],
|
|
101
|
-
|
|
102
84
|
update(elem, data) {
|
|
103
85
|
const rootElem = elem.parentNode;
|
|
104
|
-
|
|
105
86
|
if (data.combine) {
|
|
106
|
-
const next = elem.nextElementSibling;
|
|
87
|
+
const next = elem.nextElementSibling;
|
|
107
88
|
|
|
89
|
+
// https://www.w3.org/TR/WCAG20-TECHS/H2.html
|
|
108
90
|
const image = descendantImageWithRedundantAltText(elem, next);
|
|
109
|
-
|
|
110
91
|
if (image) {
|
|
111
92
|
image.setAttribute('alt', '');
|
|
112
93
|
}
|
|
113
|
-
|
|
114
94
|
rootElem.removeChild(next);
|
|
115
95
|
elem.innerHTML += ` ${next.innerHTML}`;
|
|
116
96
|
}
|
|
117
|
-
|
|
118
97
|
return elem;
|
|
119
98
|
},
|
|
120
|
-
|
|
121
99
|
rootNode(elem) {
|
|
122
100
|
return elem.parentNode;
|
|
123
101
|
},
|
|
124
|
-
|
|
125
102
|
message: () => formatMessage('Adjacent links with the same URL should be a single link.'),
|
|
126
103
|
why: () => formatMessage('Keyboards navigate to links using the Tab key. Two adjacent links that direct to the same destination can be confusing to keyboard users.'),
|
|
127
104
|
link: 'https://www.w3.org/TR/WCAG20-TECHS/H2.html',
|